1*a58d3d2aSXin Li#!/usr/bin/env python3 2*a58d3d2aSXin Li# 3*a58d3d2aSXin Li# Opus get-version.py 4*a58d3d2aSXin Li# 5*a58d3d2aSXin Li# Extracts versions for build: 6*a58d3d2aSXin Li# - Opus package version based on 'git describe' or $srcroot/package_version 7*a58d3d2aSXin Li# - libtool version based on configure.ac 8*a58d3d2aSXin Li# - macos lib version based on configure.ac 9*a58d3d2aSXin Li# 10*a58d3d2aSXin Li# Usage: 11*a58d3d2aSXin Li# get-version.py [--package-version | --libtool-version | --darwin-version] 12*a58d3d2aSXin Liimport argparse 13*a58d3d2aSXin Liimport subprocess 14*a58d3d2aSXin Liimport os 15*a58d3d2aSXin Liimport sys 16*a58d3d2aSXin Liimport shutil 17*a58d3d2aSXin Li 18*a58d3d2aSXin Liif __name__ == '__main__': 19*a58d3d2aSXin Li arg_parser = argparse.ArgumentParser(description='Extract Opus package version or libtool version') 20*a58d3d2aSXin Li group = arg_parser.add_mutually_exclusive_group(required=True) 21*a58d3d2aSXin Li group.add_argument('--libtool-version', action='store_true') 22*a58d3d2aSXin Li group.add_argument('--package-version', action='store_true') 23*a58d3d2aSXin Li group.add_argument('--darwin-version', action='store_true') 24*a58d3d2aSXin Li args = arg_parser.parse_args() 25*a58d3d2aSXin Li 26*a58d3d2aSXin Li srcroot = os.path.normpath(os.path.join(os.path.dirname(__file__), '..')) 27*a58d3d2aSXin Li 28*a58d3d2aSXin Li # package version 29*a58d3d2aSXin Li if args.package_version: 30*a58d3d2aSXin Li package_version = None 31*a58d3d2aSXin Li 32*a58d3d2aSXin Li # check if git checkout 33*a58d3d2aSXin Li git_dir = os.path.join(srcroot, '.git') 34*a58d3d2aSXin Li is_git = os.path.isdir(git_dir) or os.path.isfile(git_dir) 35*a58d3d2aSXin Li have_git = shutil.which('git') is not None 36*a58d3d2aSXin Li 37*a58d3d2aSXin Li if is_git and have_git: 38*a58d3d2aSXin Li git_cmd = subprocess.run(['git', '--git-dir=' + git_dir, 'describe', 'HEAD'], stdout=subprocess.PIPE) 39*a58d3d2aSXin Li if git_cmd.returncode: 40*a58d3d2aSXin Li print('ERROR: Could not extract package version via `git describe` in', srcroot, file=sys.stderr) 41*a58d3d2aSXin Li sys.exit(-1) 42*a58d3d2aSXin Li package_version = git_cmd.stdout.decode('ascii').strip().lstrip('v') 43*a58d3d2aSXin Li else: 44*a58d3d2aSXin Li with open(os.path.join(srcroot, 'package_version'), 'r') as f: 45*a58d3d2aSXin Li for line in f: 46*a58d3d2aSXin Li if line.startswith('PACKAGE_VERSION="'): 47*a58d3d2aSXin Li package_version = line[17:].strip().lstrip('v').rstrip('"') 48*a58d3d2aSXin Li if package_version: 49*a58d3d2aSXin Li break 50*a58d3d2aSXin Li 51*a58d3d2aSXin Li if not package_version: 52*a58d3d2aSXin Li print('ERROR: Could not extract package version from package_version file in', srcroot, file=sys.stderr) 53*a58d3d2aSXin Li sys.exit(-1) 54*a58d3d2aSXin Li 55*a58d3d2aSXin Li print(package_version) 56*a58d3d2aSXin Li sys.exit(0) 57*a58d3d2aSXin Li 58*a58d3d2aSXin Li # libtool version + darwin version 59*a58d3d2aSXin Li elif args.libtool_version or args.darwin_version: 60*a58d3d2aSXin Li opus_lt_cur = None 61*a58d3d2aSXin Li opus_lt_rev = None 62*a58d3d2aSXin Li opus_lt_age = None 63*a58d3d2aSXin Li 64*a58d3d2aSXin Li with open(os.path.join(srcroot, 'configure.ac'), 'r') as f: 65*a58d3d2aSXin Li for line in f: 66*a58d3d2aSXin Li if line.strip().startswith('OPUS_LT_CURRENT='): 67*a58d3d2aSXin Li opus_lt_cur = line[16:].strip() 68*a58d3d2aSXin Li elif line.strip().startswith('OPUS_LT_REVISION='): 69*a58d3d2aSXin Li opus_lt_rev = line[17:].strip() 70*a58d3d2aSXin Li elif line.strip().startswith('OPUS_LT_AGE='): 71*a58d3d2aSXin Li opus_lt_age = line[12:].strip() 72*a58d3d2aSXin Li 73*a58d3d2aSXin Li if opus_lt_cur and opus_lt_rev and opus_lt_age: 74*a58d3d2aSXin Li opus_lt_cur = int(opus_lt_cur) 75*a58d3d2aSXin Li opus_lt_rev = int(opus_lt_rev) 76*a58d3d2aSXin Li opus_lt_age = int(opus_lt_age) 77*a58d3d2aSXin Li if args.libtool_version: 78*a58d3d2aSXin Li print('{}.{}.{}'.format(opus_lt_cur - opus_lt_age, opus_lt_age, opus_lt_rev)) 79*a58d3d2aSXin Li elif args.darwin_version: 80*a58d3d2aSXin Li print('{}.{}.{}'.format(opus_lt_cur + 1, 0, 0)) 81*a58d3d2aSXin Li sys.exit(0) 82*a58d3d2aSXin Li else: 83*a58d3d2aSXin Li print('ERROR: Could not extract libtool version from configure.ac file in', srcroot, file=sys.stderr) 84*a58d3d2aSXin Li sys.exit(-1) 85*a58d3d2aSXin Li else: 86*a58d3d2aSXin Li sys.exit(-1) 87