4 __version_info = {} # keep a reference to parse VERSION once
6 def get_version_info():
8 # return dictionary filled with content of version
10 this_file_dir = os.path.dirname(os.path.abspath(__file__))
11 version_file = os.path.join(this_file_dir, 'VERSION')
13 if not os.path.isfile(version_file):
14 raise SystemError("VERSION file not found.")
16 for l in open(version_file).readlines():
17 if l.startswith('AUBIO_MAJOR_VERSION'):
18 __version_info['AUBIO_MAJOR_VERSION'] = int(l.split('=')[1])
19 if l.startswith('AUBIO_MINOR_VERSION'):
20 __version_info['AUBIO_MINOR_VERSION'] = int(l.split('=')[1])
21 if l.startswith('AUBIO_PATCH_VERSION'):
22 __version_info['AUBIO_PATCH_VERSION'] = int(l.split('=')[1])
23 if l.startswith('AUBIO_VERSION_STATUS'):
24 __version_info['AUBIO_VERSION_STATUS'] = \
25 l.split('=')[1].strip()[1:-1]
27 if l.startswith('LIBAUBIO_LT_CUR'):
28 __version_info['LIBAUBIO_LT_CUR'] = int(l.split('=')[1])
29 if l.startswith('LIBAUBIO_LT_REV'):
30 __version_info['LIBAUBIO_LT_REV'] = int(l.split('=')[1])
31 if l.startswith('LIBAUBIO_LT_AGE'):
32 __version_info['LIBAUBIO_LT_AGE'] = int(l.split('=')[1])
34 if len(__version_info) < 6:
35 raise SystemError("Failed parsing VERSION file.")
37 # switch version status with commit sha in alpha releases
38 if __version_info['AUBIO_VERSION_STATUS'] and \
39 '~alpha' in __version_info['AUBIO_VERSION_STATUS']:
40 AUBIO_GIT_SHA = get_git_revision_hash()
42 __version_info['AUBIO_VERSION_STATUS'] = '~git+' + AUBIO_GIT_SHA
46 def get_libaubio_version():
47 verfmt = '%(LIBAUBIO_LT_CUR)s.%(LIBAUBIO_LT_REV)s.%(LIBAUBIO_LT_AGE)s'
48 return str(verfmt % get_version_info())
50 def get_aubio_version():
51 verfmt = '%(AUBIO_MAJOR_VERSION)s.%(AUBIO_MINOR_VERSION)s.%(AUBIO_PATCH_VERSION)s%(AUBIO_VERSION_STATUS)s'
52 return str(verfmt % get_version_info())
54 def get_aubio_pyversion():
55 # convert to version for python according to pep 440
56 # see https://www.python.org/dev/peps/pep-0440/
57 # outputs MAJ.MIN.PATCH[a0[+git.<sha>[.mods]]]
58 aubio_version = get_aubio_version()
59 if '~git+' in aubio_version:
60 pep440str = aubio_version.replace('+', '.')
61 verstr = pep440str.replace('~git.', 'a0+')
62 elif '~alpha' in aubio_version:
63 verstr = aubio_version.replace('~alpha', 'a0')
65 verstr = aubio_version
68 def get_git_revision_hash(short=True):
69 # get commit id, with +mods if local tree is not clean
70 if not os.path.isdir('.git'):
71 # print('Version : not in git repository : can\'t get sha')
74 aubio_dir = os.path.dirname(os.path.abspath(__file__))
75 if not os.path.exists(aubio_dir):
76 raise SystemError("git / root folder not found")
77 gitcmd = ['git', '-C', aubio_dir, 'rev-parse']
79 gitcmd.append('--short')
82 gitsha = subprocess.check_output(gitcmd).strip().decode('utf8')
83 except Exception as e:
84 print('git command error :%s' % e)
86 # check if we have a clean tree
87 gitcmd = ['git', '-C', aubio_dir, 'status', '--porcelain']
89 output = subprocess.check_output(gitcmd).decode('utf8')
91 print('Info: current tree is not clean\n')
94 except subprocess.CalledProcessError as e:
99 if __name__ == '__main__':
100 print ('%30s'% 'aubio version:', get_aubio_version())
101 print ('%30s'% 'python-aubio version:', get_aubio_pyversion())