|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if $(NT) |
|
{ |
|
SLASH ?= \\ |
|
} |
|
SLASH ?= / |
|
|
|
|
|
|
|
|
|
|
|
|
|
rule find-to-root ( dir : patterns + ) |
|
{ |
|
local globs = [ GLOB $(dir) : $(patterns) ] |
|
while ! $(globs) && $(dir:P) != $(dir) |
|
{ |
|
dir = $(dir:P) |
|
globs = [ GLOB $(dir) : $(patterns) ] |
|
} |
|
return $(globs) |
|
} |
|
|
|
|
|
|
|
.boost-build-file = |
|
|
|
|
|
.bootstrap-file = |
|
|
|
|
|
BOOST_BUILD_PATH.user-value = $(BOOST_BUILD_PATH) |
|
|
|
|
|
|
|
|
|
|
|
if ! $(BOOST_BUILD_PATH) && $(UNIX) |
|
{ |
|
BOOST_BUILD_PATH = /usr/share/boost-build |
|
} |
|
|
|
|
|
rule _poke ( module-name ? : variables + : value * ) |
|
{ |
|
module $(<) |
|
{ |
|
$(>) = $(3) |
|
} |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
rule boost-build ( dir ? ) |
|
{ |
|
if $(.bootstrap-file) |
|
{ |
|
ECHO "Error: Illegal attempt to re-bootstrap the build system by invoking" |
|
ECHO |
|
ECHO " 'boost-build" $(dir) ";'" |
|
ECHO |
|
EXIT "Please consult the documentation at 'http://www.boost.org'." |
|
} |
|
|
|
|
|
|
|
BOOST_BUILD_PATH = $(dir:R=$(.boost-build-file:D)) $(BOOST_BUILD_PATH) |
|
|
|
|
|
|
|
|
|
|
|
_poke .ENVIRON : BOOST_BUILD_PATH : $(BOOST_BUILD_PATH) |
|
|
|
|
|
local bootstrap-file = [ GLOB $(BOOST_BUILD_PATH) : bootstrap.jam ] |
|
.bootstrap-file = $(bootstrap-file[1]) |
|
|
|
|
|
if ! $(.bootstrap-file) |
|
{ |
|
ECHO "Unable to load Boost.Build: could not find build system." |
|
ECHO --------------------------------------------------------- |
|
ECHO "$(.boost-build-file) attempted to load the build system by invoking" |
|
ECHO |
|
ECHO " 'boost-build" $(dir) ";'" |
|
ECHO |
|
ECHO "but we were unable to find \"bootstrap.jam\" in the specified directory" |
|
ECHO "or in BOOST_BUILD_PATH (searching "$(BOOST_BUILD_PATH:J=", ")")." |
|
ECHO |
|
EXIT "Please consult the documentation at 'http://www.boost.org'." |
|
} |
|
|
|
if [ MATCH .*(--debug-configuration).* : $(ARGV) ] |
|
{ |
|
ECHO "notice: loading Boost.Build from" |
|
[ NORMALIZE_PATH $(.bootstrap-file:D) ] |
|
} |
|
|
|
|
|
include $(.bootstrap-file) |
|
} |
|
|
|
|
|
if [ MATCH .*(b2).* : $(ARGV[1]:BL) ] |
|
|| [ MATCH .*(bjam).* : $(ARGV[1]:BL) ] |
|
|| $(BOOST_ROOT) |
|
{ |
|
|
|
|
|
|
|
|
|
|
|
|
|
local search-path = $(BOOST_BUILD_PATH) $(BOOST_ROOT) |
|
local self = [ SELF_PATH ] |
|
local boost-build-relative = ../../share/boost-build |
|
local self-based-path = [ NORMALIZE_PATH $(boost-build-relative:R=$(self)) ] |
|
|
|
local boost-build-files = |
|
[ find-to-root [ PWD ] : boost-build.jam ] |
|
[ GLOB $(self-based-path) : boost-build.jam ] |
|
|
|
[ GLOB $(search-path) : boost-build.jam ] |
|
|
|
.boost-build-file = $(boost-build-files[1]) |
|
|
|
|
|
|
|
if ! $(.boost-build-file) |
|
{ |
|
ECHO "Unable to load Boost.Build: could not find \"boost-build.jam\"" |
|
ECHO --------------------------------------------------------------- |
|
|
|
if ! [ MATCH .*(bjam).* : $(ARGV[1]:BL) ] |
|
{ |
|
ECHO "BOOST_ROOT must be set, either in the environment, or " |
|
ECHO "on the command-line with -sBOOST_ROOT=..., to the root" |
|
ECHO "of the boost installation." |
|
ECHO |
|
} |
|
|
|
ECHO "Attempted search from" [ PWD ] "up to the root" |
|
ECHO "at" $(self-based-path) |
|
ECHO "and in these directories from BOOST_BUILD_PATH and BOOST_ROOT: "$(search-path:J=", ")"." |
|
EXIT "Please consult the documentation at 'http://www.boost.org'." |
|
} |
|
|
|
if [ MATCH .*(--debug-configuration).* : $(ARGV) ] |
|
{ |
|
ECHO "notice: found boost-build.jam at" |
|
[ NORMALIZE_PATH $(.boost-build-file) ] |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
include $(.boost-build-file) |
|
|
|
|
|
if ! $(.bootstrap-file) |
|
{ |
|
ECHO "Unable to load Boost.Build" |
|
ECHO -------------------------- |
|
ECHO "\"$(.boost-build-file)\" was found by searching from" [ PWD ] "up to the root" |
|
ECHO "and in these directories from BOOST_BUILD_PATH and BOOST_ROOT: "$(search-path:J=", ")"." |
|
ECHO |
|
ECHO "However, it failed to call the \"boost-build\" rule to indicate" |
|
ECHO "the location of the build system." |
|
ECHO |
|
EXIT "Please consult the documentation at 'http://www.boost.org'." |
|
} |
|
} |
|
else |
|
{ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if $(NT) |
|
{ |
|
|
|
|
|
local SUPPORTED_TOOLSETS = "BORLANDC" "VC7" "VISUALC" "VISUALC16" "INTELC" "WATCOM" |
|
"MINGW" "LCC" |
|
|
|
|
|
|
|
TOOLSET = "" |
|
|
|
|
|
|
|
|
|
if $(JAM_TOOLSET) |
|
{ |
|
local t |
|
|
|
for t in $(SUPPORTED_TOOLSETS) |
|
{ |
|
$(t) = $($(t):J=" ") |
|
if $(t) = $(JAM_TOOLSET) { TOOLSET = $(t) |
|
} |
|
|
|
if ! $(TOOLSET) |
|
{ |
|
ECHO "The JAM_TOOLSET environment variable is defined but its value" |
|
ECHO "is invalid, please use one of the following:" |
|
ECHO |
|
|
|
for t in $(SUPPORTED_TOOLSETS) { ECHO " " $(t) |
|
EXIT |
|
} |
|
} |
|
|
|
|
|
|
|
|
|
if ! $(TOOLSET) |
|
{ |
|
if $(BCCROOT) |
|
{ |
|
TOOLSET = BORLANDC |
|
BORLANDC = $(BCCROOT:J=" ") |
|
} |
|
else if $(MSVC) |
|
{ |
|
TOOLSET = VISUALC16 |
|
VISUALC16 = $(MSVC:J=" ") |
|
} |
|
else if $(MSVCNT) |
|
{ |
|
TOOLSET = VISUALC |
|
VISUALC = $(MSVCNT:J=" ") |
|
} |
|
else if $(MSVCDir) |
|
{ |
|
TOOLSET = VISUALC |
|
VISUALC = $(MSVCDir:J=" ") |
|
} |
|
else if $(MINGW) |
|
{ |
|
TOOLSET = MINGW |
|
} |
|
else |
|
{ |
|
ECHO "Jam cannot be run because, either:" |
|
ECHO " a. You didn't set BOOST_ROOT to indicate the root of your" |
|
ECHO " Boost installation." |
|
ECHO " b. You are trying to use stock Jam but didn't indicate which" |
|
ECHO " compilation toolset to use. To do so, follow these simple" |
|
ECHO " instructions:" |
|
ECHO |
|
ECHO " - define one of the following environment variable, with the" |
|
ECHO " appropriate value according to this list:" |
|
ECHO |
|
ECHO " Variable Toolset Description" |
|
ECHO |
|
ECHO " BORLANDC Borland C++ BC++ install path" |
|
ECHO " VISUALC Microsoft Visual C++ VC++ install path" |
|
ECHO " VISUALC16 Microsoft Visual C++ 16 bit VC++ 16 bit install" |
|
ECHO " INTELC Intel C/C++ IC++ install path" |
|
ECHO " WATCOM Watcom C/C++ Watcom install path" |
|
ECHO " MINGW MinGW (gcc) MinGW install path" |
|
ECHO " LCC Win32-LCC LCC-Win32 install path" |
|
ECHO |
|
ECHO " - define the JAM_TOOLSET environment variable with the *name*" |
|
ECHO " of the toolset variable you want to use." |
|
ECHO |
|
ECHO " e.g.: set VISUALC=C:\\Visual6" |
|
ECHO " set JAM_TOOLSET=VISUALC" |
|
EXIT |
|
} |
|
} |
|
|
|
CP ?= copy |
|
RM ?= del /f/q |
|
SLASH ?= \\ |
|
SUFLIB ?= .lib |
|
SUFOBJ ?= .obj |
|
SUFEXE ?= .exe |
|
|
|
if $(TOOLSET) = BORLANDC |
|
{ |
|
ECHO "Compiler is Borland C++" |
|
|
|
AR ?= tlib /C /P64 |
|
CC ?= bcc32 |
|
CCFLAGS ?= -q -y -d -v -w-par -w-ccc -w-rch -w-pro -w-aus |
|
C++ ?= bcc32 |
|
C++FLAGS ?= -q -y -d -v -w-par -w-ccc -w-rch -w-pro -w-aus -P |
|
LINK ?= $(CC) |
|
LINKFLAGS ?= $(CCFLAGS) |
|
STDLIBPATH ?= $(BORLANDC)\\lib |
|
STDHDRS ?= $(BORLANDC)\\include |
|
NOARSCAN ?= true |
|
} |
|
else if $(TOOLSET) = VISUALC16 |
|
{ |
|
ECHO "Compiler is Microsoft Visual C++ 16 bit" |
|
|
|
AR ?= lib /nologo |
|
CC ?= cl /nologo |
|
CCFLAGS ?= /D \"WIN\" |
|
C++ ?= $(CC) |
|
C++FLAGS ?= $(CCFLAGS) |
|
LINK ?= $(CC) |
|
LINKFLAGS ?= $(CCFLAGS) |
|
LINKLIBS ?= |
|
\"$(VISUALC16)\\lib\\mlibce.lib\" |
|
\"$(VISUALC16)\\lib\\oldnames.lib\" |
|
|
|
LINKLIBS ?= |
|
NOARSCAN ?= true |
|
OPTIM ?= "" |
|
STDHDRS ?= $(VISUALC16)\\include |
|
UNDEFFLAG ?= "/u _" |
|
} |
|
else if $(TOOLSET) = VISUALC |
|
{ |
|
ECHO "Compiler is Microsoft Visual C++" |
|
|
|
AR ?= lib |
|
AS ?= masm386 |
|
CC ?= cl /nologo |
|
CCFLAGS ?= "" |
|
C++ ?= $(CC) |
|
C++FLAGS ?= $(CCFLAGS) |
|
LINK ?= link /nologo |
|
LINKFLAGS ?= "" |
|
LINKLIBS ?= \"$(VISUALC)\\lib\\advapi32.lib\" |
|
|
|
|
|
\"$(VISUALC)\\lib\\gdi32.lib\" |
|
\"$(VISUALC)\\lib\\user32.lib\" |
|
\"$(VISUALC)\\lib\\kernel32.lib\" |
|
OPTIM ?= "" |
|
STDHDRS ?= $(VISUALC)\\include |
|
UNDEFFLAG ?= "/u _" |
|
} |
|
else if $(TOOLSET) = VC7 |
|
{ |
|
ECHO "Compiler is Microsoft Visual C++ .NET" |
|
|
|
AR ?= lib |
|
AS ?= masm386 |
|
CC ?= cl /nologo |
|
CCFLAGS ?= "" |
|
C++ ?= $(CC) |
|
C++FLAGS ?= $(CCFLAGS) |
|
LINK ?= link /nologo |
|
LINKFLAGS ?= "" |
|
LINKLIBS ?= \"$(VISUALC)\\PlatformSDK\\lib\\advapi32.lib\" |
|
|
|
|
|
\"$(VISUALC)\\PlatformSDK\\lib\\gdi32.lib\" |
|
\"$(VISUALC)\\PlatformSDK\\lib\\user32.lib\" |
|
\"$(VISUALC)\\PlatformSDK\\lib\\kernel32.lib\" |
|
OPTIM ?= "" |
|
STDHDRS ?= \"$(VISUALC)\\include\" |
|
\"$(VISUALC)\\PlatformSDK\\include\" |
|
UNDEFFLAG ?= "/u _" |
|
} |
|
else if $(TOOLSET) = INTELC |
|
{ |
|
ECHO "Compiler is Intel C/C++" |
|
|
|
if ! $(VISUALC) |
|
{ |
|
ECHO "As a special exception, when using the Intel C++ compiler, you need" |
|
ECHO "to define the VISUALC environment variable to indicate the location" |
|
ECHO "of your Visual C++ installation. Aborting.." |
|
EXIT |
|
} |
|
|
|
AR ?= lib |
|
AS ?= masm386 |
|
CC ?= icl /nologo |
|
CCFLAGS ?= "" |
|
C++ ?= $(CC) |
|
C++FLAGS ?= $(CCFLAGS) |
|
LINK ?= link /nologo |
|
LINKFLAGS ?= "" |
|
LINKLIBS ?= $(VISUALC)\\lib\\advapi32.lib |
|
|
|
|
|
$(VISUALC)\\lib\\kernel32.lib |
|
|
|
OPTIM ?= "" |
|
STDHDRS ?= $(INTELC)\include $(VISUALC)\\include |
|
UNDEFFLAG ?= "/u _" |
|
} |
|
else if $(TOOLSET) = WATCOM |
|
{ |
|
ECHO "Compiler is Watcom C/C++" |
|
|
|
AR ?= wlib |
|
CC ?= wcc386 |
|
CCFLAGS ?= /zq /DWIN32 /I$(WATCOM)\\h |
|
C++ ?= wpp386 |
|
C++FLAGS ?= $(CCFLAGS) |
|
CP ?= copy |
|
DOT ?= . |
|
DOTDOT ?= .. |
|
LINK ?= wcl386 |
|
LINKFLAGS ?= /zq |
|
LINKLIBS ?= |
|
MV ?= move |
|
NOARSCAN ?= true |
|
OPTIM ?= |
|
RM ?= del /f |
|
SLASH ?= \\ |
|
STDHDRS ?= $(WATCOM)\\h $(WATCOM)\\h\\nt |
|
SUFEXE ?= .exe |
|
SUFLIB ?= .lib |
|
SUFOBJ ?= .obj |
|
UNDEFFLAG ?= "/u _" |
|
} |
|
else if $(TOOLSET) = MINGW |
|
{ |
|
ECHO "Compiler is GCC with Mingw" |
|
|
|
AR ?= ar -ru |
|
CC ?= gcc |
|
CCFLAGS ?= "" |
|
C++ ?= $(CC) |
|
C++FLAGS ?= $(CCFLAGS) |
|
LINK ?= $(CC) |
|
LINKFLAGS ?= "" |
|
LINKLIBS ?= "" |
|
OPTIM ?= |
|
SUFOBJ = .o |
|
SUFLIB = .a |
|
SLASH = / |
|
|
|
} |
|
else if $(TOOLSET) = LCC |
|
{ |
|
ECHO "Compiler is Win32-LCC" |
|
|
|
AR ?= lcclib |
|
CC ?= lcc |
|
CCFLAGS ?= "" |
|
C++ ?= $(CC) |
|
C++FLAGS ?= $(CCFLAGS) |
|
LINK ?= lcclnk |
|
LINKFLAGS ?= "" |
|
LINKLIBS ?= "" |
|
OPTIM ?= |
|
NOARSCAN = true |
|
} |
|
else |
|
{ |
|
|
|
|
|
|
|
EXIT On NT, set BCCROOT, MSVCNT, MINGW or MSVC to the root of the |
|
Borland or Microsoft directories. |
|
} |
|
|
|
} |
|
else if $(OS2) |
|
{ |
|
|
|
|
|
local SUPPORTED_TOOLSETS = "EMX" "WATCOM" |
|
|
|
|
|
|
|
TOOLSET = "" |
|
|
|
|
|
|
|
|
|
if $(JAM_TOOLSET) |
|
{ |
|
local t |
|
|
|
for t in $(SUPPORTED_TOOLSETS) |
|
{ |
|
$(t) = $($(t):J=" ") |
|
if $(t) = $(JAM_TOOLSET) { TOOLSET = $(t) |
|
} |
|
|
|
if ! $(TOOLSET) |
|
{ |
|
ECHO "The JAM_TOOLSET environment variable is defined but its value" |
|
ECHO "is invalid, please use one of the following:" |
|
ECHO |
|
|
|
for t in $(SUPPORTED_TOOLSETS) { ECHO " " $(t) |
|
EXIT |
|
} |
|
} |
|
|
|
|
|
|
|
|
|
if ! $(TOOLSET) |
|
{ |
|
if $(watcom) |
|
{ |
|
WATCOM = $(watcom:J=" ") |
|
TOOLSET = WATCOM |
|
} |
|
else |
|
{ |
|
ECHO "Jam cannot be run because you didn't indicate which compilation toolset" |
|
ECHO "to use. To do so, follow these simple instructions:" |
|
ECHO |
|
ECHO " - define one of the following environment variable, with the" |
|
ECHO " appropriate value according to this list:" |
|
ECHO |
|
ECHO " Variable Toolset Description" |
|
ECHO |
|
ECHO " WATCOM Watcom C/C++ Watcom install path" |
|
ECHO " EMX EMX (gcc) EMX install path" |
|
ECHO " VISUALAGE IBM Visual Age C/C++ VisualAge install path" |
|
ECHO |
|
ECHO " - define the JAM_TOOLSET environment variable with the *name*" |
|
ECHO " of the toolset variable you want to use." |
|
ECHO |
|
ECHO " e.g.: set WATCOM=C:\WATCOM" |
|
ECHO " set JAM_TOOLSET=WATCOM" |
|
ECHO |
|
EXIT |
|
} |
|
} |
|
|
|
RM = del /f |
|
CP = copy |
|
MV ?= move |
|
DOT ?= . |
|
DOTDOT ?= .. |
|
SUFLIB ?= .lib |
|
SUFOBJ ?= .obj |
|
SUFEXE ?= .exe |
|
|
|
if $(TOOLSET) = WATCOM |
|
{ |
|
AR ?= wlib |
|
BINDIR ?= \\os2\\apps |
|
CC ?= wcc386 |
|
CCFLAGS ?= /zq /DOS2 /I$(WATCOM)\\h |
|
C++ ?= wpp386 |
|
C++FLAGS ?= $(CCFLAGS) |
|
LINK ?= wcl386 |
|
LINKFLAGS ?= /zq |
|
LINKLIBS ?= |
|
NOARSCAN ?= true |
|
OPTIM ?= |
|
SLASH ?= \\ |
|
STDHDRS ?= $(WATCOM)\\h |
|
UNDEFFLAG ?= "/u _" |
|
} |
|
else if $(TOOLSET) = EMX |
|
{ |
|
ECHO "Compiler is GCC-EMX" |
|
AR ?= ar -ru |
|
CC ?= gcc |
|
CCFLAGS ?= "" |
|
C++ ?= $(CC) |
|
C++FLAGS ?= $(CCFLAGS) |
|
LINK ?= $(CC) |
|
LINKFLAGS ?= "" |
|
LINKLIBS ?= "" |
|
OPTIM ?= |
|
SUFOBJ = .o |
|
SUFLIB = .a |
|
UNDEFFLAG ?= "-U" |
|
SLASH = / |
|
|
|
} |
|
else |
|
{ |
|
|
|
EXIT "Sorry, but the $(JAM_TOOLSET) toolset isn't supported for now" |
|
} |
|
} |
|
else if $(VMS) |
|
{ |
|
C++ ?= cxx |
|
C++FLAGS ?= |
|
CC ?= cc |
|
CCFLAGS ?= |
|
CHMOD ?= set file/prot= |
|
CP ?= copy/replace |
|
CRELIB ?= true |
|
DOT ?= [] |
|
DOTDOT ?= [-] |
|
EXEMODE ?= (w:e) |
|
FILEMODE ?= (w:r) |
|
HDRS ?= |
|
LINK ?= link |
|
LINKFLAGS ?= "" |
|
LINKLIBS ?= |
|
MKDIR ?= create/dir |
|
MV ?= rename |
|
OPTIM ?= "" |
|
RM ?= delete |
|
RUNVMS ?= mcr |
|
SHELLMODE ?= (w:er) |
|
SLASH ?= . |
|
STDHDRS ?= decc$library_include |
|
SUFEXE ?= .exe |
|
SUFLIB ?= .olb |
|
SUFOBJ ?= .obj |
|
|
|
switch $(OS) |
|
{ |
|
case OPENVMS : CCFLAGS ?= /stand=vaxc |
|
case VMS : LINKLIBS ?= sys$library:vaxcrtl.olb/lib |
|
} |
|
} |
|
else if $(MAC) |
|
{ |
|
local OPT |
|
|
|
CW ?= "{CW}" |
|
|
|
MACHDRS ?= |
|
"$(UMACHDRS):Universal:Interfaces:CIncludes" |
|
"$(CW):MSL:MSL_C:MSL_Common:Include" |
|
"$(CW):MSL:MSL_C:MSL_MacOS:Include" |
|
|
|
MACLIBS ?= |
|
"$(CW):MacOS Support:Universal:Libraries:StubLibraries:Interfacelib" |
|
"$(CW):MacOS Support:Universal:Libraries:StubLibraries:Mathlib" |
|
|
|
MPWLIBS ?= |
|
"$(CW):MacOS Support:Libraries:Runtime:Runtime PPC:MSL MPWCRuntime.lib" |
|
"$(CW):MSL:MSL_C:MSL_MacOS:Lib:PPC:MSL C.PPC MPW.Lib" |
|
|
|
MPWNLLIBS ?= |
|
"$(CW):MacOS Support:Libraries:Runtime:Runtime PPC:MSL MPWCRuntime.lib" |
|
"$(CW):MSL:MSL_C:MSL_MacOS:Lib:PPC:MSL C.PPC MPW(NL).Lib" |
|
|
|
SIOUXHDRS ?= |
|
|
|
SIOUXLIBS ?= |
|
"$(CW):MacOS Support:Libraries:Runtime:Runtime PPC:MSL RuntimePPC.lib" |
|
"$(CW):MSL:MSL_C:MSL_MacOS:Lib:PPC:MSL SIOUX.PPC.Lib" |
|
"$(CW):MSL:MSL_C:MSL_MacOS:Lib:PPC:MSL C.PPC.Lib" |
|
|
|
C++ ?= mwcppc |
|
C++FLAGS ?= -w off -nomapcr |
|
CC ?= mwcppc |
|
CCFLAGS ?= -w off -nomapcr |
|
CP ?= duplicate -y |
|
DOT ?= ":" |
|
DOTDOT ?= "::" |
|
HDRS ?= $(MACHDRS) $(MPWHDRS) |
|
LINK ?= mwlinkppc |
|
LINKFLAGS ?= -mpwtool -warn |
|
LINKLIBS ?= $(MACLIBS) $(MPWLIBS) |
|
MKDIR ?= newfolder |
|
MV ?= rename -y |
|
NOARSCAN ?= true |
|
OPTIM ?= |
|
RM ?= delete -y |
|
SLASH ?= ":" |
|
STDHDRS ?= |
|
SUFLIB ?= .lib |
|
SUFOBJ ?= .o |
|
} |
|
else if $(OS) = BEOS && $(METROWERKS) |
|
{ |
|
AR ?= mwld -xml -o |
|
BINDIR ?= /boot/apps |
|
CC ?= mwcc |
|
CCFLAGS ?= -nosyspath |
|
C++ ?= $(CC) |
|
C++FLAGS ?= -nosyspath |
|
FORTRAN ?= "" |
|
LIBDIR ?= /boot/develop/libraries |
|
LINK ?= mwld |
|
LINKFLAGS ?= "" |
|
MANDIR ?= /boot/documentation/"Shell Tools"/HTML |
|
NOARSCAN ?= true |
|
STDHDRS ?= /boot/develop/headers/posix |
|
} |
|
else if $(OS) = BEOS |
|
{ |
|
BINDIR ?= /boot/apps |
|
CC ?= gcc |
|
C++ ?= $(CC) |
|
FORTRAN ?= "" |
|
LIBDIR ?= /boot/develop/libraries |
|
LINK ?= gcc |
|
LINKLIBS ?= -lnet |
|
NOARSCAN ?= true |
|
STDHDRS ?= /boot/develop/headers/posix |
|
} |
|
else if $(UNIX) |
|
{ |
|
switch $(OS) |
|
{ |
|
case AIX : |
|
LINKLIBS ?= -lbsd |
|
|
|
case AMIGA : |
|
CC ?= gcc |
|
YACC ?= "bison -y" |
|
|
|
case CYGWIN : |
|
CC ?= gcc |
|
CCFLAGS += -D__cygwin__ |
|
LEX ?= flex |
|
RANLIB ?= "" |
|
SUFEXE ?= .exe |
|
YACC ?= "bison -y" |
|
|
|
case DGUX : |
|
RANLIB ?= "" |
|
RELOCATE ?= true |
|
|
|
case HPUX : |
|
YACC = |
|
CFLAGS += -Ae |
|
CCFLAGS += -Ae |
|
RANLIB ?= "" |
|
|
|
case INTERIX : |
|
CC ?= gcc |
|
RANLIB ?= "" |
|
|
|
case IRIX : |
|
RANLIB ?= "" |
|
|
|
case MPEIX : |
|
CC ?= gcc |
|
C++ ?= gcc |
|
CCFLAGS += -D_POSIX_SOURCE |
|
HDRS += /usr/include |
|
RANLIB ?= "" |
|
NOARSCAN ?= true |
|
NOARUPDATE ?= true |
|
|
|
case MVS : |
|
RANLIB ?= "" |
|
|
|
case NEXT : |
|
AR ?= libtool -o |
|
RANLIB ?= "" |
|
|
|
case MACOSX : |
|
AR ?= libtool -o |
|
C++ ?= c++ |
|
MANDIR ?= /usr/local/share/man |
|
RANLIB ?= "" |
|
|
|
case NCR : |
|
RANLIB ?= "" |
|
|
|
case PTX : |
|
RANLIB ?= "" |
|
|
|
case QNX : |
|
AR ?= wlib |
|
CC ?= cc |
|
CCFLAGS ?= -Q |
|
C++ ?= $(CC) |
|
C++FLAGS ?= -Q |
|
LINK ?= $(CC) |
|
LINKFLAGS ?= -Q |
|
NOARSCAN ?= true |
|
RANLIB ?= "" |
|
|
|
case SCO : |
|
RANLIB ?= "" |
|
RELOCATE ?= true |
|
|
|
case SINIX : |
|
RANLIB ?= "" |
|
|
|
case SOLARIS : |
|
RANLIB ?= "" |
|
AR ?= "/usr/ccs/bin/ar ru" |
|
|
|
case UNICOS : |
|
NOARSCAN ?= true |
|
OPTIM ?= -O0 |
|
|
|
case UNIXWARE : |
|
RANLIB ?= "" |
|
RELOCATE ?= true |
|
} |
|
|
|
|
|
|
|
CCFLAGS ?= |
|
C++FLAGS ?= $(CCFLAGS) |
|
CHMOD ?= chmod |
|
CHGRP ?= chgrp |
|
CHOWN ?= chown |
|
LEX ?= lex |
|
LINKFLAGS ?= $(CCFLAGS) |
|
LINKLIBS ?= |
|
OPTIM ?= -O |
|
RANLIB ?= ranlib |
|
YACC ?= yacc |
|
YACCFILES ?= y.tab |
|
YACCFLAGS ?= -d |
|
} |
|
|
|
|
|
|
|
|
|
|
|
AR ?= ar ru |
|
AS ?= as |
|
ASFLAGS ?= |
|
AWK ?= awk |
|
BINDIR ?= /usr/local/bin |
|
C++ ?= cc |
|
C++FLAGS ?= |
|
CC ?= cc |
|
CCFLAGS ?= |
|
CP ?= cp -f |
|
CRELIB ?= |
|
DOT ?= . |
|
DOTDOT ?= .. |
|
EXEMODE ?= 711 |
|
FILEMODE ?= 644 |
|
FORTRAN ?= f77 |
|
FORTRANFLAGS ?= |
|
HDRS ?= |
|
INSTALLGRIST ?= installed |
|
JAMFILE ?= Jamfile |
|
JAMRULES ?= Jamrules |
|
LEX ?= |
|
LIBDIR ?= /usr/local/lib |
|
LINK ?= $(CC) |
|
LINKFLAGS ?= |
|
LINKLIBS ?= |
|
LN ?= ln |
|
MANDIR ?= /usr/local/man |
|
MKDIR ?= mkdir |
|
MV ?= mv -f |
|
OPTIM ?= |
|
RCP ?= rcp |
|
RM ?= rm -f |
|
RSH ?= rsh |
|
SED ?= sed |
|
SHELLHEADER ?= "#!/bin/sh" |
|
SHELLMODE ?= 755 |
|
SLASH ?= / |
|
STDHDRS ?= /usr/include |
|
SUFEXE ?= "" |
|
SUFLIB ?= .a |
|
SUFOBJ ?= .o |
|
UNDEFFLAG ?= "-u _" |
|
YACC ?= |
|
YACCFILES ?= |
|
YACCFLAGS ?= |
|
|
|
HDRPATTERN = |
|
"^[ ]*#[ ]*include[ ]*[<\"]([^\">]*)[\">].*$" ; |
|
|
|
OSFULL = $(OS)$(OSVER)$(OSPLAT) $(OS)$(OSPLAT) $(OS)$(OSVER) $(OS) ; |
|
|
|
|
|
# |
|
# Base dependencies - first for "bootstrap" kinds of rules |
|
# |
|
|
|
DEPENDS all : shell files lib exe obj ; |
|
DEPENDS all shell files lib exe obj : first ; |
|
NOTFILE all first shell files lib exe obj dirs clean uninstall ; |
|
ALWAYS clean uninstall ; |
|
|
|
# |
|
# Rules |
|
# |
|
|
|
rule As |
|
{ |
|
DEPENDS $(<) : $(>) ; |
|
ASFLAGS on $(<) += $(ASFLAGS) $(SUBDIRASFLAGS) ; |
|
} |
|
|
|
rule Bulk |
|
{ |
|
local i ; |
|
|
|
for i in $(>) |
|
{ |
|
File $(i:D=$(<)) : $(i) ; |
|
} |
|
} |
|
|
|
rule Cc |
|
{ |
|
local _h ; |
|
|
|
DEPENDS $(<) : $(>) ; |
|
|
|
# Just to clarify here: this sets the per-target CCFLAGS to |
|
# be the current value of (global) CCFLAGS and SUBDIRCCFLAGS. |
|
|
|
CCFLAGS on $(<) += $(CCFLAGS) $(SUBDIRCCFLAGS) ; |
|
|
|
# If the compiler's -o flag doesn't work, relocate the .o |
|
|
|
if $(RELOCATE) |
|
{ |
|
CcMv $(<) : $(>) ; |
|
} |
|
|
|
_h = $(SEARCH_SOURCE) $(HDRS) $(SUBDIRHDRS) ; |
|
|
|
if $(VMS) && $(_h) |
|
{ |
|
SLASHINC on $(<) = "/inc=(" $(_h[1]) ,$(_h[2-]) ")" ; |
|
} |
|
else if $(MAC) && $(_h) |
|
{ |
|
local _i _j ; |
|
_j = $(_h[1]) ; |
|
for _i in $(_h[2-]) |
|
{ |
|
_j = $(_j),$(_i) ; |
|
} |
|
MACINC on $(<) = \"$(_j)\" ; |
|
} |
|
} |
|
|
|
rule C++ |
|
{ |
|
local _h ; |
|
|
|
DEPENDS $(<) : $(>) ; |
|
C++FLAGS on $(<) += $(C++FLAGS) $(SUBDIRC++FLAGS) ; |
|
|
|
if $(RELOCATE) |
|
{ |
|
CcMv $(<) : $(>) ; |
|
} |
|
|
|
_h = $(SEARCH_SOURCE) $(HDRS) $(SUBDIRHDRS) ; |
|
|
|
if $(VMS) && $(_h) |
|
{ |
|
SLASHINC on $(<) = "/inc=(" $(_h[1]) ,$(_h[2-]) ")" ; |
|
} |
|
else if $(MAC) && $(_h) |
|
{ |
|
local _i _j ; |
|
_j = $(_h[1]) ; |
|
for _i in $(_h[2-]) |
|
{ |
|
_j = $(_j),$(_i) ; |
|
} |
|
MACINC on $(<) = \"$(_j)\" ; |
|
} |
|
} |
|
|
|
rule Chmod |
|
{ |
|
if $(CHMOD) { Chmod1 $(<) ; } |
|
} |
|
|
|
rule File |
|
{ |
|
DEPENDS files : $(<) ; |
|
DEPENDS $(<) : $(>) ; |
|
SEARCH on $(>) = $(SEARCH_SOURCE) ; |
|
MODE on $(<) = $(FILEMODE) ; |
|
Chmod $(<) ; |
|
} |
|
|
|
rule Fortran |
|
{ |
|
DEPENDS $(<) : $(>) ; |
|
} |
|
|
|
rule GenFile |
|
{ |
|
local _t = [ FGristSourceFiles $(<) ] ; |
|
local _s = [ FAppendSuffix $(>[1]) : $(SUFEXE) ] ; |
|
Depends $(_t) : $(_s) $(>[2-]) ; |
|
GenFile1 $(_t) : $(_s) $(>[2-]) ; |
|
Clean clean : $(_t) ; |
|
} |
|
|
|
rule GenFile1 |
|
{ |
|
MakeLocate $(<) : $(LOCATE_SOURCE) ; |
|
SEARCH on $(>) = $(SEARCH_SOURCE) ; |
|
} |
|
|
|
rule HardLink |
|
{ |
|
DEPENDS files : $(<) ; |
|
DEPENDS $(<) : $(>) ; |
|
SEARCH on $(>) = $(SEARCH_SOURCE) ; |
|
} |
|
|
|
rule HdrMacroFile |
|
{ |
|
# HdrMacroFile file ; |
|
# |
|
# this rule is used to indicate that a given file contains definitions |
|
# for filename macros (e.g. " |
|
|
|
|
|
|
|
|
|
HDRMACRO $(<) |
|
} |
|
|
|
rule HdrRule |
|
{ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
local s |
|
|
|
if $(HDRGRIST) |
|
{ |
|
s = $(>:G=$(HDRGRIST)) |
|
} else { |
|
s = $(>) |
|
} |
|
|
|
INCLUDES $(<) : $(s) |
|
SEARCH on $(s) = $(HDRSEARCH) |
|
NOCARE $(s) |
|
|
|
|
|
|
|
HDRSEARCH on $(s) = $(HDRSEARCH) |
|
HDRSCAN on $(s) = $(HDRSCAN) |
|
HDRRULE on $(s) = $(HDRRULE) |
|
HDRGRIST on $(s) = $(HDRGRIST) |
|
} |
|
|
|
rule InstallInto |
|
{ |
|
|
|
|
|
local i t |
|
|
|
t = $(>:G=$(INSTALLGRIST)) |
|
|
|
|
|
|
|
|
|
|
|
|
|
Depends install : $(t) |
|
Clean uninstall : $(t) |
|
SEARCH on $(>) = $(SEARCH_SOURCE) |
|
MakeLocate $(t) : $(<) |
|
|
|
|
|
|
|
|
|
for i in $(>) |
|
{ |
|
local tt = $(i:G=$(INSTALLGRIST)) |
|
|
|
Depends $(tt) : $(i) |
|
Install $(tt) : $(i) |
|
Chmod $(tt) |
|
|
|
if $(OWNER) && $(CHOWN) |
|
{ |
|
Chown $(tt) |
|
OWNER on $(tt) = $(OWNER) |
|
} |
|
|
|
if $(GROUP) && $(CHGRP) |
|
{ |
|
Chgrp $(tt) |
|
GROUP on $(tt) = $(GROUP) |
|
} |
|
} |
|
} |
|
|
|
rule InstallBin |
|
{ |
|
local _t = [ FAppendSuffix $(>) : $(SUFEXE) ] |
|
|
|
InstallInto $(<) : $(_t) |
|
MODE on $(_t:G=installed) = $(EXEMODE) |
|
} |
|
|
|
rule InstallFile |
|
{ |
|
InstallInto $(<) : $(>) |
|
MODE on $(>:G=installed) = $(FILEMODE) |
|
} |
|
|
|
rule InstallLib |
|
{ |
|
InstallInto $(<) : $(>) |
|
MODE on $(>:G=installed) = $(FILEMODE) |
|
} |
|
|
|
rule InstallMan |
|
{ |
|
|
|
|
|
local i s d |
|
|
|
for i in $(>) |
|
{ |
|
switch $(i:S) |
|
{ |
|
case .1 : s = 1 |
|
case .4 : s = 4 |
|
case .7 : s = 7 |
|
case .n : s = n |
|
} |
|
|
|
d = man$(s) |
|
|
|
InstallInto $(d:R=$(<)) : $(i) |
|
} |
|
|
|
MODE on $(>:G=installed) = $(FILEMODE) |
|
} |
|
|
|
rule InstallShell |
|
{ |
|
InstallInto $(<) : $(>) |
|
MODE on $(>:G=installed) = $(SHELLMODE) |
|
} |
|
|
|
rule Lex |
|
{ |
|
LexMv $(<) : $(>) |
|
DEPENDS $(<) : $(>) |
|
MakeLocate $(<) : $(LOCATE_SOURCE) |
|
Clean clean : $(<) |
|
} |
|
|
|
rule Library |
|
{ |
|
LibraryFromObjects $(<) : $(>:S=$(SUFOBJ)) |
|
Objects $(>) |
|
} |
|
|
|
rule LibraryFromObjects |
|
{ |
|
local _i _l _s |
|
|
|
|
|
|
|
_s = [ FGristFiles $(>) ] |
|
_l = $(<:S=$(SUFLIB)) |
|
|
|
|
|
|
|
if $(KEEPOBJS) |
|
{ |
|
DEPENDS obj : $(_s) |
|
} |
|
else |
|
{ |
|
DEPENDS lib : $(_l) |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
if ! $(_l:D) |
|
{ |
|
MakeLocate $(_l) $(_l)($(_s:BS)) : $(LOCATE_TARGET) |
|
} |
|
|
|
if $(NOARSCAN) |
|
{ |
|
|
|
|
|
|
|
|
|
DEPENDS $(_l) : $(_s) |
|
} |
|
else |
|
{ |
|
|
|
|
|
|
|
|
|
DEPENDS $(_l) : $(_l)($(_s:BS)) |
|
|
|
for _i in $(_s) |
|
{ |
|
DEPENDS $(_l)($(_i:BS)) : $(_i) |
|
} |
|
} |
|
|
|
Clean clean : $(_l) |
|
|
|
if $(CRELIB) { CreLib $(_l) : $(_s[1]) |
|
|
|
Archive $(_l) : $(_s) |
|
|
|
if $(RANLIB) { Ranlib $(_l) |
|
|
|
|
|
|
|
if ! ( $(NOARSCAN) || $(KEEPOBJS) ) { RmTemps $(_l) : $(_s) |
|
} |
|
|
|
rule Link |
|
{ |
|
MODE on $(<) = $(EXEMODE) |
|
Chmod $(<) |
|
} |
|
|
|
rule LinkLibraries |
|
{ |
|
|
|
|
|
|
|
local _t = [ FAppendSuffix $(<) : $(SUFEXE) ] |
|
|
|
DEPENDS $(_t) : $(>:S=$(SUFLIB)) |
|
NEEDLIBS on $(_t) += $(>:S=$(SUFLIB)) |
|
} |
|
|
|
rule Main |
|
{ |
|
MainFromObjects $(<) : $(>:S=$(SUFOBJ)) |
|
Objects $(>) |
|
} |
|
|
|
rule MainFromObjects |
|
{ |
|
local _s _t |
|
|
|
|
|
|
|
|
|
_s = [ FGristFiles $(>) ] |
|
_t = [ FAppendSuffix $(<) : $(SUFEXE) ] |
|
|
|
if $(_t) != $(<) |
|
{ |
|
DEPENDS $(<) : $(_t) |
|
NOTFILE $(<) |
|
} |
|
|
|
|
|
|
|
DEPENDS exe : $(_t) |
|
DEPENDS $(_t) : $(_s) |
|
MakeLocate $(_t) : $(LOCATE_TARGET) |
|
|
|
Clean clean : $(_t) |
|
|
|
Link $(_t) : $(_s) |
|
} |
|
|
|
rule MakeLocate |
|
{ |
|
if $(>) |
|
{ |
|
LOCATE on $(<) = $(>) |
|
Depends $(<) : $(>[1]) |
|
MkDir $(>[1]) |
|
} |
|
} |
|
|
|
rule MkDir |
|
{ |
|
|
|
|
|
|
|
NOUPDATE $(<) |
|
|
|
if $(<) != $(DOT) && ! $($(<)-mkdir) |
|
{ |
|
local s |
|
|
|
|
|
|
|
|
|
|
|
$(<)-mkdir = true |
|
MkDir1 $(<) |
|
Depends dirs : $(<) |
|
|
|
|
|
|
|
|
|
s = $(<:P) |
|
|
|
if $(NT) |
|
{ |
|
switch $(s) |
|
{ |
|
case *: : s = |
|
case *:\\ : s = |
|
} |
|
} |
|
|
|
if $(s) && $(s) != $(<) |
|
{ |
|
Depends $(<) : $(s) |
|
MkDir $(s) |
|
} |
|
else if $(s) |
|
{ |
|
NOTFILE $(s) |
|
} |
|
|
|
} |
|
} |
|
|
|
rule Object |
|
{ |
|
local h |
|
|
|
|
|
|
|
Clean clean : $(<) |
|
|
|
MakeLocate $(<) : $(LOCATE_TARGET) |
|
SEARCH on $(>) = $(SEARCH_SOURCE) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
HDRS on $(<) = $(SEARCH_SOURCE) $(HDRS) $(SUBDIRHDRS) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if $(SEARCH_SOURCE) |
|
{ |
|
h = $(SEARCH_SOURCE) |
|
} |
|
else |
|
{ |
|
h = "" |
|
} |
|
|
|
HDRRULE on $(>) = HdrRule |
|
HDRSCAN on $(>) = $(HDRPATTERN) |
|
HDRSEARCH on $(>) = $(HDRS) $(SUBDIRHDRS) $(h) $(STDHDRS) |
|
HDRGRIST on $(>) = $(HDRGRIST) |
|
|
|
|
|
|
|
switch $(>:S) |
|
{ |
|
case .asm : As $(<) : $(>) |
|
case .c : Cc $(<) : $(>) |
|
case .C : C++ $(<) : $(>) |
|
case .cc : C++ $(<) : $(>) |
|
case .cpp : C++ $(<) : $(>) |
|
case .f : Fortran $(<) : $(>) |
|
case .l : Cc $(<) : $(<:S=.c) |
|
Lex $(<:S=.c) : $(>) |
|
case .s : As $(<) : $(>) |
|
case .y : Cc $(<) : $(<:S=.c) |
|
Yacc $(<:S=.c) : $(>) |
|
case * : UserObject $(<) : $(>) |
|
} |
|
} |
|
|
|
|
|
rule ObjectCcFlags |
|
{ |
|
CCFLAGS on [ FGristFiles $(<:S=$(SUFOBJ)) ] += $(>) |
|
} |
|
|
|
rule ObjectC++Flags |
|
{ |
|
C++FLAGS on [ FGristFiles $(<:S=$(SUFOBJ)) ] += $(>) |
|
} |
|
|
|
rule ObjectHdrs |
|
{ |
|
HDRS on [ FGristFiles $(<:S=$(SUFOBJ)) ] += $(>) |
|
} |
|
|
|
rule Objects |
|
{ |
|
local _i |
|
|
|
for _i in [ FGristFiles $(<) ] |
|
{ |
|
Object $(_i:S=$(SUFOBJ)) : $(_i) |
|
DEPENDS obj : $(_i:S=$(SUFOBJ)) |
|
} |
|
} |
|
|
|
rule RmTemps |
|
{ |
|
TEMPORARY $(>) |
|
} |
|
|
|
rule Setuid |
|
{ |
|
MODE on [ FAppendSuffix $(<) : $(SUFEXE) ] = 4711 |
|
} |
|
|
|
rule Shell |
|
{ |
|
DEPENDS shell : $(<) |
|
DEPENDS $(<) : $(>) |
|
SEARCH on $(>) = $(SEARCH_SOURCE) |
|
MODE on $(<) = $(SHELLMODE) |
|
Clean clean : $(<) |
|
Chmod $(<) |
|
} |
|
|
|
rule SubDir |
|
{ |
|
local _r _s |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if ! $($(<[1])) |
|
{ |
|
if ! $(<[1]) |
|
{ |
|
EXIT SubDir syntax error |
|
} |
|
|
|
$(<[1]) = [ FSubDir $(<[2-]) ] |
|
} |
|
|
|
|
|
|
|
|
|
|
|
if ! $($(<[1])-included) |
|
{ |
|
|
|
|
|
$(<[1])-included = TRUE |
|
|
|
|
|
|
|
_r = $($(<[1])RULES) |
|
|
|
if ! $(_r) |
|
{ |
|
_r = $(JAMRULES:R=$($(<[1]))) |
|
} |
|
|
|
|
|
|
|
include $(_r) |
|
} |
|
|
|
|
|
|
|
|
|
_s = [ FDirName $(<[2-]) ] |
|
SUBDIR = $(_s:R=$($(<[1]))) |
|
SUBDIR_TOKENS = $(<[2-]) |
|
|
|
|
|
|
|
|
|
|
|
|
|
SEARCH_SOURCE = $(SUBDIR) |
|
LOCATE_SOURCE = $(ALL_LOCATE_TARGET) $(SUBDIR) |
|
LOCATE_TARGET = $(ALL_LOCATE_TARGET) $(SUBDIR) |
|
SOURCE_GRIST = [ FGrist $(<[2-]) ] |
|
|
|
|
|
|
|
SUBDIRCCFLAGS = |
|
SUBDIRC++FLAGS = |
|
SUBDIRHDRS = |
|
} |
|
|
|
rule SubDirCcFlags |
|
{ |
|
SUBDIRCCFLAGS += $(<) |
|
} |
|
|
|
rule SubDirC++Flags |
|
{ |
|
SUBDIRC++FLAGS += $(<) |
|
} |
|
|
|
rule SubDirHdrs |
|
{ |
|
SUBDIRHDRS += $(<) |
|
} |
|
|
|
rule SubInclude |
|
{ |
|
local _s |
|
|
|
|
|
|
|
|
|
|
|
|
|
if ! $($(<[1])) |
|
{ |
|
EXIT Top level of source tree has not been set with $(<[1]) |
|
} |
|
|
|
_s = [ FDirName $(<[2-]) ] |
|
|
|
include $(JAMFILE:D=$(_s):R=$($(<[1]))) |
|
} |
|
|
|
rule Undefines |
|
{ |
|
UNDEFS on [ FAppendSuffix $(<) : $(SUFEXE) ] += $(UNDEFFLAG)$(>) |
|
} |
|
|
|
rule UserObject |
|
{ |
|
EXIT "Unknown suffix on" $(>) "- see UserObject rule in Jamfile(5)." |
|
} |
|
|
|
rule Yacc |
|
{ |
|
local _h |
|
|
|
_h = $(<:BS=.h) |
|
|
|
|
|
|
|
MakeLocate $(<) $(_h) : $(LOCATE_SOURCE) |
|
|
|
if $(YACC) |
|
{ |
|
DEPENDS $(<) $(_h) : $(>) |
|
Yacc1 $(<) $(_h) : $(>) |
|
YaccMv $(<) $(_h) : $(>) |
|
Clean clean : $(<) $(_h) |
|
} |
|
|
|
|
|
|
|
INCLUDES $(<) : $(_h) |
|
} |
|
|
|
|
|
|
|
|
|
|
|
rule FGrist |
|
{ |
|
|
|
|
|
local _g _i |
|
|
|
_g = $(<[1]) |
|
|
|
for _i in $(<[2-]) |
|
{ |
|
_g = $(_g)!$(_i) |
|
} |
|
|
|
return $(_g) |
|
} |
|
|
|
rule FGristFiles |
|
{ |
|
if ! $(SOURCE_GRIST) |
|
{ |
|
return $(<) |
|
} |
|
else |
|
{ |
|
return $(<:G=$(SOURCE_GRIST)) |
|
} |
|
} |
|
|
|
rule FGristSourceFiles |
|
{ |
|
|
|
|
|
|
|
|
|
|
|
|
|
if ! $(SOURCE_GRIST) |
|
{ |
|
return $(<) |
|
} |
|
else |
|
{ |
|
local _i _o |
|
|
|
for _i in $(<) |
|
{ |
|
switch $(_i) |
|
{ |
|
case *.h : _o += $(_i) |
|
case * : _o += $(_i:G=$(SOURCE_GRIST)) |
|
} |
|
} |
|
|
|
return $(_o) |
|
} |
|
} |
|
|
|
rule FConcat |
|
{ |
|
|
|
|
|
local _t _r |
|
|
|
$(_r) = $(<[1]) |
|
|
|
for _t in $(<[2-]) |
|
{ |
|
$(_r) = $(_r)$(_t) |
|
} |
|
|
|
return $(_r) |
|
} |
|
|
|
rule FSubDir |
|
{ |
|
local _i _d |
|
|
|
|
|
|
|
|
|
|
|
if ! $(<[1]) |
|
{ |
|
_d = $(DOT) |
|
} |
|
else |
|
{ |
|
_d = $(DOTDOT) |
|
|
|
for _i in $(<[2-]) |
|
{ |
|
_d = $(_d:R=$(DOTDOT)) |
|
} |
|
} |
|
|
|
return $(_d) |
|
} |
|
|
|
rule FDirName |
|
{ |
|
local _s _i |
|
|
|
|
|
|
|
if ! $(<) |
|
{ |
|
_s = $(DOT) |
|
} |
|
else if $(VMS) |
|
{ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
switch $(<[1]) |
|
{ |
|
case *:* : _s = $(<[1]) |
|
case \\[*\\] : _s = $(<[1]) |
|
case * : _s = [.$(<[1])] |
|
} |
|
|
|
for _i in [.$(<[2-])] |
|
{ |
|
_s = $(_i:R=$(_s)) |
|
} |
|
} |
|
else if $(MAC) |
|
{ |
|
_s = $(DOT) |
|
|
|
for _i in $(<) |
|
{ |
|
_s = $(_i:R=$(_s)) |
|
} |
|
} |
|
else |
|
{ |
|
_s = $(<[1]) |
|
|
|
for _i in $(<[2-]) |
|
{ |
|
_s = $(_i:R=$(_s)) |
|
} |
|
} |
|
|
|
return $(_s) |
|
} |
|
|
|
|
|
rule _makeCommon |
|
{ |
|
|
|
|
|
if $($(<)[1]) && $($(<)[1]) = $($(>)[1]) |
|
{ |
|
$(<) = $($(<)[2-]) |
|
$(>) = $($(>)[2-]) |
|
_makeCommon $(<) : $(>) |
|
} |
|
} |
|
|
|
|
|
rule FRelPath |
|
{ |
|
local _l _r |
|
|
|
|
|
|
|
_l = $(<) |
|
_r = $(>) |
|
|
|
_makeCommon _l : _r |
|
|
|
|
|
|
|
_l = [ FSubDir $(_l) ] |
|
_r = [ FDirName $(_r) ] |
|
|
|
|
|
|
|
|
|
|
|
if $(_r) = $(DOT) { |
|
return $(_l) |
|
} else { |
|
return $(_r:R=$(_l)) |
|
} |
|
} |
|
|
|
rule FAppendSuffix |
|
{ |
|
|
|
|
|
|
|
|
|
if $(>) |
|
{ |
|
local _i _o |
|
|
|
for _i in $(<) |
|
{ |
|
if $(_i:S) |
|
{ |
|
_o += $(_i) |
|
} |
|
else |
|
{ |
|
_o += $(_i:S=$(>)) |
|
} |
|
} |
|
return $(_o) |
|
} |
|
else |
|
{ |
|
return $(<) |
|
} |
|
} |
|
|
|
rule unmakeDir |
|
{ |
|
if $(>[1]:D) && $(>[1]:D) != $(>[1]) && $(>[1]:D) != \\\\ |
|
{ |
|
unmakeDir $(<) : $(>[1]:D) $(>[1]:BS) $(>[2-]) |
|
} |
|
else |
|
{ |
|
$(<) = $(>) |
|
} |
|
} |
|
|
|
|
|
rule FConvertToSlashes |
|
{ |
|
local _d, _s, _i |
|
|
|
unmakeDir _d : $(<) |
|
|
|
_s = $(_d[1]) |
|
for _i in $(_d[2-]) |
|
{ |
|
_s = $(_s)/$(_i) |
|
} |
|
return $(_s) |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
actions updated together piecemeal Archive |
|
{ |
|
$(AR) $(<) $(>) |
|
} |
|
|
|
actions As |
|
{ |
|
$(AS) $(ASFLAGS) -I$(HDRS) -o $(<) $(>) |
|
} |
|
|
|
actions C++ |
|
{ |
|
$(C++) -c $(C++FLAGS) $(OPTIM) -I$(HDRS) -o $(<) $(>) |
|
} |
|
|
|
actions Cc |
|
{ |
|
$(CC) -c $(CCFLAGS) $(OPTIM) -I$(HDRS) -o $(<) $(>) |
|
} |
|
|
|
actions Chgrp |
|
{ |
|
$(CHGRP) $(GROUP) $(<) |
|
} |
|
|
|
actions Chmod1 |
|
{ |
|
$(CHMOD) $(MODE) $(<) |
|
} |
|
|
|
actions Chown |
|
{ |
|
$(CHOWN) $(OWNER) $(<) |
|
} |
|
|
|
actions piecemeal together existing Clean |
|
{ |
|
$(RM) $(>) |
|
} |
|
|
|
actions File |
|
{ |
|
$(CP) $(>) $(<) |
|
} |
|
|
|
actions GenFile1 |
|
{ |
|
$(>[1]) $(<) $(>[2-]) |
|
} |
|
|
|
actions Fortran |
|
{ |
|
$(FORTRAN) $(FORTRANFLAGS) -o $(<) $(>) |
|
} |
|
|
|
actions HardLink |
|
{ |
|
$(RM) $(<) && $(LN) $(>) $(<) |
|
} |
|
|
|
actions Install |
|
{ |
|
$(CP) $(>) $(<) |
|
} |
|
|
|
actions Lex |
|
{ |
|
$(LEX) $(>) |
|
} |
|
|
|
actions LexMv |
|
{ |
|
$(MV) lex.yy.c $(<) |
|
} |
|
|
|
actions Link bind NEEDLIBS |
|
{ |
|
$(LINK) $(LINKFLAGS) -o $(<) $(UNDEFS) $(>) $(NEEDLIBS) $(LINKLIBS) |
|
} |
|
|
|
actions MkDir1 |
|
{ |
|
$(MKDIR) $(<) |
|
} |
|
|
|
actions together Ranlib |
|
{ |
|
$(RANLIB) $(<) |
|
} |
|
|
|
actions quietly updated piecemeal together RmTemps |
|
{ |
|
$(RM) $(>) |
|
} |
|
|
|
actions Shell |
|
{ |
|
$(AWK) ' |
|
NR == 1 { print "$(SHELLHEADER)" } |
|
NR == 1 && /^[#:]/ { next } |
|
/^##/ { next } |
|
{ print } |
|
' < $(>) > $(<) |
|
} |
|
|
|
actions Yacc1 |
|
{ |
|
$(YACC) $(YACCFLAGS) $(>) |
|
} |
|
|
|
actions YaccMv |
|
{ |
|
$(MV) $(YACCFILES).c $(<[1]) |
|
$(MV) $(YACCFILES).h $(<[2]) |
|
} |
|
|
|
|
|
|
|
|
|
|
|
if $(RELOCATE) |
|
{ |
|
actions C++ |
|
{ |
|
$(C++) -c $(C++FLAGS) $(OPTIM) -I$(HDRS) $(>) |
|
} |
|
|
|
actions Cc |
|
{ |
|
$(CC) -c $(CCFLAGS) $(OPTIM) -I$(HDRS) $(>) |
|
} |
|
|
|
actions ignore CcMv |
|
{ |
|
[ $(<) != $(>:BS=$(SUFOBJ)) ] && $(MV) $(>:BS=$(SUFOBJ)) $(<) |
|
} |
|
} |
|
|
|
|
|
|
|
|
|
|
|
if $(NOARUPDATE) |
|
{ |
|
actions Archive |
|
{ |
|
$(AR) $(<) $(>) |
|
} |
|
} |
|
|
|
|
|
|
|
|
|
|
|
if $(NT) |
|
{ |
|
if $(TOOLSET) = VISUALC || $(TOOLSET) = VC7 || $(TOOLSET) = INTELC |
|
{ |
|
actions updated together piecemeal Archive |
|
{ |
|
if exist $(<) set _$(<:B)_=$(<) |
|
$(AR) /out:$(<) %_$(<:B)_% $(>) |
|
} |
|
|
|
actions As |
|
{ |
|
$(AS) /Ml /p /v /w2 $(>) $(<) ,nul,nul |
|
} |
|
|
|
actions Cc |
|
{ |
|
$(CC) /c $(CCFLAGS) $(OPTIM) /Fo$(<) /I$(HDRS) /I$(STDHDRS) $(>) |
|
} |
|
|
|
actions C++ |
|
{ |
|
$(C++) /c $(C++FLAGS) $(OPTIM) /Fo$(<) /I$(HDRS) /I$(STDHDRS) /Tp$(>) |
|
} |
|
|
|
actions Link bind NEEDLIBS |
|
{ |
|
$(LINK) $(LINKFLAGS) /out:$(<) $(UNDEFS) $(>) $(NEEDLIBS) $(LINKLIBS) |
|
} |
|
} |
|
else if $(TOOLSET) = VISUALC16 |
|
{ |
|
actions updated together piecemeal Archive |
|
{ |
|
$(AR) $(<) -+$(>) |
|
} |
|
|
|
actions Cc |
|
{ |
|
$(CC) /c $(CCFLAGS) $(OPTIM) /Fo$(<) /I$(HDRS) $(>) |
|
} |
|
|
|
actions C++ |
|
{ |
|
$(C++) /c $(C++FLAGS) $(OPTIM) /Fo$(<) /I$(HDRS) /Tp$(>) |
|
} |
|
|
|
actions Link bind NEEDLIBS |
|
{ |
|
$(LINK) $(LINKFLAGS) /out:$(<) $(UNDEFS) $(>) $(NEEDLIBS) $(LINKLIBS) |
|
} |
|
} |
|
else if $(TOOLSET) = BORLANDC |
|
{ |
|
actions updated together piecemeal Archive |
|
{ |
|
$(AR) $(<) -+$(>) |
|
} |
|
|
|
actions Link bind NEEDLIBS |
|
{ |
|
$(LINK) -e$(<) $(LINKFLAGS) $(UNDEFS) -L$(LINKLIBS) $(NEEDLIBS) $(>) |
|
} |
|
|
|
actions C++ |
|
{ |
|
$(C++) -c $(C++FLAGS) $(OPTIM) -I$(HDRS) -o$(<) $(>) |
|
} |
|
|
|
actions Cc |
|
{ |
|
$(CC) -c $(CCFLAGS) $(OPTIM) -I$(HDRS) -o$(<) $(>) |
|
} |
|
|
|
} |
|
else if $(TOOLSET) = MINGW |
|
{ |
|
actions together piecemeal Archive |
|
{ |
|
$(AR) $(<) $(>:T) |
|
} |
|
|
|
actions Cc |
|
{ |
|
$(CC) -c $(CCFLAGS) $(OPTIM) -I$(HDRS) -o$(<) $(>) |
|
} |
|
|
|
actions C++ |
|
{ |
|
$(C++) -c $(C++FLAGS) $(OPTIM) -I$(HDRS) -o$(<) $(>) |
|
} |
|
} |
|
else if $(TOOLSET) = WATCOM |
|
{ |
|
actions together piecemeal Archive |
|
{ |
|
$(AR) $(<) +-$(>) |
|
} |
|
|
|
actions Cc |
|
{ |
|
$(CC) $(CCFLAGS) $(OPTIM) /Fo=$(<) /I$(HDRS) $(>) |
|
} |
|
|
|
actions C++ |
|
{ |
|
$(C++) $(C++FLAGS) $(OPTIM) /Fo=$(<) /I$(HDRS) $(>) |
|
} |
|
|
|
actions Link bind NEEDLIBS |
|
{ |
|
$(LINK) $(LINKFLAGS) /Fe=$(<) $(UNDEFS) $(>) $(NEEDLIBS) $(LINKLIBS) |
|
} |
|
|
|
actions Shell |
|
{ |
|
$(CP) $(>) $(<) |
|
} |
|
} |
|
else if $(TOOLSET) = LCC |
|
{ |
|
actions together piecemeal Archive |
|
{ |
|
$(AR) /out:$(<) $(>) |
|
} |
|
|
|
actions Cc |
|
{ |
|
$(CC) $(CCFLAGS) $(OPTIM) -Fo$(<) -I$(HDRS) $(>) |
|
} |
|
|
|
actions Link bind NEEDLIBS |
|
{ |
|
$(LINK) $(LINKFLAGS) -o $(<) $(UNDEFS) $(>) $(NEEDLIBS) $(LINKLIBS) |
|
} |
|
|
|
actions Shell |
|
{ |
|
$(CP) $(>) $(<) |
|
} |
|
} |
|
} |
|
|
|
|
|
|
|
|
|
|
|
else if $(OS2) |
|
{ |
|
if $(TOOLSET) = WATCOM |
|
{ |
|
actions together piecemeal Archive |
|
{ |
|
$(AR) $(<) +-$(>) |
|
} |
|
|
|
actions Cc |
|
{ |
|
$(CC) $(CCFLAGS) $(OPTIM) /Fo=$(<) /I$(HDRS) $(>) |
|
} |
|
|
|
actions C++ |
|
{ |
|
$(C++) $(C++FLAGS) $(OPTIM) /Fo=$(<) /I$(HDRS) $(>) |
|
} |
|
|
|
actions Link bind NEEDLIBS |
|
{ |
|
$(LINK) $(LINKFLAGS) /Fe=$(<) $(UNDEFS) $(>) $(NEEDLIBS) $(LINKLIBS) |
|
} |
|
|
|
actions Shell |
|
{ |
|
$(CP) $(>) $(<) |
|
} |
|
} |
|
else if $(TOOLSET) = EMX |
|
{ |
|
actions together piecemeal Archive |
|
{ |
|
$(AR) $(<) $(>:T) |
|
} |
|
|
|
actions Cc |
|
{ |
|
$(CC) -c $(CCFLAGS) $(OPTIM) -I$(HDRS) -o$(<) $(>) |
|
} |
|
|
|
actions C++ |
|
{ |
|
$(C++) -c $(C++FLAGS) $(OPTIM) -I$(HDRS) -o$(<) $(>) |
|
} |
|
} |
|
} |
|
|
|
|
|
|
|
|
|
|
|
else if $(VMS) |
|
{ |
|
actions updated together piecemeal Archive |
|
{ |
|
lib/replace $(<) $(>[1]) ,$(>[2-]) |
|
} |
|
|
|
actions Cc |
|
{ |
|
$(CC)/obj=$(<) $(CCFLAGS) $(OPTIM) $(SLASHINC) $(>) |
|
} |
|
|
|
actions C++ |
|
{ |
|
$(C++)/obj=$(<) $(C++FLAGS) $(OPTIM) $(SLASHINC) $(>) |
|
} |
|
|
|
actions piecemeal together existing Clean |
|
{ |
|
$(RM) $(>[1]) |
|
} |
|
|
|
actions together quietly CreLib |
|
{ |
|
if f$search("$(<)") .eqs. "" then lib/create $(<) |
|
} |
|
|
|
actions GenFile1 |
|
{ |
|
mcr $(>[1]) $(<) $(>[2-]) |
|
} |
|
|
|
actions Link bind NEEDLIBS |
|
{ |
|
$(LINK)/exe=$(<) $(LINKFLAGS) $(>[1]) ,$(>[2-]) ,$(NEEDLIBS)/lib ,$(LINKLIBS) |
|
} |
|
|
|
actions quietly updated piecemeal together RmTemps |
|
{ |
|
$(RM) $(>[1]) |
|
} |
|
|
|
actions Shell |
|
{ |
|
$(CP) $(>) $(<) |
|
} |
|
} |
|
|
|
|
|
|
|
|
|
|
|
else if $(MAC) |
|
{ |
|
actions together Archive |
|
{ |
|
$(LINK) -library -o $(<) $(>) |
|
} |
|
|
|
actions Cc |
|
{ |
|
set -e MWCincludes $(MACINC) |
|
$(CC) -o $(<) $(CCFLAGS) $(OPTIM) $(>) |
|
} |
|
|
|
actions C++ |
|
{ |
|
set -e MWCincludes $(MACINC) |
|
$(CC) -o $(<) $(C++FLAGS) $(OPTIM) $(>) |
|
} |
|
|
|
actions Link bind NEEDLIBS |
|
{ |
|
$(LINK) -o $(<) $(LINKFLAGS) $(>) $(NEEDLIBS) "$(LINKLIBS)" |
|
} |
|
} |
|
|
|
|
|
|
|
|
|
|
|
rule BULK { Bulk $(<) : $(>) |
|
rule FILE { File $(<) : $(>) |
|
rule HDRRULE { HdrRule $(<) : $(>) |
|
rule INSTALL { Install $(<) : $(>) |
|
rule LIBRARY { Library $(<) : $(>) |
|
rule LIBS { LinkLibraries $(<) : $(>) |
|
rule LINK { Link $(<) : $(>) |
|
rule MAIN { Main $(<) : $(>) |
|
rule SETUID { Setuid $(<) |
|
rule SHELL { Shell $(<) : $(>) |
|
rule UNDEFINES { Undefines $(<) : $(>) |
|
|
|
|
|
|
|
rule INSTALLBIN { InstallBin $(BINDIR) : $(<) |
|
rule INSTALLLIB { InstallLib $(LIBDIR) : $(<) |
|
rule INSTALLMAN { InstallMan $(MANDIR) : $(<) |
|
|
|
|
|
|
|
rule addDirName { $(<) += [ FDirName $(>) ] |
|
rule makeDirName { $(<) = [ FDirName $(>) ] |
|
rule makeGristedName { $(<) = [ FGristSourceFiles $(>) ] |
|
rule makeRelPath { $(<[1]) = [ FRelPath $(<[2-]) : $(>) ] |
|
rule makeSuffixed { $(<[1]) = [ FAppendSuffix $(>) : $(<[2]) ] |
|
|
|
|
|
|
|
|
|
|
|
{ |
|
if $(JAMFILE) { include $(JAMFILE) |
|
} |
|
|
|
} |
|
|