| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253 | 
							- global oldDelimiters
 
- global variables
 
- global variablesRef
 
- global bakefilesXML
 
- global bakefilesXMLRef
 
- global projectFile
 
- global osxBuildFolder
 
- property test : false
 
- -- retrieves the files from the xml node including optional conditions
 
- on parseSources(theName, theElement, theVariables, theConditions)
 
- 	set AppleScript's text item delimiters to " "
 
- 	set allElements to {}
 
- 	repeat with currElement in XML contents of theElement
 
- 		if class of currElement is text then
 
- 			set allElements to allElements & (every text item of currElement)
 
- 		else
 
- 			if class of currElement is XML element and XML tag of currElement is "if" then
 
- 				if (cond of XML attributes of currElement is in theConditions) then
 
- 					set allElements to allElements & (every text item of (item 1 of XML contents of currElement))
 
- 				end if
 
- 			end if
 
- 		end if
 
- 	end repeat
 
- 	set AppleScript's text item delimiters to oldDelimiters
 
- 	copy {varname:theName, entries:allElements} to end of theVariables
 
- end parseSources
 
- on parseEntry(theElement, theVariables, theConditions)
 
- 	set theName to var of XML attributes of theElement
 
- 	parseSources(theName, theElement, theVariables, theConditions)
 
- end parseEntry
 
- on parseLib(theElement, theVariables, theConditions)
 
- 	set theName to |id| of XML attributes of theElement
 
- 	repeat with currElement in XML contents of theElement
 
- 		if class of currElement is XML element and XML tag of currElement is "sources" then
 
- 			parseSources(theName, currElement, theVariables, theConditions)
 
- 		end if
 
- 	end repeat
 
- end parseLib
 
- on parseNode(anElement, theVariables, theConditions)
 
- 	if class of anElement is XML element and Â
 
- 		XML tag of anElement is "set" then
 
- 		parseEntry(anElement, theVariables, theConditions)
 
- 	else
 
- 		if class of anElement is XML element and Â
 
- 			XML tag of anElement is "lib" then
 
- 			parseLib(anElement, theVariables, theConditions)
 
- 		end if
 
- 	end if
 
- end parseNode
 
- -- iterates through the entire xml tree and populates the variables
 
- on parseFiles(theXML, theVariables, theConditions)
 
- 	if class of theXML is XML element or class of theXML is XML document then
 
- 		repeat with anElement in XML contents of theXML
 
- 			try
 
- 				parseNode(anElement, theVariables, theConditions)
 
- 			on error number -1728
 
- 				-- ignore this error
 
- 			end try
 
- 		end repeat
 
- 	else if class of theXML is list then
 
- 		repeat with anElement in theXML
 
- 			try
 
- 				parseNode(anElement, theVariables, theConditions)
 
- 			on error number -1728
 
- 				-- ignore this error
 
- 			end try
 
- 		end repeat
 
- 	end if
 
- end parseFiles
 
- -- gets the entries of the variable named theName
 
- on getVar(theName)
 
- 	repeat with anElement in variablesRef
 
- 		if (varname of anElement is theName) then
 
- 			return entries of anElement
 
- 		end if
 
- 	end repeat
 
- end getVar
 
- -- adds sources from fileList to a group named container
 
- on addNode(theContainer, fileList)
 
- 	tell application "Xcode"
 
- 		tell project 1
 
- 			set theTargets to targets
 
- 			repeat with listItem in fileList
 
- 				if (listItem starts with "$(") then
 
- 					set AppleScript's text item delimiters to ""
 
- 					set variableName to (characters 3 through ((length of listItem) - 1) of listItem) as text
 
- 					set AppleScript's text item delimiters to oldDelimiters
 
- 					my addNode(theContainer, my getVar(variableName))
 
- 				else
 
- 					set AppleScript's text item delimiters to "/"
 
- 					set currPath to every text item in listItem
 
- 					set currFile to "../../" & listItem
 
- 					set currFileName to (item -1 in currPath)
 
- 					set currGroup to (items 1 through -2 in currPath as text)
 
- 					set AppleScript's text item delimiters to oldDelimiters
 
- 					try
 
- 						set theGroup to group theContainer
 
- 					on error
 
- 						tell root group
 
- 							make new group with properties {name:theContainer}
 
- 						end tell
 
- 					end try
 
- 					tell group theContainer
 
- 						try
 
- 							set theGroup to group named currGroup
 
- 						on error
 
- 							make new group with properties {name:currGroup}
 
- 						end try
 
- 						tell group currGroup
 
- 							set newFile to make new file reference with properties {name:currFileName, path:currFile, path type:project relative}
 
- 							repeat with theTarget in theTargets
 
- 								add newFile to (get compile sources phase of theTarget)
 
- 							end repeat
 
- 						end tell
 
- 					end tell
 
- 				end if
 
- 			end repeat
 
- 		end tell
 
- 	end tell
 
- end addNode
 
- -- retrieves contents of file at posixFilePath
 
- on readFile(posixFilePath)
 
- 	set fileRef to open for access POSIX file posixFilePath
 
- 	set theData to read fileRef
 
- 	close access fileRef
 
- 	return theData
 
- end readFile
 
- on init()
 
- 	tell application "Xcode"
 
- 		quit
 
- 	end tell
 
- 	set variablesRef to a reference to variables
 
- 	set bakefilesXMLRef to a reference to bakefilesXML
 
- 	set oldDelimiters to AppleScript's text item delimiters
 
- 	tell application "Finder"
 
- 		set osxBuildFolder to POSIX path of ((folder of (path to me)) as Unicode text)
 
- 	end tell
 
- end init
 
- -- reads the files list and evaluates the conditions
 
- on readFilesList(theFiles, theConditions)
 
- 	set variables to {}
 
- 	repeat with theFile in theFiles
 
- 		set bakefilesXML to parse XML (readFile(osxBuildFolder & theFile))
 
- 		parseFiles(bakefilesXMLRef, variablesRef, theConditions)
 
- 	end repeat
 
- end readFilesList
 
- -- creates a new project file from the respective template
 
- on instantiateProject(theProject)
 
- 	set projectName to projectName of theProject
 
- 	set template to (osxBuildFolder & projectName & "_in.xcodeproj")
 
- 	set projectFile to (osxBuildFolder & projectName & ".xcodeproj")
 
- 	tell application "Finder"
 
- 		if exists projectFile as POSIX file then
 
- 			set templateContentFile to (osxBuildFolder & projectName & "_in.xcodeproj/project.pbxproj")
 
- 			set projectContentFile to (osxBuildFolder & projectName & ".xcodeproj/project.pbxproj")
 
- 			try
 
- 				tell me
 
- 					do shell script "rm -f " & quoted form of projectContentFile
 
- 				end tell
 
- 			end try
 
- 			try
 
- 				tell me
 
- 					do shell script "cp " & quoted form of templateContentFile & " " & quoted form of projectContentFile
 
- 				end tell
 
- 			end try
 
- 		else
 
- 			set duplicateProject to duplicate (template as POSIX file) with replace
 
- 			set name of duplicateProject to (projectName & ".xcodeproj")
 
- 		end if
 
- 	end tell
 
- end instantiateProject
 
- -- adds the source files of the nodes of theProject to the xcode project
 
- on populateProject(theProject)
 
- 	tell application "Xcode"
 
- 		open projectFile
 
- 	end tell
 
- 	repeat with theNode in nodes of theProject
 
- 		-- reopen xcode for each pass, as otherwise the undomanager
 
- 		-- happens to crash quite frequently
 
- 		addNode(label of theNode, entries of theNode)
 
- 	end repeat
 
- 	tell application "Xcode"
 
- 		quit
 
- 	end tell
 
- 	do shell script (osxBuildFolder as text) & "fix_xcode_ids.py \"" & (POSIX path of projectFile as Unicode text) & "\""
 
- 	-- reopen again to let Xcode sort identifiers
 
- 	tell application "Xcode"
 
- 		open projectFile
 
- 	end tell
 
- 	tell application "Xcode"
 
- 		quit
 
- 	end tell
 
- end populateProject
 
- on makeProject(theProject)
 
- 	instantiateProject(theProject)
 
- 	readFilesList(bklfiles of theProject, conditions of theProject)
 
- 	populateProject(theProject)
 
- end makeProject
 
- -- main
 
- init()
 
- set theProject to {projectName:"", conditions:{}, bklfiles:{Â
 
- 	"../bakefiles/files.bkl", "../bakefiles/regex.bkl", "../bakefiles/tiff.bkl", "../bakefiles/png.bkl", "../bakefiles/jpeg.bkl", "../bakefiles/scintilla.bkl", "../bakefiles/expat.bkl"}, nodes:{Â
 
- 	{label:"base", entries:{"$(BASE_SRC)"}}, Â
 
- 	{label:"base", entries:{"$(BASE_AND_GUI_SRC)"}}, Â
 
- 	{label:"core", entries:{"$(CORE_SRC)"}}, Â
 
- 	{label:"net", entries:{"$(NET_SRC)"}}, Â
 
- 	{label:"adv", entries:{"$(ADVANCED_SRC)"}}, Â
 
- 	{label:"webview", entries:{"$(WEBVIEW_SRC)"}}, Â
 
- 	{label:"media", entries:{"$(MEDIA_SRC)"}}, Â
 
- 	{label:"html", entries:{"$(HTML_SRC)"}}, Â
 
- 	{label:"xrc", entries:{"$(XRC_SRC)"}}, Â
 
- 	{label:"xml", entries:{"$(XML_SRC)"}}, Â
 
- 	{label:"opengl", entries:{"$(OPENGL_SRC)"}}, Â
 
- 	{label:"aui", entries:{"$(AUI_SRC)"}}, Â
 
- 	{label:"ribbon", entries:{"$(RIBBON_SRC)"}}, Â
 
- 	{label:"propgrid", entries:{"$(PROPGRID_SRC)"}}, Â
 
- 	{label:"richtext", entries:{"$(RICHTEXT_SRC)"}}, Â
 
- 	{label:"stc", entries:{"$(STC_SRC)"}}, Â
 
- 	{label:"libtiff", entries:{"$(wxtiff)"}}, Â
 
- 	{label:"libjpeg", entries:{"$(wxjpeg)"}}, Â
 
- 	{label:"libpng", entries:{"$(wxpng)"}}, Â
 
- 	{label:"libregex", entries:{"$(wxregex)"}}, Â
 
- 	{label:"libscintilla", entries:{"$(wxscintilla)"}}, Â
 
- 	{label:"libexpat", entries:{"$(wxexpat)"}} Â
 
- 		}}
 
- set conditions of theProject to {"PLATFORM_MACOSX=='1'", "TOOLKIT=='OSX_CARBON'", "WXUNIV=='0'", "USE_GUI=='1' and WXUNIV=='0'"}
 
- set projectName of theProject to "wxcarbon"
 
- makeProject(theProject)
 
- set conditions of theProject to {"PLATFORM_MACOSX=='1'", "TOOLKIT=='OSX_COCOA'", "WXUNIV=='0'", "USE_GUI=='1' and WXUNIV=='0'"}
 
- set projectName of theProject to "wxcocoa"
 
- makeProject(theProject)
 
- set conditions of theProject to {"PLATFORM_MACOSX=='1'", "TOOLKIT=='OSX_IPHONE'", "WXUNIV=='0'", "USE_GUI=='1' and WXUNIV=='0'"}
 
- set projectName of theProject to "wxiphone"
 
- makeProject(theProject)
 
 
  |