aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2021-02-18 17:39:51 +0200
committerJussi Pakkanen <jpakkane@gmail.com>2021-02-19 18:18:39 +0200
commit72865a2773a2beb4ea570ecbd7d334866099130f (patch)
treec40687d56d4c55ce71ea9d9dd20827f780df31ba
parent79f7328d6a010e56c28eb9442b61931cf13b04e6 (diff)
downloadmeson-72865a2773a2beb4ea570ecbd7d334866099130f.zip
meson-72865a2773a2beb4ea570ecbd7d334866099130f.tar.gz
meson-72865a2773a2beb4ea570ecbd7d334866099130f.tar.bz2
Fix combining C and Fortran. Closes #8377.
-rw-r--r--mesonbuild/backend/ninjabackend.py7
-rw-r--r--test cases/fortran/9 cpp/main.c8
-rw-r--r--test cases/fortran/9 cpp/meson.build12
3 files changed, 23 insertions, 4 deletions
diff --git a/mesonbuild/backend/ninjabackend.py b/mesonbuild/backend/ninjabackend.py
index b5f46df..58fd5c6 100644
--- a/mesonbuild/backend/ninjabackend.py
+++ b/mesonbuild/backend/ninjabackend.py
@@ -2513,15 +2513,18 @@ https://gcc.gnu.org/bugzilla/show_bug.cgi?id=47485'''))
element.add_item('DEPFILE', dep_file)
element.add_item('ARGS', commands)
- self.add_dependency_scanner_entries_to_element(target, compiler, element)
+ self.add_dependency_scanner_entries_to_element(target, compiler, element, src)
self.add_build(element)
assert(isinstance(rel_obj, str))
assert(isinstance(rel_src, str))
return (rel_obj, rel_src.replace('\\', '/'))
- def add_dependency_scanner_entries_to_element(self, target, compiler, element):
+ def add_dependency_scanner_entries_to_element(self, target, compiler, element, src):
if not self.should_use_dyndeps_for_target(target):
return
+ extension = os.path.splitext(src.fname)[1][1:]
+ if not (extension in compilers.lang_suffixes['fortran'] or extension in compilers.lang_suffixes['cpp']):
+ return
dep_scan_file = self.get_dep_scan_file_for(target)
element.add_item('dyndep', dep_scan_file)
element.add_orderdep(dep_scan_file)
diff --git a/test cases/fortran/9 cpp/main.c b/test cases/fortran/9 cpp/main.c
new file mode 100644
index 0000000..c1750ad
--- /dev/null
+++ b/test cases/fortran/9 cpp/main.c
@@ -0,0 +1,8 @@
+#include <stdio.h>
+
+double fortran(void);
+
+int main(void) {
+ printf("FORTRAN gave us this number: %lf.\n", fortran());
+ return 0;
+}
diff --git a/test cases/fortran/9 cpp/meson.build b/test cases/fortran/9 cpp/meson.build
index 7f73985..f96944b 100644
--- a/test cases/fortran/9 cpp/meson.build
+++ b/test cases/fortran/9 cpp/meson.build
@@ -1,4 +1,4 @@
-project('C++ and FORTRAN', 'cpp', 'fortran')
+project('C, C++ and Fortran', 'c', 'cpp', 'fortran')
cpp = meson.get_compiler('cpp')
fc = meson.get_compiler('fortran')
@@ -17,9 +17,17 @@ if fc.get_id() == 'intel'
endif
e = executable(
+ 'cfort',
+ ['main.c', 'fortran.f'],
+ dependencies : link_with,
+)
+
+test('C and Fortran', e)
+
+e2 = executable(
'cppfort',
['main.cpp', 'fortran.f'],
dependencies : link_with,
)
-test('C++ FORTRAN', e)
+test('C++ and Fortran', e2)