From e18cc8783f671eb696686887db5674a22f050814 Mon Sep 17 00:00:00 2001 From: maiphi Date: Sun, 27 May 2018 12:04:45 +0200 Subject: Make test FORTRANMODDIR.py work with non-empty FORTRANMODDIRPREFIX. --- test/Fortran/FORTRANMODDIR.py | 68 +++++++++++++++++++++++-------------------- 1 file 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: -- cgit v0.12