diff --git a/Makefile.pamphlet b/Makefile.pamphlet index 67a7412..5b1e64f 100644 --- a/Makefile.pamphlet +++ b/Makefile.pamphlet @@ -655,8 +655,8 @@ srcdir: rootdirs ${SPD}/src/Makefile ${SPD}/src/Makefile: ${SPD}/src/Makefile.pamphlet @echo 16 making ${SPD}/src/Makefile from ${SPD}/src/Makefile.pamphlet ( cd src ; \ - ${DOCUMENT} Makefile ; \ - cp Makefile.dvi ${MNT}/${SYS}/doc/src/src.Makefile.dvi ) + ${EXTRACT} Makefile ; \ + cp Makefile.pdf ${MNT}/${SYS}/doc/src/src.Makefile.pdf ) libspadclean: @echo 17 cleaning ${OBJ}/${SYS}/lib diff --git a/changelog b/changelog index 43fa6c1..d8bb028 100644 --- a/changelog +++ b/changelog @@ -1,3 +1,6 @@ +20140625 tpd src/axiom-website/patches.html 20140625.02.tpd.patch +20140625 tpd Makefile.pamphlet extract src/Makefile using chunk syntax +20140625 tpd src/Makefile.pamphlet extract src using chunk syntax 20140625 tpd src/axiom-website/patches.html 20140625.01.tpd.patch 20140625 tpd Makefile extract books/Makefile using new chunk machinery 20140625 tpd books/Makefile.pamphlet changed to use chunk syntax diff --git a/patch b/patch new file mode 100644 index 0000000..cb1649d --- /dev/null +++ b/patch @@ -0,0 +1,6 @@ +Makefile.pamphlet src/Makefile.pamphlet use chunk syntax + +This is the src Makefile using the chunk syntax along with +supporting build machinery. The tangle.c function can extract +code from a pamphlet. The extract function can create the PDf +of a pamphlet. diff --git a/src/Makefile.pamphlet b/src/Makefile.pamphlet index a53fd4f..4a99a93 100644 --- a/src/Makefile.pamphlet +++ b/src/Makefile.pamphlet @@ -15,36 +15,36 @@ DIRS is a list of directories with the suffix {\bf dir}. There is a partial order of the directories which is not apparent. -The [[bootdir]] must occur first as it builds the boot language -compiler and the [[bootsys]] image. +The bootdir must occur first as it builds the boot language +compiler and the bootsys image. -The [[interpdir]] must come second because it builds the interpreter -and the [[interpsys]] image, which is the basic algebra engine. +The interpdir must come second because it builds the interpreter +and the interpsys image, which is the basic algebra engine. -The [[sharedir]] must occur before the [[algebradir]] because it +The sharedir must occur before the algebradir because it needs to put the databases in the proper location. -The [[algebradir]] comes next. It contains the source code for all +The algebradir comes next. It contains the source code for all of the algebra that Axiom knows. -The [[etcdir]] must occur after the [[algebradir]] because it -builds the databases from all of the [[*.nrlib]] directories -constructed by [[algebradir]]. +The etcdir must occur after the algebradir because it +builds the databases from all of the *.nrlib directories +constructed by algebradir. -The [[inputdir]] needs to occur last because it tests +The inputdir needs to occur last because it tests various other parts of the system. -The [[SRCDIRS]] variable is a list of directory targets. +The SRCDIRS variable is a list of directory targets. Since this varies from system to system it has been lifted -up to the top level [[Makefile.pamphlet]]. If you add a new +up to the top level Makefile.pamphlet. If you add a new stanza to this Makefile you should check that list. -<>= +\begin{chunk}{environment} SETUP=scriptsdir libdir DIRS=${SRCDIRS} LTANGLE=${OBJ}/${SYS}/bin/lisp VOL11=${BOOKS}/bookvol11.pamphlet -@ +\end{chunk} \subsection{The scripts directory} The {\bf scripts} directory contains shell scripts that we use to simplify system builds. They are generally copied directly @@ -52,7 +52,7 @@ into the final executable path. Perhaps this design should be reconsidered if we don't plan to ship them in the final system. -<>= +\begin{chunk}{scriptsdir} scriptsdir: ${SRC}/scripts/Makefile @echo 1 making ${SRC}/scripts @(cd scripts ; ${ENV} ${MAKE} ) @@ -75,11 +75,11 @@ scriptsclean: ${SRC}/scripts/Makefile @rm -f ${SRC}/scripts/Makefile @rm -f ${SRC}/scripts/Makefile.dvi -@ +\end{chunk} \subsection{The clef directory} The {\bf clef} directory contains an Axiom command that works similar to GNU Readline. -<>= +\begin{chunk}{clefdir} clefdir: ${SRC}/clef/Makefile @echo 5 making ${SRC}/clef @mkdir -p ${OBJ}/${SYS}/clef @@ -103,11 +103,11 @@ clefclean: ${SRC}/clef/Makefile @rm -f ${SRC}/clef/Makefile @rm -f ${SRC}/clef/Makefile.dvi -@ +\end{chunk} \subsection{The clef directory} Superman (sman) is the master process that runs all of the other processes including axiom, clef, nagman, graphics, and hyperdoc -<>= +\begin{chunk}{smandir} smandir: ${SPD}/books/bookvol6.pamphlet @echo 5 making ${SRC}/sman @mkdir -p ${INT}/sman @@ -118,12 +118,12 @@ smandir: ${SPD}/books/bookvol6.pamphlet | ${LTANGLE} ; \ ${ENV} ${MAKE} ) -@ +\end{chunk} \subsection{The share directory} The {\bf share} directory files that are shared by all version of the system. -<>= +\begin{chunk}{sharedir} sharedir: ${SRC}/share/Makefile @echo 9 making ${SRC}/share @mkdir -p ${MNT}/${SYS}/lib @@ -147,14 +147,14 @@ shareclean: ${SRC}/share/Makefile @rm -f ${SRC}/share/Makefile @rm -f ${SRC}/share/Makefile.dvi -@ +\end{chunk} \subsection{The booklet directory} The {\bf booklet} directory contains pamphlet files that document Axiom at a "higher level" than any particular pamphlet file. Booklets can be stand-alone descriptions (e.g. the Rosetta.pamphlet), top-down slices thru the system (e.g. the Integration.pamphlet), or horizontal slices thru the system (e.g. the Matrix.pamphlet). -<>= +\begin{chunk}{bookletsdir} bookletsdir: ${SRC}/booklets/Makefile @echo 13 making ${SRC}/booklets @(cd booklets ; ${ENV} ${MAKE} ) @@ -174,14 +174,14 @@ bookletsclean: ${SRC}/booklets/Makefile @( cd booklets ; ${ENV} ${MAKE} clean ) -@ +\end{chunk} \subsection{The lib directory} The {\bf lib} directory is used to build {\bf libspad.a} which contains C code for extending the underlying Common Lisp systems. It is built early in the process of system building because we need to make {\bf libspad.a} before we make the Common Lisps. -<>= +\begin{chunk}{libdir} libdir: ${SRC}/lib/Makefile @echo 17 making ${SRC}/lib @mkdir -p ${INT}/lib @@ -208,7 +208,7 @@ libclean: ${SRC}/lib/Makefile @rm -f ${SRC}/lib/Makefile @rm -f ${SRC}/lib/Makefile.dvi -@ +\end{chunk} \subsection{The boot directory} Axiom is built in layers. The first layer is contructed into an image called {\bf bootsys}. The {\bf bootsys} image is used @@ -218,7 +218,7 @@ interpreter we have a "boot-strapping" problem. In order to get the whole process to start we need certain files kept in common lisp form. This directory contains those files. -<>= +\begin{chunk}{bootdir} bootdir: ${SRC}/boot/Makefile @echo 21 making ${SRC}/boot @mkdir -p ${INT}/boot @@ -245,7 +245,7 @@ bootclean: ${SRC}/boot/Makefile @rm -f ${SRC}/boot/Makefile @rm -f ${SRC}/boot/Makefile.dvi -@ +\end{chunk} \subsection{The interp directory} Once {\bf bootsys} exists we need to build {\bf depsys} and {\bf interpsys}. Since these two images share a lot of @@ -261,7 +261,7 @@ because the spad compiler checks the syntax of the ++ comments against the macros that exist in that file. This is done in the function buildHtMacroTable (htcheck.boot) -<>= +\begin{chunk}{interpdir} interpdir: ${SRC}/interp/Makefile @echo 25 making ${SRC}/interp @mkdir -p ${INT}/interp @@ -299,7 +299,7 @@ interpclean: ${SRC}/interp/Makefile @rm -f ${SRC}/interp/Makefile @rm -f ${SRC}/interp/Makefile.dvi -@ +\end{chunk} \subsection{The input directory} The input directory contains code used for examples, regression testing, and bug tracking. In a shipped system the working examples @@ -315,7 +315,7 @@ run with the example code and the regression test code. Regression test input files are compared against known good results to ensure that nothing has been broken in the process of fixing bugs. -<>= +\begin{chunk}{inputdir} inputdir: ${SRC}/input/Makefile @echo 33 making ${SRC}/input @mkdir -p ${INT}/input @@ -343,14 +343,14 @@ inputclean: ${SRC}/input/Makefile @rm -f ${SRC}/input/Makefile @rm -f ${SRC}/input/Makefile.dvi -@ +\end{chunk} \subsection{The etc directory} The etc directory contains code used as tools surrounding Axiom. The asq \cite{2} command, contained in this directory, is useful for finding detailed information about domains, packages, and categories from the shell without running Axiom. -<>= +\begin{chunk}{etcdir} etcdir: ${SRC}/etc/Makefile @echo 37 making ${SRC}/etc @mkdir -p ${OBJ}/${SYS}/etc @@ -376,7 +376,7 @@ etcclean: ${SRC}/etc/Makefile @rm -f ${SRC}/etc/Makefile @rm -f ${SRC}/etc/Makefile.dvi -@ +\end{chunk} \subsection{The doc directory} The doc directory contains code used for documenting Axiom. @@ -384,7 +384,7 @@ We've added the books directory above as part of the literate process. This takes all of the Axiom volumes and creates .pdf copies in the final doc directory. -<>= +\begin{chunk}{docdir} docdir: ${SRC}/doc/Makefile @echo 41 making ${SRC}/doc @mkdir -p ${INT}/doc @@ -421,10 +421,10 @@ docclean: ${SRC}/doc/Makefile @rm -f ${SRC}/doc/Makefile @rm -f ${SRC}/doc/Makefile.dvi -@ +\end{chunk} \subsection{Volume 7:Axiom Hyperdoc book} Hyperdoc is the Axiom document browser. -<>= +\begin{chunk}{hyperdir} hyperdir: ${SPD}/books/bookvol7.pamphlet ${SPD}/books/bookvol7.1.pamphlet @echo 7 making hyperdoc from bookvol7 @mkdir -p ${INT}/hyper @@ -442,9 +442,9 @@ hyperdir: ${SPD}/books/bookvol7.pamphlet ${SPD}/books/bookvol7.1.pamphlet | ${LTANGLE} ; \ ${ENV} ${MAKE} ) -@ +\end{chunk} \subsection{Volume 8: Axiom Graphics book} -<>= +\begin{chunk}{graphdir} graphdir: ${SPD}/books/bookvol8.pamphlet @echo 8 making graph from bookvol8 @mkdir -p ${OBJ}/${SYS}/graph @@ -453,7 +453,7 @@ graphdir: ${SPD}/books/bookvol8.pamphlet | ${LTANGLE} ; \ ${ENV} ${MAKE} ) -@ +\end{chunk} \subsection{The algebra directory} The algebra directory contains code written in Axiom's computer algebra language called {\bf spad}. There are two compilers for @@ -474,16 +474,16 @@ making all the .spad files in a series of ``layers'' such that each layer depends on only those layers that preceed it, beginning with the bootstap layer. Because the individual .spad files are grouped into higher-level algebra pamphlet files, the rules for -extracting them are derived from a simple script [[findAlgebraFiles]] which +extracting them are derived from a simple script findAlgebraFiles which appends these additional rules to the Makefile. -The [[src/algebra/Makefile]] is specially constructed in two -steps. The first step uses the [[document]] command to extract +The src/algebra/Makefile is specially constructed in two +steps. The first step uses the document command to extract the normal Makefile information. -The second step is to extend the [[src/algebra/Makefile]] with +The second step is to extend the src/algebra/Makefile with stanzas that describe the steps to extract the algebra from the -[[src/algebra/*.pamphlet]] files into the [[int/algebra/*.spad]] files. +src/algebra/*.pamphlet files into the int/algebra/*.spad files. Further details are provided in Makefile for src/algebra. The doc/spadhelp directory contains flat files of help text @@ -499,7 +499,7 @@ Eventually we will pick this information up directly from the books directory. \subsection{Volume 10: Axiom Algebra book} -<>= +\begin{chunk}{algebradir} algebradir: ${SRC}/algebra/Makefile ${SPD}/books/bookvol10.pamphlet \ ${SPD}/books/bookvol7.1.pamphlet @echo 29 making ${SRC}/algebra @@ -545,13 +545,13 @@ algebraclean: ${SRC}/algebra/Makefile @rm -f ${SRC}/algebra/Makefile @rm -f ${SRC}/algebra/Makefile.dvi -@ +\end{chunk} \subsection{Volume 11: Axiom Browser book} These are the pages for the Axiom Firefox browser interface. They can be expanded in parallel since they (currently) need no post processing. Thus the "-j 10" argument to make. We use ``Makefile11'' so that future parallel builds don't step on each other. -<>= +\begin{chunk}{browserdir} browserdir: ${SPD}/books/bookvol11.pamphlet @echo 11 making browser from bookvol11 # @mkdir -p ${MNT}/${SYS}/doc/hypertex/bitmaps @@ -560,42 +560,46 @@ browserdir: ${SPD}/books/bookvol11.pamphlet # ${ENV} ${MAKE} -j 10 -f Makefile11 ; \ # rm -f Makefile11 ) -@ \section{The Makefile} This Makefile gets called twice during the +\end{chunk} + +\section{The Makefile} + +This Makefile gets called twice during the system build. The first call is to the {\bf setup} stanza which will execute the {\bf scriptsdir} stanza to copy the system scripts to the -[[mnt/${SYS}/bin]] directory. And the {\bf libdir} stanza is executed +\verb|mnt/${SYS}/bin| directory. And the {\bf libdir} stanza is executed to build {\bf libspad.a} which contains code needed by the underlying lisp. The second call will execute the {\bf all} stanza. This stanza walks all of the lower level directories. -<<*>>= +\begin{chunk}{*} -<> +\getchunk{environment} all: ${DIRS} @echo 49 finished ${SRC} setup: ${SETUP} -<> -<> -<> -<> -<> -<> -<> -<> -<> -<> -<> -<> - -<> -<> -<> - -@ +\getchunk{scriptsdir} +\getchunk{clefdir} +\getchunk{smandir} +\getchunk{sharedir} +\getchunk{docdir} +\getchunk{bookletsdir} +\getchunk{libdir} +\getchunk{bootdir} +\getchunk{interpdir} +\getchunk{algebradir} +\getchunk{inputdir} +\getchunk{etcdir} + +\getchunk{hyperdir} +\getchunk{graphdir} +\getchunk{browserdir} + +\end{chunk} \eject \begin{thebibliography}{99} \bibitem{1} Watt, Stephen, The Aldor compiler, {\bf www.aldor.org} diff --git a/src/axiom-website/patches.html b/src/axiom-website/patches.html index dedede2..ef90e06 100644 --- a/src/axiom-website/patches.html +++ b/src/axiom-website/patches.html @@ -4496,6 +4496,8 @@ src/scripts/boxhead, boxtail, boxup, showdvi removed Makefile, books/tangle.c set up a native tangle function 20140624.01.tpd.patch Makefile books/Makefile.pamphlet books/tangle.c books/extract +20140624.02.tpd.patch +Makefile.pamphlet src/Makefile.pamphlet use chunk syntax