blob: 17714228840f483e730cdcfcfc9b8a38e687d376 [file] [log] [blame]
#!/usr/bin/python
# This script is used to bump the bjam version. It takes a single argument, e.g
#
# ./bump_version.py 3.1.9
#
# and updates all the necessary files.
#
# Copyright 2006 Rene Rivera.
# Copyright 2005-2006 Vladimir Prus.
# 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 os
import os.path
import re
import string
import sys
srcdir = os.path.abspath(os.path.dirname(__file__))
docdir = os.path.abspath(os.path.join(srcdir, "..", "doc"))
def edit(file, *replacements):
print(" '%s'..." % file)
f = open(file, 'r')
text = f.read()
f.close()
for (source, target) in replacements:
text, n = re.compile(source, re.MULTILINE).subn(target, text)
assert n > 0
f = open(file, 'w')
f.write(text)
f.close()
def make_edits(ver):
ver03 = (list(ver) + [0] * 3)[0:3]
ver02 = ver03[0:2]
join = lambda v, s : s.join(str(x) for x in v)
dotJoin = lambda v : join(v, ".")
print("Setting version to %s" % str(ver03))
edit(os.path.join(srcdir, "boost-jam.spec"),
('^(Version:) .*$', '\\1 %s' % dotJoin(ver03)))
edit(os.path.join(srcdir, "build.jam"),
('^(_VERSION_ =).* ;$', '\\1 %s ;' % join(ver03, " ")))
edit(os.path.join(docdir, "bjam.qbk"),
('(\[version).*(\])', '\\1: %s\\2' % dotJoin(ver03)),
('(\[def :version:).*(\])', '\\1 %s\\2' % dotJoin(ver03)))
edit(os.path.join(srcdir, "patchlevel.h"),
('^(#define VERSION_MAJOR) .*$', '\\1 %s' % ver03[0]),
('^(#define VERSION_MINOR) .*$', '\\1 %s' % ver03[1]),
('^(#define VERSION_PATCH) .*$', '\\1 %s' % ver03[2]),
('^(#define VERSION_MAJOR_SYM) .*$', '\\1 "%02d"' % ver03[0]),
('^(#define VERSION_MINOR_SYM) .*$', '\\1 "%02d"' % ver03[1]),
('^(#define VERSION_PATCH_SYM) .*$', '\\1 "%02d"' % ver03[2]),
('^(#define VERSION) .*$', '\\1 "%s"' % dotJoin(ver)),
('^(#define JAMVERSYM) .*$', '\\1 "JAMVERSION=%s"' % dotJoin(ver02)))
def main():
if len(sys.argv) < 2:
print("Expect new version as argument.")
sys.exit(1)
if len(sys.argv) > 3:
print("Too many arguments.")
sys.exit(1)
version = sys.argv[1].split(".")
if len(version) > 3:
print("Expect version argument in the format: <MAJOR>.<MINOR>.<PATCH>")
sys.exit(1)
try:
version = list(int(x) for x in version)
except ValueError:
print("Version values must be valid integers.")
sys.exit(1)
while version and version[-1] == 0:
version.pop()
if not version:
print("At least one of the version values must be positive.")
sys.exit()
make_edits(version)
if __name__ == '__main__':
main()