build: only use git when found by configure
authorAndrew Tridgell <tridge@samba.org>
Mon, 28 Jun 2010 03:40:32 +0000 (13:40 +1000)
committerAndrew Tridgell <tridge@samba.org>
Tue, 29 Jun 2010 04:28:08 +0000 (14:28 +1000)
this rebuilds version.h whenever the git version changes, so we always
get the right version with samba -V. That adds about 15s to the build
time on each git commit, which shouldn't be too onerous

buildtools/wafsamba/samba_patterns.py
buildtools/wafsamba/samba_version.py
source4/wscript

index ae0dbe2cf82acdbde64ce2346f198cc76393a5a0..4307bf2585948c1bc8c189e0a60a12076f561949 100644 (file)
@@ -10,7 +10,9 @@ def write_version_header(task):
     src = task.inputs[0].srcpath(task.env)
     tgt = task.outputs[0].bldpath(task.env)
 
-    version = samba_version_file(src)
+    have_git = 'GIT' in task.env
+
+    version = samba_version_file(src, have_git=have_git)
     string = str(version)
    
     f = open(tgt, 'w')
@@ -24,5 +26,6 @@ def SAMBA_MKVERSION(bld, target):
     t = bld.SAMBA_GENERATOR('VERSION', 
                             rule=write_version_header,
                             source= 'VERSION',
-                            target=target)
+                            target=target,
+                            always=True)
 Build.BuildContext.SAMBA_MKVERSION = SAMBA_MKVERSION
index 9832c79f280ce553afbca509c8bb48fdffa7f843..398f6eee6041daf2539526f93aff03d9c4318a57 100644 (file)
@@ -1,8 +1,7 @@
-import os;
-import subprocess;
+import Utils;
 
 class samba_version(object):
-    def __init__(self, version_dict):
+    def __init__(self, version_dict, have_git=False):
         '''Determine the version number of samba
 
 See VERSION for the format.  Entries on that file are 
@@ -63,19 +62,21 @@ also accepted as dictionary entries here
 
         if self.IS_GIT_SNAPSHOT:
             #Get version from GIT
-            try:
-                git = subprocess.Popen('git show --pretty=format:"%h%n%ct%n%H%n%cd" --stat HEAD', stdout=subprocess.PIPE, close_fds=True, shell=True)
-                (output, errors) = git.communicate()
-                lines = output.splitlines();
+            if have_git:
+                git = Utils.cmd_output('git show --pretty=format:"%h%n%ct%n%H%n%cd" --stat HEAD', silent=True)
+            else:
+                git = ''
+
+            if git == '':
+                SAMBA_VERSION_STRING += "-GIT-UNKNOWN"
+            else:
+                lines = git.splitlines();
                 self.GIT_COMMIT_ABBREV = lines[0]
                 self.GIT_COMMIT_TIME = lines[1]
                 self.GIT_COMMIT_FULLREV = lines[2]
                 self.GIT_COMMIT_DATE = lines[3]
 
                 SAMBA_VERSION_STRING += ("-GIT-" + self.GIT_COMMIT_ABBREV)
-            except IndexError:
-                SAMBA_VERSION_STRING += "-GIT-UNKNOWN"
-                pass
 
         self.OFFICIAL_STRING=SAMBA_VERSION_STRING
 
@@ -147,7 +148,7 @@ also accepted as dictionary entries here
 
 
 class samba_version_file(samba_version):
-    def __init__(self, version_file):
+    def __init__(self, version_file, have_git=False):
         '''Parse the version information from a VERSION file'''
         f = open(version_file, 'r')
         version_dict = {}
@@ -166,5 +167,4 @@ class samba_version_file(samba_version):
                 print "Failed to parse line %s from %s" % (line, version_file)
                 raise
             
-        super(samba_version_file, self).__init__(version_dict)
-        
+        super(samba_version_file, self).__init__(version_dict, have_git=have_git)
index e973d6f0ac92624d37b61ccc46fe8080313a99b0..6bf8663d6c7d04ad63cf2c60e54776f4d4664111 100644 (file)
@@ -4,14 +4,24 @@ srcdir = '..'
 blddir = 'bin'
 
 APPNAME='samba'
+VERSION=None
 
 import sys, os
 sys.path.insert(0, srcdir+"/buildtools/wafsamba")
 import wafsamba, Options, samba_dist, Scripting
 
-version = wafsamba.samba_version_file("./VERSION")
 
-VERSION=version.STRING
+def load_version(have_git=False):
+    '''load samba versions either from ./VERSION or git
+    return a version object for detailed breakdown'''
+    import samba_utils, Utils
+    if not have_git:
+        env = samba_utils.LOAD_ENVIRONMENT()
+        have_git = 'GIT' in env
+    version = wafsamba.samba_version_file("./VERSION", have_git=have_git)
+    Utils.g_module.VERSION = version.STRING
+    return version
+
 
 samba_dist.DIST_DIRS('.')
 
@@ -51,6 +61,8 @@ def set_options(opt):
 
 
 def configure(conf):
+    version = load_version(have_git=True)
+
     conf.DEFINE('PACKAGE_NAME', 'samba', quote=True)
     conf.DEFINE('PACKAGE_STRING', 'Samba ' + version.STRING, quote=True)
     conf.DEFINE('PACKAGE_TARNAME',  'samba', quote=True)
@@ -129,6 +141,7 @@ def ctags(ctx):
 # of commands in --help
 def build(bld):
     '''build all targets'''
+    load_version()
     pass
 
 
@@ -154,10 +167,12 @@ def wafdocs(ctx):
 
 def dist():
     '''makes a tarball for distribution'''
+    load_version()
     samba_dist.dist()
 
 def distcheck():
     '''test that distribution tarball builds and installs'''
+    load_version()
     import Scripting
     d = Scripting.distcheck
     d(subdir='source4')