cosmetix
[k8jam.git] / defaults / misc / Jambase.misc
blobccfb75eeb2b0443ece25becd2e381dbd05055ce7
1 # This program is free software: you can redistribute it and/or modify
2 # it under the terms of the GNU General Public License as published by
3 # the Free Software Foundation, either version 3 of the License, or
4 # (at your option) any later version.
6 # This program is distributed in the hope that it will be useful,
7 # but WITHOUT ANY WARRANTY; without even the implied warranty of
8 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
9 # GNU General Public License for more details.
11 # You should have received a copy of the GNU General Public License
12 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
14 # miscelaneous helper rules
17 # Utility rules; no side effects on these
20 # /FGrist path to file ;
22 # Returns a single string that is used as grist
24 rule FGrist {
25   return $(<:J=!) ;
29 rule FGristFiles {
30   return $(<:G=$(SOURCE_GRIST:E)) ;
34 ## LOCAL CHANGE: OPT_HEADER_CACHE_EXT
35 # With header caching, there is no performance penalty to gristing
36 # header files. It is also not correct to assume that header
37 # files have global visibility.
39 # So FGristSourceFiles is the same as FGristFiles
40 #rule FGristSourceFiles
43 rule FReverse {
44   if $(1) { return [ FReverse $(1[2-]) ] $(1[1]) ; }
48 rule FSubDir {
49   # If $(>) is the path to the current directory, compute the
50   # path (using ../../ etc) back to that root directory.
51   # Sets result in $(<)
52   if ! $(<[1]) {
53     return $(DOT) ;
54   } else {
55     local _i _d ;
57     _d = $(DOTDOT) ;
58     for _i in $(<[2-]) { _d = $(_d:R=$(DOTDOT)) ; }
59     return $(_d) ;
60   }
64 rule FStripCommon {
65   # FStripCommon v1 : v2 ;
67   # Strip common initial elements of variables v1 and v2.
68   # Modifies the variable values themselves.
69   if $($(<)[1]) && $($(<)[1]) = $($(>)[1]) {
70     $(<) = $($(<)[2-]) ;
71     $(>) = $($(>)[2-]) ;
72     FStripCommon $(<) : $(>) ;
73   }
77 rule FRelPath {
78   local _l _r ;
80   # first strip off common parts
81   _l = $(<) ;
82   _r = $(>) ;
83   FStripCommon _l : _r ;
85   # now make path to root and path down
86   _l = [ FSubDir $(_l) ] ;
87   _r = [ FDirName $(_r) ] ;
89   # Concatenate and save
90   # XXX This should be better
91   if $(_r) = $(DOT) { return $(_l) ; } else { return $(_r:R=$(_l)) ; }
95 rule FAppendSuffix {
96   # E.g., "FAppendSuffix yacc lex foo.bat : $(SUFEXE) ;"
97   # returns (yacc,lex,foo.bat) on Unix and
98   # (yacc.exe,lex.exe,foo.bat) on NT.
99   if $(>) {
100     local _i _o ;
102     for _i in $(<) {
103       if $(_i:S) { _o += $(_i) ; } else { _o += $(_i:S=$(>)) ; }
104     }
105     return $(_o) ;
106   } else {
107     return $(<) ;
108   }
113 # Operating system specific utility rules
114 # First, the (generic) UNIX versions
117 rule FQuote { return '\"$(<)\"' ; }
118 rule FDefines { return -D$(<) ; }
119 rule FIncludes { return -I$(<) ; }
121 rule FDirName {
122   # Turn individual elements in $(<) into a usable path.
123   local _i ;
124   local _s = $(DOT) ;
126   for _i in $(<) { _s = $(_i:R=$(_s)) ; }
127   return $(_s) ;
131 if $(NT) && $(JAM_TOOLSET) != MINGW && $(JAM_TOOLSET) != LCC {
132   rule FDefines { return /D$(<) ; }
133   rule FIncludes { return /I$(<) ; }
137 rule sys-have-command {
138   if [ Command "which $(1:Q) 2>/dev/null 1>&2" ] {
139     return ;
140   } else {
141     return "tan" ;
142   }
146 rule Undefines {
147   UNDEFS on [ FAppendSuffix $(<) : $(SUFEXE) ] += $(UNDEFFLAG)$(>) ;
151 rule IsGCC {
152   if ( "gcc" in $(CC) ) || ( $(JAM_TOOLSET) = MINGW ) { return "tan"; }
153   return ;
157 rule IsG++ {
158   if ( "gcc" in $(C++) ) || ( $(JAM_TOOLSET) = MINGW ) { return "tan"; }
159   return ;
163 . Jambase.misc.fsys
164 . Jambase.misc.opts