]> git.saurik.com Git - wxWidgets.git/blame - wxPython/setup.py
Cure link error under wxGTK on Mac
[wxWidgets.git] / wxPython / setup.py
CommitLineData
c368d904
RD
1#!/usr/bin/env python
2#----------------------------------------------------------------------
3
b0640a71 4import sys, os, glob, fnmatch, tempfile
c368d904
RD
5from distutils.core import setup, Extension
6from distutils.file_util import copy_file
7from distutils.dir_util import mkpath
8from distutils.dep_util import newer
1e4a197e
RD
9from distutils.spawn import spawn
10from distutils.command.install_data import install_data
c368d904
RD
11
12#----------------------------------------------------------------------
13# flags and values that affect this script
14#----------------------------------------------------------------------
15
1fded56b
RD
16VER_MAJOR = 2 # The first three must match wxWindows
17VER_MINOR = 5
4326f7b7 18VER_RELEASE = 1
1fded56b 19VER_SUBREL = 0 # wxPython release num for x.y.z release of wxWindows
b0640a71 20VER_FLAGS = "p5" # release flags, such as prerelease num, unicode, etc.
1fded56b 21
c368d904
RD
22DESCRIPTION = "Cross platform GUI toolkit for Python"
23AUTHOR = "Robin Dunn"
b166c703 24AUTHOR_EMAIL = "Robin Dunn <robin@alldunn.com>"
c368d904 25URL = "http://wxPython.org/"
851d4ac7
RD
26DOWNLOAD_URL = "http://wxPython.org/download.php"
27LICENSE = "wxWindows Library License (LGPL derivative)"
28PLATFORMS = "WIN32,OSX,POSIX"
29KEYWORDS = "GUI,wx,wxWindows,cross-platform"
30
c368d904
RD
31LONG_DESCRIPTION = """\
32wxPython is a GUI toolkit for Python that is a wrapper around the
33wxWindows C++ GUI library. wxPython provides a large variety of
1b62f00d 34window types and controls, all implemented with a native look and
1e4a197e 35feel (by using the native widgets) on the platforms it is supported
c368d904
RD
36on.
37"""
38
851d4ac7
RD
39CLASSIFIERS = """\
40Development Status :: 6 - Mature
41Environment :: MacOS X :: Carbon
42Environment :: Win32 (MS Windows)
43Environment :: X11 Applications :: GTK
44Intended Audience :: Developers
45License :: OSI Approved
46Operating System :: MacOS :: MacOS X
47Operating System :: Microsoft :: Windows :: Windows 95/98/2000
48Operating System :: POSIX
49Programming Language :: Python
50Topic :: Software Development :: User Interfaces
51"""
52
53## License :: OSI Approved :: wxWindows Library Licence
54
c368d904 55
1e4a197e
RD
56# Config values below this point can be reset on the setup.py command line.
57
f221f8eb 58BUILD_GLCANVAS = 1 # If true, build the contrib/glcanvas extension module
c368d904
RD
59BUILD_OGL = 1 # If true, build the contrib/ogl extension module
60BUILD_STC = 1 # If true, build the contrib/stc extension module
d56cebe7 61BUILD_XRC = 1 # XML based resource system
ebf4302c 62BUILD_GIZMOS = 1 # Build a module for the gizmos contrib library
1e4a197e 63BUILD_DLLWIDGET = 0# Build a module that enables unknown wx widgets
37bd51c0 64 # to be loaded from a DLL and to be used from Python.
d56cebe7 65
c731eb47 66 # Internet Explorer wrapper (experimental)
d14a1e28 67BUILD_IEWIN = 0 #(os.name == 'nt')
78e8819c 68
1e4a197e 69
c368d904 70CORE_ONLY = 0 # if true, don't build any of the above
4a61305d 71
1e4a197e 72PREP_ONLY = 0 # Only run the prepatory steps, not the actual build.
c368d904
RD
73
74USE_SWIG = 0 # Should we actually execute SWIG, or just use the
75 # files already in the distribution?
76
d14a1e28
RD
77SWIG = "swig" # The swig executable to use.
78
79BUILD_RENAMERS = 1 # Should we build the renamer modules too?
80
a541c325
RD
81UNICODE = 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.
c8bc7bb8 84
5c8e1089
RD
85UNDEF_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.
93
2eb31f8b
RD
94NO_SCRIPTS = 0 # Don't install the tool scripts
95
1e4a197e
RD
96WX_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
101 # default $PATH.
102
103WXPORT = '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.
107
108BUILD_BASE = "build" # Directory to use for temporary build files.
2eb31f8b 109
c368d904 110
a541c325 111
c368d904
RD
112# Some MSW build settings
113
d440a0e7 114FINAL = 0 # Mirrors use of same flag in wx makefiles,
c368d904
RD
115 # (0 or 1 only) should probably find a way to
116 # autodetect this...
117
d440a0e7 118HYBRID = 1 # If set and not debug or FINAL, then build a
c368d904
RD
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.)
124
3e46a8e6
RD
125 # Version part of wxWindows LIB/DLL names
126WXDLLVER = '%d%d' % (VER_MAJOR, VER_MINOR)
c368d904
RD
127
128
cfe766c3
RD
129#----------------------------------------------------------------------
130
131def msg(text):
132 if __name__ == "__main__":
133 print text
134
a541c325 135
55c020cf
RD
136def opj(*args):
137 path = apply(os.path.join, args)
138 return os.path.normpath(path)
cfe766c3 139
a541c325 140
a4fbdd76
RD
141def libFlag():
142 if FINAL:
c8bc7bb8 143 rv = ''
a4fbdd76 144 elif HYBRID:
c8bc7bb8 145 rv = 'h'
a4fbdd76 146 else:
c8bc7bb8 147 rv = 'd'
a541c325 148 if UNICODE:
c8bc7bb8
RD
149 rv = 'u' + rv
150 return rv
a4fbdd76
RD
151
152
c368d904
RD
153#----------------------------------------------------------------------
154# Some other globals
155#----------------------------------------------------------------------
156
d14a1e28 157PKGDIR = 'wx'
c368d904 158wxpExtensions = []
1e4a197e 159DATA_FILES = []
c368d904
RD
160
161force = '--force' in sys.argv or '-f' in sys.argv
162debug = '--debug' in sys.argv or '-g' in sys.argv
ce8f00f3
RD
163cleaning = 'clean' in sys.argv
164
c368d904 165
1e4a197e
RD
166# change the PORT default for wxMac
167if sys.platform[:6] == "darwin":
168 WXPORT = 'mac'
22d08289 169
1e4a197e
RD
170# and do the same for wxMSW, just for consistency
171if os.name == 'nt':
172 WXPORT = 'msw'
22d08289 173
c368d904
RD
174
175#----------------------------------------------------------------------
176# Check for build flags on the command line
177#----------------------------------------------------------------------
178
5c8e1089 179# Boolean (int) flags
b166c703 180for flag in ['BUILD_GLCANVAS', 'BUILD_OGL', 'BUILD_STC', 'BUILD_XRC',
c731eb47 181 'BUILD_GIZMOS', 'BUILD_DLLWIDGET', 'BUILD_IEWIN',
d14a1e28
RD
182 'CORE_ONLY', 'PREP_ONLY', 'USE_SWIG', 'UNICODE',
183 'UNDEF_NDEBUG', 'NO_SCRIPTS', 'BUILD_RENAMERS',
b166c703 184 'FINAL', 'HYBRID', ]:
c368d904 185 for x in range(len(sys.argv)):
1e4a197e
RD
186 if sys.argv[x].find(flag) == 0:
187 pos = sys.argv[x].find('=') + 1
c368d904
RD
188 if pos > 0:
189 vars()[flag] = eval(sys.argv[x][pos:])
190 sys.argv[x] = ''
191
5c8e1089 192# String options
d14a1e28 193for option in ['WX_CONFIG', 'WXDLLVER', 'BUILD_BASE', 'WXPORT', 'SWIG']:
afa3e1ed 194 for x in range(len(sys.argv)):
1e4a197e
RD
195 if sys.argv[x].find(option) == 0:
196 pos = sys.argv[x].find('=') + 1
afa3e1ed
RL
197 if pos > 0:
198 vars()[option] = sys.argv[x][pos:]
199 sys.argv[x] = ''
200
c368d904
RD
201sys.argv = filter(None, sys.argv)
202
203
1e4a197e
RD
204#----------------------------------------------------------------------
205# some helper functions
206#----------------------------------------------------------------------
207
208def 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'.
213 """
214 # if WX_CONFIG hasn't been set to an explicit value then construct one.
215 global WX_CONFIG
216 if WX_CONFIG is None:
217 if debug: # TODO: Fix this. wxPython's --debug shouldn't be tied to wxWindows...
218 df = 'd'
219 else:
220 df = ''
221 if UNICODE:
222 uf = 'u'
223 else:
224 uf = ''
1fded56b 225 ver2 = "%s.%s" % (VER_MAJOR, VER_MINOR)
1e4a197e
RD
226 WX_CONFIG = 'wx%s%s%s-%s-config' % (WXPORT, uf, df, ver2)
227
228 searchpath = os.environ["PATH"]
229 for p in searchpath.split(':'):
230 fp = os.path.join(p, WX_CONFIG)
231 if os.path.exists(fp) and os.access(fp, os.X_OK):
232 # success
233 msg("Found wx-config: " + fp)
234 WX_CONFIG = fp
235 break
236 else:
237 msg("WX_CONFIG not specified and %s not found on $PATH "
238 "defaulting to \"wx-config\"" % WX_CONFIG)
239 WX_CONFIG = 'wx-config'
240
241
242
243def run_swig(files, dir, gendir, package, USE_SWIG, force, swig_args, swig_deps=[]):
244 """Run SWIG the way I want it done"""
d14a1e28 245
1e4a197e
RD
246 if not os.path.exists(os.path.join(dir, gendir)):
247 os.mkdir(os.path.join(dir, gendir))
248
8994c3c2
RD
249 if not os.path.exists(os.path.join("docs", "xml-raw")):
250 os.mkdir(os.path.join("docs", "xml-raw"))
251
1e4a197e
RD
252 sources = []
253
254 for file in files:
255 basefile = os.path.splitext(file)[0]
256 i_file = os.path.join(dir, file)
257 py_file = os.path.join(dir, gendir, basefile+'.py')
d14a1e28 258 cpp_file = os.path.join(dir, gendir, basefile+'_wrap.cpp')
8994c3c2 259 xml_file = os.path.join("docs", "xml-raw", basefile+'_swig.xml')
1e4a197e
RD
260
261 sources.append(cpp_file)
262
ce8f00f3 263 if not cleaning and USE_SWIG:
1e4a197e
RD
264 for dep in swig_deps:
265 if newer(dep, py_file) or newer(dep, cpp_file):
266 force = 1
267 break
268
269 if force or newer(i_file, py_file) or newer(i_file, cpp_file):
d14a1e28
RD
270 ## we need forward slashes here even on win32
271 #cpp_file = opj(cpp_file) #'/'.join(cpp_file.split('\\'))
272 #i_file = opj(i_file) #'/'.join(i_file.split('\\'))
273
274 if BUILD_RENAMERS:
b0640a71
RD
275 #tempfile.tempdir = sourcePath
276 xmltemp = tempfile.mktemp('.xml')
277
8994c3c2
RD
278 # First run swig to produce the XML file, adding
279 # an extra -D that prevents the old rename
280 # directives from being used
281 cmd = [ swig_cmd ] + swig_args + \
b0640a71 282 [ '-DBUILDING_RENAMERS', '-xmlout', xmltemp ] + \
8994c3c2
RD
283 ['-I'+dir, '-o', cpp_file, i_file]
284 msg(' '.join(cmd))
285 spawn(cmd)
286
287 # Next run build_renamers to process the XML
d14a1e28 288 cmd = [ sys.executable, '-u',
b0640a71 289 './distrib/build_renamers.py', dir, basefile, xmltemp]
d14a1e28
RD
290 msg(' '.join(cmd))
291 spawn(cmd)
b0640a71 292 os.remove(xmltemp)
d14a1e28
RD
293
294 # Then run swig for real
b0640a71
RD
295 cmd = [ swig_cmd ] + swig_args + ['-I'+dir, '-o', cpp_file,
296 '-xmlout', xml_file, i_file]
1e4a197e
RD
297 msg(' '.join(cmd))
298 spawn(cmd)
299
d14a1e28 300
1e4a197e
RD
301 # copy the generated python file to the package directory
302 copy_file(py_file, package, update=not force, verbose=0)
303
304 return sources
305
306
307
308def contrib_copy_tree(src, dest, verbose=0):
309 """Update local copies of wxWindows contrib files"""
310 from distutils.dir_util import mkpath, copy_tree
311
312 mkpath(dest, verbose=verbose)
313 copy_tree(src, dest, update=1, verbose=verbose)
314
315
316
317class smart_install_data(install_data):
318 def run(self):
319 #need to change self.install_dir to the actual library dir
320 install_cmd = self.get_finalized_command('install')
321 self.install_dir = getattr(install_cmd, 'install_lib')
322 return install_data.run(self)
323
324
325def build_locale_dir(destdir, verbose=1):
326 """Build a locale dir under the wxPython package for MSW"""
327 moFiles = glob.glob(opj(WXDIR, 'locale', '*.mo'))
328 for src in moFiles:
329 lang = os.path.splitext(os.path.basename(src))[0]
330 dest = opj(destdir, lang, 'LC_MESSAGES')
331 mkpath(dest, verbose=verbose)
332 copy_file(src, opj(dest, 'wxstd.mo'), update=1, verbose=verbose)
333
334
335def build_locale_list(srcdir):
336 # get a list of all files under the srcdir, to be used for install_data
337 def walk_helper(lst, dirname, files):
338 for f in files:
339 filename = opj(dirname, f)
340 if not os.path.isdir(filename):
341 lst.append( (dirname, [filename]) )
342 file_list = []
343 os.path.walk(srcdir, walk_helper, file_list)
344 return file_list
345
346
1fded56b
RD
347def find_data_files(srcdir, *wildcards):
348 # get a list of all files under the srcdir matching wildcards,
349 # returned in a format to be used for install_data
350
351 def walk_helper(arg, dirname, files):
352 names = []
353 lst, wildcards = arg
354 for wc in wildcards:
355 for f in files:
356 filename = opj(dirname, f)
357 if fnmatch.fnmatch(filename, wc) and not os.path.isdir(filename):
358 names.append(filename)
359 if names:
360 lst.append( (dirname, names ) )
361
362 file_list = []
363 os.path.walk(srcdir, walk_helper, (file_list, wildcards))
364 return file_list
1e4a197e
RD
365
366
3ef86e32
RD
367def makeLibName(name):
368 if os.name == 'posix':
369 libname = '%s_%s-%s' % (WXBASENAME, name, WXRELEASE)
370 else:
3e46a8e6 371 libname = 'wxmsw%s%s_%s' % (WXDLLVER, libFlag(), name)
3ef86e32
RD
372
373 return [libname]
374
375
376
377def adjustCFLAGS(cflags, defines, includes):
d14a1e28 378 '''Extrace the raw -I, -D, and -U flags and put them into
3ef86e32
RD
379 defines and includes as needed.'''
380 newCFLAGS = []
381 for flag in cflags:
382 if flag[:2] == '-I':
383 includes.append(flag[2:])
384 elif flag[:2] == '-D':
385 flag = flag[2:]
386 if flag.find('=') == -1:
387 defines.append( (flag, None) )
388 else:
389 defines.append( tuple(flag.split('=')) )
390 elif flag[:2] == '-U':
391 defines.append( (flag[2:], ) )
392 else:
393 newCFLAGS.append(flag)
394 return newCFLAGS
395
396
397
398def adjustLFLAGS(lfags, libdirs, libs):
d14a1e28 399 '''Extrace the -L and -l flags and put them in libdirs and libs as needed'''
3ef86e32
RD
400 newLFLAGS = []
401 for flag in lflags:
402 if flag[:2] == '-L':
403 libdirs.append(flag[2:])
404 elif flag[:2] == '-l':
405 libs.append(flag[2:])
406 else:
407 newLFLAGS.append(flag)
408
409 return newLFLAGS
c8bc7bb8
RD
410
411#----------------------------------------------------------------------
412# sanity checks
413
c368d904 414if CORE_ONLY:
f221f8eb 415 BUILD_GLCANVAS = 0
c368d904
RD
416 BUILD_OGL = 0
417 BUILD_STC = 0
b166c703 418 BUILD_XRC = 0
ff5f1aba
RD
419 BUILD_GIZMOS = 0
420 BUILD_DLLWIDGET = 0
c731eb47 421 BUILD_IEWIN = 0
ff5f1aba 422
1e4a197e
RD
423if debug:
424 FINAL = 0
425 HYBRID = 0
c368d904 426
1e4a197e
RD
427if FINAL:
428 HYBRID = 0
c8bc7bb8 429
1e4a197e
RD
430if UNICODE and WXPORT not in ['msw', 'gtk2']:
431 raise SystemExit, "UNICODE mode not currently supported on this WXPORT: "+WXPORT
a541c325
RD
432
433
c368d904
RD
434#----------------------------------------------------------------------
435# Setup some platform specific stuff
436#----------------------------------------------------------------------
437
438if os.name == 'nt':
439 # Set compile flags and such for MSVC. These values are derived
a541c325
RD
440 # from the wxWindows makefiles for MSVC, other compilers settings
441 # will probably vary...
442 if os.environ.has_key('WXWIN'):
443 WXDIR = os.environ['WXWIN']
444 else:
445 msg("WARNING: WXWIN not set in environment.")
446 WXDIR = '..' # assumes in CVS tree
c368d904
RD
447 WXPLAT = '__WXMSW__'
448 GENDIR = 'msw'
449
d14a1e28
RD
450 includes = ['include', 'src',
451 opj(WXDIR, 'lib', 'vc_dll', 'msw' + libFlag()),
55c020cf 452 opj(WXDIR, 'include'),
5a2a9da2 453 opj(WXDIR, 'contrib', 'include'),
c368d904
RD
454 ]
455
1e4a197e 456 defines = [ ('WIN32', None),
c368d904 457 ('_WINDOWS', None),
c368d904
RD
458
459 (WXPLAT, None),
460 ('WXUSINGDLL', '1'),
461
462 ('SWIG_GLOBAL', None),
c368d904
RD
463 ('WXP_USE_THREAD', '1'),
464 ]
465
1e4a197e
RD
466 if UNDEF_NDEBUG:
467 defines.append( ('NDEBUG',) ) # using a 1-tuple makes it do an undef
22d08289
RD
468
469
c368d904
RD
470 if not FINAL or HYBRID:
471 defines.append( ('__WXDEBUG__', None) )
472
1e521887 473 libdirs = [ opj(WXDIR, 'lib', 'vc_dll') ]
0a67b751
RD
474 libs = [ 'wxbase' + WXDLLVER + libFlag(), # TODO: trim this down to what is really needed for the core
475 'wxbase' + WXDLLVER + libFlag() + '_net',
476 'wxbase' + WXDLLVER + libFlag() + '_xml',
477 makeLibName('core')[0],
478 makeLibName('adv')[0],
479 makeLibName('html')[0],
480 ]
a4fbdd76 481
22d08289 482 libs = libs + ['kernel32', 'user32', 'gdi32', 'comdlg32',
c368d904 483 'winspool', 'winmm', 'shell32', 'oldnames', 'comctl32',
1e4a197e 484 'odbc32', 'ole32', 'oleaut32', 'uuid', 'rpcrt4',
c368d904
RD
485 'advapi32', 'wsock32']
486
22d08289 487
d440a0e7 488 cflags = [ '/Gy',
ad07d019
RD
489 # '/GX-' # workaround for internal compiler error in MSVC on some machines
490 ]
c368d904
RD
491 lflags = None
492
1e4a197e 493 # Other MSVC flags...
1fded56b 494 # Too bad I don't remember why I was playing with these, can they be removed?
1e4a197e
RD
495 if FINAL:
496 pass #cflags = cflags + ['/O1']
497 elif HYBRID :
498 pass #cflags = cflags + ['/Ox']
499 else:
500 pass # cflags = cflags + ['/Od', '/Z7']
501 # lflags = ['/DEBUG', ]
22d08289
RD
502
503
22d08289 504
1e4a197e 505#----------------------------------------------------------------------
c368d904 506
3ef86e32 507elif os.name == 'posix':
d14a1e28
RD
508 WXDIR = '..'
509 includes = ['include', 'src']
e6056257
RD
510 defines = [('SWIG_GLOBAL', None),
511 ('HAVE_CONFIG_H', None),
512 ('WXP_USE_THREAD', '1'),
513 ]
1e4a197e
RD
514 if UNDEF_NDEBUG:
515 defines.append( ('NDEBUG',) ) # using a 1-tuple makes it do an undef
1e4a197e
RD
516
517 Verify_WX_CONFIG()
e6056257 518
3ef86e32
RD
519 libdirs = []
520 libs = []
521
e6056257 522 cflags = os.popen(WX_CONFIG + ' --cxxflags', 'r').read()[:-1]
1e4a197e 523 cflags = cflags.split()
ba201fa4
RD
524 if debug:
525 cflags.append('-g')
526 cflags.append('-O0')
8b9a4190
RD
527 else:
528 cflags.append('-O3')
e6056257
RD
529
530 lflags = os.popen(WX_CONFIG + ' --libs', 'r').read()[:-1]
1e4a197e 531 lflags = lflags.split()
e6056257 532
3ef86e32
RD
533 WXBASENAME = os.popen(WX_CONFIG + ' --basename').read()[:-1]
534 WXRELEASE = os.popen(WX_CONFIG + ' --release').read()[:-1]
535 WXPREFIX = os.popen(WX_CONFIG + ' --prefix').read()[:-1]
e6056257
RD
536
537
3ef86e32
RD
538 if sys.platform[:6] == "darwin":
539 # Flags and such for a Darwin (Max OS X) build of Python
540 WXPLAT = '__WXMAC__'
541 GENDIR = 'mac'
542 libs = ['stdc++']
543 NO_SCRIPTS = 1
c368d904 544
1e4a197e 545
3ef86e32
RD
546 else:
547 # Set flags for other Unix type platforms
548 GENDIR = WXPORT
549
550 if WXPORT == 'gtk':
551 WXPLAT = '__WXGTK__'
552 portcfg = os.popen('gtk-config --cflags', 'r').read()[:-1]
553 elif WXPORT == 'gtk2':
554 WXPLAT = '__WXGTK__'
555 GENDIR = 'gtk' # no code differences so use the same generated sources
556 portcfg = os.popen('pkg-config gtk+-2.0 --cflags', 'r').read()[:-1]
557 BUILD_BASE = BUILD_BASE + '-' + WXPORT
558 elif WXPORT == 'x11':
559 WXPLAT = '__WXX11__'
560 portcfg = ''
561 BUILD_BASE = BUILD_BASE + '-' + WXPORT
562 else:
563 raise SystemExit, "Unknown WXPORT value: " + WXPORT
1e4a197e 564
3ef86e32 565 cflags += portcfg.split()
1e4a197e 566
d14a1e28
RD
567 # Some distros (e.g. Mandrake) put libGLU in /usr/X11R6/lib, but
568 # wx-config doesn't output that for some reason. For now, just
569 # add it unconditionally but we should really check if the lib is
570 # really found there or wx-config should be fixed.
571 libdirs.append("/usr/X11R6/lib")
c368d904 572
1e4a197e 573
3ef86e32
RD
574 # Move the various -I, -D, etc. flags we got from the *config scripts
575 # into the distutils lists.
576 cflags = adjustCFLAGS(cflags, defines, includes)
577 lflags = adjustLFLAGS(lflags, libdirs, libs)
c368d904
RD
578
579
1e4a197e 580#----------------------------------------------------------------------
c368d904 581else:
1e4a197e
RD
582 raise 'Sorry Charlie, platform not supported...'
583
584
585#----------------------------------------------------------------------
1fded56b 586# post platform setup checks and tweaks, create the full version string
1e4a197e
RD
587#----------------------------------------------------------------------
588
589if UNICODE:
590 BUILD_BASE = BUILD_BASE + '.unicode'
1fded56b 591 VER_FLAGS += 'u'
c368d904
RD
592
593
1fded56b
RD
594VERSION = "%s.%s.%s.%s%s" % (VER_MAJOR, VER_MINOR, VER_RELEASE,
595 VER_SUBREL, VER_FLAGS)
596
c368d904 597#----------------------------------------------------------------------
1fded56b 598# Update the version file
c368d904
RD
599#----------------------------------------------------------------------
600
1fded56b
RD
601# Unconditionally updated since the version string can change based
602# on the UNICODE flag
603open('src/__version__.py', 'w').write("""\
604# This file was generated by setup.py...
605
d14a1e28
RD
606VERSION_STRING = '%(VERSION)s'
607MAJOR_VERSION = %(VER_MAJOR)s
608MINOR_VERSION = %(VER_MINOR)s
609RELEASE_VERSION = %(VER_RELEASE)s
610SUBREL_VERSION = %(VER_SUBREL)s
1fded56b 611
d14a1e28
RD
612VERSION = (MAJOR_VERSION, MINOR_VERSION, RELEASE_VERSION,
613 SUBREL_VERSION, '%(VER_FLAGS)s')
1fded56b 614
d14a1e28 615RELEASE_NUMBER = RELEASE_VERSION # for compatibility
1fded56b 616""" % globals())
1e4a197e 617
c368d904 618
1b62f00d
RD
619
620
c368d904 621#----------------------------------------------------------------------
1b62f00d 622# SWIG defaults
c368d904
RD
623#----------------------------------------------------------------------
624
d14a1e28 625swig_cmd = SWIG
c368d904 626swig_force = force
d14a1e28
RD
627swig_args = ['-c++',
628 '-Wall',
629 '-nodefault',
630
631## '-xml',
632
633 '-python',
634 '-keyword',
635 '-new_repr',
636 '-modern',
637
638 '-I./src',
639 '-D'+WXPLAT,
98fb9b71 640 '-noruntime'
e6056257 641 ]
a541c325 642if UNICODE:
c8bc7bb8
RD
643 swig_args.append('-DwxUSE_UNICODE')
644
d14a1e28
RD
645swig_deps = [ 'src/my_typemaps.i',
646 'src/common.swg',
647 'src/pyrun.swg',
648 ]
649
650depends = [ #'include/wx/wxPython/wxPython.h',
651 #'include/wx/wxPython/wxPython_int.h',
652 #'src/pyclasses.h',
653 ]
c368d904 654
c368d904 655
1b62f00d
RD
656#----------------------------------------------------------------------
657# Define the CORE extension module
658#----------------------------------------------------------------------
659
1e4a197e 660msg('Preparing CORE...')
d14a1e28
RD
661swig_sources = run_swig(['core.i'], 'src', GENDIR, PKGDIR,
662 USE_SWIG, swig_force, swig_args, swig_deps +
1e0c8722
RD
663 [ 'src/_accel.i',
664 'src/_app.i',
d14a1e28
RD
665 'src/_app_ex.py',
666 'src/_constraints.i',
667 'src/_core_api.i',
668 'src/_core_ex.py',
669 'src/_core_rename.i',
670 'src/_core_reverse.txt',
671 'src/_defs.i',
672 'src/_event.i',
673 'src/_event_ex.py',
674 'src/_evthandler.i',
675 'src/_filesys.i',
676 'src/_gdicmn.i',
677 'src/_image.i',
678 'src/_menu.i',
679 'src/_obj.i',
680 'src/_sizers.i',
681 'src/_gbsizer.i',
682 'src/_streams.i',
683 'src/_validator.i',
684 'src/_window.i',
685 ])
1b62f00d 686
1e4a197e
RD
687copy_file('src/__init__.py', PKGDIR, update=1, verbose=0)
688copy_file('src/__version__.py', PKGDIR, update=1, verbose=0)
1b62f00d
RD
689
690
d14a1e28
RD
691# update the license files
692mkpath('licence')
693for file in ['preamble.txt', 'licence.txt', 'licendoc.txt', 'lgpl.txt']:
694 copy_file(opj(WXDIR, 'docs', file), opj('licence',file), update=1, verbose=0)
c368d904 695
c368d904 696
1e4a197e
RD
697if os.name == 'nt':
698 build_locale_dir(opj(PKGDIR, 'locale'))
699 DATA_FILES += build_locale_list(opj(PKGDIR, 'locale'))
4f3449b4
RD
700
701
1e4a197e
RD
702if os.name == 'nt':
703 rc_file = ['src/wxc.rc']
704else:
705 rc_file = []
706
707
d14a1e28
RD
708ext = Extension('_core', ['src/helpers.cpp',
709 'src/libpy.c',
1e4a197e
RD
710 ] + rc_file + swig_sources,
711
712 include_dirs = includes,
713 define_macros = defines,
714
715 library_dirs = libdirs,
716 libraries = libs,
717
718 extra_compile_args = cflags,
719 extra_link_args = lflags,
d14a1e28
RD
720
721 depends = depends
1e4a197e
RD
722 )
723wxpExtensions.append(ext)
724
725
d14a1e28
RD
726
727
728
729# Extension for the GDI module
730swig_sources = run_swig(['gdi.i'], 'src', GENDIR, PKGDIR,
731 USE_SWIG, swig_force, swig_args, swig_deps +
732 ['src/_gdi_rename.i',
733 'src/_bitmap.i', 'src/_brush.i',
734 'src/_colour.i', 'src/_cursor.i',
735 'src/_dc.i', 'src/_font.i',
736 'src/_gdiobj.i', 'src/_icon.i',
737 'src/_imaglist.i', 'src/_pen.i',
738 'src/_region.i', 'src/_palette.i',
dd9f7fea 739 'src/_stockobjs.i',
d14a1e28
RD
740 'src/_effects.i',
741 'src/_intl.i',
742 'src/_intl_ex.py',
743 ])
744ext = Extension('_gdi', ['src/drawlist.cpp'] + swig_sources,
1e4a197e
RD
745 include_dirs = includes,
746 define_macros = defines,
747 library_dirs = libdirs,
748 libraries = libs,
749 extra_compile_args = cflags,
750 extra_link_args = lflags,
d14a1e28 751 depends = depends
1e4a197e
RD
752 )
753wxpExtensions.append(ext)
754
755
d14a1e28
RD
756
757
758
759
760# Extension for the windows module
761swig_sources = run_swig(['windows.i'], 'src', GENDIR, PKGDIR,
762 USE_SWIG, swig_force, swig_args, swig_deps +
763 ['src/_windows_rename.i', 'src/_windows_reverse.txt',
764 'src/_panel.i',
d14a1e28
RD
765 'src/_toplvl.i', 'src/_statusbar.i',
766 'src/_splitter.i', 'src/_sashwin.i',
767 'src/_popupwin.i', 'src/_tipwin.i',
768 'src/_vscroll.i', 'src/_taskbar.i',
769 'src/_cmndlgs.i', 'src/_mdi.i',
770 'src/_pywindows.i', 'src/_printfw.i',
771 ])
772ext = Extension('_windows', swig_sources,
1e4a197e
RD
773 include_dirs = includes,
774 define_macros = defines,
775 library_dirs = libdirs,
776 libraries = libs,
777 extra_compile_args = cflags,
778 extra_link_args = lflags,
d14a1e28 779 depends = depends
1e4a197e
RD
780 )
781wxpExtensions.append(ext)
782
783
d14a1e28
RD
784
785
786# Extension for the controls module
787swig_sources = run_swig(['controls.i'], 'src', GENDIR, PKGDIR,
788 USE_SWIG, swig_force, swig_args, swig_deps +
789 [ 'src/_controls_rename.i', 'src/_controls_reverse.txt',
790 'src/_control.i', 'src/_toolbar.i',
791 'src/_button.i', 'src/_checkbox.i',
792 'src/_choice.i', 'src/_combobox.i',
793 'src/_gauge.i', 'src/_statctrls.i',
794 'src/_listbox.i', 'src/_textctrl.i',
795 'src/_scrolbar.i', 'src/_spin.i',
796 'src/_radio.i', 'src/_slider.i',
797 'src/_tglbtn.i', 'src/_notebook.i',
798 'src/_listctrl.i', 'src/_treectrl.i',
799 'src/_dirctrl.i', 'src/_pycontrol.i',
dd9f7fea 800 'src/_cshelp.i', 'src/_dragimg.i',
d14a1e28
RD
801 ])
802ext = Extension('_controls', swig_sources,
803 include_dirs = includes,
804 define_macros = defines,
805 library_dirs = libdirs,
806 libraries = libs,
807 extra_compile_args = cflags,
808 extra_link_args = lflags,
809 depends = depends
810 )
811wxpExtensions.append(ext)
812
813
814
815
816# Extension for the misc module
817swig_sources = run_swig(['misc.i'], 'src', GENDIR, PKGDIR,
818 USE_SWIG, swig_force, swig_args, swig_deps +
819 [ 'src/_settings.i', 'src/_functions.i',
820 'src/_misc.i', 'src/_tipdlg.i',
821 'src/_timer.i', 'src/_log.i',
822 'src/_process.i', 'src/_joystick.i',
823 'src/_wave.i', 'src/_mimetype.i',
824 'src/_artprov.i', 'src/_config.i',
825 'src/_datetime.i', 'src/_dataobj.i',
826 'src/_dnd.i',
827 'src/_clipbrd.i',
828 ])
829ext = Extension('_misc', swig_sources,
830 include_dirs = includes,
831 define_macros = defines,
832 library_dirs = libdirs,
833 libraries = libs,
834 extra_compile_args = cflags,
835 extra_link_args = lflags,
836 depends = depends
837 )
838wxpExtensions.append(ext)
839
840
841
842##
843## Core modules that are not in the "core" namespace start here
844##
845
1e4a197e
RD
846swig_sources = run_swig(['calendar.i'], 'src', GENDIR, PKGDIR,
847 USE_SWIG, swig_force, swig_args, swig_deps)
d14a1e28
RD
848ext = Extension('_calendar', swig_sources,
849 include_dirs = includes,
850 define_macros = defines,
851 library_dirs = libdirs,
852 libraries = libs,
853 extra_compile_args = cflags,
854 extra_link_args = lflags,
855 depends = depends
856 )
857wxpExtensions.append(ext)
858
859
860swig_sources = run_swig(['grid.i'], 'src', GENDIR, PKGDIR,
861 USE_SWIG, swig_force, swig_args, swig_deps)
862ext = Extension('_grid', swig_sources,
1e4a197e
RD
863 include_dirs = includes,
864 define_macros = defines,
865 library_dirs = libdirs,
866 libraries = libs,
867 extra_compile_args = cflags,
868 extra_link_args = lflags,
d14a1e28 869 depends = depends
1e4a197e
RD
870 )
871wxpExtensions.append(ext)
872
873
d14a1e28
RD
874
875swig_sources = run_swig(['html.i'], 'src', GENDIR, PKGDIR,
1e4a197e 876 USE_SWIG, swig_force, swig_args, swig_deps)
d14a1e28 877ext = Extension('_html', swig_sources,
1e4a197e
RD
878 include_dirs = includes,
879 define_macros = defines,
880 library_dirs = libdirs,
881 libraries = libs,
882 extra_compile_args = cflags,
883 extra_link_args = lflags,
d14a1e28 884 depends = depends
1e4a197e
RD
885 )
886wxpExtensions.append(ext)
887
888
d14a1e28 889
1e4a197e
RD
890swig_sources = run_swig(['wizard.i'], 'src', GENDIR, PKGDIR,
891 USE_SWIG, swig_force, swig_args, swig_deps)
d14a1e28 892ext = Extension('_wizard', swig_sources,
1e4a197e
RD
893 include_dirs = includes,
894 define_macros = defines,
895 library_dirs = libdirs,
896 libraries = libs,
897 extra_compile_args = cflags,
898 extra_link_args = lflags,
d14a1e28 899 depends = depends
1e4a197e
RD
900 )
901wxpExtensions.append(ext)
af83019e
RD
902
903
d14a1e28
RD
904
905
906
c368d904
RD
907#----------------------------------------------------------------------
908# Define the GLCanvas extension module
909#----------------------------------------------------------------------
910
1e4a197e 911if BUILD_GLCANVAS:
cfe766c3 912 msg('Preparing GLCANVAS...')
c368d904 913 location = 'contrib/glcanvas'
c368d904 914
d14a1e28 915 swig_sources = run_swig(['glcanvas.i'], location, GENDIR, PKGDIR,
10ef30eb 916 USE_SWIG, swig_force, swig_args, swig_deps)
c368d904
RD
917
918 gl_libs = []
919 if os.name == 'posix':
f32afe1c 920 gl_config = os.popen(WX_CONFIG + ' --gl-libs', 'r').read()[:-1]
1e4a197e 921 gl_lflags = gl_config.split() + lflags
f32afe1c 922 gl_libs = libs
19cf4f80 923 else:
3e46a8e6 924 gl_libs = libs + ['opengl32', 'glu32'] + makeLibName('gl')
f32afe1c 925 gl_lflags = lflags
c368d904 926
d14a1e28 927 ext = Extension('_glcanvas',
3e46a8e6 928 swig_sources,
1e7ecb7b
RD
929
930 include_dirs = includes,
931 define_macros = defines,
932
933 library_dirs = libdirs,
f32afe1c 934 libraries = gl_libs,
1e7ecb7b
RD
935
936 extra_compile_args = cflags,
f32afe1c 937 extra_link_args = gl_lflags,
1e7ecb7b
RD
938 )
939
940 wxpExtensions.append(ext)
c368d904
RD
941
942
943#----------------------------------------------------------------------
944# Define the OGL extension module
945#----------------------------------------------------------------------
946
1e4a197e 947if BUILD_OGL:
cfe766c3 948 msg('Preparing OGL...')
c368d904 949 location = 'contrib/ogl'
c368d904 950
a32360e0 951 swig_sources = run_swig(['ogl.i'], location, GENDIR, PKGDIR,
d14a1e28
RD
952 USE_SWIG, swig_force, swig_args, swig_deps +
953 [ '%s/_oglbasic.i' % location,
954 '%s/_oglshapes.i' % location,
955 '%s/_oglshapes2.i' % location,
956 '%s/_oglcanvas.i' % location,
957 '%s/_ogldefs.i' % location,
958 ])
c368d904 959
d14a1e28 960 ext = Extension('_ogl',
3ef86e32 961 swig_sources,
1e7ecb7b 962
a32360e0 963 include_dirs = includes + [ location ],
dd116e73 964 define_macros = defines + [('wxUSE_DEPRECATED', '0')],
1e7ecb7b
RD
965
966 library_dirs = libdirs,
3ef86e32 967 libraries = libs + makeLibName('ogl'),
1e7ecb7b
RD
968
969 extra_compile_args = cflags,
970 extra_link_args = lflags,
971 )
972
973 wxpExtensions.append(ext)
974
975
c368d904
RD
976
977#----------------------------------------------------------------------
978# Define the STC extension module
979#----------------------------------------------------------------------
980
1e4a197e 981if BUILD_STC:
cfe766c3 982 msg('Preparing STC...')
c368d904 983 location = 'contrib/stc'
5a2a9da2
RD
984 if os.name == 'nt':
985 STC_H = opj(WXDIR, 'contrib', 'include/wx/stc')
986 else:
987 STC_H = opj(WXPREFIX, 'include/wx/stc')
55c020cf 988
3ef86e32 989## NOTE: need to add this to the stc.bkl...
55c020cf 990
3ef86e32
RD
991## # Check if gen_iface needs to be run for the wxSTC sources
992## if (newer(opj(CTRB_SRC, 'stc/stc.h.in'), opj(CTRB_INC, 'stc/stc.h' )) or
993## newer(opj(CTRB_SRC, 'stc/stc.cpp.in'), opj(CTRB_SRC, 'stc/stc.cpp')) or
994## newer(opj(CTRB_SRC, 'stc/gen_iface.py'), opj(CTRB_SRC, 'stc/stc.cpp'))):
55c020cf 995
3ef86e32
RD
996## msg('Running gen_iface.py, regenerating stc.h and stc.cpp...')
997## cwd = os.getcwd()
998## os.chdir(opj(CTRB_SRC, 'stc'))
999## sys.path.insert(0, os.curdir)
1000## import gen_iface
1001## gen_iface.main([])
1002## os.chdir(cwd)
c368d904
RD
1003
1004
d14a1e28 1005 swig_sources = run_swig(['stc.i'], location, '', PKGDIR,
c368d904
RD
1006 USE_SWIG, swig_force,
1007 swig_args + ['-I'+STC_H, '-I'+location],
10ef30eb 1008 [opj(STC_H, 'stc.h')] + swig_deps)
c368d904 1009
d14a1e28 1010 ext = Extension('_stc',
3ef86e32
RD
1011 swig_sources,
1012
1013 include_dirs = includes,
1014 define_macros = defines,
1e7ecb7b
RD
1015
1016 library_dirs = libdirs,
3ef86e32 1017 libraries = libs + makeLibName('stc'),
c368d904 1018
1e7ecb7b
RD
1019 extra_compile_args = cflags,
1020 extra_link_args = lflags,
1021 )
1022
1023 wxpExtensions.append(ext)
c368d904
RD
1024
1025
1026
926bb76c
RD
1027#----------------------------------------------------------------------
1028# Define the IEWIN extension module (experimental)
1029#----------------------------------------------------------------------
1030
1e4a197e 1031if BUILD_IEWIN:
cfe766c3 1032 msg('Preparing IEWIN...')
926bb76c
RD
1033 location = 'contrib/iewin'
1034
1035 swig_files = ['iewin.i', ]
1036
1037 swig_sources = run_swig(swig_files, location, '', PKGDIR,
10ef30eb 1038 USE_SWIG, swig_force, swig_args, swig_deps)
926bb76c
RD
1039
1040
1041 ext = Extension('iewinc', ['%s/IEHtmlWin.cpp' % location,
c731eb47 1042 '%s/wxactivex.cpp' % location,
926bb76c
RD
1043 ] + swig_sources,
1044
1045 include_dirs = includes,
1046 define_macros = defines,
1047
1048 library_dirs = libdirs,
1049 libraries = libs,
1050
1051 extra_compile_args = cflags,
1052 extra_link_args = lflags,
1053 )
1054
1055 wxpExtensions.append(ext)
1056
1057
d56cebe7
RD
1058#----------------------------------------------------------------------
1059# Define the XRC extension module
1060#----------------------------------------------------------------------
1061
1e4a197e 1062if BUILD_XRC:
cfe766c3 1063 msg('Preparing XRC...')
d56cebe7 1064 location = 'contrib/xrc'
d56cebe7 1065
d14a1e28
RD
1066 swig_sources = run_swig(['xrc.i'], location, '', PKGDIR,
1067 USE_SWIG, swig_force, swig_args, swig_deps +
1068 [ '%s/_xrc_rename.i' % location,
1069 '%s/_xrc_ex.py' % location,
1070 '%s/_xmlres.i' % location,
1071 '%s/_xmlsub.i' % location,
1072 '%s/_xml.i' % location,
1073 '%s/_xmlhandler.i' % location,
1074 ])
1075
1076 ext = Extension('_xrc',
3ef86e32 1077 swig_sources,
1fded56b 1078
3ef86e32 1079 include_dirs = includes,
d56cebe7
RD
1080 define_macros = defines,
1081
1082 library_dirs = libdirs,
3ef86e32 1083 libraries = libs + makeLibName('xrc'),
d56cebe7
RD
1084
1085 extra_compile_args = cflags,
1086 extra_link_args = lflags,
1087 )
1088
1089 wxpExtensions.append(ext)
1090
1091
1092
ebf4302c
RD
1093#----------------------------------------------------------------------
1094# Define the GIZMOS extension module
1095#----------------------------------------------------------------------
1096
1e4a197e 1097if BUILD_GIZMOS:
ebf4302c
RD
1098 msg('Preparing GIZMOS...')
1099 location = 'contrib/gizmos'
ebf4302c 1100
a32360e0 1101 swig_sources = run_swig(['gizmos.i'], location, GENDIR, PKGDIR,
10ef30eb 1102 USE_SWIG, swig_force, swig_args, swig_deps)
ebf4302c 1103
d14a1e28 1104 ext = Extension('_gizmos',
d84a9306 1105 [ '%s/treelistctrl.cpp' % location ] + swig_sources,
ebf4302c 1106
a32360e0 1107 include_dirs = includes + [ location ],
ebf4302c
RD
1108 define_macros = defines,
1109
1110 library_dirs = libdirs,
3ef86e32 1111 libraries = libs + makeLibName('gizmos'),
ebf4302c
RD
1112
1113 extra_compile_args = cflags,
1114 extra_link_args = lflags,
1115 )
1116
1117 wxpExtensions.append(ext)
1118
1119
1120
4a61305d
RD
1121#----------------------------------------------------------------------
1122# Define the DLLWIDGET extension module
1123#----------------------------------------------------------------------
1124
1e4a197e 1125if BUILD_DLLWIDGET:
4a61305d
RD
1126 msg('Preparing DLLWIDGET...')
1127 location = 'contrib/dllwidget'
1128 swig_files = ['dllwidget_.i']
1129
1130 swig_sources = run_swig(swig_files, location, '', PKGDIR,
10ef30eb 1131 USE_SWIG, swig_force, swig_args, swig_deps)
4a61305d
RD
1132
1133 # copy a contrib project specific py module to the main package dir
1134 copy_file(opj(location, 'dllwidget.py'), PKGDIR, update=1, verbose=0)
1135
1136 ext = Extension('dllwidget_c', [
1137 '%s/dllwidget.cpp' % location,
1138 ] + swig_sources,
1139
1140 include_dirs = includes,
1141 define_macros = defines,
1142
1143 library_dirs = libdirs,
1144 libraries = libs,
1145
1146 extra_compile_args = cflags,
1147 extra_link_args = lflags,
1148 )
1149
1150 wxpExtensions.append(ext)
1151
1152
1e4a197e
RD
1153
1154
1155#----------------------------------------------------------------------
1156# Tools and scripts
1157#----------------------------------------------------------------------
8916d007 1158
2eb31f8b
RD
1159if NO_SCRIPTS:
1160 SCRIPTS = None
1161else:
1e4a197e
RD
1162 SCRIPTS = [opj('scripts/helpviewer'),
1163 opj('scripts/img2png'),
2eb31f8b
RD
1164 opj('scripts/img2xpm'),
1165 opj('scripts/img2py'),
1166 opj('scripts/xrced'),
1167 opj('scripts/pyshell'),
1168 opj('scripts/pycrust'),
1fded56b
RD
1169 opj('scripts/pywrap'),
1170 opj('scripts/pywrap'),
1171 opj('scripts/pyalacarte'),
1172 opj('scripts/pyalamode'),
2eb31f8b 1173 ]
4a61305d 1174
926bb76c 1175
1fded56b
RD
1176DATA_FILES += find_data_files('wxPython/tools/XRCed', '*.txt', '*.xrc')
1177DATA_FILES += find_data_files('wxPython/py', '*.txt', '*.ico', '*.css', '*.html')
1178DATA_FILES += find_data_files('wx', '*.txt', '*.css', '*.html')
1e4a197e
RD
1179
1180
c368d904
RD
1181#----------------------------------------------------------------------
1182# Do the Setup/Build/Install/Whatever
1183#----------------------------------------------------------------------
1184
1b62f00d 1185if __name__ == "__main__":
1e4a197e 1186 if not PREP_ONLY:
d14a1e28 1187 setup(name = 'wxPython',
1b62f00d
RD
1188 version = VERSION,
1189 description = DESCRIPTION,
1190 long_description = LONG_DESCRIPTION,
1191 author = AUTHOR,
1192 author_email = AUTHOR_EMAIL,
1193 url = URL,
851d4ac7 1194 download_url = DOWNLOAD_URL,
e2e02194 1195 license = LICENSE,
851d4ac7
RD
1196 platforms = PLATFORMS,
1197 classifiers = filter(None, CLASSIFIERS.split("\n")),
1198 keywords = KEYWORDS,
d14a1e28 1199
1fded56b
RD
1200 packages = ['wxPython',
1201 'wxPython.lib',
1202 'wxPython.lib.colourchooser',
1203 'wxPython.lib.editor',
1204 'wxPython.lib.mixins',
1fded56b 1205 'wxPython.tools',
1fded56b
RD
1206
1207 'wx',
1208 'wx.lib',
1209 'wx.lib.colourchooser',
1210 'wx.lib.editor',
1211 'wx.lib.mixins',
1212 'wx.py',
d14a1e28 1213 'wx.py.wxd',
1fded56b
RD
1214 'wx.tools',
1215 'wx.tools.XRCed',
1b62f00d
RD
1216 ],
1217
1218 ext_package = PKGDIR,
1219 ext_modules = wxpExtensions,
8916d007 1220
f6f98ecc 1221 options = { 'build' : { 'build_base' : BUILD_BASE }},
a541c325 1222
b817523b 1223 scripts = SCRIPTS,
c368d904 1224
1e4a197e
RD
1225 cmdclass = { 'install_data': smart_install_data},
1226 data_files = DATA_FILES,
8916d007 1227
1b62f00d 1228 )
c368d904 1229
c368d904 1230
c368d904
RD
1231#----------------------------------------------------------------------
1232#----------------------------------------------------------------------