aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2015-11-06 20:41:54 +0200
committerJussi Pakkanen <jpakkane@gmail.com>2015-11-06 20:42:14 +0200
commit1b697f04cdb54730d1b488e0bbbf5d51d7c41ed7 (patch)
treee6cd4d0464751d45b131e41fe275323ee006b51b
parent86c401e7b0e2ca6dfb28d857f756e1007117636d (diff)
downloadmeson-1b697f04cdb54730d1b488e0bbbf5d51d7c41ed7.zip
meson-1b697f04cdb54730d1b488e0bbbf5d51d7c41ed7.tar.gz
meson-1b697f04cdb54730d1b488e0bbbf5d51d7c41ed7.tar.bz2
Fixed run targets on VS2010.
-rw-r--r--backends.py2
-rw-r--r--test cases/common/60 install script/myinstall.bat3
-rw-r--r--vs2010backend.py39
3 files changed, 41 insertions, 3 deletions
diff --git a/backends.py b/backends.py
index 300f05d..e98cef4 100644
--- a/backends.py
+++ b/backends.py
@@ -226,7 +226,7 @@ class Backend():
if isinstance(target, build.Executable):
commands += dep.get_exe_args()
- # Fortran rquires extra include directives.
+ # Fortran requires extra include directives.
if compiler.language == 'fortran':
for lt in target.link_targets:
priv_dir = os.path.join(self.get_target_dir(lt), lt.get_basename() + lt.type_suffix())
diff --git a/test cases/common/60 install script/myinstall.bat b/test cases/common/60 install script/myinstall.bat
new file mode 100644
index 0000000..7036077
--- /dev/null
+++ b/test cases/common/60 install script/myinstall.bat
@@ -0,0 +1,3 @@
+@ECHO OFF
+
+echo At this point we could do something.
diff --git a/vs2010backend.py b/vs2010backend.py
index 199193b..7ea0150 100644
--- a/vs2010backend.py
+++ b/vs2010backend.py
@@ -15,6 +15,7 @@
import os, sys
import pickle
import backends, build
+import dependencies
import mlog
import xml.etree.ElementTree as ET
import xml.dom.minidom
@@ -110,6 +111,11 @@ class Vs2010Backend(backends.Backend):
for d in target.dependencies:
all_deps[d.get_id()] = True
return all_deps
+ if isinstance(target, build.RunTarget):
+ for d in [target.command] + target.args:
+ if isinstance(d, build.BuildTarget):
+ all_deps[d.get_id()] = True
+ return all_deps
for ldep in target.link_targets:
all_deps[ldep.get_id()] = True
for objdep in self.get_obj_target_deps(target.objects):
@@ -157,7 +163,8 @@ class Vs2010Backend(backends.Backend):
ofile.write('\t\t{%s}.Debug|Win32.Build.0 = Debug|Win32\n' % self.environment.coredata.regen_guid)
for p in projlist:
ofile.write('\t\t{%s}.Debug|Win32.ActiveCfg = Debug|Win32\n' % p[2])
- ofile.write('\t\t{%s}.Debug|Win32.Build.0 = Debug|Win32\n' % p[2])
+ if not isinstance(self.build.targets[p[0]], build.RunTarget):
+ ofile.write('\t\t{%s}.Debug|Win32.Build.0 = Debug|Win32\n' % p[2])
ofile.write('\t\t{%s}.Debug|Win32.ActiveCfg = Debug|Win32\n' % self.environment.coredata.test_guid)
ofile.write('\tEndGlobalSection\n')
ofile.write('\tGlobalSection(SolutionProperties) = preSolution\n')
@@ -206,7 +213,7 @@ class Vs2010Backend(backends.Backend):
def special_quote(self, arr):
return ['&quot;%s&quot;' % i for i in arr]
- def gen_custom_target_vcxproj(self, target, ofname, guid):
+ def create_basic_crap(self, target):
buildtype = self.environment.coredata.buildtype
platform = "Win32"
project_name = target.name
@@ -243,6 +250,32 @@ class Vs2010Backend(backends.Backend):
intdir.text = 'test-temp\\'
tname = ET.SubElement(direlem, 'TargetName')
tname.text = target.name
+ return root
+
+ def gen_run_target_vcxproj(self, target, ofname, guid):
+ root = self.create_basic_crap(target)
+ action = ET.SubElement(root, 'ItemDefinitionGroup')
+ customstep = ET.SubElement(action, 'PostBuildEvent')
+ cmd_raw = [target.command] + target.args
+ cmd = [sys.executable, os.path.join(self.environment.get_script_dir(), 'commandrunner.py'),
+ self.environment.get_build_dir(), self.environment.get_source_dir(),
+ self.get_target_dir(target)]
+ for i in cmd_raw:
+ if isinstance(i, build.BuildTarget):
+ cmd.append(os.path.join(self.environment.get_build_dir(), self.get_target_filename(i)))
+ elif isinstance(i, dependencies.ExternalProgram):
+ cmd += i.fullpath
+ else:
+ cmd.append(i)
+ cmd_templ = '''"%s" '''*len(cmd)
+ ET.SubElement(customstep, 'Command').text = cmd_templ % tuple(cmd)
+ ET.SubElement(customstep, 'Message').text = 'Running custom command.'
+ ET.SubElement(root, 'Import', Project='$(VCTargetsPath)\Microsoft.Cpp.targets')
+ tree = ET.ElementTree(root)
+ tree.write(ofname, encoding='utf-8', xml_declaration=True)
+
+ def gen_custom_target_vcxproj(self, target, ofname, guid):
+ root = self.create_basic_crap(target)
action = ET.SubElement(root, 'ItemDefinitionGroup')
customstep = ET.SubElement(action, 'CustomBuildStep')
(srcs, ofilenames, cmd) = self.eval_custom_target_command(target, True)
@@ -272,6 +305,8 @@ class Vs2010Backend(backends.Backend):
entrypoint = '_DllMainCrtStartup'
elif isinstance(target, build.CustomTarget):
return self.gen_custom_target_vcxproj(target, ofname, guid)
+ elif isinstance(target, build.RunTarget):
+ return self.gen_run_target_vcxproj(target, ofname, guid)
else:
raise MesonException('Unknown target type for %s' % target.get_basename())
down = self.target_to_build_root(target)