# # Jamfile to build Jam (a make(1)-like program) # # There are no user-serviceable parts in this file. # # Put executables in platform-specific subdirectory. # If $(OSVER) isn't set, second value is used. if $(VMS) { LOCATE_TARGET ?= [.binvms] ; } else if $(MAC) { LOCATE_TARGET ?= :bin.mac ; } else { LOCATE_TARGET ?= bin.$(OSFULL[1]:L) ; } # Leave generated source in current directory; it would be nice to use # these lines below to build the source into the platform-specific # directory, but getting scan.c to include the right jambase.h is # hard: with ""'s, it always gets the bootstrap version; with <>'s, # it won't find the bootstrap version. # SEARCH_SOURCE ?= $(LOCATE_TARGET) $(DOT) ; # LOCATE_SOURCE ?= $(LOCATE_TARGET) ; # # We have some different files for UNIX, VMS, and NT. # if $(NT) { code = execunix.c filent.c pathunix.c ; } else if $(OS2) { code = execunix.c fileos2.c pathunix.c ; } else if $(VMS) { code = execvms.c filevms.c pathvms.c ; } else if $(MAC) { code = execmac.c filemac.c pathmac.c ; } else { code = execunix.c fileunix.c pathunix.c ; } if $(UNIX) { code += jamgram.y ; } else { code += jamgram.c ; } if $(OS) = NT { CCFLAGS += /DNT ; } if $(OS) = MVS { CCFLAGS += -DMVS ; } if $(OS)$(OSVER) = AIX41 { CCFLAGS += -D_AIX41 ; } if $(MAC) { # This is different from the Jambase because: # a. no GUSI (Jambase includes GUSI libs as standard for every executable, # which I think is completely unnecessary. Not every MPW tool needs GUSI!) # b. uses CWPro5 (Jambase should probably be updated for this) if ! $(CWROOT) { EXIT "# Please set CWROOT to the root of the CodeWarrior Pro 5 distribution" ; } CWMACHDR = "$(CWROOT)Metrowerks Codewarrior:MacOS Support:Universal:Interfaces:CIncludes" ; CWMACLIB = "$(CWROOT)Metrowerks Codewarrior:MacOS Support:Libraries" ; CWMACLIB2 = "$(CWROOT)Metrowerks Codewarrior:MacOS Support:Universal:Libraries" ; CWMSL = "$(CWROOT)Metrowerks Codewarrior:MSL" ; CWMSLHDR = "$(CWMSL):MSL_C:MSL_Common:Include" "$(CWMSL):MSL_C:MSL_MacOS:Include" ; CWMSLLIB = "$(CWMSL):MSL_C:MSL_MacOS:Lib" ; HDRS = $(CWMACHDR) $(CWMSLHDR) ; LINKLIBS = "$(CWMSLLIB):PPC:MSL C.PPC MPW(NL).Lib" "$(CWMACLIB):Runtime:Runtime PPC:MSL MPWCRuntime.Lib" "$(CWMACLIB):Apple MPW PPC:PPCToolLibs.o" "$(CWMACLIB):Sources:PLStringFuncs Glue:PLStringFuncsPPC.lib" "$(CWMACLIB2):StubLibraries:InterfaceLib" "$(CWMACLIB2):StubLibraries:MathLib" ; } # # How to build the compiled in jambase. # Main mkjambase : mkjambase.c ; # # The guts of the Jamfile: how to build Jam # Main jam : jam.c jambase.c ; LinkLibraries jam : libjam.a ; GenFile jambase.c : mkjambase Jambase ; Library libjam.a : command.c compile.c $(code) expand.c glob.c hash.c headers.c lists.c make.c make1.c newstr.c option.c parse.c regexp.c rules.c scan.c search.c timestamp.c variable.c ; # # On UNIX, we install this stuff for easy use. # if $(UNIX) { InstallBin $(BINDIR) : jam ; } #### --- cut if $(UNIX) { GenFile jamgram.y jamgramtab.h : yyacc jamgram.yy ; } rule TempCopy { DEPENDS $(<) : $(>) ; } actions TempCopy { cp $(>) $(<) } ALLSOURCE = Build.com Build.mpw Jam.html Jambase Jambase.html Jamfile Jamfile.html Jamlang.html Makefile Porting README RELNOTES command.c command.h compile.c compile.h execcmd.h execmac.c execunix.c execvms.c expand.c expand.h filemac.c filent.c fileos2.c filesys.h fileunix.c filevms.c glob.c hash.c hash.h headers.c headers.h jam.c jam.h jambase.c jambase.h jamgram.c jamgram.h jamgram.y jamgramtab.h lists.c lists.h make.c make.h make1.c mkjambase.c newstr.c newstr.h option.c option.h parse.c parse.h patchlevel.h pathmac.c pathunix.c pathvms.c regexp.c regexp.h rules.c rules.h scan.c scan.h search.c search.h timestamp.c timestamp.h variable.c variable.h ; rule Ball { NotFile balls ; Depends balls : $(<) ; DEPENDS $(<) : $(>) ; PreBall $(<) ; switch $(<) { case *.tar : Tar $(<) : $(>) ; case *.shar : Shar $(<) : $(>) ; case *.zip : Zip $(<) : $(>) ; } PostBall $(<) ; } actions PreBall { mv Jamfile Jamfile.sav sed '/--- cut/,$d' Jamfile.sav > Jamfile } actions PostBall { mv Jamfile.sav Jamfile } VERSION = jam-2.2 ; actions Tar { ln -s . $(VERSION) tar cvhf $(<) $(VERSION)/$(>) rm $(VERSION) } actions Shar { shar $(>) > $(<) } actions Zip { zip $(<) $(>) } Ball $(VERSION).shar : $(ALLSOURCE) ; Ball $(VERSION).tar : $(ALLSOURCE) ; Ball $(VERSION).zip : $(ALLSOURCE) ;