Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix VisualStudio detection #449

Open
wants to merge 4 commits into
base: v3
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
60 changes: 16 additions & 44 deletions plugins/plugin_compile/project_compile.py
Original file line number Diff line number Diff line change
Expand Up @@ -436,7 +436,7 @@ def get_engine_version_num(self):
if engine_ver_str is None:
return None

version_pattern = r'cocos2d-x-([\d]+)\.([\d]+)'
version_pattern = r'cocos2d-x[^0-9]*([\d]+)\.([\d]+)'
match = re.match(version_pattern, engine_ver_str)
if match:
return ((int)(match.group(1)), (int)(match.group(2)))
Expand Down Expand Up @@ -980,48 +980,25 @@ def build_mac(self):
# Get the required VS versions from the engine version of project
def get_required_vs_versions(self):
# get the engine version string
ret = []

# 1. get engine version from .cocos_project.json
engine_ver_str = self._project.get_proj_config(cocos_project.Project.KEY_ENGINE_VERSION)

# 2. engine version is not found. find from source file
if engine_ver_str is None:
engine_dir = self.get_engine_dir()
if engine_dir is not None:
engine_ver_str = utils.get_engine_version(engine_dir)

if engine_ver_str is None:
return ret

# get the float value of engine version
version_pattern = r'cocos2d-x[^0-9]*([\d]+)\.([\d]+)'
match = re.match(version_pattern, engine_ver_str)
if match:
major_ver = int(match.group(1))
minor_ver = int(match.group(2))
else:
major_ver = -1
minor_ver = -1
engine_version_num = self.get_engine_version_num()
if engine_version_num is None:
raise cocos.CCPluginError(MultiLanguage.get_string('COMPILE_ERROR_UNKNOWN_ENGINE_VERSION'))

if major_ver < 0:
return ret
major_ver = engine_version_num[0]
minor_ver = engine_version_num[1]

if (major_ver > 3) or (major_ver == 3 and minor_ver >= 7):
if (major_ver > 3) or (major_ver == 3 and minor_ver >= 17):
ret = [ 2015, 2017 ]
elif major_ver == 3 and minor_ver >= 7:
ret = [ 2013, 2015, 2017 ]
elif self._platforms.is_metro_active():
# metro project required VS 2013
ret = [ 2013 ]
else:
ret = [ 2012, 2013 ]

return ret

def get_min_vs_version(self):
if self._platforms.is_metro_active():
# metro project required VS 2013
return 2013
else:
# win32 project required VS 2012
return 2012

def get_available_devenv(self, required_versions, min_ver, specify_vs_ver=None):
if required_versions is None or len(required_versions) == 0:
if specify_vs_ver is None:
Expand Down Expand Up @@ -1101,14 +1078,10 @@ def get_available_msbuild(self, required_versions, min_ver, specify_vs_ver=None)

def build_vs_project(self, sln_file, project_name, build_mode, specify_vs_ver=None):
required_versions = self.get_required_vs_versions()
min_ver = self.get_min_vs_version()
if required_versions is None or len(required_versions) == 0:
msg_version = min_ver
else:
msg_version = required_versions
cocos.Logging.info(MultiLanguage.get_string('COMPILE_INFO_REQUIRED_VS_FMT', msg_version))

needUpgrade, commandPath = self.get_available_devenv(required_versions, min_ver, specify_vs_ver)
cocos.Logging.info(MultiLanguage.get_string('COMPILE_INFO_REQUIRED_VS_FMT', required_versions))

needUpgrade, commandPath = self.get_available_devenv(required_versions, required_versions[0], specify_vs_ver)
if os.path.exists(commandPath):
# upgrade projects
if needUpgrade:
Expand All @@ -1131,10 +1104,9 @@ def build_vs_project(self, sln_file, project_name, build_mode, specify_vs_ver=No
else:
cocos.Logging.info(MultiLanguage.get_string('COMPILE_INFO_DEVENV_NOT_FOUND'))

msbuild_path = self.get_available_msbuild(required_versions, min_ver, specify_vs_ver)
msbuild_path = self.get_available_msbuild(required_versions, required_versions[0], specify_vs_ver)

if msbuild_path:
msbuild_path = os.path.join(msbuild_path, 'MSBuild.exe')
cocos.Logging.info(MultiLanguage.get_string('COMPILE_INFO_FIND_MSBUILD_FMT', msbuild_path))

job_number = 2
Expand Down