summaryrefslogtreecommitdiffstats
path: root/src/engine/SCons
diff options
context:
space:
mode:
authorSteven Knight <knight@baldmt.com>2002-11-04 23:01:27 (GMT)
committerSteven Knight <knight@baldmt.com>2002-11-04 23:01:27 (GMT)
commit487e0e7e93e26700e80a54f1ae46cf7f780ee34c (patch)
treeb78016fb847bb18a0b19c501edb145c360fbcc6b /src/engine/SCons
parent8610c9b8c655e5749899be1a9664af2ed6f87a5e (diff)
downloadSCons-487e0e7e93e26700e80a54f1ae46cf7f780ee34c.zip
SCons-487e0e7e93e26700e80a54f1ae46cf7f780ee34c.tar.gz
SCons-487e0e7e93e26700e80a54f1ae46cf7f780ee34c.tar.bz2
Add a function to choose content signature type. (Anthony Roach)
Diffstat (limited to 'src/engine/SCons')
-rw-r--r--src/engine/SCons/Script/SConscript.py15
-rw-r--r--src/engine/SCons/Script/__init__.py13
-rw-r--r--src/engine/SCons/Sig/TimeStamp.py9
-rw-r--r--src/engine/SCons/Sig/__init__.py22
4 files changed, 40 insertions, 19 deletions
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):