summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2010-11-16 12:05:14 +1100
committerAndrew Tridgell <tridge@samba.org>2010-11-16 01:51:54 +0000
commitfe5c48cbed29b669f17370436d0cf18ca0ccb474 (patch)
treeddb320fca8458d2b1f89edf96614d623f0ffbf91
parent96bdcf7ea9d06e4681af012974458d67d264cfda (diff)
downloadsamba-fe5c48cbed29b669f17370436d0cf18ca0ccb474.tar.gz
samba-fe5c48cbed29b669f17370436d0cf18ca0ccb474.tar.bz2
samba-fe5c48cbed29b669f17370436d0cf18ca0ccb474.zip
waf: added --git-local-changes configure option
if you use --git-local-changes then the version number that waf extracts from git will have a '+' on the end if you have local changes, as determined by running 'git diff'. This used to be the default, but unfortunately it is far too slow on some systems. On a NFS build system I was using the first line of configure took about 2 minutes. Autobuild-User: Andrew Tridgell <tridge@samba.org> Autobuild-Date: Tue Nov 16 01:51:54 UTC 2010 on sn-devel-104
-rw-r--r--buildtools/wafsamba/samba_patterns.py4
-rw-r--r--buildtools/wafsamba/samba_version.py32
-rw-r--r--buildtools/wafsamba/wscript5
-rw-r--r--source3/wscript10
-rw-r--r--source4/wscript16
5 files changed, 38 insertions, 29 deletions
diff --git a/buildtools/wafsamba/samba_patterns.py b/buildtools/wafsamba/samba_patterns.py
index 9693c5965e..37ef4198a6 100644
--- a/buildtools/wafsamba/samba_patterns.py
+++ b/buildtools/wafsamba/samba_patterns.py
@@ -10,9 +10,7 @@ def write_version_header(task):
src = task.inputs[0].srcpath(task.env)
tgt = task.outputs[0].bldpath(task.env)
- have_git = 'GIT' in task.env
-
- version = samba_version_file(src, task.env.srcdir, have_git=have_git)
+ version = samba_version_file(src, task.env.srcdir, env=task.env)
string = str(version)
f = open(tgt, 'w')
diff --git a/buildtools/wafsamba/samba_version.py b/buildtools/wafsamba/samba_version.py
index e6a6ccf28f..df715840cb 100644
--- a/buildtools/wafsamba/samba_version.py
+++ b/buildtools/wafsamba/samba_version.py
@@ -44,14 +44,18 @@ def bzr_version_summary(path):
return (ret, fields)
-def git_version_summary(path, have_git):
+def git_version_summary(path, env=None):
# Get version from GIT
- if not have_git:
+ if not 'GIT' in env:
return ("GIT-UNKNOWN", {})
- git = Utils.cmd_output('git show --pretty=format:"%h%n%ct%n%H%n%cd" --stat HEAD', silent=True)
+ os.putenv('GIT_DIR', '%s/.git' % path)
+ git = Utils.cmd_output(env.GIT + ' show --pretty=format:"%h%n%ct%n%H%n%cd" --stat HEAD', silent=True)
lines = git.splitlines()
+ if not lines or len(lines) < 4:
+ return ("GIT-UNKNOWN", {})
+
fields = {
"GIT_COMMIT_ABBREV": lines[0],
"GIT_COMMIT_FULLREV": lines[2],
@@ -61,18 +65,20 @@ def git_version_summary(path, have_git):
ret = "GIT-" + fields["GIT_COMMIT_ABBREV"]
- clean = Utils.cmd_output('git diff HEAD | wc -l', silent=True)
- if clean == "0\n":
- fields["COMMIT_IS_CLEAN"] = 1
- else:
- fields["COMMIT_IS_CLEAN"] = 0
- ret += "+"
+ if env.GIT_LOCAL_CHANGES:
+ clean = Utils.cmd_output('git diff HEAD | wc -l', silent=True).strip()
+ if clean == "0":
+ fields["COMMIT_IS_CLEAN"] = 1
+ else:
+ fields["COMMIT_IS_CLEAN"] = 0
+ ret += "+"
+
return (ret, fields)
class SambaVersion(object):
- def __init__(self, version_dict, path, have_git=False):
+ def __init__(self, version_dict, path, env=None):
'''Determine the version number of samba
See VERSION for the format. Entries on that file are
@@ -135,7 +141,7 @@ also accepted as dictionary entries here
if self.IS_SNAPSHOT:
if os.path.exists(os.path.join(path, ".git")):
- suffix, self.vcs_fields = git_version_summary(path, have_git)
+ suffix, self.vcs_fields = git_version_summary(path, env=env)
elif os.path.exists(os.path.join(path, ".bzr")):
suffix, self.vcs_fields = bzr_version_summary(path)
else:
@@ -217,7 +223,7 @@ also accepted as dictionary entries here
return string
-def samba_version_file(version_file, path, have_git=False):
+def samba_version_file(version_file, path, env=None):
'''Parse the version information from a VERSION file'''
f = open(version_file, 'r')
@@ -237,4 +243,4 @@ def samba_version_file(version_file, path, have_git=False):
print("Failed to parse line %s from %s" % (line, version_file))
raise
- return SambaVersion(version_dict, path, have_git=have_git)
+ return SambaVersion(version_dict, path, env=env)
diff --git a/buildtools/wafsamba/wscript b/buildtools/wafsamba/wscript
index 6913f63c91..0d91237d48 100644
--- a/buildtools/wafsamba/wscript
+++ b/buildtools/wafsamba/wscript
@@ -96,6 +96,9 @@ def set_options(opt):
gr.add_option('--pedantic',
help=("Enable even more compiler warnings"),
action='store_true', dest='pedantic', default=False)
+ gr.add_option('--git-local-changes',
+ help=("mark version with + if local git changes"),
+ action='store_true', dest='GIT_LOCAL_CHANGES', default=False)
gr.add_option('--abi-check',
help=("Check ABI signatures for libraries"),
@@ -244,6 +247,8 @@ def configure(conf):
except:
conf.env.ABI_CHECK = False
+ conf.env.GIT_LOCAL_CHANGES = Options.options.GIT_LOCAL_CHANGES
+
conf.CHECK_COMMAND(['uname', '-a'],
msg='Checking build system',
define='BUILD_SYSTEM',
diff --git a/source3/wscript b/source3/wscript
index 1164ff1d70..510bed5749 100644
--- a/source3/wscript
+++ b/source3/wscript
@@ -14,14 +14,14 @@ import build.charset
import samba_utils
import samba3
-def load_version(have_git=False):
+def load_version(env=None):
'''load samba versions either from ./VERSION or git
return a version object for detailed breakdown'''
import samba_utils, Utils
- if not have_git:
+ if not env:
env = samba_utils.LOAD_ENVIRONMENT()
- have_git = 'GIT' in env
- version = wafsamba.samba_version_file("./VERSION", "..", have_git=have_git)
+
+ version = wafsamba.samba_version_file("./VERSION", "..", env=env)
Utils.g_module.VERSION = version.STRING
return version
@@ -67,7 +67,7 @@ def set_options(opt):
def configure(conf):
from samba_utils import TO_LIST
- version = load_version(have_git=True)
+ version = load_version(env=conf.env)
conf.DEFINE('CONFIG_H_IS_FROM_SAMBA', 1)
conf.DEFINE('_SAMBA_BUILD_', version.MAJOR, add_to_cflags=True)
diff --git a/source4/wscript b/source4/wscript
index bf4ccbdfca..80916f5579 100644
--- a/source4/wscript
+++ b/source4/wscript
@@ -11,14 +11,14 @@ sys.path.insert(0, srcdir+"/buildtools/wafsamba")
import wafsamba, Options, samba_dist, Scripting, Utils
-def load_version(have_git=False):
+def load_version(env=None):
'''load samba versions either from ./VERSION or git
return a version object for detailed breakdown'''
import samba_utils, Utils
- if not have_git:
+ if not env:
env = samba_utils.LOAD_ENVIRONMENT()
- have_git = 'GIT' in env
- version = wafsamba.samba_version_file("./VERSION", "..", have_git=have_git)
+
+ version = wafsamba.samba_version_file("./VERSION", "..", env)
Utils.g_module.VERSION = version.STRING
return version
@@ -61,7 +61,7 @@ def set_options(opt):
def configure(conf):
- version = load_version(have_git=True)
+ version = load_version(env=conf.env)
conf.DEFINE('CONFIG_H_IS_FROM_SAMBA', 1)
conf.DEFINE('_SAMBA_BUILD_', version.MAJOR, add_to_cflags=True)
@@ -150,7 +150,7 @@ def ctags(ctx):
# of commands in --help
def build(bld):
'''build all targets'''
- load_version()
+ load_version(env=bld.env)
pass
@@ -176,12 +176,12 @@ def wafdocs(ctx):
def dist():
'''makes a tarball for distribution'''
- load_version()
+ load_version(env=None)
samba_dist.dist()
def distcheck():
'''test that distribution tarball builds and installs'''
- load_version()
+ load_version(env=None)
import Scripting
d = Scripting.distcheck
d(subdir='source4')