| # 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)" ; |
| } |
| |
| |
| rule jam ( ) |
| { |
| local v = [ modules.peek : JAM_VERSION ] ; |
| return $(v:J=.) ; |
| } |
| |
| |
| rule print ( ) |
| { |
| ECHO "Boost.Build" [ boost-build ] ; |
| ECHO "Boost.Jam" [ jam ] ; |
| } |
| |
| |
| # Utility rule for testing whether all elements in 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-not-empty |
| { |
| 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 ; |
| assert.false version-less 3 1 10 0 : 03 1 10 0 0 ; |
| assert.false version-less 03 1 10 0 : 3 1 10 0 0 ; |
| |
| # TODO: Add tests for invalid input data being sent to version-less. |
| } |