2
0
mirror of https://github.com/boostorg/build.git synced 2026-02-15 00:52:16 +00:00
Added missing jobs; marked others done.
allyourbase.jam
   Fixed split and split-path for Unix
boost-base.jam
   Fixed the Run action for Windows
gcc-tools.jam intel-win32-tools.jam kcc-tools.jam metrowerks-tools.jam msvc-tools.jam
   Removed UNDEFS from link line, moved NEEDLIBS to end
unit-tests.jam
   Added tests splitpath tests for rooted Unix paths
jam_src/make1.c
   NOCARE targets with build actions now don't cause the parent to fail when they fail.
build_system.htm
   Documented NOCARE enhancements


[SVN r11463]
This commit is contained in:
Dave Abrahams
2001-10-29 18:23:16 +00:00
parent 327283168a
commit cbca50ad17
22 changed files with 126 additions and 56 deletions

View File

@@ -7,6 +7,17 @@ to its suitability for any purpose.
Boost Build system TODO
===== ===== ====== ====
DONE * Fix split-path bug which unroots paths on Unix
DONE * move NEEDLIBS to end of link line
* Fix bug with not found Python scripts
* $(REDIRECT) for toolset invocations:
Unix: > filename 2>&1 -- puts stdout && stderr in same file
* add "|| exit $?" for unix to get it to exit for multi-line test commands.
* Make it possible to qualify dependencies just like requirements.
* consider eliminating the need for <*>
@@ -15,12 +26,12 @@ Boost Build system TODO
* Add support for invoking debuggers from within the build system.
* Fix the subinclude problem with project-wide variable settings (e.g.
DONE * Fix the subinclude problem with project-wide variable settings (e.g.
BOOST_ROOT) that Beman pointed out to me.
* Move test target rules from status/Jamfile into boost-base.jam
* Add requested test targets. I think we need at least the following
SORTA DONE * Add requested test targets. I think we need at least the following
capability:
1. The ability to run any built executable
2. Two categories of test targets (call them "test" and "full-test") which
@@ -33,9 +44,9 @@ needs to be updated by running the executable with stdout redirected to the
* Add examples directory back into CVS
* Support for KCC
DONE * Support for KCC
* Specific support for GCC-3
DONE * Specific support for GCC-3
* Eliminate the need for intermediate dispatching rules (e.g. C++-action) in
each toolset.
@@ -69,7 +80,7 @@ Implement <sysinclude> feature for separately searching #include <...> paths?
search algorithm.
Clean up documentation
describe gristing
DONE describe gristing
revise free/path feature definition
Add a hook function to allow output directory customization that some people
@@ -77,12 +88,10 @@ want (instead of subdirectories, string together short names with '-').
Platform support:
Unix paths on Mac/VMS
Integrate Win95/98/ME support
DONE Integrate Win95/98/ME support
Since the above require modification to Jam compiled source, getting the
code into the Perforce public depot would be good at this point.
Compile allyourbase/boost-base.jam into Jam itself.
DONE (something better) Compile allyourbase/boost-base.jam into Jam itself.
It might be best to review differences between allyourbase.jam and Jambase,
and arrange the new Jambase to be a superset of the perforce Jambase so that
a boost-compiled Jam can be used on standard Jambase projects without
@@ -99,9 +108,9 @@ Testing
MacOS
Additional toolset descriptions
Kai (needs refurbishment)
Intel
Comeau
DONE Kai (needs refurbishment)
DONE, but needs rework Intel
DONE(windows) Comeau
...
Better support for single-valued free features. GCC needs a default
@@ -129,12 +138,12 @@ Implement some test tools:
=== FTJam core requests ===
In debugging output, indirect rule invocations should reflect the rule name
DONE In debugging output, indirect rule invocations should reflect the rule name
being invoked.
Fix modulus on nesting in debug output, so my emacs stepping tools don't get
DONE Fix modulus on nesting in debug output, so my emacs stepping tools don't get
confused.
Expand MAXLINE for NT, possibly as described by Chris Antos.
DONE-ish Expand MAXLINE for NT, possibly as described by Chris Antos.
Implement a way to invert the result of a rule, so that failure becomes success.
DONE Implement a way to invert the result of a rule, so that failure becomes success.

View File

@@ -1387,13 +1387,20 @@ if $(JAM_VERSION[1]) >= 03 {
SEARCH on new-split.jam = $(BOOST_BUILD_PATH) ;
include new-split.jam ; # this is temporary.
rule split-path
{
return [ SUBST $(<[1]) "^([/$(SLASH)]+).*" $1 ] # rooting slash(es), if any
[ split $(<) "[/$(SLASH)]" ] # the rest.
;
}
} else {
rule split # string pattern
{
local source = $(<[1]) ;
local divider = $(<[2]) ;
local pattern = "(.*)("$(divider)")(.*)" ;
local pattern = "^(.*)("$(divider)")(.*)" ;
# SUBST rule is weird. When there's no match it returns the original string.
local match = [ SUBST $(source) $(pattern) $1$2$3xxx ] ;
@@ -1409,12 +1416,18 @@ rule split # string pattern
}
}
}
# simpler reimplementation of split-path for boost
rule split-path
{
return [ split $(<) "[/$(SLASH)]" ] ;
local unmatched = [ SUBST $(<[1]) "^([/$(SLASH)]+).*" $2 ] ;
local root ;
if ! $(unmatched)
{
root = [ SUBST $(<[1]) "^([/$(SLASH)]+).*" $1 ] ;
}
return $(root) [ split $(<) "[/$(SLASH)]" ]
;
}
}
# dwa 6/4/01 - added for boost

View File

@@ -164,7 +164,8 @@ RUN_PATH ?= $(PATH) ;
# A simple action to run an executable target
actions Run
{
$(SHELL_EXPORT)PATH=$(RUN_PATH)
$(SHELL_SET)PATH=$(RUN_PATH)
$(SHELL_EXPORT)PATH
$(<)
}

View File

@@ -143,6 +143,7 @@
<li><a href="#negative_indexing">Negative Indexing</a>
<li><a href="#BINDRULE">Target Binding Detection</a>
<li><a href="#FAIL_EXPECTED">Return Code Inversion</a>
<li><a href="#NOCARE">Ignoring Return Codes</a>
<li><a href="#SUBST_rule">The <tt>SUBST</tt> Rule</a>
<li><a href="#JAM_VERSION">The <tt>JAM_VERSION</tt> global variable</a>
<li>
@@ -1608,6 +1609,14 @@ rule bind-rule ( target : path )
if it fails, building of dependent targets continues as though it
succeeded. If it succeeds, dependent targets are skipped.
<h4><a name="NOCARE">Ignoring Return Codes</a></h4>
<p>Perforce Jam suppplied a <tt>NOCARE</tt> rule which is typically used
for header files to indicate that if they are not found, the dependent
targets should be built anyway. Boost Jam extends <tt>NOCARE</tt> to apply
to targets with build actions: if their build actions exit with a nonzero
return code, dependent targets will still be built.
<h4><a name="SUBST_rule">The <tt>SUBST</tt> Rule</a></h4>
<p>The behavior of the <tt>SUBST</tt> rule for regular-expression matching

View File

@@ -72,7 +72,7 @@ rule Link-action
# for gcc, we repeat all libraries so that dependencies are always resolved
actions gcc-Link-action bind NEEDLIBS
{
$(GCC_BIN_DIRECTORY)g++ $(IMPLIB_COMMAND)$(<[2]) $(LINKFLAGS) -o "$(<[1])" -L$(LIBPATH) -L$(STDLIBPATH) "$(>)" "$(NEEDLIBS)" "$(NEEDLIBS)" -l$(FINDLIBS)
$(GCC_BIN_DIRECTORY)g++ $(IMPLIB_COMMAND)$(<[2]) $(LINKFLAGS) -o "$(<[1])" -L$(LIBPATH) -L$(STDLIBPATH) "$(>)" -l$(FINDLIBS) "$(NEEDLIBS)" "$(NEEDLIBS)"
}
# older actions

View File

@@ -59,7 +59,7 @@ rule Link-action
actions intel-win32-Link-action bind NEEDLIBS
{
$(INTEL_TOOL_PATH)xilink /nologo $(LINKFLAGS) /PDB:"$(<[1]:S=.pdb)" /out:"$(<[1])" $(UNDEFS) /LIBPATH:$(LIBPATH) /LIBPATH:$(STDLIBPATH) $(NEEDLIBS) "$(>)"
$(INTEL_TOOL_PATH)xilink /nologo $(LINKFLAGS) /PDB:"$(<[1]:S=.pdb)" /out:"$(<[1])" $(UNDEFS) /LIBPATH:$(LIBPATH) /LIBPATH:$(STDLIBPATH) "$(NEEDLIBS)" "$(>)"
}
#### Cc #####

View File

@@ -19,7 +19,7 @@ rule Link-action
actions kcc-Link-action bind NEEDLIBS
{
$(kcc.bin-directory)KCC $(LINKFLAGS) -o "$(<)" $(UNDEFS) -L$(STDLIBPATH) $(NEEDLIBS) "$(>)"
$(kcc.bin-directory)KCC $(LINKFLAGS) -o "$(<)" -L$(STDLIBPATH) "$(>)" NEEDLIBS
}
#### Cc #####

View File

@@ -80,7 +80,7 @@ actions metrowerks-Link-action bind NEEDLIBS
{
$(METROWERKS_SETUP)
$(METROWERKS_LINK_SETUP)$(STDLIBS)
mwld -export dllexport -nowraplines $(LINKFLAGS) -L$(LIBPATH) -L$(STDLIBPATH) $(IMPLIB_COMMAND)"$(<[2])" -o "$(<[1])" $(UNDEFS) $(NEEDLIBS) "$(>)" -l$(FINDLIBS)
mwld -export dllexport -nowraplines $(LINKFLAGS) -L$(LIBPATH) -L$(STDLIBPATH) $(IMPLIB_COMMAND)"$(<[2])" -o "$(<[1])" "$(NEEDLIBS)" "$(>)" -l$(FINDLIBS)
}
#### Cc #####

View File

@@ -57,7 +57,7 @@ rule Link-action
actions msvc-Link-action bind NEEDLIBS
{
$(MSVC_TOOL_PATH)link /nologo $(LINKFLAGS) /PDB:"$(<[1]:S=.pdb)" /out:"$(<[1])" /LIBPATH:$(LIBPATH) /LIBPATH:$(STDLIBPATH) $(NEEDLIBS) "$(>)"
$(MSVC_TOOL_PATH)link /nologo $(LINKFLAGS) /PDB:"$(<[1]:S=.pdb)" /out:"$(<[1])" /LIBPATH:$(LIBPATH) /LIBPATH:$(STDLIBPATH) "$(NEEDLIBS)" "$(>)"
}
#### Cc #####

View File

@@ -8,7 +8,7 @@ rule split ( string separator )
while $(s)
{
local match = [ SUBST $(s) (.*)$(separator)(.*) $1 $2 ] ;
local match = [ SUBST $(s) ^(.*)$(separator)(.*) $1 $2 ] ;
local tail = $(match[2]) ;
tail ?= $(s) ;

View File

@@ -7,6 +7,7 @@
# assert_equal a : b
#
# exits with an assertion failure if a != b
ECHO running unit tests... ;
rule assert_equal
{
if $(<) != $(>)
@@ -75,6 +76,7 @@ assert_equal [ is-subset a b c : c a b d ] : true ;
assert_equal [ is-subset a b z : c a b d ] : ;
# split-path
assert_equal [ split-path /a/b/c ] : / a b c ;
assert_equal [ split-path b/c.d/.f/g./h.i ] : b c.d .f g. h.i ;
assert_equal [ split-path <a>b/c/<d>e ] : <a>b c <d>e ;
assert_equal [ split-path <a>/<d>/<e> ] : <a> <d> <e> ;
@@ -267,3 +269,4 @@ assert_equal [ strip-initial a b c : a b d e f g ] : a b d e f g ;
assert_equal [ strip-initial a b c : b d e f g ] : b d e f g ;
assert_equal [ strip-initial a b c : ] : ;
ECHO unit tests complete. ;

View File

@@ -7,6 +7,17 @@ to its suitability for any purpose.
Boost Build system TODO
===== ===== ====== ====
DONE * Fix split-path bug which unroots paths on Unix
DONE * move NEEDLIBS to end of link line
* Fix bug with not found Python scripts
* $(REDIRECT) for toolset invocations:
Unix: > filename 2>&1 -- puts stdout && stderr in same file
* add "|| exit $?" for unix to get it to exit for multi-line test commands.
* Make it possible to qualify dependencies just like requirements.
* consider eliminating the need for <*>
@@ -15,12 +26,12 @@ Boost Build system TODO
* Add support for invoking debuggers from within the build system.
* Fix the subinclude problem with project-wide variable settings (e.g.
DONE * Fix the subinclude problem with project-wide variable settings (e.g.
BOOST_ROOT) that Beman pointed out to me.
* Move test target rules from status/Jamfile into boost-base.jam
* Add requested test targets. I think we need at least the following
SORTA DONE * Add requested test targets. I think we need at least the following
capability:
1. The ability to run any built executable
2. Two categories of test targets (call them "test" and "full-test") which
@@ -33,9 +44,9 @@ needs to be updated by running the executable with stdout redirected to the
* Add examples directory back into CVS
* Support for KCC
DONE * Support for KCC
* Specific support for GCC-3
DONE * Specific support for GCC-3
* Eliminate the need for intermediate dispatching rules (e.g. C++-action) in
each toolset.
@@ -69,7 +80,7 @@ Implement <sysinclude> feature for separately searching #include <...> paths?
search algorithm.
Clean up documentation
describe gristing
DONE describe gristing
revise free/path feature definition
Add a hook function to allow output directory customization that some people
@@ -77,12 +88,10 @@ want (instead of subdirectories, string together short names with '-').
Platform support:
Unix paths on Mac/VMS
Integrate Win95/98/ME support
DONE Integrate Win95/98/ME support
Since the above require modification to Jam compiled source, getting the
code into the Perforce public depot would be good at this point.
Compile allyourbase/boost-base.jam into Jam itself.
DONE (something better) Compile allyourbase/boost-base.jam into Jam itself.
It might be best to review differences between allyourbase.jam and Jambase,
and arrange the new Jambase to be a superset of the perforce Jambase so that
a boost-compiled Jam can be used on standard Jambase projects without
@@ -99,9 +108,9 @@ Testing
MacOS
Additional toolset descriptions
Kai (needs refurbishment)
Intel
Comeau
DONE Kai (needs refurbishment)
DONE, but needs rework Intel
DONE(windows) Comeau
...
Better support for single-valued free features. GCC needs a default
@@ -129,12 +138,12 @@ Implement some test tools:
=== FTJam core requests ===
In debugging output, indirect rule invocations should reflect the rule name
DONE In debugging output, indirect rule invocations should reflect the rule name
being invoked.
Fix modulus on nesting in debug output, so my emacs stepping tools don't get
DONE Fix modulus on nesting in debug output, so my emacs stepping tools don't get
confused.
Expand MAXLINE for NT, possibly as described by Chris Antos.
DONE-ish Expand MAXLINE for NT, possibly as described by Chris Antos.
Implement a way to invert the result of a rule, so that failure becomes success.
DONE Implement a way to invert the result of a rule, so that failure becomes success.

View File

@@ -1387,13 +1387,20 @@ if $(JAM_VERSION[1]) >= 03 {
SEARCH on new-split.jam = $(BOOST_BUILD_PATH) ;
include new-split.jam ; # this is temporary.
rule split-path
{
return [ SUBST $(<[1]) "^([/$(SLASH)]+).*" $1 ] # rooting slash(es), if any
[ split $(<) "[/$(SLASH)]" ] # the rest.
;
}
} else {
rule split # string pattern
{
local source = $(<[1]) ;
local divider = $(<[2]) ;
local pattern = "(.*)("$(divider)")(.*)" ;
local pattern = "^(.*)("$(divider)")(.*)" ;
# SUBST rule is weird. When there's no match it returns the original string.
local match = [ SUBST $(source) $(pattern) $1$2$3xxx ] ;
@@ -1409,12 +1416,18 @@ rule split # string pattern
}
}
}
# simpler reimplementation of split-path for boost
rule split-path
{
return [ split $(<) "[/$(SLASH)]" ] ;
local unmatched = [ SUBST $(<[1]) "^([/$(SLASH)]+).*" $2 ] ;
local root ;
if ! $(unmatched)
{
root = [ SUBST $(<[1]) "^([/$(SLASH)]+).*" $1 ] ;
}
return $(root) [ split $(<) "[/$(SLASH)]" ]
;
}
}
# dwa 6/4/01 - added for boost

View File

@@ -164,7 +164,8 @@ RUN_PATH ?= $(PATH) ;
# A simple action to run an executable target
actions Run
{
$(SHELL_EXPORT)PATH=$(RUN_PATH)
$(SHELL_SET)PATH=$(RUN_PATH)
$(SHELL_EXPORT)PATH
$(<)
}

View File

@@ -143,6 +143,7 @@
<li><a href="#negative_indexing">Negative Indexing</a>
<li><a href="#BINDRULE">Target Binding Detection</a>
<li><a href="#FAIL_EXPECTED">Return Code Inversion</a>
<li><a href="#NOCARE">Ignoring Return Codes</a>
<li><a href="#SUBST_rule">The <tt>SUBST</tt> Rule</a>
<li><a href="#JAM_VERSION">The <tt>JAM_VERSION</tt> global variable</a>
<li>
@@ -1608,6 +1609,14 @@ rule bind-rule ( target : path )
if it fails, building of dependent targets continues as though it
succeeded. If it succeeds, dependent targets are skipped.
<h4><a name="NOCARE">Ignoring Return Codes</a></h4>
<p>Perforce Jam suppplied a <tt>NOCARE</tt> rule which is typically used
for header files to indicate that if they are not found, the dependent
targets should be built anyway. Boost Jam extends <tt>NOCARE</tt> to apply
to targets with build actions: if their build actions exit with a nonzero
return code, dependent targets will still be built.
<h4><a name="SUBST_rule">The <tt>SUBST</tt> Rule</a></h4>
<p>The behavior of the <tt>SUBST</tt> rule for regular-expression matching

View File

@@ -72,7 +72,7 @@ rule Link-action
# for gcc, we repeat all libraries so that dependencies are always resolved
actions gcc-Link-action bind NEEDLIBS
{
$(GCC_BIN_DIRECTORY)g++ $(IMPLIB_COMMAND)$(<[2]) $(LINKFLAGS) -o "$(<[1])" -L$(LIBPATH) -L$(STDLIBPATH) "$(>)" "$(NEEDLIBS)" "$(NEEDLIBS)" -l$(FINDLIBS)
$(GCC_BIN_DIRECTORY)g++ $(IMPLIB_COMMAND)$(<[2]) $(LINKFLAGS) -o "$(<[1])" -L$(LIBPATH) -L$(STDLIBPATH) "$(>)" -l$(FINDLIBS) "$(NEEDLIBS)" "$(NEEDLIBS)"
}
# older actions

View File

@@ -59,7 +59,7 @@ rule Link-action
actions intel-win32-Link-action bind NEEDLIBS
{
$(INTEL_TOOL_PATH)xilink /nologo $(LINKFLAGS) /PDB:"$(<[1]:S=.pdb)" /out:"$(<[1])" $(UNDEFS) /LIBPATH:$(LIBPATH) /LIBPATH:$(STDLIBPATH) $(NEEDLIBS) "$(>)"
$(INTEL_TOOL_PATH)xilink /nologo $(LINKFLAGS) /PDB:"$(<[1]:S=.pdb)" /out:"$(<[1])" $(UNDEFS) /LIBPATH:$(LIBPATH) /LIBPATH:$(STDLIBPATH) "$(NEEDLIBS)" "$(>)"
}
#### Cc #####

View File

@@ -19,7 +19,7 @@ rule Link-action
actions kcc-Link-action bind NEEDLIBS
{
$(kcc.bin-directory)KCC $(LINKFLAGS) -o "$(<)" $(UNDEFS) -L$(STDLIBPATH) $(NEEDLIBS) "$(>)"
$(kcc.bin-directory)KCC $(LINKFLAGS) -o "$(<)" -L$(STDLIBPATH) "$(>)" NEEDLIBS
}
#### Cc #####

View File

@@ -80,7 +80,7 @@ actions metrowerks-Link-action bind NEEDLIBS
{
$(METROWERKS_SETUP)
$(METROWERKS_LINK_SETUP)$(STDLIBS)
mwld -export dllexport -nowraplines $(LINKFLAGS) -L$(LIBPATH) -L$(STDLIBPATH) $(IMPLIB_COMMAND)"$(<[2])" -o "$(<[1])" $(UNDEFS) $(NEEDLIBS) "$(>)" -l$(FINDLIBS)
mwld -export dllexport -nowraplines $(LINKFLAGS) -L$(LIBPATH) -L$(STDLIBPATH) $(IMPLIB_COMMAND)"$(<[2])" -o "$(<[1])" "$(NEEDLIBS)" "$(>)" -l$(FINDLIBS)
}
#### Cc #####

View File

@@ -57,7 +57,7 @@ rule Link-action
actions msvc-Link-action bind NEEDLIBS
{
$(MSVC_TOOL_PATH)link /nologo $(LINKFLAGS) /PDB:"$(<[1]:S=.pdb)" /out:"$(<[1])" /LIBPATH:$(LIBPATH) /LIBPATH:$(STDLIBPATH) $(NEEDLIBS) "$(>)"
$(MSVC_TOOL_PATH)link /nologo $(LINKFLAGS) /PDB:"$(<[1]:S=.pdb)" /out:"$(<[1])" /LIBPATH:$(LIBPATH) /LIBPATH:$(STDLIBPATH) "$(NEEDLIBS)" "$(>)"
}
#### Cc #####

View File

@@ -8,7 +8,7 @@ rule split ( string separator )
while $(s)
{
local match = [ SUBST $(s) (.*)$(separator)(.*) $1 $2 ] ;
local match = [ SUBST $(s) ^(.*)$(separator)(.*) $1 $2 ] ;
local tail = $(match[2]) ;
tail ?= $(s) ;

View File

@@ -7,6 +7,7 @@
# assert_equal a : b
#
# exits with an assertion failure if a != b
ECHO running unit tests... ;
rule assert_equal
{
if $(<) != $(>)
@@ -75,6 +76,7 @@ assert_equal [ is-subset a b c : c a b d ] : true ;
assert_equal [ is-subset a b z : c a b d ] : ;
# split-path
assert_equal [ split-path /a/b/c ] : / a b c ;
assert_equal [ split-path b/c.d/.f/g./h.i ] : b c.d .f g. h.i ;
assert_equal [ split-path <a>b/c/<d>e ] : <a>b c <d>e ;
assert_equal [ split-path <a>/<d>/<e> ] : <a> <d> <e> ;
@@ -267,3 +269,4 @@ assert_equal [ strip-initial a b c : a b d e f g ] : a b d e f g ;
assert_equal [ strip-initial a b c : b d e f g ] : b d e f g ;
assert_equal [ strip-initial a b c : ] : ;
ECHO unit tests complete. ;