@@ -842,6 +842,60 @@ def _get_vs_path(self, require_version):
842
842
843
843
return (needUpgrade , vsPath )
844
844
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
+
845
899
def build_win32 (self ):
846
900
if not self ._platforms .is_win32_active ():
847
901
return
@@ -891,25 +945,46 @@ def build_win32(self):
891
945
892
946
commandPath = os .path .join (vsPath , "Common7" , "IDE" , "devenv" )
893
947
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 )
894
958
895
- # upgrade projects
896
- if needUpgrade :
897
- commandUpgrade = ' ' .join ([
959
+ # build the project
960
+ commands = ' ' .join ([
898
961
"\" %s\" " % commandPath ,
899
962
"\" %s\" " % projectPath ,
900
- "/Upgrade"
963
+ "/Build \" %s|Win32\" " % build_mode ,
964
+ "/Project \" %s\" " % self .project_name
901
965
])
902
- self ._run_cmd (commandUpgrade )
903
966
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 )
911
987
912
- self ._run_cmd (commands )
913
988
914
989
cocos .Logging .info ("build succeeded." )
915
990
0 commit comments