110 lines
4.5 KiB
Python
110 lines
4.5 KiB
Python
|
#!/usr/bin/python
|
||
|
|
||
|
import sys
|
||
|
import os
|
||
|
import shutil
|
||
|
|
||
|
import xml.etree.ElementTree as ET
|
||
|
|
||
|
from pbxproj import XcodeProject
|
||
|
from pbxproj.pbxextensions import ProjectFiles
|
||
|
ProjectFiles._FILE_TYPES['.cxx'] = ('sourcecode.cpp.cpp', 'PBXSourcesBuildPhase')
|
||
|
|
||
|
from fix_xcode_ids import processFile
|
||
|
|
||
|
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 = [
|
||
|
# xcode group, entries[], targets []
|
||
|
["base", ["$(BASE_SRC)"], ["dynamic", "static", "base"]],
|
||
|
["base", ["$(BASE_AND_GUI_SRC)"], ["dynamic", "static", "base", "core"]],
|
||
|
["core", ["$(CORE_SRC)"], ["dynamic", "static", "core"]],
|
||
|
["net", ["$(NET_SRC)"], ["dynamic", "static", "net"]],
|
||
|
["adv", ["$(ADVANCED_SRC)"], ["dynamic", "static", "adv"]],
|
||
|
["webview", ["$(WEBVIEW_SRC)"], ["dynamic", "static", "webview"]],
|
||
|
["media", ["$(MEDIA_SRC)"], ["dynamic", "static", "media"]],
|
||
|
["html", ["$(HTML_SRC)"], ["dynamic", "static", "html"]],
|
||
|
["xrc", ["$(XRC_SRC)"], ["dynamic", "static", "xrc"]],
|
||
|
["qa", ["$(QA_SRC)"], ["dynamic", "static", "qa"]],
|
||
|
["xml", ["$(XML_SRC)"], ["dynamic", "static", "xml"]],
|
||
|
["opengl", ["$(OPENGL_SRC)"], ["dynamic", "static", "gl"]],
|
||
|
["aui", ["$(AUI_SRC)"], ["dynamic", "static", "aui"]],
|
||
|
["ribbon", ["$(RIBBON_SRC)"], ["dynamic", "static", "ribbon"]],
|
||
|
["propgrid", ["$(PROPGRID_SRC)"], ["dynamic", "static", "propgrid"]],
|
||
|
["richtext", ["$(RICHTEXT_SRC)"], ["dynamic", "static", "richttext"]],
|
||
|
["stc", ["$(STC_SRC)"], ["dynamic", "static", "stc"]],
|
||
|
["libzlib", ["$(wxzlib)"], ["dynamic", "static", "wxzlib"]],
|
||
|
["libtiff", ["$(wxtiff)"], ["dynamic", "static", "wxtiff"]],
|
||
|
["libjpeg", ["$(wxjpeg)"], ["dynamic", "static", "wxjpeg"]],
|
||
|
["libpng", ["$(wxpng)"], ["dynamic", "static", "wxpng"]],
|
||
|
["libregex", ["$(wxregex)"], ["dynamic", "static", "wxregex"]],
|
||
|
["libscintilla", ["$(wxscintilla)"], ["dynamic", "static", "wxscintilla"]],
|
||
|
["libexpat", ["$(wxexpat)"], ["dynamic", "static", "wxexpat"]]
|
||
|
]
|
||
|
|
||
|
def addNode(project, groupName, entries, fileGroups, targets):
|
||
|
group = project.get_or_create_group(groupName)
|
||
|
for entry in entries:
|
||
|
if entry.startswith("$("):
|
||
|
varname = entry[2:-1]
|
||
|
addNode(project, groupName, fileGroups[varname], fileGroups, targets)
|
||
|
else:
|
||
|
project.add_file("../../"+entry, parent=group, target_name=targets)
|
||
|
|
||
|
|
||
|
def populateProject(projectfile, fileGroups, nodes):
|
||
|
project = XcodeProject.load(projectfile)
|
||
|
for node in nodes:
|
||
|
groupName = node[0]
|
||
|
entries = node[1]
|
||
|
targets = node[2]
|
||
|
addNode(project, groupName, entries, fileGroups, targets)
|
||
|
project.save()
|
||
|
|
||
|
|
||
|
def parseSources(theName, xmlNode, conditions, fileGroups):
|
||
|
files = xmlNode.text
|
||
|
for ifs in xmlNode.findall("if"):
|
||
|
condition = ifs.attrib['cond']
|
||
|
if condition in conditions:
|
||
|
files += ifs.text
|
||
|
fileList = files.split() if files != None else []
|
||
|
fileGroups[theName] = fileList
|
||
|
|
||
|
|
||
|
def parseFile(bklFile, conditions, fileGroups):
|
||
|
tree = ET.parse(os.path.join(osxBuildFolder, bklFile))
|
||
|
for elem in tree.iter():
|
||
|
if elem.tag == 'set':
|
||
|
theName = elem.attrib['var']
|
||
|
parseSources(theName, elem, conditions, fileGroups)
|
||
|
elif elem.tag == 'lib':
|
||
|
theName = elem.attrib['id']
|
||
|
parseSources(theName, elem.find("sources"), conditions, fileGroups)
|
||
|
|
||
|
|
||
|
def readFilesList(bklFileList, conditions):
|
||
|
fileGroups = {}
|
||
|
for bklFile in bklFileList:
|
||
|
parseFile(bklFile, conditions, fileGroups)
|
||
|
return fileGroups
|
||
|
|
||
|
|
||
|
def makeProject(projectName, conditions):
|
||
|
# make new copy from template
|
||
|
template = os.path.join(osxBuildFolder, projectName + "_in.xcodeproj")
|
||
|
projectFile = os.path.join(osxBuildFolder, projectName + ".xcodeproj")
|
||
|
if os.path.exists(projectFile):
|
||
|
shutil.rmtree(projectFile)
|
||
|
shutil.copytree(template, projectFile)
|
||
|
# read file list from bkls
|
||
|
fileGroups = readFilesList(bklfiles, conditions)
|
||
|
# create xcode project
|
||
|
populateProject(projectFile + "/project.pbxproj", fileGroups, nodes)
|
||
|
processFile(projectFile + "/project.pbxproj")
|
||
|
|
||
|
osxBuildFolder = os.getcwd()
|
||
|
|
||
|
makeProject("wxcocoa", ["PLATFORM_MACOSX=='1'", "TOOLKIT=='OSX_COCOA'", "WXUNIV=='0'", "USE_GUI=='1' and WXUNIV=='0'"])
|
||
|
makeProject("wxiphone", ["PLATFORM_MACOSX=='1'", "TOOLKIT=='OSX_IPHONE'", "WXUNIV=='0'", "USE_GUI=='1' and WXUNIV=='0'"])
|