Convert a few more.

pull/8614/head
Jussi Pakkanen 4 years ago
parent 7a3fdf70cc
commit a026213145
  1. 82
      mesonbuild/backend/xcodebackend.py

@ -231,19 +231,19 @@ class XCodeBackend(backends.Backend):
self.generate_pbx_group(objects_dict) self.generate_pbx_group(objects_dict)
objects_dict.add_comment(PbxComment('End PBXGroup section')) objects_dict.add_comment(PbxComment('End PBXGroup section'))
objects_dict.add_comment(PbxComment('Begin PBXNativeTarget section')) objects_dict.add_comment(PbxComment('Begin PBXNativeTarget section'))
self.generate_pbx_native_target() self.generate_pbx_native_target(objects_dict)
objects_dict.add_comment(PbxComment('End PBXNativeTarget section')) objects_dict.add_comment(PbxComment('End PBXNativeTarget section'))
objects_dict.add_comment(PbxComment('Begin PBXProject section')) objects_dict.add_comment(PbxComment('Begin PBXProject section'))
self.generate_pbx_project() self.generate_pbx_project(objects_dict)
objects_dict.add_comment(PbxComment('End PBXProject section')) objects_dict.add_comment(PbxComment('End PBXProject section'))
objects_dict.add_comment(PbxComment('Begin PBXShellScriptBuildPhase section')) objects_dict.add_comment(PbxComment('Begin PBXShellScriptBuildPhase section'))
self.generate_pbx_shell_build_phase(test_data) self.generate_pbx_shell_build_phase(objects_dict, test_data)
objects_dict.add_comment(PbxComment('End PBXShellScriptBuildPhase section')) objects_dict.add_comment(PbxComment('End PBXShellScriptBuildPhase section'))
objects_dict.add_comment(PbxComment('Begin PBXSourcesBuildPhase section')) objects_dict.add_comment(PbxComment('Begin PBXSourcesBuildPhase section'))
self.generate_pbx_sources_build_phase() self.generate_pbx_sources_build_phase(objects_dict)
objects_dict.add_comment(PbxComment('End PBXSourcesBuildPhase section')) objects_dict.add_comment(PbxComment('End PBXSourcesBuildPhase section'))
objects_dict.add_comment(PbxComment('Begin PBXTargetDependency section')) objects_dict.add_comment(PbxComment('Begin PBXTargetDependency section'))
self.generate_pbx_target_dependency() self.generate_pbx_target_dependency(objects_dict)
objects_dict.add_comment(PbxComment('End PBXTargetDependency section')) objects_dict.add_comment(PbxComment('End PBXTargetDependency section'))
objects_dict.add_comment(PbxComment('Begin XCBuildPConfiguration section')) objects_dict.add_comment(PbxComment('Begin XCBuildPConfiguration section'))
self.generate_xc_build_configuration() self.generate_xc_build_configuration()
@ -745,35 +745,49 @@ class XCodeBackend(backends.Backend):
self.write_line('};') self.write_line('};')
self.ofile.write('/* End PBXGroup section */\n') self.ofile.write('/* End PBXGroup section */\n')
def generate_pbx_native_target(self): def generate_pbx_native_target(self, objects_dict):
self.ofile.write('\n/* Begin PBXNativeTarget section */\n') self.ofile.write('\n/* Begin PBXNativeTarget section */\n')
for tname, idval in self.native_targets.items(): for tname, idval in self.native_targets.items():
ntarget_dict = PbxDict()
t = self.build.get_build_targets()[tname] t = self.build.get_build_targets()[tname]
self.write_line(f'{idval} /* {tname} */ = {{') self.write_line(f'{idval} /* {tname} */ = {{')
objects_dict.add_item(idval, ntarget_dict, tname)
self.indent_level += 1 self.indent_level += 1
self.write_line('isa = PBXNativeTarget;') self.write_line('isa = PBXNativeTarget;')
ntarget_dict.add_item('isa', 'PBXNativeTarget')
self.write_line('buildConfigurationList = %s /* Build configuration list for PBXNativeTarget "%s" */;' self.write_line('buildConfigurationList = %s /* Build configuration list for PBXNativeTarget "%s" */;'
% (self.buildconflistmap[tname], tname)) % (self.buildconflistmap[tname], tname))
ntarget_dict.add_item('buildConfigurationList', self.buildconflistmap[tname], f'Build configuration list for PBXNativeTarget "{tname}"')
buildphases_array = PbxArray()
self.write_line('buildPhases = (') self.write_line('buildPhases = (')
ntarget_dict.add_item('buildPhases', buildphases_array)
self.indent_level += 1 self.indent_level += 1
for bpname, bpval in t.buildphasemap.items(): for bpname, bpval in t.buildphasemap.items():
self.write_line(f'{bpval} /* {bpname} yyy */,') self.write_line(f'{bpval} /* {bpname} yyy */,')
buildphases_array.add_item(bpval, f'{bpname} yyy')
self.indent_level -= 1 self.indent_level -= 1
self.write_line(');') self.write_line(');')
self.write_line('buildRules = (') self.write_line('buildRules = (')
self.write_line(');') self.write_line(');')
ntarget_dict.add_item('buildRules', PbxArray())
dep_array = PbxArray()
self.write_line('dependencies = (') self.write_line('dependencies = (')
ntarget_dict.add_item('dependencies', dep_array)
self.indent_level += 1 self.indent_level += 1
for lt in self.build.get_build_targets()[tname].link_targets: for lt in self.build.get_build_targets()[tname].link_targets:
# NOT DOCUMENTED, may need to make different links # NOT DOCUMENTED, may need to make different links
# to same target have different targetdependency item. # to same target have different targetdependency item.
idval = self.pbx_dep_map[lt.get_id()] idval = self.pbx_dep_map[lt.get_id()]
self.write_line('%s /* PBXTargetDependency */,' % idval) self.write_line('%s /* PBXTargetDependency */,' % idval)
dep_array.add_item(idval, 'PBXTargetDependency')
self.indent_level -= 1 self.indent_level -= 1
self.write_line(");") self.write_line(");")
self.write_line('name = "%s";' % tname) self.write_line('name = "%s";' % tname)
ntarget_dict.add_item('name', f'"{tname}"')
self.write_line('productName = "%s";' % tname) self.write_line('productName = "%s";' % tname)
ntarget_dict.add_item('productName', f'"{tname}"')
self.write_line('productReference = {} /* {} */;'.format(self.target_filemap[tname], tname)) self.write_line('productReference = {} /* {} */;'.format(self.target_filemap[tname], tname))
ntarget_dict.add_item('productReference', self.target_filemap[tname], tname)
if isinstance(t, build.Executable): if isinstance(t, build.Executable):
typestr = 'com.apple.product-type.tool' typestr = 'com.apple.product-type.tool'
elif isinstance(t, build.StaticLibrary): elif isinstance(t, build.StaticLibrary):
@ -783,91 +797,132 @@ class XCodeBackend(backends.Backend):
else: else:
raise MesonException('Unknown target type for %s' % tname) raise MesonException('Unknown target type for %s' % tname)
self.write_line('productType = "%s";' % typestr) self.write_line('productType = "%s";' % typestr)
ntarget_dict.add_item('productType', f'"{typestr}"')
self.indent_level -= 1 self.indent_level -= 1
self.write_line('};') self.write_line('};')
self.ofile.write('/* End PBXNativeTarget section */\n') self.ofile.write('/* End PBXNativeTarget section */\n')
def generate_pbx_project(self): def generate_pbx_project(self, objects_dict):
project_dict = PbxDict()
self.ofile.write('\n/* Begin PBXProject section */\n') self.ofile.write('\n/* Begin PBXProject section */\n')
self.write_line('%s /* Project object */ = {' % self.project_uid) self.write_line('%s /* Project object */ = {' % self.project_uid)
objects_dict.add_item(self.project_uid, project_dict, 'Project object')
self.indent_level += 1 self.indent_level += 1
self.write_line('isa = PBXProject;') self.write_line('isa = PBXProject;')
project_dict.add_item('isa', 'PBXProject')
attr_dict = PbxDict()
self.write_line('attributes = {') self.write_line('attributes = {')
project_dict.add_item('attributes', attr_dict)
self.indent_level += 1 self.indent_level += 1
self.write_line('BuildIndependentTargetsInParallel = YES;') self.write_line('BuildIndependentTargetsInParallel = YES;')
attr_dict.add_item('BuildIndependentTargetsInParallel', 'YES')
self.indent_level -= 1 self.indent_level -= 1
self.write_line('};') self.write_line('};')
conftempl = 'buildConfigurationList = %s /* Build configuration list for PBXProject "%s" */;' conftempl = 'buildConfigurationList = %s /* Build configuration list for PBXProject "%s" */;'
self.write_line(conftempl % (self.project_conflist, self.build.project_name)) self.write_line(conftempl % (self.project_conflist, self.build.project_name))
project_dict.add_item('buildConfigurationList', self.project_conflist, f'Build configuration list for PBXProject "{self.build.project_name}')
self.write_line('buildSettings = {') self.write_line('buildSettings = {')
self.write_line('};') self.write_line('};')
project_dict.add_item('buildSettings', PbxDict())
style_arr = PbxArray()
self.write_line('buildStyles = (') self.write_line('buildStyles = (')
project_dict.add_item('buildStyles', style_arr)
self.indent_level += 1 self.indent_level += 1
for name, idval in self.buildstylemap.items(): for name, idval in self.buildstylemap.items():
self.write_line(f'{idval} /* {name} */,') self.write_line(f'{idval} /* {name} */,')
style_arr.add_item(idval, name)
self.indent_level -= 1 self.indent_level -= 1
self.write_line(');') self.write_line(');')
self.write_line('compatibilityVersion = "Xcode 3.2";') self.write_line('compatibilityVersion = "Xcode 3.2";')
project_dict.add_item('compatibilityVersion', '"Xcode 3.2"')
self.write_line('hasScannedForEncodings = 0;') self.write_line('hasScannedForEncodings = 0;')
project_dict.add_item('hasScannedforEncodings', 0)
self.write_line('mainGroup = %s;' % self.maingroup_id) self.write_line('mainGroup = %s;' % self.maingroup_id)
project_dict.add_item('mainGrouå', self.maingroup_id)
self.write_line('projectDirPath = "%s";' % self.build_to_src) self.write_line('projectDirPath = "%s";' % self.build_to_src)
project_dict.add_item('projectDirPath', f'"{self.build_to_src}"')
self.write_line('projectRoot = "";') self.write_line('projectRoot = "";')
project_dict.add_item('projectRoot', '""')
targets_arr = PbxArray()
self.write_line('targets = (') self.write_line('targets = (')
project_dict.add_item('targets', targets_arr)
self.indent_level += 1 self.indent_level += 1
self.write_line('%s /* ALL_BUILD */,' % self.all_id) self.write_line('%s /* ALL_BUILD */,' % self.all_id)
targets_arr.add_item(self.all_id, 'ALL_BUILD')
self.write_line('%s /* RUN_TESTS */,' % self.test_id) self.write_line('%s /* RUN_TESTS */,' % self.test_id)
targets_arr.add_item(self.test_id, 'RUN_TESTS')
for t in self.build.get_build_targets(): for t in self.build.get_build_targets():
self.write_line('{} /* {} */,'.format(self.native_targets[t], t)) self.write_line('{} /* {} */,'.format(self.native_targets[t], t))
targets_arr.add_item(self.native_targets[t], t)
self.indent_level -= 1 self.indent_level -= 1
self.write_line(');') self.write_line(');')
self.indent_level -= 1 self.indent_level -= 1
self.write_line('};') self.write_line('};')
self.ofile.write('/* End PBXProject section */\n') self.ofile.write('/* End PBXProject section */\n')
def generate_pbx_shell_build_phase(self, test_data): def generate_pbx_shell_build_phase(self, objects_dict, test_data):
self.ofile.write('\n/* Begin PBXShellScriptBuildPhase section */\n') self.ofile.write('\n/* Begin PBXShellScriptBuildPhase section */\n')
shell_dict = PbxDict()
self.write_line('%s /* ShellScript */ = {' % self.test_command_id) self.write_line('%s /* ShellScript */ = {' % self.test_command_id)
objects_dict.add_item(self.test_command_id, shell_dict, 'ShellScript')
self.indent_level += 1 self.indent_level += 1
self.write_line('isa = PBXShellScriptBuildPhase;') self.write_line('isa = PBXShellScriptBuildPhase;')
shell_dict.add_item('isa', 'PBXShellScriptBuildPhase')
self.write_line('buildActionMask = 2147483647;') self.write_line('buildActionMask = 2147483647;')
shell_dict.add_item('buildActinMask', 2147483647)
self.write_line('files = (') self.write_line('files = (')
self.write_line(');') self.write_line(');')
shell_dict.add_item('files', PbxArray())
self.write_line('inputPaths = (') self.write_line('inputPaths = (')
self.write_line(');') self.write_line(');')
shell_dict.add_item('inputPaths', PbxArray())
self.write_line('outputPaths = (') self.write_line('outputPaths = (')
shell_dict.add_item('outputPaths', PbxArray())
self.write_line(');') self.write_line(');')
self.write_line('runOnlyForDeploymentPostprocessing = 0;') self.write_line('runOnlyForDeploymentPostprocessing = 0;')
shell_dict.add_item('runOnlyForDeploymentPostprocessing', 0)
self.write_line('shellPath = /bin/sh;') self.write_line('shellPath = /bin/sh;')
cmd = mesonlib.get_meson_command() + ['test', test_data, '-C', self.environment.get_build_dir()] shell_dict.add_item('shellPath', '/bin/sh')
cmd = mesonlib.get_meson_command() + ['test', '-C', self.environment.get_build_dir()]
cmdstr = ' '.join(["'%s'" % i for i in cmd]) cmdstr = ' '.join(["'%s'" % i for i in cmd])
self.write_line('shellScript = "%s";' % cmdstr) self.write_line('shellScript = "%s";' % cmdstr)
shell_dict.add_item('shellScript', f'"{cmdstr}"')
self.write_line('showEnvVarsInLog = 0;') self.write_line('showEnvVarsInLog = 0;')
shell_dict.add_item('showEvnVarsInLog', 0)
self.indent_level -= 1 self.indent_level -= 1
self.write_line('};') self.write_line('};')
self.ofile.write('/* End PBXShellScriptBuildPhase section */\n') self.ofile.write('/* End PBXShellScriptBuildPhase section */\n')
def generate_pbx_sources_build_phase(self): def generate_pbx_sources_build_phase(self, objects_dict):
self.ofile.write('\n/* Begin PBXSourcesBuildPhase section */\n') self.ofile.write('\n/* Begin PBXSourcesBuildPhase section */\n')
for name in self.source_phase.keys(): for name in self.source_phase.keys():
phase_dict = PbxDict()
t = self.build.get_build_targets()[name] t = self.build.get_build_targets()[name]
self.write_line('%s /* Sources */ = {' % (t.buildphasemap[name])) self.write_line('%s /* Sources */ = {' % (t.buildphasemap[name]))
objects_dict.add_item(t.buildphasemap[name], phase_dict, 'Sources')
self.indent_level += 1 self.indent_level += 1
self.write_line('isa = PBXSourcesBuildPhase;') self.write_line('isa = PBXSourcesBuildPhase;')
phase_dict.add_item('isa', 'PBXSourcesBuildPhase')
self.write_line('buildActionMask = 2147483647;') self.write_line('buildActionMask = 2147483647;')
phase_dict.add_item('buildActionMask', 2147483647)
file_arr = PbxArray()
self.write_line('files = (') self.write_line('files = (')
phase_dict.add_item('files', file_arr)
self.indent_level += 1 self.indent_level += 1
for s in self.build.get_build_targets()[name].sources: for s in self.build.get_build_targets()[name].sources:
s = os.path.join(s.subdir, s.fname) s = os.path.join(s.subdir, s.fname)
if not self.environment.is_header(s): if not self.environment.is_header(s):
self.write_line('{} /* {} */,'.format(self.buildmap[s], os.path.join(self.environment.get_source_dir(), s))) self.write_line('{} /* {} */,'.format(self.buildmap[s], os.path.join(self.environment.get_source_dir(), s)))
file_arr.add_item(self.buildmap[s], os.path.join(self.environment.get_source_dir(), s))
self.indent_level -= 1 self.indent_level -= 1
self.write_line(');') self.write_line(');')
self.write_line('runOnlyForDeploymentPostprocessing = 0;') self.write_line('runOnlyForDeploymentPostprocessing = 0;')
phase_dict.add_item('runOnlyForDeploymentPostprocessing', 0)
self.indent_level -= 1 self.indent_level -= 1
self.write_line('};') self.write_line('};')
self.ofile.write('/* End PBXSourcesBuildPhase section */\n') self.ofile.write('/* End PBXSourcesBuildPhase section */\n')
def generate_pbx_target_dependency(self): def generate_pbx_target_dependency(self, objects_dict):
targets = [] targets = []
for t in self.build.get_build_targets(): for t in self.build.get_build_targets():
idval = self.pbx_dep_map[t] # VERIFY: is this correct? idval = self.pbx_dep_map[t] # VERIFY: is this correct?
@ -877,11 +932,16 @@ class XCodeBackend(backends.Backend):
sorted_targets = sorted(targets, key=operator.itemgetter(0)) sorted_targets = sorted(targets, key=operator.itemgetter(0))
self.ofile.write('\n/* Begin PBXTargetDependency section */\n') self.ofile.write('\n/* Begin PBXTargetDependency section */\n')
for t in sorted_targets: for t in sorted_targets:
t_dict = PbxDict()
self.write_line('%s /* PBXTargetDependency */ = {' % t[0]) self.write_line('%s /* PBXTargetDependency */ = {' % t[0])
objects_dict.add_item(t[0], t_dict, 'PBXTargetDependency')
self.indent_level += 1 self.indent_level += 1
self.write_line('isa = PBXTargetDependency;') self.write_line('isa = PBXTargetDependency;')
t_dict.add_item('isa', 'PBXTargetDependency')
self.write_line('target = {} /* {} */;'.format(t[1], t[2])) self.write_line('target = {} /* {} */;'.format(t[1], t[2]))
t_dict.add_item('target', t[1], t[2])
self.write_line('targetProxy = %s /* PBXContainerItemProxy */;' % t[3]) self.write_line('targetProxy = %s /* PBXContainerItemProxy */;' % t[3])
t_dict.add_item('targetProx', t[3], 'PBXContainerItemProxy')
self.indent_level -= 1 self.indent_level -= 1
self.write_line('};') self.write_line('};')
self.ofile.write('/* End PBXTargetDependency section */\n') self.ofile.write('/* End PBXTargetDependency section */\n')

Loading…
Cancel
Save