diff options
-rw-r--r-- | mesonbuild/backend/ninjabackend.py | 9 | ||||
-rw-r--r-- | test cases/fortran/7 generated/meson.build | 22 | ||||
-rw-r--r-- | test cases/fortran/7 generated/mod1.fpp | 6 | ||||
-rw-r--r-- | test cases/fortran/7 generated/mod2.fpp | 7 | ||||
-rw-r--r-- | test cases/fortran/7 generated/prog.f90 | 9 |
5 files changed, 49 insertions, 4 deletions
diff --git a/mesonbuild/backend/ninjabackend.py b/mesonbuild/backend/ninjabackend.py index 076940b..f7e84dc 100644 --- a/mesonbuild/backend/ninjabackend.py +++ b/mesonbuild/backend/ninjabackend.py @@ -1698,12 +1698,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) diff --git a/test cases/fortran/7 generated/meson.build b/test cases/fortran/7 generated/meson.build new file mode 100644 index 0000000..c2efe34 --- /dev/null +++ b/test cases/fortran/7 generated/meson.build @@ -0,0 +1,22 @@ +# Tests whether fortran sources files created during configuration are properly +# scanned for dependency information + +project('generated', 'fortran') + +conf_data = configuration_data() +conf_data.set('ONE', 1) +conf_data.set('TWO', 2) + +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) + generated_sources += [outfile] +endforeach + +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 new file mode 100644 index 0000000..42d1fde --- /dev/null +++ b/test cases/fortran/7 generated/mod1.fpp @@ -0,0 +1,6 @@ +module mod1 + implicit none + + 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 new file mode 100644 index 0000000..594e9df --- /dev/null +++ b/test cases/fortran/7 generated/mod2.fpp @@ -0,0 +1,7 @@ +module mod2 + use mod1 + implicit none + + 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 |