summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVolker Weißmann <volker.weissmann@gmx.de>2023-03-25 13:00:10 +0100
committerJussi Pakkanen <jpakkane@gmail.com>2023-05-13 10:42:03 +0300
commit8d816111142694d032f68a549f4a9e18f38427e2 (patch)
tree70f27b78a7560c3cf466b60a9005563995703a4d
parent10d6d2860c6abc29000d94f019af35cf931c315d (diff)
downloadmeson-8d816111142694d032f68a549f4a9e18f38427e2.tar.gz
Fix paths of Fortran order dependencies
Fixes #11047
-rw-r--r--mesonbuild/backend/ninjabackend.py9
-rw-r--r--test cases/fortran/22 extract_objects/bar.f900
-rw-r--r--test cases/fortran/22 extract_objects/foo1.f900
-rw-r--r--test cases/fortran/22 extract_objects/foo2.f900
-rw-r--r--test cases/fortran/22 extract_objects/meson.build17
5 files changed, 22 insertions, 4 deletions
diff --git a/mesonbuild/backend/ninjabackend.py b/mesonbuild/backend/ninjabackend.py
index d61c3597c..a3c0fa33b 100644
--- a/mesonbuild/backend/ninjabackend.py
+++ b/mesonbuild/backend/ninjabackend.py
@@ -380,7 +380,8 @@ class NinjaBuildElement:
if len(self.deps) > 0:
line += ' | ' + ' '.join([ninja_quote(x, True) for x in sorted(self.deps)])
if len(self.orderdeps) > 0:
- line += ' || ' + ' '.join([ninja_quote(x, True) for x in sorted(self.orderdeps)])
+ orderdeps = [str(x) for x in self.orderdeps]
+ line += ' || ' + ' '.join([ninja_quote(x, True) for x in sorted(orderdeps)])
line += '\n'
# This is the only way I could find to make this work on all
# platforms including Windows command shell. Slash is a dir separator
@@ -956,7 +957,7 @@ class NinjaBackend(backends.Backend):
obj_targets = [t for t in od if t.uses_fortran()]
obj_list.extend(o)
- fortran_order_deps = [self.get_target_filename(t) for t in obj_targets]
+ fortran_order_deps = [File(True, *os.path.split(self.get_target_filename(t))) for t in obj_targets]
fortran_inc_args: T.List[str] = []
if target.uses_fortran():
fortran_inc_args = mesonlib.listify([target.compilers['fortran'].get_include_args(
@@ -1049,7 +1050,7 @@ class NinjaBackend(backends.Backend):
return True
def generate_dependency_scan_target(self, target, compiled_sources, source2object, generated_source_files: T.List[mesonlib.File],
- object_deps: T.List[str]) -> None:
+ object_deps: T.List['mesonlib.FileOrString']) -> None:
if not self.should_use_dyndeps_for_target(target):
return
depscan_file = self.get_dep_scan_file_for(target)
@@ -2836,7 +2837,7 @@ https://gcc.gnu.org/bugzilla/show_bug.cgi?id=47485'''))
def generate_single_compile(self, target: build.BuildTarget, src,
is_generated=False, header_deps=None,
- order_deps: T.Optional[T.List[str]] = None,
+ order_deps: T.Optional[T.List['mesonlib.FileOrString']] = None,
extra_args: T.Optional[T.List[str]] = None,
unity_sources: T.Optional[T.List[mesonlib.FileOrString]] = None) -> None:
"""
diff --git a/test cases/fortran/22 extract_objects/bar.f90 b/test cases/fortran/22 extract_objects/bar.f90
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/test cases/fortran/22 extract_objects/bar.f90
diff --git a/test cases/fortran/22 extract_objects/foo1.f90 b/test cases/fortran/22 extract_objects/foo1.f90
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/test cases/fortran/22 extract_objects/foo1.f90
diff --git a/test cases/fortran/22 extract_objects/foo2.f90 b/test cases/fortran/22 extract_objects/foo2.f90
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/test cases/fortran/22 extract_objects/foo2.f90
diff --git a/test cases/fortran/22 extract_objects/meson.build b/test cases/fortran/22 extract_objects/meson.build
new file mode 100644
index 000000000..9ca325e8b
--- /dev/null
+++ b/test cases/fortran/22 extract_objects/meson.build
@@ -0,0 +1,17 @@
+project('test_project', 'fortran')
+
+if get_option('unity') == 'on'
+ error('MESON_SKIP_TEST: extract_objects does not work in unity builds')
+endif
+
+libfoo = static_library(
+ 'foo',
+ sources : ['foo1.f90', 'foo2.f90'])
+
+foo1_object = libfoo.extract_objects('foo1.f90')
+
+libfinal = library(
+ 'final',
+ sources : 'bar.f90',
+ objects : foo1_object,
+)