---++ Creating a Stratego/XT project the simple way
The easiest way to set up a working Stratego/XT project is to use the Create-a-Project tool called =crap=, available in the [[http://releases.strategoxt.org/strategoxt-utils/strategoxt-utils-unstable/][strategoxt-utils]] package.
Once installed, creating a new project =p0= is as easy as one line:
$ crap --new-project p0
This will generate an standard GNU Autotools-based build system, including with a minimal example (=src/xmpl.str=):
p0/
Makefile.am
README.Developer
README
AUTHORS
bootstrap
p0.spec.in
NEWS
p0.pc.in
configure.ac
ChangeLog
xmpl/
Makefile.am
syn/
Makefile.am
tests/
Makefile.am
src/
Makefile.am
xmpl.str
The project is ready to be compiled,
$ ./bootstrap
$ ./configure --prefix=$HOME/apps/p0
$ make all
installed,
$ make install
and executed:
$ echo "foo" | $HOME/apps/p0/bin/xmpl
Hello, World!
(The example is a transformation component using =io-wrap= -- it takes a term and spits out the string ="Hello, World!"=.)
---+++ Adding project dependencies
Most non-trivial Stratego/XT projects rely on pre-existing libraries and tools, such as one of the many language parsers available for Stratego/XT. Using the =--deps= switch, you can add the necessary lines to the =configure.ac= file as well as the appropriate include switches to each =Makefile= automatically:
$ crap --deps java-front,dryad --new-project p0
The above will create the project =p0= with =XT_USE_JAVA_FRONT= and =XT_USE_DRYAD= added to your configure.ac, plus the necessary =-I=, =-L= and =-l= flags throughout each generated =Makefile=.
It is possible to list the available dependencies which are addable to your project using the =--list-available-providers= switch:
$ crap --list-available-providers
This would give a list looking something like this:
dryad
stratego-aterm
stratego-tool-doc
stratego-sglr
stratego-xtc
stratego-gpp
stratego-lib
c-tools
stratego-sdf
java-front
stratego-rtg
Beware: The dependency/provider system will change in future versions of =crap=.
---+++ Adding pre-made syntax fragments
=crap= comes with a small (but growing) collection of syntax modules that may freely be used in your project. This might save you from a lot of boring boilerplate code when defining a new language. To add a basic definition of whitespaces and integer literals to your project, do:
$ crap --create-project p0 --syntax-modules integer-literals,whitespace
To list the available syntax modules in your version of =crap=, use the =--list-syntax-modules= switch:
$ crap --list-syntax-modules
It will return a list on the form:
floating-point-literals
integer-literals
whitespace
---+++ XTC support
There is some basic support for setting up a build of XTC components using =crap=, using the =--xtc= switch:
$ crap --xtc --new-project p0
The above will create the following =src/= directory layout and content:
src/
Makefile.am
xtc/
Makefile.am
xtcxmpl.str
The =xtcxmpl= will be compiled against =libstratego-xtc=. Upon installation, it will registered as an XTC component and placed in =${prefix}/libexec=.
---+++ Making libraries
Building libraries with Stratego requires a fair bit build setup. This is done automatically for you using the =--library= switch:
$ crap --library --new-project p0
This will create the following =src/= directory layout and content:
src/
Makefile.am
lib/
Makefile.am
def-libxmpl.str
xmpl/
foo.str
Upon compilation, the files =libxmpl.str=, =libxmpl.rtree=, =libxmpl.ctree= and =libxmpl.so= (plus auxiliary libtool files) are generated. The are all installed into =${prefix}/share= (=.ctree=, =.rtree=) and =${prefix}/lib= (=.so=) as is normal for Stratego libraries.
---+++ Working with Spoofax
If you are developing with [[http://www.spoofax.org][Spoofax]], you can generate the necessary Eclipse files (=.project=) as part of the project creating using the =--eclipse= switch:
$ crap --eclipse --new-project p0
---+++ Generation source code documentation
Source code documentation, Javadoc-style, can be generated from Stratego code using the XDoc tool. By adding the =--xdoc= switch, the build system will be set up to generate source code documentation in the =doc/api= directory:
$ crap --xdoc --new-project p0
This will add a =doc/= directory and an appropriate =Makefile=.
doc/
Makefile.am
---+++ Questions? Bugs?
If you have questions, please post them to the [[https://mail.cs.uu.nl/mailman/listinfo/stratego][Stratego mailinglist]]. Bugs are best reported using our [[https://bugs.strategoxt.org][issue tracker]].
-- Main.KarlTrygveKalleberg - 23 May 2008