summaryrefslogtreecommitdiff
path: root/mesonbuild/backend/xcodebackend.py
diff options
context:
space:
mode:
authorAlbert Tang <tangalbert919@yahoo.com>2023-07-29 14:14:07 -0500
committerEli Schwartz <eschwartz93@gmail.com>2023-12-10 22:01:23 -0500
commit9d8f69a16fd6cdaea843cc605266c2a90e9eeaa8 (patch)
tree5a72a37daf3005fcf56872f0aa5382568e436ed9 /mesonbuild/backend/xcodebackend.py
parentaf0464352aa46324a1a59f8a1e82b6cdd46ec891 (diff)
downloadmeson-9d8f69a16fd6cdaea843cc605266c2a90e9eeaa8.tar.gz
xcode: Add support for extra files
Fixes #10903
Diffstat (limited to 'mesonbuild/backend/xcodebackend.py')
-rw-r--r--mesonbuild/backend/xcodebackend.py43
1 files changed, 43 insertions, 0 deletions
diff --git a/mesonbuild/backend/xcodebackend.py b/mesonbuild/backend/xcodebackend.py
index ec03627dd..2e18573e2 100644
--- a/mesonbuild/backend/xcodebackend.py
+++ b/mesonbuild/backend/xcodebackend.py
@@ -352,6 +352,13 @@ class XCodeBackend(backends.Backend):
if isinstance(o, str):
o = os.path.join(t.subdir, o)
self.filemap[o] = self.gen_id()
+ for e in t.extra_files:
+ if isinstance(e, mesonlib.File):
+ e = os.path.join(e.subdir, e.fname)
+ self.filemap[e] = self.gen_id()
+ else:
+ e = os.path.join(t.subdir, e)
+ self.filemap[e] = self.gen_id()
self.target_filemap[name] = self.gen_id()
def generate_buildstylemap(self) -> None:
@@ -523,6 +530,16 @@ class XCodeBackend(backends.Backend):
self.fileref_ids[k] = self.gen_id()
else:
raise RuntimeError('Unknown input type ' + str(o))
+ for e in t.extra_files:
+ if isinstance(e, mesonlib.File):
+ e = os.path.join(e.subdir, e.fname)
+ if isinstance(e, str):
+ e = os.path.join(t.subdir, e)
+ k = (tname, e)
+ assert k not in self.buildfile_ids
+ self.buildfile_ids[k] = self.gen_id()
+ assert k not in self.fileref_ids
+ self.fileref_ids[k] = self.gen_id()
def generate_build_file_maps(self) -> None:
for buildfile in self.interpreter.get_build_def_files():
@@ -791,6 +808,24 @@ class XCodeBackend(backends.Backend):
o_dict.add_item('name', f'"{name}"')
o_dict.add_item('path', f'"{rel_name}"')
o_dict.add_item('sourceTree', 'SOURCE_ROOT')
+
+ for e in t.extra_files:
+ if isinstance(e, mesonlib.File):
+ e = os.path.join(e.subdir, e.fname)
+ else:
+ e = os.path.join(t.subdir, e)
+ idval = self.fileref_ids[(tname, e)]
+ fullpath = os.path.join(self.environment.get_source_dir(), e)
+ e_dict = PbxDict()
+ xcodetype = self.get_xcodetype(e)
+ name = os.path.basename(e)
+ path = e
+ objects_dict.add_item(idval, e_dict, fullpath)
+ e_dict.add_item('isa', 'PBXFileReference')
+ e_dict.add_item('explicitFileType', '"' + xcodetype + '"')
+ e_dict.add_item('name', '"' + name + '"')
+ e_dict.add_item('path', '"' + path + '"')
+ e_dict.add_item('sourceTree', 'SOURCE_ROOT')
for tname, idval in self.target_filemap.items():
target_dict = PbxDict()
objects_dict.add_item(idval, target_dict, tname)
@@ -989,6 +1024,14 @@ class XCodeBackend(backends.Backend):
else:
o = os.path.join(t.subdir, o)
target_children.add_item(self.fileref_ids[(tid, o)], o)
+ for e in t.extra_files:
+ if isinstance(e, mesonlib.File):
+ e = os.path.join(e.subdir, e.fname)
+ elif isinstance(e, str):
+ e = os.path.join(t.subdir, e)
+ else:
+ continue
+ target_children.add_item(self.fileref_ids[(tid, e)], e)
source_files_dict.add_item('name', '"Source files"')
source_files_dict.add_item('sourceTree', '"<group>"')
return group_id