Copyright (C) 2000-2012 |
GNU Info (guile.info)A Sample Guile Main ProgramA Sample Guile Main Program --------------------------- Here is `simple-guile.c', source code for a `main' and an `inner_main' function that will produce a complete Guile interpreter. /* simple-guile.c --- how to start up the Guile interpreter from C code. */ /* Get declarations for all the scm_ functions. */ #include <libguile.h> static void inner_main (void *closure, int argc, char **argv) { /* module initializations would go here */ scm_shell (argc, argv); } int main (int argc, char **argv) { scm_boot_guile (argc, argv, inner_main, 0); return 0; /* never reached */ } The `main' function calls `scm_boot_guile' to initialize Guile, passing it `inner_main'. Once `scm_boot_guile' is ready, it invokes `inner_main', which calls `scm_shell' to process the command-line arguments in the usual way. Here is a Makefile which you can use to compile the above program. # Use GCC, if you have it installed. CC=gcc # Tell the C compiler where to find <libguile.h> and -lguile. CFLAGS=-I/usr/local/include -L/usr/local/lib # Include -lqt and -lrx if they are present on your system. LIBS=-lguile -lqt -lrx -lm simple-guile: simple-guile.o ${CC} ${CFLAGS} simple-guile.o ${LIBS} -o simple-guile simple-guile.o: simple-guile.c ${CC} -c ${CFLAGS} simple-guile.c If you are using the GNU Autoconf package to make your application more portable, Autoconf will settle many of the details in the Makefile above automatically, making it much simpler and more portable; we recommend using Autoconf with Guile. Here is a `configure.in' file for `simple-guile', which Autoconf can use as a template to generate a `configure' script: AC_INIT(simple-guile.c) # Find a C compiler. AC_PROG_CC # Check for libraries. AC_CHECK_LIB(m, sin) AC_CHECK_LIB(rx, regcomp) AC_CHECK_LIB(qt, main) AC_CHECK_LIB(guile, scm_boot_guile) # Generate a Makefile, based on the results. AC_OUTPUT(Makefile) Here is a `Makefile.in' template, from which the `configure' script produces a Makefile customized for the host system: # The configure script fills in these values. CC=@CC@ CFLAGS=@CFLAGS@ LIBS=@LIBS@ simple-guile: simple-guile.o ${CC} ${CFLAGS} simple-guile.o ${LIBS} -o simple-guile simple-guile.o: simple-guile.c ${CC} -c ${CFLAGS} simple-guile.c The developer should use Autoconf to generate the `configure' script from the `configure.in' template, and distribute `configure' with the application. Here's how a user might go about building the application: $ ls Makefile.in configure* configure.in simple-guile.c $ ./configure creating cache ./config.cache checking for gcc... gcc checking whether the C compiler (gcc ) works... yes checking whether the C compiler (gcc ) is a cross-compiler... no checking whether we are using GNU C... yes checking whether gcc accepts -g... yes checking for sin in -lm... yes checking for regcomp in -lrx... yes checking for main in -lqt... yes checking for scm_boot_guile in -lguile... yes updating cache ./config.cache creating ./config.status creating Makefile $ make gcc -c -g -O2 simple-guile.c gcc -g -O2 simple-guile.o -lguile -lqt -lrx -lm -o simple-guile $ ./simple-guile guile> (+ 1 2 3) 6 guile> (getpwnam "jimb") #("jimb" "83Z7d75W2tyJQ" 4008 10 "Jim Blandy" "/u/jimb" "/usr/local/bin/bash") guile> (exit) $ automatically generated by info2www version 1.2.2.9 |