From 540fd2f0e03f949842513a8fbb1ef86c33608fd8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?B=C3=A1lint=20Aradi?= Date: Fri, 12 May 2017 14:34:19 +0200 Subject: Fix scanning of Fortran sources created during configuration --- mesonbuild/backend/ninjabackend.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/mesonbuild/backend/ninjabackend.py b/mesonbuild/backend/ninjabackend.py index 797fb64..e5af9fd 100644 --- a/mesonbuild/backend/ninjabackend.py +++ b/mesonbuild/backend/ninjabackend.py @@ -1693,12 +1693,13 @@ rule FORTRAN_DEP_HACK modre = re.compile(r"\s*module\s+(\w+)", re.IGNORECASE) module_files = {} for s in target.get_sources(): - # FIXME, does not work for generated Fortran sources, - # but those are really rare. I hope. + # FIXME, does not work for Fortran sources generated by + # custom_target() and generator() as those are run after + # the configuration (configure_file() is OK) if not compiler.can_compile(s): continue - filename = os.path.join(self.environment.get_source_dir(), - s.subdir, s.fname) + filename = s.absolute_path(self.environment.get_source_dir(), + self.environment.get_build_dir()) with open(filename) as f: for line in f: modmatch = modre.match(line) -- cgit v1.1 From 37ce7f01cf4392840a8d6652a3f0ecdff5974616 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?B=C3=A1lint=20Aradi?= Date: Fri, 12 May 2017 15:35:31 +0200 Subject: Add test for fortran dependency scanning fix --- test cases/fortran/7 generated/meson.build | 18 ++++++++++++++++++ test cases/fortran/7 generated/mod1.fpp | 6 ++++++ test cases/fortran/7 generated/mod2.fpp | 7 +++++++ 3 files changed, 31 insertions(+) create mode 100644 test cases/fortran/7 generated/meson.build create mode 100644 test cases/fortran/7 generated/mod1.fpp create mode 100644 test cases/fortran/7 generated/mod2.fpp diff --git a/test cases/fortran/7 generated/meson.build b/test cases/fortran/7 generated/meson.build new file mode 100644 index 0000000..3ad339e --- /dev/null +++ b/test cases/fortran/7 generated/meson.build @@ -0,0 +1,18 @@ +# Tests whether fortran sources files created during configuration are properly +# scanned for dependency information + +project('generated', 'fortran') + +conf_data = configuration_data() + +sources_fortran_basenames = ['mod2', 'mod1'] +preproc_sources_fortran = [] +foreach fsource_basename : sources_fortran_basenames + infilename = '@0@.fpp'.format(fsource_basename) + outfilename = '@0@.f90'.format(fsource_basename) + outfile = configure_file( + input : infilename, output : outfilename, configuration : conf_data) + preproc_sources_fortran += [outfile] +endforeach + +mylib = static_library('mylib', preproc_sources_fortran) diff --git a/test cases/fortran/7 generated/mod1.fpp b/test cases/fortran/7 generated/mod1.fpp new file mode 100644 index 0000000..c03ef16 --- /dev/null +++ b/test cases/fortran/7 generated/mod1.fpp @@ -0,0 +1,6 @@ +module mod1 + implicit none + + integer, parameter :: modval1 = 1 + +end module mod1 diff --git a/test cases/fortran/7 generated/mod2.fpp b/test cases/fortran/7 generated/mod2.fpp new file mode 100644 index 0000000..eec931e --- /dev/null +++ b/test cases/fortran/7 generated/mod2.fpp @@ -0,0 +1,7 @@ +module mod2 + use mod1 + implicit none + + integer, parameter :: modval2 = 2 + +end module mod2 -- cgit v1.1 From 3d88ce70f46f4a39557fd58c24d126dc97dddb5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?B=C3=A1lint=20Aradi?= Date: Sat, 13 May 2017 21:18:16 +0200 Subject: Turn feature test into a proper unit test --- test cases/fortran/7 generated/meson.build | 18 +++++++++++------- test cases/fortran/7 generated/mod1.fpp | 2 +- test cases/fortran/7 generated/mod2.fpp | 2 +- test cases/fortran/7 generated/prog.f90 | 9 +++++++++ 4 files changed, 22 insertions(+), 9 deletions(-) create mode 100644 test cases/fortran/7 generated/prog.f90 diff --git a/test cases/fortran/7 generated/meson.build b/test cases/fortran/7 generated/meson.build index 3ad339e..c2efe34 100644 --- a/test cases/fortran/7 generated/meson.build +++ b/test cases/fortran/7 generated/meson.build @@ -4,15 +4,19 @@ project('generated', 'fortran') conf_data = configuration_data() +conf_data.set('ONE', 1) +conf_data.set('TWO', 2) -sources_fortran_basenames = ['mod2', 'mod1'] -preproc_sources_fortran = [] -foreach fsource_basename : sources_fortran_basenames - infilename = '@0@.fpp'.format(fsource_basename) - outfilename = '@0@.f90'.format(fsource_basename) +templates_basenames = ['mod2', 'mod1'] +generated_sources = [] +foreach template_basename : templates_basenames + infilename = '@0@.fpp'.format(template_basename) + outfilename = '@0@.f90'.format(template_basename) outfile = configure_file( input : infilename, output : outfilename, configuration : conf_data) - preproc_sources_fortran += [outfile] + generated_sources += [outfile] endforeach -mylib = static_library('mylib', preproc_sources_fortran) +sources = ['prog.f90'] + generated_sources +exe = executable('generated', sources) +test('generated', exe) diff --git a/test cases/fortran/7 generated/mod1.fpp b/test cases/fortran/7 generated/mod1.fpp index c03ef16..42d1fde 100644 --- a/test cases/fortran/7 generated/mod1.fpp +++ b/test cases/fortran/7 generated/mod1.fpp @@ -1,6 +1,6 @@ module mod1 implicit none - integer, parameter :: modval1 = 1 + integer, parameter :: modval1 = @ONE@ end module mod1 diff --git a/test cases/fortran/7 generated/mod2.fpp b/test cases/fortran/7 generated/mod2.fpp index eec931e..594e9df 100644 --- a/test cases/fortran/7 generated/mod2.fpp +++ b/test cases/fortran/7 generated/mod2.fpp @@ -2,6 +2,6 @@ module mod2 use mod1 implicit none - integer, parameter :: modval2 = 2 + integer, parameter :: modval2 = @TWO@ end module mod2 diff --git a/test cases/fortran/7 generated/prog.f90 b/test cases/fortran/7 generated/prog.f90 new file mode 100644 index 0000000..c476e9c --- /dev/null +++ b/test cases/fortran/7 generated/prog.f90 @@ -0,0 +1,9 @@ +program prog + use mod2 + implicit none + + if (modval1 + modval2 /= 3) then + stop 1 + end if + +end program prog -- cgit v1.1