X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/e171b40066db3a461656a9b4de8048599b6f7809..5d9dedfe38429763e11fa8a906cebee7ad3db770:/wxPython/config.py diff --git a/wxPython/config.py b/wxPython/config.py index 3d3e6aafd2..d52eb5961b 100644 --- a/wxPython/config.py +++ b/wxPython/config.py @@ -37,10 +37,10 @@ import distutils.command.clean #---------------------------------------------------------------------- VER_MAJOR = 2 # The first three must match wxWidgets -VER_MINOR = 5 -VER_RELEASE = 5 -VER_SUBREL = 1 # wxPython release num for x.y.z release of wxWidgets -VER_FLAGS = "" # release flags, such as prerelease num, unicode, etc. +VER_MINOR = 7 +VER_RELEASE = 0 +VER_SUBREL = 0 # wxPython release num for x.y.z release of wxWidgets +VER_FLAGS = "pre" # release flags, such as prerelease or RC num, etc. DESCRIPTION = "Cross platform GUI toolkit for Python" AUTHOR = "Robin Dunn" @@ -55,8 +55,8 @@ LONG_DESCRIPTION = """\ wxPython is a GUI toolkit for Python that is a wrapper around the wxWidgets C++ GUI library. wxPython provides a large variety of window types and controls, all implemented with a native look and -feel (by using the native widgets) on the platforms it is supported -on. +feel (by using the native widgets) on the platforms upon which it is +supported. """ CLASSIFIERS = """\ @@ -87,7 +87,6 @@ BUILD_DLLWIDGET = 0# Build a module that enables unknown wx widgets # to be loaded from a DLL and to be used from Python. # Internet Explorer wrapper (experimental) -BUILD_IEWIN = 0 #(os.name == 'nt') BUILD_ACTIVEX = (os.name == 'nt') # new version of IEWIN and more @@ -100,7 +99,7 @@ USE_SWIG = 0 # Should we actually execute SWIG, or just use the SWIG = "swig" # The swig executable to use. -BUILD_RENAMERS = 1 # Should we build the renamer modules too? +BUILD_RENAMERS = 0 # Should we build the renamer modules too? FULL_DOCS = 0 # Some docstrings are split into a basic docstring and a # details string. Setting this flag to 1 will @@ -130,7 +129,7 @@ INSTALL_MULTIVERSION = 1 # Install the packages such that multiple versions # created that adds that dir to the sys.path. In # addition, a wxselect.py module will be installed # to site-pacakges that will allow applications to - # choose a specific version if more than one are + # choose a specific version if more than one is # installed. FLAVOUR = "" # Optional flavour string to be appended to VERSION @@ -139,8 +138,14 @@ FLAVOUR = "" # Optional flavour string to be appended to VERSION EP_ADD_OPTS = 1 # When doing MULTIVERSION installs the wx port and # ansi/unicode settings can optionally be added to the # subdir path used in site-packages - - + +EP_FULL_VER = 0 # When doing MULTIVERSION installs the default is to + # put only 2 or 3 (depending on stable/unstable) of + # the version compnonents into the "extra path" + # subdir of site-packages. Setting this option to + # 1 will cause the full 4 components of the version + # number to be used instead. + WX_CONFIG = None # Usually you shouldn't need to touch this, but you can set # it to pass an alternate version of wx-config or alternate # flags, eg. as required by the .deb in-tree build. By @@ -148,6 +153,15 @@ WX_CONFIG = None # Usually you shouldn't need to touch this, but you can set # version, port, etc. and it will be looked for on the # default $PATH. +SYS_WX_CONFIG = None # When installing an in tree build, setup.py uses wx-config + # for two different purposes. First, to determine the prefix + # where files will be installed, and secondly, to initialise + # build_options.py with the correct options for it. + # WX_CONFIG is used for the first task. SYS_WX_CONFIG may + # be set independently, to the value that should appear in + # build_options.py, if it is different to that. The default + # is to use the value of WX_CONFIG. + WXPORT = 'gtk2' # On Linux/Unix there are several ports of wxWidgets available. # Setting this value lets you select which will be used for # the wxPython build. Possibilites are 'gtk', 'gtk2' and @@ -164,7 +178,7 @@ CONTRIBS_INC = "" # A dir to add as an -I flag when compiling the contribs # Some MSW build settings -MONOLITHIC = 1 # The core wxWidgets lib can be built as either a +MONOLITHIC = 0 # The core wxWidgets lib can be built as either a # single monolithic DLL or as a collection of DLLs. # This flag controls which set of libs will be used # on Windows. (For other platforms it is automatic @@ -234,17 +248,19 @@ if sys.platform[:6] == "darwin": if os.name == 'nt': WXPORT = 'msw' +WXPYTHON_TYPE_TABLE = '_wxPython_table' #---------------------------------------------------------------------- # Check for build flags on the command line #---------------------------------------------------------------------- # Boolean (int) flags -for flag in ['BUILD_GLCANVAS', 'BUILD_OGL', 'BUILD_STC', - 'BUILD_GIZMOS', 'BUILD_DLLWIDGET', 'BUILD_IEWIN', 'BUILD_ACTIVEX', +for flag in [ 'BUILD_ACTIVEX', 'BUILD_ANIMATE', 'BUILD_DLLWIDGET', + 'BUILD_GIZMOS', 'BUILD_GLCANVAS', + 'BUILD_OGL', 'BUILD_STC', 'CORE_ONLY', 'PREP_ONLY', 'USE_SWIG', 'UNICODE', 'UNDEF_NDEBUG', 'NO_SCRIPTS', 'NO_HEADERS', 'BUILD_RENAMERS', - 'FULL_DOCS', 'INSTALL_MULTIVERSION', 'EP_ADD_OPTS', + 'FULL_DOCS', 'INSTALL_MULTIVERSION', 'EP_ADD_OPTS', 'EP_FULL_VER', 'MONOLITHIC', 'FINAL', 'HYBRID', ]: for x in range(len(sys.argv)): if sys.argv[x].find(flag) == 0: @@ -254,8 +270,9 @@ for flag in ['BUILD_GLCANVAS', 'BUILD_OGL', 'BUILD_STC', sys.argv[x] = '' # String options -for option in ['WX_CONFIG', 'WXDLLVER', 'BUILD_BASE', 'WXPORT', 'SWIG', - 'CONTRIBS_INC', 'WXPY_SRC', 'FLAVOUR', +for option in ['WX_CONFIG', 'SYS_WX_CONFIG', 'WXDLLVER', 'BUILD_BASE', + 'WXPORT', 'SWIG', 'CONTRIBS_INC', 'WXPY_SRC', 'FLAVOUR', + 'VER_FLAGS', ]: for x in range(len(sys.argv)): if sys.argv[x].find(option) == 0: @@ -267,44 +284,13 @@ for option in ['WX_CONFIG', 'WXDLLVER', 'BUILD_BASE', 'WXPORT', 'SWIG', sys.argv = filter(None, sys.argv) -#---------------------------------------------------------------------- -# build options file -#---------------------------------------------------------------------- - -build_options_template = """ -UNICODE=%d -UNDEF_NDEBUG=%d -INSTALL_MULTIVERSION=%d -FLAVOUR="%s" -EP_ADD_OPTS=%d -WX_CONFIG="%s" -WXPORT="%s" -MONOLITHIC=%d -FINAL=%d -HYBRID=%d -""" % (UNICODE, UNDEF_NDEBUG, INSTALL_MULTIVERSION, FLAVOUR, EP_ADD_OPTS, - WX_CONFIG, WXPORT, MONOLITHIC, FINAL, HYBRID) - -try: - from build_options import * -except: - build_options_file = os.path.join(os.path.dirname(__file__), "build_options.py") - if not os.path.exists(build_options_file): - try: - myfile = open(build_options_file, "w") - myfile.write(build_options_template) - myfile.close() - except: - print "WARNING: Unable to create build_options.py." - - #---------------------------------------------------------------------- # some helper functions #---------------------------------------------------------------------- def Verify_WX_CONFIG(): """ Called below for the builds that need wx-config, if WX_CONFIG - is not set then determins the flags needed based on build + is not set then determines the flags needed based on build options and searches for wx-config on the PATH. """ # if WX_CONFIG hasn't been set to an explicit value then construct one. @@ -333,7 +319,7 @@ def Verify_WX_CONFIG(): msg("ERROR: WX_CONFIG not specified and wx-config not found on the $PATH") # should we exit? - # TODO: exeucte WX_CONFIG --list and verify a matching config is found + # TODO: execute WX_CONFIG --list and verify a matching config is found def run_swig(files, dir, gendir, package, USE_SWIG, force, swig_args, @@ -343,11 +329,6 @@ def run_swig(files, dir, gendir, package, USE_SWIG, force, swig_args, if USE_SWIG and not os.path.exists(os.path.join(dir, gendir)): os.mkdir(os.path.join(dir, gendir)) - if USE_SWIG and not os.path.exists(os.path.join("docs", "xml-raw")): - if not os.path.exists("docs"): - os.mkdir("docs") - os.mkdir(os.path.join("docs", "xml-raw")) - sources = [] if add_under: pre = '_' @@ -358,7 +339,6 @@ def run_swig(files, dir, gendir, package, USE_SWIG, force, swig_args, i_file = os.path.join(dir, file) py_file = os.path.join(dir, gendir, pre+basefile+'.py') cpp_file = os.path.join(dir, gendir, pre+basefile+'_wrap.cpp') - xml_file = os.path.join("docs", "xml-raw", basefile+pre+'_swig.xml') if add_under: interface = ['-interface', '_'+basefile+'_'] @@ -379,7 +359,7 @@ def run_swig(files, dir, gendir, package, USE_SWIG, force, swig_args, pass if force or newer(i_file, py_file) or newer(i_file, cpp_file): - ## we need forward slashes here even on win32 + ## we need forward slashes here, even on win32 #cpp_file = opj(cpp_file) #'/'.join(cpp_file.split('\\')) #i_file = opj(i_file) #'/'.join(i_file.split('\\')) @@ -402,7 +382,7 @@ def run_swig(files, dir, gendir, package, USE_SWIG, force, swig_args, # Then run swig for real cmd = [ swig_cmd ] + swig_args + interface + \ - ['-I'+dir, '-o', cpp_file, '-xmlout', xml_file, i_file] + ['-I'+dir, '-o', cpp_file, i_file] msg(' '.join(cmd)) spawn(cmd) @@ -414,6 +394,18 @@ def run_swig(files, dir, gendir, package, USE_SWIG, force, swig_args, return sources +def swig_version(): + # It may come on either stdout or stderr, depending on the + # version, so read both. + i, o, e = os.popen3(SWIG + ' -version', 't') + stext = o.read() + e.read() + import re + match = re.search(r'[0-9]+\.[0-9]+\.[0-9]+$', stext, re.MULTILINE) + if not match: + raise 'NotFound' + SVER = match.group(0) + return SVER + # Specializations of some distutils command classes class wx_smart_install_data(distutils.command.install_data.install_data): @@ -511,7 +503,7 @@ def build_locale_dir(destdir, verbose=1): moFiles = glob.glob(opj(WXDIR, 'locale', '*.mo')) for src in moFiles: lang = os.path.splitext(os.path.basename(src))[0] - dest = opj(destdir, lang, 'LC_MESSAGES') + dest = opj(destdir, lang) mkpath(dest, verbose=verbose) copy_file(src, opj(dest, 'wxstd.mo'), update=1, verbose=verbose) CLEANUP.append(opj(dest, 'wxstd.mo')) @@ -582,7 +574,7 @@ def adjustCFLAGS(cflags, defines, includes): -def adjustLFLAGS(lfags, libdirs, libs): +def adjustLFLAGS(lflags, libdirs, libs): '''Extract the -L and -l flags and put them in libdirs and libs as needed''' newLFLAGS = [] for flag in lflags: @@ -593,7 +585,11 @@ def adjustLFLAGS(lfags, libdirs, libs): else: newLFLAGS.append(flag) - return newLFLAGS + # remove any flags for universal binaries, we'll get those from + # distutils instead + return [flag for flag in newLFLAGS + if flag not in ['-isysroot', '-arch', 'ppc', 'i386'] and + not flag.startswith('/Developer') ] @@ -631,8 +627,8 @@ if CORE_ONLY: BUILD_STC = 0 BUILD_GIZMOS = 0 BUILD_DLLWIDGET = 0 - BUILD_IEWIN = 0 BUILD_ACTIVEX = 0 + BUILD_ANIMATE = 0 if debug: FINAL = 0 @@ -666,7 +662,7 @@ if os.name == 'nt': WXDIR = '..' # assumes in CVS tree WXPLAT = '__WXMSW__' GENDIR = 'msw' - + includes = ['include', 'src', opj(WXDIR, 'lib', 'vc_dll', 'msw' + libFlag()), opj(WXDIR, 'include'), @@ -679,7 +675,8 @@ if os.name == 'nt': (WXPLAT, None), ('WXUSINGDLL', '1'), - ('SWIG_TYPE_TABLE', '_wxPython_table'), + ('SWIG_TYPE_TABLE', WXPYTHON_TYPE_TABLE), + ('SWIG_PYTHON_OUTPUT_TUPLE', None), ('WXP_USE_THREAD', '1'), ] @@ -692,6 +689,9 @@ if os.name == 'nt': if not FINAL or HYBRID: defines.append( ('__WXDEBUG__', None) ) + if UNICODE: + defines.append( ('wxUSE_UNICODE', 1) ) + libdirs = [ opj(WXDIR, 'lib', 'vc_dll') ] if MONOLITHIC: libs = makeLibName('') @@ -702,7 +702,6 @@ if os.name == 'nt': makeLibName('core')[0], makeLibName('adv')[0], makeLibName('html')[0], - makeLibName('xrc')[0], ] libs = libs + ['kernel32', 'user32', 'gdi32', 'comdlg32', @@ -733,8 +732,8 @@ if os.name == 'nt': elif os.name == 'posix': WXDIR = '..' includes = ['include', 'src'] - defines = [('SWIG_TYPE_TABLE', 'wxPython_type_table'), - ('HAVE_CONFIG_H', None), + defines = [('SWIG_TYPE_TABLE', WXPYTHON_TYPE_TABLE), + ('SWIG_PYTHON_OUTPUT_TUPLE', None), ('WXP_USE_THREAD', '1'), ] if UNDEF_NDEBUG: @@ -749,6 +748,7 @@ elif os.name == 'posix': # uncomment this block to add the right flags to the link step and build # again. ## if os.uname()[0] == 'SunOS': + ## import commands ## libs.append('gcc') ## libdirs.append(commands.getoutput("gcc -print-search-dirs | grep '^install' | awk '{print $2}'")[:-1]) @@ -761,6 +761,7 @@ elif os.name == 'posix': cflags.append('-O3') lflags = os.popen(WX_CONFIG + ' --libs', 'r').read()[:-1] + MONOLITHIC = (lflags.find("_xrc") == -1) lflags = lflags.split() WXBASENAME = os.popen(WX_CONFIG + ' --basename').read()[:-1] @@ -815,6 +816,41 @@ else: raise 'Sorry, platform not supported...' +#---------------------------------------------------------------------- +# build options file +#---------------------------------------------------------------------- + +if SYS_WX_CONFIG is None: + SYS_WX_CONFIG = WX_CONFIG + +build_options_template = """ +UNICODE=%d +UNDEF_NDEBUG=%d +INSTALL_MULTIVERSION=%d +FLAVOUR="%s" +EP_ADD_OPTS=%d +EP_FULL_VER=%d +WX_CONFIG="%s" +WXPORT="%s" +MONOLITHIC=%d +FINAL=%d +HYBRID=%d +""" % (UNICODE, UNDEF_NDEBUG, INSTALL_MULTIVERSION, FLAVOUR, EP_ADD_OPTS, + EP_FULL_VER, SYS_WX_CONFIG, WXPORT, MONOLITHIC, FINAL, HYBRID) + +try: + from build_options import * +except: + build_options_file = os.path.join(os.path.dirname(__file__), "build_options.py") + if not os.path.exists(build_options_file): + try: + myfile = open(build_options_file, "w") + myfile.write(build_options_template) + myfile.close() + except: + print "WARNING: Unable to create build_options.py." + + #---------------------------------------------------------------------- # post platform setup checks and tweaks, create the full version string #---------------------------------------------------------------------- @@ -840,7 +876,7 @@ VERSION = "%s.%s.%s.%s%s" % (VER_MAJOR, VER_MINOR, VER_RELEASE, # dirs as includes so we don't have to guess which is correct. wxfilesdir = "" -i_subdir = opj("include", "wx", "wxPython", "i_files") +i_subdir = opj("include", getExtraPath(), "wx", "wxPython", "i_files") if os.name != "nt": wxfilesdir = opj(WXPREFIX, i_subdir) else: @@ -852,15 +888,22 @@ i_files_includes = [ '-I' + opj(WXPY_SRC, 'src'), swig_cmd = SWIG swig_force = force swig_args = ['-c++', - '-Wall', - '-nodefault', - + #'-Wall', '-python', - '-keyword', '-new_repr', '-modern', '-D'+WXPLAT, ] + i_files_includes + +if USE_SWIG: + SVER = swig_version() + if int(SVER[-2:]) >= 29: + swig_args += [ '-fastdispatch', + '-fvirtual', + '-fastinit', + '-fastunpack', + #'-outputtuple', Currently setting this with a -D define above + ] if UNICODE: swig_args.append('-DwxUSE_UNICODE') @@ -884,7 +927,7 @@ depends = [ #'include/wx/wxPython/wxPython.h', # BuildRenamers #################################### -import pprint +import pprint, shutil try: import libxml2 FOUND_LIBXML2 = True @@ -970,11 +1013,14 @@ class BuildRenamers: # blow away the old one if they are different. for dest, temp in [(swigDest, swigDestTemp), (pyDest, pyDestTemp)]: + # NOTE: we don't use shutil.move() because it was introduced + # in Python 2.3. Eventually we can switch to it when people + # stop building using 2.2. if not os.path.exists(dest): - os.rename(temp, dest) + shutil.copyfile(temp, dest) elif open(dest).read() != open(temp).read(): os.unlink(dest) - os.rename(temp, dest) + shutil.copyfile(temp, dest) else: print dest + " not changed." os.unlink(temp) @@ -1004,7 +1050,6 @@ class BuildRenamers: # do a depth first iteration over what's left for node in topnode: doRename = False - doPtr = False addWX = False revOnly = False @@ -1013,7 +1058,6 @@ class BuildRenamers: lastClassName = name = self.GetAttr(node, "name") lastClassSymName = sym_name = self.GetAttr(node, "sym_name") doRename = True - doPtr = True if sym_name != name: name = sym_name addWX = True @@ -1071,8 +1115,6 @@ class BuildRenamers: if addWX and not old.startswith('wx'): old = 'wx'+old pyFile.write("%s = wx.%s.%s\n" % (old, modname, new)) - if doPtr: - pyFile.write("%sPtr = wx.%s.%sPtr\n" % (old, modname, new)) #---------------------------------------------------------------------------