112 lines
3.1 KiB
Python
112 lines
3.1 KiB
Python
|
#!/bin/env python
|
||
|
#---------------------------------------------------------------------------
|
||
|
# This script generates a template that can be used in the Python
|
||
|
# build process (on posix systems) in order to staticly link the
|
||
|
# wxPython modules into the Python executable. The output of this
|
||
|
# script should be put into a file named Setup.local (or perhaps just
|
||
|
# concatenated to Setup) in the Modules dir of the Python source
|
||
|
# distribution, then just build Python like normal.
|
||
|
#
|
||
|
# You can use any of the command-line args that setup.py understands
|
||
|
# with this script too in order to control what modules are built and
|
||
|
# which compile options and such are used.
|
||
|
#
|
||
|
# This script must be run from the wxPython directory.
|
||
|
#---------------------------------------------------------------------------
|
||
|
|
||
|
|
||
|
import sys, os, re
|
||
|
|
||
|
# if you need to change some setup.py flags do it here before it is
|
||
|
# imported. Just append to sys.argv.
|
||
|
sys.argv.append("BUILD_GLCANVAS=0")
|
||
|
sys.argv.append("BUILD_OGL=0")
|
||
|
sys.argv.append("BUILD_DLLWIDGET=0")
|
||
|
#sys.argv.append("CORE_ONLY=1")
|
||
|
|
||
|
import setup
|
||
|
|
||
|
|
||
|
def printitem(st):
|
||
|
if st:
|
||
|
print '\\\n\t', st,
|
||
|
|
||
|
|
||
|
def buildflags(items, flag, path=None):
|
||
|
st = ''
|
||
|
for item in items:
|
||
|
if path is not None and item[0] != '/':
|
||
|
item = os.path.join(path, item)
|
||
|
st += "%s%s " % (flag, item)
|
||
|
return st
|
||
|
|
||
|
|
||
|
def buildmacros(items):
|
||
|
st = ''
|
||
|
for item in items:
|
||
|
if len(item) == 1:
|
||
|
st += "-U%s " % item[0]
|
||
|
elif item[1] is None:
|
||
|
st += "-D%s " % item[0]
|
||
|
else:
|
||
|
st += "-D%s=%s " % item
|
||
|
return st
|
||
|
|
||
|
|
||
|
# Python's makesetup can't handle -D flags with = in them, so we need to workaround
|
||
|
def fixmacros(st):
|
||
|
defs = []
|
||
|
pat = re.compile(r'-D([A-Za-z0-9_]*)=([A-Za-z0-9_]*)')
|
||
|
match = pat.search(st)
|
||
|
while match is not None:
|
||
|
name = match.group(1)
|
||
|
value = match.group(2)
|
||
|
defs.append("m_%s = -D%s=%s" % (name, name, value))
|
||
|
st = st[:match.start()] + ("$(m_%s)" % name) + st[match.end():]
|
||
|
match = pat.search(st)
|
||
|
|
||
|
return st, defs
|
||
|
|
||
|
|
||
|
|
||
|
def main():
|
||
|
cwd = os.getcwd()
|
||
|
|
||
|
print """\
|
||
|
# This file is autogenerated by %s and should be
|
||
|
# placed in the <PythonDist>/Modules/Setup.local file before
|
||
|
# Python is built.
|
||
|
|
||
|
*static*
|
||
|
|
||
|
""" % sys.argv[0]
|
||
|
|
||
|
for ext in setup.wxpExtensions:
|
||
|
eca = " ".join(ext.extra_compile_args)
|
||
|
macros = buildmacros(ext.define_macros)
|
||
|
|
||
|
eca, defs = fixmacros(eca)
|
||
|
print "\n".join(defs)
|
||
|
macros, defs = fixmacros(macros)
|
||
|
print "\n".join(defs)
|
||
|
|
||
|
print ext.name,
|
||
|
for s in ext.sources:
|
||
|
printitem(os.path.join(cwd, s))
|
||
|
printitem(buildflags(ext.include_dirs, '-I', cwd))
|
||
|
printitem(buildflags(ext.library_dirs, '-L'))
|
||
|
printitem(buildflags(ext.libraries, '-l'))
|
||
|
printitem(macros)
|
||
|
printitem(eca)
|
||
|
# filter out some options that makesetup can't handle, but it shouldn't hurt to remove these...
|
||
|
ela = filter(lambda x: x not in ['-pthread', '-rdynamic'], ext.extra_link_args)
|
||
|
printitem(" ".join(ela))
|
||
|
|
||
|
print; print; print
|
||
|
|
||
|
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
main()
|
||
|
|