aubio version :
authorMartin Hermant <martin.hermant@gmail.com>
Mon, 13 Mar 2017 16:10:55 +0000 (17:10 +0100)
committerMartin Hermant <martin.hermant@gmail.com>
Mon, 13 Mar 2017 16:10:55 +0000 (17:10 +0100)
aubio-c / aubio-py add git commit support

python/lib/moresetuptools.py
setup.py
src/wscript_build
wscript

index 7b0aa1b..f611ad4 100644 (file)
@@ -31,7 +31,13 @@ def get_aubio_version():
                                      AUBIO_MINOR_VERSION,
                                      AUBIO_PATCH_VERSION]))
 
-    if AUBIO_VERSION_STATUS is not None:
+    AUBIO_GIT_SHA = get_git_revision_hash()
+    """ append sha to version in alpha release
+    """
+    if '~alpha' in AUBIO_VERSION_STATUS :
+        if AUBIO_GIT_SHA:
+            AUBIO_VERSION_STATUS = '~git'+AUBIO_GIT_SHA
+    if AUBIO_VERSION_STATUS is not None :
         verstr += AUBIO_VERSION_STATUS
     return verstr
 
@@ -39,11 +45,50 @@ def get_aubio_pyversion():
     # convert to version for python according to pep 440
     # see https://www.python.org/dev/peps/pep-0440/
     verstr = get_aubio_version()
-    if '~alpha' in verstr:
-        verstr = verstr.split('~')[0] + 'a1'
+    if '~alpha' in verstr or '~git' in verstr:
+        verstr = verstr.split('~')[0] + '+a1'
+        gitsha = get_git_revision_hash(short=True)
+        if gitsha:
+            verstr+='.git.'+gitsha
     # TODO: add rc, .dev, and .post suffixes, add numbering
     return verstr
 
+
+
+def get_git_revision_hash( short=True):
+    def which(program):
+    
+        def is_exe(fpath):
+            return os.path.isfile(fpath) and os.access(fpath, os.X_OK)
+
+        fpath, fname = os.path.split(program)
+        if fpath:
+            if is_exe(program):
+                return program
+        else:
+            for path in os.environ["PATH"].split(os.pathsep):
+                path = path.strip('"')
+                exe_file = os.path.join(path, program)
+                if is_exe(exe_file):
+                    return exe_file
+
+        return None
+    if not which('git'):
+        print 'no git found on this system : can\'t get sha'
+        return ""
+
+    import subprocess
+    this_file_dir = os.path.dirname(os.path.abspath(__file__))
+    aubio_dir = os.path.join(this_file_dir, '..', '..')
+    aubio_dir = os.path.abspath(aubio_dir)
+    if not os.path.exists(aubio_dir):
+        raise SystemError("git / root folder not found")
+    gitcmd = ['git','-C',aubio_dir ,'rev-parse']
+    if short:
+      gitcmd.append('--short')
+    gitcmd.append('HEAD')
+    return subprocess.check_output(gitcmd).strip()
+
 # inspired from https://gist.github.com/abergmeier/9488990
 def add_packages(packages, ext=None, **kw):
     """ use pkg-config to search which of 'packages' are installed """
index 0248a1a..e02e48b 100755 (executable)
--- a/setup.py
+++ b/setup.py
@@ -6,7 +6,8 @@ from python.lib.moresetuptools import *
 # function to generate gen/*.{c,h}
 from python.lib.gen_external import generate_external, header, output_path
 
-__version__ = get_aubio_pyversion()
+__version__ = get_aubio_version()
+__pip_version__ = get_aubio_pyversion()
 
 include_dirs = []
 library_dirs = []
@@ -54,7 +55,7 @@ classifiers = [
     ]
 
 distrib = setup(name='aubio',
-    version = __version__,
+    version = __pip_version__,
     packages = ['aubio'],
     package_dir = {'aubio':'python/lib/aubio'},
     scripts = ['python/scripts/aubiocut'],
index 62a8b70..433d029 100644 (file)
@@ -46,5 +46,5 @@ for target in build_features:
 
 # install headers, except _priv.h ones
 ctx.install_files('${INCLUDEDIR}/aubio/',
-        ctx.path.ant_glob('**/*.h', excl = ['**_priv.h', 'config.h']),
+        ctx.path.ant_glob('**/*.h', excl = ['**_priv.h']),
         relative_trick=True)
diff --git a/wscript b/wscript
index f8e9cc0..f713f4a 100644 (file)
--- a/wscript
+++ b/wscript
@@ -17,6 +17,49 @@ APPNAME = 'aubio'
 # source VERSION
 for l in open('VERSION').readlines(): exec (l.strip())
 
+def get_git_revision_hash( short=True):
+    import os
+    def which(program):
+        def is_exe(fpath):
+            return os.path.isfile(fpath) and os.access(fpath, os.X_OK)
+
+        fpath, fname = os.path.split(program)
+        if fpath:
+            if is_exe(program):
+                return program
+        else:
+            for path in os.environ["PATH"].split(os.pathsep):
+                path = path.strip('"')
+                exe_file = os.path.join(path, program)
+                if is_exe(exe_file):
+                    return exe_file
+
+        return None
+        
+    if not which('git'):
+        print 'no git found on this system : can\'t get sha'
+        return ""
+
+    import subprocess
+    aubio_dir = os.path.abspath(os.curdir)
+    if not os.path.exists(aubio_dir):
+        raise SystemError("git / root folder not found")
+    gitcmd = ['git','-C',aubio_dir ,'rev-parse']
+    if short:
+      gitcmd.append('--short')
+    gitcmd.append('HEAD')
+    return subprocess.check_output(gitcmd).strip()
+
+AUBIO_GIT_SHA = get_git_revision_hash()
+""" append sha to version in alpha release
+"""
+if '~alpha' in AUBIO_VERSION_STATUS :
+    if AUBIO_GIT_SHA:
+        AUBIO_VERSION_STATUS = '~git'+AUBIO_GIT_SHA
+
+
+
+
 VERSION = '.'.join ([str(x) for x in [
     AUBIO_MAJOR_VERSION,
     AUBIO_MINOR_VERSION,
@@ -131,6 +174,12 @@ def configure(ctx):
         target_platform = ctx.options.target_platform
     ctx.env['DEST_OS'] = target_platform
 
+    ctx.define('AUBIO_VERSION',VERSION)
+    ctx.define('AUBIO_MAJOR_VERSION',AUBIO_MAJOR_VERSION)
+    ctx.define('AUBIO_MINOR_VERSION',AUBIO_MINOR_VERSION)
+    ctx.define('AUBIO_PATCH_VERSION',AUBIO_PATCH_VERSION)
+    ctx.define('AUBIO_VERSION_STATUS',AUBIO_VERSION_STATUS)
+    ctx.define('AUBIO_GIT_SHA',AUBIO_GIT_SHA)
     if ctx.options.build_type == "debug":
         ctx.define('DEBUG', 1)
     else: