#
# 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 ; }

#
# 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) ;