Xcode: make Swift projects work.
diff --git a/mesonbuild/backend/backends.py b/mesonbuild/backend/backends.py index 734a7e4..e6628b6 100644 --- a/mesonbuild/backend/backends.py +++ b/mesonbuild/backend/backends.py
@@ -417,6 +417,12 @@ raise MesonException('Unknown data type in object list.') return obj_list + def is_swift_target(self, target): + for s in target.sources: + if s.endswith('swift'): + return True + return False + def get_executable_serialisation(self, cmd, workdir=None, extra_bdeps=None, capture=None, env: T.Optional[build.EnvironmentVariables] = None):
diff --git a/mesonbuild/backend/ninjabackend.py b/mesonbuild/backend/ninjabackend.py index e8a7d4b..fa07235 100644 --- a/mesonbuild/backend/ninjabackend.py +++ b/mesonbuild/backend/ninjabackend.py
@@ -1701,12 +1701,6 @@ def target_swift_modulename(self, target): return target.name - def is_swift_target(self, target): - for s in target.sources: - if s.endswith('swift'): - return True - return False - def determine_swift_dep_modules(self, target): result = [] for l in target.link_targets:
diff --git a/mesonbuild/backend/xcodebackend.py b/mesonbuild/backend/xcodebackend.py index 6fc4729..aeaee5c 100644 --- a/mesonbuild/backend/xcodebackend.py +++ b/mesonbuild/backend/xcodebackend.py
@@ -37,6 +37,7 @@ 'hxx': 'sourcecode.cpp.h', 'hh': 'sourcecode.cpp.hh', 'inc': 'sourcecode.c.h', + 'swift': 'sourcecode.swift', 'dylib': 'compiled.mach-o.dylib', 'o': 'compiled.mach-o.objfile', 's': 'sourcecode.asm', @@ -1277,6 +1278,7 @@ bt_dict.add_item('buildSettings', settings_dict) settings_dict.add_item('ARCHS', '"$(NATIVE_ARCH_ACTUAL)"') settings_dict.add_item('ONLY_ACTIVE_ARCH', 'YES') + settings_dict.add_item('SWIFT_VERSION', '4.0') settings_dict.add_item('SDKROOT', '"macosx"') settings_dict.add_item('SYMROOT', '"%s/build"' % self.environment.get_build_dir()) bt_dict.add_item('name', f'"{buildtype}"') @@ -1382,7 +1384,12 @@ else: product_name = target.get_basename() ldargs += target.link_args - linker, stdlib_args = self.determine_linker_and_stdlib_args(target) + # Swift is special. Again. You can't mix Swift with other languages + # in the same target. Thus for Swift we only use + if self.is_swift_target(target): + linker, stdlib_args = target.compilers['swift'], [] + else: + linker, stdlib_args = self.determine_linker_and_stdlib_args(target) if not isinstance(target, build.StaticLibrary): ldargs += self.build.get_project_link_args(linker, target.subproject, target.for_machine) ldargs += self.build.get_global_link_args(linker, target.for_machine)
diff --git a/test cases/swift/1 exe/prog.swift b/test cases/swift/1 exe/main.swift similarity index 100% rename from test cases/swift/1 exe/prog.swift rename to test cases/swift/1 exe/main.swift
diff --git a/test cases/swift/1 exe/meson.build b/test cases/swift/1 exe/meson.build index f986e9a..4436a8e 100644 --- a/test cases/swift/1 exe/meson.build +++ b/test cases/swift/1 exe/meson.build
@@ -1,3 +1,3 @@ project('swift exe', 'swift') -test('swifttest', executable('swifttest', 'prog.swift')) +test('swifttest', executable('swifttest', 'main.swift'))