summaryrefslogtreecommitdiffstats
path: root/test/Fortran
diff options
context:
space:
mode:
authorSteven Knight <knight@baldmt.com>2005-08-11 13:16:20 (GMT)
committerSteven Knight <knight@baldmt.com>2005-08-11 13:16:20 (GMT)
commit33f2e8d10b3f0334ab37ffb72bc4a282221dade6 (patch)
treea33979bbdff3c760313ae8c17f5bdb74eb8e41bf /test/Fortran
parentfc4d126d2bf4ef98b4ca552e8a15c8ce77b16191 (diff)
downloadSCons-33f2e8d10b3f0334ab37ffb72bc4a282221dade6.zip
SCons-33f2e8d10b3f0334ab37ffb72bc4a282221dade6.tar.gz
SCons-33f2e8d10b3f0334ab37ffb72bc4a282221dade6.tar.bz2
Look up Fortran modules relative to . (Craig Scott)
Diffstat (limited to 'test/Fortran')
-rw-r--r--test/Fortran/FORTRANMODDIR.py93
1 files changed, 93 insertions, 0 deletions
diff --git a/test/Fortran/FORTRANMODDIR.py b/test/Fortran/FORTRANMODDIR.py
new file mode 100644
index 0000000..4d594a1
--- /dev/null
+++ b/test/Fortran/FORTRANMODDIR.py
@@ -0,0 +1,93 @@
+#!/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__"
+
+import os
+import string
+import sys
+import TestSCons
+
+python = TestSCons.python
+_exe = TestSCons._exe
+
+test = TestSCons.TestSCons()
+
+
+
+test.write('myfortran.py', r"""
+import os.path
+import re
+import string
+import sys
+mod_regex = "(?im)^\\s*MODULE\\s+(?!PROCEDURE)(\\w+)"
+contents = open(sys.argv[2]).read()
+modules = re.findall(mod_regex, contents)
+modules = map(lambda m: os.path.join(sys.argv[1], string.lower(m)+'.mod'), modules)
+for t in sys.argv[3:] + modules:
+ open(t, 'wb').write('myfortran.py wrote %s\n' % os.path.split(t)[1])
+sys.exit(0)
+""")
+
+test.write('SConstruct', """
+env = Environment(FORTRANCOM = r'%(python)s myfortran.py $FORTRANMODDIR $SOURCE $TARGET',
+ FORTRANMODDIR = 'modules')
+env.Object(target = 'test1.obj', source = 'test1.f')
+""" % locals())
+
+test.write('test1.f', """\
+ PROGRAM TEST
+ USE MOD_FOO
+ USE MOD_BAR
+ PRINT *,'TEST.f'
+ CALL P
+ STOP
+ END
+ MODULE MOD_FOO
+ IMPLICIT NONE
+ CONTAINS
+ SUBROUTINE P
+ PRINT *,'mod_foo'
+ END SUBROUTINE P
+ END MODULE MOD_FOO
+ MODULE PROCEDURE MOD_BAR
+ IMPLICIT NONE
+ CONTAINS
+ SUBROUTINE P
+ PRINT *,'mod_bar'
+ END SUBROUTINE P
+ END MODULE MOD_BAR
+""")
+
+test.run(arguments = '.', stderr = None)
+
+test.must_match('test1.obj', "myfortran.py wrote test1.obj\n")
+test.must_match(['modules', 'mod_foo.mod'], "myfortran.py wrote mod_foo.mod\n")
+test.must_not_exist(['modules', 'mod_bar.mod'])
+
+test.up_to_date(arguments = '.')
+
+
+
+test.pass_test()