aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2017-05-13 23:24:14 +0300
committerGitHub <noreply@github.com>2017-05-13 23:24:14 +0300
commit08bd92a6aedeb1375fece723cdafe16bd78fbc01 (patch)
treee72cae07f45e83851c4ecc61abbc998b5a62d273
parent97339d3be4b6f4cab28b8dac9cb467d769049a22 (diff)
parent3d88ce70f46f4a39557fd58c24d126dc97dddb5e (diff)
downloadmeson-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.py9
-rw-r--r--test cases/fortran/7 generated/meson.build22
-rw-r--r--test cases/fortran/7 generated/mod1.fpp6
-rw-r--r--test cases/fortran/7 generated/mod2.fpp7
-rw-r--r--test cases/fortran/7 generated/prog.f909
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