- # Jambase
- # $Id:$
-
- # This is a jambase that knows just enough to execute SubDir and
- # include the Jamrules
-
- # Allow base jamrules to require this file
- BHBJAM = true ;
-
- # other files
- JAMFILE default = Jamfile ;
- JAMRULES default = BhbJambase ;
-
- # Basic utility variables
- NEWLINE = "
- " ;
- SLASH = "/" ;
- DOT = "." ;
- DOTDOT = ".." ;
-
- rule SubDir
- {
- local r s ;
-
- #
- # SubDir TOP d1 [ ... ]
- #
- # This introduces a Jamfile that is part of a project tree
- # rooted at $(TOP). It (only once) includes the project-specific
- # rules file $(TOP)/CustomJambase and then sets search & locate stuff.
- #
- # If the variable $(TOPRULES) is set (where TOP is the first arg
- # to SubDir), that file is included instead of $(TOP)/CustomJambase.
- #
- # Unlike the original Jambase, this just includes the CustomJambase
- # everything else is up to UserSubDir
- #
-
- if ! $($(<[1])-defined)
- {
- if ! $(<[1])
- {
- EXIT SubDir syntax error ;
- }
-
- makeSubDir $(<[1]) : $(<[2-]) ;
-
- $(<[1])-defined = true ;
- }
-
- #
- # If $(TOP)/Jamrules hasn't been included, do so.
- #
-
- if ! $($(<[1])-included)
- {
- # Gated entry.
-
- $(<[1])-included = TRUE ;
-
- # File is $(TOPRULES) or $(TOP)/Jamrules.
-
- r = $($(<[1])RULES) ;
-
- if ! $(r)
- {
- r = $(JAMRULES:R=$($(<[1]))) ;
- }
-
- # Include it.
- include $(r) ;
- }
-
- UserSubDir $(<) ;
- }
-
- rule UserSubDir
- {
- # Empty Hook
- }
-
- # -------------
- # Utility rules
- # -------------
- #
- # From the original Jambase
-
- rule makeString
- {
- local _t ;
-
- $(<) = $(>[1]) ;
- for _t in $(>[2-])
- {
- $(<) = $($(<))$(_t) ;
- }
- }
-
- rule makeSubDir
- {
- local _i _d ;
-
- # If $(>) is the path to the current directory, compute the
- # path (using ../../ etc) back to that root directory.
- # Sets result in $(<)
-
- if ! $(>[1])
- {
- _d = $(DOT) ;
- }
- else
- {
- _d = $(DOTDOT) ;
-
- for _i in $(>[2-])
- {
- _d = $(_d:R=$(DOTDOT)) ;
- }
- }
-
- $(<) = $(_d) ;
- }
-
- rule addDirName
- {
- local _s _i ;
-
- # Turn individual elements in $(>) into a usable path.
- # Add result to $(<).
-
- if ! $(>)
- {
- _s = $(DOT) ;
- }
- else if $(VMS)
- {
- # This handles the following cases:
- # a -> [.a]
- # a b c -> [.a.b.c]
- # x: -> x:
- # x: a -> x:[a]
- # x:[a] b -> x:[a.b]
-
- 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)) ;
- }
- }
-
- $(<) += $(_s) ;
- }
-
- rule makeDirName
- {
- $(<) = ; addDirName $(<) : $(>) ;
- }
-
- rule makeGrist
- {
- local _g _i ;
-
- # Turn individual elements in $(>) into grist.
- # Return result in $(<)
-
- _g = $(>[1]) ;
-
- for _i in $(>[2-])
- {
- _g = $(_g)!$(_i) ;
- }
-
- $(<) = $(_g) ;
- }
-
- rule makeGristedName
- {
- local _i _o ;
-
- # Produce name with grist in it, if SOURCE_GRIST is set.
-
- if ! $(SOURCE_GRIST)
- {
- $(<) = $(>) ;
- }
- else
- {
- _o = ;
- for _i in $(>)
- {
- switch $(_i)
- {
- case *.h : _o += $(_i) ;
- case * : _o += $(_i:G=$(SOURCE_GRIST)) ;
- }
- }
- $(<) = $(_o) ;
- }
- }
-
- rule makeCommon
- {
- if $($(<)[1]) && $($(<)[1]) = $($(>)[1])
- {
- $(<) = $($(<)[2-]) ;
- $(>) = $($(>)[2-]) ;
- makeCommon $(<) : $(>) ;
- }
- }
-
- rule makeRelPath
- {
- local _l _r ;
-
- # first strip off common parts
-
- _l = $(<[2-]) ;
- _r = $(>) ;
-
- makeCommon _l : _r ;
-
- # now make path to root and path down
-
- makeSubDir _l : $(_l) ;
- makeDirName _r : $(_r) ;
-
- # Concatenate and save
-
- # XXX This should be better
-
- if $(_r) = $(DOT) {
- $(<[1]) = $(_l) ;
- } else {
- $(<[1]) = $(_r:R=$(_l)) ;
- }
- }
-
- rule makeSuffixed
- {
- # E.g., "makeSuffixed s_exe $(SUFEXE) : yacc lex foo.bat ;"
- # sets $(s_exe) to (yacc,lex,foo.bat) on Unix and
- # (yacc.exe,lex.exe,foo.bat) on NT.
-
- if $(<[2])
- {
- local _i ;
-
- $(<[1]) = ;
-
- for _i in $(>)
- {
- if $(_i:S)
- {
- $(<[1]) += $(_i) ;
- }
- else
- {
- $(<[1]) += $(_i:S=$(<[2])) ;
- }
- }
- }
- else
- {
- $(<[1]) = $(>) ;
- }
- }
-
- rule unmakeDir
- {
- if $(>[1]:D) && $(>[1]:D) != $(>[1]) && $(>[1]:D) != \\\\
- {
- unmakeDir $(<) : $(>[1]:D) $(>[1]:BS) $(>[2-]) ;
- }
- else
- {
- $(<) = $(>) ;
- }
- }
-
- # -------------------
- # Include the Jamfile
- # -------------------
-
- {
- if $(JAMFILE) { include $(JAMFILE) ; }
- }
-
# |
Change |
User |
Description |
Committed |
|
#1
|
632 |
matt_bruce |
initial check in of BhbJam submitted for approval on Jan-11-2001 |
24 years ago
|
|