Skip to content

Commit 610b3e3

Browse files
author
Bin Zhang
committed
Merge pull request cocos2d#171 from thenewvu/fix-issue-#168
* fix compile failure on VS express versions
2 parents b544290 + c2614d8 commit 610b3e3

File tree

1 file changed

+88
-13
lines changed

1 file changed

+88
-13
lines changed

plugins/project_compile/project_compile.py

+88-13
Original file line numberDiff line numberDiff line change
@@ -842,6 +842,60 @@ def _get_vs_path(self, require_version):
842842

843843
return (needUpgrade, vsPath)
844844

845+
def _get_msbuild_version(self):
846+
try:
847+
reg_path = r'SOFTWARE\Microsoft\MSBuild'
848+
849+
reg_key = _winreg.OpenKey(
850+
_winreg.HKEY_LOCAL_MACHINE,
851+
reg_path
852+
)
853+
854+
try:
855+
i = 0
856+
while True:
857+
reg_subkey = _winreg.EnumKey(reg_key, i)
858+
yield reg_subkey
859+
i += 1
860+
except:
861+
pass
862+
863+
except WindowsError as e:
864+
message = "MSBuild is not installed yet!"
865+
print(e)
866+
raise cocos.CCPluginError(message)
867+
868+
def _get_newest_msbuild_version(self):
869+
newest_version = None
870+
newest_version_number = 0
871+
872+
version_pattern = re.compile('(\\d+)\\.(\\d+)')
873+
for version in self._get_msbuild_version():
874+
if version:
875+
match = version_pattern.match(version)
876+
if match:
877+
version_number = int(match.group(1)) * 10 + int(match.group(2))
878+
if version_number > newest_version_number:
879+
newest_version_number = version_number
880+
newest_version = version
881+
882+
return newest_version
883+
884+
def _get_msbuild_path(self):
885+
newest_msbuild_version = self._get_newest_msbuild_version()
886+
if newest_msbuild_version:
887+
reg_path = r'SOFTWARE\Microsoft\MSBuild\ToolsVersions\%s' % newest_msbuild_version
888+
reg_key = _winreg.OpenKey(
889+
_winreg.HKEY_LOCAL_MACHINE,
890+
reg_path
891+
)
892+
893+
reg_value, reg_value_type = _winreg.QueryValueEx(reg_key, 'MSBuildToolsPath')
894+
return reg_value
895+
896+
else:
897+
return None
898+
845899
def build_win32(self):
846900
if not self._platforms.is_win32_active():
847901
return
@@ -891,25 +945,46 @@ def build_win32(self):
891945

892946
commandPath = os.path.join(vsPath, "Common7", "IDE", "devenv")
893947
build_mode = 'Debug' if self._is_debug_mode() else 'Release'
948+
949+
if os.path.exists(commandPath):
950+
# upgrade projects
951+
if needUpgrade:
952+
commandUpgrade = ' '.join([
953+
"\"%s\"" % commandPath,
954+
"\"%s\"" % projectPath,
955+
"/Upgrade"
956+
])
957+
self._run_cmd(commandUpgrade)
894958

895-
# upgrade projects
896-
if needUpgrade:
897-
commandUpgrade = ' '.join([
959+
# build the project
960+
commands = ' '.join([
898961
"\"%s\"" % commandPath,
899962
"\"%s\"" % projectPath,
900-
"/Upgrade"
963+
"/Build \"%s|Win32\"" % build_mode,
964+
"/Project \"%s\"" % self.project_name
901965
])
902-
self._run_cmd(commandUpgrade)
903966

904-
# build the project
905-
commands = ' '.join([
906-
"\"%s\"" % commandPath,
907-
"\"%s\"" % projectPath,
908-
"/Build \"%s|Win32\"" % build_mode,
909-
"/Project \"%s\"" % self.project_name
910-
])
967+
self._run_cmd(commands)
968+
else:
969+
cocos.Logging.info('Not found devenv. Try to use msbuild instead.')
970+
971+
msbuild_path = self._get_msbuild_path()
972+
973+
if msbuild_path:
974+
msbuild_path = os.path.join(msbuild_path, 'MSBuild.exe')
975+
cocos.Logging.info('Found msbuild path: %s' % msbuild_path)
976+
977+
job_number = 2
978+
build_command = ' '.join([
979+
'\"%s\"' % msbuild_path,
980+
'\"%s\"' % projectPath,
981+
'/target:%s' % self.project_name,
982+
'/property:Configuration=%s' % build_mode,
983+
'/maxcpucount:%s' % job_number
984+
])
985+
986+
self._run_cmd(build_command)
911987

912-
self._run_cmd(commands)
913988

914989
cocos.Logging.info("build succeeded.")
915990

0 commit comments

Comments
 (0)