Jamfile #13

  • //
  • guest/
  • craig_mcpheeters/
  • work/
  • jam/
  • src/
  • Jamfile
  • View
  • Commits
  • Open Download .zip Download (5 KB)
#
# 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 $(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 $(MINGW) { 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 ; }

# For jam profiling/debugging.

if $(PROFILE) && $(UNIX)
{
	CCFLAGS += -pg ;
	LINKFLAGS += -pg ;
	LOCATE_TARGET = $(LOCATE_TARGET)/pg ;
}

#if $(DEBUG)
#{
#	CCFLAGS += -g ;
#	LINKFLAGS += -g ;
#	LOCATE_TARGET = $(LOCATE_TARGET)/g ;
#}

# We have to signal jam.h for these

if $(OS) = NT 			{ CCFLAGS += /DNT ; }

# CWM
if $(OS) = IRIX
{
    # Ensure it runs on mips3 & mips4
    CCFLAGS += -n32 -mips3 ;
    LINKFLAGS += -n32 -mips3 ;
}
if $(UNIX) 
{
   if $(DEBUG)        
   {
       CCFLAGS += -g ;
       LINKFLAGS += -g ;
   }
   else {
       CCFLAGS += -O2 ;
   }
}
else if $(NT) 
{
   if $(DEBUG)
   { 
       CCFLAGS += /Z7 /MDd ;
       LINKFLAGS += /NODEFAULTLIB:MSVCRT.lib /DEBUG /PDB:NONE
                    /libpath:\"$(MSVCNT)\\lib\" ;
       LINKLIBS = $(MSVCNT)\\lib\\advapi32.lib
                  $(MSVCNT)\\lib\\oldnames.lib
                  $(MSVCNT)\\lib\\kernel32.lib ;
   }
   else { 
       CCFLAGS += /O2 ; 
   }

   # Ensure there is a large stack - CWM.
   LINKFLAGS += /STACK:0x400000 ;
}
else if $(OS) = MACOSX
{
    # Ensure there is a large stack - CWM.
    LINKFLAGS += -Wl,-stack_size -Wl,0x800000 ;
}

# Do we know yacc?

if $(YACC) 	{ code += jamgram.y ; }
else            { code += jamgram.c ; }

#
# Build the jamgram.y from the jamgram.yy
# yyacc is a slippery script that makes grammars a little
# easier to read/maintain.
#

if $(YACC) && $(SUFEXE) = ""
{
	GenFile jamgram.y jamgramtab.h : yyacc jamgram.yy ;
}

# CWM.
# Determine what configurations are enabled
include Jamfile.config ;

if $(HeaderCache)
{
    # If the header cache extension is turned on, then set the cache
    # variable to use it.  Although Jam is small and doesn't need the
    # cache, this helps test the feature
    HCACHEFILE = .jamhcache ;
}

#
# How to build the compiled in jambase.
#

Main		mkjambase : mkjambase.c ;

if $(VMS)
{
	CC = cxx ;
	LINK = cxxlink ;
	DEFINES += VMS ;
}

#
# 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 :
		    builtins.c command.c compile.c $(code) expand.c
		    glob.c hash.c headers.c hcache.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 
            w32_getreg.c ;


if $(BINDIR) 	{ InstallBin $(BINDIR) : jam ; }


# CWM
# Create AWjam
Main 		AWjam : jam.c AWjambase.c ;
LinkLibraries 	AWjam : libjam.a ;
GenFile 	AWjambase.c : mkjambase Jambase.aw ;


#
# Distribution making from here on out.
#

ALLSOURCE =
	Build.com Build.mpw Jam.html Jambase Jambase.html Jamfile
	Jamfile.config
	Jamfile.html Makefile Porting README RELNOTES builtins.c builtins.h
	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	hcache.c hcache.h
	jambase.c jambase.h jamgram.c
	jamgram.h jamgram.y jamgram.yy 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 pathsys.h
	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 yyacc 
    w32_getreg.h w32_getreg.c 
    ;

rule Ball
{
	NotFile balls ;
	Depends balls : $(<) ;

	DEPENDS $(<) : $(>) ;

	switch $(<) 
	{
	case *.tar : Tar $(<) : $(>) ;
	case *.shar : Shar $(<) : $(>) ;
	case *.zip : Zip $(<) : $(>) ;
	}
}

VERSION = jam-2.5rc1 ;

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) ;
# Change User Description Committed
#13 4111 Craig Mcpheeters Integration from my jam branch
#12 3183 Craig Mcpheeters Integration of my jam mainline branch into my work branch.
#11 3182 Craig Mcpheeters Update of my work branch.
#10 1663 Craig Mcpheeters Integration of jam 2.4 into my work branch
#9 1606 Craig Mcpheeters Integration from my modified jam mainline.
 This is all the mainline
  changes into my work branch.
#8 1605 Craig Mcpheeters Updated with respect to my copy at work.
 A few minor updates/enhancements
#7 1477 Craig Mcpheeters Integration from my main jam branch.
 This is 2.4-dev with my extensions.
#6 1347 Craig Mcpheeters Integration from my public area.
 This is the latest header cache
  changes.
#5 1085 Craig Mcpheeters Returned some changes to bring this copy in line with our internal
  version
* Added some double quotes in the Jambase so we can compile files with
  spaces in the names
* Updated our Jambase.aw from the Jambase
* Added some debug/optim code to the Jamfile
* Fixed a bug in command.c  In my dynamic command size extension, it
  no longer took into account if a target was marked as piecemeal.  Now
  it does
* Fixed a bug in execunix.c  In jam 2.3 the logic for when to invoke the
  interpreter directly, and when to go through an intermediate .bat file
  was changed.  This was failing for us, as on NT, cmd.exe does not handle
  large lines.  rc.exe was failing when it went through a .bat file.
  Reverted it to the 2.2 logic
#4 1071 Craig Mcpheeters A few tweaks from my jam branch.
#3 785 Craig Mcpheeters Integration from //guest/craig_mcpheeters/jam/src/...
This work area now contains both the Alias|Wavefront changes, and
  the latest integrations from the mainline.  There are some changes
  in this area which shouldn't be merged back into the mainline.
  As I merge this branch back into my jam/src/... branch, I'll
  leave out a few of the changes.
#2 782 Craig Mcpheeters Initial return of the Alias|Wavefront mods to jam 2.2.
 I made a
  stab at a configuration system - see the file Jamfile.config.
  Most of the mods are now enclosed within #ifdef blocks, which
  kind of pollutes the code, but may make it easier to accept
  or reject some of these changes.  Some of these #ifdefs could
  disappear completely if they are accepted into the mainline
This return implements the following extensions:
  * header cache
  * dynamic command block size, allowing for *large* commands
  * slightly improved warnings and errors
  * serial output from jam - nice when working with multiple jobs
  * an extension to variable modifiers:  $(>:/) and $(>:\\)
  * ability to ignore header dependencies for a build (jam -p)
  * new debug level, -d+10, which outputs the dependency graph
  * added no-care support to internal nodes.  if they fail, dependents
    are built anyway
  * time stamps on output
  * a few minor output modifications
  * a fix for nt batch file names conflicing when more than one jam runs
    at a time
Each of the above can be enabled/disabled on the command line.  For
  example, to turn on the HeaderCache code:
    jam -sHeaderCache=1
  that is, build jam first, then use that jam to build a new one with the
  options you want.
Some of these changes may have been made in the mainline already, my next
  step will be to integrate the mainline changes into these ones
This return isn't yet ready for prime-time
#1 777 Craig Mcpheeters Branch of my jam/src/...
area.  This new area establishes the integration
  base for the copy of Jam which has all the changes.
//guest/craig_mcpheeters/jam/src/Jamfile
#2 617 Craig Mcpheeters Integration from mainline as of @3
#1 616 Craig Mcpheeters Integration from Jam mainline, as of @2