1 [+] PWD/Pwd built-in added; usage:
3 [+] SORT/Sort built-in added; usage:
4 sorted = [ SORT $(list) ] ;
5 [+] COMMAND/Command built-in added; usage:
6 res = [ COMMAND shellcmd-list [[ : options ]] ];
8 exit-status, exit-code:
9 return exit code as last list element
11 don't return command output
13 don't trim command output;
14 default: trim left and right
16 don't left-trim command output
18 don't right-trim command output
19 status-first, code-first:
22 parse output as list (break on whitespaces -- <= ' ')
24 don't break on spaces (' ') when 'parse-output' activated
26 don't break on tabs ('\t') when 'parse-output' activated
27 no-nl-break, no-lf-break:
28 don't break on LF ('\n') when 'parse-output' activated
30 don't break on CR ('\r') when 'parse-output' activated
31 [+] COMMAND/Command built-in synthax changed; new synthax:
32 res = [ COMMAND shellcmd-list [[ : options ]] ];
33 new options (added to common description)
34 [+] COMMAND/Command built-in now can parse command output
37 # VAR = [ RemoveOpt options-to-remove : options-list ] ;
38 # remove options from list
39 [+] rule RemoveOptWild
40 # VAR = [ RemoveOpt regexp-options-to-remove : options-list ] ;
41 # remove options from list with egrep-like regexps
44 # set compile flags for profile; works only for gcc/g++
46 # none, default: don't change
47 # empty: remove optimisation flags
48 # speed: optimise for speed and pIII
49 # size: optimise for size
50 # debug: don't optimize, add debug info
52 [+] rule ObjectNoAliasing
53 # ObjectNoAliasing filelist ;
54 # turn off aliasing optimization for specified files
55 # works only for gcc/g++
57 [*] MainC++ wasn't working properly
58 [*] XXXC++ variables changed to XXXC++ZZZ (MainC++ --> C++Main)
59 [+] LOCATE_BIN and ALL_LOCATE_BIN variables added (for Main and MainC++ targets)
60 so now one can do something like this:
61 ALL_LOCATE_TARGET = $(TOP)/build/obj ;
62 ALL_LOCATE_BIN = $(TOP)/build ;
63 and have a nice bunch of *.o files in build/obj and binary in build/
64 [+] new rule: lib-config
65 call $(1) --cflags and $(1) --libs (many libs provides such configurators)
66 add necessary flags to compiler and linker vars
67 return "tan" (non-empty string) if library is present
68 if $(2) != "" -- don't add flags, just check
69 [+] PATH_SEPARATOR variable added
70 [*] build process changed (.o and .a moved to subdir)
71 [+] allow []...] and [^]...] in globs (so ranges can include ']')
72 [+] :Q now quotes all special shell chars, not only '\'
73 [*] some regexprs was broken by tab expansion; fixed
74 [*] OPTIMC++ renamed to C++OPTIM
76 [+] LOCATE_LIB, LOCATE_LIBSO and ALL_LOCATE_LIB[SO] variables added (for Library and SharedLibrary targets)
77 so now one can do something like this:
78 ALL_LOCATE_TARGET = $(TOP)/build/obj ;
79 ALL_LOCATE_LIB = $(TOP)/build/liba ;
80 ALL_LOCATE_LIBSO = $(TOP)/build/libso ;
81 ALL_LOCATE_BIN = $(TOP)/build ;
82 and have a nice bunch of files in various dirs.
84 [*] JAMCMDARGS now set before parsing Jamfiles (and what sense was to set it after? %-)
85 [+] JAM_TARGETS variable added; scripts are free to modify it, so we can easy define targets from whithin
87 [+] SubIncludeOnce varname : TOP ... ;
88 will do SubInclude iff 'varname' is not set (and will set 'varname')
89 so one can include all necessary libraries in all necessary projects
91 [+] partial Objective C support:
92 ObjC-Main, std. set of OBJC* vars
93 OBJC_GNUSTEP_BASE_LIB = gnustep-base ;
94 OBJC_GNUSTEP_GUI_LIB = gnustep-gui ;
95 rules: ObjCUseGNUstepBase, ObjCUseGNUstepGui, ObjCUseGNUstep
97 [+] 'lib-config-ex' rule:
98 lib-config-ex "command" : "var-name-to-modify"
99 "var-name-to-modify" can be omited;
100 rule returs value of command
103 Echo-n: same as Echo, but does not writes '\n'
104 O-Flush: flush standard output (for Echo-n)
105 [+] added rules: LinkFlagsOn, C++LinkFlagsOn, ObjCLinkFlagsOn
106 same as Object*Flags, but for linker flags
107 we need this due to 'gristing' in multidir builds
109 [+] new variable: JAM_FORCE_GCC_OPTIONS
110 set it to override GCC detection
112 [+] rule set-profile:
113 selects 'debug', 'standard', 'speed' or 'size' profile according to vars:
116 OPT_SPEED = 1 : speed
119 [+] rule set-default-subdir-locates (sets my defaults for ALL_LOCATE_XXX: _build/, etc)
121 [+] alias for set-default-subdir-locates: set-default-target-locations ;
125 [+] jam now correctly creates dirs for files like 'dir/source'
126 [+] alias for set-default-subdir-locates: set-default-locations ;
128 [+] added acions for WINDOZE=1 (my own way to cross-build windoze soft with wine and mingw)
130 WINE -- wine command; default is "wine"
131 MGPATH -- path to mingw bin dir; default is "c:\mingw\bin\" (note the last '\')
132 MGCC -- mingw gcc compiler name; default is "mingw32-gcc.exe";
133 MG -- mingw g++ compiler name; default is "mingw32-g++.exe -static-libgcc"
134 vars for 'windoze-fix' rule (this rule should be invoked in Jamrules; it is harmless to
135 invoke it for any build scheme):
136 WINDOZE_THREADS -- if not empty, add "-mthreads"
137 WINSUBSYS -- either 'console' or 'windows'; default is 'console'
138 WINLIBS -- list of windoze libraries to add; default is '-lkernel32'
140 [!] WARNING! COMPATIBILITY BREAKING CHANGE!
141 [*] old SubInclude rule renamed to SubIncludeMany
142 [*] new SubInclude rule works as SubIncludeOnce (autogenerates guard var)
144 [+] new built-in: [ ExprI1 num0 op num1 ]
145 integer math; understands 5 standard ops ('%' as C '%')
146 [ ExprI1 40 + 2 ] ==> "42"
147 it also understands "<", "<=", ">", ">=", "=" and "!="
148 [+] new built-in: [ Split str : delims ]
149 split `str` using `delims`
150 [ Split "a,b,c;d" : ",;" ] ==> a b c d
151 if `delims` is not specified, split string to chars
153 [+] lexer now needs less spaces (and sometimes more quoting)
154 [+] added header caching (when using set-default-locations rule)
156 [+] new build-in: [ NormPath pathstr ]
157 it will add 'pwd' if path is not absolute and will try to resolve some '.' and '..'
158 (only leading '..' though).
159 it can be used in SubDir replacement to automate dir building
161 [+] added 'rule name expansion':
162 rule print-foo { Echo "foo" ; }
166 [+] added default 'help' and 'push' targets
167 redefine actions AShowHelp and AGitPush in Jamrules to use the correspoinding target
169 [+] added help-profile target
171 [+] new variables: CFLAGS.all, OPTIM.all, LINKFLAGS.all, LINKLIBS.all
172 profile now sets *.all flags
174 [+] K8JAM-PROGRESS-TIME-DELTA variable (float, seconds between progress/time indicator)
176 [+] regexp engine now undestands some character classes (like :space:) and non-greedy ops
178 [+] call 'check-setup-windoze' rule to enable WINDOZE=1 builds
179 [+] setup-windoze rule will setup windoze build regardless of WINDOZE=1
180 [+] call use-mingw32 rule to use i686-pc-mingw32 crosscompiler instead of wine
181 [+] call windoze-fix after setting WINDOZE_THREADS, WINLIBS and WINSUBSYS
183 [+] sys-has-command cmd -- perform `which`, return "tan" or ""
185 [+] new built-in: ListLength
187 [+] `PreUserObject` rule
188 this rule will be called before `Object` rule decides how to build something;
189 the calling convention is the same as for `UserObject`, but `PreUserObject`
190 should return non-empty string if it wants to bypass default generator rules.
192 [+] documentation: built-in DependsList
194 returns a list of child dependencies for a given target
196 [+] new built-ins: HaveRule, HaveActions
197 HaveRule rulename [rulename...] [ : glob/regexp case-insensitive ignore-case ]
198 HaveActions rulename [rulename...] [ : glob/regexp case-insensitive ignore-case ]
199 returns non-empty string if all specified rules or actions are defined
200 note that we can have rule without actions and actions without rule
201 specify `glob` option to treat names as shell-like globs
202 specify `regexp` option to treat names as regexps
203 specify `case-insensitive` option to ignore case
205 [+] new built-in: ForceFile
206 reverts NoFile effect
208 [+] added flags to Glob and Match: now we can use globs and regexps, and do
209 that ignoring the case.
211 [+] new rule: FileExists fname [fname...] ;
212 returns non-empty string if all files exists; understand pathes.