Only create a default Environment when asked to. (Chad Austin)
authorstevenknight <stevenknight@fdb21ef1-2011-0410-befe-b5e4ea1792b1>
Tue, 22 Jul 2003 11:38:20 +0000 (11:38 +0000)
committerstevenknight <stevenknight@fdb21ef1-2011-0410-befe-b5e4ea1792b1>
Tue, 22 Jul 2003 11:38:20 +0000 (11:38 +0000)
git-svn-id: http://scons.tigris.org/svn/scons/trunk@744 fdb21ef1-2011-0410-befe-b5e4ea1792b1

doc/man/scons.1
src/CHANGES.txt
src/engine/SCons/Defaults.py
src/engine/SCons/Node/FS.py
src/engine/SCons/Script/SConscript.py
src/engine/SCons/Script/__init__.py
test/BitKeeper.py
test/RCS.py

index b39db9310f06c8012644b528bd9ea29ce129e7e1..49fe6fde0d6faf792624cf4fd7b423f2f4a3aeae 100644 (file)
@@ -4075,6 +4075,13 @@ Later calls to
 will add to the (now empty) default-target list
 like normal.
 
+.TP
+.RI DefaultEnvironment()
+Creates and returns a default construction environment object.
+This construction environment is used internally by SCons
+in order to fetch source files transparently
+from source code management systems.
+
 .TP
 .RI Dir( name ", [" directory ])
 This returns an object that represents a given directory 
index abbf744293d40a94823eac2c8765b61a13a24d05..33e481de8a34525dfaa849996d3b05f6db3ff857 100644 (file)
@@ -17,6 +17,9 @@ RELEASE 0.XX - XXX
   - Give a Value Nodes a timestamp of the system time when they're
     created, so they'll work when using timestamp-based signatures.
 
+  - Add a DefaultEnvironment() function that only creates a default
+    environment on-demand (for fetching source files, e.g.).
+
   From Steven Knight:
 
   - Tighten up the scons -H help output.
index e2bb3b436ca7d802745048e554f64bd78b0305c0..aa0fbd94d9660bd6cdb3d87d25df153a8cfe89b2 100644 (file)
@@ -44,6 +44,7 @@ import string
 
 import SCons.Action
 import SCons.Builder
+import SCons.Environment
 import SCons.Node.Alias
 import SCons.Node.FS
 import SCons.Scanner.C
@@ -56,6 +57,15 @@ import SCons.Scanner.Prog
 # interface.
 _default_env = None
 
+# Lazily instantiate the default environment so the overhead of creating
+# it doesn't apply when it's not needed.
+def DefaultEnvironment():
+    global _default_env
+    if not _default_env:
+        _default_env = SCons.Environment.Environment()
+    return _default_env
+
+
 def alias_builder(env, target, source):
     pass
 
index 1f883307dfd02069078efde09094ecccd8a572a5..a17cee067f1510974cd7f010e97e4da4d6615e6b 100644 (file)
@@ -168,7 +168,7 @@ def get_DefaultSCCSBuilder():
         import SCons.Builder
         import SCons.Defaults
         DefaultSCCSBuilder = SCons.Builder.Builder(action = '$SCCSCOM',
-                                                   env = SCons.Defaults._default_env)
+                                                   env = SCons.Defaults.DefaultEnvironment())
     return DefaultSCCSBuilder
 
 def get_DefaultRCSBuilder():
@@ -177,7 +177,7 @@ def get_DefaultRCSBuilder():
         import SCons.Builder
         import SCons.Defaults
         DefaultRCSBuilder = SCons.Builder.Builder(action = '$RCS_COCOM',
-                                                  env = SCons.Defaults._default_env)
+                                                  env = SCons.Defaults.DefaultEnvironment())
     return DefaultRCSBuilder
 
 #
index 5f7f4b5d34bce27631b9f190918b3dafbe497f8b..313a3f23447286fcd22b2161d3594be69b130adf 100644 (file)
@@ -513,7 +513,6 @@ def BuildDefaultGlobals():
     """
 
     globals = {}
-    globals['_default_env']      = SCons.Defaults._default_env
     globals['Action']            = SCons.Action.Action
     globals['AddPostAction']     = AddPostAction
     globals['AddPreAction']      = AddPreAction
@@ -526,6 +525,7 @@ def BuildDefaultGlobals():
     globals['Configure']         = SCons.SConf.SConf
     globals['CScan']             = SCons.Defaults.CScan
     globals['Default']           = Default
+    globals['DefaultEnvironment'] = SCons.Defaults.DefaultEnvironment
     globals['Dir']               = SCons.Node.FS.default_fs.Dir
     globals['EnsurePythonVersion'] = EnsurePythonVersion
     globals['EnsureSConsVersion'] = EnsureSConsVersion
index fe565682746e24137ebe55cdc42677ade47e0282..c171a9138690afb5e69445460a7f829e5afc543e 100644 (file)
@@ -750,10 +750,6 @@ def _main(args, parser):
 
     SCons.Node.FS.default_fs.set_toplevel_dir(os.getcwd())
 
-    # Now that the top-level directory has been set,
-    # we can initialize the default Environment.
-    SCons.Defaults._default_env = SCons.Environment.Environment()
-
     scripts = []
     if options.file:
         scripts.extend(options.file)
index eb5c52c14a628bf9b35c67a3b6ba75d5242098f2..3374f92a535079fac67a13443fb11db547e3dd21 100644 (file)
@@ -298,7 +298,7 @@ def cat(env, source, target):
     for src in source:
         f.write(open(src, "rb").read())
     f.close()
-_default_env['SCCS'] = r'%s'
+DefaultEnvironment()['SCCS'] = r'%s'
 env = Environment(BUILDERS={'Cat':Builder(action=cat)})
 env.Cat('aaa.out', 'aaa.in')
 env.Cat('bbb.out', 'bbb.in')
index 68bb546c582cb3c8057b393003443d2769737152..7be008094c2dee57875a0715c0793f014173aba5 100644 (file)
@@ -181,7 +181,7 @@ def cat(env, source, target):
     for src in source:
         f.write(open(src, "rb").read())
     f.close()
-_default_env['RCS_COFLAGS'] = '-l'
+DefaultEnvironment()['RCS_COFLAGS'] = '-l'
 env = Environment(ENV=ENV, BUILDERS={'Cat':Builder(action=cat)})
 env.Cat('aaa.out', 'aaa.in')
 env.Cat('bbb.out', 'bbb.in')