From a6c877401b748092e2e7799bfb4a4bd84729b1da Mon Sep 17 00:00:00 2001 From: Kevin O'Connor Date: Tue, 13 Oct 2015 15:09:40 -0400 Subject: build: Rework version generation; don't allow make version override Convert the script to generate the build version from a shell script to a python script. Remove the ability to override the version at build time via "make VERSION=xyz". Replace it with ability to add extra version information at build time via "make EXTRAVERSION=xyz". Signed-off-by: Kevin O'Connor --- scripts/buildversion.py | 66 +++++++++++++++++++++++++++++++++++++++++++++++++ scripts/buildversion.sh | 31 ----------------------- 2 files changed, 66 insertions(+), 31 deletions(-) create mode 100755 scripts/buildversion.py delete mode 100755 scripts/buildversion.sh (limited to 'scripts') diff --git a/scripts/buildversion.py b/scripts/buildversion.py new file mode 100755 index 0000000..b948134 --- /dev/null +++ b/scripts/buildversion.py @@ -0,0 +1,66 @@ +#!/usr/bin/env python +# Generate version information for a program +# +# Copyright (C) 2015 Kevin O'Connor +# +# This file may be distributed under the terms of the GNU GPLv3 license. +import sys, os, subprocess, time, socket, optparse + +VERSION_FORMAT = """ +/* DO NOT EDIT! This is an autogenerated file. See scripts/buildversion.py. */ +#define BUILD_VERSION "%s" +""" + +# Obtain version info from "git" program +def git_version(): + if not os.path.exists('.git'): + return "" + params = "git describe --tags --long --dirty".split() + try: + ver = subprocess.check_output(params).decode().strip() + except: + return "" + return ver + +# Look for version in a ".version" file +def file_version(): + if not os.path.isfile('.version'): + return "" + try: + f = open('.version', 'r') + ver = f.readline().strip() + f.close() + except: + return "" + return ver + +# Generate an output file with the version information +def write_version(outfile, version): + sys.stdout.write("Version: %s\n" % (version,)) + f = open(outfile, 'w') + f.write(VERSION_FORMAT % (version,)) + f.close() + +def main(): + usage = "%prog [options] " + opts = optparse.OptionParser(usage) + opts.add_option("-e", "--extra", dest="extra", default="", + help="extra version string to append to version") + + options, args = opts.parse_args() + if len(args) != 1: + opts.error("Incorrect arguments") + outfile = args[0] + + ver = git_version() + if not ver: + ver = file_version() + if not ver: + ver = "?" + btime = time.strftime("%Y%m%d_%H%M%S") + hostname = socket.gethostname() + ver = "%s-%s-%s%s" % (ver, btime, hostname, options.extra) + write_version(outfile, ver) + +if __name__ == '__main__': + main() diff --git a/scripts/buildversion.sh b/scripts/buildversion.sh deleted file mode 100755 index 516aff5..0000000 --- a/scripts/buildversion.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/bin/sh -# Script to generate a C file with version information. -OUTFILE="$1" -VAR16MODE="$2" - -# Extract version info -if [ -z "$BUILD_VERSION" ]; then - if [ -d .git -o -f .git ]; then - VERSION="`git describe --tags --long --dirty`" - elif [ -f .version ]; then - VERSION="`cat .version`" - else - VERSION="?" - fi - VERSION="${VERSION}-`date +"%Y%m%d_%H%M%S"`-`hostname`" -else - VERSION="$BUILD_VERSION" -fi -echo "Version: ${VERSION}" - -# Build header file -if [ "$VAR16MODE" = "VAR16" ]; then - cat > ${OUTFILE} < ${OUTFILE} <