| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254 |
- 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/zlib.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:"libzlib", entries:{"$(wxzlib)"}}, Â
- {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)
|