X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/82479312aa9f685b0a91fb7ea97cf74abfba7d54..1d88e73a3f25f16ad845b114153edd603d4970be:/wxPython/config.py diff --git a/wxPython/config.py b/wxPython/config.py index fa74e2acc3..35032e2fcd 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 = 4 -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 = """\ @@ -82,11 +82,11 @@ BUILD_GLCANVAS = 1 # If true, build the contrib/glcanvas extension module BUILD_OGL = 0 # If true, build the contrib/ogl extension module BUILD_STC = 1 # If true, build the contrib/stc extension module BUILD_GIZMOS = 1 # Build a module for the gizmos contrib library +BUILD_ANIMATE = 1 # Build a module for the animate contrib library 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 @@ -129,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 @@ -138,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 @@ -147,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 @@ -233,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: @@ -253,8 +270,8 @@ 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', ]: for x in range(len(sys.argv)): if sys.argv[x].find(option) == 0: @@ -270,19 +287,23 @@ sys.argv = filter(None, sys.argv) # 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, - WX_CONFIG, WXPORT, MONOLITHIC, FINAL, HYBRID) + EP_FULL_VER, SYS_WX_CONFIG, WXPORT, MONOLITHIC, FINAL, HYBRID) try: from build_options import * @@ -303,7 +324,7 @@ except: 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. @@ -332,7 +353,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, @@ -342,11 +363,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 = '_' @@ -357,7 +373,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+'_'] @@ -378,7 +393,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('\\')) @@ -401,7 +416,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) @@ -413,6 +428,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): @@ -630,8 +657,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 @@ -665,7 +692,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'), @@ -678,7 +705,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'), ] @@ -691,6 +719,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('') @@ -732,8 +763,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: @@ -748,6 +779,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]) @@ -839,7 +871,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: @@ -851,15 +883,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') @@ -883,7 +922,7 @@ depends = [ #'include/wx/wxPython/wxPython.h', # BuildRenamers #################################### -import pprint +import pprint, shutil try: import libxml2 FOUND_LIBXML2 = True @@ -969,11 +1008,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) @@ -1003,7 +1045,6 @@ class BuildRenamers: # do a depth first iteration over what's left for node in topnode: doRename = False - doPtr = False addWX = False revOnly = False @@ -1012,7 +1053,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 @@ -1070,8 +1110,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)) #---------------------------------------------------------------------------