130 lines
3.6 KiB
Python
130 lines
3.6 KiB
Python
|
import os
|
||
|
import re
|
||
|
import sys
|
||
|
import distutils.sysconfig
|
||
|
import distutils.util
|
||
|
|
||
|
gPreBuildVariants = [
|
||
|
{
|
||
|
'name': 'main-universal',
|
||
|
'target': '10.5',
|
||
|
'cflags': '-g -isysroot /Developer/SDKs/MacOSX10.5.sdk -arch i386 -arch ppc -arch ppc64 -arch x86_64',
|
||
|
'cc': 'gcc-4.2',
|
||
|
},
|
||
|
{
|
||
|
'name': 'main-ppc64',
|
||
|
'target': '10.5',
|
||
|
'cflags': '-g -isysroot /Developer/SDKs/MacOSX10.5.sdk -arch ppc64',
|
||
|
'cc': 'gcc-4.2',
|
||
|
},
|
||
|
{
|
||
|
'name': 'main-x86_64',
|
||
|
'target': '10.5',
|
||
|
'cflags': '-g -arch x86_64',
|
||
|
'cc': '/usr/bin/clang',
|
||
|
},
|
||
|
{
|
||
|
'name': 'main-fat3',
|
||
|
'target': '10.5',
|
||
|
'cflags': '-g -isysroot / -arch i386 -arch ppc -arch x86_64',
|
||
|
'cc': 'gcc-4.2',
|
||
|
},
|
||
|
{
|
||
|
'name': 'main-intel',
|
||
|
'target': '10.5',
|
||
|
'cflags': '-g -arch i386 -arch x86_64 -fexceptions',
|
||
|
'cc': '/usr/bin/clang',
|
||
|
},
|
||
|
{
|
||
|
'name': 'main-i386',
|
||
|
'target': '10.4',
|
||
|
'cflags': '-g -arch i386',
|
||
|
'cc': '/usr/bin/clang',
|
||
|
},
|
||
|
{
|
||
|
'name': 'main-ppc',
|
||
|
'target': '10.3',
|
||
|
'cflags': '-g -isysroot /Developer/SDKs/MacOSX10.4u.sdk -arch ppc',
|
||
|
'cc': 'gcc-4.0',
|
||
|
},
|
||
|
{
|
||
|
'name': 'main-fat',
|
||
|
'target': '10.3',
|
||
|
'cflags': '-g -isysroot /Developer/SDKs/MacOSX10.4u.sdk -arch i386 -arch ppc',
|
||
|
'cc': 'gcc-4.0',
|
||
|
},
|
||
|
]
|
||
|
|
||
|
|
||
|
def main(all=False, arch=None, secondary=False):
|
||
|
basepath = os.path.dirname(__file__)
|
||
|
builddir = os.path.join(basepath, 'prebuilt')
|
||
|
if not os.path.exists(builddir):
|
||
|
os.makedirs(builddir)
|
||
|
src = os.path.join(basepath, 'src', 'main.c')
|
||
|
|
||
|
cfg = distutils.sysconfig.get_config_vars()
|
||
|
|
||
|
BASE_CFLAGS = cfg['CFLAGS']
|
||
|
BASE_CFLAGS = BASE_CFLAGS.replace('-dynamic', '')
|
||
|
while True:
|
||
|
x = re.sub('-arch\s+\S+', '', BASE_CFLAGS)
|
||
|
if x == BASE_CFLAGS:
|
||
|
break
|
||
|
BASE_CFLAGS=x
|
||
|
|
||
|
while True:
|
||
|
x = re.sub('-isysroot\s+\S+', '', BASE_CFLAGS)
|
||
|
if x == BASE_CFLAGS:
|
||
|
break
|
||
|
BASE_CFLAGS=x
|
||
|
|
||
|
if arch is None:
|
||
|
arch = distutils.util.get_platform().split('-')[-1]
|
||
|
if sys.prefix.startswith('/System') and \
|
||
|
sys.version_info[:2] == (2,5):
|
||
|
arch = "fat"
|
||
|
|
||
|
name = 'main-' + arch
|
||
|
root = None
|
||
|
|
||
|
if all:
|
||
|
for entry in gPreBuildVariants:
|
||
|
dest = os.path.join(builddir, entry['name'])
|
||
|
|
||
|
for replace in (0, 1):
|
||
|
if replace:
|
||
|
dest = os.path.join(builddir, entry['name'].replace('main', 'secondary'))
|
||
|
|
||
|
if not os.path.exists(dest) or (
|
||
|
os.stat(dest).st_mtime < os.stat(src).st_mtime):
|
||
|
if root is None:
|
||
|
fp = os.popen('xcode-select -print-path', 'r')
|
||
|
root = fp.read().strip()
|
||
|
fp.close()
|
||
|
|
||
|
print ("rebuilding %s"%(os.path.basename(dest),))
|
||
|
|
||
|
CC=os.path.join(root, 'usr', 'bin', entry['cc'])
|
||
|
CFLAGS = BASE_CFLAGS + ' ' + entry['cflags'].replace('@@XCODE_ROOT@@', root)
|
||
|
if replace:
|
||
|
CFLAGS += " -DPY2APP_SECONDARY"
|
||
|
os.environ['MACOSX_DEPLOYMENT_TARGET'] = entry['target']
|
||
|
os.system('"%(CC)s" -o "%(dest)s" "%(src)s" %(CFLAGS)s -framework Cocoa' % locals())
|
||
|
|
||
|
if secondary:
|
||
|
name = 'secondary-'
|
||
|
else:
|
||
|
name = 'main-'
|
||
|
|
||
|
dest = os.path.join(
|
||
|
builddir,
|
||
|
name + arch
|
||
|
)
|
||
|
|
||
|
return dest
|
||
|
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
main(all=True)
|