%RED% This manual is under construction! %ENDCOLOR% ---++ Table of Contents %TOC% ---++ Introduction ---++ Using a library At the command-line, or in Automake. ---+++ Using =strc= at the command-line module foo imports lib strategies ... module foo imports liblib strategies ... strc -i foo.str -la stratego-lib ---+++ Using AutoXT and Automake Libtool, Automake and AutoXT make separate compilation in Makefiles almost trivial. Use libtool for linking. * Invoking =libtoolize= or =glibtoolize= (MacOS X) in =bootstrap= * Add =AC_PROG_LIBTOOL= to =configur.ac= Libtool will add the path of a dynamic library to the search path in the executable. If you don't use Libtool, then you might need to set the =LD_LIBRARY_PATH= environment variable. For the separately compiled SSL =Makefile.xt= defines the variable =SSL_LIBS=. All program: LDADD += $(SSL_LIBS) Just for the program foo: foo_LDADD = $(SSL_LIBS) Other libraries: use =-L= and =-l=. ---++ Creating your own library module mod imports liblib strategies ... ---+++ Producing the C code The Stratego Compiler strc can be used now to generate a library from a module file.str with the command strc -i mod.str -c -o libmod.rtee --library This produces three files: * libmod.c * libmod.str * libmod.rtree The first is the C implementation of the closure of =mod.str=. It provides C functions for all user-defined strategies, and static C functions for strategies generated at compile-time. The last two are the concrete syntax and abstract syntax files for a Stratego module with external definitions for all strategies defined in =mod.str= and imported modules. It is now possible to import libmod in another Stratego program, instead of mod. Note that =libmod.str= is produced mainly for documentation, =libmod.rtree= should be used to import. This is done automatically by the compiler as long as the file is present. Note that no modules from the 'library' should be imported in the program via another path. This will lead to doubly defined strategies; it is not allowed to extend external definitions. ---+++ Compile and link to a library The C program =libmod.c= can be compiled to an object file =libmod.o= and to a static (=liblibmod.a=) or shared (=liblibmod.so=) library. This should be done in a makefile; strc does not deal with C compilation of libraries. Static linking of the libraries thus produced may actually lead to larger executables since no unused-function-removal is performed on the library (for obvious reasons). Shared libraries are the solution here to save diskspace. This can be achieved by proper use of libtool in the buildenvironment; again strc does not provide support for this. Compiling and linking a library using Libtool and Autmake is very easy. Basically, the only thing you need to do is to declare that you want to have a library: pkglib_LTLIBRARIES = libmod.la pkgdata_DATA = libmod.rtree liblibmod_la_SOURCES = libmod.c AM_CPPFLAGS = -I$(SRTS)/include -I$(ATERM)/include libmod.c : $(STRC)/bin/strc -c --library -i ./mod.str -o libmod.rtree -- Main.MartKolthof - 23 Jun 2005