aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/backend
diff options
context:
space:
mode:
authormatyalatte <matyalatte@gmail.com>2024-04-07 20:58:43 +0900
committerDylan Baker <dylan@pnwbakers.com>2024-05-01 09:45:53 -0700
commite3db7af0ea41ea120f9d2dfedba309522575c5e7 (patch)
treeb846d3d857f8a169836f433e26e964842fbd490f /mesonbuild/backend
parentf38a8269f812c57b1884419a67bb5ce9e9f8983f (diff)
downloadmeson-e3db7af0ea41ea120f9d2dfedba309522575c5e7.zip
meson-e3db7af0ea41ea120f9d2dfedba309522575c5e7.tar.gz
meson-e3db7af0ea41ea120f9d2dfedba309522575c5e7.tar.bz2
vs2010backend: fix an error when using /MANIFEST:NO
Diffstat (limited to 'mesonbuild/backend')
-rw-r--r--mesonbuild/backend/vs2010backend.py25
1 files changed, 20 insertions, 5 deletions
diff --git a/mesonbuild/backend/vs2010backend.py b/mesonbuild/backend/vs2010backend.py
index 9c23571..2e81008 100644
--- a/mesonbuild/backend/vs2010backend.py
+++ b/mesonbuild/backend/vs2010backend.py
@@ -129,6 +129,14 @@ def get_non_primary_lang_intellisense_fields(vslite_ctx: dict,
defs_paths_opts_per_lang_and_buildtype[src_lang][buildtype] = Vs2010Backend._extract_nmake_fields(args_list)
return defs_paths_opts_per_lang_and_buildtype
+# Returns if a target generates a manifest or not.
+def get_gen_manifest(target):
+ if isinstance(target, build.BuildTarget):
+ upper_args = [arg.upper() for arg in target.link_args]
+ manifest_args = [arg for arg in upper_args if arg == '/MANIFEST' or arg.startswith('/MANIFEST:')]
+ return len(manifest_args) == 0 or manifest_args[-1] != '/MANIFEST:NO'
+ return True
+
class Vs2010Backend(backends.Backend):
name = 'vs2010'
@@ -616,7 +624,8 @@ class Vs2010Backend(backends.Backend):
guid,
conftype='Utility',
target_ext=None,
- target_platform=None) -> T.Tuple[ET.Element, ET.Element]:
+ target_platform=None,
+ gen_manifest=True) -> T.Tuple[ET.Element, ET.Element]:
root = ET.Element('Project', {'DefaultTargets': "Build",
'ToolsVersion': '4.0',
'xmlns': 'http://schemas.microsoft.com/developer/msbuild/2003'})
@@ -688,13 +697,16 @@ class Vs2010Backend(backends.Backend):
ET.SubElement(direlem, 'TargetExt').text = target_ext
ET.SubElement(direlem, 'EmbedManifest').text = 'false'
+ if not gen_manifest:
+ ET.SubElement(direlem, 'GenerateManifest').text = 'false'
return (root, type_config)
def gen_run_target_vcxproj(self, target: build.RunTarget, ofname: str, guid: str) -> None:
(root, type_config) = self.create_basic_project(target.name,
temp_dir=target.get_id(),
- guid=guid)
+ guid=guid,
+ gen_manifest=get_gen_manifest(target))
depend_files = self.get_target_depend_files(target)
if not target.command:
@@ -729,7 +741,8 @@ class Vs2010Backend(backends.Backend):
(root, type_config) = self.create_basic_project(target.name,
temp_dir=target.get_id(),
guid=guid,
- target_platform=platform)
+ target_platform=platform,
+ gen_manifest=get_gen_manifest(target))
# We need to always use absolute paths because our invocation is always
# from the target dir, not the build root.
target.absolute_paths = True
@@ -769,7 +782,8 @@ class Vs2010Backend(backends.Backend):
(root, type_config) = self.create_basic_project(target.name,
temp_dir=target.get_id(),
guid=guid,
- target_platform=platform)
+ target_platform=platform,
+ gen_manifest=get_gen_manifest(target))
ET.SubElement(root, 'Import', Project=r'$(VCTargetsPath)\Microsoft.Cpp.targets')
target.generated = [self.compile_target_to_generator(target)]
target.sources = []
@@ -1601,7 +1615,8 @@ class Vs2010Backend(backends.Backend):
guid=guid,
conftype=conftype,
target_ext=tfilename[1],
- target_platform=platform)
+ target_platform=platform,
+ gen_manifest=get_gen_manifest(target))
generated_files, custom_target_output_files, generated_files_include_dirs = self.generate_custom_generator_commands(
target, root)