DOC HOME SITE MAP MAN PAGES GNU INFO SEARCH
 

(guile.info.gz) A Sample Guile Main Program

Info Catalog (guile.info.gz) Guile Initialization Functions (guile.info.gz) Linking Programs With Guile
 
 5.3.2 A 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.
 It uses `guile-config' to learn about the necessary compiler and linker
 flags.
      # Use GCC, if you have it installed.
      CC=gcc
 
      # Tell the C compiler where to find <libguile.h>
      CFLAGS=`guile-config compile`
 
      # Tell the linker what libraries to use and where to find them.
      LIBS=`guile-config link`
 
      simple-guile: simple-guile.o
              ${CC} 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.  Guile also provides the
 `GUILE_FLAGS' macro for autoconf that performs all necessary checks.
 Here is a `configure.in' file for `simple-guile' that uses this macro.
 Autoconf can use as this file as template to generate a `configure'
 script.  In order for Autoconf to find the `GUILE_FLAGS' macro, you
 will need to run `aclocal' first.  This is not really Guile specific,
 so you should refer to the Autoconf documentation REFFIXME when in
 doubt.
      AC_INIT(simple-guile.c)
 
      # Find a C compiler.
      AC_PROG_CC
 
      # Check for Guile
      GUILE_FLAGS
 
      # 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=@GUILE_CFLAGS@
      LIBS=@GUILE_LDFLAGS@
 
      simple-guile: simple-guile.o
              ${CC} 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... (cached) 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... (cached) yes
      checking whether gcc accepts -g... (cached) yes
      checking for Guile... yes
      creating ./config.status
      creating Makefile
      $ make
      gcc -c -I/usr/local/include simple-guile.c
      gcc simple-guile.o -L/usr/local/lib -lguile -lqthreads -lpthread -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)
      $
 
Info Catalog (guile.info.gz) Guile Initialization Functions (guile.info.gz) Linking Programs With Guile
automatically generated byinfo2html