diff options
author | Jussi Pakkanen <jpakkane@gmail.com> | 2017-05-13 23:24:14 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-05-13 23:24:14 +0300 |
commit | 08bd92a6aedeb1375fece723cdafe16bd78fbc01 (patch) | |
tree | e72cae07f45e83851c4ecc61abbc998b5a62d273 | |
parent | 97339d3be4b6f4cab28b8dac9cb467d769049a22 (diff) | |
parent | 3d88ce70f46f4a39557fd58c24d126dc97dddb5e (diff) | |
download | meson-08bd92a6aedeb1375fece723cdafe16bd78fbc01.zip meson-08bd92a6aedeb1375fece723cdafe16bd78fbc01.tar.gz meson-08bd92a6aedeb1375fece723cdafe16bd78fbc01.tar.bz2 |
Merge pull request #1788 from aradi/fix-fortran-scan
Fix scanning of Fortran sources created during configuration
-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 |