2 #---------------------------------------------------------------------- 
   4 import sys
, os
, glob
, fnmatch
, tempfile
 
   5 from distutils
.core      
import setup
, Extension
 
   6 from distutils
.file_util 
import copy_file
 
   7 from distutils
.dir_util  
import mkpath
 
   8 from distutils
.dep_util  
import newer
 
   9 from distutils
.spawn     
import spawn
 
  10 from distutils
.command
.install_data 
import install_data
 
  12 #---------------------------------------------------------------------- 
  13 # flags and values that affect this script 
  14 #---------------------------------------------------------------------- 
  16 VER_MAJOR        
= 2      # The first three must match wxWindows 
  19 VER_SUBREL       
= 0      # wxPython release num for x.y.z release of wxWindows 
  20 VER_FLAGS        
= "p6"   # release flags, such as prerelease num, unicode, etc. 
  22 DESCRIPTION      
= "Cross platform GUI toolkit for Python" 
  24 AUTHOR_EMAIL     
= "Robin Dunn <robin@alldunn.com>" 
  25 URL              
= "http://wxPython.org/" 
  26 DOWNLOAD_URL     
= "http://wxPython.org/download.php" 
  27 LICENSE          
= "wxWindows Library License (LGPL derivative)" 
  28 PLATFORMS        
= "WIN32,OSX,POSIX" 
  29 KEYWORDS         
= "GUI,wx,wxWindows,cross-platform" 
  31 LONG_DESCRIPTION 
= """\ 
  32 wxPython is a GUI toolkit for Python that is a wrapper around the 
  33 wxWindows C++ GUI library.  wxPython provides a large variety of 
  34 window types and controls, all implemented with a native look and 
  35 feel (by using the native widgets) on the platforms it is supported 
  40 Development Status :: 6 - Mature 
  41 Environment :: MacOS X :: Carbon 
  42 Environment :: Win32 (MS Windows) 
  43 Environment :: X11 Applications :: GTK 
  44 Intended Audience :: Developers 
  45 License :: OSI Approved 
  46 Operating System :: MacOS :: MacOS X 
  47 Operating System :: Microsoft :: Windows :: Windows 95/98/2000 
  48 Operating System :: POSIX 
  49 Programming Language :: Python 
  50 Topic :: Software Development :: User Interfaces 
  53 ## License :: OSI Approved :: wxWindows Library Licence 
  56 # Config values below this point can be reset on the setup.py command line. 
  58 BUILD_GLCANVAS 
= 1 # If true, build the contrib/glcanvas extension module 
  59 BUILD_OGL 
= 1      # If true, build the contrib/ogl extension module 
  60 BUILD_STC 
= 1      # If true, build the contrib/stc extension module 
  61 BUILD_XRC 
= 1      # XML based resource system 
  62 BUILD_GIZMOS 
= 1   # Build a module for the gizmos contrib library 
  63 BUILD_DLLWIDGET 
= 0# Build a module that enables unknown wx widgets 
  64                    # to be loaded from a DLL and to be used from Python. 
  66                    # Internet Explorer wrapper (experimental) 
  67 BUILD_IEWIN 
= 0 #(os.name == 'nt') 
  70 CORE_ONLY 
= 0      # if true, don't build any of the above 
  72 PREP_ONLY 
= 0      # Only run the prepatory steps, not the actual build. 
  74 USE_SWIG 
= 0       # Should we actually execute SWIG, or just use the 
  75                    # files already in the distribution? 
  77 SWIG 
= "swig"      # The swig executable to use. 
  79 BUILD_RENAMERS 
= 1 # Should we build the renamer modules too? 
  81 UNICODE 
= 0        # This will pass the 'wxUSE_UNICODE' flag to SWIG and 
  82                    # will ensure that the right headers are found and the 
  83                    # right libs are linked. 
  85 UNDEF_NDEBUG 
= 1   # Python 2.2 on Unix/Linux by default defines NDEBUG, 
  86                    # and distutils will pick this up and use it on the 
  87                    # compile command-line for the extensions.  This could 
  88                    # conflict with how wxWindows was built.  If NDEBUG is 
  89                    # set then wxWindows' __WXDEBUG__ setting will be turned 
  90                    # off.  If wxWindows was actually built with it turned 
  91                    # on then you end up with mismatched class structures, 
  92                    # and wxPython will crash. 
  94 NO_SCRIPTS 
= 0     # Don't install the tool scripts 
  96 WX_CONFIG 
= None   # Usually you shouldn't need to touch this, but you can set 
  97                    # it to pass an alternate version of wx-config or alternate 
  98                    # flags, eg. as required by the .deb in-tree build.  By 
  99                    # default a wx-config command will be assembled based on 
 100                    # version, port, etc. and it will be looked for on the 
 103 WXPORT 
= 'gtk'     # On Linux/Unix there are several ports of wxWindows available. 
 104                    # Setting this value lets you select which will be used for 
 105                    # the wxPython build.  Possibilites are 'gtk', 'gtk2' and 
 106                    # 'x11'.  Curently only gtk and gtk2 works. 
 108 BUILD_BASE 
= "build"       # Directory to use for temporary build files. 
 112 # Some MSW build settings 
 114 FINAL 
= 0          # Mirrors use of same flag in wx makefiles, 
 115                    # (0 or 1 only) should probably find a way to 
 118 HYBRID 
= 1         # If set and not debug or FINAL, then build a 
 119                    # hybrid extension that can be used by the 
 120                    # non-debug version of python, but contains 
 121                    # debugging symbols for wxWindows and wxPython. 
 122                    # wxWindows must have been built with /MD, not /MDd 
 123                    # (using FINAL=hybrid will do it.) 
 125                    # Version part of wxWindows LIB/DLL names 
 126 WXDLLVER 
= '%d%d' % (VER_MAJOR
, VER_MINOR
) 
 129 #---------------------------------------------------------------------- 
 132     if __name__ 
== "__main__": 
 137     path 
= apply(os
.path
.join
, args
) 
 138     return os
.path
.normpath(path
) 
 153 #---------------------------------------------------------------------- 
 155 #---------------------------------------------------------------------- 
 161 force 
= '--force' in sys
.argv 
or '-f' in sys
.argv
 
 162 debug 
= '--debug' in sys
.argv 
or '-g' in sys
.argv
 
 163 cleaning 
= 'clean' in sys
.argv
 
 166 # change the PORT default for wxMac 
 167 if sys
.platform
[:6] == "darwin": 
 170 # and do the same for wxMSW, just for consistency 
 175 #---------------------------------------------------------------------- 
 176 # Check for build flags on the command line 
 177 #---------------------------------------------------------------------- 
 179 # Boolean (int) flags 
 180 for flag 
in ['BUILD_GLCANVAS', 'BUILD_OGL', 'BUILD_STC', 'BUILD_XRC', 
 181              'BUILD_GIZMOS', 'BUILD_DLLWIDGET', 'BUILD_IEWIN', 
 182              'CORE_ONLY', 'PREP_ONLY', 'USE_SWIG', 'UNICODE', 
 183              'UNDEF_NDEBUG', 'NO_SCRIPTS', 'BUILD_RENAMERS', 
 184              'FINAL', 'HYBRID', ]: 
 185     for x 
in range(len(sys
.argv
)): 
 186         if sys
.argv
[x
].find(flag
) == 0: 
 187             pos 
= sys
.argv
[x
].find('=') + 1 
 189                 vars()[flag
] = eval(sys
.argv
[x
][pos
:]) 
 193 for option 
in ['WX_CONFIG', 'WXDLLVER', 'BUILD_BASE', 'WXPORT', 'SWIG']: 
 194     for x 
in range(len(sys
.argv
)): 
 195         if sys
.argv
[x
].find(option
) == 0: 
 196             pos 
= sys
.argv
[x
].find('=') + 1 
 198                 vars()[option
] = sys
.argv
[x
][pos
:] 
 201 sys
.argv 
= filter(None, sys
.argv
) 
 204 #---------------------------------------------------------------------- 
 205 # some helper functions 
 206 #---------------------------------------------------------------------- 
 208 def Verify_WX_CONFIG(): 
 209     """ Called below for the builds that need wx-config, 
 210         if WX_CONFIG is not set then tries to select the specific 
 211         wx*-config script based on build options.  If not found 
 212         then it defaults to 'wx-config'. 
 214     # if WX_CONFIG hasn't been set to an explicit value then construct one. 
 216     if WX_CONFIG 
is None: 
 217         if debug
:             # TODO: Fix this.  wxPython's --debug shouldn't be tied to wxWindows... 
 225         ver2 
= "%s.%s" % (VER_MAJOR
, VER_MINOR
) 
 229         WX_CONFIG 
= 'wx%s%s%s-%s-config' % (port
, uf
, df
, ver2
) 
 231         searchpath 
= os
.environ
["PATH"] 
 232         for p 
in searchpath
.split(':'): 
 233             fp 
= os
.path
.join(p
, WX_CONFIG
) 
 234             if os
.path
.exists(fp
) and os
.access(fp
, os
.X_OK
): 
 236                 msg("Found wx-config: " + fp
) 
 240             msg("WX_CONFIG not specified and %s not found on $PATH " 
 241                   "defaulting to \"wx-config\"" % WX_CONFIG
) 
 242             WX_CONFIG 
= 'wx-config' 
 246 def run_swig(files
, dir, gendir
, package
, USE_SWIG
, force
, swig_args
, swig_deps
=[]): 
 247     """Run SWIG the way I want it done""" 
 249     if not os
.path
.exists(os
.path
.join(dir, gendir
)): 
 250         os
.mkdir(os
.path
.join(dir, gendir
)) 
 252     if not os
.path
.exists(os
.path
.join("docs", "xml-raw")): 
 253         os
.mkdir(os
.path
.join("docs", "xml-raw")) 
 258         basefile 
= os
.path
.splitext(file)[0] 
 259         i_file   
= os
.path
.join(dir, file) 
 260         py_file  
= os
.path
.join(dir, gendir
, basefile
+'.py') 
 261         cpp_file 
= os
.path
.join(dir, gendir
, basefile
+'_wrap.cpp') 
 262         xml_file 
= os
.path
.join("docs", "xml-raw", basefile
+'_swig.xml') 
 264         sources
.append(cpp_file
) 
 266         if not cleaning 
and USE_SWIG
: 
 267             for dep 
in swig_deps
: 
 268                 if newer(dep
, py_file
) or newer(dep
, cpp_file
): 
 272             if force 
or newer(i_file
, py_file
) or newer(i_file
, cpp_file
): 
 273                 ## we need forward slashes here even on win32 
 274                 #cpp_file = opj(cpp_file) #'/'.join(cpp_file.split('\\')) 
 275                 #i_file = opj(i_file)     #'/'.join(i_file.split('\\')) 
 278                     #tempfile.tempdir = sourcePath 
 279                     xmltemp 
= tempfile
.mktemp('.xml') 
 281                     # First run swig to produce the XML file, adding 
 282                     # an extra -D that prevents the old rename 
 283                     # directives from being used 
 284                     cmd 
= [ swig_cmd 
] + swig_args 
+ \
 
 285                           [ '-DBUILDING_RENAMERS', '-xmlout', xmltemp 
] + \
 
 286                           ['-I'+dir, '-o', cpp_file
, i_file
] 
 290                     # Next run build_renamers to process the XML 
 291                     cmd 
= [ sys
.executable
, '-u', 
 292                             './distrib/build_renamers.py', dir, basefile
, xmltemp
]  
 297                 # Then run swig for real 
 298                 cmd 
= [ swig_cmd 
] + swig_args 
+ ['-I'+dir, '-o', cpp_file
, 
 299                                                   '-xmlout', xml_file
, i_file
] 
 304         # copy the generated python file to the package directory 
 305         copy_file(py_file
, package
, update
=not force
, verbose
=0) 
 311 def contrib_copy_tree(src
, dest
, verbose
=0): 
 312     """Update local copies of wxWindows contrib files""" 
 313     from distutils
.dir_util 
import mkpath
, copy_tree
 
 315     mkpath(dest
, verbose
=verbose
) 
 316     copy_tree(src
, dest
, update
=1, verbose
=verbose
) 
 320 class smart_install_data(install_data
): 
 322         #need to change self.install_dir to the actual library dir 
 323         install_cmd 
= self
.get_finalized_command('install') 
 324         self
.install_dir 
= getattr(install_cmd
, 'install_lib') 
 325         return install_data
.run(self
) 
 328 def build_locale_dir(destdir
, verbose
=1): 
 329     """Build a locale dir under the wxPython package for MSW""" 
 330     moFiles 
= glob
.glob(opj(WXDIR
, 'locale', '*.mo')) 
 332         lang 
= os
.path
.splitext(os
.path
.basename(src
))[0] 
 333         dest 
= opj(destdir
, lang
, 'LC_MESSAGES') 
 334         mkpath(dest
, verbose
=verbose
) 
 335         copy_file(src
, opj(dest
, 'wxstd.mo'), update
=1, verbose
=verbose
) 
 338 def build_locale_list(srcdir
): 
 339     # get a list of all files under the srcdir, to be used for install_data 
 340     def walk_helper(lst
, dirname
, files
): 
 342             filename 
= opj(dirname
, f
) 
 343             if not os
.path
.isdir(filename
): 
 344                 lst
.append( (dirname
, [filename
]) ) 
 346     os
.path
.walk(srcdir
, walk_helper
, file_list
) 
 350 def find_data_files(srcdir
, *wildcards
): 
 351     # get a list of all files under the srcdir matching wildcards, 
 352     # returned in a format to be used for install_data 
 354     def walk_helper(arg
, dirname
, files
): 
 359                 filename 
= opj(dirname
, f
) 
 360                 if fnmatch
.fnmatch(filename
, wc
) and not os
.path
.isdir(filename
): 
 361                     names
.append(filename
) 
 363             lst
.append( (dirname
, names 
) ) 
 366     os
.path
.walk(srcdir
, walk_helper
, (file_list
, wildcards
)) 
 370 def makeLibName(name
): 
 371     if os
.name 
== 'posix': 
 372         libname 
= '%s_%s-%s' % (WXBASENAME
, name
, WXRELEASE
) 
 374         libname 
= 'wxmsw%s%s_%s' % (WXDLLVER
, libFlag(), name
) 
 380 def adjustCFLAGS(cflags
, defines
, includes
): 
 381     '''Extrace the raw -I, -D, and -U flags and put them into 
 382        defines and includes as needed.''' 
 386             includes
.append(flag
[2:]) 
 387         elif flag
[:2] == '-D': 
 389             if flag
.find('=') == -1: 
 390                 defines
.append( (flag
, None) ) 
 392                 defines
.append( tuple(flag
.split('=')) ) 
 393         elif flag
[:2] == '-U': 
 394             defines
.append( (flag
[2:], ) ) 
 396             newCFLAGS
.append(flag
) 
 401 def adjustLFLAGS(lfags
, libdirs
, libs
): 
 402     '''Extrace the -L and -l flags and put them in libdirs and libs as needed''' 
 406             libdirs
.append(flag
[2:]) 
 407         elif flag
[:2] == '-l': 
 408             libs
.append(flag
[2:]) 
 410             newLFLAGS
.append(flag
) 
 414 #---------------------------------------------------------------------- 
 433 if UNICODE 
and WXPORT 
not in ['msw', 'gtk2']: 
 434     raise SystemExit, "UNICODE mode not currently supported on this WXPORT: "+WXPORT
 
 437 #---------------------------------------------------------------------- 
 438 # Setup some platform specific stuff 
 439 #---------------------------------------------------------------------- 
 442     # Set compile flags and such for MSVC.  These values are derived 
 443     # from the wxWindows makefiles for MSVC, other compilers settings 
 444     # will probably vary... 
 445     if os
.environ
.has_key('WXWIN'): 
 446         WXDIR 
= os
.environ
['WXWIN'] 
 448         msg("WARNING: WXWIN not set in environment.") 
 449         WXDIR 
= '..'  # assumes in CVS tree 
 453     includes 
= ['include', 'src', 
 454                 opj(WXDIR
, 'lib', 'vc_dll', 'msw'  + libFlag()), 
 455                 opj(WXDIR
, 'include'), 
 456                 opj(WXDIR
, 'contrib', 'include'), 
 459     defines 
= [ ('WIN32', None), 
 465                 ('SWIG_GLOBAL', None), 
 466                 ('WXP_USE_THREAD', '1'), 
 470         defines
.append( ('NDEBUG',) )  # using a 1-tuple makes it do an undef 
 473     if not FINAL 
or HYBRID
: 
 474         defines
.append( ('__WXDEBUG__', None) ) 
 476     libdirs 
= [ opj(WXDIR
, 'lib', 'vc_dll') ] 
 477     libs 
= [ 'wxbase' + WXDLLVER 
+ libFlag(),  # TODO: trim this down to what is really needed for the core 
 478              'wxbase' + WXDLLVER 
+ libFlag() + '_net', 
 479              'wxbase' + WXDLLVER 
+ libFlag() + '_xml', 
 480              makeLibName('core')[0], 
 481              makeLibName('adv')[0], 
 482              makeLibName('html')[0], 
 485     libs 
= libs 
+ ['kernel32', 'user32', 'gdi32', 'comdlg32', 
 486             'winspool', 'winmm', 'shell32', 'oldnames', 'comctl32', 
 487             'odbc32', 'ole32', 'oleaut32', 'uuid', 'rpcrt4', 
 488             'advapi32', 'wsock32'] 
 492              # '/GX-'  # workaround for internal compiler error in MSVC on some machines 
 496     # Other MSVC flags... 
 497     # Too bad I don't remember why I was playing with these, can they be removed? 
 499         pass #cflags = cflags + ['/O1'] 
 501         pass #cflags = cflags + ['/Ox'] 
 503         pass # cflags = cflags + ['/Od', '/Z7'] 
 504              # lflags = ['/DEBUG', ] 
 508 #---------------------------------------------------------------------- 
 510 elif os
.name 
== 'posix': 
 512     includes 
= ['include', 'src'] 
 513     defines 
= [('SWIG_GLOBAL', None), 
 514                ('HAVE_CONFIG_H', None), 
 515                ('WXP_USE_THREAD', '1'), 
 518         defines
.append( ('NDEBUG',) )  # using a 1-tuple makes it do an undef 
 525     # If you get unresolved symbol errors on Solaris and are using gcc, then 
 526     # uncomment this block to add the right flags to the link step and build 
 528     ## if os.uname()[0] == 'SunOS': 
 529     ##     libs.append('gcc') 
 530     ##     libdirs.append(commands.getoutput("gcc -print-search-dirs | grep '^install' | awk '{print $2}'")[:-1]) 
 532     cflags 
= os
.popen(WX_CONFIG 
+ ' --cxxflags', 'r').read()[:-1] 
 533     cflags 
= cflags
.split() 
 540     lflags 
= os
.popen(WX_CONFIG 
+ ' --libs', 'r').read()[:-1] 
 541     lflags 
= lflags
.split() 
 543     WXBASENAME 
= os
.popen(WX_CONFIG 
+ ' --basename').read()[:-1] 
 544     WXRELEASE  
= os
.popen(WX_CONFIG 
+ ' --release').read()[:-1] 
 545     WXPREFIX   
= os
.popen(WX_CONFIG 
+ ' --prefix').read()[:-1] 
 548     if sys
.platform
[:6] == "darwin": 
 549         # Flags and such for a Darwin (Max OS X) build of Python 
 557         # Set flags for other Unix type platforms 
 562             portcfg 
= os
.popen('gtk-config --cflags', 'r').read()[:-1] 
 563         elif WXPORT 
== 'gtk2': 
 565             GENDIR 
= 'gtk' # no code differences so use the same generated sources 
 566             portcfg 
= os
.popen('pkg-config gtk+-2.0 --cflags', 'r').read()[:-1] 
 567             BUILD_BASE 
= BUILD_BASE 
+ '-' + WXPORT
 
 568         elif WXPORT 
== 'x11': 
 571             BUILD_BASE 
= BUILD_BASE 
+ '-' + WXPORT
 
 573             raise SystemExit, "Unknown WXPORT value: " + WXPORT
 
 575         cflags 
+= portcfg
.split() 
 577         # Some distros (e.g. Mandrake) put libGLU in /usr/X11R6/lib, but 
 578         # wx-config doesn't output that for some reason.  For now, just 
 579         # add it unconditionally but we should really check if the lib is 
 580         # really found there or wx-config should be fixed. 
 581         libdirs
.append("/usr/X11R6/lib") 
 584     # Move the various -I, -D, etc. flags we got from the *config scripts 
 585     # into the distutils lists. 
 586     cflags 
= adjustCFLAGS(cflags
, defines
, includes
) 
 587     lflags 
= adjustLFLAGS(lflags
, libdirs
, libs
) 
 590 #---------------------------------------------------------------------- 
 592     raise 'Sorry Charlie, platform not supported...' 
 595 #---------------------------------------------------------------------- 
 596 # post platform setup checks and tweaks, create the full version string 
 597 #---------------------------------------------------------------------- 
 600     BUILD_BASE 
= BUILD_BASE 
+ '.unicode' 
 604 VERSION 
= "%s.%s.%s.%s%s" % (VER_MAJOR
, VER_MINOR
, VER_RELEASE
, 
 605                              VER_SUBREL
, VER_FLAGS
) 
 607 #---------------------------------------------------------------------- 
 608 # Update the version file 
 609 #---------------------------------------------------------------------- 
 611 # Unconditionally updated since the version string can change based 
 612 # on the UNICODE flag 
 613 open('src/__version__.py', 'w').write("""\ 
 614 # This file was generated by setup.py... 
 616 VERSION_STRING  = '%(VERSION)s' 
 617 MAJOR_VERSION   = %(VER_MAJOR)s 
 618 MINOR_VERSION   = %(VER_MINOR)s 
 619 RELEASE_VERSION = %(VER_RELEASE)s 
 620 SUBREL_VERSION  = %(VER_SUBREL)s 
 622 VERSION = (MAJOR_VERSION, MINOR_VERSION, RELEASE_VERSION, 
 623              SUBREL_VERSION, '%(VER_FLAGS)s') 
 625 RELEASE_NUMBER = RELEASE_VERSION  # for compatibility 
 631 #---------------------------------------------------------------------- 
 633 #---------------------------------------------------------------------- 
 653     swig_args
.append('-DwxUSE_UNICODE') 
 655 swig_deps 
= [ 'src/my_typemaps.i', 
 660 depends 
= [ #'include/wx/wxPython/wxPython.h', 
 661             #'include/wx/wxPython/wxPython_int.h', 
 666 #---------------------------------------------------------------------- 
 667 # Define the CORE extension module 
 668 #---------------------------------------------------------------------- 
 670 msg('Preparing CORE...') 
 671 swig_sources 
= run_swig(['core.i'], 'src', GENDIR
, PKGDIR
, 
 672                         USE_SWIG
, swig_force
, swig_args
, swig_deps 
+ 
 676                           'src/_constraints.i', 
 679                           'src/_core_rename.i', 
 680                           'src/_core_reverse.txt', 
 697 copy_file('src/__init__.py', PKGDIR
, update
=1, verbose
=0) 
 698 copy_file('src/__version__.py', PKGDIR
, update
=1, verbose
=0) 
 701 # update the license files 
 703 for file in ['preamble.txt', 'licence.txt', 'licendoc.txt', 'lgpl.txt']: 
 704     copy_file(opj(WXDIR
, 'docs', file), opj('licence',file), update
=1, verbose
=0) 
 708     build_locale_dir(opj(PKGDIR
, 'locale')) 
 709     DATA_FILES 
+= build_locale_list(opj(PKGDIR
, 'locale')) 
 713     rc_file 
= ['src/wxc.rc'] 
 718 ext 
= Extension('_core', ['src/helpers.cpp', 
 720                         ] + rc_file 
+ swig_sources
, 
 722                 include_dirs 
= includes
, 
 723                 define_macros 
= defines
, 
 725                 library_dirs 
= libdirs
, 
 728                 extra_compile_args 
= cflags
, 
 729                 extra_link_args 
= lflags
, 
 733 wxpExtensions
.append(ext
) 
 739 # Extension for the GDI module 
 740 swig_sources 
= run_swig(['gdi.i'], 'src', GENDIR
, PKGDIR
, 
 741                         USE_SWIG
, swig_force
, swig_args
, swig_deps 
+ 
 742                         ['src/_gdi_rename.i', 
 743                          'src/_bitmap.i',           'src/_brush.i', 
 744                          'src/_colour.i',           'src/_cursor.i', 
 745                          'src/_dc.i',               'src/_font.i', 
 746                          'src/_gdiobj.i',           'src/_icon.i', 
 747                          'src/_imaglist.i',         'src/_pen.i', 
 748                          'src/_region.i',           'src/_palette.i', 
 754 ext 
= Extension('_gdi', ['src/drawlist.cpp'] + swig_sources
, 
 755                 include_dirs 
=  includes
, 
 756                 define_macros 
= defines
, 
 757                 library_dirs 
= libdirs
, 
 759                 extra_compile_args 
= cflags
, 
 760                 extra_link_args 
= lflags
, 
 763 wxpExtensions
.append(ext
) 
 770 # Extension for the windows module 
 771 swig_sources 
= run_swig(['windows.i'], 'src', GENDIR
, PKGDIR
, 
 772                         USE_SWIG
, swig_force
, swig_args
, swig_deps 
+ 
 773                         ['src/_windows_rename.i',    'src/_windows_reverse.txt', 
 775                          'src/_toplvl.i',            'src/_statusbar.i', 
 776                          'src/_splitter.i',          'src/_sashwin.i', 
 777                          'src/_popupwin.i',          'src/_tipwin.i', 
 778                          'src/_vscroll.i',           'src/_taskbar.i', 
 779                          'src/_cmndlgs.i',           'src/_mdi.i', 
 780                          'src/_pywindows.i',         'src/_printfw.i', 
 782 ext 
= Extension('_windows', swig_sources
, 
 783                 include_dirs 
=  includes
, 
 784                 define_macros 
= defines
, 
 785                 library_dirs 
= libdirs
, 
 787                 extra_compile_args 
= cflags
, 
 788                 extra_link_args 
= lflags
, 
 791 wxpExtensions
.append(ext
) 
 796 # Extension for the controls module 
 797 swig_sources 
= run_swig(['controls.i'], 'src', GENDIR
, PKGDIR
, 
 798                         USE_SWIG
, swig_force
, swig_args
, swig_deps 
+ 
 799                         [ 'src/_controls_rename.i',     'src/_controls_reverse.txt', 
 800                           'src/_control.i',             'src/_toolbar.i', 
 801                           'src/_button.i',              'src/_checkbox.i', 
 802                           'src/_choice.i',              'src/_combobox.i', 
 803                           'src/_gauge.i',               'src/_statctrls.i', 
 804                           'src/_listbox.i',             'src/_textctrl.i', 
 805                           'src/_scrolbar.i',            'src/_spin.i', 
 806                           'src/_radio.i',               'src/_slider.i', 
 807                           'src/_tglbtn.i',              'src/_notebook.i', 
 808                           'src/_listctrl.i',            'src/_treectrl.i', 
 809                           'src/_dirctrl.i',             'src/_pycontrol.i', 
 810                           'src/_cshelp.i',              'src/_dragimg.i', 
 812 ext 
= Extension('_controls', swig_sources
, 
 813                 include_dirs 
=  includes
, 
 814                 define_macros 
= defines
, 
 815                 library_dirs 
= libdirs
, 
 817                 extra_compile_args 
= cflags
, 
 818                 extra_link_args 
= lflags
, 
 821 wxpExtensions
.append(ext
) 
 826 # Extension for the misc module 
 827 swig_sources 
= run_swig(['misc.i'], 'src', GENDIR
, PKGDIR
, 
 828                         USE_SWIG
, swig_force
, swig_args
, swig_deps 
+ 
 829                         [ 'src/_settings.i',      'src/_functions.i', 
 830                           'src/_misc.i',          'src/_tipdlg.i', 
 831                           'src/_timer.i',         'src/_log.i', 
 832                           'src/_process.i',       'src/_joystick.i', 
 833                           'src/_wave.i',          'src/_mimetype.i', 
 834                           'src/_artprov.i',       'src/_config.i', 
 835                           'src/_datetime.i',      'src/_dataobj.i', 
 839 ext 
= Extension('_misc', swig_sources
, 
 840                 include_dirs 
=  includes
, 
 841                 define_macros 
= defines
, 
 842                 library_dirs 
= libdirs
, 
 844                 extra_compile_args 
= cflags
, 
 845                 extra_link_args 
= lflags
, 
 848 wxpExtensions
.append(ext
) 
 853 ## Core modules that are not in the "core" namespace start here 
 856 swig_sources 
= run_swig(['calendar.i'], 'src', GENDIR
, PKGDIR
, 
 857                         USE_SWIG
, swig_force
, swig_args
, swig_deps
) 
 858 ext 
= Extension('_calendar', swig_sources
, 
 859                 include_dirs 
=  includes
, 
 860                 define_macros 
= defines
, 
 861                 library_dirs 
= libdirs
, 
 863                 extra_compile_args 
= cflags
, 
 864                 extra_link_args 
= lflags
, 
 867 wxpExtensions
.append(ext
) 
 870 swig_sources 
= run_swig(['grid.i'], 'src', GENDIR
, PKGDIR
, 
 871                         USE_SWIG
, swig_force
, swig_args
, swig_deps
) 
 872 ext 
= Extension('_grid', swig_sources
, 
 873                 include_dirs 
=  includes
, 
 874                 define_macros 
= defines
, 
 875                 library_dirs 
= libdirs
, 
 877                 extra_compile_args 
= cflags
, 
 878                 extra_link_args 
= lflags
, 
 881 wxpExtensions
.append(ext
) 
 885 swig_sources 
= run_swig(['html.i'], 'src', GENDIR
, PKGDIR
, 
 886                         USE_SWIG
, swig_force
, swig_args
, swig_deps
) 
 887 ext 
= Extension('_html', swig_sources
, 
 888                 include_dirs 
=  includes
, 
 889                 define_macros 
= defines
, 
 890                 library_dirs 
= libdirs
, 
 892                 extra_compile_args 
= cflags
, 
 893                 extra_link_args 
= lflags
, 
 896 wxpExtensions
.append(ext
) 
 900 swig_sources 
= run_swig(['wizard.i'], 'src', GENDIR
, PKGDIR
, 
 901                         USE_SWIG
, swig_force
, swig_args
, swig_deps
) 
 902 ext 
= Extension('_wizard', swig_sources
, 
 903                 include_dirs 
=  includes
, 
 904                 define_macros 
= defines
, 
 905                 library_dirs 
= libdirs
, 
 907                 extra_compile_args 
= cflags
, 
 908                 extra_link_args 
= lflags
, 
 911 wxpExtensions
.append(ext
) 
 917 #---------------------------------------------------------------------- 
 918 # Define the GLCanvas extension module 
 919 #---------------------------------------------------------------------- 
 922     msg('Preparing GLCANVAS...') 
 923     location 
= 'contrib/glcanvas' 
 925     swig_sources 
= run_swig(['glcanvas.i'], location
, GENDIR
, PKGDIR
, 
 926                             USE_SWIG
, swig_force
, swig_args
, swig_deps
) 
 929     if os
.name 
== 'posix': 
 930         gl_config 
= os
.popen(WX_CONFIG 
+ ' --gl-libs', 'r').read()[:-1] 
 931         gl_lflags 
= gl_config
.split() + lflags
 
 934         gl_libs 
= libs 
+ ['opengl32', 'glu32'] + makeLibName('gl') 
 937     ext 
= Extension('_glcanvas', 
 940                     include_dirs 
= includes
, 
 941                     define_macros 
= defines
, 
 943                     library_dirs 
= libdirs
, 
 946                     extra_compile_args 
= cflags
, 
 947                     extra_link_args 
= gl_lflags
, 
 950     wxpExtensions
.append(ext
) 
 953 #---------------------------------------------------------------------- 
 954 # Define the OGL extension module 
 955 #---------------------------------------------------------------------- 
 958     msg('Preparing OGL...') 
 959     location 
= 'contrib/ogl' 
 961     swig_sources 
= run_swig(['ogl.i'], location
, GENDIR
, PKGDIR
, 
 962                             USE_SWIG
, swig_force
, swig_args
, swig_deps 
+ 
 963                             [ '%s/_oglbasic.i' % location
, 
 964                               '%s/_oglshapes.i' % location
, 
 965                               '%s/_oglshapes2.i' % location
, 
 966                               '%s/_oglcanvas.i' % location
, 
 967                               '%s/_ogldefs.i' % location
, 
 970     ext 
= Extension('_ogl', 
 973                     include_dirs 
=  includes 
+ [ location 
], 
 974                     define_macros 
= defines 
+ [('wxUSE_DEPRECATED', '0')], 
 976                     library_dirs 
= libdirs
, 
 977                     libraries 
= libs 
+ makeLibName('ogl'), 
 979                     extra_compile_args 
= cflags
, 
 980                     extra_link_args 
= lflags
, 
 983     wxpExtensions
.append(ext
) 
 987 #---------------------------------------------------------------------- 
 988 # Define the STC extension module 
 989 #---------------------------------------------------------------------- 
 992     msg('Preparing STC...') 
 993     location 
= 'contrib/stc' 
 995         STC_H 
= opj(WXDIR
, 'contrib', 'include/wx/stc') 
 997         STC_H 
= opj(WXPREFIX
, 'include/wx/stc') 
 999 ## NOTE: need to add this to the stc.bkl... 
1001 ##         # Check if gen_iface needs to be run for the wxSTC sources 
1002 ##         if (newer(opj(CTRB_SRC, 'stc/stc.h.in'),     opj(CTRB_INC, 'stc/stc.h'  )) or 
1003 ##             newer(opj(CTRB_SRC, 'stc/stc.cpp.in'),   opj(CTRB_SRC, 'stc/stc.cpp')) or 
1004 ##             newer(opj(CTRB_SRC, 'stc/gen_iface.py'), opj(CTRB_SRC, 'stc/stc.cpp'))): 
1006 ##             msg('Running gen_iface.py, regenerating stc.h and stc.cpp...') 
1007 ##             cwd = os.getcwd() 
1008 ##             os.chdir(opj(CTRB_SRC, 'stc')) 
1009 ##             sys.path.insert(0, os.curdir) 
1011 ##             gen_iface.main([]) 
1015     swig_sources 
= run_swig(['stc.i'], location
, '', PKGDIR
, 
1016                             USE_SWIG
, swig_force
, 
1017                             swig_args 
+ ['-I'+STC_H
, '-I'+location
], 
1018                             [opj(STC_H
, 'stc.h')] + swig_deps
) 
1020     ext 
= Extension('_stc', 
1023                     include_dirs 
= includes
, 
1024                     define_macros 
= defines
, 
1026                     library_dirs 
= libdirs
, 
1027                     libraries 
= libs 
+ makeLibName('stc'), 
1029                     extra_compile_args 
= cflags
, 
1030                     extra_link_args 
= lflags
, 
1033     wxpExtensions
.append(ext
) 
1037 #---------------------------------------------------------------------- 
1038 # Define the IEWIN extension module (experimental) 
1039 #---------------------------------------------------------------------- 
1042     msg('Preparing IEWIN...') 
1043     location 
= 'contrib/iewin' 
1045     swig_files 
= ['iewin.i', ] 
1047     swig_sources 
= run_swig(swig_files
, location
, '', PKGDIR
, 
1048                             USE_SWIG
, swig_force
, swig_args
, swig_deps
) 
1051     ext 
= Extension('iewinc', ['%s/IEHtmlWin.cpp' % location
, 
1052                                '%s/wxactivex.cpp' % location
, 
1055                     include_dirs 
=  includes
, 
1056                     define_macros 
= defines
, 
1058                     library_dirs 
= libdirs
, 
1061                     extra_compile_args 
= cflags
, 
1062                     extra_link_args 
= lflags
, 
1065     wxpExtensions
.append(ext
) 
1068 #---------------------------------------------------------------------- 
1069 # Define the XRC extension module 
1070 #---------------------------------------------------------------------- 
1073     msg('Preparing XRC...') 
1074     location 
= 'contrib/xrc' 
1076     swig_sources 
= run_swig(['xrc.i'], location
, '', PKGDIR
, 
1077                             USE_SWIG
, swig_force
, swig_args
, swig_deps 
+ 
1078                             [ '%s/_xrc_rename.i' % location
, 
1079                               '%s/_xrc_ex.py' % location
, 
1080                               '%s/_xmlres.i' % location
, 
1081                               '%s/_xmlsub.i' % location
, 
1082                               '%s/_xml.i' % location
, 
1083                               '%s/_xmlhandler.i' % location
, 
1086     ext 
= Extension('_xrc', 
1089                     include_dirs 
=  includes
, 
1090                     define_macros 
= defines
, 
1092                     library_dirs 
= libdirs
, 
1093                     libraries 
= libs 
+ makeLibName('xrc'), 
1095                     extra_compile_args 
= cflags
, 
1096                     extra_link_args 
= lflags
, 
1099     wxpExtensions
.append(ext
) 
1103 #---------------------------------------------------------------------- 
1104 # Define the GIZMOS  extension module 
1105 #---------------------------------------------------------------------- 
1108     msg('Preparing GIZMOS...') 
1109     location 
= 'contrib/gizmos' 
1111     swig_sources 
= run_swig(['gizmos.i'], location
, GENDIR
, PKGDIR
, 
1112                             USE_SWIG
, swig_force
, swig_args
, swig_deps
) 
1114     ext 
= Extension('_gizmos', 
1115                     [ '%s/treelistctrl.cpp' % location 
] + swig_sources
, 
1117                     include_dirs 
=  includes 
+ [ location 
], 
1118                     define_macros 
= defines
, 
1120                     library_dirs 
= libdirs
, 
1121                     libraries 
= libs 
+ makeLibName('gizmos'), 
1123                     extra_compile_args 
= cflags
, 
1124                     extra_link_args 
= lflags
, 
1127     wxpExtensions
.append(ext
) 
1131 #---------------------------------------------------------------------- 
1132 # Define the DLLWIDGET  extension module 
1133 #---------------------------------------------------------------------- 
1136     msg('Preparing DLLWIDGET...') 
1137     location 
= 'contrib/dllwidget' 
1138     swig_files 
= ['dllwidget_.i'] 
1140     swig_sources 
= run_swig(swig_files
, location
, '', PKGDIR
, 
1141                             USE_SWIG
, swig_force
, swig_args
, swig_deps
) 
1143     # copy a contrib project specific py module to the main package dir 
1144     copy_file(opj(location
, 'dllwidget.py'), PKGDIR
, update
=1, verbose
=0) 
1146     ext 
= Extension('dllwidget_c', [ 
1147                                 '%s/dllwidget.cpp' % location
, 
1150                     include_dirs 
=  includes
, 
1151                     define_macros 
= defines
, 
1153                     library_dirs 
= libdirs
, 
1156                     extra_compile_args 
= cflags
, 
1157                     extra_link_args 
= lflags
, 
1160     wxpExtensions
.append(ext
) 
1165 #---------------------------------------------------------------------- 
1167 #---------------------------------------------------------------------- 
1172     SCRIPTS 
= [opj('scripts/helpviewer'), 
1173                opj('scripts/img2png'), 
1174                opj('scripts/img2xpm'), 
1175                opj('scripts/img2py'), 
1176                opj('scripts/xrced'), 
1177                opj('scripts/pyshell'), 
1178                opj('scripts/pycrust'), 
1179                opj('scripts/pywrap'), 
1180                opj('scripts/pywrap'), 
1181                opj('scripts/pyalacarte'), 
1182                opj('scripts/pyalamode'), 
1186 DATA_FILES 
+= find_data_files('wxPython/tools/XRCed', '*.txt', '*.xrc') 
1187 DATA_FILES 
+= find_data_files('wxPython/py', '*.txt', '*.ico', '*.css', '*.html') 
1188 DATA_FILES 
+= find_data_files('wx', '*.txt', '*.css', '*.html') 
1191 #---------------------------------------------------------------------- 
1192 # Do the Setup/Build/Install/Whatever 
1193 #---------------------------------------------------------------------- 
1195 if __name__ 
== "__main__": 
1197         setup(name             
= 'wxPython', 
1199               description      
= DESCRIPTION
, 
1200               long_description 
= LONG_DESCRIPTION
, 
1202               author_email     
= AUTHOR_EMAIL
, 
1204               download_url     
= DOWNLOAD_URL
, 
1206               platforms        
= PLATFORMS
, 
1207               classifiers      
= filter(None, CLASSIFIERS
.split("\n")), 
1208               keywords         
= KEYWORDS
, 
1210               packages 
= ['wxPython', 
1212                           'wxPython.lib.colourchooser', 
1213                           'wxPython.lib.editor', 
1214                           'wxPython.lib.mixins', 
1219                           'wx.lib.colourchooser', 
1228               ext_package 
= PKGDIR
, 
1229               ext_modules 
= wxpExtensions
, 
1231               options 
= { 'build' : { 'build_base' : BUILD_BASE }
}, 
1235               cmdclass 
= { 'install_data': smart_install_data}
, 
1236               data_files 
= DATA_FILES
, 
1241 #---------------------------------------------------------------------- 
1242 #----------------------------------------------------------------------