Beispiel #1
0
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 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)
Beispiel #5
0
	'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