summaryrefslogtreecommitdiffstats
path: root/test/import.py
diff options
context:
space:
mode:
Diffstat (limited to 'test/import.py')
-rw-r--r--test/import.py200
1 files changed, 200 insertions, 0 deletions
diff --git a/test/import.py b/test/import.py
new file mode 100644
index 0000000..ef5ee61
--- /dev/null
+++ b/test/import.py
@@ -0,0 +1,200 @@
+#!/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 os
+import re
+import sys
+
+# must do this here, since TestSCons will chdir
+tooldir = os.path.join(os.getcwd(), 'src', 'engine', 'SCons', 'Tool')
+
+import TestSCons
+test = TestSCons.TestSCons()
+
+# Before executing any of the platform or tool modules, add some
+# null entries to the environment $PATH variable to make sure there's
+# no code that tries to index elements from the list before making sure
+# they're non-null.
+# (This was a problem in checkpoint release 0.97.d020070809.)
+os.environ['PATH'] = os.pathsep + os.environ['PATH'] + \
+ os.pathsep + os.pathsep + '/no/such/dir' + os.pathsep
+
+SConstruct_path = test.workpath('SConstruct')
+
+platforms = [
+ 'aix',
+ 'cygwin',
+ 'darwin',
+ 'hpux',
+ 'irix',
+ 'os2',
+ 'posix',
+ 'sunos',
+ 'win32'
+]
+
+for platform in platforms:
+ test.write('SConstruct', """
+print "Platform %(platform)s"
+env = Environment(platform = '%(platform)s')
+import SCons.Platform.%(platform)s
+x = SCons.Platform.%(platform)s.generate
+""" % locals())
+ test.run()
+
+ignore = ('__init__.py',
+ # Can't import these everywhere due to Windows registry dependency.
+ '386asm.py', 'linkloc.py',
+ # Directory of common stuff for MSVC and MSVS
+ 'MSCommon',
+ # Sun pkgchk and pkginfo common stuff
+ 'sun_pkg.py',
+ # RPM utilities
+ 'rpmutils.py',
+ )
+tools = []
+for name in os.listdir(tooldir):
+ if name in ignore: continue
+ if name[0] == '#': continue
+ if name[0:1] == '.': continue
+ if name[-1] == '~' : continue
+ if name[-3:] == '.py':
+ if name[-8:] not in ('Tests.py', 'ommon.py'):
+ tools.append(name[:-3])
+ elif os.path.exists(os.path.join(tooldir,name,'__init__.py')):
+ tools.append(name)
+tools.sort() # why not?
+
+#if sys.platform == 'win32':
+# Just comment out (for now?) due to registry dependency.
+# tools.extend([
+# '386asm',
+# 'linkloc',
+# ])
+
+# Intel no compiler warning..
+intel_no_compiler_warning = """
+scons: warning: Failed to find Intel compiler for version='None', abi='[^']*'
+""" + TestSCons.file_expr
+
+# Intel no top dir warning.
+intel_no_top_dir_warning = """
+scons: warning: Can't find Intel compiler top dir for version='None', abi='[^']*'
+""" + TestSCons.file_expr
+
+# Intel no license directory warning
+intel_license_warning = re.escape("""
+scons: warning: Intel license dir was not found. Tried using the INTEL_LICENSE_FILE environment variable (), the registry () and the default path (C:\Program Files\Common Files\Intel\Licenses). Using the default path as a last resort.
+""") + TestSCons.file_expr
+
+intel_warnings = [
+ re.compile(intel_license_warning),
+ re.compile(intel_no_compiler_warning),
+ re.compile(intel_no_compiler_warning + intel_license_warning),
+ re.compile(intel_no_top_dir_warning),
+ re.compile(intel_no_top_dir_warning + intel_license_warning),
+]
+
+moc = test.where_is('moc')
+if moc:
+ import os.path
+
+ qtdir = os.path.dirname(os.path.dirname(moc))
+
+ qt_err = r"""
+scons: warning: Could not detect qt, using moc executable as a hint \(QTDIR=%(qtdir)s\)
+""" % locals()
+
+else:
+
+ qt_err = """
+scons: warning: Could not detect qt, using empty QTDIR
+"""
+
+qt_warnings = [ re.compile(qt_err + TestSCons.file_expr) ]
+
+error_output = {
+ 'icl' : intel_warnings,
+ 'intelc' : intel_warnings,
+ 'qt' : qt_warnings,
+}
+
+# An SConstruct for importing Tool names that have illegal characters
+# for Python variable names.
+indirect_import = """\
+print "Tool %(tool)s (indirect)"
+env = Environment(tools = ['%(tool)s'])
+
+SCons = __import__('SCons.Tool.%(tool)s', globals(), locals(), [])
+m = getattr(SCons.Tool, '%(tool)s')
+env = Environment()
+m.generate(env)
+"""
+
+# An SConstruct for importing Tool names "normally."
+direct_import = """\
+print "Tool %(tool)s (direct)"
+env = Environment(tools = ['%(tool)s'])
+
+import SCons.Tool.%(tool)s
+env = Environment()
+SCons.Tool.%(tool)s.exists(env)
+SCons.Tool.%(tool)s.generate(env)
+"""
+
+failures = []
+for tool in tools:
+ if tool[0] in '0123456789' or '+' in tool or tool in ('as',):
+ test.write('SConstruct', indirect_import % locals())
+ else:
+ test.write('SConstruct', direct_import % locals())
+ test.run(stderr=None)
+ stderr = test.stderr()
+ if stderr:
+ matched = None
+ for expression in error_output.get(tool, []):
+ if expression.match(stderr):
+ matched = 1
+ break
+ if not matched:
+ print "Failed importing '%s', stderr:" % tool
+ print stderr
+ failures.append(tool)
+
+test.fail_test(len(failures))
+
+test.pass_test()
+
+# Local Variables:
+# tab-width:4
+# indent-tabs-mode:nil
+# End:
+# vim: set expandtab tabstop=4 shiftwidth=4: