Skip to content
Will Clinger edited this page Mar 6, 2015 · 5 revisions

The source package is easy.

  • On Larceny's GitHub page, click "Download ZIP".
  • unzip larceny-master.zip
  • mv larceny-master.zip larceny-VERSION-src
  • tar -czf larceny-VERSION-src.tar.gz larceny-VERSION-src
  • zip -r larceny-VERSION-src.zip larceny-VERSION-src

The binary packages are a bit harder.

Lets simplify things by assuming you're starting with a nightly build from the autobuild scripts.

  • Make a copy of the larceny_src/ autobuilt directory, naming it according to the following pattern: larceny-VERSION-bin-VARIANT-ARCH-OS
    • VARIANT is one of common | native | petit
    • ARCH is one of cls | ia32 | sparc | stdc
    • OS is one of win32 | linux86 | macosx | win32 | solaris
    • Examples:
      • larceny-0.93-bin-common-cls-win32/
      • larceny-0.93-bin-native-ia32-macosx/
      • larceny-0.93-bin-petit-stdc-linux86/
  • The Linux and OS X versions of native Larceny should be packaged automatically from the nightly autobuilds.
  • The Windows version of native Larceny and the Linux version of Petit Larceny will probably have to be packaged by hand.
  • The steps described below have been automated for Linux and OS X versions of native Larceny and Petit Larceny; see test/Scripts/package-bin-release.sh package-bin-release.sh
    • That script currently does steps that are not completely documented below (particularly with respect to CommonLarceny).
    • In any case, the intention is that you copy the script somewhere else (like /tmp/), and then run the script while your working directory is the copy of larceny_src/ that you made above.

Having done that, just

  1. run the script
  2. remove doc/UserManual/*.txt (FIXME: the script should do this)
  3. copy the appropriate user manuals into doc/UserManual (FIXME: the script should do this)
  4. tar/gzip the directory
  5. when all binary versions have been made and tested, make a tagged version of the source

The script will do the following:

  • Right now, the nightly builds use git clone or svn checkout. With git clone, you need to remove the .git directory. With svn checkout, you need to remove the .svn directories that are littered in the tree. Here is a command that should do the trick: % find . -name .svn -type d | xargs rm -r

  • Remove the src directory, since that's not part of the binary distribution.

    • There is some weirdness here on CommonLarceny; consult the [source:trunk/larceny_src/test/Scripts/package-bin-release.sh package-bin-release.sh] script to see what files and directory structures need to be preserved.
  • Remove the test directory, since that's not part of the binary distribution.

  • Remove the include directory from non-Petit distributions.

  • Remove README-COMMON-LARCENY.txt from the non Common Larceny distributions

  • For Petit:

    • remove the .o files
    • remove the generated .c files (but currently distinquishing these is actually difficult...)
  • For Non-petit systems with FFI support, we want to compile certain libraries that use the foreign-ctools library ahead of time.

    • (Felix is not going to do this for Petit systems for v0.94 because it is not clear if we can safely distribute the .so files that compile-file on Petit Larceny generates.)
    • (In the future, we should compile as many files as possible in the lib directory tree. Felix started work on a Scheme script for this, [source:trunk/larceny_src/src/Build/compile-standard-libraries.sch compile-standard-libraries.sch], but that is not ready for prime time in the v0.94 release.)
    • You can get an over-estimated list of such libraries with the following command:

% grep -l define-c- lib/*/*.sch
  • The important files for the v0.94 release is lib/Experimental/socket.sch, lib/Experimental/unix.sch, and lib/Standard/file-system.sch, because Snow relies on them for directory listing and tcpip support.
  • These files tend to assume that their syntax dependencies will be handled automagically by require, so the safest way to compile them is to first load the file (so that the syntactic environment will be extended with any necessary dependencies) and then compile the file.

(for-each (lambda (f) (load f) (compile-file f)) 
          (list "lib/Experimental/socket.sch" 
                "lib/Experimental/unix.sch" 
                "lib/Standard/file-system.sch"))
  • Will pointed out to PnkFelix today (August 5th 2008) that on Win32, we have never distributed compiled fasl files in lib/Standard. Felix did not expect that but is not surprised. Felix does think that this should be fixed; perhaps in time for 0.97; programmers using native Larceny should be able to expect lib/Standard/file-system to work, even if they do not have a C compiler installed.
  • Will remains skeptical. Larceny's FFI is suffering from bit rot; in particular, the libresolv library is likely to be incompatible or in a different file on 64-bit systems. Until that is fixed, shipping compiled files that depend upon the FFI is asking for trouble.

Common Larceny Notes

Larceny.fasl depends on several source files at load time:

  • src/Build/nbuild-param.sch
  • src/Lib/Common/toplevel.sch
  • src/Lib/Arch/IL/toplevel-target.sch If it can't find these files, it will fail to load, so we can't just blow away src/.
Clone this wiki locally