#
# 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 ; }
# To build from grammar source we must be on unix (to run the yyacc
# script) and have yacc available.
if $(UNIX) && $(YACC) { code += jamgram.y ; }
else { code += jamgram.c ; }
if $(OS) = NT { CCFLAGS += /DNT ; }
if $(OS) = MVS { CCFLAGS += -DMVS ; }
if $(OS)$(OSVER) = AIX41 { CCFLAGS += -D_AIX41 ; }
#
# 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) && $(YACC)
{
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) ;