From 6b10babaeb538f50fefa86baf870568870b93af3 Mon Sep 17 00:00:00 2001 From: nedko Date: Sun, 31 Aug 2008 12:44:55 +0000 Subject: [PATCH] improved svn version define regeneration git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@2850 0c269be4-1314-0410-8aa9-9f06e86f4224 --- linux/dbus/jackdbus.c | 3 +- svnversion_regenerate.sh | 52 ++++++++++++++++++++++++++++++++++ wscript | 61 +++++++++++++++++++++++++++++++--------- 3 files changed, 102 insertions(+), 14 deletions(-) create mode 100755 svnversion_regenerate.sh diff --git a/linux/dbus/jackdbus.c b/linux/dbus/jackdbus.c index d3d44bef..685ad8b8 100644 --- a/linux/dbus/jackdbus.c +++ b/linux/dbus/jackdbus.c @@ -42,6 +42,7 @@ #include "jack/jslist.h" #include "jack/control.h" #include "sigsegv.h" +#include "svnversion.h" FILE *g_logfile; char *g_jackdbus_config_dir; @@ -760,7 +761,7 @@ main (int argc, char **argv) setup_sigsegv(); jack_info("------------------"); - jack_info("Controller activated. Version %s (%s) built on %s", jack_get_version_string(), JACK_SVNREVISION, timestamp_str); + jack_info("Controller activated. Version %s (%s) built on %s", jack_get_version_string(), SVN_VERSION, timestamp_str); if (!dbus_threads_init_default()) { diff --git a/svnversion_regenerate.sh b/svnversion_regenerate.sh new file mode 100755 index 00000000..be3864d1 --- /dev/null +++ b/svnversion_regenerate.sh @@ -0,0 +1,52 @@ +#!/bin/sh + +#set -x + +if test $# -ne 1 -a $# -ne 2 +then + echo "Usage: "`basename "$0"`" [define_name]" + exit 1 +fi + +OUTPUT_FILE="`pwd`/${1}" +TEMP_FILE="${OUTPUT_FILE}.tmp" + +#echo svnversion... +#pwd +#echo $OUTPUT_FILE +#echo $TEMP_FILE + +pushd .. > /dev/null + +if test $# -eq 2 +then + DEFINE=${2} +else + DEFINE=SVN_VERSION +fi + +REV=`svnversion 2> /dev/null` +if test -z ${REV} +then + REV="unknown" +fi + +echo "#define ${DEFINE} \"${REV}\"" > ${TEMP_FILE} +if test ! -f ${OUTPUT_FILE} +then + echo "Generated ${OUTPUT_FILE} (r${REV})" + cp ${TEMP_FILE} ${OUTPUT_FILE} + if test $? -ne 0; then exit 1; fi +else + if ! cmp -s ${OUTPUT_FILE} ${TEMP_FILE} + then echo "Regenerated ${OUTPUT_FILE} (r${REV})" + cp ${TEMP_FILE} ${OUTPUT_FILE} + if test $? -ne 0; then exit 1; fi + fi +fi + +popd > /dev/null + +rm ${TEMP_FILE} + +exit $? diff --git a/wscript b/wscript index f08b820d..0262c855 100644 --- a/wscript +++ b/wscript @@ -7,6 +7,8 @@ import commands from Configure import g_maxlen #g_maxlen = 40 import shutil +import Task +import re VERSION='1.9.0' APPNAME='jack' @@ -32,16 +34,29 @@ def display_feature(msg, build): else: display_msg(msg, "no", 'YELLOW') -def fetch_svn_revision(path): - svn_revision_file = "svnrev" - if os.access(svn_revision_file, os.R_OK): - f = open(svn_revision_file, 'r') - return f.read() - - cmd = "LANG= " - cmd += "svnversion " - cmd += path - return commands.getoutput(cmd) +def create_svnversion_gen(bld, header='svnversion.h', define=None): + cmd = '../svnversion_regenerate.sh ${TGT}' + if define: + cmd += " " + define + cls = Task.simple_task_type('svnversion', cmd, color='BLUE') + cls.must_run = lambda self: True + #cls.before = 'cxx' + + def sg(self): + rt = Params.h_file(self.m_outputs[0].abspath(self.env())) + return rt + cls.signature = sg + + #def se(self): + # r = sg(self) + # return (r, r, r, r, r) + #cls.cache_sig = property(sg, None) + cls.cache_sig = None + + tsk = cls('svnversion', bld.env().copy()) + tsk.m_inputs = [] + tsk.m_outputs = [bld.path.find_or_declare(header)] + tsk.prio = 1 # execute this task first def set_options(opt): # options provided by the modules @@ -91,7 +106,6 @@ def configure(conf): conf.define('MACH_RPC_MACH_SEMA', 1) conf.define('__SMP__', 1) conf.define('USE_POSIX_SHM', 1) - conf.define('JACK_SVNREVISION', fetch_svn_revision('.')) conf.define('JACKMP', 1) if conf.env['BUILD_JACKDBUS'] == True: conf.define('JACK_DBUS', 1) @@ -99,9 +113,23 @@ def configure(conf): conf.define('JACK_MONITOR', 1) conf.write_config_header('config.h') - display_msg("\n==================") - display_msg("JACK %s %s" % (VERSION, conf.get_define('JACK_SVNREVISION'))) + svnrev = None + if os.access('svnversion.h', os.R_OK): + data = file('svnversion.h').read() + m = re.match(r'^#define SVN_VERSION "([^"]*)"$', data) + if m != None: + svnrev = m.group(1) + + print + display_msg("==================") + version_msg = "JACK " + VERSION + if svnrev: + version_msg += " exported from r" + svnrev + else: + version_msg += " svn revision will checked and eventually updated during build" + print version_msg print + display_msg("Install prefix", conf.env['PREFIX'], 'CYAN') display_msg("Drivers directory", conf.env['ADDON_DIR'], 'CYAN') display_feature('Build doxygen documentation', conf.env['BUILD_DOXYGEN_DOCS']) @@ -130,6 +158,9 @@ def configure(conf): print def build(bld): + if not os.access('svnversion.h', os.R_OK): + create_svnversion_gen(bld) + # process subfolders from here bld.add_subdirs('common') if bld.env()['IS_LINUX']: @@ -172,3 +203,7 @@ def build(bld): os.popen("doxygen").read() else: Params.pprint('CYAN', "doxygen documentation already built.") + +def dist_hook(): + os.remove('svnversion_regenerate.sh') + os.system('../svnversion_regenerate.sh svnversion.h')