diff options
author | Steven Knight <knight@baldmt.com> | 2007-02-11 05:02:05 +0000 |
---|---|---|
committer | Steven Knight <knight@baldmt.com> | 2007-02-11 05:02:05 +0000 |
commit | ba21859077d70b0038dd61735c2e185da3335d01 (patch) | |
tree | 107c065697f6b6bb61356d82f4876df7f0eb378c /test/SWIG | |
parent | 01f2a2ac8c27e808dc57c8251ed1bf8201e6405c (diff) | |
download | scons-ba21859077d70b0038dd61735c2e185da3335d01.tar.gz |
Merged revisions 1784-1824 via svnmerge from
http://scons.tigris.org/svn/scons/branches/core
........
r1786 | stevenknight | 2007-01-25 15:29:15 -0600 (Thu, 25 Jan 2007) | 1 line
0.96.D555 - Doc string updates for TaskMaster to better describe the architecture. Get rid of some no-longer-used code.
........
r1787 | stevenknight | 2007-01-25 23:24:31 -0600 (Thu, 25 Jan 2007) | 1 line
0.96.D556 - Packaging changes to support building packages in an arbitrary directory.
........
r1788 | stevenknight | 2007-01-30 20:35:39 -0600 (Tue, 30 Jan 2007) | 1 line
0.96.D557 - Make the Scanner.Base class able to handle Scanner.Selector functionality (i.e., a dictionary to select other scanners) and prepare to deprecate Scanner.Selector and Scanner.Scanner() in the future.
........
r1789 | stevenknight | 2007-01-30 20:45:23 -0600 (Tue, 30 Jan 2007) | 1 line
0.96.D558 - Add support for a site-scons subdirectory. (Gary Oberbrunner)
........
r1790 | stevenknight | 2007-01-31 00:36:20 -0600 (Wed, 31 Jan 2007) | 1 line
0.96.D559 - Clean up various module imports and other pychecker-detected problems.
........
r1791 | stevenknight | 2007-01-31 11:51:04 -0600 (Wed, 31 Jan 2007) | 1 line
0.96.D560 - Fix detection of Java anonymous classes if a newline precedes the opening brace. (Leanid Nazdrynau)
........
r1792 | stevenknight | 2007-02-02 11:57:59 -0600 (Fri, 02 Feb 2007) | 1 line
0.96.D561 - Add a --bootstrap_src option to bootstrap.py; search the bootstrap.py directory by default. (Greg Noel)
........
r1793 | stevenknight | 2007-02-02 18:04:52 -0600 (Fri, 02 Feb 2007) | 1 line
0.96.D562 - Don't check the build/*/gentoo directories for copyright strings.
........
r1794 | stevenknight | 2007-02-02 18:12:43 -0600 (Fri, 02 Feb 2007) | 1 line
0.96.D563 - Fix pychecker clean-ups on later Python versions.
........
r1795 | stevenknight | 2007-02-02 18:38:47 -0600 (Fri, 02 Feb 2007) | 1 line
0.96.D564 - Add a NoCache() function to allow marking targets as not being suitable for propagating/ to (or retrieving from) CacheDir(). (Dave Vitek)
........
r1796 | stevenknight | 2007-02-02 20:08:33 -0600 (Fri, 02 Feb 2007) | 1 line
0.96.D565 - Add a --tree= option, to make the interface to dumping dependency graphs a little clearner, and give it a 'prune' option to avoid repeating the dependency walk for Nodes we've already visited.
........
r1797 | stevenknight | 2007-02-03 20:37:25 -0600 (Sat, 03 Feb 2007) | 1 line
0.96.D566 - Packaging fix: don't add '#' to the beginning of a build_dir name if it's already an absolute path.
........
r1798 | stevenknight | 2007-02-03 20:53:42 -0600 (Sat, 03 Feb 2007) | 1 line
0.96.D567 - Add backwards-compatibility for set() types, and restore the line that used them in the compatibility _subprocess.py module.
........
r1799 | stevenknight | 2007-02-05 10:30:28 -0600 (Mon, 05 Feb 2007) | 1 line
0.96.D568 - Capture outline and build configuration for a possible future Developer's Guide.
........
r1800 | stevenknight | 2007-02-05 11:03:37 -0600 (Mon, 05 Feb 2007) | 1 line
0.96.D569 - Exclude the new developer guide MANIFEST from Copyright string checks.
........
r1801 | stevenknight | 2007-02-05 11:16:04 -0600 (Mon, 05 Feb 2007) | 1 line
0.96.D570 - Track fix in upstream subprocess.py. (Ralf W. Grosse-Kunstleve)
........
r1802 | stevenknight | 2007-02-05 20:05:59 -0600 (Mon, 05 Feb 2007) | 1 line
0.96.D571 - Change the Windows installer to register scons.bat as an 'App Path', so the directory doesn't need to be added to %PATH%.
........
r1803 | stevenknight | 2007-02-05 21:33:01 -0600 (Mon, 05 Feb 2007) | 1 line
0.96.D572 - Prepare SConf for use with the subprocess module by refactoring the Unbuffered class.
........
r1804 | stevenknight | 2007-02-05 22:37:09 -0600 (Mon, 05 Feb 2007) | 1 line
0.96.D573 - Get rid of left-over Node.Node.{pre,post}_actions attributes.
........
r1805 | stevenknight | 2007-02-06 12:04:14 -0600 (Tue, 06 Feb 2007) | 1 line
0.96.D574 - Remove leftover print in the test/CacheDir/NoCache.py test.
........
r1806 | stevenknight | 2007-02-06 17:11:03 -0600 (Tue, 06 Feb 2007) | 1 line
0.96.D575 - Support the ability to evaluate a ${} construction variable to select the spawner function.
........
r1809 | stevenknight | 2007-02-07 00:30:10 -0600 (Wed, 07 Feb 2007) | 1 line
0.96.D576 - Documentation fixes and updates.
........
r1810 | stevenknight | 2007-02-07 15:51:20 -0600 (Wed, 07 Feb 2007) | 1 line
0.96.D577 - Don't expect a bootstrap.py runtest.py file to be generated when swig -noproxy is used.
........
r1811 | stevenknight | 2007-02-07 16:55:06 -0600 (Wed, 07 Feb 2007) | 1 line
0.96.D578 - Make --srcdir a synonym for -Y/--repository.
........
r1812 | stevenknight | 2007-02-07 23:46:22 -0600 (Wed, 07 Feb 2007) | 1 line
0.96.D579 - More doc updates: PathAccept, #include+Repository double-quote limitation.
........
r1817 | stevenknight | 2007-02-08 12:46:42 -0600 (Thu, 08 Feb 2007) | 1 line
0.96.D580 - Fix use of toolpath with BuildDir.
........
r1818 | stevenknight | 2007-02-08 12:59:23 -0600 (Thu, 08 Feb 2007) | 1 line
0.96.D581 - Enable build of the text version of the User's Guide.
........
r1819 | stevenknight | 2007-02-08 14:21:31 -0600 (Thu, 08 Feb 2007) | 1 line
0.96.D582 - Fix handling of Java inner classes with JARCHDIR.
........
r1820 | stevenknight | 2007-02-08 14:39:33 -0600 (Thu, 08 Feb 2007) | 1 line
0.96.D583 - Add linking with -lm to the dmd.py Tool smart linker. (Anonymous)
........
r1821 | stevenknight | 2007-02-08 17:26:29 -0600 (Thu, 08 Feb 2007) | 1 line
0.96.D584 - Fix ParseConfig() when *FLAGS variables have been replaced with strings.
........
r1822 | stevenknight | 2007-02-09 12:21:17 -0600 (Fri, 09 Feb 2007) | 1 line
0.96.D585 - Fix installation of file names beginning with #. (Dave Weber)
........
r1823 | stevenknight | 2007-02-09 14:14:47 -0600 (Fri, 09 Feb 2007) | 1 line
0.96.D586 - Post-review improvements to recent toolpath and MergeFlags() changes. (Gary Oberbrunner, Greg Noel)
........
r1824 | stevenknight | 2007-02-10 00:53:13 -0600 (Sat, 10 Feb 2007) | 1 line
0.96.D587 - Commonize flags initialization between the c and c++ Tools.
........
Diffstat (limited to 'test/SWIG')
-rw-r--r-- | test/SWIG/SWIG.py | 177 | ||||
-rw-r--r-- | test/SWIG/implicit-dependencies.py | 110 | ||||
-rw-r--r-- | test/SWIG/live.py | 164 | ||||
-rw-r--r-- | test/SWIG/noproxy.py | 108 | ||||
-rw-r--r-- | test/SWIG/remove-modules.py | 92 |
5 files changed, 483 insertions, 168 deletions
diff --git a/test/SWIG/SWIG.py b/test/SWIG/SWIG.py index 791d0e0d..dfee5ef2 100644 --- a/test/SWIG/SWIG.py +++ b/test/SWIG/SWIG.py @@ -24,6 +24,10 @@ __revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__" +""" +Verify that the swig tool generates file names that we expect. +""" + import os import string import sys @@ -37,19 +41,11 @@ if sys.platform =='darwin': python = "/System/Library/Frameworks/Python.framework/Versions/Current/bin/python" _python_ = '"' + python + '"' else: - python = TestSCons.python _python_ = TestSCons._python_ _exe = TestSCons._exe _obj = TestSCons._obj -# swig-python expects specific filenames. -# the platform specific suffix won't necessarily work. -if sys.platform == 'win32': - _dll = '.dll' -else: - _dll = '.so' - test = TestSCons.TestSCons() @@ -105,168 +101,13 @@ swig test.run(arguments = '.', stderr = None) test.run(program = test.workpath('test1' + _exe), stdout = "test1.i\n") -test.fail_test(not os.path.exists(test.workpath('test1_wrap.c'))) -test.fail_test(not os.path.exists(test.workpath('test1_wrap' + _obj))) +test.must_exist(test.workpath('test1_wrap.c')) +test.must_exist(test.workpath('test1_wrap' + _obj)) -test.fail_test(test.read('test2_wrap.c') != "test2.i\n") +test.must_match('test2_wrap.c', "test2.i\n") test.run(program = test.workpath('test3' + _exe), stdout = "test3.i\n") -test.fail_test(not os.path.exists(test.workpath('test3_wrap.cc'))) -test.fail_test(not os.path.exists(test.workpath('test3_wrap' + _obj))) - - - -swig = test.where_is('swig') - -if swig: - - version = sys.version[:3] # see also sys.prefix documentation - - # handle testing on other platforms: - ldmodule_prefix = '_' - - frameworks = '' - platform_sys_prefix = sys.prefix - if sys.platform == 'darwin': - # OS X has a built-in Python but no static libpython - # so you should link to it using apple's 'framework' scheme. - # (see top of file for further explanation) - frameworks = '-framework Python' - platform_sys_prefix = '/System/Library/Frameworks/Python.framework/Versions/%s/' % version - - test.write("wrapper.py", -"""import os -import string -import sys -open('%s', 'wb').write("wrapper.py\\n") -os.system(string.join(sys.argv[1:], " ")) -""" % string.replace(test.workpath('wrapper.out'), '\\', '\\\\')) - - test.write('SConstruct', """ -foo = Environment(SWIGFLAGS='-python', - CPPPATH='%(platform_sys_prefix)s/include/python%(version)s/', - LDMODULEPREFIX='%(ldmodule_prefix)s', - LDMODULESUFFIX='%(_dll)s', - FRAMEWORKSFLAGS='%(frameworks)s', - ) - -swig = foo.Dictionary('SWIG') -bar = foo.Clone(SWIG = r'%(_python_)s wrapper.py ' + swig) -foo.LoadableModule(target = 'foo', source = ['foo.c', 'foo.i']) -bar.LoadableModule(target = 'bar', source = ['bar.c', 'bar.i']) -""" % locals()) - - test.write("foo.c", """\ -char * -foo_string() -{ - return "This is foo.c!"; -} -""") - - test.write("foo.i", """\ -%module foo -%{ -/* Put header files here (optional) */ -%} - -extern char *foo_string(); -""") - - test.write("bar.c", """\ -char * -bar_string() -{ - return "This is bar.c!"; -} -""") - - test.write("bar.i", """\ -%module \t bar -%{ -/* Put header files here (optional) */ -%} - -extern char *bar_string(); -""") - - test.run(arguments = ldmodule_prefix+'foo' + _dll) - - test.must_not_exist(test.workpath('wrapper.out')) - - test.run(program = python, stdin = """\ -import foo -print foo.foo_string() -""", stdout="""\ -This is foo.c! -""") - - test.up_to_date(arguments = ldmodule_prefix+'foo' + _dll) - - test.run(arguments = ldmodule_prefix+'bar' + _dll) - - test.must_match('wrapper.out', "wrapper.py\n") - - test.run(program = python, stdin = """\ -import foo -import bar -print foo.foo_string() -print bar.bar_string() -""", stdout="""\ -This is foo.c! -This is bar.c! -""") - - test.up_to_date(arguments = '.') - - # Test that swig-generated modules are removed - # The %module directive specifies the module name - test.write("module.i", """\ -%module modulename -""") - test.write('SConstruct', """ -foo = Environment(SWIGFLAGS='-python', - CPPPATH='%(platform_sys_prefix)s/include/python%(version)s/', - LDMODULEPREFIX='%(ldmodule_prefix)s', - LDMODULESUFFIX='%(_dll)s', - FRAMEWORKSFLAGS='%(frameworks)s', - ) - -foo.LoadableModule(target = 'modulename', source = ['module.i']) -""" % locals()) - test.run() - test.must_exist(test.workpath("modulename.py")) - test.run(arguments = "-c") - test.must_not_exist(test.workpath("modulename.py")) - - # Test that implicit dependencies are caught - - test.write("dependency.i", """\ -%module dependency -""") - test.write("dependent.i", """\ -%module dependent - -%include dependency.i -""") - test.write('SConstruct', """ -foo = Environment(SWIGFLAGS='-python', - CPPPATH='%(platform_sys_prefix)s/include/python%(version)s/', - LDMODULEPREFIX='%(ldmodule_prefix)s', - LDMODULESUFFIX='%(_dll)s', - FRAMEWORKSFLAGS='%(frameworks)s', - ) - -swig = foo.Dictionary('SWIG') -bar = foo.Clone(SWIG = r'%(_python_)s wrapper.py ' + swig) -foo.CFile(target = 'dependent', source = ['dependent.i']) -""" % locals()) - - test.run() - test.write("dependency.i", """%module dependency - -extern char *dependency_string(); -""") - test.not_up_to_date(arguments = "dependent_wrap.c") +test.must_exist(test.workpath('test3_wrap.cc')) +test.must_exist(test.workpath('test3_wrap' + _obj)) test.pass_test() diff --git a/test/SWIG/implicit-dependencies.py b/test/SWIG/implicit-dependencies.py new file mode 100644 index 00000000..55645a4e --- /dev/null +++ b/test/SWIG/implicit-dependencies.py @@ -0,0 +1,110 @@ +#!/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 SWIG implicit dependencies are caught. +""" + +import sys + +import TestSCons + +if sys.platform =='darwin': + # change to make it work with stock OS X python framework + # we can't link to static libpython because there isn't one on OS X + # so we link to a framework version. However, testing must also + # use the same version, or else you get interpreter errors. + python = "/System/Library/Frameworks/Python.framework/Versions/Current/bin/python" + _python_ = '"' + python + '"' +else: + python = TestSCons.python + _python_ = TestSCons._python_ + +# swig-python expects specific filenames. +# the platform specific suffix won't necessarily work. +if sys.platform == 'win32': + _dll = '.dll' +else: + _dll = '.so' + +test = TestSCons.TestSCons() + +swig = test.where_is('swig') + +if not swig: + test.skip_test('Can not find installed "swig", skipping test.\n') + + + +version = sys.version[:3] # see also sys.prefix documentation + +# handle testing on other platforms: +ldmodule_prefix = '_' + +frameworks = '' +platform_sys_prefix = sys.prefix +if sys.platform == 'darwin': + # OS X has a built-in Python but no static libpython + # so you should link to it using apple's 'framework' scheme. + # (see top of file for further explanation) + frameworks = '-framework Python' + platform_sys_prefix = '/System/Library/Frameworks/Python.framework/Versions/%s/' % version + +test.write("dependency.i", """\ +%module dependency +""") + +test.write("dependent.i", """\ +%module dependent + +%include dependency.i +""") + +test.write('SConstruct', """ +foo = Environment(SWIGFLAGS='-python', + CPPPATH='%(platform_sys_prefix)s/include/python%(version)s/', + LDMODULEPREFIX='%(ldmodule_prefix)s', + LDMODULESUFFIX='%(_dll)s', + FRAMEWORKSFLAGS='%(frameworks)s', + ) + +swig = foo.Dictionary('SWIG') +bar = foo.Clone(SWIG = r'%(_python_)s wrapper.py ' + swig) +foo.CFile(target = 'dependent', source = ['dependent.i']) +""" % locals()) + +test.run() + +test.write("dependency.i", """%module dependency + +extern char *dependency_string(); +""") + +test.not_up_to_date(arguments = "dependent_wrap.c") + + + +test.pass_test() diff --git a/test/SWIG/live.py b/test/SWIG/live.py new file mode 100644 index 00000000..c6b45d22 --- /dev/null +++ b/test/SWIG/live.py @@ -0,0 +1,164 @@ +#!/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__" + +""" +Test SWIG behavior with a live, installed SWIG. +""" + +import string +import sys + +import TestSCons + +if sys.platform =='darwin': + # change to make it work with stock OS X python framework + # we can't link to static libpython because there isn't one on OS X + # so we link to a framework version. However, testing must also + # use the same version, or else you get interpreter errors. + python = "/System/Library/Frameworks/Python.framework/Versions/Current/bin/python" + _python_ = '"' + python + '"' +else: + python = TestSCons.python + _python_ = TestSCons._python_ + +# swig-python expects specific filenames. +# the platform specific suffix won't necessarily work. +if sys.platform == 'win32': + _dll = '.dll' +else: + _dll = '.so' + +test = TestSCons.TestSCons() + +swig = test.where_is('swig') + +if not swig: + test.skip_test('Can not find installed "swig", skipping test.\n') + + + +version = sys.version[:3] # see also sys.prefix documentation + +# handle testing on other platforms: +ldmodule_prefix = '_' + +frameworks = '' +platform_sys_prefix = sys.prefix +if sys.platform == 'darwin': + # OS X has a built-in Python but no static libpython + # so you should link to it using apple's 'framework' scheme. + # (see top of file for further explanation) + frameworks = '-framework Python' + platform_sys_prefix = '/System/Library/Frameworks/Python.framework/Versions/%s/' % version + +test.write("wrapper.py", +"""import os +import string +import sys +open('%s', 'wb').write("wrapper.py\\n") +os.system(string.join(sys.argv[1:], " ")) +""" % string.replace(test.workpath('wrapper.out'), '\\', '\\\\')) + +test.write('SConstruct', """ +foo = Environment(SWIGFLAGS='-python', + CPPPATH='%(platform_sys_prefix)s/include/python%(version)s/', + LDMODULEPREFIX='%(ldmodule_prefix)s', + LDMODULESUFFIX='%(_dll)s', + FRAMEWORKSFLAGS='%(frameworks)s', + ) + +swig = foo.Dictionary('SWIG') +bar = foo.Clone(SWIG = r'%(_python_)s wrapper.py ' + swig) +foo.LoadableModule(target = 'foo', source = ['foo.c', 'foo.i']) +bar.LoadableModule(target = 'bar', source = ['bar.c', 'bar.i']) +""" % locals()) + +test.write("foo.c", """\ +char * +foo_string() +{ + return "This is foo.c!"; +} +""") + +test.write("foo.i", """\ +%module foo +%{ +/* Put header files here (optional) */ +%} + +extern char *foo_string(); +""") + +test.write("bar.c", """\ +char * +bar_string() +{ + return "This is bar.c!"; +} +""") + +test.write("bar.i", """\ +%module \t bar +%{ +/* Put header files here (optional) */ +%} + +extern char *bar_string(); +""") + +test.run(arguments = ldmodule_prefix+'foo' + _dll) + +test.must_not_exist(test.workpath('wrapper.out')) + +test.run(program = python, stdin = """\ +import foo +print foo.foo_string() +""", stdout="""\ +This is foo.c! +""") + +test.up_to_date(arguments = ldmodule_prefix+'foo' + _dll) + +test.run(arguments = ldmodule_prefix+'bar' + _dll) + +test.must_match('wrapper.out', "wrapper.py\n") + +test.run(program = python, stdin = """\ +import foo +import bar +print foo.foo_string() +print bar.bar_string() +""", stdout="""\ +This is foo.c! +This is bar.c! +""") + +test.up_to_date(arguments = '.') + + + +test.pass_test() diff --git a/test/SWIG/noproxy.py b/test/SWIG/noproxy.py new file mode 100644 index 00000000..c0f6da61 --- /dev/null +++ b/test/SWIG/noproxy.py @@ -0,0 +1,108 @@ +#!/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 SCons realizes the -noproxy option means no .py file will +be created. +""" + +import sys + +import TestSCons + +if sys.platform =='darwin': + # change to make it work with stock OS X python framework + # we can't link to static libpython because there isn't one on OS X + # so we link to a framework version. However, testing must also + # use the same version, or else you get interpreter errors. + python = "/System/Library/Frameworks/Python.framework/Versions/Current/bin/python" + _python_ = '"' + python + '"' +else: + python = TestSCons.python + _python_ = TestSCons._python_ + +# swig-python expects specific filenames. +# the platform specific suffix won't necessarily work. +if sys.platform == 'win32': + _dll = '.dll' +else: + _dll = '.so' + +test = TestSCons.TestSCons() + +swig = test.where_is('swig') + +if not swig: + test.skip_test('Can not find installed "swig", skipping test.\n') + + + +version = sys.version[:3] # see also sys.prefix documentation + +# handle testing on other platforms: +ldmodule_prefix = '_' + +frameworks = '' +platform_sys_prefix = sys.prefix +if sys.platform == 'darwin': + # OS X has a built-in Python but no static libpython + # so you should link to it using apple's 'framework' scheme. + # (see top of file for further explanation) + frameworks = '-framework Python' + platform_sys_prefix = '/System/Library/Frameworks/Python.framework/Versions/%s/' % version + +test.write("dependency.i", """\ +%module dependency +""") + +test.write("dependent.i", """\ +%module dependent + +%include dependency.i +""") + +test.write('SConstruct', """ +foo = Environment(SWIGFLAGS=['-python', '-noproxy'], + CPPPATH='%(platform_sys_prefix)s/include/python%(version)s/', + LDMODULEPREFIX='%(ldmodule_prefix)s', + LDMODULESUFFIX='%(_dll)s', + FRAMEWORKSFLAGS='%(frameworks)s', + ) + +swig = foo.Dictionary('SWIG') +bar = foo.Clone(SWIG = r'%(_python_)s wrapper.py ' + swig) +foo.CFile(target = 'dependent', source = ['dependent.i']) +""" % locals()) + +test.run(arguments = '.') + +# If we mistakenly depend on the .py file that SWIG didn't create +# (suppressed by the -noproxy option) then the build won't be up-to-date. +test.up_to_date(arguments = '.') + + + +test.pass_test() diff --git a/test/SWIG/remove-modules.py b/test/SWIG/remove-modules.py new file mode 100644 index 00000000..cac96779 --- /dev/null +++ b/test/SWIG/remove-modules.py @@ -0,0 +1,92 @@ +#!/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 swig-generated modules are removed. +The %module directive specifies the module name. +""" + +import sys + +import TestSCons + +# swig-python expects specific filenames. +# the platform specific suffix won't necessarily work. +if sys.platform == 'win32': + _dll = '.dll' +else: + _dll = '.so' + +test = TestSCons.TestSCons() + +swig = test.where_is('swig') + +if not swig: + test.skip_test('Can not find installed "swig", skipping test.\n') + + + +version = sys.version[:3] # see also sys.prefix documentation + +# handle testing on other platforms: +ldmodule_prefix = '_' + +frameworks = '' +platform_sys_prefix = sys.prefix +if sys.platform == 'darwin': + # OS X has a built-in Python but no static libpython + # so you should link to it using apple's 'framework' scheme. + # (see top of file for further explanation) + frameworks = '-framework Python' + platform_sys_prefix = '/System/Library/Frameworks/Python.framework/Versions/%s/' % version + + +test.write("module.i", """\ +%module modulename +""") + +test.write('SConstruct', """ +foo = Environment(SWIGFLAGS='-python', + CPPPATH='%(platform_sys_prefix)s/include/python%(version)s/', + LDMODULEPREFIX='%(ldmodule_prefix)s', + LDMODULESUFFIX='%(_dll)s', + FRAMEWORKSFLAGS='%(frameworks)s', + ) + +foo.LoadableModule(target = 'modulename', source = ['module.i']) +""" % locals()) + +test.run() + +test.must_exist(test.workpath("modulename.py")) + +test.run(arguments = "-c") + +test.must_not_exist(test.workpath("modulename.py")) + + + +test.pass_test() |