Support importing Platform and Tool specifications directly.
authorstevenknight <stevenknight@fdb21ef1-2011-0410-befe-b5e4ea1792b1>
Sat, 8 Feb 2003 18:24:39 +0000 (18:24 +0000)
committerstevenknight <stevenknight@fdb21ef1-2011-0410-befe-b5e4ea1792b1>
Sat, 8 Feb 2003 18:24:39 +0000 (18:24 +0000)
git-svn-id: http://scons.tigris.org/svn/scons/trunk@580 fdb21ef1-2011-0410-befe-b5e4ea1792b1

src/CHANGES.txt
src/engine/SCons/Platform/__init__.py
src/engine/SCons/Tool/__init__.py
src/engine/SCons/Util.py
test/import.py [new file with mode: 0644]

index 6ae86ec2fe51388a1533a5979651a3da1cb8369c..e519fd24f4105a9bdb0981a3b84918354616309f 100644 (file)
@@ -74,6 +74,9 @@ RELEASE 0.11 - XXX
     --standalone-lib, and --version-lib options for easier user
     control of where the libraries get installed.
 
+  - Fix the ability to directly import and use Platform and Tool modules
+    that have been implicitly imported into an Environment().
+
   From Steve Leblanc:
 
   - Fix the output of -c -n when directories are involved, so it
index 90bb27cf49401e19f11ccd1566e27c0436838e58..565c2a040be7a7e8167ebca8dbd20c93e13f7937 100644 (file)
@@ -88,7 +88,8 @@ def platform_module(name = platform_default()):
             try:
                 file, path, desc = imp.find_module(name,
                                         sys.modules['SCons.Platform'].__path__)
-                imp.load_module(full_name, file, path, desc)
+                mod = imp.load_module(full_name, file, path, desc)
+                setattr(SCons.Platform, name, mod)
             except ImportError:
                 raise SCons.Errors.UserError, "No platform named '%s'" % name
             if file:
index 19a3cff444cf683db3f5ffb0f9a42d2cbafad3cd..7002606d901c01bab55c8204d4120c46efb20a3d 100644 (file)
@@ -59,7 +59,8 @@ def Tool(name, platform = None):
         try:
             file, path, desc = imp.find_module(name,
                                         sys.modules['SCons.Tool'].__path__)
-            imp.load_module(full_name, file, path, desc)
+            mod = imp.load_module(full_name, file, path, desc)
+            setattr(SCons.Tool, name, mod)
         except ImportError:
             raise SCons.Errors.UserError, "No tool named '%s'" % name
         if file:
index 4c80d19e85ecb4a41378594e805f9f8791da0beb..0d64e038f924fe4c2705768b12a77574395acd9c 100644 (file)
@@ -621,7 +621,9 @@ except ImportError:
         RegError = win32api.error
 
     except ImportError:
-        pass
+        class _NoError(Exception):
+            pass
+        RegError = _NoError
 
 if can_read_reg:
     HKEY_CLASSES_ROOT = hkey_mod.HKEY_CLASSES_ROOT
diff --git a/test/import.py b/test/import.py
new file mode 100644 (file)
index 0000000..76c003b
--- /dev/null
@@ -0,0 +1,88 @@
+#!/usr/bin/env python
+#
+# __COPYRIGHT__
+#
+# Permission is hereby granted, free of charge, to any person obtaining
+# a copy of this software and associated documentation files (the
+# "Software"), to deal in the Software without restriction, including
+# without limitation the rights to use, copy, modify, merge, publish,
+# distribute, sublicense, and/or sell copies of the Software, and to
+# permit persons to whom the Software is furnished to do so, subject to
+# the following conditions:
+#
+# The above copyright notice and this permission notice shall be included
+# in all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
+# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#
+
+__revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
+
+"""
+Verify that we can import and use the contents of Platform and Tool
+modules directly.
+"""
+
+import TestSCons
+
+test = TestSCons.TestSCons()
+
+platforms = ['cygwin', 'irix', 'os2', 'posix', 'win32']
+
+for platform in platforms:
+    test.write('SConstruct', """
+env = Environment(platform = '%s')
+import SCons.Platform.%s
+x = SCons.Platform.%s.generate
+""" % (platform, platform, platform))
+    test.run()
+
+tools = [
+    # Can't import '386asm' directly due to initial '3' syntax error...
+    'ar',
+    'default',
+    'dvipdf',
+    'dvips',
+    'g77',
+    'gas',
+    'gcc',
+    'gnulink',
+    # Can't import 'g++' directly due to '+' syntax error...
+    'icc',
+    'ifl',
+    'ilink',
+    'latex',
+    'lex',
+    # Can't import 'linkloc' everywhere due to Windows registry dependency...
+    'masm',
+    'mingw',
+    'mslib',
+    'mslink',
+    'msvc',
+    'nasm',
+    'pdflatex',
+    'pdftex',
+    'sgias',
+    'sgicc',
+    'sgif77',
+    'sgilink',
+    'tar',
+    'tex',
+    'yacc',
+]
+
+for tool in tools:
+    test.write('SConstruct', """
+env = Environment(tools = ['%s'])
+import SCons.Tool.%s
+x = SCons.Tool.%s.generate
+""" % (tool, tool, tool))
+    test.run()
+
+test.pass_test()