more flags for Glob
[k8jam.git] / doc / ChangeLog
blobc9c69e3488e2c471001d0f8867d8f4433f77713b
1   [+] PWD/Pwd built-in added; usage:
2       pwd = [ PWD ] ;
3   [+] SORT/Sort built-in added; usage:
4       sorted = [ SORT $(list) ] ;
5   [+] COMMAND/Command built-in added; usage:
6       res = [ COMMAND shellcmd-list [[ : options ]] ];
7       options:
8         exit-status, exit-code:
9           return exit code as last list element
10         no-output:
11           don't return command output
12         no-trim:
13           don't trim command output;
14           default: trim left and right
15         no-trim-left:
16           don't left-trim command output
17         no-trim-right:
18           don't right-trim command output
19         status-first, code-first:
20           put exit code first
21         parse-output:
22           parse output as list (break on whitespaces -- <= ' ')
23         no-space-break:
24           don't break on spaces (' ') when 'parse-output' activated
25         no-tab-break:
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
29         no-cr-break:
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
36   [+] rule RemoveOpt
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
42   [+] rule profile
43       # profile "name" ;
44       # set compile flags for profile; works only for gcc/g++
45       # available profiles:
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
51       #  standard: -O2
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
102   [+] new built-ins:
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:
114         DEBUG = 1 : debug
115         OPT_SIZE = 1 : size
116         OPT_SPEED = 1 : speed
117         default: standard
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 ;
123   [+] rule pkg-config
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)
129       vars for invocation:
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" ; }
163         variable = "print" ;
164         $(variable)-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
193       DependsList all ;
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.
214   [+] Glob flags:
215         case-sensitive
216         case-insensitive
217         ignore-case
218         glob
219         regexp
220         plain
221         dirs-only
222         files-only
223         any