]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/tools/build/src/build/version.jam
import quincy beta 17.1.0
[ceph.git] / ceph / src / boost / tools / build / src / build / version.jam
1 # Copyright 2002, 2003, 2004, 2006 Vladimir Prus
2 # Copyright 2008, 2012 Jurko Gospodnetic
3 # Distributed under the Boost Software License, Version 1.0.
4 # (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
5
6 import numbers ;
7
8
9 # Mirror engine JAM_VERSION
10 .major = "4" ;
11 .minor = "3" ;
12
13
14 rule boost-build ( )
15 {
16 return "$(.major).$(.minor)-git" ;
17 }
18
19
20 rule print ( )
21 {
22 if [ verify-engine-version ]
23 {
24 ECHO "B2" [ boost-build ] ;
25 }
26 }
27
28
29 rule verify-engine-version ( )
30 {
31 local v = [ modules.peek : JAM_VERSION ] ;
32
33 if $(v[1]) != $(.major) || $(v[2]) != $(.minor)
34 {
35 local argv = [ modules.peek : ARGV ] ;
36 local e = $(argv[1]) ;
37 local l = [ modules.binding version ] ;
38 l = $(l:D) ;
39 l = $(l:D) ;
40 ECHO "warning: mismatched versions of B2 engine and core" ;
41 ECHO "warning: B2 engine ($(e)) is $(v:J=.)" ;
42 ECHO "warning: B2 core (at $(l)) is" [ boost-build ] ;
43 }
44 else
45 {
46 return true ;
47 }
48 }
49
50
51 # Utility rule for testing whether all elements in a sequence are equal to 0.
52 #
53 local rule is-all-zeroes ( sequence * )
54 {
55 local result = "true" ;
56 for local e in $(sequence)
57 {
58 if $(e) != "0"
59 {
60 result = "" ;
61 }
62 }
63 return $(result) ;
64 }
65
66
67 # Returns "true" if the first version is less than the second one.
68 #
69 rule version-less ( lhs + : rhs + )
70 {
71 numbers.check $(lhs) ;
72 numbers.check $(rhs) ;
73
74 local done ;
75 local result ;
76
77 while ! $(done) && $(lhs) && $(rhs)
78 {
79 if [ numbers.less $(lhs[1]) $(rhs[1]) ]
80 {
81 done = "true" ;
82 result = "true" ;
83 }
84 else if [ numbers.less $(rhs[1]) $(lhs[1]) ]
85 {
86 done = "true" ;
87 }
88 else
89 {
90 lhs = $(lhs[2-]) ;
91 rhs = $(rhs[2-]) ;
92 }
93 }
94 if ( ! $(done) && ! $(lhs) && ! [ is-all-zeroes $(rhs) ] )
95 {
96 result = "true" ;
97 }
98
99 return $(result) ;
100 }
101
102
103 # Returns "true" if the current JAM version version is at least the given
104 # version.
105 #
106 rule check-jam-version ( version + )
107 {
108 local version-tag = $(version:J=.) ;
109 if ! $(version-tag)
110 {
111 import errors ;
112 errors.error Invalid version "specifier:" : $(version:E="(undefined)") ;
113 }
114
115 if ! $(.jam-version-check.$(version-tag))-is-defined
116 {
117 local jam-version = [ modules.peek : JAM_VERSION ] ;
118 if ! $(jam-version)
119 {
120 import errors ;
121 errors.error "Unable to deduce Boost Jam version. Your Boost Jam"
122 "installation is most likely terribly outdated." ;
123 }
124 .jam-version-check.$(version-tag) = "true" ;
125 if [ version-less [ modules.peek : JAM_VERSION ] : $(version) ]
126 {
127 .jam-version-check.$(version-tag) = "" ;
128 }
129 }
130 return $(.jam-version-check.$(version-tag)) ;
131 }
132
133
134 rule __test__ ( )
135 {
136 import assert ;
137
138 local jam-version = [ modules.peek : JAM_VERSION ] ;
139 local future-version = $(jam-version) ;
140 future-version += "1" ;
141
142 assert.true check-jam-version $(jam-version) ;
143 assert.false check-jam-version $(future-version) ;
144
145 assert.true version-less 0 : 1 ;
146 assert.false version-less 0 : 0 ;
147 assert.true version-less 1 : 2 ;
148 assert.false version-less 1 : 1 ;
149 assert.false version-less 2 : 1 ;
150 assert.true version-less 3 1 20 : 3 4 10 ;
151 assert.false version-less 3 1 10 : 3 1 10 ;
152 assert.false version-less 3 4 10 : 3 1 20 ;
153 assert.true version-less 3 1 20 5 1 : 3 4 10 ;
154 assert.false version-less 3 1 10 5 1 : 3 1 10 ;
155 assert.false version-less 3 4 10 5 1 : 3 1 20 ;
156 assert.true version-less 3 1 20 : 3 4 10 5 1 ;
157 assert.true version-less 3 1 10 : 3 1 10 5 1 ;
158 assert.false version-less 3 4 10 : 3 1 20 5 1 ;
159 assert.false version-less 3 1 10 : 3 1 10 0 0 ;
160 assert.false version-less 3 1 10 0 0 : 3 1 10 ;
161 assert.false version-less 3 1 10 0 : 3 1 10 0 0 ;
162 assert.false version-less 3 1 10 0 : 03 1 10 0 0 ;
163 assert.false version-less 03 1 10 0 : 3 1 10 0 0 ;
164
165 # TODO: Add tests for invalid input data being sent to version-less.
166 }