[ Web Proxy ]
URL:
Viewing: https://raw.githubusercontent.com/cfarrow/libdiffpy/develop/src/diffpy/SConscript.version [Back]  [Original]

import os
from subprocess import Popen, PIPE

Import('env')


def parsemajorminor(hcode):
    'Extract major and minor version from a C++ header file.'
    import re
    mx = re.search(r'(?m)^#define *DIFFPY_VERSION_MAJOR *(\d+)', hcode)
    major = int(mx.group(1))
    mx = re.search(r'(?m)^#define *DIFFPY_VERSION_MINOR *(\d+)', hcode)
    minor = int(mx.group(1))
    return (major, minor)


def build_VersionCode(target, source, env):
    import string
    tplcode = source[0].get_contents()
    major, minor = parsemajorminor(tplcode)
    gsha, gepoch, gisodate = gitlog.split(None, 2)
    daydate = int(gepoch) // 86400
    flds = {
        'DIFFPY_VERSION' : 10000000 * major + 100000 * minor + daydate,
        'DIFFPY_VERSION_STR' : "%i.%i-t%i" % (major, minor, daydate),
        'DIFFPY_VERSION_DATE' : gisodate,
        'DIFFPY_GIT_SHA' : gsha,
    }
    versiontemplate = string.Template(tplcode)
    versioncode = versiontemplate.safe_substitute(flds)
    open(target[0].path, 'w').write(versioncode)
    return None

env.Append(BUILDERS={'BuildVersionCode' :
        Builder(action=build_VersionCode, suffix='.hpp', src_suffix='.tpl')})

# Targets --------------------------------------------------------------------

vhpp = File('version.hpp')

# If version.hpp exists do not use git
if os.path.isfile(str(vhpp.srcnode())):
    majorminor = parsemajorminor(vhpp.srcnode().get_contents())
else:
    vtpl = File('version.tpl')
    proc = Popen(['git', 'log', '-1', '--format=%h %at %ai'], stdout=PIPE)
    gitlog = proc.stdout.read().strip()
    vhpp, = env.BuildVersionCode(['version.hpp'], vtpl)
    env.Depends(vhpp, env.Value(gitlog))
    majorminor = parsemajorminor(vtpl.get_contents())

env['majorminor'] = majorminor

# vim: ft=python

Web Proxy Viewer  |  New URL  |  Original Page