changed name of internal Jambase to "::Jambase"
[k8jam.git] / doc / ChangeLog
blob55a76ed82e19d411c149696b8dc3a71eeeacda34
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   [+] new built-in: [ Split str : delims ]
148       split `str` using `delims`
149       [ Split "a,b,c;d" : ",;" ] ==> a b c d