diff options
author | Nicolas Schneider <nioncode+git@gmail.com> | 2019-01-26 10:57:31 +0100 |
---|---|---|
committer | Nicolas Schneider <nioncode+git@gmail.com> | 2019-02-12 23:31:59 +0100 |
commit | e004e711b1220ad0d94f91840a115713b594e727 (patch) | |
tree | 903f54341c39eb4bf59683443aeae53084340356 /mesonbuild/backend/vs2010backend.py | |
parent | b1c3d150fe37a3f2c158ad7a90a2ae33ef95c218 (diff) | |
download | meson-e004e711b1220ad0d94f91840a115713b594e727.zip meson-e004e711b1220ad0d94f91840a115713b594e727.tar.gz meson-e004e711b1220ad0d94f91840a115713b594e727.tar.bz2 |
vs: refactor regen target creation
Diffstat (limited to 'mesonbuild/backend/vs2010backend.py')
-rw-r--r-- | mesonbuild/backend/vs2010backend.py | 44 |
1 files changed, 16 insertions, 28 deletions
diff --git a/mesonbuild/backend/vs2010backend.py b/mesonbuild/backend/vs2010backend.py index e0bbf27..6148474 100644 --- a/mesonbuild/backend/vs2010backend.py +++ b/mesonbuild/backend/vs2010backend.py @@ -1263,31 +1263,13 @@ class Vs2010Backend(backends.Backend): ET.SubElement(midl, 'InterfaceIdentifierFilename').text = '%(Filename)_i.c' ET.SubElement(midl, 'ProxyFileName').text = '%(Filename)_p.c' regen_command = self.environment.get_build_command() + ['--internal', 'regencheck'] - private_dir = self.environment.get_scratch_dir() - vcvars_command = self.get_vcvars_command() - cmd_templ = '''setlocal -call %s > NUL -"%s" "%s" -if %%errorlevel%% neq 0 goto :cmEnd -:cmEnd -endlocal & call :cmErrorLevel %%errorlevel%% & goto :cmDone -:cmErrorLevel -exit /b %%1 -:cmDone -if %%errorlevel%% neq 0 goto :VCEnd''' - igroup = ET.SubElement(root, 'ItemGroup') - rulefile = os.path.join(self.environment.get_scratch_dir(), 'regen.rule') - if not os.path.exists(rulefile): - with open(rulefile, 'w', encoding='utf-8') as f: - f.write("# Meson regen file.") - custombuild = ET.SubElement(igroup, 'CustomBuild', Include=rulefile) - message = ET.SubElement(custombuild, 'Message') - message.text = 'Checking whether solution needs to be regenerated.' - ET.SubElement(custombuild, 'Command').text = cmd_templ % \ - (vcvars_command, '" "'.join(regen_command), private_dir) - ET.SubElement(custombuild, 'Outputs').text = Vs2010Backend.get_regen_stampfile(self.environment.get_build_dir()) - deps = self.get_regen_filelist() - ET.SubElement(custombuild, 'AdditionalInputs').text = ';'.join(deps) + cmd_templ = '''call %s > NUL +"%s" "%s"''' + regen_command = cmd_templ % \ + (self.get_vcvars_command(), '" "'.join(regen_command), self.environment.get_scratch_dir()) + self.add_custom_build(root, 'regen', regen_command, deps=self.get_regen_filelist(), + outputs=[Vs2010Backend.get_regen_stampfile(self.environment.get_build_dir())], + msg='Checking whether solution needs to be regenerated.') ET.SubElement(root, 'Import', Project=r'$(VCTargetsPath)\Microsoft.Cpp.targets') ET.SubElement(root, 'ImportGroup', Label='ExtensionTargets') self._prettyprint_vcxproj_xml(ET.ElementTree(root), ofname) @@ -1409,13 +1391,16 @@ if %%errorlevel%% neq 0 goto :VCEnd''' self.add_regen_dependency(root) self._prettyprint_vcxproj_xml(ET.ElementTree(root), ofname) - def add_custom_build(self, node, rulename, command, output_file=None): + def add_custom_build(self, node, rulename, command, deps=None, outputs=None, msg=None): igroup = ET.SubElement(node, 'ItemGroup') rulefile = os.path.join(self.environment.get_scratch_dir(), rulename + '.rule') if not os.path.exists(rulefile): with open(rulefile, 'w', encoding='utf-8') as f: f.write("# Meson regen file.") custombuild = ET.SubElement(igroup, 'CustomBuild', Include=rulefile) + if msg: + message = ET.SubElement(custombuild, 'Message') + message.text = msg cmd_templ = '''setlocal %s if %%errorlevel%% neq 0 goto :cmEnd @@ -1426,12 +1411,15 @@ exit /b %%1 :cmDone if %%errorlevel%% neq 0 goto :VCEnd''' ET.SubElement(custombuild, 'Command').text = cmd_templ % command - if not output_file: + if not outputs: # Use a nonexistent file to always consider the target out-of-date. output_file = os.path.join(self.environment.get_scratch_dir(), 'outofdate.file') while os.path.exists(output_file): output_file += '0' - ET.SubElement(custombuild, 'Outputs').text = output_file + outputs = [output_file] + ET.SubElement(custombuild, 'Outputs').text = ';'.join(outputs) + if deps: + ET.SubElement(custombuild, 'AdditionalInputs').text = ';'.join(deps) def generate_debug_information(self, link): # valid values for vs2015 is 'false', 'true', 'DebugFastLink' |