Very belatedly, many changes to smooth many rough edges with the C back
authorTaylor R. Campbell <net/mumble/campbell>
Wed, 4 Apr 2007 05:08:19 +0000 (05:08 +0000)
committerTaylor R. Campbell <net/mumble/campbell>
Wed, 4 Apr 2007 05:08:19 +0000 (05:08 +0000)
end.  It should now be possible to bootstrap and install the system
using the C back end much more cleanly, by the following steps:

  # Prepare the tree for compiling from C.
  ./Setup.sh
  ./configure --enable-native-code=c
  make c

  # Optionally, clean everything except the bare minimum of the C code
  # to generate a distribution tree.  Doing so requires reconfiguring.
  make c-clean
  # ...distribute the tree..
  ./configure --enable-native-code=c

  # Make the system from C, without needing an existing Scheme
  # installation for bootstrapping.
  make

  # Install.
  make install

44 files changed:
v7/dist/make-c-files [new file with mode: 0644]
v7/src/Clean.sh
v7/src/Makefile.in
v7/src/Setup.sh
v7/src/compiler/Clean.sh
v7/src/compiler/configure
v7/src/configure.ac
v7/src/cref/Makefile.in
v7/src/edwin/Clean.sh
v7/src/edwin/Makefile.in
v7/src/edwin/autold.scm
v7/src/etc/Clean.sh
v7/src/etc/c-boot-compiler.sh [new file with mode: 0755]
v7/src/etc/c-build-bands.sh [new file with mode: 0755]
v7/src/etc/c-bundle.sh [new file with mode: 0755]
v7/src/etc/c-compile.scm [new file with mode: 0644]
v7/src/etc/c-compile.sh [new file with mode: 0755]
v7/src/etc/c-initial-bands.sh [new file with mode: 0755]
v7/src/etc/c-prepare.scm [moved from v7/src/etc/script.scm with 60% similarity]
v7/src/etc/c-prepare.sh [new file with mode: 0755]
v7/src/etc/optiondb.scm
v7/src/imail/Makefile.in
v7/src/imail/load.scm
v7/src/microcode/Clean.sh
v7/src/microcode/compinit.c [deleted file]
v7/src/microcode/configure.ac
v7/src/microcode/make-compinit [deleted file]
v7/src/microcode/makegen/Makefile.in.in
v7/src/microcode/makegen/bundles-liarc.scm [new file with mode: 0644]
v7/src/microcode/makegen/dirs-liarc.scm
v7/src/microcode/makegen/liarc-base-rules [moved from v7/src/microcode/makegen/liarc-rules-2 with 72% similarity]
v7/src/microcode/makegen/makegen.scm
v7/src/microcode/makegen/pkds-liarc.scm [new file with mode: 0644]
v7/src/runtime/Makefile.in
v7/src/runtime/packag.scm
v7/src/sos/Makefile.in
v7/src/sos/load.scm
v7/src/ssp/Makefile.in
v7/src/ssp/load.scm
v7/src/star-parser/Makefile.in
v7/src/xdoc/Makefile.in
v7/src/xdoc/load.scm
v7/src/xml/Makefile.in
v7/src/xml/load.scm

diff --git a/v7/dist/make-c-files b/v7/dist/make-c-files
new file mode 100644 (file)
index 0000000..6751db3
--- /dev/null
@@ -0,0 +1,94 @@
+#!/bin/sh
+#
+# $Id: make-c-files,v 1.1 2007/04/04 05:08:18 riastradh Exp $
+#
+# Copyright 2007 Massachusetts Institute of Technology
+#
+# This file is part of MIT/GNU Scheme.
+#
+# MIT/GNU Scheme is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of the
+# License, or (at your option) any later version.
+#
+# MIT/GNU Scheme is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with MIT/GNU Scheme; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+set -e
+
+if [ $# -gt 3 ]; then
+    echo "usage: ${0} [TYPE [VERSION [DESTINATION]]]"
+    exit 1
+fi
+
+TYPE="${1:-std}"
+VERSION="${2}"
+DESTINATION="${3}"
+
+case "${TYPE}" in
+(6001 | all | std)
+    ;;
+(snapshot)
+    [ "${VERSION}" ] || VERSION="snapshot"
+    ;;
+(*)
+    echo "Unknown distribution type: ${TYPE}"
+    echo "Valid types: std all 6001 snapshot"
+    exit 1
+    ;;
+esac
+
+if [ "${VERSION}" = "snapshot" ]; then
+    VERSION=$(date +%Y%m%d)
+fi
+
+DIST_DIR="/scheme/v7/dist"
+
+. "${DIST_DIR}/release-prefix"
+
+TL_DIR="$(pwd)"
+
+C_DIR_REL="$(get_release_prefix "${VERSION}")"
+C_DIR="${TL_DIR}/${C_DIR_REL}"
+SRC_FILE="${SRC_FILE}.tar.gz"
+STAMP_C="${TL_DIR}/stamp-c"
+
+if [ ! -f "${SRC_FILE}" ]; then
+    echo "No source file: ${SRC_FILE}"
+    exit 1
+fi
+
+if [ ! -f "${STAMP_BUILD}" ]; then
+    rm -rf "${C_DIR}"
+
+    tar xzf "${SRC_FILE}"
+
+    cd "${C_DIR}/src"
+    ./configure --enable-native-code=c
+    make c
+    make c-clean
+fi
+
+tarfile="${C_DIR}-c.tar.gz"
+zipfile="${C_DIR}-c.zip"
+
+rm -f "${tarfile}"
+rm -f "${zipfile}"
+
+tar cvzf "${tarfile}" "${C_DIR}"
+
+for S in $(find ${C_DIR} -type l); do
+    [ ! -r "${S}" ] && rm -f "${S}"
+done
+
+zip -rl "${zipfile}" "${C_DIR}"
+chmod -w "${zipfile}"
+
+rm -rf "${C_DIR}"
index a63b2b57ba30146ddb7ca28e2c128244c39ae864..3756e6b8b517430775967995e9b186b901dd5bf3 100755 (executable)
@@ -1,6 +1,6 @@
 #!/bin/sh
 #
-# $Id: Clean.sh,v 1.10 2007/01/05 21:19:20 cph Exp $
+# $Id: Clean.sh,v 1.11 2007/04/04 05:08:18 riastradh Exp $
 #
 # Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
 #     1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
@@ -33,6 +33,7 @@ fi
 
 COMMAND=$1
 shift
+SUBDIRS="$@"
 
 FULL=no
 DIST=no
@@ -43,7 +44,7 @@ mostlyclean)
 clean)
     FULL=yes
     ;;
-distclean)
+distclean | c-clean)
     FULL=yes
     DIST=yes
     ;;
@@ -73,7 +74,7 @@ if [ ${MAINTAINER} = yes ]; then
     rm -rf configure lib autom4te.cache
 fi
 
-for SUBDIR; do
+for SUBDIR in ${SUBDIRS}; do
     if test -x ${SUBDIR}/Clean.sh; then
        echo "making ${COMMAND} in ${SUBDIR}"
        ( cd ${SUBDIR} && ./Clean.sh ${COMMAND} ) || exit 1
index 1f49c4a4ba762fda7b2905af85553674d6d2ab1f..9ab035d084caea4ea4cc178a14e6a1f3e759cd3b 100644 (file)
@@ -1,4 +1,4 @@
-# $Id: Makefile.in,v 1.28 2007/01/05 21:19:20 cph Exp $
+# $Id: Makefile.in,v 1.29 2007/04/04 05:08:18 riastradh Exp $
 #
 # Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
 #     1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
@@ -68,11 +68,24 @@ INSTALLED_SUBDIRS = microcode runtime cref edwin imail sos ssp star-parser \
 AUXDIR = @AUXDIR@
 EDETC = $(AUXDIR)/edwin/etc
 
+COMPILE_SCRIPT = @COMPILE_SCRIPT@
+BUILD_BANDS_SCRIPT = @BUILD_BANDS_SCRIPT@
 
 all:
        ( cd microcode && $(MAKE) all )
-       $(srcdir)/etc/compile.sh $(srcdir)
-       $(srcdir)/etc/build-bands.sh
+       $(srcdir)/etc/$(COMPILE_SCRIPT) $(srcdir)
+       ( cd microcode && $(MAKE) liarc-bundles )
+       $(srcdir)/etc/$(BUILD_BANDS_SCRIPT)
+
+c: boot-compiler.com
+       $(srcdir)/etc/c-prepare.sh
+
+boot-compiler.com:
+       $(srcdir)/etc/c-boot-compiler.sh
+
+c-clean:
+       -rm -f boot-compiler.com
+       $(srcdir)/Clean.sh $@ $(SUBDIRS)
 
 mostlyclean clean distclean maintainer-clean:
        $(srcdir)/Clean.sh $@ $(SUBDIRS)
@@ -94,3 +107,4 @@ install:
        $(INSTALL_DATA) $(srcdir)/etc/TUTORIAL $(DESTDIR)$(EDETC)/.
 
 .PHONY: all mostlyclean clean distclean maintainer-clean tags TAGS install
+.PHONY: c c-clean
index 133ac47d1205bda6ed670de3ca0dd6530edaee9d..0e4e610a9f71ee1c4b58af55088813c66f9bb054 100755 (executable)
@@ -1,6 +1,6 @@
 #!/bin/sh
 #
-# $Id: Setup.sh,v 1.16 2007/01/05 21:19:20 cph Exp $
+# $Id: Setup.sh,v 1.17 2007/04/04 05:08:18 riastradh Exp $
 #
 # Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
 #     1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
@@ -48,6 +48,12 @@ maybe_link lib/edwin/etc/TUTORIAL ../../../etc/TUTORIAL
 maybe_link lib/edwin/etc/mime.types ../../../etc/mime.types
 maybe_link lib/edwin/autoload ../../edwin
 
+# lib/shared
+maybe_mkdir lib/shared
+for BUNDLE in sf+compiler edwin 6001 cref imail sos ssp xdoc xml; do
+    maybe_link "lib/shared/${BUNDLE}.so" "../../microcode/${BUNDLE}.so"
+done
+
 for SUBDIR in 6001 compiler cref edwin imail rcs runtime runtime-check \
               sf sos ssp star-parser win32 xdoc xml microcode; do
     echo "setting up ${SUBDIR}"
index f17ad5191a19b54c17964e416f2f28980cab92fd..3b14ce3e3727145a2ac557f280268d1879d4e4cc 100755 (executable)
@@ -1,6 +1,6 @@
 #!/bin/sh
 #
-# $Id: Clean.sh,v 1.12 2007/01/12 06:19:49 cph Exp $
+# $Id: Clean.sh,v 1.13 2007/04/04 05:08:18 riastradh Exp $
 #
 # Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
 #     1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
@@ -36,17 +36,26 @@ export TOPDIR
 CLEANSH=${TOPDIR}/etc/Clean.sh
 "${CLEANSH}" "${1}" rm-pkg
 
+case "${1}" in
+c-clean)
+    SUBDIR_CMDS="rm-bin rm-com-sans-c"
+    ;;
+*)
+    SUBDIR_CMDS="rm-bin rm-com"
+    ;;
+esac
+
 for SUBDIR in back base fggen fgopt machine rtlbase rtlgen rtlopt; do
     if [ -d "${SUBDIR}" ]; then
        echo "making ${1} in ${SUBDIR}"
-       (cd "${SUBDIR}" && "${CLEANSH}" "${1}" rm-bin rm-com)
+       (cd "${SUBDIR}" && "${CLEANSH}" "${1}" "${SUBDIR_CMDS}")
     fi
 done
 
 case "${1}" in
-distclean | maintainer-clean)
+distclean | maintainer-clean | c-clean)
     rm -f machine compiler.cbf compiler.pkg compiler.sf
-    "${CLEANSH}" "${1}" rm-bin rm-com
+    "${CLEANSH}" "${1}" "${SUBDIR_CMDS}"
     ;;
 esac
 
index 6e4e468678ac5b16cd56231d784cbe02279da942..03066900b5b553abf15d37b386927d63525c93aa 100755 (executable)
@@ -1,6 +1,6 @@
 #!/bin/sh
 
-# $Id: configure,v 1.12 2007/02/05 18:43:08 cph Exp $
+# $Id: configure,v 1.13 2007/04/04 05:08:18 riastradh Exp $
 #
 # Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
 #     1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
@@ -81,7 +81,7 @@ ln -s "machines/${MACHINE}" machine
 
 LINKS="compiler.cbf compiler.pkg compiler.sf"
 if test "${MACHINE}" = C; then
-    LINKS="${LINKS} make.so"
+    LINKS="${LINKS} make.so make.dylib"
 else
     LINKS="${LINKS} make.com"
 fi
index 7b32c8fb5bde779713532e9ae32c1dc3c3569456..0e156a210abacc314dd0c7fcdec9868d66add32f 100644 (file)
@@ -1,7 +1,7 @@
 dnl Process this file with autoconf to produce a configure script.
 
 AC_INIT([MIT/GNU Scheme], [7.7.91], [bug-mit-scheme@gnu.org], [mit-scheme])
-AC_REVISION([$Id: configure.ac,v 1.6 2007/01/12 06:19:45 cph Exp $])
+AC_REVISION([$Id: configure.ac,v 1.7 2007/04/04 05:08:18 riastradh Exp $])
 AC_CONFIG_SRCDIR([microcode/boot.c])
 AC_PROG_MAKE_SET
 
@@ -31,6 +31,24 @@ USA.
 AC_ARG_ENABLE([native-code],
     AS_HELP_STRING([--enable-native-code],
        [Support native compiled code if available [[yes]]]))
+: ${enable_native_code='yes'}
+
+case ${enable_native_code} in
+c)
+    COMPILE_SCRIPT=c-compile.sh
+    BUILD_BANDS_SCRIPT=c-build-bands.sh
+    INSTALL_COM=:
+    ;;
+*)
+    COMPILE_SCRIPT=compile.sh
+    BUILD_BANDS_SCRIPT=build-bands.sh
+    INSTALL_COM='$(INSTALL_DATA)'
+    ;;
+esac
+
+AC_SUBST(COMPILE_SCRIPT)
+AC_SUBST(BUILD_BANDS_SCRIPT)
+AC_SUBST(INSTALL_COM)
 
 AC_PROG_INSTALL
 AC_PROG_LN_S
index d2d9fcec74a47442b3733947eecbee68ed5b4e6f..763cec443d570178147f7c080ed42507f0e9aa2e 100644 (file)
@@ -1,4 +1,4 @@
-# $Id: Makefile.in,v 1.8 2007/01/05 21:19:23 cph Exp $
+# $Id: Makefile.in,v 1.9 2007/04/04 05:08:18 riastradh Exp $
 #
 # Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
 #     1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
@@ -54,6 +54,7 @@ INSTALL = @INSTALL@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_COM = @INSTALL_COM@
 
 LN_S = @LN_S@
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
@@ -68,7 +69,10 @@ include ../Makefile.std
 
 install:
        $(mkinstalldirs) $(DESTDIR)$(CREF_DIR)
-       $(INSTALL_DATA) *.com $(DESTDIR)$(CREF_DIR)/.
+       @for F in *.com; do \
+           echo "$(INSTALL_COM) $${F} $(DESTDIR)$(CREF_DIR)/.";\
+           $(INSTALL_COM) $${F} $(DESTDIR)$(CREF_DIR)/.;\
+       done
        $(INSTALL_DATA) *.bci $(DESTDIR)$(CREF_DIR)/.
        $(INSTALL_DATA) cref-unx.pkd $(DESTDIR)$(CREF_DIR)/.
 
index 2109a56f0f4ae66b0d92f72acdfe859c76b54f5c..71769658f120020b5c3952d220d5b6feb4e2d617 100755 (executable)
@@ -1,6 +1,6 @@
 #!/bin/sh
 #
-# $Id: Clean.sh,v 1.12 2007/01/05 21:19:23 cph Exp $
+# $Id: Clean.sh,v 1.13 2007/04/04 05:08:19 riastradh Exp $
 #
 # Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
 #     1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
@@ -31,9 +31,18 @@ if [ $# -ne 1 ]; then
     exit 1
 fi
 
-../etc/Clean.sh "${1}" rm-bin rm-com
+../etc/Clean.sh "${1}"
 
-echo "rm -f edwin-unx.* edwin-w32.* edwin-os2.* edwin.bld"
-rm -f edwin-unx.* edwin-w32.* edwin-os2.* edwin.bld
+echo "rm -rf edwin.bld"
+rm -f edwin.bld
+
+echo "rm -f edwin-unx.crf edwin-w32.crf edwin-os2.crf"
+rm -f edwin-unx.crf edwin-w32.crf edwin-os2.crf
+
+echo "rm -f edwin-unx.pkd edwin-w32.pkd edwin-os2.pkd"
+rm -f edwin-unx.pkd edwin-w32.pkd edwin-os2.pkd
+
+echo "rm -f edwin-unx.fre edwin-w32.fre edwin-os2.fre"
+rm -f edwin-unx.fre edwin-w32.fre edwin-os2.fre
 
 exit 0
index 9b76d58fb5a16f320c8afe96603cbc8df8dd53ff..7bfd4b5ab104c610e3f1c3f40e82988a4f321d64 100644 (file)
@@ -1,4 +1,4 @@
-# $Id: Makefile.in,v 1.12 2007/01/05 21:19:23 cph Exp $
+# $Id: Makefile.in,v 1.13 2007/04/04 05:08:19 riastradh Exp $
 #
 # Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
 #     1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
@@ -59,6 +59,7 @@ INSTALL = @INSTALL@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_COM = @INSTALL_COM@
 
 LN_S = @LN_S@
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
@@ -90,8 +91,8 @@ install:
        -rm -rf $(DESTDIR)$(EODIR)
        $(mkinstalldirs) $(DESTDIR)$(EODIR)
        @for F in $(EDOPTS); do \
-           echo "$(INSTALL_DATA) $${F}.com $(DESTDIR)$(EODIR)/.";\
-           $(INSTALL_DATA) $${F}.com $(DESTDIR)$(EODIR)/.;\
+           echo "$(INSTALL_COM) $${F}.com $(DESTDIR)$(EODIR)/.";\
+           $(INSTALL_COM) $${F}.com $(DESTDIR)$(EODIR)/.;\
        done
        @for F in $(EDOPTS); do \
            REL="../../SRC/edwin/$${F}.bci";\
index 2a7a98138d83097fd0fc7e78a2777a04f9b18279..5744ccea402575078dc193881f144dd8091e351a 100644 (file)
@@ -1,6 +1,6 @@
 #| -*-Scheme-*-
 
-$Id: autold.scm,v 1.68 2007/01/05 21:19:23 cph Exp $
+$Id: autold.scm,v 1.69 2007/04/04 05:08:19 riastradh Exp $
 
 Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
     1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
@@ -151,6 +151,33 @@ USA.
            (hook)
            (loop))))
     (if entry (loop))))
+
+(define (load-library library)
+  (for-each (lambda (entry)
+             (let ((file (car entry))
+                   (environment (->environment (cadr entry)))
+                   (purify? (or (null? (cddr entry)) (caddr entry))))
+               (cond (((let-syntax ((ucode-primitive
+                                     (sc-macro-transformer
+                                      (lambda (form environment)
+                                        environment
+                                        (apply make-primitive-procedure
+                                               (cdr form))))))
+                         (ucode-primitive initialize-c-compiled-block 1))
+                       (string-append "edwin_" file))
+                      => (lambda (obj)
+                           (if purify? (purify obj))
+                           (scode-eval obj environment)))
+                     (else
+                      (load (merge-pathnames file (edwin-binary-directory))
+                            environment
+                            'DEFAULT
+                            purify?)))))
+           (cdr library))
+  (if (not (memq (car library) loaded-libraries))
+      (set! loaded-libraries
+           (cons (car library) loaded-libraries)))
+  (run-library-load-hooks! (car library)))
 \f
 ;;;; Loading
 
@@ -176,41 +203,27 @@ Second arg is prefix arg when called interactively."
   (let ((force? (if (default-object? force?) #f force?))
        (interactive? (if (default-object? interactive?) #f interactive?)))
     (let ((do-it
-          (lambda (library)
-            (let ((directory (edwin-binary-directory)))
-              (for-each
-               (lambda (entry)
-                 (load (merge-pathnames (car entry) directory)
-                       (cadr entry)
-                       'DEFAULT
-                       (or (null? (cddr entry)) (caddr entry))))
-               (cdr library)))
-            (if (not (memq (car library) loaded-libraries))
-                (set! loaded-libraries
-                      (cons (car library) loaded-libraries)))
-            (run-library-load-hooks! (car library)))))
-      (let ((do-it
-            (lambda ()
-              (let ((library (assq name known-libraries)))
-                (if (not library)
-                    (error "Unknown library name:" name))
-                (if interactive?
-                    (with-output-to-transcript-buffer
-                     (lambda ()
-                       (bind-condition-handler (list condition-type:error)
-                           evaluation-error-handler
-                         (lambda ()
-                           (fluid-let ((load/suppress-loading-message? #t))
-                             ((message-wrapper #f "Loading " (car library))
-                              (lambda ()
-                                (do-it library))))))))
-                    (do-it library))))))
-       (cond ((not (library-loaded? name))
-              (do-it))
-             ((not force?)
-              (if interactive? (message "Library already loaded: " name)))
-             ((not (eq? force? 'NO-WARN))
-              (do-it)))))))
+          (lambda ()
+            (let ((library (assq name known-libraries)))
+              (if (not library)
+                  (error "Unknown library name:" name))
+              (if interactive?
+                  (with-output-to-transcript-buffer
+                      (lambda ()
+                        (bind-condition-handler (list condition-type:error)
+                            evaluation-error-handler
+                          (lambda ()
+                            (fluid-let ((load/suppress-loading-message? #t))
+                              ((message-wrapper #f "Loading " (car library))
+                               (lambda ()
+                                 (load-library library))))))))
+                  (load-library library))))))
+      (cond ((not (library-loaded? name))
+            (do-it))
+           ((not force?)
+            (if interactive? (message "Library already loaded: " name)))
+           ((not (eq? force? 'NO-WARN))
+            (do-it))))))
 
 (define-command load-file
   "Load the Edwin binary file FILENAME.
index 0336b206c6dbfa73893ff151f93264403c1edee2..56c39d5e6103c9e95d6675b7bc50a4523f232725 100755 (executable)
@@ -1,6 +1,6 @@
 #!/bin/sh
 #
-# $Id: Clean.sh,v 1.16 2007/01/05 21:19:25 cph Exp $
+# $Id: Clean.sh,v 1.17 2007/04/04 05:08:19 riastradh Exp $
 #
 # Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
 #     1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
 
 if [ $# -eq 1 ]; then
     COMMAND="${1}"
-    KEYWORDS="rm-bin rm-com rm-pkg"
+    case "${COMMAND}" in
+    c-clean)
+       KEYWORDS="rm-bin rm-com-sans-c rm-pkg"
+       ;;
+    *)
+       KEYWORDS="rm-bin rm-com rm-pkg"
+       ;;
+    esac
 elif [ $# -ge 2 ]; then
     COMMAND="${1}"
     shift
@@ -47,7 +54,7 @@ mostlyclean)
 clean)
     FULL="yes"
     ;;
-distclean)
+distclean | c-clean)
     FULL="yes"
     DIST="yes"
     ;;
@@ -90,13 +97,21 @@ for KEYWORD in ${KEYWORDS}; do
        echo "rm -f *.com *.bci *.c *.o *.so *.sl *.dylib"
        rm -f *.com *.bci *.c *.o *.so *.sl *.dylib
        ;;
+    rm-com-sans-c)
+       echo "rm -f *.com *.bci *.o *.so *.sl *.dylib"
+       rm -f *.com *.bci *.o *.so *.sl *.dylib
+        ;;
     rm-old-pkg)
        echo "rm -f *.bco *.bld *.glo *.con *.ldr"
        rm -f *.bco *.bld *.glo *.con *.ldr
        ;;
     rm-pkg)
-       echo "rm -f *-unx.* *-w32.* *-os2.*"
-       rm -f *-unx.* *-w32.* *-os2.*
+       echo "rm -f *-unx.crf *-unx.fre *-unx.pkd"
+       rm -f *-unx.crf *-unx.fre *-unx.pkd
+       echo "rm -f *-w32.crf *-w32.fre *-w32.pkd"
+       rm -f *-w32.crf *-w32.fre *-w32.pkd
+       echo "rm -f *-os2.crf *-os2.fre *-os2.pkd"
+       rm -f *-os2.crf *-os2.fre *-os2.pkd
        ;;
     esac
 done
diff --git a/v7/src/etc/c-boot-compiler.sh b/v7/src/etc/c-boot-compiler.sh
new file mode 100755 (executable)
index 0000000..afc5034
--- /dev/null
@@ -0,0 +1,91 @@
+#!/bin/sh
+#
+# $Id: c-boot-compiler.sh,v 1.1 2007/04/04 05:08:19 riastradh Exp $
+#
+# Copyright 2007 Massachusetts Institute of Technology
+#
+# This file is part of MIT/GNU Scheme.
+#
+# MIT/GNU Scheme is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of the
+# License, or (at your option) any later version.
+#
+# MIT/GNU Scheme is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with MIT/GNU Scheme; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+set -e
+
+if [ -z "${SCHEME_LARGE}" ]; then
+    SCHEME_LARGE="scheme --heap 3000"
+fi
+
+if [ -z "${SCHEME_COMPILER}" ]; then
+    SCHEME_COMPILER="${SCHEME_LARGE} --compiler"
+fi
+
+# Step 1: Compile CREF and SF natively, so that we can load them
+# independently of the compiler.  (There is no standard band that
+# loads them independently.)
+
+${SCHEME_COMPILER} <<EOF
+(with-working-directory-pathname "cref"
+  (lambda ()
+    (load "cref.sf")
+    (load "cref.cbf")
+    (if (not (name->package '(CROSS-REFERENCE)))
+       (load "make"))))
+(with-working-directory-pathname "sf"
+  (lambda ()
+    (load "sf.sf")
+    (load "sf.cbf")))
+EOF
+
+# Step 2: Load CREF and SF, and syntax the compiler configured with
+# the C back end.
+
+# (There *must* be a better way to write this...)
+
+LOAD_SF_CREF=`cat <<EOF
+(for-each (lambda (subdirectory)
+            (with-working-directory-pathname subdirectory
+              (lambda ()
+                (load "make"))))
+          '("cref" "sf"))
+EOF
+`
+
+${SCHEME_LARGE} <<EOF
+${LOAD_SF_CREF}
+(with-working-directory-pathname "compiler"
+  (lambda ()
+    (load "compiler.sf")))
+EOF
+
+# Step 3: Now that the compiler with the C back end is syntaxed and
+# packaged, use the native compiler to compile the bootstrap C
+# compiler natively.
+
+${SCHEME_COMPILER} <<EOF
+(with-working-directory-pathname "compiler"
+  (lambda ()
+    (load "compiler.cbf")))
+EOF
+
+# Step 4: Load up the natively compiled compiler with the C back end,
+# and save a band.
+
+${SCHEME_LARGE} <<EOF
+${LOAD_SF_CREF}
+(with-working-directory-pathname "compiler"
+  (lambda ()
+    (load "machines/C/make")))
+(disk-save "boot-compiler.com")
+EOF
diff --git a/v7/src/etc/c-build-bands.sh b/v7/src/etc/c-build-bands.sh
new file mode 100755 (executable)
index 0000000..139958a
--- /dev/null
@@ -0,0 +1,49 @@
+#!/bin/sh
+#
+# $Id: c-build-bands.sh,v 1.1 2007/04/04 05:08:19 riastradh Exp $
+#
+# Copyright 2007 Massachusetts Institute of Technology
+#
+# This file is part of MIT/GNU Scheme.
+#
+# MIT/GNU Scheme is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of the
+# License, or (at your option) any later version.
+#
+# MIT/GNU Scheme is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with MIT/GNU Scheme; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+set -e
+
+sh etc/c-initial-bands.sh
+
+microcode/scheme --library lib --compiler <<EOF
+(load "microcode/edwin.so")
+(load-option 'EDWIN)
+(disk-save "lib/all.com")
+EOF
+
+microcode/scheme --library lib --large <<EOF
+(load "microcode/edwin.so")
+(load-option 'EDWIN)
+(disk-save "lib/edwin.com")
+EOF
+
+(
+    cd runtime-check
+    ../microcode/scheme --library ../lib --fasl runtime_make <<EOF
+(load "../microcode/edwin.so")
+(load-option 'EDWIN)
+(load "../microcode/6001.so")
+(load-option 'STUDENT)
+(disk-save "../lib/6001.com")
+EOF
+)
diff --git a/v7/src/etc/c-bundle.sh b/v7/src/etc/c-bundle.sh
new file mode 100755 (executable)
index 0000000..6db9970
--- /dev/null
@@ -0,0 +1,144 @@
+#!/bin/sh
+#
+# $Id: c-bundle.sh,v 1.1 2007/04/04 05:08:19 riastradh Exp $
+#
+# Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
+#     1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+#     2005, 2006, 2007 Massachusetts Institute of Technology
+#
+# This file is part of MIT/GNU Scheme.
+#
+# MIT/GNU Scheme is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of the
+# License, or (at your option) any later version.
+#
+# MIT/GNU Scheme is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with MIT/GNU Scheme; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+set -e
+
+if [ ! $# -gt 2 ]; then
+  echo "usage: ${0} TYPE SYSTEM FILES ..."
+  exit 1
+fi
+
+TYPE="${1}"
+SYSTEM="${2}"
+shift 2
+
+case "${TYPE}" in
+  library | static)
+    ;;
+  *)
+    echo "usage: ${0} TYPE SYSTEM FILES ..."
+    echo "  TYPE must be \`library' or \`static'."
+    exit 1
+    ;;
+esac
+
+(grep '^DECLARE_COMPILED_CODE' "${@}"  && \
+ grep '^DECLARE_COMPILED_DATA' "${@}"  && \
+ grep '^DECLARE_DATA_OBJECT'   "${@}") \
+| sed -e 's/.*:/  /' >${SYSTEM}.h
+
+cat <<EOF >"${SYSTEM}.c"
+
+#define LIARC_IN_MICROCODE
+#include "liarc.h"
+
+#undef DECLARE_COMPILED_CODE
+#undef DECLARE_COMPILED_DATA
+#undef DECLARE_COMPILED_DATA_NS
+#undef DECLARE_DATA_OBJECT
+
+#define DECLARE_COMPILED_CODE(name, nentries, decl_code, code)         \\
+extern int EXFUN (decl_code, (void));                                  \\
+extern SCHEME_OBJECT * EXFUN (code, (SCHEME_OBJECT *, entry_count_t));
+
+#define DECLARE_COMPILED_DATA(name, decl_data, data)                   \\
+extern int EXFUN (decl_data, (void));                                  \\
+extern SCHEME_OBJECT * EXFUN (data, (entry_count_t));
+
+#define DECLARE_COMPILED_DATA_NS(name, data)                           \\
+extern SCHEME_OBJECT * EXFUN (data, (entry_count_t));
+
+#define DECLARE_DATA_OBJECT(name, data)                                        \\
+extern SCHEME_OBJECT EXFUN (data, (void));
+
+#include "${SYSTEM}.h"
+
+#undef DECLARE_COMPILED_CODE
+#undef DECLARE_COMPILED_DATA
+#undef DECLARE_COMPILED_DATA_NS
+#undef DECLARE_DATA_OBJECT
+EOF
+
+case "${TYPE}" in
+  library)
+    cat <<EOF >>"${SYSTEM}.c"
+
+#define DECLARE_COMPILED_CODE(name, nentries, decl_code, code)         \\
+  if (0 != (declare_compiled_code (name, nentries, decl_code, code)))  \\
+    return ((char *) NULL);
+
+#define DECLARE_COMPILED_DATA(name, decl_data, data)                   \\
+  if (0 != (declare_compiled_code (name, decl_data, data)))            \\
+    return ((char *) NULL);
+
+#define DECLARE_COMPILED_DATA_NS(name, data)                           \\
+  if (0 != (declare_compiled_data_ns (name, data)))                    \\
+    return ((char *) NULL);
+
+#define DECLARE_DATA_OBJECT(name, data)                                        \\
+  if (0 != (declare_data_object (name, data)))                         \\
+    return ((char *) NULL);
+
+char *
+DEFUN_VOID (dload_initialize_file)
+{
+#include "${SYSTEM}.h"
+  return (0);
+}
+EOF
+  ;;
+  static)
+    cat <<EOF >>"${SYSTEM}.c"
+
+#define DECLARE_COMPILED_CODE(name, nentries, decl_code, code)         \\
+  result = (declare_compiled_code (name, nentries, decl_code, code));  \\
+  if (result != 0)                                                     \\
+    return (result);
+
+#define DECLARE_COMPILED_DATA(name, decl_data, data)                   \\
+  result = (declare_compiled_data (name, decl_data, data));            \\
+  if (result != 0)                                                     \\
+    return (result);
+
+#define DECLARE_COMPILED_DATA_NS(name, data)                           \\
+  result = (declare_compiled_data_ns (name, data));                    \\
+  if (result != 0)                                                     \\
+    return (result);
+
+#define DECLARE_DATA_OBJECT(name, data)                                        \\
+  result = (declare_data_object (name, data));                         \\
+  if (result != 0)                                                     \\
+    return (result);
+
+int
+DEFUN_VOID (initialize_compiled_code_blocks)
+{
+  int result;
+#include "${SYSTEM}.h"
+  return (0);
+}
+EOF
+  ;;
+esac
diff --git a/v7/src/etc/c-compile.scm b/v7/src/etc/c-compile.scm
new file mode 100644 (file)
index 0000000..d818ba2
--- /dev/null
@@ -0,0 +1,72 @@
+#| -*-Scheme-*-
+
+$Id: c-compile.scm,v 1.1 2007/04/04 05:08:19 riastradh Exp $
+
+Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
+    1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
+    2006, 2007 Massachusetts Institute of Technology
+
+This file is part of MIT/GNU Scheme.
+
+MIT/GNU Scheme is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or (at
+your option) any later version.
+
+MIT/GNU Scheme is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with MIT/GNU Scheme; if not, write to the Free Software
+Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301,
+USA.
+
+|#
+
+;;; This generates correct debugging information for the parts of the
+;;; Scheme code that were statically linked to the microcode, and also
+;;; compiles the rest of the system that was not statically linked.
+
+;;; (Ideally, this file would be identical to compile.scm.  But we do
+;;; not live in an ideal world, and we shall have to settle for a file
+;;; that is merely very similar.  The main difference is that we need
+;;; to avoid running the C compiler on some of the files but not
+;;; others.  This is bogus.)
+
+(fluid-let ((compiler:invoke-c-compiler? #f))
+  (define (compile-package-descriptions subsystem)
+    (for-each
+     (lambda (os-suffix)
+       (cbf (pathname-new-type (string-append subsystem "-" os-suffix)
+                              "pkd")))
+     '("unx" "w32" "os2")))
+  (with-working-directory-pathname "cref"
+    (lambda ()
+      (load "cref.sf")
+      (load "cref.cbf")
+      ;; This conditional is probably not necessary.
+      (if (not (name->package '(CROSS-REFERENCE)))
+         (load "make"))))
+  (for-each
+   (lambda (subsystem)
+     (with-working-directory-pathname subsystem
+       (lambda ()
+        (load (pathname-new-type subsystem "sf"))
+        (load (pathname-new-type subsystem "cbf"))
+        (if (string=? subsystem "compiler")     ;++ kludge
+            (cbf "compiler-unx.pkd")
+            (compile-package-descriptions subsystem)))))
+   '("runtime" "win32" "sf" "compiler" "edwin" "6001"))
+  (with-working-directory-pathname "star-parser"
+    (lambda ()
+      (load "compile")
+      (compile-package-descriptions "parser")))
+  (for-each (lambda (subsystem)
+             (load (merge-pathnames "compile"
+                                    (pathname-as-directory subsystem)))
+             (with-working-directory-pathname subsystem
+               (lambda ()
+                 (compile-package-descriptions subsystem))))
+           '("sos" "imail" "xml" "ssp" "xdoc")))
diff --git a/v7/src/etc/c-compile.sh b/v7/src/etc/c-compile.sh
new file mode 100755 (executable)
index 0000000..1bdc542
--- /dev/null
@@ -0,0 +1,44 @@
+#!/bin/sh
+#
+# $Id: c-compile.sh,v 1.1 2007/04/04 05:08:19 riastradh Exp $
+#
+# Copyright 2007 Massachusetts Institute of Technology
+#
+# This file is part of MIT/GNU Scheme.
+#
+# MIT/GNU Scheme is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of the
+# License, or (at your option) any later version.
+#
+# MIT/GNU Scheme is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with MIT/GNU Scheme; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+set -e
+
+if [ $# -ge 1 ]; then
+  DIR="${1}"
+elif [ -r "./etc/c-compile.scm" ]; then
+  DIR="."
+else
+  echo "usage: ${0} DIRECTORY"
+  exit 1
+fi
+
+if [ -z "${SCHEME_COMPILER}" ]; then
+    (
+       cd "${DIR}"
+       sh etc/c-initial-bands.sh
+    )
+    SCHEME_COMPILER="${DIR}/microcode/scheme --library ${DIR}/lib"
+    SCHEME_COMPILER="${SCHEME_COMPILER} --compiler --heap 3000"
+fi
+
+${SCHEME_COMPILER} < "${DIR}/etc/c-compile.scm"
diff --git a/v7/src/etc/c-initial-bands.sh b/v7/src/etc/c-initial-bands.sh
new file mode 100755 (executable)
index 0000000..4dedbc2
--- /dev/null
@@ -0,0 +1,40 @@
+#!/bin/sh
+#
+# $Id: c-initial-bands.sh,v 1.1 2007/04/04 05:08:19 riastradh Exp $
+#
+# Copyright 2007 Massachusetts Institute of Technology
+#
+# This file is part of MIT/GNU Scheme.
+#
+# MIT/GNU Scheme is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of the
+# License, or (at your option) any later version.
+#
+# MIT/GNU Scheme is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with MIT/GNU Scheme; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+set -e
+
+(
+    cd runtime
+    ../microcode/scheme --library ../lib --fasl runtime_make <<EOF
+(disk-save "../lib/runtime.com")
+EOF
+)
+
+microcode/scheme --library lib --large <<EOF
+(load "microcode/sf+compiler.so")
+(load-option 'SF)
+(with-working-directory-pathname "compiler"
+  (lambda ()
+    (load "machines/C/make")))
+(load-option '*PARSER)
+(disk-save "lib/compiler.com")
similarity index 60%
rename from v7/src/etc/script.scm
rename to v7/src/etc/c-prepare.scm
index 8ebd10ed7288869e0930f3a0504b303ca7cc2828..18f435d7c83598ceb238c8e775bce4b794ca27b5 100644 (file)
@@ -1,6 +1,6 @@
 #| -*-Scheme-*-
 
-$Id: script.scm,v 1.4 2007/01/05 21:19:25 cph Exp $
+$Id: c-prepare.scm,v 1.1 2007/04/04 05:08:19 riastradh Exp $
 
 Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
     1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
@@ -25,13 +25,15 @@ USA.
 
 |#
 
-;;;; Program to compile MIT/GNU Scheme
-
-;;; This is used to compile a part of the system written in Scheme.
-;;; This is the part of the system statically linked into the
-;;; microcode when using the C back end of the compiler.
+;;; This compiles the Scheme code that will be statically linked to
+;;; the microcode when using the C back end.
 
 (fluid-let ((compiler:invoke-c-compiler? #f))
+  (define (compile-package-descriptions subsystem)
+    (for-each (lambda (os-suffix)
+               (cbf (pathname-new-type (string-append subsystem "-" os-suffix)
+                                       "pkd")))
+             '("unx" "w32" "os2")))
   (with-working-directory-pathname "microcode"
     (lambda ()
       (if (or (not (file-exists? "utabmd.bin"))
@@ -39,14 +41,19 @@ USA.
                 (file-modification-time-indirect "utabmd.bin")))
          (sf "utabmd"))
       (cbf "utabmd")))
-  (for-each (lambda (dir)
-             (with-working-directory-pathname dir
+  (for-each (lambda (subsystem)
+             (with-working-directory-pathname subsystem
                (lambda ()
-                 (load (string-append dir ".sf"))
-                 (load (string-append dir ".cbf"))
-                 (cbf (string-append dir "-unx.pkd")))))
-           '("runtime" "sf" "cref" "compiler"))
+                 (load (pathname-new-type subsystem "sf"))
+                 (load (pathname-new-type subsystem "cbf"))
+                 (compile-package-descriptions subsystem))))
+           '("runtime" "sf" "cref"))
+  (with-working-directory-pathname "compiler"
+    (lambda ()
+      (load "compiler.sf")
+      (load "compiler.cbf")
+      (cbf "compiler-unx.pkd")))
   (with-working-directory-pathname "star-parser"
     (lambda ()
-      (load "compile.scm")
-      (cbf "parser-unx.pkd"))))
\ No newline at end of file
+      (load "compile")
+      (compile-package-descriptions "parser"))))
diff --git a/v7/src/etc/c-prepare.sh b/v7/src/etc/c-prepare.sh
new file mode 100755 (executable)
index 0000000..0f51c62
--- /dev/null
@@ -0,0 +1,39 @@
+#!/bin/sh
+#
+# $Id: c-prepare.sh,v 1.1 2007/04/04 05:08:19 riastradh Exp $
+#
+# Copyright 2007 Massachusetts Institute of Technology
+#
+# This file is part of MIT/GNU Scheme.
+#
+# MIT/GNU Scheme is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of the
+# License, or (at your option) any later version.
+#
+# MIT/GNU Scheme is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with MIT/GNU Scheme; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+set -e
+
+if [ $# -ge 1 ]; then
+    DIR="${1}"
+elif [ -r "./etc/c-prepare.scm" ]; then
+    DIR="."
+else
+    echo "usage: ${0} DIRECTORY"
+    exit 1
+fi
+
+if [ -z "${SCHEME_LARGE}" ]; then
+    SCHEME_LARGE="scheme --heap 3000"
+fi
+
+${SCHEME_LARGE} --band boot-compiler.com < "${DIR}/etc/c-prepare.scm"
index 58b3796d288414075cf2eab99c32c0f479ce9bb7..d8120a6b4b1985a87f68dc1ed3dcdc1452546bc8 100644 (file)
@@ -1,6 +1,6 @@
 #| -*-Scheme-*-
 
-$Id: optiondb.scm,v 1.17 2007/01/05 21:19:25 cph Exp $
+$Id: optiondb.scm,v 1.18 2007/04/04 05:08:19 riastradh Exp $
 
 Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
     1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
@@ -52,25 +52,31 @@ USA.
                    (pathname-new-type name (car type)))))))))
     (lambda ()
       (if (not (name->package package-name))
-         (let dir-loop ((dirs dirs))
-           (if (pair? dirs)
-               (let ((directory
-                      (merge-pathnames place
-                                       (pathname-as-directory (car dirs)))))
-                 (if (file-directory? directory)
-                     (let file-loop ((files files))
-                       (if (pair? files)
-                           (if (test
-                                (merge-pathnames
-                                 (car files)
-                                 (pathname-as-directory directory)))
-                               (with-working-directory-pathname directory
-                                 (lambda ()
-                                   (load (car files) '(RUNTIME))))
-                               (file-loop (cdr files)))
-                           (dir-loop (cdr dirs))))
-                     (dir-loop (cdr dirs))))
-               (error "Unable to find package directory:" place)))))))
+         (begin
+           (ignore-errors
+            (lambda ()
+              (load (merge-pathnames
+                     place
+                     (system-library-directory-pathname "shared")))))
+           (let dir-loop ((dirs dirs))
+             (if (pair? dirs)
+                 (let ((directory
+                        (merge-pathnames place
+                                         (pathname-as-directory (car dirs)))))
+                   (if (file-directory? directory)
+                       (let file-loop ((files files))
+                         (if (pair? files)
+                             (if (test
+                                  (merge-pathnames
+                                   (car files)
+                                   (pathname-as-directory directory)))
+                                 (with-working-directory-pathname directory
+                                   (lambda ()
+                                     (load (car files) '(RUNTIME))))
+                                 (file-loop (cdr files)))
+                             (dir-loop (cdr dirs))))
+                       (dir-loop (cdr dirs))))
+                 (error "Unable to find package directory:" place))))))))
 \f
 (define-load-option 'EDWIN
   (guarded-system-loader '(edwin) "edwin"))
index 855c5892bf34d0bbbd1c40c563da4978a8ae6620..99ec668e4975f04e0f149d5cfb9163c7f2ea346a 100644 (file)
@@ -1,4 +1,4 @@
-# $Id: Makefile.in,v 1.8 2007/01/05 21:19:25 cph Exp $
+# $Id: Makefile.in,v 1.9 2007/04/04 05:08:19 riastradh Exp $
 #
 # Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
 #     1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
@@ -59,6 +59,7 @@ INSTALL = @INSTALL@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_COM = @INSTALL_COM@
 
 LN_S = @LN_S@
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
@@ -80,7 +81,10 @@ tags TAGS:
 
 install:
        $(mkinstalldirs) $(DESTDIR)$(IMAIL_DIR)
-       $(INSTALL_DATA) *.com $(DESTDIR)$(IMAIL_DIR)/.
+       @for F in *.com; do \
+           echo "$(INSTALL_COM) $${F} $(DESTDIR)$(IMAIL_DIR)/.";\
+           $(INSTALL_COM) $${F} $(DESTDIR)$(IMAIL_DIR)/.;\
+       done
        $(INSTALL_DATA) *.bci $(DESTDIR)$(IMAIL_DIR)/.
        $(INSTALL_DATA) imail-unx.pkd $(DESTDIR)$(IMAIL_DIR)/.
        $(INSTALL_DATA) $(srcdir)/load.scm $(DESTDIR)$(IMAIL_DIR)/.
index fb0cbc3fc584c393df82b2688fa02194bce2b2d1..6b0d65135d2039751e480dfaa26d6338da22c9c0 100644 (file)
@@ -1,6 +1,6 @@
 #| -*-Scheme-*-
 
-$Id: load.scm,v 1.47 2007/03/11 01:11:41 riastradh Exp $
+$Id: load.scm,v 1.48 2007/04/04 05:08:19 riastradh Exp $
 
 Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
     1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
@@ -32,6 +32,7 @@ USA.
 (load-option 'WT-TREE)
 (with-working-directory-pathname (directory-pathname (current-load-pathname))
   (lambda ()
+    (declare-shared-library "imail" (lambda () #t))
     (fluid-let ((*allow-package-redefinition?* #t))
       (load-package-set "imail"))))
 (add-subsystem-identification! "IMAIL" '(1 21))
\ No newline at end of file
index 84c90e9b528c0b5ddd4e3a62bbb51d753ff8db36..14b436e45ff14ec92d1f3ffbba3e9bca35102f88 100755 (executable)
@@ -1,6 +1,6 @@
 #!/bin/sh
 #
-# $Id: Clean.sh,v 1.6 2007/01/05 21:19:25 cph Exp $
+# $Id: Clean.sh,v 1.7 2007/04/04 05:08:19 riastradh Exp $
 #
 # Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
 #     1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
@@ -32,7 +32,7 @@ if [ $# -ne 1 ]; then
 fi
 
 case "${1}" in
-mostlyclean | clean | distclean)
+mostlyclean | clean | distclean | c-clean)
     ;;
 maintainer-clean)
     if [ ! -f Makefile ] && [ -f configure ]; then
diff --git a/v7/src/microcode/compinit.c b/v7/src/microcode/compinit.c
deleted file mode 100644 (file)
index 3665687..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-/* -*-C-*-
-
-$Id: compinit.c,v 1.10 2007/01/05 21:19:25 cph Exp $
-
-Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
-    1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
-    2006, 2007 Massachusetts Institute of Technology
-
-This file is part of MIT/GNU Scheme.
-
-MIT/GNU Scheme is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or (at
-your option) any later version.
-
-MIT/GNU Scheme is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with MIT/GNU Scheme; if not, write to the Free Software
-Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301,
-USA.
-
-*/
-
-#define LIARC_IN_MICROCODE
-#include "liarc.h"
-
-#undef DECLARE_COMPILED_CODE
-#undef DECLARE_COMPILED_DATA
-#undef DECLARE_COMPILED_DATA_NS
-#undef DECLARE_DATA_OBJECT
-
-#define DECLARE_COMPILED_CODE(name, nentries, decl_code, code)         \
-extern int EXFUN (decl_code, (void));                                  \
-extern SCHEME_OBJECT * EXFUN (code, (SCHEME_OBJECT *, entry_count_t));
-
-#define DECLARE_COMPILED_DATA(name, decl_data, data)                   \
-extern int EXFUN (decl_data, (void));                                  \
-extern SCHEME_OBJECT * EXFUN (data, (entry_count_t));
-
-#define DECLARE_COMPILED_DATA_NS(name, data)                           \
-extern SCHEME_OBJECT * EXFUN (data, (entry_count_t));
-
-#define DECLARE_DATA_OBJECT(name, data)                                        \
-extern SCHEME_OBJECT EXFUN (data, (void));
-
-#include "compinit.h"
-
-#undef DECLARE_COMPILED_CODE
-#undef DECLARE_COMPILED_DATA
-#undef DECLARE_COMPILED_DATA_NS
-#undef DECLARE_DATA_OBJECT
-
-#define DECLARE_COMPILED_CODE(name, nentries, decl_code, code)         \
-  result = (declare_compiled_code (name, nentries, decl_code, code));  \
-  if (result != 0)                                                     \
-    return (result);
-
-#define DECLARE_COMPILED_DATA(name, decl_data, data)                   \
-  result = (declare_compiled_data (name, decl_data, data));            \
-  if (result != 0)                                                     \
-    return (result);
-
-#define DECLARE_COMPILED_DATA_NS(name, data)                           \
-  result = (declare_compiled_data_ns (name, data));                    \
-  if (result != 0)                                                     \
-    return (result);
-
-#define DECLARE_DATA_OBJECT(name, data)                                        \
-  result = (declare_data_object (name, data));                         \
-  if (result != 0)                                                     \
-    return (result);
-
-int
-DEFUN_VOID (initialize_compiled_code_blocks)
-{
-  int result;
-#include "compinit.h"
-  return (0);
-}
index 0329eafbf68e45ce2a20599664f1420311482324..d4fbb948acdbb4dbf224bb441d4a86688398c38d 100644 (file)
@@ -1,7 +1,7 @@
 dnl Process this file with autoconf to produce a configure script.
 
 AC_INIT([MIT/GNU Scheme microcode], [14.18], [bug-mit-scheme@gnu.org], [mit-scheme])
-AC_REVISION([$Id: configure.ac,v 1.38 2007/02/24 17:09:42 cph Exp $])
+AC_REVISION([$Id: configure.ac,v 1.39 2007/04/04 05:08:19 riastradh Exp $])
 AC_CONFIG_SRCDIR([boot.c])
 AC_CONFIG_HEADERS([config.h])
 AC_PROG_MAKE_SET
@@ -184,8 +184,8 @@ MODULE_TARGETS=
 MODULE_RULES=/dev/null
 MODULE_CFLAGS="-DCOMPILE_AS_MODULE"
 MODULE_LDFLAGS=
-LIARC_RULES_1=/dev/null
-LIARC_RULES_2=/dev/null
+LIARC_VARS=/dev/null
+LIARC_RULES=/dev/null
 
 dnl Checks for programs.
 AC_PROG_CC
@@ -195,9 +195,9 @@ AC_PROG_LN_S
 AC_PROG_MAKE_SET
 if test ${GCC} = yes; then
     if test ${enable_debugging} = no; then
-       CFLAGS=-O3
+       CFLAGS="-fPIC -O3"
     else
-       CFLAGS="-O0 -g"
+       CFLAGS="-fPIC -O0 -g"
        LDFLAGS="${LDFLAGS} -g"
     fi
     CFLAGS="${CFLAGS} -Wall"
@@ -876,8 +876,8 @@ c)
     AC_DEFINE([COMPILE_FOR_STATIC_LINKING], [1],
        [Define to 1 for static compilation of C native code.])
     OPTIONAL_BASES="${OPTIONAL_BASES} cmpauxmd unstackify compinit"
-    LIARC_RULES_1=liarc-rules-1
-    LIARC_RULES_2=makegen/liarc-rules-2
+    LIARC_VARS=liarc-vars
+    LIARC_RULES=liarc-rules
     ;;
 *)
     AC_MSG_RESULT([yes, for ${SCM_ARCH}])
@@ -930,8 +930,8 @@ AC_SUBST([MODULE_TARGETS])
 AC_SUBST_FILE([MODULE_RULES])
 AC_SUBST([MODULE_CFLAGS])
 AC_SUBST([MODULE_LDFLAGS])
-AC_SUBST_FILE([LIARC_RULES_1])
-AC_SUBST_FILE([LIARC_RULES_2])
+AC_SUBST_FILE([LIARC_VARS])
+AC_SUBST_FILE([LIARC_RULES])
 
 AC_CONFIG_FILES([Makefile])
 AC_OUTPUT
diff --git a/v7/src/microcode/make-compinit b/v7/src/microcode/make-compinit
deleted file mode 100755 (executable)
index df352d3..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/bin/sh
-grep \^DECLARE_COMPILED_CODE "${@}" | sed -e 's/.*:/  /'
-grep \^DECLARE_COMPILED_DATA "${@}" | sed -e 's/.*:/  /'
-grep \^DECLARE_DATA_OBJECT "${@}" | sed -e 's/.*:/  /'
index 6beaafbdb2b680c720cabffb8d6b24b1cea95e87..dbca294cb4129925c0d0e6564b582308e47e0dd9 100644 (file)
@@ -1,6 +1,6 @@
 # -*- Makefile -*-
 #
-# $Id: Makefile.in.in,v 1.44 2007/02/24 17:09:46 cph Exp $
+# $Id: Makefile.in.in,v 1.45 2007/04/04 05:08:19 riastradh Exp $
 #
 # Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
 #     1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
@@ -117,9 +117,9 @@ COMPILE_MODULE = $(COMPILE) $(MODULE_CFLAGS)
 LINK_MODULE = $(LINK) $(MODULE_LDFLAGS)
 MODULE_LIBS = -lc
 
-# **** Rules for C back end (part 1) ****
+# **** Rules for C back end (part 1, variables) ****
 
-@LIARC_RULES_1@
+@LIARC_VARS@
 
 # **** Program definitions ****
 
@@ -176,16 +176,20 @@ ALL_LIBS = $(aux_LIBS)
 ALL_DATA = $(aux_DATA)
 
 MOSTLYCLEAN_FILES = *.o cmpauxmd.s usrdef.c compinit.h utabmd.c utabmd.bci \
-       bchdef.c $(LIARC_OBJECTS)
+       bchdef.c $(LIARC_OBJECTS) $(LIARC_BUNDLE_CLEAN_FILES)
 
 CLEAN_FILES = $(ALL_PROGRAMS) $(ALL_LIBS) $(ALL_DATA) $(EXTRA_PROGRAMS)
 
 DISTCLEAN_FILES = Makefile config.h config.cache config.log config.status \
        cmpauxmd.m4 cmpauxmd.c cmpintmd.h makegen-cc
 
-MAINTAINER_CLEAN_FILES = Makefile.in Makefile.deps liarc-rules-1 \
+MAINTAINER_CLEAN_FILES = Makefile.in Makefile.deps liarc-vars liarc-rules \
        config.h.in configure TAGS
 
+C_CLEAN_FILES = *.o usrdef.c compinit.h utabmd.bci bchdef.c $(LIARC_OBJECTS) \
+       $(LIARC_BUNDLE_CLEAN_FILES) $(ALL_PROGRAMS) $(ALL_LIBS) \
+       $(EXTRA_PROGRAMS) $(DISTCLEAN_FILES)
+
 # **** Implicit rules ****
 
 .SUFFIXES:
@@ -204,7 +208,9 @@ MAINTAINER_CLEAN_FILES = Makefile.in Makefile.deps liarc-rules-1 \
 
 default-target: $(ALL_PROGRAMS) $(ALL_LIBS)
 
-all: $(ALL_PROGRAMS) $(ALL_LIBS) $(ALL_DATA)
+all: $(ALL_PROGRAMS) $(ALL_LIBS) $(ALL_DATA) $(LIARC_BOOT_BUNDLES)
+
+liarc-bundles: all $(LIARC_BUNDLES)
 
 scheme: $(scheme_OBJECTS) $(scheme_DEPENDENCIES)
        -rm -f $@
@@ -287,8 +293,12 @@ maintainer-clean: distclean
        -rm -f $(MAINTAINER_CLEAN_FILES)
        ( cd cmpauxmd && $(MAKE) $@ )
 
+c-clean:
+       -rm -f $(C_CLEAN_FILES)
+       -rm -rf autom4te.cache
+
 install: install-binPROGRAMS install-auxPROGRAMS install-auxLIBS \
-       install-auxDATA
+       install-auxDATA $(LIARC_INSTALL)
 
 install-binPROGRAMS: $(bin_PROGRAMS)
        $(mkinstalldirs) $(DESTDIR)$(bindir)
@@ -331,16 +341,16 @@ install-auxDATA: $(aux_DATA)
        done
 
 .PHONY: default-target
-.PHONY: all tags TAGS mostlyclean clean distclean maintainer-clean
-.PHONY: install install_binPROGRAMS install_auxPROGRAMS install_auxDATA
+.PHONY: all tags TAGS mostlyclean clean distclean maintainer-clean c-clean
+.PHONY: install install-binPROGRAMS install-auxPROGRAMS install-auxDATA
 
 # **** File dependencies ****
 
 @(write-dependencies)@
 
-# **** Rules for C back end (part 2) ****
+# **** Rules for C back end (part 2, rules) ****
 
-@LIARC_RULES_2@
+@LIARC_RULES@
 
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/v7/src/microcode/makegen/bundles-liarc.scm b/v7/src/microcode/makegen/bundles-liarc.scm
new file mode 100644 (file)
index 0000000..ffb9f0e
--- /dev/null
@@ -0,0 +1,88 @@
+#| -*-Scheme-*-
+
+$Id: bundles-liarc.scm,v 1.1 2007/04/04 05:08:19 riastradh Exp $
+
+Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
+    1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
+    2006, 2007 Massachusetts Institute of Technology
+
+This file is part of MIT/GNU Scheme.
+
+MIT/GNU Scheme is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or (at
+your option) any later version.
+
+MIT/GNU Scheme is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with MIT/GNU Scheme; if not, write to the Free Software
+Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301,
+USA.
+
+|#
+
+;;;; Bundles for LIARC to be linked into dynamically loadable shared
+;;;; objects.
+
+;;; Format: (bundle (package*) source-directoory*)
+;;;   bundle ::= string
+;;;   package ::= pathname | (pathname os-type*)
+;;;   source-directory ::= (pathname exclude-filename*)
+
+;++ This is fragile: excluding filenames is bogus.  But it will work
+;++ until we get a real module system.
+
+("sf+compiler"
+ ("../sf/sf"
+  ("../compiler/compiler" "unx")
+  "../star-parser/parser")
+ ("../sf")
+ ("../compiler")
+ ("../compiler/base")
+ ("../compiler/back")
+ ("../compiler/fggen")
+ ("../compiler/fgopt")
+ ("../compiler/machines/C")
+ ("../compiler/rtlbase")
+ ("../compiler/rtlgen")
+ ("../compiler/rtlopt")
+ ("../star-parser" "compile" "ed-ffi" "load" "test-parser"))
+
+("edwin"
+ ("../edwin/edwin")
+ ("../edwin" "decls"))
+
+;; These are listed alphabetically; I don't think the order matters.
+
+("6001"
+ ("../6001/6001")
+ ("../6001" "make"))
+
+("cref"
+ ("../cref/cref")
+ ("../cref" "make"))
+
+("imail"
+ ("../imail/imail")
+ ("../imail" "compile" "ed-ffi" "fake-env" "load"))
+
+("sos"
+ ("../sos/sos")
+ ("../sos" "compile" "ed-ffi" "load" "microbench"))
+
+("ssp"
+ ("../ssp/ssp")
+ ("../ssp" "compile" "load"))
+
+("xdoc"
+ ("../xdoc/xdoc")
+ ("../xdoc" "compile" "load" "validate-xdoc"))
+
+("xml"
+ ("../xml/xml")
+ ("../xml"
+  "compile" "ed-ffi" "load" "parser-macro" "test-parser" "test-turtle" "xpath"))
index 4eac7fd8a61e8b4f09b9a24ff567c7356e33e652..0217ad61fff349d83a5d51dce5164ae897aafda0 100644 (file)
@@ -1,6 +1,6 @@
 #| -*-Scheme-*-
 
-$Id: dirs-liarc.scm,v 1.2 2007/01/12 02:57:10 cph Exp $
+$Id: dirs-liarc.scm,v 1.3 2007/04/04 05:08:19 riastradh Exp $
 
 Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
     1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
@@ -31,15 +31,3 @@ USA.
 ;;; exclusions in the cdr.
 
 ("../runtime")
-("../sf")
-("../cref")
-("../compiler")
-("../compiler/back")
-("../compiler/base")
-("../compiler/fggen")
-("../compiler/fgopt")
-("../compiler/machines/C")
-("../compiler/rtlbase")
-("../compiler/rtlgen")
-("../compiler/rtlopt")
-("../star-parser" "compile" "ed-ffi" "load" "test-parser")
similarity index 72%
rename from v7/src/microcode/makegen/liarc-rules-2
rename to v7/src/microcode/makegen/liarc-base-rules
index de1cb9832e6014ba4acc3a5e91d1748a8753cb1f..37dc76a63b5f10f1c228041b271932181c11ccb4 100644 (file)
@@ -1,6 +1,6 @@
 # -*- Makefile -*-
 #
-# $Id: liarc-rules-2,v 1.2 2007/01/12 02:57:10 cph Exp $
+# $Id: liarc-base-rules,v 1.1 2007/04/04 05:08:19 riastradh Exp $
 #
 # Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
 #     1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
@@ -30,6 +30,17 @@ cmpauxmd.o: cmpauxmd.c $(LIARC_HEAD_FILES) prims.h bignum.h bitstr.h avltree.h
 compinit.o: compinit.c compinit.h $(LIARC_HEAD_FILES)
 unstackify.o: unstackify.c stackops.h $(LIARC_HEAD_FILES)
 
-compinit.h: $(LIARC_SOURCES) Makefile
+compinit.c compinit.h: $(LIARC_SOURCES) Makefile
        rm -f $@
-       ./make-compinit $(LIARC_SOURCES) > $@
+       sh ../etc/c-bundle.sh static compinit $(LIARC_SOURCES)
+
+install-liarc-bundles: $(LIARC_BUNDLES)
+       $(mkinstalldirs) $(DESTDIR)$(AUXDIR)/shared
+       @for p in $(LIARC_BUNDLES); do \
+           if test -f $$p; then \
+               echo "$(INSTALL_DATA) $$p $(DESTDIR)$(AUXDIR)/shared/."; \
+               $(INSTALL_DATA) $$p $(DESTDIR)$(AUXDIR)/shared/.; \
+           fi; \
+       done
+
+.PHONY: install-liarc-bundles
index 3e269c24aa2d9cb158540838446bee56d23a837c..38684c61fbd99dd7b241c915c0458df4accd366f 100644 (file)
@@ -1,6 +1,6 @@
 #| -*-Scheme-*-
 
-$Id: makegen.scm,v 1.15 2007/01/12 02:57:10 cph Exp $
+$Id: makegen.scm,v 1.16 2007/04/04 05:08:19 riastradh Exp $
 
 Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
     1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
@@ -33,6 +33,7 @@ USA.
 (load-option 'SYNCHRONOUS-SUBPROCESS)
 \f
 (define (generate-makefile)
+  (generate-liarc-files)
   (let ((file-lists
         (map (lambda (pathname)
                (cons (pathname-name pathname)
@@ -62,8 +63,22 @@ USA.
                          (loop
                           (if (char=? #\newline char)
                               0
-                              (+ column 1)))))))))))))
-  (call-with-output-file "liarc-rules-1"
+                              (+ column 1))))))))))))))
+
+(define (write-header output)
+  (write-string "# This file automatically generated at " output)
+  (write-string (universal-time->local-iso8601-string (get-universal-time))
+               output)
+  (write-string "." output)
+  (newline output)
+  (newline output))
+\f
+(define (generate-liarc-files)
+  (generate-liarc-variables)
+  (generate-liarc-rules))
+
+(define (generate-liarc-variables)
+  (call-with-output-file "liarc-vars"
     (lambda (output)
       (write-header output)
       (write-rule "LIARC_HEAD_FILES"
@@ -72,24 +87,124 @@ USA.
                  output)
       (newline output)
       (newline output)
-      (let ((files
-            (cons "utabmd"
-                  (enumerate-directories
-                   (read-file "makegen/dirs-liarc.scm")))))
-       (write-rule "LIARC_SOURCES" "=" (files+suffix files ".c") output)
-       (newline output)
-       (newline output)
-       (write-rule "LIARC_OBJECTS" "=" (files+suffix files ".o") output)
-       (newline output)))))
+      (write-rule "LIARC_BOOT_BUNDLES" "=" '("sf+compiler.so") output)
+      (newline output)
+      (write-rule "LIARC_INSTALL" "=" '("install-liarc-bundles") output)
+      (newline output)
+      (generate-liarc-static-variables output)
+      (generate-liarc-dynamic-variables output))))
 
-(define (write-header output)
-  (write-string "# This file automatically generated at " output)
-  (write-string (universal-time->local-iso8601-string (get-universal-time))
-               output)
-  (write-string "." output)
-  (newline output)
+(define (generate-liarc-rules)
+  (call-with-output-file "liarc-rules"
+    (lambda (output)
+      (write-header output)
+      (generate-liarc-static-rules output)
+      (generate-liarc-dynamic-rules output))))
+
+(define (generate-liarc-static-variables output)
+  (let ((files (liarc-static-files)))
+    (write-rule "LIARC_SOURCES" "=" (files+suffix files ".c") output)
+    (newline output)
+    (newline output)
+    (write-rule "LIARC_OBJECTS" "=" (files+suffix files ".o") output)
+    (newline output)
+    (newline output)))
+
+(define (generate-liarc-static-rules output)
+  (call-with-input-file "makegen/liarc-base-rules"
+    (lambda (input)
+      (let loop ()
+       (let ((char (read-char input)))
+         (if (not (eof-object? char))
+             (begin (write-char char output)
+                    (loop)))))))
   (newline output))
 \f
+(define (generate-liarc-dynamic-variables output)
+  (let ((bundles (liarc-dynamic-bundles)))
+    (write-rule "LIARC_BUNDLE_CLEAN_FILES"
+               "="
+               (append-map (lambda (bundle)
+                             (map (lambda (suffix)
+                                    (string-append (car bundle) suffix))
+                                  '("-init.h" "-init.c" "-init.o" ".so")))
+                           bundles)
+               output)
+    (newline output)
+    (write-rule "LIARC_BUNDLES"
+               "="
+               ;; Adding "all" to this list is a kludge for debugging
+               ;; info.  Exactly what this kludge accomplishes I have
+               ;; totally forgotten.
+               (cons "all"
+                     (map (lambda (bundle)
+                            (string-append (car bundle) ".so"))
+                          (liarc-dynamic-bundles)))
+               output)))
+
+(define (generate-liarc-dynamic-rules output)
+  (for-each (lambda (bundle)
+             (let ((files
+                    (append (append-map package-description-files
+                                        (cadr bundle))
+                            (enumerate-directories (cddr bundle)))))
+               (write-rule (string-append (car bundle) ".so")
+                           ":"
+                           (files+suffix files ".o")
+                           output)
+               (newline output)
+               (let ((write-command
+                      (lambda (prefix suffix)
+                        (write-char #\tab output)
+                        (write-string prefix output)
+                        (write-string (car bundle) output)
+                        (write-string suffix output)
+                        (newline output))))
+                 (write-command "$(SHELL) ../etc/c-bundle.sh library "
+                                "-init $(^:.o=.c)")
+                 (write-command "$(COMPILE_MODULE) -c " "-init.c")
+                 (write-command "$(LINK_MODULE) " "-init.o $^")
+                 (write-command "rm -f " "-init.h")
+                 (write-command "rm -f " "-init.c")
+                 (write-command "rm -f " "-init.o"))
+               (newline output)))
+           (liarc-dynamic-bundles)))
+\f
+(define (liarc-static-files)
+  (append '("utabmd")
+         (append-map package-description-files
+                     (read-file "makegen/pkds-liarc.scm"))
+         (enumerate-directories (read-file "makegen/dirs-liarc.scm"))))
+
+(define (liarc-dynamic-bundles)
+  (read-file "makegen/bundles-liarc.scm"))
+
+(define (enumerate-directories specs)
+  (map (lambda (path)
+        (enough-namestring (pathname-new-type path #f)))
+       (append-map (lambda (spec)
+                    (let ((dir (pathname-as-directory (car spec))))
+                      (if (file-directory? dir)
+                          (delete-matching-items
+                              (directory-read (merge-pathnames "*.scm" dir))
+                            (lambda (path)
+                              (member (pathname-name path) (cdr spec))))
+                          (begin
+                            (warn "Can't read directory:" dir)
+                            '()))))
+                  specs)))
+
+(define os-pkd-suffixes '("unx" "w32" "os2"))
+
+(define (package-description-files descriptor)
+  (receive (filename suffixes)
+      (if (pair? descriptor)
+         (values (car descriptor) (cdr descriptor))
+         (values descriptor os-pkd-suffixes))
+    (map (lambda (suffix)
+          (string-append filename "-" suffix))
+        suffixes)))
+\f
 (define (interpret-command command column file-lists output)
   (let ((malformed (lambda () (error "Malformed command:" command))))
     (if (not (and (pair? command)
@@ -120,21 +235,6 @@ USA.
        (else
         (error "Unknown command:" command)))))))
 
-(define (enumerate-directories specs)
-  (map (lambda (path)
-        (enough-namestring (pathname-new-type path #f)))
-       (append-map (lambda (spec)
-                    (let ((dir (pathname-as-directory (car spec))))
-                      (if (file-directory? dir)
-                          (delete-matching-items
-                              (directory-read (merge-pathnames "*.scm" dir))
-                            (lambda (path)
-                              (member (pathname-name path) (cdr spec))))
-                          (begin
-                            (warn "Can't read directory:" dir)
-                            '()))))
-                  specs)))
-
 (define (files+suffix files suffix)
   (map (lambda (file)
         (string-append file suffix))
diff --git a/v7/src/microcode/makegen/pkds-liarc.scm b/v7/src/microcode/makegen/pkds-liarc.scm
new file mode 100644 (file)
index 0000000..4fdd0f1
--- /dev/null
@@ -0,0 +1,33 @@
+#| -*-Scheme-*-
+
+$Id: pkds-liarc.scm,v 1.1 2007/04/04 05:08:19 riastradh Exp $
+
+Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
+    1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
+    2006, 2007 Massachusetts Institute of Technology
+
+This file is part of MIT/GNU Scheme.
+
+MIT/GNU Scheme is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or (at
+your option) any later version.
+
+MIT/GNU Scheme is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with MIT/GNU Scheme; if not, write to the Free Software
+Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301,
+USA.
+
+|#
+
+;;;; Pathnames of package description files
+
+;;; Format is either the filename of the package description file, or
+;;; a pair of that and a list of all of the OS types we want.
+
+"../runtime/runtime"
index 5fa5d7e762157e79bf6515f2014da1a4bbf25aca..b29a9a1777e16bd3dca8a27283fa7cf156aae137 100644 (file)
@@ -1,4 +1,4 @@
-# $Id: Makefile.in,v 1.12 2007/01/05 21:19:27 cph Exp $
+# $Id: Makefile.in,v 1.13 2007/04/04 05:08:19 riastradh Exp $
 #
 # Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
 #     1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
@@ -59,6 +59,7 @@ INSTALL = @INSTALL@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_COM = @INSTALL_COM@
 
 LN_S = @LN_S@
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
@@ -87,8 +88,8 @@ install:
        -rm -rf $(DESTDIR)$(RODIR)
        $(mkinstalldirs) $(DESTDIR)$(RODIR)
        @for F in $(RUNOPTS); do \
-           echo "$(INSTALL_DATA) $${F}.com $(DESTDIR)$(RODIR)/.";\
-           $(INSTALL_DATA) $${F}.com $(DESTDIR)$(RODIR)/.;\
+           echo "$(INSTALL_COM) $${F}.com $(DESTDIR)$(RODIR)/.";\
+           $(INSTALL_COM) $${F}.com $(DESTDIR)$(RODIR)/.;\
        done
        @for F in $(RUNOPTS); do \
            REL="../SRC/runtime/$${F}.bci";\
index d99531f853c6c7a5a2f6719da01b369179c7902b..c1b58a9885844c4eb72fe4f4990acd6501282cc0 100644 (file)
@@ -1,6 +1,6 @@
 #| -*-Scheme-*-
 
-$Id: packag.scm,v 14.50 2007/01/05 21:19:28 cph Exp $
+$Id: packag.scm,v 14.51 2007/04/04 05:08:19 riastradh Exp $
 
 Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
     1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
@@ -213,7 +213,7 @@ USA.
   ;; program runs before it gets purified, some of its run-time state
   ;; can end up being purified also.
   (flush-purification-queue!))
-
+\f
 (define (package-set-pathname pathname #!optional os-type)
   (make-pathname (pathname-host pathname)
                 (pathname-device pathname)
@@ -242,11 +242,12 @@ USA.
                (value (prim name)))
           (if (or (not value) load/suppress-loading-message?)
               value
-              (let ((port (notification-output-port)))
-                (fresh-line port)
-                (write-string ";Initialized " port)
-                (write name port)
-                value))))))
+               (begin
+                 (write-notification-line
+                  (lambda (port)
+                    (write-string "Initialized " port)
+                    (write name port)))
+                 value))))))
 \f
 (define-integrable (make-package-file tag version descriptions loads)
   (vector tag version descriptions loads))
index 957915ec6bc74cb102a24bc94477db305842a2a4..4320be1ae7fd3c049457c7686509b4022afe354b 100644 (file)
@@ -1,4 +1,4 @@
-# $Id: Makefile.in,v 1.8 2007/01/05 21:19:29 cph Exp $
+# $Id: Makefile.in,v 1.9 2007/04/04 05:08:19 riastradh Exp $
 #
 # Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
 #     1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
@@ -59,6 +59,7 @@ INSTALL = @INSTALL@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_COM = @INSTALL_COM@
 
 LN_S = @LN_S@
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
@@ -80,7 +81,10 @@ tags TAGS:
 
 install:
        $(mkinstalldirs) $(DESTDIR)$(SOS_DIR)
-       $(INSTALL_DATA) *.com $(DESTDIR)$(SOS_DIR)/.
+       @for F in *.com; do \
+           echo "$(INSTALL_COM) $${F} $(DESTDIR)$(SOS_DIR)/.";\
+           $(INSTALL_COM) $${F} $(DESTDIR)$(SOS_DIR)/.;\
+       done
        $(INSTALL_DATA) *.bci $(DESTDIR)$(SOS_DIR)/.
        $(INSTALL_DATA) sos-unx.pkd $(DESTDIR)$(SOS_DIR)/.
        $(INSTALL_DATA) $(srcdir)/load.scm $(DESTDIR)$(SOS_DIR)/.
index 1e22c73fa6bf62b6771189d27183acebc7ce5e1e..168d1585d6c5b929b3dddef83a8998608d7e24aa 100644 (file)
@@ -1,6 +1,6 @@
 #| -*-Scheme-*-
 
-$Id: load.scm,v 1.18 2007/01/05 21:19:29 cph Exp $
+$Id: load.scm,v 1.19 2007/04/04 05:08:19 riastradh Exp $
 
 Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
     1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
@@ -27,5 +27,6 @@ USA.
 
 (with-working-directory-pathname (directory-pathname (current-load-pathname))
   (lambda ()
+    (declare-shared-library "sos" (lambda () #t))
     (load-package-set "sos")))
 (add-subsystem-identification! "SOS" '(1 8))
\ No newline at end of file
index 286ef6f486ca504657b2a981b2b650f5ebbf27f7..91e99f23d4af20969f90a2253364c0a4d62874a4 100644 (file)
@@ -1,4 +1,4 @@
-# $Id: Makefile.in,v 1.5 2007/01/05 21:19:29 cph Exp $
+# $Id: Makefile.in,v 1.6 2007/04/04 05:08:19 riastradh Exp $
 #
 # Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
 #     1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
@@ -54,6 +54,7 @@ INSTALL = @INSTALL@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_COM = @INSTALL_COM@
 
 LN_S = @LN_S@
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
@@ -68,7 +69,10 @@ include ../Makefile.std
 
 install:
        $(mkinstalldirs) $(DESTDIR)$(SSP_DIR)
-       $(INSTALL_DATA) *.com $(DESTDIR)$(SSP_DIR)/.
+       @for F in *.com; do \
+           echo "$(INSTALL_COM) $${F} $(DESTDIR)$(SSP_DIR)/.";\
+           $(INSTALL_COM) $${F} $(DESTDIR)$(SSP_DIR)/.;\
+       done
        $(INSTALL_DATA) *.bci $(DESTDIR)$(SSP_DIR)/.
        $(INSTALL_DATA) ssp-unx.pkd $(DESTDIR)$(SSP_DIR)/.
        $(INSTALL_DATA) $(srcdir)/load.scm $(DESTDIR)$(SSP_DIR)/.
index a986c40b165a979c9d039deb3ca430533fa842d3..b1e529672e58bc04e3c61bfd6524edd51d7ffb7d 100644 (file)
@@ -1,6 +1,6 @@
 #| -*-Scheme-*-
 
-$Id: load.scm,v 1.8 2007/01/05 21:19:29 cph Exp $
+$Id: load.scm,v 1.9 2007/04/04 05:08:19 riastradh Exp $
 
 Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
     1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
@@ -32,5 +32,6 @@ USA.
 (load-option 'mime-codec)
 (with-working-directory-pathname (directory-pathname (current-load-pathname))
   (lambda ()
+    (declare-shared-library "ssp" (lambda () #t))
     (load-package-set "ssp")))
 (add-subsystem-identification! "SSP" '(0 4))
\ No newline at end of file
index dc7590b8680400a73aaf3563d28685ad2a6d2d07..15ae2df4cee161d3b767858b5d8104b3018347dd 100644 (file)
@@ -1,4 +1,4 @@
-# $Id: Makefile.in,v 1.7 2007/01/05 21:19:29 cph Exp $
+# $Id: Makefile.in,v 1.8 2007/04/04 05:08:19 riastradh Exp $
 #
 # Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
 #     1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
@@ -59,6 +59,7 @@ INSTALL = @INSTALL@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_COM = @INSTALL_COM@
 
 LN_S = @LN_S@
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
@@ -80,7 +81,10 @@ tags TAGS:
 
 install:
        $(mkinstalldirs) $(DESTDIR)$(PARSER_DIR)
-       $(INSTALL_DATA) *.com $(DESTDIR)$(PARSER_DIR)/.
+       @for F in *.com; do \
+           echo "$(INSTALL_COM) $${F} $(DESTDIR)$(PARSER_DIR)/.";\
+           $(INSTALL_COM) $${F} $(DESTDIR)$(PARSER_DIR)/.;\
+       done
        $(INSTALL_DATA) *.bci $(DESTDIR)$(PARSER_DIR)/.
        $(INSTALL_DATA) parser-unx.pkd $(DESTDIR)$(PARSER_DIR)/.
        $(INSTALL_DATA) $(srcdir)/load.scm $(DESTDIR)$(PARSER_DIR)/.
index 46cb8c4fec19ca6fdf23e0bbd2fc255f3ac370e7..39991431dda4f5cebf4afdd66caeb0fdfac9c386 100644 (file)
@@ -1,4 +1,4 @@
-# $Id: Makefile.in,v 1.4 2007/01/05 21:19:29 cph Exp $
+# $Id: Makefile.in,v 1.5 2007/04/04 05:08:19 riastradh Exp $
 #
 # Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
 #     1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
@@ -54,6 +54,7 @@ INSTALL = @INSTALL@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_COM = @INSTALL_COM@
 
 LN_S = @LN_S@
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
@@ -68,7 +69,10 @@ include ../Makefile.std
 
 install:
        $(mkinstalldirs) $(DESTDIR)$(XDOC_DIR)
-       $(INSTALL_DATA) *.com $(DESTDIR)$(XDOC_DIR)/.
+       @for F in *.com; do \
+           echo "$(INSTALL_COM) $${F} $(DESTDIR)$(XDOC_DIR)/.";\
+           $(INSTALL_COM) $${F} $(DESTDIR)$(XDOC_DIR)/.;\
+       done
        $(INSTALL_DATA) *.bci $(DESTDIR)$(XDOC_DIR)/.
        $(INSTALL_DATA) xdoc-unx.pkd $(DESTDIR)$(XDOC_DIR)/.
        $(INSTALL_DATA) $(srcdir)/load.scm $(DESTDIR)$(XDOC_DIR)/.
index 8682c44e76f44e5ab7d7090b3e4e4e91f2010746..1c8d9d2b28d14d8ed702c3ae38589a452697f37b 100644 (file)
@@ -1,6 +1,6 @@
 #| -*-Scheme-*-
 
-$Id: load.scm,v 1.5 2007/01/05 21:19:29 cph Exp $
+$Id: load.scm,v 1.6 2007/04/04 05:08:19 riastradh Exp $
 
 Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
     1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
@@ -47,5 +47,6 @@ USA.
     (export 'xml-comment 'comment)))
 (with-working-directory-pathname (directory-pathname (current-load-pathname))
   (lambda ()
+    (declare-shared-library "xdoc" (lambda () #t))
     (load-package-set "xdoc")))
 (add-subsystem-identification! "XDOC" '(0 3))
\ No newline at end of file
index 847697647fc1cb0e2a76d1de0621714b08f7a813..6f21ce6a2f3fa336bf6e41b77a5fdd5726bb1dc4 100644 (file)
@@ -1,4 +1,4 @@
-# $Id: Makefile.in,v 1.8 2007/01/05 21:19:29 cph Exp $
+# $Id: Makefile.in,v 1.9 2007/04/04 05:08:19 riastradh Exp $
 #
 # Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
 #     1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
@@ -59,6 +59,7 @@ INSTALL = @INSTALL@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_COM = @INSTALL_COM@
 
 LN_S = @LN_S@
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
@@ -80,7 +81,10 @@ tags TAGS:
 
 install:
        $(mkinstalldirs) $(DESTDIR)$(XML_DIR)
-       $(INSTALL_DATA) *.com $(DESTDIR)$(XML_DIR)/.
+       @for F in *.com; do \
+           echo "$(INSTALL_COM) $${F} $(DESTDIR)$(XML_DIR)/.";\
+           $(INSTALL_COM) $${F} $(DESTDIR)$(XML_DIR)/.;\
+       done
        $(INSTALL_DATA) *.bci $(DESTDIR)$(XML_DIR)/.
        $(INSTALL_DATA) xml-unx.pkd $(DESTDIR)$(XML_DIR)/.
        $(INSTALL_DATA) $(srcdir)/load.scm $(DESTDIR)$(XML_DIR)/.
index 84b14f6bcebef9578553b4c5f7ded50504eaa393..63b6374c5b5cac4d3351e2d9123066f26d2111a7 100644 (file)
@@ -1,6 +1,6 @@
 #| -*-Scheme-*-
 
-$Id: load.scm,v 1.19 2007/01/05 21:19:29 cph Exp $
+$Id: load.scm,v 1.20 2007/04/04 05:08:19 riastradh Exp $
 
 Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
     1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
@@ -29,5 +29,6 @@ USA.
 (load-option 'SOS)
 (with-working-directory-pathname (directory-pathname (current-load-pathname))
   (lambda ()
+    (declare-shared-library "xml" (lambda () #t))
     (load-package-set "xml")))
 (add-subsystem-identification! "XML" '(1 0))
\ No newline at end of file