mirror of
https://github.com/boostorg/build.git
synced 2026-02-17 01:32:12 +00:00
Added functionality for more easily testing the Boost Jam version from Jamfiles. Now you can use the version.check-jam-version rule, as in [ versions.check-jam-version 3 1 17 ] which will return true if the current Boost Jam version is at least 3.1.17. Added related internal Boost Build tests for the new functionality.
[SVN r45096]
This commit is contained in:
@@ -1,7 +1,12 @@
|
||||
# Copyright 2002, 2003, 2004, 2006 Vladimir Prus
|
||||
# Copyright 2008 Jurko Gospodnetic
|
||||
# Distributed under the Boost Software License, Version 1.0.
|
||||
# (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
import errors ;
|
||||
import numbers ;
|
||||
|
||||
|
||||
rule boost-build ( )
|
||||
{
|
||||
return "V2 (Milestone 12)" ;
|
||||
@@ -10,7 +15,7 @@ rule boost-build ( )
|
||||
|
||||
rule jam ( )
|
||||
{
|
||||
local v = [ modules.peek : JAM_VERSION ] ;
|
||||
local v = [ modules.peek : JAM_VERSION ] ;
|
||||
return $(v:J=.) ;
|
||||
}
|
||||
|
||||
@@ -20,3 +25,117 @@ rule print ( )
|
||||
ECHO "Boost.Build" [ boost-build ] ;
|
||||
ECHO "Boost.Jam" [ jam ] ;
|
||||
}
|
||||
|
||||
|
||||
# Utility rule for testing whether all elements of a sequence are equal to 0.
|
||||
#
|
||||
local rule is-all-zeroes ( sequence * )
|
||||
{
|
||||
local result = "true" ;
|
||||
for local e in $(sequence)
|
||||
{
|
||||
if $(e) != "0"
|
||||
{
|
||||
result = "" ;
|
||||
}
|
||||
}
|
||||
return $(result) ;
|
||||
}
|
||||
|
||||
|
||||
# Returns "true" if the first version is less than the second one.
|
||||
#
|
||||
rule version-less ( lhs + : rhs + )
|
||||
{
|
||||
numbers.check $(lhs) ;
|
||||
numbers.check $(rhs) ;
|
||||
|
||||
local done ;
|
||||
local result ;
|
||||
|
||||
while ! $(done) && $(lhs) && $(rhs)
|
||||
{
|
||||
if [ numbers.less $(lhs[1]) $(rhs[1]) ]
|
||||
{
|
||||
done = "true" ;
|
||||
result = "true" ;
|
||||
}
|
||||
else if [ numbers.less $(rhs[1]) $(lhs[1]) ]
|
||||
{
|
||||
done = "true" ;
|
||||
}
|
||||
else
|
||||
{
|
||||
lhs = $(lhs[2-]) ;
|
||||
rhs = $(rhs[2-]) ;
|
||||
}
|
||||
}
|
||||
if ( ! $(done) && ! $(lhs) && ! [ is-all-zeroes $(rhs) ] )
|
||||
{
|
||||
result = "true" ;
|
||||
}
|
||||
|
||||
return $(result) ;
|
||||
}
|
||||
|
||||
|
||||
# Returns "true" if the current JAM version version is at least the given
|
||||
# version.
|
||||
#
|
||||
rule check-jam-version ( version + )
|
||||
{
|
||||
local version-tag = $(version:J=.) ;
|
||||
if ! $(version-tag)
|
||||
{
|
||||
errors.error Invalid version specifier: : $(version:E="(undefined)") ;
|
||||
}
|
||||
|
||||
if ! $(.jam-version-check.$(version-tag))-is-defined
|
||||
{
|
||||
local jam-version = [ modules.peek : JAM_VERSION ] ;
|
||||
if ! $(jam-version)
|
||||
{
|
||||
errors.error "Unable to deduce Boost Jam version. Your Boost Jam"
|
||||
"installation is most likely terribly outdated." ;
|
||||
}
|
||||
.jam-version-check.$(version-tag) = "true" ;
|
||||
if [ version-less [ modules.peek : JAM_VERSION ] : $(version) ]
|
||||
{
|
||||
.jam-version-check.$(version-tag) = "" ;
|
||||
}
|
||||
}
|
||||
return $(.jam-version-check.$(version-tag)) ;
|
||||
}
|
||||
|
||||
|
||||
rule __test__ ( )
|
||||
{
|
||||
import assert ;
|
||||
|
||||
local jam-version = [ modules.peek : JAM_VERSION ] ;
|
||||
local future-version = $(jam-version) ;
|
||||
future-version += "1" ;
|
||||
|
||||
assert.true check-jam-version $(jam-version) ;
|
||||
assert.false check-jam-version $(future-version) ;
|
||||
|
||||
assert.true version-less 0 : 1 ;
|
||||
assert.false version-less 0 : 0 ;
|
||||
assert.true version-less 1 : 2 ;
|
||||
assert.false version-less 1 : 1 ;
|
||||
assert.false version-less 2 : 1 ;
|
||||
assert.true version-less 3 1 20 : 3 4 10 ;
|
||||
assert.false version-less 3 1 10 : 3 1 10 ;
|
||||
assert.false version-less 3 4 10 : 3 1 20 ;
|
||||
assert.true version-less 3 1 20 5 1 : 3 4 10 ;
|
||||
assert.false version-less 3 1 10 5 1 : 3 1 10 ;
|
||||
assert.false version-less 3 4 10 5 1 : 3 1 20 ;
|
||||
assert.true version-less 3 1 20 : 3 4 10 5 1 ;
|
||||
assert.true version-less 3 1 10 : 3 1 10 5 1 ;
|
||||
assert.false version-less 3 4 10 : 3 1 20 5 1 ;
|
||||
assert.false version-less 3 1 10 : 3 1 10 0 0 ;
|
||||
assert.false version-less 3 1 10 0 0 : 3 1 10 ;
|
||||
assert.false version-less 3 1 10 0 : 3 1 10 0 0 ;
|
||||
|
||||
# TODO: Add tests for invalid input data being sent to version-less.
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user