2 #---------------------------------------------------------------------- 
   4 import sys
, os
, glob
, fnmatch
 
   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        
= "p1"   # 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 LICENSE          
= "wxWindows (LGPL derivative)" 
  27 LONG_DESCRIPTION 
= """\ 
  28 wxPython is a GUI toolkit for Python that is a wrapper around the 
  29 wxWindows C++ GUI library.  wxPython provides a large variety of 
  30 window types and controls, all implemented with a native look and 
  31 feel (by using the native widgets) on the platforms it is supported 
  36 # Config values below this point can be reset on the setup.py command line. 
  38 BUILD_GLCANVAS 
= 1 # If true, build the contrib/glcanvas extension module 
  39 BUILD_OGL 
= 1      # If true, build the contrib/ogl extension module 
  40 BUILD_STC 
= 1      # If true, build the contrib/stc extension module 
  41 BUILD_XRC 
= 1      # XML based resource system 
  42 BUILD_GIZMOS 
= 1   # Build a module for the gizmos contrib library 
  43 BUILD_DLLWIDGET 
= 0# Build a module that enables unknown wx widgets 
  44                    # to be loaded from a DLL and to be used from Python. 
  46                    # Internet Explorer wrapper (experimental) 
  47 BUILD_IEWIN 
= (os
.name 
== 'nt') 
  50 CORE_ONLY 
= 0      # if true, don't build any of the above 
  52 PREP_ONLY 
= 0      # Only run the prepatory steps, not the actual build. 
  54 USE_SWIG 
= 0       # Should we actually execute SWIG, or just use the 
  55                    # files already in the distribution? 
  57 UNICODE 
= 0        # This will pass the 'wxUSE_UNICODE' flag to SWIG and 
  58                    # will ensure that the right headers are found and the 
  59                    # right libs are linked. 
  61 IN_CVS_TREE 
= 1    # Set to true if building in a full wxWindows CVS 
  62                    # tree, or the new style of a full wxPythonSrc tarball. 
  63                    # wxPython used to be distributed as a separate source 
  64                    # tarball without the wxWindows but with a copy of the 
  65                    # needed contrib code.  That's no longer the case and so 
  66                    # this setting is now defaulting to true.  Eventually it 
  67                    # should be removed entirly. 
  69 UNDEF_NDEBUG 
= 1   # Python 2.2 on Unix/Linux by default defines NDEBUG, 
  70                    # and distutils will pick this up and use it on the 
  71                    # compile command-line for the extensions.  This could 
  72                    # conflict with how wxWindows was built.  If NDEBUG is 
  73                    # set then wxWindows' __WXDEBUG__ setting will be turned 
  74                    # off.  If wxWindows was actually built with it turned 
  75                    # on then you end up with mismatched class structures, 
  76                    # and wxPython will crash. 
  78 NO_SCRIPTS 
= 0     # Don't install the tool scripts 
  80 WX_CONFIG 
= None   # Usually you shouldn't need to touch this, but you can set 
  81                    # it to pass an alternate version of wx-config or alternate 
  82                    # flags, eg. as required by the .deb in-tree build.  By 
  83                    # default a wx-config command will be assembled based on 
  84                    # version, port, etc. and it will be looked for on the 
  87 WXPORT 
= 'gtk'     # On Linux/Unix there are several ports of wxWindows available. 
  88                    # Setting this value lets you select which will be used for 
  89                    # the wxPython build.  Possibilites are 'gtk', 'gtk2' and 
  90                    # 'x11'.  Curently only gtk and gtk2 works. 
  92 BUILD_BASE 
= "build"       # Directory to use for temporary build files. 
  96 # Some MSW build settings 
  98 FINAL 
= 0          # Mirrors use of same flag in wx makefiles, 
  99                    # (0 or 1 only) should probably find a way to 
 102 HYBRID 
= 1         # If set and not debug or FINAL, then build a 
 103                    # hybrid extension that can be used by the 
 104                    # non-debug version of python, but contains 
 105                    # debugging symbols for wxWindows and wxPython. 
 106                    # wxWindows must have been built with /MD, not /MDd 
 107                    # (using FINAL=hybrid will do it.) 
 109 WXDLLVER 
= '25'    # Version part of wxWindows DLL name 
 112 #---------------------------------------------------------------------- 
 115     if __name__ 
== "__main__": 
 120     path 
= apply(os
.path
.join
, args
) 
 121     return os
.path
.normpath(path
) 
 136 #---------------------------------------------------------------------- 
 138 #---------------------------------------------------------------------- 
 144 force 
= '--force' in sys
.argv 
or '-f' in sys
.argv
 
 145 debug 
= '--debug' in sys
.argv 
or '-g' in sys
.argv
 
 147 # change the PORT default for wxMac 
 148 if sys
.platform
[:6] == "darwin": 
 151 # and do the same for wxMSW, just for consistency 
 156 #---------------------------------------------------------------------- 
 157 # Check for build flags on the command line 
 158 #---------------------------------------------------------------------- 
 160 # Boolean (int) flags 
 161 for flag 
in ['BUILD_GLCANVAS', 'BUILD_OGL', 'BUILD_STC', 'BUILD_XRC', 
 162              'BUILD_GIZMOS', 'BUILD_DLLWIDGET', 'BUILD_IEWIN', 
 163              'CORE_ONLY', 'PREP_ONLY', 'USE_SWIG', 'IN_CVS_TREE', 'UNICODE', 
 164              'UNDEF_NDEBUG', 'NO_SCRIPTS', 
 165              'FINAL', 'HYBRID', ]: 
 166     for x 
in range(len(sys
.argv
)): 
 167         if sys
.argv
[x
].find(flag
) == 0: 
 168             pos 
= sys
.argv
[x
].find('=') + 1 
 170                 vars()[flag
] = eval(sys
.argv
[x
][pos
:]) 
 174 for option 
in ['WX_CONFIG', 'WXDLLVER', 'BUILD_BASE', 'WXPORT']: 
 175     for x 
in range(len(sys
.argv
)): 
 176         if sys
.argv
[x
].find(option
) == 0: 
 177             pos 
= sys
.argv
[x
].find('=') + 1 
 179                 vars()[option
] = sys
.argv
[x
][pos
:] 
 182 sys
.argv 
= filter(None, sys
.argv
) 
 185 #---------------------------------------------------------------------- 
 186 # some helper functions 
 187 #---------------------------------------------------------------------- 
 189 def Verify_WX_CONFIG(): 
 190     """ Called below for the builds that need wx-config, 
 191         if WX_CONFIG is not set then tries to select the specific 
 192         wx*-config script based on build options.  If not found 
 193         then it defaults to 'wx-config'. 
 195     # if WX_CONFIG hasn't been set to an explicit value then construct one. 
 197     if WX_CONFIG 
is None: 
 198         if debug
:             # TODO: Fix this.  wxPython's --debug shouldn't be tied to wxWindows... 
 206         ver2 
= "%s.%s" % (VER_MAJOR
, VER_MINOR
) 
 207         WX_CONFIG 
= 'wx%s%s%s-%s-config' % (WXPORT
, uf
, df
, ver2
) 
 209         searchpath 
= os
.environ
["PATH"] 
 210         for p 
in searchpath
.split(':'): 
 211             fp 
= os
.path
.join(p
, WX_CONFIG
) 
 212             if os
.path
.exists(fp
) and os
.access(fp
, os
.X_OK
): 
 214                 msg("Found wx-config: " + fp
) 
 218             msg("WX_CONFIG not specified and %s not found on $PATH " 
 219                   "defaulting to \"wx-config\"" % WX_CONFIG
) 
 220             WX_CONFIG 
= 'wx-config' 
 224 def run_swig(files
, dir, gendir
, package
, USE_SWIG
, force
, swig_args
, swig_deps
=[]): 
 225     """Run SWIG the way I want it done""" 
 226     if not os
.path
.exists(os
.path
.join(dir, gendir
)): 
 227         os
.mkdir(os
.path
.join(dir, gendir
)) 
 232         basefile 
= os
.path
.splitext(file)[0] 
 233         i_file   
= os
.path
.join(dir, file) 
 234         py_file  
= os
.path
.join(dir, gendir
, basefile
+'.py') 
 235         cpp_file 
= os
.path
.join(dir, gendir
, basefile
+'.cpp') 
 237         sources
.append(cpp_file
) 
 240             for dep 
in swig_deps
: 
 241                 if newer(dep
, py_file
) or newer(dep
, cpp_file
): 
 245             if force 
or newer(i_file
, py_file
) or newer(i_file
, cpp_file
): 
 246                 # we need forward slashes here even on win32 
 247                 cpp_file 
= '/'.join(cpp_file
.split('\\')) 
 248                 i_file 
= '/'.join(i_file
.split('\\')) 
 250                 cmd 
= ['./wxSWIG/wxswig'] + swig_args 
+ ['-I'+dir, '-c', '-o', cpp_file
, i_file
] 
 254         # copy the generated python file to the package directory 
 255         copy_file(py_file
, package
, update
=not force
, verbose
=0) 
 261 def contrib_copy_tree(src
, dest
, verbose
=0): 
 262     """Update local copies of wxWindows contrib files""" 
 263     from distutils
.dir_util 
import mkpath
, copy_tree
 
 265     mkpath(dest
, verbose
=verbose
) 
 266     copy_tree(src
, dest
, update
=1, verbose
=verbose
) 
 270 class smart_install_data(install_data
): 
 272         #need to change self.install_dir to the actual library dir 
 273         install_cmd 
= self
.get_finalized_command('install') 
 274         self
.install_dir 
= getattr(install_cmd
, 'install_lib') 
 275         return install_data
.run(self
) 
 278 def build_locale_dir(destdir
, verbose
=1): 
 279     """Build a locale dir under the wxPython package for MSW""" 
 280     moFiles 
= glob
.glob(opj(WXDIR
, 'locale', '*.mo')) 
 282         lang 
= os
.path
.splitext(os
.path
.basename(src
))[0] 
 283         dest 
= opj(destdir
, lang
, 'LC_MESSAGES') 
 284         mkpath(dest
, verbose
=verbose
) 
 285         copy_file(src
, opj(dest
, 'wxstd.mo'), update
=1, verbose
=verbose
) 
 288 def build_locale_list(srcdir
): 
 289     # get a list of all files under the srcdir, to be used for install_data 
 290     def walk_helper(lst
, dirname
, files
): 
 292             filename 
= opj(dirname
, f
) 
 293             if not os
.path
.isdir(filename
): 
 294                 lst
.append( (dirname
, [filename
]) ) 
 296     os
.path
.walk(srcdir
, walk_helper
, file_list
) 
 300 def find_data_files(srcdir
, *wildcards
): 
 301     # get a list of all files under the srcdir matching wildcards, 
 302     # returned in a format to be used for install_data 
 304     def walk_helper(arg
, dirname
, files
): 
 309                 filename 
= opj(dirname
, f
) 
 310                 if fnmatch
.fnmatch(filename
, wc
) and not os
.path
.isdir(filename
): 
 311                     names
.append(filename
) 
 313             lst
.append( (dirname
, names 
) ) 
 316     os
.path
.walk(srcdir
, walk_helper
, (file_list
, wildcards
)) 
 320 def makeLibName(name
): 
 321     if os
.name 
== 'posix': 
 322         libname 
= '%s_%s-%s' % (WXBASENAME
, name
, WXRELEASE
) 
 325         #raise NotImplementedError 
 331 def adjustCFLAGS(cflags
, defines
, includes
): 
 332     '''Extrace the raw -I, -D, and -U flags and put them into 
 333        defines and includes as needed.''' 
 337             includes
.append(flag
[2:]) 
 338         elif flag
[:2] == '-D': 
 340             if flag
.find('=') == -1: 
 341                 defines
.append( (flag
, None) ) 
 343                 defines
.append( tuple(flag
.split('=')) ) 
 344         elif flag
[:2] == '-U': 
 345             defines
.append( (flag
[2:], ) ) 
 347             newCFLAGS
.append(flag
) 
 352 def adjustLFLAGS(lfags
, libdirs
, libs
): 
 353     '''Extrace the -L and -l flags and put them in libdirs and libs as needed''' 
 357             libdirs
.append(flag
[2:]) 
 358         elif flag
[:2] == '-l': 
 359             libs
.append(flag
[2:]) 
 361             newLFLAGS
.append(flag
) 
 365 #---------------------------------------------------------------------- 
 384 if UNICODE 
and WXPORT 
not in ['msw', 'gtk2']: 
 385     raise SystemExit, "UNICODE mode not currently supported on this WXPORT: "+WXPORT
 
 388 #---------------------------------------------------------------------- 
 389 # Setup some platform specific stuff 
 390 #---------------------------------------------------------------------- 
 393     # Set compile flags and such for MSVC.  These values are derived 
 394     # from the wxWindows makefiles for MSVC, other compilers settings 
 395     # will probably vary... 
 396     if os
.environ
.has_key('WXWIN'): 
 397         WXDIR 
= os
.environ
['WXWIN'] 
 399         msg("WARNING: WXWIN not set in environment.") 
 400         WXDIR 
= '..'  # assumes in CVS tree 
 405                 opj(WXDIR
, 'lib', 'vc_msw' + libFlag() + 'dll'), 
 406                 opj(WXDIR
, 'include'), 
 407                 opj(WXDIR
, 'contrib', 'include'), 
 410     defines 
= [ ('WIN32', None), 
 412 ##                 ('__WIN32__', None), 
 413 ##                 ('__WINDOWS__', None), 
 414 ##                 ('WINVER', '0x0400'), 
 415 ##                 ('__WIN95__', None), 
 421                 ('SWIG_GLOBAL', None), 
 422                 ('HAVE_CONFIG_H', None), 
 423                 ('WXP_USE_THREAD', '1'), 
 427         defines
.append( ('NDEBUG',) )  # using a 1-tuple makes it do an undef 
 430     if not FINAL 
or HYBRID
: 
 431         defines
.append( ('__WXDEBUG__', None) ) 
 433     libdirs 
= [ opj(WXDIR
, 'lib', 'vc_msw' + libFlag() + 'dll') ] 
 434     wxdll 
= 'wxmsw' + WXDLLVER 
+ libFlag() 
 437     libs 
= libs 
+ ['kernel32', 'user32', 'gdi32', 'comdlg32', 
 438             'winspool', 'winmm', 'shell32', 'oldnames', 'comctl32', 
 439             'odbc32', 'ole32', 'oleaut32', 'uuid', 'rpcrt4', 
 440             'advapi32', 'wsock32'] 
 444              # '/GX-'  # workaround for internal compiler error in MSVC on some machines 
 448     # Other MSVC flags... 
 449     # Too bad I don't remember why I was playing with these, can they be removed? 
 451         pass #cflags = cflags + ['/O1'] 
 453         pass #cflags = cflags + ['/Ox'] 
 455         pass # cflags = cflags + ['/Od', '/Z7'] 
 456              # lflags = ['/DEBUG', ] 
 460 #---------------------------------------------------------------------- 
 462 elif os
.name 
== 'posix': 
 463     WXDIR 
= '..'              # assumes IN_CVS_TREE 
 465     defines 
= [('SWIG_GLOBAL', None), 
 466                ('HAVE_CONFIG_H', None), 
 467                ('WXP_USE_THREAD', '1'), 
 470         defines
.append( ('NDEBUG',) )  # using a 1-tuple makes it do an undef 
 477     cflags 
= os
.popen(WX_CONFIG 
+ ' --cxxflags', 'r').read()[:-1] 
 478     cflags 
= cflags
.split() 
 483     lflags 
= os
.popen(WX_CONFIG 
+ ' --libs', 'r').read()[:-1] 
 484     lflags 
= lflags
.split() 
 486     WXBASENAME 
= os
.popen(WX_CONFIG 
+ ' --basename').read()[:-1] 
 487     WXRELEASE  
= os
.popen(WX_CONFIG 
+ ' --release').read()[:-1] 
 488     WXPREFIX   
= os
.popen(WX_CONFIG 
+ ' --prefix').read()[:-1] 
 491     if sys
.platform
[:6] == "darwin": 
 492         # Flags and such for a Darwin (Max OS X) build of Python 
 500         # Set flags for other Unix type platforms 
 505             portcfg 
= os
.popen('gtk-config --cflags', 'r').read()[:-1] 
 506         elif WXPORT 
== 'gtk2': 
 508             GENDIR 
= 'gtk' # no code differences so use the same generated sources 
 509             portcfg 
= os
.popen('pkg-config gtk+-2.0 --cflags', 'r').read()[:-1] 
 510             BUILD_BASE 
= BUILD_BASE 
+ '-' + WXPORT
 
 511         elif WXPORT 
== 'x11': 
 514             BUILD_BASE 
= BUILD_BASE 
+ '-' + WXPORT
 
 516             raise SystemExit, "Unknown WXPORT value: " + WXPORT
 
 518         cflags 
+= portcfg
.split() 
 520         # Some distros (e.g. Mandrake) put libGLU in /usr/X11R6/lib, but 
 521         # wx-config doesn't output that for some reason.  For now, just 
 522         # add it unconditionally but we should really check if the lib is 
 523         # really found there or wx-config should be fixed. 
 524         libdirs
.append("/usr/X11R6/lib") 
 527     # Move the various -I, -D, etc. flags we got from the *config scripts 
 528     # into the distutils lists. 
 529     cflags 
= adjustCFLAGS(cflags
, defines
, includes
) 
 530     lflags 
= adjustLFLAGS(lflags
, libdirs
, libs
) 
 533 #---------------------------------------------------------------------- 
 535     raise 'Sorry Charlie, platform not supported...' 
 538 #---------------------------------------------------------------------- 
 539 # post platform setup checks and tweaks, create the full version string 
 540 #---------------------------------------------------------------------- 
 543     BUILD_BASE 
= BUILD_BASE 
+ '.unicode' 
 547 VERSION 
= "%s.%s.%s.%s%s" % (VER_MAJOR
, VER_MINOR
, VER_RELEASE
, 
 548                              VER_SUBREL
, VER_FLAGS
) 
 550 #---------------------------------------------------------------------- 
 551 # Update the version file 
 552 #---------------------------------------------------------------------- 
 554 # Unconditionally updated since the version string can change based 
 555 # on the UNICODE flag 
 556 open('src/__version__.py', 'w').write("""\ 
 557 # This file was generated by setup.py... 
 559 wxVERSION_STRING  = '%(VERSION)s' 
 560 wxMAJOR_VERSION   = %(VER_MAJOR)s 
 561 wxMINOR_VERSION   = %(VER_MINOR)s 
 562 wxRELEASE_VERSION = %(VER_RELEASE)s 
 563 wxSUBREL_VERSION  = %(VER_SUBREL)s 
 565 wxVERSION = (wxMAJOR_VERSION, wxMINOR_VERSION, wxRELEASE_VERSION, 
 566              wxSUBREL_VERSION, '%(VER_FLAGS)s') 
 568 wxRELEASE_NUMBER = wxRELEASE_VERSION  # for compatibility 
 574 #---------------------------------------------------------------------- 
 576 #---------------------------------------------------------------------- 
 579 swig_args 
= ['-c++', '-shadow', '-python', '-keyword', 
 582              #'-docstring', '-Sbefore', 
 583              '-I./src', '-D'+WXPLAT
, 
 586     swig_args
.append('-DwxUSE_UNICODE') 
 588 swig_deps 
= ['src/my_typemaps.i'] 
 591 #---------------------------------------------------------------------- 
 592 # Define the CORE extension module 
 593 #---------------------------------------------------------------------- 
 595 msg('Preparing CORE...') 
 596 swig_files 
= [ 'wx.i', 'windows.i', 'windows2.i', 'windows3.i', 'events.i', 
 597                'misc.i', 'misc2.i', 'gdi.i', 'mdi.i', 'controls.i', 
 598                'controls2.i', 'cmndlgs.i', 'stattool.i', 'frames.i', 'image.i', 
 599                'printfw.i', 'sizers.i', 'clip_dnd.i', 
 600                'filesys.i', 'streams.i', 'utils.i', 'fonts.i' 
 603 swig_sources 
= run_swig(swig_files
, 'src', GENDIR
, PKGDIR
, 
 604                         USE_SWIG
, swig_force
, swig_args
, swig_deps
) 
 606 copy_file('src/__init__.py', PKGDIR
, update
=1, verbose
=0) 
 607 copy_file('src/__version__.py', PKGDIR
, update
=1, verbose
=0) 
 610 if IN_CVS_TREE
:   # update the license files 
 612     for file in ['preamble.txt', 'licence.txt', 'licendoc.txt', 'lgpl.txt']: 
 613         copy_file(opj(WXDIR
, 'docs', file), opj('licence',file), update
=1, verbose
=0) 
 617     build_locale_dir(opj(PKGDIR
, 'locale')) 
 618     DATA_FILES 
+= build_locale_list(opj(PKGDIR
, 'locale')) 
 622     rc_file 
= ['src/wxc.rc'] 
 627 ext 
= Extension('wxc', ['src/helpers.cpp', 
 630                         ] + rc_file 
+ swig_sources
, 
 632                 include_dirs 
= includes
, 
 633                 define_macros 
= defines
, 
 635                 library_dirs 
= libdirs
, 
 638                 extra_compile_args 
= cflags
, 
 639                 extra_link_args 
= lflags
, 
 641 wxpExtensions
.append(ext
) 
 644 # Extension for the grid module 
 645 swig_sources 
= run_swig(['grid.i'], 'src', GENDIR
, PKGDIR
, 
 646                         USE_SWIG
, swig_force
, swig_args
, swig_deps
) 
 647 ext 
= Extension('gridc', swig_sources
, 
 648                 include_dirs 
=  includes
, 
 649                 define_macros 
= defines
, 
 650                 library_dirs 
= libdirs
, 
 652                 extra_compile_args 
= cflags
, 
 653                 extra_link_args 
= lflags
, 
 655 wxpExtensions
.append(ext
) 
 658 # Extension for the html modules 
 659 swig_sources 
= run_swig(['html.i', 'htmlhelp.i'], 'src', GENDIR
, PKGDIR
, 
 660                         USE_SWIG
, swig_force
, swig_args
, swig_deps
) 
 661 ext 
= Extension('htmlc', swig_sources
, 
 662                 include_dirs 
=  includes
, 
 663                 define_macros 
= defines
, 
 664                 library_dirs 
= libdirs
, 
 666                 extra_compile_args 
= cflags
, 
 667                 extra_link_args 
= lflags
, 
 669 wxpExtensions
.append(ext
) 
 672 # Extension for the calendar module 
 673 swig_sources 
= run_swig(['calendar.i'], 'src', GENDIR
, PKGDIR
, 
 674                         USE_SWIG
, swig_force
, swig_args
, swig_deps
) 
 675 ext 
= Extension('calendarc', swig_sources
, 
 676                 include_dirs 
=  includes
, 
 677                 define_macros 
= defines
, 
 678                 library_dirs 
= libdirs
, 
 680                 extra_compile_args 
= cflags
, 
 681                 extra_link_args 
= lflags
, 
 683 wxpExtensions
.append(ext
) 
 686 # Extension for the help module 
 687 swig_sources 
= run_swig(['help.i'], 'src', GENDIR
, PKGDIR
, 
 688                         USE_SWIG
, swig_force
, swig_args
, swig_deps
) 
 689 ext 
= Extension('helpc', swig_sources
, 
 690                 include_dirs 
=  includes
, 
 691                 define_macros 
= defines
, 
 692                 library_dirs 
= libdirs
, 
 694                 extra_compile_args 
= cflags
, 
 695                 extra_link_args 
= lflags
, 
 697 wxpExtensions
.append(ext
) 
 700 # Extension for the wizard module 
 701 swig_sources 
= run_swig(['wizard.i'], 'src', GENDIR
, PKGDIR
, 
 702                         USE_SWIG
, swig_force
, swig_args
, swig_deps
) 
 703 ext 
= Extension('wizardc', swig_sources
, 
 704                 include_dirs 
=  includes
, 
 705                 define_macros 
= defines
, 
 706                 library_dirs 
= libdirs
, 
 708                 extra_compile_args 
= cflags
, 
 709                 extra_link_args 
= lflags
, 
 711 wxpExtensions
.append(ext
) 
 714 #---------------------------------------------------------------------- 
 715 # Define the GLCanvas extension module 
 716 #---------------------------------------------------------------------- 
 719     msg('Preparing GLCANVAS...') 
 720     location 
= 'contrib/glcanvas' 
 721     swig_files 
= ['glcanvas.i'] 
 724     swig_sources 
= run_swig(swig_files
, location
, GENDIR
, PKGDIR
, 
 725                             USE_SWIG
, swig_force
, swig_args
, swig_deps
) 
 728     if os
.name 
== 'posix': 
 729         gl_config 
= os
.popen(WX_CONFIG 
+ ' --gl-libs', 'r').read()[:-1] 
 730         gl_lflags 
= gl_config
.split() + lflags
 
 733         other_sources 
= [opj(location
, 'msw/myglcanvas.cpp')] 
 734         gl_libs 
= libs 
+ ['opengl32', 'glu32'] 
 737     ext 
= Extension('glcanvasc', 
 738                     swig_sources 
+ other_sources
, 
 740                     include_dirs 
= includes
, 
 741                     define_macros 
= defines
, 
 743                     library_dirs 
= libdirs
, 
 746                     extra_compile_args 
= cflags
, 
 747                     extra_link_args 
= gl_lflags
, 
 750     wxpExtensions
.append(ext
) 
 753 #---------------------------------------------------------------------- 
 754 # Define the OGL extension module 
 755 #---------------------------------------------------------------------- 
 758     msg('Preparing OGL...') 
 759     location 
= 'contrib/ogl' 
 761     swig_files 
= ['ogl.i', 'oglbasic.i', 'oglshapes.i', 'oglshapes2.i', 
 764     swig_sources 
= run_swig(swig_files
, location
, '', PKGDIR
, 
 765                             USE_SWIG
, swig_force
, swig_args
, swig_deps
) 
 767     ext 
= Extension('oglc', 
 770                     include_dirs 
=  includes
, 
 771                     define_macros 
= defines 
+ [('wxUSE_DEPRECATED', '0')], 
 773                     library_dirs 
= libdirs
, 
 774                     libraries 
= libs 
+ makeLibName('ogl'), 
 776                     extra_compile_args 
= cflags
, 
 777                     extra_link_args 
= lflags
, 
 780     wxpExtensions
.append(ext
) 
 784 #---------------------------------------------------------------------- 
 785 # Define the STC extension module 
 786 #---------------------------------------------------------------------- 
 789     msg('Preparing STC...') 
 790     location 
= 'contrib/stc' 
 792         STC_H 
= opj(WXDIR
, 'contrib', 'include/wx/stc') 
 794         STC_H 
= opj(WXPREFIX
, 'include/wx/stc') 
 796 ## NOTE: need to add this to the stc.bkl... 
 798 ##         # Check if gen_iface needs to be run for the wxSTC sources 
 799 ##         if (newer(opj(CTRB_SRC, 'stc/stc.h.in'),     opj(CTRB_INC, 'stc/stc.h'  )) or 
 800 ##             newer(opj(CTRB_SRC, 'stc/stc.cpp.in'),   opj(CTRB_SRC, 'stc/stc.cpp')) or 
 801 ##             newer(opj(CTRB_SRC, 'stc/gen_iface.py'), opj(CTRB_SRC, 'stc/stc.cpp'))): 
 803 ##             msg('Running gen_iface.py, regenerating stc.h and stc.cpp...') 
 805 ##             os.chdir(opj(CTRB_SRC, 'stc')) 
 806 ##             sys.path.insert(0, os.curdir) 
 808 ##             gen_iface.main([]) 
 812     swig_files 
= ['stc_.i'] 
 813     swig_sources 
= run_swig(swig_files
, location
, GENDIR
, PKGDIR
, 
 814                             USE_SWIG
, swig_force
, 
 815                             swig_args 
+ ['-I'+STC_H
, '-I'+location
], 
 816                             [opj(STC_H
, 'stc.h')] + swig_deps
) 
 818     # copy a contrib project specific py module to the main package dir 
 819     copy_file(opj(location
, 'stc.py'), PKGDIR
, update
=1, verbose
=0) 
 821     ext 
= Extension('stc_c', 
 824                     include_dirs 
= includes
, 
 825                     define_macros 
= defines
, 
 827                     library_dirs 
= libdirs
, 
 828                     libraries 
= libs 
+ makeLibName('stc'), 
 830                     extra_compile_args 
= cflags
, 
 831                     extra_link_args 
= lflags
, 
 834     wxpExtensions
.append(ext
) 
 838 #---------------------------------------------------------------------- 
 839 # Define the IEWIN extension module (experimental) 
 840 #---------------------------------------------------------------------- 
 843     msg('Preparing IEWIN...') 
 844     location 
= 'contrib/iewin' 
 846     swig_files 
= ['iewin.i', ] 
 848     swig_sources 
= run_swig(swig_files
, location
, '', PKGDIR
, 
 849                             USE_SWIG
, swig_force
, swig_args
, swig_deps
) 
 852     ext 
= Extension('iewinc', ['%s/IEHtmlWin.cpp' % location
, 
 853                                '%s/wxactivex.cpp' % location
, 
 856                     include_dirs 
=  includes
, 
 857                     define_macros 
= defines
, 
 859                     library_dirs 
= libdirs
, 
 862                     extra_compile_args 
= cflags
, 
 863                     extra_link_args 
= lflags
, 
 866     wxpExtensions
.append(ext
) 
 869 #---------------------------------------------------------------------- 
 870 # Define the XRC extension module 
 871 #---------------------------------------------------------------------- 
 874     msg('Preparing XRC...') 
 875     location 
= 'contrib/xrc' 
 877     swig_files 
= ['xrc.i'] 
 878     swig_sources 
= run_swig(swig_files
, location
, '', PKGDIR
, 
 879                             USE_SWIG
, swig_force
, swig_args
, swig_deps
) 
 881     ext 
= Extension('xrcc', 
 884                     include_dirs 
=  includes
, 
 885                     define_macros 
= defines
, 
 887                     library_dirs 
= libdirs
, 
 888                     libraries 
= libs 
+ makeLibName('xrc'), 
 890                     extra_compile_args 
= cflags
, 
 891                     extra_link_args 
= lflags
, 
 894     wxpExtensions
.append(ext
) 
 898 #---------------------------------------------------------------------- 
 899 # Define the GIZMOS  extension module 
 900 #---------------------------------------------------------------------- 
 903     msg('Preparing GIZMOS...') 
 904     location 
= 'contrib/gizmos' 
 906     swig_files 
= ['gizmos.i'] 
 907     swig_sources 
= run_swig(swig_files
, location
, '', PKGDIR
, 
 908                             USE_SWIG
, swig_force
, swig_args
, swig_deps
) 
 910     ext 
= Extension('gizmosc', 
 911                     [ '%s/treelistctrl.cpp' % location 
] + swig_sources
, 
 913                     include_dirs 
=  includes
, 
 914                     define_macros 
= defines
, 
 916                     library_dirs 
= libdirs
, 
 917                     libraries 
= libs 
+ makeLibName('gizmos'), 
 919                     extra_compile_args 
= cflags
, 
 920                     extra_link_args 
= lflags
, 
 923     wxpExtensions
.append(ext
) 
 927 #---------------------------------------------------------------------- 
 928 # Define the DLLWIDGET  extension module 
 929 #---------------------------------------------------------------------- 
 932     msg('Preparing DLLWIDGET...') 
 933     location 
= 'contrib/dllwidget' 
 934     swig_files 
= ['dllwidget_.i'] 
 936     swig_sources 
= run_swig(swig_files
, location
, '', PKGDIR
, 
 937                             USE_SWIG
, swig_force
, swig_args
, swig_deps
) 
 939     # copy a contrib project specific py module to the main package dir 
 940     copy_file(opj(location
, 'dllwidget.py'), PKGDIR
, update
=1, verbose
=0) 
 942     ext 
= Extension('dllwidget_c', [ 
 943                                 '%s/dllwidget.cpp' % location
, 
 946                     include_dirs 
=  includes
, 
 947                     define_macros 
= defines
, 
 949                     library_dirs 
= libdirs
, 
 952                     extra_compile_args 
= cflags
, 
 953                     extra_link_args 
= lflags
, 
 956     wxpExtensions
.append(ext
) 
 961 #---------------------------------------------------------------------- 
 963 #---------------------------------------------------------------------- 
 968     SCRIPTS 
= [opj('scripts/helpviewer'), 
 969                opj('scripts/img2png'), 
 970                opj('scripts/img2xpm'), 
 971                opj('scripts/img2py'), 
 972                opj('scripts/xrced'), 
 973                opj('scripts/pyshell'), 
 974                opj('scripts/pycrust'), 
 975                opj('scripts/pywrap'), 
 976                opj('scripts/pywrap'), 
 977                opj('scripts/pyalacarte'), 
 978                opj('scripts/pyalamode'), 
 982 DATA_FILES 
+= find_data_files('wxPython/tools/XRCed', '*.txt', '*.xrc') 
 983 DATA_FILES 
+= find_data_files('wxPython/py', '*.txt', '*.ico', '*.css', '*.html') 
 984 DATA_FILES 
+= find_data_files('wx', '*.txt', '*.css', '*.html') 
 987 #---------------------------------------------------------------------- 
 988 # Do the Setup/Build/Install/Whatever 
 989 #---------------------------------------------------------------------- 
 991 if __name__ 
== "__main__": 
 995               description      
= DESCRIPTION
, 
 996               long_description 
= LONG_DESCRIPTION
, 
 998               author_email     
= AUTHOR_EMAIL
, 
1002               packages 
= ['wxPython', 
1004                           'wxPython.lib.colourchooser', 
1005                           'wxPython.lib.editor', 
1006                           'wxPython.lib.mixins', 
1007                           'wxPython.lib.PyCrust', 
1011                           'wxPython.tools.XRCed', 
1015                           'wx.lib.colourchooser', 
1023               ext_package 
= PKGDIR
, 
1024               ext_modules 
= wxpExtensions
, 
1026               options 
= { 'build' : { 'build_base' : BUILD_BASE }
}, 
1030               cmdclass 
= { 'install_data': smart_install_data}
, 
1031               data_files 
= DATA_FILES
, 
1036 #---------------------------------------------------------------------- 
1037 #----------------------------------------------------------------------