#!/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: ..") 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()