summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarco Rebhan <me@dblsaiko.net>2025-02-16 22:04:32 +0100
committerDylan Baker <dylan@pnwbakers.com>2025-02-28 11:54:01 -0800
commitbe6540e6fdcf1ee88939a74521caa3813b039199 (patch)
treecec2b878386ed48822b982770ebebdb63907a459
parent9af9c6b5b8fb71be41428a53fab5ec026ae88ee1 (diff)
downloadmeson-be6540e6fdcf1ee88939a74521caa3813b039199.tar.gz
Fix Swift targets with same module name as source file name
-rw-r--r--mesonbuild/backend/ninjabackend.py9
-rw-r--r--test cases/swift/13 file name matches module name/Library.swift1
-rw-r--r--test cases/swift/13 file name matches module name/Library2.swift1
-rw-r--r--test cases/swift/13 file name matches module name/main.swift4
-rw-r--r--test cases/swift/13 file name matches module name/meson.build4
5 files changed, 16 insertions, 3 deletions
diff --git a/mesonbuild/backend/ninjabackend.py b/mesonbuild/backend/ninjabackend.py
index ce82d7845..74fb86c5e 100644
--- a/mesonbuild/backend/ninjabackend.py
+++ b/mesonbuild/backend/ninjabackend.py
@@ -2218,7 +2218,6 @@ class NinjaBackend(backends.Backend):
raise InvalidArguments(f'Swift target {target.get_basename()} contains a non-swift source file.')
os.makedirs(self.get_target_private_dir_abs(target), exist_ok=True)
compile_args = self.generate_basic_compiler_args(target, swiftc)
- compile_args += swiftc.get_compile_only_args()
compile_args += swiftc.get_module_args(module_name)
for i in reversed(target.get_include_dirs()):
basedir = i.get_curdir()
@@ -2266,12 +2265,16 @@ class NinjaBackend(backends.Backend):
elem = NinjaBuildElement(self.all_outputs, rel_objects, rulename, abssrc)
elem.add_dep(in_module_files + rel_generated)
elem.add_dep(abs_headers)
- elem.add_item('ARGS', compile_args + header_imports + abs_generated + module_includes)
+ elem.add_item('ARGS', swiftc.get_compile_only_args() + compile_args + header_imports + abs_generated + module_includes)
elem.add_item('RUNDIR', rundir)
self.add_build(elem)
+
+ # -g makes swiftc create a .o file with potentially the same name as one of the compile target generated ones.
+ mod_gen_args = [el for el in compile_args if el != '-g']
+
elem = NinjaBuildElement(self.all_outputs, out_module_name, rulename, abssrc)
elem.add_dep(in_module_files + rel_generated)
- elem.add_item('ARGS', compile_args + abs_generated + module_includes + swiftc.get_mod_gen_args())
+ elem.add_item('ARGS', swiftc.get_mod_gen_args() + mod_gen_args + abs_generated + module_includes)
elem.add_item('RUNDIR', rundir)
self.add_build(elem)
if isinstance(target, build.StaticLibrary):
diff --git a/test cases/swift/13 file name matches module name/Library.swift b/test cases/swift/13 file name matches module name/Library.swift
new file mode 100644
index 000000000..617952f4e
--- /dev/null
+++ b/test cases/swift/13 file name matches module name/Library.swift
@@ -0,0 +1 @@
+public func callMe() {}
diff --git a/test cases/swift/13 file name matches module name/Library2.swift b/test cases/swift/13 file name matches module name/Library2.swift
new file mode 100644
index 000000000..7172b249b
--- /dev/null
+++ b/test cases/swift/13 file name matches module name/Library2.swift
@@ -0,0 +1 @@
+public func callMe2() {}
diff --git a/test cases/swift/13 file name matches module name/main.swift b/test cases/swift/13 file name matches module name/main.swift
new file mode 100644
index 000000000..d5e8a0e9c
--- /dev/null
+++ b/test cases/swift/13 file name matches module name/main.swift
@@ -0,0 +1,4 @@
+import Library
+
+callMe()
+callMe2()
diff --git a/test cases/swift/13 file name matches module name/meson.build b/test cases/swift/13 file name matches module name/meson.build
new file mode 100644
index 000000000..34af03313
--- /dev/null
+++ b/test cases/swift/13 file name matches module name/meson.build
@@ -0,0 +1,4 @@
+project('file name matches module name', 'swift')
+
+lib = static_library('Library', 'Library.swift', 'Library2.swift')
+executable('program', 'main.swift', link_with: [lib])