X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/77bef39a474d9f955225959554bfcd88fe4ca529..f5058cd7d926d45a6b0673a0b557ca0792f60e48:/wxPython/config.py diff --git a/wxPython/config.py b/wxPython/config.py index 6b8d5199e6..c25ce4f35d 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 = 6 +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 num, unicode, etc. +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 @@ -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 @@ -241,11 +255,12 @@ WXPYTHON_TYPE_TABLE = '_wxPython_table' #---------------------------------------------------------------------- # 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: @@ -255,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: @@ -272,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 * @@ -305,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. @@ -334,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, @@ -380,7 +399,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('\\')) @@ -415,6 +434,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): @@ -632,8 +663,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 @@ -667,7 +698,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'), @@ -681,6 +712,7 @@ if os.name == 'nt': ('WXUSINGDLL', '1'), ('SWIG_TYPE_TABLE', WXPYTHON_TYPE_TABLE), + ('SWIG_PYTHON_OUTPUT_TUPLE', None), ('WXP_USE_THREAD', '1'), ] @@ -693,6 +725,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('') @@ -735,7 +770,7 @@ elif os.name == 'posix': WXDIR = '..' includes = ['include', 'src'] defines = [('SWIG_TYPE_TABLE', WXPYTHON_TYPE_TABLE), - ('HAVE_CONFIG_H', None), + ('SWIG_PYTHON_OUTPUT_TUPLE', None), ('WXP_USE_THREAD', '1'), ] if UNDEF_NDEBUG: @@ -750,6 +785,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]) @@ -841,7 +877,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: @@ -853,15 +889,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') @@ -885,7 +928,7 @@ depends = [ #'include/wx/wxPython/wxPython.h', # BuildRenamers #################################### -import pprint +import pprint, shutil try: import libxml2 FOUND_LIBXML2 = True @@ -971,11 +1014,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) @@ -1005,7 +1051,6 @@ class BuildRenamers: # do a depth first iteration over what's left for node in topnode: doRename = False - doPtr = False addWX = False revOnly = False @@ -1014,7 +1059,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 @@ -1072,8 +1116,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)) #---------------------------------------------------------------------------