1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-05-23 13:00:34 +02:00
guile/scripts
Andy Wingo b8076ec6cc support expression-by-expression compilation
* module/language/ghil.scm (unparse-ghil): Fix unparsing of quasiquoted
  expressions.

* module/language/ghil/spec.scm (join): Define a joiner for GHIL.

* module/language/scheme/compile-ghil.scm (cenv-ghil-env): Expand the
  definition of a CENV so it can have an actual ghil-env, if available.
  (compile-ghil): Return the actual ghil env in the cenv.

* module/system/base/compile.scm (compile-file): Rewrite. `output-file'
  is now a keyword argument, along with the new kwargs `env' and `from'.
  We now allow exceptions to propagate up, and instead of printing the
  output file to the console, we return a string corresponding to its
  location.
  (compile-and-load): Use read-and-compile.
  (compile-fold): Thread around the cenv as well. Return all three
  values.
  (find-language-joint, read-and-compile): New exciting helpers. The idea
  is that compiling a file should be semantically equivalent to compiling
  each expression in it, one by one. Compilation can have side effects,
  e.g. affecting the current language or the current reader. So what we
  do is find a point in the compilation path at which different
  expressions of a given language can be joined into one. Expressions
  from the source language are compiled to the joint language, then
  joined and compiled to the target.
  (compile): Just return the first value from compile-fold.

* module/system/base/language.scm (language-joiner): New optional field.

* scripts/compile: Rework for changes to compile-file.
2009-04-16 17:49:59 +02:00
..
api-diff merge from 1.8 branch 2006-04-16 23:37:40 +00:00
autofrisk merge from 1.8 branch 2006-04-16 23:37:40 +00:00
ChangeLog-2008 Rename ChangeLog' files to ChangeLog-2008'. 2008-09-12 21:49:58 +02:00
compile support expression-by-expression compilation 2009-04-16 17:49:59 +02:00
disassemble remove conv.scm, disasm.scm; objcode->bytecode rename 2009-01-30 14:36:49 +01:00
display-commentary merge from 1.8 branch 2006-04-16 23:37:40 +00:00
doc-snarf merge from 1.8 branch 2006-04-16 23:37:40 +00:00
frisk merge from 1.8 branch 2006-04-16 23:37:40 +00:00
generate-autoload merge from 1.8 branch 2006-04-16 23:37:40 +00:00
lint merge from 1.8 branch 2006-04-16 23:37:40 +00:00
Makefile.am Merge commit 'origin/master' into vm 2008-09-30 21:12:16 +02:00
PROGRAM merge from 1.8 branch 2006-04-16 23:37:40 +00:00
punify merge from 1.8 branch 2006-04-16 23:37:40 +00:00
read-rfc822 merge from 1.8 branch 2006-04-16 23:37:40 +00:00
read-scheme-source merge from 1.8 branch 2006-04-16 23:37:40 +00:00
read-text-outline merge from 1.8 branch 2006-04-16 23:37:40 +00:00
README In boilerplate, use -l$0. Thanks to Daniel Skarda. 2001-08-01 05:09:30 +00:00
scan-api merge from 1.8 branch 2006-04-16 23:37:40 +00:00
snarf-check-and-output-texi merge from 1.8 branch 2006-04-16 23:37:40 +00:00
snarf-guile-m4-docs merge from 1.8 branch 2006-04-16 23:37:40 +00:00
summarize-guile-TODO merge from 1.8 branch 2006-04-16 23:37:40 +00:00
use2dot merge from 1.8 branch 2006-04-16 23:37:40 +00:00

Overview and Usage
------------------

This directory contains Scheme programs, some useful in maintaining Guile.
On "make install", these programs are copied to PKGDATADIR/VERSION/scripts.

You can invoke a program from the shell, or alternatively, load its file
as a Guile Scheme module, and use its exported procedure(s) from Scheme code.
Typically for any PROGRAM:

  (use-modules (scripts PROGRAM))
  (PROGRAM ARG1 ARG2 ...)

For programs that write to stdout, you might try, instead:

  (use-modules (scripts PROGRAM))
  (with-output-to-string (lambda () (PROGRAM ARG1 ARG2 ...)))

Note that all args must be strings.

To see PROGRAM's commentary, which may or may not be helpful:

  (help (scripts PROGRAM))

To see all commentaries and module dependencies, try: "make overview".

If you want to try the programs before installing Guile, you will probably
need to set environment variable GUILE_LOAD_PATH to be the parent directory.
This can be done in Bourne-compatible shells like so:

  GUILE_LOAD_PATH=`(cd .. ; pwd)`
  export GUILE_LOAD_PATH

[FIXME: Can someone supply the csh-compatible equivalent?]



How to Contribute
-----------------

See template file PROGRAM for a quick start.

Programs must follow the "executable module" convention, documented here:

- The file name must not end in ".scm".

- The file must be executable (chmod +x).

- The module name must be "(scripts PROGRAM)".  A procedure named PROGRAM w/
  signature "(PROGRAM . args)" must be exported.  Basically, use some variant
  of the form:

  (define-module (scripts PROGRAM)
    :export (PROGRAM))

  Feel free to export other definitions useful in the module context.

- There must be the alias:

  (define main PROGRAM)

  However, `main' must NOT be exported.

- The beginning of the file must use the following invocation sequence:

  #!/bin/sh
  main='(module-ref (resolve-module '\''(scripts PROGRAM)) '\'main')'
  exec ${GUILE-guile} -l $0 -c "(apply $main (cdr (command-line)))" "$@"
  !#

Following these conventions allows the program file to be used as module
(scripts PROGRAM) in addition to as a standalone executable.  Please also
include a helpful Commentary section w/ some usage info.


[README ends here]