diff options
Diffstat (limited to 'test/import.py')
| -rw-r--r-- | test/import.py | 200 |
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: |
