AXIOMROOT=/usr/local/axiom.mod/test_system

SYS=x86
#SYS=alpha
LSP=
PART=${AXIOMROOT}/part
AXIOM=${AXIOMROOT}/mnt/${SYS}
SRC=${AXIOMROOT}/src
INT=${AXIOMROOT}/int
OBJ=${AXIOMROOT}/mnt
MNT=${AXIOMROOT}/mnt

MKFILE=Makefile.cmu
BYE=system::quit
O=x86f
#O=axpf
LISP=lisp
LISPSYS=cmu-lisp

IN=${SRC}/algebra
MID=${INT}/algebra
OUT=${MNT}/${SYS}/algebra
DOC=${INT}/doc/int/algebra

DEPSYS=${OBJ}/${SYS}/bin/depsys

INTERPSYS=${OBJ}/${SYS}/bin/interpsys

SPADFILES= \
 acplot aggcat2 aggcat \
 algcat algext algfact \
 algfunc allfact alql \
 annacat any array1 \
 array2 asp attreg \
 bags bezout boolean \
 brill \
 c02 c05 c06 \
 card carten catdef \
 cden clifford clip \
 cmplxrt coerce color \
 combfunc combinat complet \
 constant contfrac cont \
 coordsys cra crfp \
 curve cycles cyclotom \
 d01agents d01Package \
 d01routine d01 d01transform \
 d01weights d02agents \
 d02Package d02routine d02 \
 d03agents d03Package \
 d03routine d03 ddfact \
 defaults defintef defintrf \
 degred derham dhmatrix \
 divisor dpolcat drawopt \
 drawpak draw \
 e01 e02 e04agents \
 e04Package e04routine e04 \
 efstruc efuls efupxs \
 eigen elemntry elfuts \
 equation1 equation2 error \
 expexpan expr2ups \
 exprode expr \
 f01 f02 f04 \
 f07 facutil ffcat \
 ffcg fff ffhom \
 ffnb ffpoly2 ffpoly \
 ffp ffx \
 files float fmod \
 fname fnla formula \
 fortcat fortmac fortpak \
 fortran forttyp fourier \
 fparfrac fraction free \
 fr fs2expxp fs2ups \
 fspace funcpkgs functions \
 galfact galfactu galpolyu \
 galutil gaussfac gaussian \
 gbeuclid gbintern gb \
 gdirprod gdpoly geneez \
 generic genufact genups \
 ghensel gpgcd gpol \
 grdef groebf groebsol \
 gseries \
 ideal idecomp indexedp \
 infprod intaf intalg \
 intaux intclos intef \
 integer integrat \
 interval \
 intfact intpm \
 intrf \
 irexpand \
 irsn ituple \
 kl kovacic \
 laplace laurent leadcdet \
 lie limitps lindep \
 lingrob liouv listgcd \
 list lmdict lodof \
 lodop lodo \
 manip mappkg matcat \
 matfuns matrix matstor \
 mesh mfinfact misc \
 mkfunc mkrecord \
 mlift moddfact modgcd \
 modmonom modmon modring \
 moebius mring mset \
 mts multfact multpoly \
 multsqfr \
 naalgc naalg \
 newdata newpoint \
 newpoly nlinsol nlode \
 npcoef \
 nregset \
 nsregset numeigen numeric \
 numode numquad numsolve \
 numtheor \
 oct odealg odeef \
 oderf omcat omdev \
 omerror omserver opalg \
 openmath op ore \
 outform out \
 pade padiclib padic \
 paramete partperm patmatch1 \
 patmatch2 pattern pcurve \
 pdecomp perman permgrps \
 perm pfbr pfo \
 pfr pf pgcd \
 pgrobner pinterp pleqn \
 plot3d plot plottool \
 polset poltopol polycat \
 poly primelt print \
 product prs prtition \
 pscat pseudolin ptranfn \
 puiseux \
 qalgset quat \
 radeigen radix random \
 ratfact rdeef rderf \
 rdesys real0q realzero \
 reclos regset rep1 \
 rep2 resring retract \
 rf riccati routines \
 rule \
 seg setorder sets \
 sex sf sgcf \
 sign si smith \
 solvedio solvefor solvelin \
 solverad sortpak space \
 special sregset s \
 stream string sttaylor \
 sttf sturm suchthat \
 suls sum sups \
 supxs suts symbol \
 syssolp system \
 tableau table taylor \
 tex tools transsolve \
 tree trigcat triset \
 tube twofact \
 unifact updecomp updivp \
 utsode \
 variable vector view2D \
 view3D viewDef viewpack \
 void \
 weier wtpol \
 xlpoly xpoly \
 ystream \
 zerodim

ALDORFILES= \
 ${MID}/axtimer.as \
 ${MID}/ffrac.as \
 ${MID}/herm.as \
 ${MID}/interval.as \
 ${MID}/invnode.as ${MID}/invrender.as \
 ${MID}/invtypes.as ${MID}/invutils.as \
 ${MID}/iviews.as \
 ${MID}/ndftip.as \
 ${MID}/nepip.as \
 ${MID}/noptip.as ${MID}/nqip.as \
 ${MID}/nrc.as ${MID}/nsfip.as 

DOC_FILES=	$(addprefix ${DOC}/, $(SPADFILES:%=%.spad.dvi)) \
		${DOC}/INTERP.EXPOSED.dvi ${DOC}/exposed.lsp.dvi

LAYER0BOOTSTRAP=ABELGRP ABELGRP- \
                ABELMON ABELMON- \
                ABELSG ABELSG- \
                ALAGG \
                BOOLEAN CABMON CHAR \
                CLAGG CLAGG-  \
                COMRING DFLOAT \
                DIFRING DIFRING- \
                DIVRING DIVRING- \
                ENTIRER \
                ES ES- \
                EUCDOM EUCDOM- \
                FFIELDC FFIELDC- \
                FPS FPS- \
                GCDDOM GCDDOM- \
                HOAGG HOAGG-  ILIST \
                INS INS- \
                INT \
                INTDOM INTDOM- \
                ISTRING LIST \
                LSAGG LSAGG-  \
                LNAGG LNAGG-  \
                MONOID MONOID-  \
                MTSCAT \
                NNI OINTDOM \
                ORDRING ORDRING- OUTFORM \
                PI PRIMARR \
                POLYCAT POLYCAT- \
                PSETCAT PSETCAT- \
                QFCAT QFCAT-  \
                RCAGG RCAGG-  \
                REF \
                RING RING- \
                RNG \
                RNS RNS- \
                SETAGG SETAGG- \
                SETCAT SETCAT- \
                SINT \
                STAGG STAGG-  \
                SYMBOL \
                ULSCAT \
                UFD UFD- \
                UPOLYC UPOLYC- \
                URAGG URAGG-  \
                VECTOR

LAYER0=AHYP ATTREG CFCAT ELTAB \
       KOERCE KONVERT MSYSCMD ODEIFTBL \
       OM OMCONN OMDEV \
       OUT PRIMCAT PRINT PTRANFN \
       SPFCAT TYPE 
 
LAYER1=ANY1 COMBOPC DROPT1 \
       EQ2 \
       FORTCAT ITFUN2 ITFUN3 ITUPLE \
       MKBCFUNC MKRECORD MKUCFUNC \
       NONE1 \
       PATAB PLOT1 PPCURVE \
       PSCURVE REAL RESLATC \
       RETRACT RETRACT- SEGBIND2 SEGCAT \
       STREAM1 STREAM2 STREAM3 

LAYER2=FMC FMFUN \
       FORTFN FVC FVFUN INTRET \
       SEGXCAT 

LAYER3=AGG AGG- \
       BASTYPE BASTYPE- GRDEF \
       LIST3 MKFUNC

LAYER4=ANON COLOR \
       COMM COMPPROP \
       ELTAGG ELTAGG- ESCONT1 \
       EXIT FAMONC FILECAT \
       FINITE FNCAT \
       FORMULA1 \
       IDPC IEVALAB IEVALAB- \
       INTBIT \
       LMODULE \
       LOGIC LOGIC- MAPHACK1 MAPHACK2 \
       MAPHACK3 MAPPKG1 MAPPKG2 \
       MAPPKG3 MONAD MONAD- \
       NIPROB NONE NUMINT \
       ODECAT ODEPROB OMENC ONECOMP2 \
       OPTCAT OPTPROB \
       ORDSET ORDSET- PALETTE \
       PARPCURV PARPC2 PARSCURV \
       PARSC2 PARSURF PARSU2 PATMAB \
       PATRES2 PATTERN1 PDECAT PDEPROB \
       REPSQ REPDB RFDIST RIDIST \
       RMODULE \
       SEXCAT SGROUP SGROUP- \
       SPACEC SPLNODE \
       STEP SUCH TEX1 \
       UDVO YSTREAM

LAYER5=ATRIG ATRIG- BMODULE \
       CACHSET CHARNZ CHARZ \
       DVARCAT DVARCAT- \
       ELEMFUN ELEMFUN- ESTOOLS2 \
       EVALAB EVALAB- \
       FCOMP FEVALAB FEVALAB- \
       FPATMAB GROUP GROUP- \
       IDPAM IDPO INCRMAPS \
       IXAGG IXAGG- KERNEL2 \
       LALG LALG- \
       LINEXP \
       MODMONOM MONADWU MONADWU- \
       MRF2 NARNG NARNG- \
       NSUP2 OASGP ODVAR \
       OPQUERY \
       ORDFIN ORDMON PATMATCH PERMCAT \
       PDRING PDRING- \
       SDVAR \
       SUP2 \
       TRIGCAT TRIGCAT- ULS2 UP2

LAYER6=AUTOMOR BGAGG \
       CARTEN2 CHARPOL COMPLEX2 \
       DIFEXT DIFEXT- DLAGG \
       ELAGG ELAGG- ES1 ES2 \
       GRMOD GRMOD- \
       HYPCAT HYPCAT- MKCHSET \
       MODRING MODULE MODULE- \
       NASRING NASRING- \
       OAMON SORTPAK \
       ZMOD

LAYER7=ALGEBRA ALGEBRA- FMCAT \
       IDPOAM IFAMON GRALG GRALG- \
       OCAMON PRQAGG QUAGG SKAGG 

LAYER8=CARD \
       DRAWHACK DQAGG FACTFUNC \
       FMTC FR2 FRAC2 FRUTIL \
       ITAYLOR \
       MLO NAALG NAALG- \
       OAGROUP OAMONS \
       OP ORDCOMP2 PID RANDSRC \
       UNISEG2 XALG 

LAYER9=AMR AMR- DEGRED \
       DLP EAB \
       ESTOOLS1 \
       FAGROUP \
       FAMONOID FIELD FIELD- \
       FLAGG FLAGG- \
       FLINEXP FLINEXP- \
       FRETRCT FRETRCT- \
       FSERIES FT IDPAG IDPOAMS \
       INFINITY \
       ORTHPOL PRODUCT \
       PADICCT PMPRED \
       PMASS PTFUNC2 \
       RADCAT RADCAT- \
       RATRET RADUTIL  UPXS2 XFALG \
       ZLINDEP

LAYER10=A1AGG A1AGG- \
        ARR2CAT ARR2CAT- \
        BFUNCT BPADIC CRAPACK \
        DEQUEUE DLIST DRAWCX \
        D01GBFA D02EJFA \
        D03FAFA DRAWPT \
        FAMR FAMR- \
        FLASORT FLAGG2 FGROUP \
        FM FM1 FPC FPC- \
        FMONOID \
        INDE IPADIC IRREDFFX \
        IROOT IR2 \
        LEXP LIECAT LIECAT- \
        LIST2 LIST2MAP LMOPS \
        LZSTAGG LZSTAGG- MAGMA \
        MESH MOEBIUS \
        MODFIELD MODOP MTHING \
        NCNTFRAC \
        NCODIV NUMTUBE \
        OFMONOID ONECOMP \
        ORDCOMP OREPCAT OREPCAT- \
        OWP \
        PADIC PATTERN2 \
        PATLRES PARTPERM PBWLB PGE \
        PGROEB PINTERP PLOTTOOL \
        PFR PMDOWN \
        PRTITION \
        PMINS PMLSAGG PMTOOLS \
        PSCAT PSCAT- QFORM QUEUE \
        SCACHE SEG \
        SEG2 SEXOF STACK \
        TABLEAU TABLBUMP \
        TOPSP TRANFUN TRANFUN- \
        TUBE UDPO UNISEG \
        VIEW VSPACE VSPACE- \
        XPOLYC XPR

LAYER11=APPLYORE ARRAY1 ARRAY12 ARRAY2 \
        ASTACK COMBINAT CSTTOOLS \
        D01FCFA E04MBFA \
        FARRAY \
        FLALG GALUTIL HEAP \
        IARRAY1 IARRAY2 IFARRAY \
        INTHEORY \
        LFCAT LODOCAT LODOCAT- LWORD \
        MATCAT MATCAT- MATSTOR \
        ORESUP OREPCTO OREUP \
        PR PREASSOC \
        PRIMARR2 REDORDER \
        SRAGG SRAGG- \
        STREAM SYMPOLY TS TUPLE \
        UPSCAT UPSCAT- VECTCAT VECTCAT- \
        XDPOLY XEXPPKG \
        XF XF- XPBWPOLY XPOLY \
        XRPOLY

LAYER12=DIRPROD2 IMATRIX IVECTOR LODO1 \
        LODO2 LPOLY \
        LSMP LSMP1 \
        MATCAT2 PTCAT STRICAT \
        TRIMAT 

LAYER13=ASSOCEQ CLIF \
        CLIP COORDSYS DBASE DIOSP \
        DIRPCAT DIRPCAT- D02BBFA D02BHFA \
        D02CJFA FFPOLY2 FNLA GRAY \
        HB IRSN \
        MCALCFN MHROWRED \
        NUMODE NUMQUAD ODESYS \
        ODETOOLS ORDFUNS PERMAN \
        PFECAT PFECAT- POINT PSEUDLIN \
        PTPACK SEX STRING \
        SYMFUNC VECTOR2

LAYER14=BALFACT BEZOUT \
        BINFILE BOUNDZRO COMMUPC \
        CDEN CHVAR \
        CVMP CYCLOTOM DDFACT \
        DIOPS DIOPS- DIRPROD \
        DISPLAY DPMO \
        DPOLCAT DPOLCAT- \
        D01AJFA D01AKFA \
        D01AMFA D01APFA D01ALFA \
        EMR ERROR E04DGFA \
        E04FDFA E04GCFA E04JAFA \
        FACUTIL FFSLPE \
        FGLMICPK FILE \
        FINAALG FINAALG- \
        FINRALG FINRALG- \
        FNAME \
        FOP FORMULA FORT \
        FTEM GENEEZ GENMFACT \
        GENPGCD GOSPER \
        GROEBSOL HDP HEUGCD \
        IBPTOOLS GALFACTU GALPOLYU \
        GB GBEUCLID \
        GBF GHENSEL \
        GMODPOL ICARD ICDEN \
        IIARRAY2 IMATLIN IMATQF \
        INPSIGN INTHERTR INTRAT INTRF \
        ISUMP LEADCDET \
        LGROBP LIMITRF LPEFRAC LSPP \
        MATLIN MCDEN MDDFACT \
        MINT MLIFT MMAP \
        MONOTOOL MPCPF \
        MPC2 MPC3 MPRFF \
        MRATFAC MULTSQFR \
        NPCOEF \
        ODP ODEPRIM \
        ODEPRRIC OMPKG OMSERVER \
        PADEPAC PCOMP PDECOMP \
        PFBR PFBRU PFOTOOLS PFRPAC \
        PGCD PINTERPA PMPLCAT PMQFCAT \
        POLUTIL POLTOPOL POLYCATQ \
        POLYLIFT \
        POLYROOT \
        POLY2 POLY2UP \
        PSQFR PUSHVAR \
        QALGSET QFCAT2 RATFACT \
        RDETR RDETRS REAL0 REAL0Q \
        RESRING RETSOL RF \
        RMATCAT RMATCAT- \
        RRCC RRCC- SHDP \
        SHP SIGNRF SMITH SMTS \
        SOLVEFOR SPLTREE STINPROD \
        STTFNC SUBRESP SUMRF SUPFRACF \
        TANEXP TEMUTL \
        TEX TEXTFILE \
        TREE UNIFACT UPCDEN \
        UPDECOMP UPDIVP \
        UPMP UPOLYC2 \
        VIEWDEF UPSQFREE \
        VOID WEIER WP

LAYER15=DIAGG FRAMALG FRAMALG- \
        MDAGG RMCAT2 \
        SMATCAT SMATCAT- 

LAYER16=DPMM FFINTBAS FRIDEAL FRIDEAL2 \
        FRMOD IBATOOL \
        INTFACT \
        KDAGG KDAGG- \
        MONOGEN MONOGEN- \
        NFINTBAS 

LAYER17=IBACHIN NORMMA ODERED \
        PWFFINTB SAEFACT SAERFFC \
        TBAGG TBAGG- \
        WFFINTBS 

LAYER18=EQTBL GSTBL \
        HASHTBL INTABL INTFTBL \
        KAFILE PATRES \
        STBL STRTBL TABLE \
        TBCMPPK 

LAYER19=ALIST FS FFCAT FRNAALG BRAGG \
	BTCAT BTAGG FSAGG COMPCAT FRAC \
	ULSCAT UTSCAT ULSCCAT UPXSCAT \
	UPXSCCA FDIVCAT RPOLCAT TSETCAT \
	RSETCAT SFRTCAT MSETAGG QUATCAT

#
# alphabetical list of all categories, domains und category_packages
#
ALL_MODULES= \
	A1AGG A1AGG- ABELGRP ABELGRP- ABELMON ABELMON- ABELSG ABELSG- ACF \
	ACF- ACFS ACFS- ACPLOT AF AGG AGG- AHYP ALAGG ALGEBRA ALGEBRA- ALGFACT \
	ALGFF ALGMANIP ALGMFACT ALGPKG ALGSC ALIST AMR AMR- AN ANON ANTISYM \
	ANY ANY1 APPLYORE APPRULE ARR2CAT ARR2CAT- ARRAY1 ARRAY12 ARRAY2 \
	ASP1 ASP10 ASP12 ASP19 ASP20 ASP24 ASP27 ASP28 ASP29 ASP30 ASP31 \
	ASP33 ASP34 ASP35 ASP4 ASP41 ASP42 ASP49 ASP50 ASP55 ASP6 ASP7 ASP73 \
	ASP74 ASP77 ASP78 ASP8 ASP80 ASP9 ASSOCEQ ASTACK ATRIG ATRIG- ATTRBUT \
	ATTREG AUTOMOR BALFACT BASTYPE BASTYPE- BBTREE BEZOUT BFUNCT BGAGG \
	BGAGG- BINARY BINFILE BITS BMODULE BOOLEAN BOP BOP1 BOUNDZRO BPADIC \
	BPADICRT BRAGG BRAGG- BRILL BSTREE BTAGG BTAGG- BTCAT BTCAT- BTOURN \
	BTREE CABMON CACHSET CARD CARTEN CARTEN2 CCLASS CDEN CFCAT CHAR CHARNZ \
	CHARPOL CHARZ CHVAR CINTSLPE CLAGG CLAGG- CLIF CLIP CMPLXRT COLOR \
	COMBF COMBINAT COMBOPC COMM COMMONOP COMMUPC COMPCAT COMPCAT- COMPFACT \
	COMPLEX COMPLEX2 COMPLPAT COMPPROP COMRING CONTFRAC COORDSYS CPIMA \
	CPMATCH CRAPACK CRFP CSTTOOLS CTRIGMNP CVMP CYCLES CYCLOTOM D01AGNT \
	D01AJFA D01AKFA D01ALFA D01AMFA D01ANFA D01APFA D01AQFA D01ASFA D01FCFA \
	D01GBFA D01TRNS D01WGTS D02AGNT D02BBFA D02BHFA D02CJFA D02EJFA D03AGNT \
	D03EEFA D03FAFA DBASE DBLRESP DDFACT DECIMAL DEFINTEF DEFINTRF DEGRED \
	DEQUEUE DERHAM DFINTTLS DFLOAT DFSFUN DIAGG DIAGG- DIFEXT DIFEXT- \
	DIFRING DIFRING- DIOPS DIOPS- DIOSP DIRPCAT DIRPCAT- DIRPROD DIRPROD2 \
	DISPLAY DIVRING DIVRING- DLAGG DLIST DLP DMP DPMM DPMO DPOLCAT DPOLCAT- \
	DQAGG DRAW DRAWCFUN DRAWCURV DRAWCX DRAWHACK DRAWPT DROPT DROPT0 \
	DROPT1 DSMP DVARCAT DVARCAT- E04AGNT E04DGFA E04FDFA E04GCFA E04JAFA \
	E04MBFA E04NAFA E04UCFA EAB EF EFSTRUC EFULS EFUPXS ELAGG ELAGG- \
	ELEMFUN ELEMFUN- ELFUTS ELTAB ELTAGG ELTAGG- EMR ENTIRER EP EQ EQ2 \
	EQTBL ERROR ES ES- ES1 ES2 ESCONT ESCONT1 ESTOOLS ESTOOLS1 ESTOOLS2 \
	EUCDOM EUCDOM- EVALAB EVALAB- EVALCYC EXIT EXPEXPAN EXPR EXPR2 EXPR2UPS \
	EXPRODE EXPRTUBE EXPUPXS FACTFUNC FACUTIL FAGROUP FAMONC FAMONOID \
	FAMR FAMR- FARRAY FAXF FAXF- FC FCOMP FCPAK1 FDIV FDIV2 FDIVCAT FDIVCAT- \
	FEVALAB FEVALAB- FEXPR FF FFCAT FFCAT- FFCAT2 FFCG FFCGP FFCGX FFF \
	FFHOM FFIELDC FFIELDC- FFINTBAS FFNB FFNBP FFNBX FFP FFPOLY FFPOLY2 \
	FFSLPE FFX FGLMICPK FGROUP FIELD FIELD- FILE FILECAT FINAALG FINAALG- \
	FINITE FINRALG FINRALG- FLAGG FLAGG- FLAGG2 FLALG FLASORT FLINEXP \
	FLINEXP- FLOAT FLOATCP FLOATRP FM FM1 FMC FMCAT FMFUN FMONOID FMTC \
	FNAME FNCAT FNLA FOP FORDER FORMULA FORMULA1 FORT FORTCAT FORTFN \
	FORTRAN FPARFRAC FPATMAB FPC FPC- FPS FPS- FR FR2 FRAC FRAC2 FRAMALG \
	FRAMALG- FRETRCT FRETRCT- FRIDEAL FRIDEAL2 FRMOD FRNAAF2 FRNAALG \
	FRNAALG- FRUTIL FS FS- FS2 FS2EXPXP FS2UPS FSAGG FSAGG- FSAGG2 FSCINT \
	FSERIES FSINT FSPECF FSPRMELT FSRED FST FSUPFACT FT FTEM FUNCTION \
	FVC FVFUN GALFACT GALFACTU GALPOLYU GALUTIL GAUSSFAC GB GBEUCLID \
	GBF GBINTERN GCDDOM GCDDOM- GCNAALG GDMP GENEEZ GENMFACT GENPGCD \
	GENUFACT GENUPS GHENSEL GMODPOL GOSPER GPOLSET GRALG GRALG- GRAY \
	GRDEF GRIMAGE GRMOD GRMOD- GROEBSOL GROUP GROUP- GSERIES GSTBL GTSET \
	HACKPI HASHTBL HB HDMP HDP HEAP HELLFDIV HEUGCD HEXADEC HOAGG HOAGG- \
	HYPCAT HYPCAT- IALGFACT IAN IARRAY1 IARRAY2 IBACHIN IBATOOL IBITS \
	IBPTOOLS ICARD ICDEN IDEAL IDECOMP IDPAG IDPAM IDPC IDPO IDPOAM IDPOAMS \
	IEVALAB IEVALAB- IFAMON IFARRAY IFF IIARRAY2 ILIST IMATLIN IMATQF \
	IMATRIX INBFF INCRMAPS INDE INEP INFINITY INFORM INFORM1 INFPROD0 \
	INFSP INMODGCD INNMFACT INPRODFF INPRODPF INPSIGN INS INS- INT INTABL \
	INTAF INTALG INTBIT INTCAT INTDOM INTDOM- INTEF INTFACT INTFTBL INTG0 \
	INTHEORY INTHERAL INTHERTR INTPACK INTPAF INTPM INTRAT INTRET INTRF \
	INTRVL INTSLPE INTTOOLS INTTR INVLAPLA IPADIC IPF IPRNTPK IR IR2 \
	IR2F IROOT IRREDFFX IRRF2F IRSN IRURPK ISTRING ISUMP ISUPS ITAYLOR \
	ITFUN2 ITFUN3 ITRIGMNP ITUPLE IVECTOR IXAGG IXAGG- JORDAN KAFILE \
	KDAGG KDAGG- KERNEL KERNEL2 KOERCE KONVERT KOVACIC LA LALG LALG- \
	LAPLACE LAUPOL LAZM3PK LEADCDET LEXP LEXTRIPK LF LFCAT LGROBP LIB \
	LIE LIECAT LIECAT- LIMITPS LIMITRF LINDEP LINEXP LIST LIST2 LIST2MAP \
	LIST3 LMDICT LMODULE LMOPS LNAGG LNAGG- LO LODEEF LODO LODO1 LODO2 \
	LODOCAT LODOCAT- LODOF LODOOPS LOGIC LOGIC- LPEFRAC LPOLY LSAGG LSAGG- \
	LSMP LSMP1 LSPP LSQM LWORD LZSTAGG LZSTAGG- M3D MAGMA MAPHACK1 MAPHACK2 \
	MAPHACK3 MAPPKG1 MAPPKG2 MAPPKG3 MATCAT MATCAT- MATCAT2 MATLIN MATRIX \
	MATSTOR MCALCFN MCDEN MCMPLX MDAGG MDDFACT MESH MFINFACT MFLOAT MHROWRED \
	MINT MKBCFUNC MKCHSET MKFLCFN MKFUNC MKRECORD MKUCFUNC MLIFT MLO \
	MMAP MODFIELD MODMON MODMONOM MODOP MODRING MODULE MODULE- MOEBIUS \
	MONAD MONAD- MONADWU MONADWU- MONOGEN MONOGEN- MONOID MONOID- MONOTOOL \
	MPC2 MPC3 MPCPF MPOLY MPRFF MRATFAC MRF2 MRING MSET MSETAGG MSYSCMD \
	MTHING MTSCAT MULTFACT MULTSQFR NAALG NAALG- NAGC02 NAGC05 NAGC06 \
	NAGD01 NAGD02 NAGD03 NAGE01 NAGE02 NAGE04 NAGF01 NAGF02 NAGF04 NAGF07 \
	NAGS NAGSP NARNG NARNG- NASRING NASRING- NCEP NCNTFRAC NCODIV NFINTBAS \
	NIPROB NLINSOL NNI NODE1 NONE NONE1 NORMMA NORMPK NORMRETR NPCOEF \
	NREP NSMP NSUP NSUP2 NTPOLFN NTSCAT NUMERIC NUMFMT NUMINT NUMODE \
	NUMQUAD NUMTUBE OAGROUP OAMON OAMONS OASGP OC OC- OCAMON OCT OCTCT2 \
	ODECAT ODECONST ODEEF ODEIFTBL ODEINT ODEPACK ODEPAL ODEPRIM ODEPROB \
	ODEPRRIC ODERAT ODERED ODERTRIC ODESYS ODETOOLS ODP ODPOL ODR ODVAR \
	OFMONOID OINTDOM OM OMCONN OMDEV OMENC OMERR OMERRK OMEXPR OMLO OMPKG \
	OMSAGG OMSERVER ONECOMP ONECOMP2 OP OPQUERY OPTCAT OPTPACK OPTPROB \
	ORDCOMP ORDCOMP2 ORDFIN ORDFUNS ORDMON ORDRING ORDRING- ORDSET ORDSET- \
	OREPCAT OREPCAT- OREPCTO ORESUP OREUP ORTHPOL OSI OUT OUTFORM OVAR \
	OWP PADE PADEPAC PADIC PADICCT PADICRAT PADICRC PALETTE PAN2EXPR \
	PARPC2 PARPCURV PARSC2 PARSCURV PARSU2 PARSURF PARTPERM PATAB PATLRES \
	PATMAB PATMATCH PATRES PATRES2 PATTERN PATTERN1 PATTERN2 PBWLB PCOMP \
	PDECAT PDECOMP PDEPACK PDEPROB PDRING PDRING- PENDTREE PERM PERMAN \
	PERMCAT PERMGRP PF PFBR PFBRU PFECAT PFECAT- PFO PFOQ PFOTOOLS PFR \
	PFRPAC PGCD PGE PGROEB PI PICOERCE PID PINTERP PINTERPA PLEQN PLOT \
	PLOT1 PLOT3D PLOTTOOL PMASS PMASSFS PMDOWN PMFS PMINS PMKERNEL PMLSAGG \
	PMPLCAT PMPRED PMPREDFS PMQFCAT PMSYM PMTOOLS PNTHEORY POINT POLTOPOL \
	POLUTIL POLY POLY2 POLY2UP POLYCAT POLYCAT- POLYCATQ POLYLIFT POLYROOT \
	PPCURVE PR PREASSOC PRIMARR PRIMARR2 PRIMCAT PRIMELT PRIMES PRINT \
	PRODUCT PRQAGG PRS PRTITION PSCAT PSCAT- PSCURVE PSETCAT PSETCAT- \
	PSETPK PSEUDLIN PSQFR PTCAT PTFUNC2 PTPACK PTRANFN PUSHVAR PWFFINTB \
	QALGSET QALGSET2 QCMPACK QEQUAT QFCAT QFCAT- QFCAT2 QFORM QUAGG QUAT \
	QUATCAT QUATCAT- QUATCT2 QUEUE RADCAT RADCAT- RADFF RADIX RADUTIL \
	RANDSRC RATFACT RATRET RCAGG RCAGG- RCFIELD RCFIELD- RDEEF RDEEFS \
	RDETR RDETRS RDIST RDIV REAL REAL0 REAL0Q REALSOLV RECLOS REDORDER \
	REF REGSET REP REP1 REP2 REPDB REPSQ RESLATC RESRING RESULT RETRACT \
	RETRACT- RETSOL RF RFDIST RFFACT RFFACTOR RGCHAIN RIDIST RING RING- \
	RMATCAT RMATCAT- RMATRIX RMCAT2 RMODULE RNG RNS RNS- ROIRC ROMAN \
	ROUTINE RPOLCAT RPOLCAT- RRCC RRCC- RSDCMPK RSETCAT RSETCAT- RSETGCD \
	RULE RULECOLD RULESET RURPK SAE SAEFACT SAERFFC SAOS SCACHE SCPKG \
	SDPOL SDVAR SEG SEG2 SEGBIND SEGBIND2 SEGCAT SEGXCAT SET SETAGG SETAGG- \
	SETCAT SETCAT- SETMN SEX SEXCAT SEXOF SFORT SFQCMPK SFRGCD SFRTCAT \
	SGCF SGROUP SGROUP- SHDP SHP SIGNEF SIGNRF SIMPAN SINT SKAGG SMATCAT \
	SMATCAT- SMITH SMP SMTS SNTSCAT SOLVEFOR SOLVERAD SOLVESER SOLVETRA \
	SORTPAK SPACE3 SPACEC SPECOUT SPFCAT SPLNODE SPLTREE SQMATRIX SRAGG \
	SRAGG- SRDCMPK SREGSET STACK STAGG STAGG- STBL STEP STINPROD STREAM \
	STREAM1 STREAM2 STREAM3 STRICAT STRING STRTBL STTAYLOR STTF STTFNC \
	SUBRESP SUBSPACE SUCH SULS SUMFS SUMRF SUP SUP2 SUPFRACF SUPXS SUTS \
	SWITCH SYMBOL SYMFUNC SYMPOLY SYMS SYMTAB SYSSOLP TABLBUMP TABLE \
	TABLEAU TANEXP TBAGG TBAGG- TBCMPPK TEMUTL TEX TEX1 TEXTFILE TOOLSIGN \
	TOPSP TRANFUN TRANFUN- TREE TRIGCAT TRIGCAT- TRIGMNIP TRIMAT TRMANIP \
	TS TSETCAT TSETCAT- TUBE TUBETOOL TUPLE TWOFACT TYPE UDPO UDVO UFD \
	UFD- ULS ULS2 ULSCAT ULSCCAT ULSCCAT- ULSCONS UNIFACT UNISEG UNISEG2 \
	UP UP2 UPCDEN UPDECOMP UPDIVP UPMP UPOLYC UPOLYC- UPOLYC2 UPSCAT \
	UPSCAT- UPSQFREE UPXS UPXS2 UPXSCAT UPXSCCA UPXSCCA- UPXSCONS UPXSSING \
	URAGG URAGG- UTS UTS2 UTSCAT UTSCAT- UTSODE UTSODETL VARIABLE VECTCAT \
	VECTCAT- VECTOR VECTOR2 VIEW VIEW2D VIEW3D VIEWDEF VOID VSPACE VSPACE- \
	WEIER WFFINTBS WP WUTSET XALG XDPOLY XEXPPKG XF XF- XFALG XPBWPOLY \
	XPOLY XPOLYC XPR XRPOLY YSTREAM ZDSOLVE ZLINDEP ZMOD

#
# categories and domains must be compiled in a specific order
# for ORDERED_MODULES_1 order is very important
# for the rest (ORDERED_MODULES_2) it is untested, if any other
# order than alphabetical order will work

ORDERED_MODULES_1= \
	${LAYER0} ${LAYER1} ${LAYER2} ${LAYER3} ${LAYER4} \
	${LAYER5} ${LAYER6} ${LAYER7} ${LAYER8} ${LAYER9} ${LAYER10} \
	${LAYER11} ${LAYER12} ${LAYER13} ${LAYER14} ${LAYER15} ${LAYER16} \
	${LAYER17} ${LAYER18} ${LAYER19}

ORDERED_MODULES_2= \
	$(filter-out $(ORDERED_MODULES_1), $(ALL_MODULES))

# only categories and domains (without category package names)

CAT_DOMAIN_FILES= \
	$(filter-out %-, $(ALL_MODULES))

# only category package names

CAT_PACKAGE_FILES= \
		$(filter %-, $(ALL_MODULES))

# original algebra source files combining several related modules

SOURCE_FILES=	$(addprefix ${MID}/, $(SPADFILES:%=%.spad)) \
		${MID}/INTERP.EXPOSED ${MID}/exposed.lsp

# object files in build order

OBJECT_FILES=	$(addprefix ${OUT}/, $(patsubst %, %.${O}, $(ORDERED_MODULES_1) $(ORDERED_MODULES_2)))

CAT_DOMAIN_SOURCE_FILES= \
		$(addprefix ${MID}/, $(CAT_DOMAIN_FILES:%=%.spad))

CAT_DOMAIN_NRLIB_DIRS= \
		$(addprefix ${MID}/, $(CAT_DOMAIN_FILES:%=%.NRLIB))

CAT_PACKAGE_NRLIB_DIRS= \
		$(addprefix ${MID}/, $(CAT_PACKAGE_FILES:%-=%-.NRLIB))

BOOTSTRAP_INTERMEDIATE_OBJECT_FILES= \
		$(addprefix ${MID}/, $(LAYER0BOOTSTRAP:%=%.${O}))

# preparsed source files (for parser debugging)
TRANS_FILES=	$(addprefix ${MID}/, $(patsubst %, %.trans, $(CAT_DOMAIN_FILES)))


all: src bootstrap nrlibs
#all:	${SUBPART}

everything: check lib db cmd gloss
	@ echo invoking make in `pwd` with parms:
	@ echo SYS= ${SYS} LSP= ${LSP} PART= ${PART} SUBPART= ${SUBPART}
	@ echo SPAD= ${SPAD} SRC= ${SRC} INT= ${INT}
	@ echo OBJ= ${OBJ} MNT= ${MNT} O=${O} LISP=${LISP} BYE=${BYE}


src:		${SOURCE_FILES} ${CAT_DOMAIN_SOURCE_FILES}

bootstrap:	$(BOOTSTRAP_INTERMEDIATE_OBJECT_FILES)

nrlibs:		$(OBJECT_FILES)

check:
	@ echo Checking that INTERP.EXPOSED and NRLIBs are consistent
	@ (cd ${MID} ; \
           echo '(progn (let ((*package* (find-package "BOOT"))) (boot::libcheck "${MID}" "${MID}" "${OUT}")) (${BYE}))' | ${DEPSYS} )

document: ${DOC_FILES}

db:
	@ (cd ${MID} ; \
		( echo ')lisp (make-databases "" nil)'; echo ')quit' ) | ${INTERPSYS} ) 

trans:		$(TRANS_FILES)

########################################################################################
#
# rules

$(OBJECT_FILES): ${OUT}/%.${O}: ${MID}/%.NRLIB
	@ echo 0 making $@ from $<
	@ cp -p $</code.${O} $@
	if [ -f $(basename $<)-.NRLIB/code.${O} ]; then cp -p $(basename $<)-.NRLIB/code.${O} $(basename $@)-.${O}; fi

$(BOOTSTRAP_INTERMEDIATE_OBJECT_FILES): ${MID}/%.${O}: ${MID}/%.${LISP}
	@ echo 0 making $@ from $<
	@ (cd ${MID} ;  \
		(echo ')lisp (compile-file "$(notdir $<)" :output-file "$@")'; echo ')quit') | ${INTERPSYS} )
	@ cp $@ ${OUT}/$(notdir $@)


$(CAT_DOMAIN_NRLIB_DIRS): ${MID}/%.NRLIB: ${MID}/%.spad
	@ echo 0 making $@ from $<
	@ (cd ${MID} ;  (echo ')co "$(notdir $<)"'; echo ')quit') | ${INTERPSYS} )

$(CAT_PACKAGE_NRLIB_DIRS): ${MID}/%-.NRLIB: ${MID}/%.spad
	@ echo 0 making $@ from $<
	@ (cd ${MID} ;  (echo ')co "$(notdir $<)"'; echo ')quit') | ${INTERPSYS} )

${SOURCE_FILES}: ${MID}/%: ${IN}/%.pamphlet
	@ echo 0 making $@ from $<
	notangle $< >  $@

${DOC_FILES}: ${DOC}/%.dvi: ${IN}/%.pamphlet
	@ echo 0 making $@ from $<
	@ (cd ${DOC} ; \
		cp -p ${IN}/< ${DOC} ; \
		${SPADBIN}/document ${NOISE} $(basename $(notdir $<)) ; \
	        rm -f ${DOC}/$(notdir $<) ; \
		rm -f ${DOC}/$(basename $(notdir $<)).tex ; \
		rm -f ${DOC}/$(basename $(notdir $<)) )


$(TRANS_FILES): ${MID}/%.trans: ${MID}/%.spad
	@ echo 0 making $@ from $<
	@ (cd ${MID} ;  (echo ')lisp (setq |$$PrintOnly| t)'; echo ')co "$(notdir $<)"'; echo ')quit') | ${INTERPSYS} | cat > $@ )


########################################################################################
#
# automatically generated rules

include ${MID}/Makefile.include

${MID}/Makefile.include: $(addprefix ${IN}/, $(SPADFILES:%=%.spad.pamphlet))
	@ grep '^<<\(category\|package\|domain\).*>>=' $(addprefix ${IN}/, $(SPADFILES:%=%.spad.pamphlet)) > $@
	@ ( echo '1,$$s,${IN}/\(.*\)\.spad\.pamphlet:<<\(.*\) \(.*\) \(.*\)>>=,$${MID}/\3.spad: $${IN}/\1.spad.pamphlet\'; echo '	notangle -R"\2 \3 \4" $$< > $$@,' ; echo 'wq' ) | ed -s $@

include ${MID}/Makefile.include2

BOOTSTRAP=aggcat array1 boolean catdef ffcat fraction fspace \
	integer list outform polset polycat pscat sf si string symbol vector

${MID}/Makefile.include2: $(addprefix ${IN}/, $(BOOTSTRAP:%=%.spad.pamphlet))
	@ grep '^<<.*BOOTSTRAP>>=' $(addprefix ${IN}/, $(BOOTSTRAP:%=%.spad.pamphlet)) > $@
	@ ( echo '1,$$s,${IN}/\(.*\)\.spad\.pamphlet:<<\(.*\)\.lsp BOOTSTRAP>>=,$${MID}/\2.$${LISP}: $${IN}/\1.spad.pamphlet\'; echo '	notangle -R"\2.lsp BOOTSTRAP" $$< > $$@,' ; echo 'wq' ) | ed -s $@
