def calcuuid(input): hash = hashlib.md5(burger.converttowindowsslashes(str(input))).hexdigest() # # Take the hash string and only use the top 96 bits # return hash[0:24].upper()
def writefiltergroup(fp,filelist,groups,compilername): # Iterate over the list for item in filelist: # Get the Visual Studio group name groupname = item.extractgroupname() if groupname!='': # Add to the list of groups found groups.append(groupname) # Write out the record fp.write(u'\t\t<' + compilername + ' Include="' + burger.converttowindowsslashes(item.filename) + '">\n') fp.write(u'\t\t\t<Filter>' + groupname + '</Filter>\n') fp.write(u'\t\t</' + compilername + '>\n')
def writefilter(self,fp): # # Stock header for the filter # fp.write(u'<?xml version="1.0" encoding="utf-8"?>\n') fp.write(u'<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\n') fp.write(u'\t<ItemGroup>\n') groups = [] writefiltergroup(fp,self.listh,groups,u'ClInclude') writefiltergroup(fp,self.listcpp,groups,u'ClCompile') writefiltergroup(fp,self.listwindowsresource,groups,u'ResourceCompile') writefiltergroup(fp,self.listhlsl,groups,u'HLSL') writefiltergroup(fp,self.listx360sl,groups,u'X360SL') writefiltergroup(fp,self.listvitacg,groups,u'VitaCGCompile') writefiltergroup(fp,self.listglsl,groups,u'GLSL') # Visual Studio 2015 and later have a "compiler" for ico files if self.defaults.fileversion.value>=FileVersions.vs2015.value: writefiltergroup(fp,self.listico,groups,u'Image') else: writefiltergroup(fp,self.listico,groups,u'None') # Remove all duplicate in the groups groupset = set(groups) # Output the group list for item in groupset: item = burger.converttowindowsslashes(item) groupuuid = calcuuid(self.defaults.projectfilename + item) fp.write(u'\t\t<Filter Include="' + item + '">\n') fp.write(u'\t\t\t<UniqueIdentifier>{' + groupuuid + '}</UniqueIdentifier>\n') fp.write(u'\t\t</Filter>\n') fp.write(u'\t</ItemGroup>\n') fp.write(u'</Project>\n') return len(groupset)
'Project'] __author__ = 'Rebecca Ann Heineman ([email protected])' import hashlib import makeprojects import os >>>>>>> 8cfb6bc... Updated makeprojects to auto-generate iOS projects under XCode 5.x. iOS binaries are "fat", meaning they have armv7, armv7s, arm64, i386 and x86_64 binaries so it works both on a native device and on the simulators # # Given a string, create a 96 bit unique hash for XCode # def calcuuid(input): <<<<<<< HEAD hash = hashlib.md5(burger.converttowindowsslashes(str(input))).hexdigest() # # Take the hash string and only use the top 96 bits # return hash[0:24].upper() ======= input = hashlib.md5(str(input).replace('/','\\')).hexdigest() input = input.upper() # Take the hash string and only use the top 96 bits input = input[0:24] return input >>>>>>> 8cfb6bc... Updated makeprojects to auto-generate iOS projects under XCode 5.x. iOS binaries are "fat", meaning they have armv7, armv7s, arm64, i386 and x86_64 binaries so it works both on a native device and on the simulators #
def writeproject2010(self,fp,solution): # # Save off the xml header # fp.write(u'<?xml version="1.0" encoding="utf-8"?>\n') if self.defaults.fileversion.value>=FileVersions.vs2015.value: toolsversion = '14.0' else: toolsversion = '4.0' fp.write(u'<Project DefaultTargets="Build" ToolsVersion="' + toolsversion + '" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\n') # # nVidia Shield projects have a version header # if self.defaults.platformcode=='shi': fp.write(u'\t<PropertyGroup Label="NsightTegraProject">\n') fp.write(u'\t\t<NsightTegraProjectRevisionNumber>11</NsightTegraProjectRevisionNumber>\n') fp.write(u'\t</PropertyGroup>\n') # # Write the project configurations # fp.write(u'\t<ItemGroup Label="ProjectConfigurations">\n') for target in solution.configurations: for vsplatform in solution.getvsplatform(): token = target + '|' + vsplatform fp.write(u'\t\t<ProjectConfiguration Include="' + token + '">\n') fp.write(u'\t\t\t<Configuration>' + target + '</Configuration>\n') fp.write(u'\t\t\t<Platform>' + vsplatform + '</Platform>\n') fp.write(u'\t\t</ProjectConfiguration>\n') fp.write(u'\t</ItemGroup>\n') # # Write the project globals # fp.write(u'\t<PropertyGroup Label="Globals">\n') fp.write(u'\t\t<ProjectName>' + solution.projectname + '</ProjectName>\n') if solution.finalfolder!=None: final = burger.converttowindowsslasheswithendslash(solution.finalfolder) fp.write(u'\t\t<FinalFolder>' + final + '</FinalFolder>\n') fp.write(u'\t\t<ProjectGuid>{' + self.defaults.uuid + '}</ProjectGuid>\n') fp.write(u'\t</PropertyGroup>\n') # # Add in the project includes # fp.write(u'\t<Import Project="$(VCTargetsPath)\\Microsoft.Cpp.Default.props" />\n') if self.defaults.fileversion.value>=FileVersions.vs2015.value: fp.write(u'\t<PropertyGroup Label="Configuration">\n') fp.write(u'\t\t<PlatformToolset>v140</PlatformToolset>\n') fp.write(u'\t</PropertyGroup>\n') if solution.kind=='library': fp.write(u'\t<Import Project="$(BURGER_SDKS)\\visualstudio\\burger.libv10.props" />\n') elif solution.kind=='tool': fp.write(u'\t<Import Project="$(BURGER_SDKS)\\visualstudio\\burger.toolv10.props" />\n') else: fp.write(u'\t<Import Project="$(BURGER_SDKS)\\visualstudio\\burger.gamev10.props" />\n') fp.write(u'\t<Import Project="$(VCTargetsPath)\\Microsoft.Cpp.props" />\n') fp.write(u'\t<ImportGroup Label="ExtensionSettings" />\n') fp.write(u'\t<ImportGroup Label="PropertySheets" />\n') fp.write(u'\t<PropertyGroup Label="UserMacros" />\n') # # Insert compiler settings # if len(self.includedirectories) or \ len(solution.includefolders) or \ len(solution.defines): fp.write(u'\t<ItemDefinitionGroup>\n') # # Handle global compiler defines # if len(self.includedirectories) or \ len(solution.includefolders) or \ len(solution.defines): fp.write(u'\t\t<ClCompile>\n') # Include directories if len(self.includedirectories) or len(solution.includefolders): fp.write(u'\t\t\t<AdditionalIncludeDirectories>') for dir in self.includedirectories: fp.write(u'$(ProjectDir)' + burger.converttowindowsslashes(dir) + ';') for dir in solution.includefolders: fp.write(burger.converttowindowsslashes(dir) + ';') fp.write(u'%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n') # Global defines if len(solution.defines): fp.write(u'\t\t\t<PreprocessorDefinitions>') for define in solution.defines: fp.write(define + ';') fp.write(u'%(PreprocessorDefinitions)</PreprocessorDefinitions>\n') fp.write(u'\t\t</ClCompile>\n') # # Handle global linker defines # if len(solution.includefolders): fp.write(u'\t\t<Link>\n') # Include directories if len(solution.includefolders): fp.write(u'\t\t\t<AdditionalLibraryDirectories>') for dir in solution.includefolders: fp.write(burger.converttowindowsslashes(dir) + ';') fp.write(u'%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n') fp.write(u'\t\t</Link>\n') fp.write(u'\t</ItemDefinitionGroup>\n') # # This is needed for the PS3 and PS4 targets :( # if self.defaults.platformcode=='ps3' or self.defaults.platformcode=='ps4': fp.write(u'\t<ItemDefinitionGroup Condition="\'$(BurgerConfiguration)\'!=\'Release\'">\n') fp.write(u'\t\t<ClCompile>\n') fp.write(u'\t\t\t<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n') fp.write(u'\t\t</ClCompile>\n') fp.write(u'\t</ItemDefinitionGroup>\n') fp.write(u'\t<ItemDefinitionGroup Condition="\'$(BurgerConfiguration)\'==\'Release\'">\n') fp.write(u'\t\t<ClCompile>\n') fp.write(u'\t\t\t<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n') fp.write(u'\t\t</ClCompile>\n') fp.write(u'\t</ItemDefinitionGroup>\n') # # Any source files for the item groups? # if len(self.listh) or \ len(self.listcpp) or \ len(self.listwindowsresource) or \ len(self.listhlsl) or \ len(self.listglsl) or \ len(self.listx360sl) or \ len(self.listvitacg) or \ len(self.listico): fp.write(u'\t<ItemGroup>\n') for item in self.listh: fp.write(u'\t\t<ClInclude Include="' + burger.converttowindowsslashes(item.filename) + '" />\n') for item in self.listcpp: fp.write(u'\t\t<ClCompile Include="' + burger.converttowindowsslashes(item.filename) + '" />\n') for item in self.listwindowsresource: fp.write(u'\t\t<ResourceCompile Include="' + burger.converttowindowsslashes(item.filename) + '" />\n') for item in self.listhlsl: fp.write(u'\t\t<HLSL Include="' + burger.converttowindowsslashes(item.filename) + '">\n') # Cross platform way in splitting the path (MacOS doesn't like windows slashes) basename = burger.converttowindowsslashes(item.filename).lower().rsplit('\\',1)[1] splitname = os.path.splitext(basename) if splitname[0].startswith('vs41'): profile = 'vs_4_1' elif splitname[0].startswith('vs4'): profile = 'vs_4_0' elif splitname[0].startswith('vs3'): profile = 'vs_3_0' elif splitname[0].startswith('vs2'): profile = 'vs_2_0' elif splitname[0].startswith('vs1'): profile = 'vs_1_1' elif splitname[0].startswith('vs'): profile = 'vs_2_0' elif splitname[0].startswith('ps41'): profile = 'ps_4_1' elif splitname[0].startswith('ps4'): profile = 'ps_4_0' elif splitname[0].startswith('ps3'): profile = 'ps_3_0' elif splitname[0].startswith('ps2'): profile = 'ps_2_0' elif splitname[0].startswith('ps'): profile = 'ps_2_0' elif splitname[0].startswith('tx'): profile = 'tx_1_0' elif splitname[0].startswith('gs41'): profile = 'gs_4_1' elif splitname[0].startswith('gs'): profile = 'gs_4_0' else: profile = 'fx_2_0' fp.write(u'\t\t\t<VariableName>g_' + splitname[0] + '</VariableName>\n') fp.write(u'\t\t\t<TargetProfile>' + profile + '</TargetProfile>\n') fp.write(u'\t\t</HLSL>\n') for item in self.listx360sl: fp.write(u'\t\t<X360SL Include="' + burger.converttowindowsslashes(item.filename) + '">\n') # Cross platform way in splitting the path (MacOS doesn't like windows slashes) basename = item.filename.lower().rsplit('\\',1)[1] splitname = os.path.splitext(basename) if splitname[0].startswith('vs3'): profile = 'vs_3_0' elif splitname[0].startswith('vs2'): profile = 'vs_2_0' elif splitname[0].startswith('vs1'): profile = 'vs_1_1' elif splitname[0].startswith('vs'): profile = 'vs_2_0' elif splitname[0].startswith('ps3'): profile = 'ps_3_0' elif splitname[0].startswith('ps2'): profile = 'ps_2_0' elif splitname[0].startswith('ps'): profile = 'ps_2_0' elif splitname[0].startswith('tx'): profile = 'tx_1_0' else: profile = 'fx_2_0' fp.write(u'\t\t\t<VariableName>g_' + splitname[0] + '</VariableName>\n') fp.write(u'\t\t\t<TargetProfile>' + profile + '</TargetProfile>\n') fp.write(u'\t\t</X360SL>\n') for item in self.listvitacg: fp.write(u'\t\t<VitaCGCompile Include="' + burger.converttowindowsslashes(item.filename) + '">\n') # Cross platform way in splitting the path (MacOS doesn't like windows slashes) basename = item.filename.lower().rsplit('\\',1)[1] splitname = os.path.splitext(basename) if splitname[0].startswith('vs'): profile = 'sce_vp_psp2' else: profile = 'sce_fp_psp2' fp.write(u'\t\t\t<TargetProfile>' + profile + '</TargetProfile>\n') fp.write(u'\t\t</VitaCGCompile>\n') for item in self.listglsl: fp.write(u'\t\t<GLSL Include="' + burger.converttowindowsslashes(item.filename) + '" />\n') if self.defaults.fileversion.value>=FileVersions.vs2015.value: chunkname = 'Image' else: chunkname = 'None' for item in self.listico: fp.write(u'\t\t<' + chunkname + ' Include="' + burger.converttowindowsslashes(item.filename) + '" />\n') fp.write(u'\t</ItemGroup>\n') # # Close up the project file! # fp.write(u'\t<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\n') fp.write(u'\t<ImportGroup Label="ExtensionTargets" />\n') fp.write(u'</Project>\n') return 0