diff options
author | Steven Knight <knight@baldmt.com> | 2002-11-04 23:01:27 (GMT) |
---|---|---|
committer | Steven Knight <knight@baldmt.com> | 2002-11-04 23:01:27 (GMT) |
commit | 487e0e7e93e26700e80a54f1ae46cf7f780ee34c (patch) | |
tree | b78016fb847bb18a0b19c501edb145c360fbcc6b /src | |
parent | 8610c9b8c655e5749899be1a9664af2ed6f87a5e (diff) | |
download | SCons-487e0e7e93e26700e80a54f1ae46cf7f780ee34c.zip SCons-487e0e7e93e26700e80a54f1ae46cf7f780ee34c.tar.gz SCons-487e0e7e93e26700e80a54f1ae46cf7f780ee34c.tar.bz2 |
Add a function to choose content signature type. (Anthony Roach)
Diffstat (limited to 'src')
-rw-r--r-- | src/CHANGES.txt | 3 | ||||
-rw-r--r-- | src/engine/SCons/Script/SConscript.py | 15 | ||||
-rw-r--r-- | src/engine/SCons/Script/__init__.py | 13 | ||||
-rw-r--r-- | src/engine/SCons/Sig/TimeStamp.py | 9 | ||||
-rw-r--r-- | src/engine/SCons/Sig/__init__.py | 22 |
5 files changed, 43 insertions, 19 deletions
diff --git a/src/CHANGES.txt b/src/CHANGES.txt index 0b1b027..c91a59e 100644 --- a/src/CHANGES.txt +++ b/src/CHANGES.txt @@ -96,6 +96,9 @@ RELEASE 0.09 - - Fix the overly-verbose stack trace on ListBuilder build errors. + - Add a SetContentSignatureType() function, allowing use of file + timestamps instead of MD5 signatures. + From sam th: - Dynamically check for the existence of utilities with which to diff --git a/src/engine/SCons/Script/SConscript.py b/src/engine/SCons/Script/SConscript.py index cb20ae9..2802e8f 100644 --- a/src/engine/SCons/Script/SConscript.py +++ b/src/engine/SCons/Script/SConscript.py @@ -39,7 +39,6 @@ import SCons.Node.FS import SCons.Platform import SCons.Tool import SCons.Util -import SCons.Sig import SCons.Options import SCons @@ -258,6 +257,7 @@ def GetLaunchDir(): return launch_dir def SetBuildSignatureType(type): + import SCons.Sig if type == 'build': SCons.Sig.build_signature = 1 elif type == 'content': @@ -265,6 +265,18 @@ def SetBuildSignatureType(type): else: raise SCons.Errors.UserError, "Unknown build signature type '%s'"%type +def SetContentSignatureType(type): + import SCons.Script + if type == 'MD5': + import SCons.Sig.MD5 + SCons.Script.sig_module = SCons.Sig.MD5 + elif type == 'timestamp': + import SCons.Sig.TimeStamp + SCons.Script.sig_module = SCons.Sig.TimeStamp + else: + raise SCons.Errors.UserError, "Unknown content signature type '%s'"%type + + class Options(SCons.Options.Options): def Update(self, env): return SCons.Options.Options.Update(self, env, arguments) @@ -321,6 +333,7 @@ def BuildDefaultGlobals(): globals['Object'] = SCons.Defaults.StaticObject globals['Repository'] = SCons.Node.FS.default_fs.Repository globals['SetBuildSignatureType'] = SetBuildSignatureType + globals['SetContentSignatureType'] = SetContentSignatureType globals['StaticLibrary'] = SCons.Defaults.StaticLibrary globals['StaticObject'] = SCons.Defaults.StaticObject globals['SharedLibrary'] = SCons.Defaults.SharedLibrary diff --git a/src/engine/SCons/Script/__init__.py b/src/engine/SCons/Script/__init__.py index fd43b9a..1403724 100644 --- a/src/engine/SCons/Script/__init__.py +++ b/src/engine/SCons/Script/__init__.py @@ -61,7 +61,6 @@ import SCons.Node.FS import SCons.Job from SCons.Errors import * import SCons.Sig -import SCons.Sig.MD5 from SCons.Taskmaster import Taskmaster import SCons.Builder import SCons.Script.SConscript @@ -178,6 +177,7 @@ exit_status = 0 # exit status, assume success by default profiling = 0 max_drift = None repositories = [] +sig_module = None # def print_it(text): @@ -1040,9 +1040,14 @@ def _main(): if not calc: if max_drift is not None: - SCons.Sig.default_calc = SCons.Sig.Calculator(SCons.Sig.MD5, - max_drift) - + if sig_module is not None: + SCons.Sig.default_calc = SCons.Sig.Calculator(module=sig_module, + max_drift=max_drift) + else: + SCons.Sig.default_calc = SCons.Sig.Calculator(max_drift=max_drift) + elif sig_module is not None: + SCons.Sig.default_calc = SCons.Sig.Calculator(module=sig_module) + calc = SCons.Sig.default_calc display("scons: Building targets ...") diff --git a/src/engine/SCons/Sig/TimeStamp.py b/src/engine/SCons/Sig/TimeStamp.py index de0600d..997742d 100644 --- a/src/engine/SCons/Sig/TimeStamp.py +++ b/src/engine/SCons/Sig/TimeStamp.py @@ -63,6 +63,13 @@ def to_string(signature): def from_string(string): """Convert a string to a timestamp""" - return int(string) + try: + return int(string) + except ValueError: + # if the signature isn't an int, then + # the user probably just switched from + # MD5 signatures to timestamp signatures, + # so ignore the error: + return None diff --git a/src/engine/SCons/Sig/__init__.py b/src/engine/SCons/Sig/__init__.py index b6a5c25..9a4c846 100644 --- a/src/engine/SCons/Sig/__init__.py +++ b/src/engine/SCons/Sig/__init__.py @@ -36,6 +36,13 @@ import SCons.Node import time import SCons.Warnings +try: + import MD5 + default_module = MD5 +except ImportError: + import TimeStamp + default_module = TimeStamp + #XXX Get rid of the global array so this becomes re-entrant. sig_files = [] @@ -265,14 +272,13 @@ class SConsignFile: except: pass - class Calculator: """ Encapsulates signature calculations and .sconsign file generating for the build engine. """ - def __init__(self, module=None, max_drift=2*24*60*60): + def __init__(self, module=default_module, max_drift=2*24*60*60): """ Initialize the calculator. @@ -281,17 +287,7 @@ class Calculator: cache content signatures. A negative value means to never cache content signatures. (defaults to 2 days) """ - if module is None: - try: - import MD5 - self.module = MD5 - except ImportError: - # fallback on timestamp signatures if MD5 is not available - # XXX add a warning message here - import TimeStamp - self.module = TimeStamp - else: - self.module = module + self.module = module self.max_drift = max_drift def bsig(self, node): |