df105ffb62
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@63079 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
1 line
8.8 KiB
AppleScript
1 line
8.8 KiB
AppleScript
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 POSIX file (osxBuildFolder & projectName & "_in.xcodeproj")
|
|
set projectFile to POSIX file (osxBuildFolder & projectName & ".xcodeproj")
|
|
tell application "Finder"
|
|
try
|
|
delete file projectFile
|
|
end try
|
|
set duplicateProject to duplicate template with replace
|
|
set name of duplicateProject to (projectName & ".xcodeproj")
|
|
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
|
|
end populateProject
|
|
|
|
on makeProject(theProject)
|
|
instantiateProject(theProject)
|
|
readFilesList(bklfiles of theProject, conditions of theProject)
|
|
populateProject(theProject)
|
|
end makeProject
|
|
|
|
-- main
|
|
|
|
init()
|
|
set theProject to {conditions:{"PLATFORM_MACOSX=='1'", "TOOLKIT=='OSX_CARBON'", "WXUNIV=='0'", "USE_GUI=='1' and WXUNIV=='0'"}, projectName:¬
|
|
"wxcarbon", 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:"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)"}} ¬
|
|
}}
|
|
makeProject(theProject)
|
|
|
|
set theProject to {conditions:{"PLATFORM_MACOSX=='1'", "TOOLKIT=='OSX_COCOA'", "WXUNIV=='0'", "USE_GUI=='1' and WXUNIV=='0'"}, projectName:¬
|
|
"wxcocoa", 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:"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)"}} ¬
|
|
}}
|
|
makeProject(theProject)
|
|
|
|
|