summaryrefslogtreecommitdiffstats
path: root/test/Fortran
diff options
context:
space:
mode:
authormaiphi <maiphi.public@gmx.net>2018-05-27 10:04:45 (GMT)
committermaiphi <maiphi.public@gmx.net>2018-05-27 10:04:45 (GMT)
commite18cc8783f671eb696686887db5674a22f050814 (patch)
treeddf52aac7e243dab2626a78fd03374eaf0681bb4 /test/Fortran
parent0b25163bccfe740a7752bc0ed2d8f8fbe020580f (diff)
downloadSCons-e18cc8783f671eb696686887db5674a22f050814.zip
SCons-e18cc8783f671eb696686887db5674a22f050814.tar.gz
SCons-e18cc8783f671eb696686887db5674a22f050814.tar.bz2
Make test FORTRANMODDIR.py work with non-empty FORTRANMODDIRPREFIX.
Diffstat (limited to 'test/Fortran')
-rw-r--r--test/Fortran/FORTRANMODDIR.py68
1 files changed, 37 insertions, 31 deletions
diff --git a/test/Fortran/FORTRANMODDIR.py b/test/Fortran/FORTRANMODDIR.py
index 723efaf..e6f2413 100644
--- a/test/Fortran/FORTRANMODDIR.py
+++ b/test/Fortran/FORTRANMODDIR.py
@@ -24,6 +24,16 @@
__revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
+"""
+Verify the following things:
+* _FORTRANMODFLAG is correctly constructed from FORTRANMODDIRPREFIX and
+ FORTRANMODDIR.
+* The dependency scanner does not expect a module file to be created
+ from a "module procedure" statement.
+* The dependency scanner expects the module files to be created in the correct
+ module directory (is is verified by the test.up_to_date()).
+"""
+
import TestSCons
_python_ = TestSCons._python_
@@ -31,61 +41,59 @@ _exe = TestSCons._exe
test = TestSCons.TestSCons()
-
-
test.write('myfortran.py', r"""
import os.path
import re
import sys
+# case insensitive matching, because Fortran is case insensitive
mod_regex = "(?im)^\\s*MODULE\\s+(?!PROCEDURE)(\\w+)"
contents = open(sys.argv[2]).read()
modules = re.findall(mod_regex, contents)
-modules = [os.path.join(sys.argv[1], m.lower()+'.mod') for m in modules]
+(prefix, moddir) = sys.argv[1].split('=')
+if prefix != 'moduledir':
+ sys.exit(1)
+modules = [os.path.join(moddir, m.lower()+'.mod') for m in modules]
for t in sys.argv[3:] + modules:
open(t, 'wb').write(('myfortran.py wrote %s\n' % os.path.split(t)[1]).encode())
-sys.exit(0)
""")
test.write('SConstruct', """
-env = Environment(FORTRANCOM = r'%(_python_)s myfortran.py $FORTRANMODDIR $SOURCE $TARGET',
- FORTRANMODDIR = 'modules')
+env = Environment(FORTRANCOM = r'%(_python_)s myfortran.py $_FORTRANMODFLAG $SOURCE $TARGET',
+ FORTRANMODDIRPREFIX='moduledir=', FORTRANMODDIR='modules')
env.Object(target = 'test1.obj', source = 'test1.f')
env.Object(target = 'sub2/test2.obj', source = 'test1.f',
FORTRANMODDIR='${TARGET.dir}')
env.Object(target = 'sub3/test3.obj', source = 'test1.f',
- FORTRANCOM = r'%(_python_)s myfortran.py $_FORTRANMODFLAG $SOURCE $TARGET',
+ FORTRANCOM = r'%(_python_)s myfortran.py moduledir=$FORTRANMODDIR $SOURCE $TARGET',
FORTRANMODDIR='${TARGET.dir}')
""" % 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
+module mod_foo
+ implicit none
+ interface q
+ module procedure p
+ end interface q
+ contains
+ subroutine p
+ implicit none
+ print *, 'mod_foo::p'
+ end subroutine p
+end module mod_foo
+program test
+ use mod_foo
+ implicit none
+ print *, 'test.f'
+ call p
+ call q
+end
""")
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.must_not_exist(['modules', 'p.mod'])
test.must_match(['sub2', 'test2.obj'], "myfortran.py wrote test2.obj\n")
test.must_match(['sub2', 'mod_foo.mod'], "myfortran.py wrote mod_foo.mod\n")
@@ -95,8 +103,6 @@ test.must_match(['sub3', 'mod_foo.mod'], "myfortran.py wrote mod_foo.mod\n")
test.up_to_date(arguments = '.')
-
-
test.pass_test()
# Local Variables: