Removing outdated AppleScript, updating docs
This commit is contained in:
parent
533958be10
commit
88f5a14d34
@ -1,254 +0,0 @@
|
||||
-- script for regenerating Xcode projects from templates and bakefile file lists
|
||||
-- needs an Xcode version 3 application, no later versions have the AppleScript commands needed
|
||||
-- implemented properly
|
||||
-- in order to avoid your Xcode version 3 getting updated with later versions
|
||||
-- put it into a folder which you hide from spotlight
|
||||
|
||||
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, theTargets)
|
||||
tell application "Xcode3"
|
||||
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), theTargets)
|
||||
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
|
||||
set newFile to make new file reference with properties {name:currFileName, path:currFile, path type:project relative}
|
||||
repeat with theTarget in theTargets
|
||||
-- silently ignore targets that don't exist in this project
|
||||
try
|
||||
add newFile to (get compile sources phase of target theTarget of project 1)
|
||||
end try
|
||||
end repeat
|
||||
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 "Xcode3"
|
||||
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 "Xcode3"
|
||||
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, targets of theNode)
|
||||
end repeat
|
||||
tell application "Xcode3"
|
||||
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 "Xcode3"
|
||||
open projectFile
|
||||
end tell
|
||||
tell application "Xcode3"
|
||||
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)"}, targets:{"dynamic", "static", "base"}}, ¬
|
||||
{label:"base", entries:{"$(BASE_AND_GUI_SRC)"}, targets:{"dynamic", "static", "base", "core"}}, ¬
|
||||
{label:"core", entries:{"$(CORE_SRC)"}, targets:{"dynamic", "static", "core"}}, ¬
|
||||
{label:"net", entries:{"$(NET_SRC)"}, targets:{"dynamic", "static", "net"}}, ¬
|
||||
{label:"adv", entries:{"$(ADVANCED_SRC)"}, targets:{"dynamic", "static", "adv"}}, ¬
|
||||
{label:"webview", entries:{"$(WEBVIEW_SRC)"}, targets:{"dynamic", "static", "webview"}}, ¬
|
||||
{label:"media", entries:{"$(MEDIA_SRC)"}, targets:{"dynamic", "static", "media"}}, ¬
|
||||
{label:"html", entries:{"$(HTML_SRC)"}, targets:{"dynamic", "static", "html"}}, ¬
|
||||
{label:"xrc", entries:{"$(XRC_SRC)"}, targets:{"dynamic", "static", "xrc"}}, ¬
|
||||
{label:"qa", entries:{"$(QA_SRC)"}, targets:{"dynamic", "static", "qa"}}, ¬
|
||||
{label:"xml", entries:{"$(XML_SRC)"}, targets:{"dynamic", "static", "xml"}}, ¬
|
||||
{label:"opengl", entries:{"$(OPENGL_SRC)"}, targets:{"dynamic", "static", "gl"}}, ¬
|
||||
{label:"aui", entries:{"$(AUI_SRC)"}, targets:{"dynamic", "static", "aui"}}, ¬
|
||||
{label:"ribbon", entries:{"$(RIBBON_SRC)"}, targets:{"dynamic", "static", "ribbon"}}, ¬
|
||||
{label:"propgrid", entries:{"$(PROPGRID_SRC)"}, targets:{"dynamic", "static", "propgrid"}}, ¬
|
||||
{label:"richtext", entries:{"$(RICHTEXT_SRC)"}, targets:{"dynamic", "static", "richttext"}}, ¬
|
||||
{label:"stc", entries:{"$(STC_SRC)"}, targets:{"dynamic", "static", "stc"}}, ¬
|
||||
{label:"libzlib", entries:{"$(wxzlib)"}, targets:{"dynamic", "static", "wxzlib"}}, ¬
|
||||
{label:"libtiff", entries:{"$(wxtiff)"}, targets:{"dynamic", "static", "wxtiff"}}, ¬
|
||||
{label:"libjpeg", entries:{"$(wxjpeg)"}, targets:{"dynamic", "static", "wxjpeg"}}, ¬
|
||||
{label:"libpng", entries:{"$(wxpng)"}, targets:{"dynamic", "static", "wxpng"}}, ¬
|
||||
{label:"libregex", entries:{"$(wxregex)"}, targets:{"dynamic", "static", "wxregex"}}, ¬
|
||||
{label:"libscintilla", entries:{"$(wxscintilla)"}, targets:{"dynamic", "static", "wxscintilla"}}, ¬
|
||||
{label:"libexpat", entries:{"$(wxexpat)"}, targets:{"dynamic", "static", "wxexpat"}} ¬
|
||||
}}
|
||||
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)
|
@ -6,25 +6,23 @@ for a new release the wxvers.xcconfig has to be updated accordingly
|
||||
Building Projects
|
||||
-----------------
|
||||
|
||||
makeprojects is an AppleScript that uses the XML Tools from
|
||||
http://www.latenightsw.com/freeware/xml-tools/
|
||||
makeprojects.py is a Python 3 script that builds upon pbxproj. It replaces the old
|
||||
AppleScript that did not work with the current Xcode versions anymore.
|
||||
|
||||
the reason for this script is to support a single place of definition for the files needed
|
||||
The reason for this script is to support a single place of definition for the files needed
|
||||
for a certain platform by building Xcode projects from the bakefiles files.bkl file list.
|
||||
|
||||
it creates new projects from the ..._in.xcodeproj templates in this folder and then
|
||||
It creates new projects from the ..._in.xcodeproj templates in this folder and then
|
||||
reads in the files lists from the files.bkl in the build/bakefiles directory, evaluates the
|
||||
conditions in these definitions and then adds the correct files to the newly created Xcode
|
||||
projects
|
||||
|
||||
if you only need a specific target and not all of them (cocoa, iphone) then you can
|
||||
If you only need a specific target and not all of them (cocoa, iphone) then you can
|
||||
comment the unneeded makeProject calls.
|
||||
|
||||
Prerequisites
|
||||
-------------
|
||||
|
||||
you need the xml scripting additions from latenightsw,
|
||||
|
||||
http://www.latenightsw.com/freeware/xml-tools/
|
||||
pbxproj (https://github.com/kronenthaler/mod-pbxproj)
|
||||
|
||||
Stefan Csomor
|
||||
|
Loading…
Reference in New Issue
Block a user