From 3bedca025717aec3266450feb1d472d4169b68cd Mon Sep 17 00:00:00 2001 From: Nicolas Schneider Date: Thu, 26 May 2016 00:03:02 +0200 Subject: add vs2015 backend --- mesonbuild/backend/vs2010backend.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'mesonbuild/backend/vs2010backend.py') diff --git a/mesonbuild/backend/vs2010backend.py b/mesonbuild/backend/vs2010backend.py index 355798d..54ae35c 100644 --- a/mesonbuild/backend/vs2010backend.py +++ b/mesonbuild/backend/vs2010backend.py @@ -39,6 +39,7 @@ class Vs2010Backend(backends.Backend): super().__init__(build) self.project_file_version = '10.0.30319.1' self.sources_conflicts = {} + self.platform_toolset = None def object_filename_from_source(self, target, source): basename = os.path.basename(source.fname) @@ -309,6 +310,8 @@ class Vs2010Backend(backends.Backend): ET.SubElement(type_config, 'ConfigurationType') ET.SubElement(type_config, 'CharacterSet').text = 'MultiByte' ET.SubElement(type_config, 'UseOfMfc').text = 'false' + if self.platform_toolset: + ET.SubElement(type_config, 'PlatformToolset').text = self.platform_toolset ET.SubElement(root, 'Import', Project='$(VCTargetsPath)\Microsoft.Cpp.props') direlem = ET.SubElement(root, 'PropertyGroup') fver = ET.SubElement(direlem, '_ProjectFileVersion') @@ -441,6 +444,8 @@ class Vs2010Backend(backends.Backend): type_config = ET.SubElement(root, 'PropertyGroup', Label='Configuration') ET.SubElement(type_config, 'ConfigurationType').text = conftype ET.SubElement(type_config, 'CharacterSet').text = 'MultiByte' + if self.platform_toolset: + ET.SubElement(type_config, 'PlatformToolset').text = self.platform_toolset ET.SubElement(type_config, 'WholeProgramOptimization').text = 'false' ET.SubElement(type_config, 'UseDebugLibraries').text = 'true' ET.SubElement(root, 'Import', Project='$(VCTargetsPath)\Microsoft.Cpp.props') @@ -691,6 +696,8 @@ class Vs2010Backend(backends.Backend): ET.SubElement(type_config, 'ConfigurationType').text = "Utility" ET.SubElement(type_config, 'CharacterSet').text = 'MultiByte' ET.SubElement(type_config, 'UseOfMfc').text = 'false' + if self.platform_toolset: + ET.SubElement(type_config, 'PlatformToolset').text = self.platform_toolset ET.SubElement(root, 'Import', Project='$(VCTargetsPath)\Microsoft.Cpp.props') direlem = ET.SubElement(root, 'PropertyGroup') fver = ET.SubElement(direlem, '_ProjectFileVersion') @@ -768,6 +775,8 @@ if %%errorlevel%% neq 0 goto :VCEnd''' ET.SubElement(type_config, 'ConfigurationType') ET.SubElement(type_config, 'CharacterSet').text = 'MultiByte' ET.SubElement(type_config, 'UseOfMfc').text = 'false' + if self.platform_toolset: + ET.SubElement(type_config, 'PlatformToolset').text = self.platform_toolset ET.SubElement(root, 'Import', Project='$(VCTargetsPath)\Microsoft.Cpp.props') direlem = ET.SubElement(root, 'PropertyGroup') fver = ET.SubElement(direlem, '_ProjectFileVersion') @@ -811,3 +820,9 @@ if %%errorlevel%% neq 0 goto :VCEnd''' # ElementTree can not do prettyprinting so do it manually #doc = xml.dom.minidom.parse(ofname) #open(ofname, 'w').write(doc.toprettyxml()) + + +class Vs2015Backend(Vs2010Backend): + def __init__(self, build): + super().__init__(build) + self.platform_toolset = 'v140' -- cgit v1.1 From d34d85b0f5994b1eb07d93a97df75b815c31e51e Mon Sep 17 00:00:00 2001 From: Nicolas Schneider Date: Thu, 26 May 2016 13:42:58 +0200 Subject: vs2015: fix object generators --- mesonbuild/backend/vs2010backend.py | 30 +++++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) (limited to 'mesonbuild/backend/vs2010backend.py') diff --git a/mesonbuild/backend/vs2010backend.py b/mesonbuild/backend/vs2010backend.py index 54ae35c..f8cdbfc 100644 --- a/mesonbuild/backend/vs2010backend.py +++ b/mesonbuild/backend/vs2010backend.py @@ -388,6 +388,18 @@ class Vs2010Backend(backends.Backend): lang = Vs2010Backend.lang_from_source_file(source_file) ET.SubElement(parent_node, "AdditionalOptions").text = ' '.join(extra_args[lang]) + ' %(AdditionalOptions)' + @staticmethod + def has_objects(objects, additional_objects, generated_objects): + # Ignore generated objects, those are automatically used by MSBuild for VS2010, because they are part of + # the CustomBuildStep Outputs. + return len(objects) + len(additional_objects) > 0 + + @staticmethod + def add_generated_objects(node, generated_objects): + # Do not add generated objects to project file. Those are automatically used by MSBuild for VS2010, because + # they are part of the CustomBuildStep Outputs. + return + @classmethod def quote_define_cmdline(cls, arg): return re.sub(r'^([-/])D(.*?)="(.*)"$', r'\1D\2=\"\3\"', arg) @@ -646,15 +658,15 @@ class Vs2010Backend(backends.Backend): pch_file.text = os.path.split(header)[1] self.add_additional_options(impl, inc_cl, extra_args, additional_options_set) - if len(objects) + len(additional_objects) > 0: - # Do not add gen_objs to project file. Those are automatically used by MSBuild, because they are part of - # the CustomBuildStep Outputs. + if self.has_objects(objects, additional_objects, gen_objs): inc_objs = ET.SubElement(root, 'ItemGroup') for s in objects: relpath = s.rel_to_builddir(proj_to_src_root) ET.SubElement(inc_objs, 'Object', Include=relpath) for s in additional_objects: ET.SubElement(inc_objs, 'Object', Include=s) + self.add_generated_objects(inc_objs, gen_objs) + ET.SubElement(root, 'Import', Project='$(VCTargetsPath)\Microsoft.Cpp.targets') # Reference the regen target. ig = ET.SubElement(root, 'ItemGroup') @@ -826,3 +838,15 @@ class Vs2015Backend(Vs2010Backend): def __init__(self, build): super().__init__(build) self.platform_toolset = 'v140' + + @staticmethod + def has_objects(objects, additional_objects, generated_objects): + # VS2015 requires generated objects to be added explicitly to the project file. + return len(objects) + len(additional_objects) + len(generated_objects) > 0 + + @staticmethod + def add_generated_objects(node, generated_objects): + # VS2015 requires generated objects to be added explicitly to the project file. + for s in generated_objects: + ET.SubElement(node, 'Object', Include=s) + return -- cgit v1.1 From fba749fcb7a9654db78d45157477589e4352c2e1 Mon Sep 17 00:00:00 2001 From: Nicolas Schneider Date: Mon, 30 May 2016 21:56:16 +0200 Subject: extract vs2015backend into own file --- mesonbuild/backend/vs2010backend.py | 18 ------------------ 1 file changed, 18 deletions(-) (limited to 'mesonbuild/backend/vs2010backend.py') diff --git a/mesonbuild/backend/vs2010backend.py b/mesonbuild/backend/vs2010backend.py index f8cdbfc..540dd04 100644 --- a/mesonbuild/backend/vs2010backend.py +++ b/mesonbuild/backend/vs2010backend.py @@ -832,21 +832,3 @@ if %%errorlevel%% neq 0 goto :VCEnd''' # ElementTree can not do prettyprinting so do it manually #doc = xml.dom.minidom.parse(ofname) #open(ofname, 'w').write(doc.toprettyxml()) - - -class Vs2015Backend(Vs2010Backend): - def __init__(self, build): - super().__init__(build) - self.platform_toolset = 'v140' - - @staticmethod - def has_objects(objects, additional_objects, generated_objects): - # VS2015 requires generated objects to be added explicitly to the project file. - return len(objects) + len(additional_objects) + len(generated_objects) > 0 - - @staticmethod - def add_generated_objects(node, generated_objects): - # VS2015 requires generated objects to be added explicitly to the project file. - for s in generated_objects: - ET.SubElement(node, 'Object', Include=s) - return -- cgit v1.1