| #!/usr/bin/env python |
| |
| """Version utility""" |
| |
| import subprocess |
| import os |
| import sys |
| |
| def generate_version_string(libname): |
| |
| version_numbers = [] |
| tokens = [] |
| |
| gitcmd = 'git' |
| if sys.platform.startswith('win'): |
| gitcmd = 'git.exe' |
| try: |
| git_version = subprocess.check_output( [ gitcmd, 'describe', '--long' ], stderr = subprocess.STDOUT ).strip() |
| tokens = git_version.decode().split( '-' ) |
| version_numbers = tokens[0].split( '.' ) |
| except Exception: |
| pass |
| |
| version_major = "0" |
| version_minor = "0" |
| version_revision = "1" |
| version_build = "0" |
| version_scm = "0" |
| |
| if version_numbers and len( version_numbers ) > 2: |
| version_major = version_numbers[0] |
| version_minor = version_numbers[1] |
| version_revision = version_numbers[2] |
| |
| if tokens and len( tokens ) > 2: |
| version_build = tokens[1] |
| version_scm = tokens[2][1:] |
| |
| module = "" |
| if not libname == "foundation": |
| module = "_module" |
| |
| source = """/* ****** AUTOMATICALLY GENERATED, DO NOT EDIT ****** |
| This file is generated from the git describe command. |
| Run the configure script to regenerate this file */ |
| |
| #include <foundation/version.h> |
| #include <""" + libname + "/" + libname + """.h> |
| |
| version_t |
| """ + libname + module + """_version(void) { |
| """ |
| source += " return version_make(" + version_major + ", " + version_minor + ", " + version_revision + ", " + version_build + ", 0x" + version_scm + ");\n}\n" |
| return source |
| |
| def read_version_string(input_path): |
| try: |
| file = open( os.path.join( input_path, 'version.c' ), "r" ) |
| str = file.read() |
| file.close() |
| except IOError: |
| str = "" |
| return str |
| |
| def write_version_string(output_path, str): |
| file = open( os.path.join( output_path, 'version.c' ), "w" ) |
| file.write( str ) |
| file.close |
| |
| def generate_version(libname, output_path): |
| generated = generate_version_string(libname) |
| if generated == None: |
| return |
| previous = read_version_string(output_path) |
| |
| if generated != previous: |
| write_version_string(output_path, generated) |
| |
| if __name__ == "__main__": |
| generate_version(sys.argv[1], sys.argv[2]) |