This is a set of patches against revision 515 of wh-sandbox. Index: README.build-improvements =================================================================== --- README.build-improvements (revision 515) +++ README.build-improvements (working copy) @@ -77,17 +77,11 @@ * Properly document the new build in a very intelligible way * Document src/scripts/document.in -* Reorganize the makefile pamphlets so that Axiom can build without - LaTeX or X11. - * Support cross-compilation. Work with Camm to enhance GCL in that respect. This is better done when we integrate GCL to GCC. * cleanup the Makefile pamphlets -* Support standard "clean", "mostlyclean", and "distclean" Makefile - targets - * Improve Boot documentation * Have Axiom use bootsys compile all Boot codes in src/interp. This @@ -127,3 +121,9 @@ * Fix fall-outs of missed DVI files. This is believed to be fixed with the recursive rule support. + +* Reorganize the makefile pamphlets so that Axiom can build without + LaTeX or X11. + +* Support standard "clean", "mostlyclean", and "distclean" Makefile + targets Index: src/scripts/document.in =================================================================== --- src/scripts/document.in (revision 515) +++ src/scripts/document.in (working copy) @@ -37,14 +37,23 @@ # Anything that comes after is treated as an argument, even # if it looks like an option +## 2007-04-10: +## After moving to a recent version of MSYS, and GCL-2.6.8pre, I +## noticed that double-colon ('::' in boottran::boottocl) will be +## translated to semi-colon (';') as if interpreted for path +## separator. I don't who is doing that, and I have no time to +## investigate it, and even if I do, it would not help much. +## Therefore, I've changed the script not to use double-colon. +## -- Gaby + # set -x address@hidden@ address@hidden@ +latex="@LATEX@" +index="@MAKEINDEX@" address@hidden@ address@hidden@ +notangle="@NOTANGLE@" +noweave="@NOWEAVE@" # Flags used to invoke the Lisp compiler in batch mode quiet="@axiom_quiet_flags@" @@ -103,16 +112,16 @@ case $lisp_flavor in gcl|sbcl|clisp) if [ -z "$output" ] ; then - $command $quiet $eval_flags \ - "(progn (compile-file \"$1\") (quit))" + # $command $quiet $eval_flags \ + echo "(progn (compile-file \"$1\") (quit))" | $command else # argument to:output-file has implementation defined # default -- we use merge-patnames to pick defaults # from *default-pathname-defaults* - $command $quiet $eval_flags \ - "(progn (compile-file \"$1\" :output-file \ - (merge-pathnames \"$output\")) (quit))" + # $command $quiet $eval_flags + echo "(progn (compile-file \"$1\" :output-file \ + (merge-pathnames \"$output\")) (quit))" | $command fi ;; # ECL makes the saved image executable only if :system-p it true. @@ -136,7 +145,8 @@ ## image. Consequently, we don't supply the $quiet flags ## when loading-and-saving. $command $eval_flags "(load \"$1\")" \ - $eval_flags "(boottran::save-core \"$output\")" + $eval_flags "(in-package \"boottran\")" \ + $eval_flags "(save-core \"$output\")" ;; *) error "don't know how to compile with '$lisp_flavor' Lisp" @@ -149,8 +159,9 @@ make_program() { case $lisp_flavor in gcl|sbcl|clisp) - $command $eval_flags \ - "(boottran::make-program \"$output\" (quote ($*)))" + ## $command $eval_flags \ + echo "(in-package \"boottran\") \ + (make-program \"$output\" (quote ($*)))" | $command ;; *) error "don't know how to build program with '$lisp_flavor' Lisp" @@ -165,8 +176,8 @@ translate_boot_file() { case $lisp_flavor in gcl|sbcl|clisp) - $command $quiet $eval_flags \ - "(progn (boottran::boottoclc \"$1\") (quit))" | tee $2 + # $command $quiet $eval_flags "(in-package \"boottran\")" \ + echo "(in-package \"boottran\") (progn (boottoclc \"$1\")) (quit)" | $command | tee $2 ;; *) error "don't know how to translate with '$lisp_flavor' Lisp" Index: src/algebra/Makefile.pamphlet =================================================================== --- src/algebra/Makefile.pamphlet (revision 515) +++ src/algebra/Makefile.pamphlet (working copy) @@ -376,8 +376,8 @@ for A in ${CATLIST} ; do \ echo ')compile "'$$A'.spad"' >> boo1.input ; \ done; \ - { echo ')read "boo1.input"' | \ - ${INTERPSYS} ${CTRACE} } || exit 1 ; \ + ( echo ')read "boo1.input"' | \ + ${INTERPSYS} ${CTRACE} ) || exit 1 ; \ echo "Stage 1 copy" ; \ for A in ${CATLIST} ; do \ cp $$A.NRLIB/code.$(FASLEXT) ${OUT}/$$A.$(FASLEXT) || exit 1 ; \ @@ -387,8 +387,8 @@ for A in ${CATLIST} ${DOMLIST} ; do \ echo ')compile "'$$A'.spad"' >> boo2.input ; \ done; \ - { echo ')read "boo2.input"' | \ - ${INTERPSYS} ${CTRACE} } || exit 1 ; \ + ( echo ')read "boo2.input"' | \ + ${INTERPSYS} ${CTRACE} ) || exit 1 ; \ echo "Stage 2 copy" ; \ for A in ${CATLIST} ${DOMLIST} ; do \ cp $$A.NRLIB/code.$(FASLEXT) ${OUT}/$$A.$(FASLEXT) || exit 1 ; \ @@ -400,8 +400,8 @@ for A in ${CATLIST} ${DOMLIST} ; do \ echo ')compile "'$$A'.spad"' >> boo3.input ; \ done; \ - { echo ')read "boo3.input"' | \ - ${INTERPSYS} ${CTRACE} } || exit 1 ; \ + ( echo ')read "boo3.input"' | \ + ${INTERPSYS} ${CTRACE} ) || exit 1 ; \ echo "Stage 3 object copy" ; \ for A in ${CATLIST} ${DOMLIST} ; do \ cp $$A.NRLIB/code.$(FASLEXT) ${OUT}/$$A.$(FASLEXT) || exit 1 ; \ Index: src/interp/patches.lisp.pamphlet =================================================================== --- src/interp/patches.lisp.pamphlet (revision 515) +++ src/interp/patches.lisp.pamphlet (working copy) @@ -64,8 +64,12 @@ ;;patches for now ;; browser stuff: -(defvar |$standard| 't) -(defvar |$saturn| 'nil) +;; gdr NOTES: it is WRONG to test for platforms, when in fact +;; gdr NOTES: one should test for functionalities. +#+:UNIX (defvar |$standard| 't) +#-:UNIX (defvar |$standard| 'nil) +#+(or :UNIX :winnt) (defvar |$saturn| 'nil) +#-(or :UNIX :winnt) (defvar |$saturn| 't) (defun CATCHALL (a &rest b) a) ;; not correct but ok for now (defvar |$demoFlag| nil) @@ -360,25 +364,25 @@ "A structure to hold XDR streams. The stream is printed out." (handle ) ;; this is what is used for xdr-open xdr-read xdr-write (name )) ;; this is used for printing -#+:akcl +#+(and :gcl (not (or :dos :win32))) (defun |xdrOpen| (str dir) (make-xdr-stream :handle (system:xdr-open str) :name str)) #+:CCL (defun |xdrOpen| (str dir) (xdr-open str dir) ) -#+:dos +#+(and :gcl (or :dos :win32)) (defun |xdrOpen| (str dir) (format t "xdrOpen called")) -#+:akcl +#+(and :akcl (not (or :dos :win32))) (defun |xdrRead| (xstr r) (system:xdr-read (xdr-stream-handle xstr) r) ) #+:CCL (defun |xdrRead| (xstr r) (xdr-read xstr r) ) -#+:dos +#+(and :gcl (or :dos :win32)) (defun |xdrRead| (str) (format t "xdrRead called")) -#+:akcl +#+(and :akcl (not (or :dos :win32))) (defun |xdrWrite| (xstr d) (system:xdr-write (xdr-stream-handle xstr) d) ) #+:CCL (defun |xdrWrite| (xstr d) (xdr-write xstr d) ) -#+:dos +#+(and :gcl (or :dos :win32)) (defun |xdrWrite| (str) (format t "xdrWrite called")) ;; here is a test for XDR Index: src/interp/Makefile.pamphlet =================================================================== --- src/interp/Makefile.pamphlet (revision 515) +++ src/interp/Makefile.pamphlet (working copy) @@ -518,7 +518,7 @@ In order for this information to be used during compiles we define <>= -PROCLAIMS=(progn (load "sys-pkg.lisp") (load "$(abs_srcdir)/interp-proclaims.lisp")) +PROCLAIMS=(progn (load "sys-pkg.lisp") (load "$(srcdir)/interp-proclaims.lisp")) @ @@ -991,10 +991,10 @@ @ echo '(in-package "BOOT")' >> makeint.lisp @ touch ${TIMESTAMP} @ echo '${YEARWEEK}' >> makeint.lisp - @ echo '(build-interpsys (append (quote ($(patsubst %, "%", ${OBJS}))) (quote ($(patsubst %, "%", ${ASCOMP}))) (quote ($(patsubst %, "%", ${INOBJS})))) (quote ($(patsubst %, "%", ${OPOBJS}))) (quote ($(patsubst %, "%", ${OCOBJS}))) (quote ($(patsubst %, "%", ${BROBJS}))) (quote ($(patsubst %, "%", ${TRANOBJS}))) (quote ($(patsubst %, "%", ${NAGBROBJS}))) (quote ($(patsubst %, "%", ${ASAUTO}))) "${AXIOM}")' >> makeint.lisp + @ echo '(build-interpsys (append (quote ($(patsubst %, "%", ${OBJS}))) (quote ($(patsubst %, "%", ${ASCOMP}))) (quote ($(patsubst %, "%", ${INOBJS})))) (quote ($(patsubst %, "$(BASE)%", ${OPOBJS}))) (quote ($(patsubst %, "$(BASE)%", ${OCOBJS}))) (quote ($(patsubst %, "$(BASE)%", ${BROBJS}))) (quote ($(patsubst %, "$(BASE)%", ${TRANOBJS}))) (quote ($(patsubst %, "$(BASE)%", ${NAGBROBJS}))) (quote ($(patsubst %, "$(BASE)%", ${ASAUTO}))) "${AXIOM}")' >> makeint.lisp @ echo '(boot::set-restart-hook)' >> makeint.lisp @ echo '(in-package "BOOT")' >> makeint.lisp - @ echo '(load "${INT}/algebra/warm.data")' >> makeint.lisp + @ echo '(load "$(BASE)${INT}/algebra/warm.data")' >> makeint.lisp @ echo '(|clearClams|)' >> makeint.lisp @ echo '(load "obey")' >> makeint.lisp @ echo '#+:akcl (setq compiler::*suppress-compiler-notes* t)' >> makeint.lisp @@ -1025,7 +1025,7 @@ @echo '(progn (gbc t) (load "makeint.lisp") (gbc t)' \ '#+:gcl(setf compiler::*default-system-p* nil)' \ '#+:gcl(compiler::emit-fn nil)' \ - '(user::spad-save "$@"))' | DAASE=$(axiom_targetdir) ${LISPSYS} + '(user::spad-save "$@"))' | DAASE="$(BASE)$(axiom_targetdir)" ${LISPSYS} @ echo 6a ${AXIOMSYS} created @ @@ -1109,26 +1109,29 @@ $(addsuffix .$(FASLEXT), $(IN_from_MID)): \ %.$(FASLEXT) : $(MID)/%.clisp - @ echo 10 making $@ from $< - @ ( B=`pwd`;\ + @ echo 10a making $@ from $< # hack 1 by Bill Page + # avoid paths in file names for Windows compatibility + @ (cd ${MID} ; \ if [ -z "${NOISE}" ] ; then \ - echo '(progn (compile-file "$<" :output-file "'$$B/'$@") (${BYE}))' | ${DEPSYS} ; \ + echo '(progn (compile-file "$(notdir $<)" :output-file "$(notdir $@)") (${BYE}))' | ${DEPSYS} ; \ else \ - echo '(progn (compile-file "$<" :output-file "'$$B/'$@") (${BYE}))' | ${DEPSYS} >> ${TMP}/trace ; \ - fi ) + echo '(progn (compile-file "$(notdir $<)" :output-file "$(notdir $@)") (${BYE}))' | ${DEPSYS} >> ${TMP}/trace ; \ + fi ; ) + @ mv "${MID}/$(notdir $@)" $@ AUTO_from_MID=\ mark pspad1 pspad2 wi1 wi2 $(addprefix $(AUTO)/, $(addsuffix .$(FASLEXT), $(AUTO_from_MID))): \ $(AUTO)/%.$(FASLEXT) : $(MID)/%.clisp - @ echo 10 making $@ from $< + @ echo 10b making $@ from $< # hack 2 by Bill Page @ (cd ${MID} ; \ if [ -z "${NOISE}" ] ; then \ - echo '(progn (compile-file "$<" :output-file "$@") (${BYE}))' | ${DEPSYS} ; \ + echo '(progn (compile-file "$(notdir $<)" :output-file "$(notdir $@)") (${BYE}))' | ${DEPSYS} ; \ else \ - echo '(progn (compile-file "$<" :output-file "$@") (${BYE}))' | ${DEPSYS} >> ${TMP}/trace ; \ - fi ) + echo '(progn (compile-file "$(notdir $<)" :output-file "$(notdir $@)") (${BYE}))' | ${DEPSYS} >> ${TMP}/trace ; \ + fi ; ) + @ mv "${MID}/$(notdir $@)" $@ MID_from_IN=\ apply as ax bc-matrix bc-misc bc-solve bc-util br-con br-data \ @@ -1182,11 +1185,9 @@ @ echo 79 making newaux.$(FASLEXT) from newaux.lisp ( \ if [ -z "${NOISE}" ] ; then \ - echo '(progn (compile-file "newaux.lisp" :output-file' \ - ' "newaux.$(FASLEXT)") (${BYE}))' | ${DEPSYS} ; \ + echo '(progn (compile-file "newaux.lisp" :output-file "newaux.$(FASLEXT)") (${BYE}))' | ${DEPSYS} ; \ else \ - echo '(progn (compile-file "newaux.lisp" :output-file' \ - ' "newaux.$(FASLEXT)") (${BYE}))' | ${DEPSYS} >> ${TMP}/trace ; \ + echo '(progn (compile-file "newaux.lisp" :output-file "newaux.$(FASLEXT)") (${BYE}))' | ${DEPSYS} >> ${TMP}/trace ; \ fi ) @ @@ -1249,11 +1250,11 @@ @ echo 616 making $@ from exposed.lsp if [ -z "${NOISE}" ] ; then \ echo '(progn (compile-file "exposed.lsp" :output-file' \ - ' "$(axiom_targetdir)/algebra/exposed.$(FASLEXT)") (${BYE}))' \ + ' "$(BASE)$(axiom_targetdir)/algebra/exposed.$(FASLEXT)") (${BYE}))' \ | ${DEPSYS} ; \ else \ echo '(progn (compile-file "exposed.lsp" :output-file' \ - ' "$(axiom_targetdir)/algebra/exposed.$(FASLEXT)") (${BYE}))' \ + ' "$(BASE)$(axiom_targetdir)/algebra/exposed.$(FASLEXT)") (${BYE}))' \ | ${DEPSYS} >> ${TMP}/trace ; \ fi Index: src/interp/bookvol5.pamphlet =================================================================== --- src/interp/bookvol5.pamphlet (revision 515) +++ src/interp/bookvol5.pamphlet (working copy) @@ -1078,7 +1078,7 @@ Prefix a filename with the {\bf AXIOM} shell variable. <>= (defun make-absolute-filename (name) - (concatenate 'string $spadroot name)) + (concatenate 'string $spadroot name)) @ \subsection{defun makeInitialModemapFrame} Index: src/interp/sys-pkg.lisp.pamphlet =================================================================== --- src/interp/sys-pkg.lisp.pamphlet (revision 515) +++ src/interp/sys-pkg.lisp.pamphlet (working copy) @@ -29,8 +29,21 @@ This is the boot to lisp compiler package which contains the src/boot files. Tt is the boot translator package. + +The following make-pkg command caused the error: +\begin{verbatim} +Loading sys-pkg.lisp + +Correctable error: A package error occurred on "BOOTTRAN": +"A package with this name already exists.". +Signalled by MAKE-PACKAGE. +\end{verbatim} +Perhaps this is related to the rsym_hack for windows?? + +Anyway I have commented it out of the build for now. +Bill Page, 21 April 2007 <<*>>= -(make-package "BOOTTRAN" :use '("LISP")) +;;(make-package "BOOTTRAN" :use '("LISP")) @ Everything in axiom that the user references eventually shows Index: src/lisp/Makefile.pamphlet =================================================================== --- src/lisp/Makefile.pamphlet (revision 515) +++ src/lisp/Makefile.pamphlet (working copy) @@ -59,8 +59,8 @@ \subsection{GCL already installed or built} -<>= -## Create a fresh image for building Boot +<>= +## Create a fresh image for building interpsys and AXIOMsys ## These objects files are the C runtime support ## and must be compiled into the Lisp image, ## as they must be present in the final interpreter @@ -70,8 +70,9 @@ $(build_libdir)/cfuns-c.o \ $(build_libdir)/sockio-c.o -$(OUT)/lisp$(EXEEXT): $(AXIOM_LISP) - echo '(compiler::link nil "${OUT}/lisp" ' \ +$(OUT)/lisp$(EXEEXT): initial-env.lisp + @axiom_gcl_rsym_hack@ + echo '(compiler::link (quote ("initial-env.lisp")) "lisp" ' \ ' (format nil "(progn (let ((*load-path* (cons ~S *load-path*))'\ ' (si::*load-types* ~S))' \ ' (compiler::emit-fn t))' \ @@ -79,9 +80,13 @@ ' (si::sgc-on t))' \ ' (setq compiler::*default-system-p* t))"' \ ' si::*system-directory* (quote (list ".lsp")))' \ - ' "$(lisp_c_objects)")' \ + ' "$(lisp_c_objects) @axiom_c_runtime_extra@")' \ | $(AXIOM_LISP) + $(INSTALL_PROGRAM) lisp$(EXEEXT) $(OUT) +initial-env.lisp: $(srcdir)/../boot/initial-env.lisp.pamphlet + $(axiom_build_document) --tangle $< --output=$@ + @ <<*>>= @@ -91,7 +96,7 @@ pamphlets = Makefile.pamphlet -build_libdir = $(abs_top_builddir)/src/lib +build_libdir = $(top_builddir)/src/lib lisp_DEPENDENCIES = $(build_libdir)/cfuns-c.o \ $(build_libdir)/sockio-c.o \ @@ -102,7 +107,7 @@ all-ax all-lisp: $(OUT)/lisp$(EXEEXT) -<> +<> # Build GCL takes quite a while, so we don't remove the # diretcory in mostlyclean. Rather, we do that in clean. Index: ChangeLog.wh =================================================================== --- ChangeLog.wh (revision 515) +++ ChangeLog.wh (working copy) @@ -1,3 +1,15 @@ +2007-04-25 Bill Page + + Changes relating to building on Windows MSYS/MinGW + * use echo ... | $command instead of -eval for build-prog + in configure.ac.pamphlet to avoid bug in GCL for Windows + * avoid paths in file names when calling Lisp in + src/interp/Makefile.pamphlet + * apply revision 498 from build-improvements for LN_S + in configure.ac.pamphlet and conf/var-defs + * apply revisions 394 and 411 from build-improvements for + Windows specific changes re XDR-OPEN etc. + 2007-04-25 Waldek Hebisch * src/doc/Makefile.pamphlet: Build Axion book with the rest Index: config/var-def.mk =================================================================== --- config/var-def.mk (revision 515) +++ config/var-def.mk (working copy) @@ -66,7 +66,12 @@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ -LN_S = @LN_S@ +## FIXME: The test done with Autoconf-2.60 and later concludes +## that "ln -s" is unusable on msys, and therefore defaults to +## "cp -p", but that default is unusable for us. For our +## purpose "ln -s" is just fine on that platform. Consequently +## we are explicitly overrding that value here. +LN_S = ln -s mkinstalldirs = $(top_srcdir)/config/mkinstalldirs PATCH = @PATCH@ RANLIB = @RANLIB@ @@ -102,23 +107,35 @@ ## Notice, this is the src/ directory within the toplevel source ## directory -axiom_top_srcdir = @axiom_top_srcdir@ - -axiom_src_srcdir = $(axiom_top_srcdir)/src +axiom_src_srcdir = $(top_srcdir)/src axiom_src_docdir = $(axiom_src_srcdir)/doc axiom_src_datadir = $(axiom_src_srcdir)/share axiom_src_algdir = $(axiom_src_srcdir)/algebra ## Where tools for the build machine are built -axiom_top_builddir = @abs_top_builddir@/build -axiom_builddir = @axiom_builddir@ +# Tools that we occasionally build don't know +# much about Autoconf and related infrastructure. Therefore +# we do lot by "hand". For the moment, things work if we specify +# paths as absolute, as opposed to relative. Other parts of +# Axiom also expect absolute paths. +axiom_abs_top_builddir = $(abs_top_builddir) +axiom_abs_builddir = $(abs_top_builddir)/build/$(build) +axiom_abs_build_bindir = $(axiom_abs_builddir)/bin +axiom_abs_build_libdir = $(axiom_abs_builddir)/lib +axiom_abs_build_mandir = $(axiom_abs_builddir)/man +axiom_abs_build_datadir = $(axiom_abs_builddir)/share +axiom_abs_build_texdir = $(axiom_abs_build_datadir)/texmf/tex + +axiom_top_builddir = $(top_builddir)/build +axiom_builddir = $(axiom_top_builddir)/$(build) axiom_build_bindir = $(axiom_builddir)/bin axiom_build_libdir = $(axiom_builddir)/lib axiom_build_mandir = $(axiom_builddir)/man axiom_build_docdir = $(axiom_builddir)/doc -axiom_build_texdir = $(axiom_builddir)/share/texmf/tex +axiom_build_datadir = $(axiom_builddir)/share +axiom_build_texdir = $(axiom_build_datadir)/texmf/tex -axiom_configdir = $(abs_top_builddir)/config +axiom_configdir = $(top_builddir)/config axiom_c_macros = $(axiom_configdir)/axiom-c-macros.h LATEX = @LATEX@ @@ -144,6 +161,8 @@ ## Where the staging build directory is found AXIOM = @AXIOM@ export AXIOM +BASE = @BASE@ +export BASE ## Where to find Axiom data bases. DAASE = $(axiom_src_datadir) Index: configure.ac.pamphlet =================================================================== --- configure.ac.pamphlet (revision 515) +++ configure.ac.pamphlet (working copy) @@ -117,7 +117,7 @@ axiom_builddir=`pwd`/build/$build AC_SUBST(axiom_builddir) -## Prefix for the staging target inistallation directory +## Prefix for the staging target installation directory axiom_targetdir=`pwd`/target/$target AC_SUBST(axiom_targetdir) @ @@ -636,10 +636,20 @@ \paragraph{File utils} Then, check for a usable [[install]] program. Also, find out -way to hard- or soft-link files. +way to hard- or soft-link files. + +After a recent migration to +\Tool{Autoconf-2.60}, it turns out that all possibilities of +soft-linking are tried (to ``play safe''), and if any variation +fails then, [[LN_S]] is defined to [[cp -p]], which works +only for files as sources. But, the only way we currently +use [[LN_S]] is when the first argument is a directory. So, the +``portability help'' we get from \Tool{Autoconf} is no help. +Consequently, the test for +[[ln -s]] is commented out for the moment. <>= AC_PROG_INSTALL -AC_PROG_LN_S +# AC_PROG_LN_S AC_CHECK_PROG([TOUCH], [touch], [touch], [AC_MSG_ERROR(['touch' program is missing.])]) AC_CHECK_PROGS([MKTEMP], [mktemp]) @@ -909,8 +919,22 @@ pervasive way. That variable needs to be set before the build start --- or else, it will fail. +BASE contains the operating system root of the build environment. +In the case of MSYS/MinGW build environment on Windows it is +necessary that the AXIOM variable be a Windows absolute path. +Therefore BASE is set to the MSYS root or otherwise empty. + <>= -AXIOM=$axiom_targetdir +case $host in + *mingw*) + BASE=`(cd /;pwd -W)` + ;; + *) + BASE="" + ;; +esac +AC_SUBST(BASE) +AXIOM=${BASE}${axiom_targetdir} AC_SUBST(AXIOM) @