]> git.saurik.com Git - wxWidgets.git/blame - wxPython/setup.py
added tech note about writing unit tests
[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
b0803032 20VER_FLAGS = "p8" # 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)
de7b7fe6 67BUILD_IEWIN = (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)
f87da722
RD
226 port = WXPORT
227 if port == "x11":
228 port = "x11univ"
229 WX_CONFIG = 'wx%s%s%s-%s-config' % (port, uf, df, ver2)
1e4a197e
RD
230
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):
235 # success
236 msg("Found wx-config: " + fp)
237 WX_CONFIG = fp
238 break
239 else:
240 msg("WX_CONFIG not specified and %s not found on $PATH "
241 "defaulting to \"wx-config\"" % WX_CONFIG)
242 WX_CONFIG = 'wx-config'
243
244
245
246def run_swig(files, dir, gendir, package, USE_SWIG, force, swig_args, swig_deps=[]):
247 """Run SWIG the way I want it done"""
d14a1e28 248
1e4a197e
RD
249 if not os.path.exists(os.path.join(dir, gendir)):
250 os.mkdir(os.path.join(dir, gendir))
251
8994c3c2
RD
252 if not os.path.exists(os.path.join("docs", "xml-raw")):
253 os.mkdir(os.path.join("docs", "xml-raw"))
254
1e4a197e
RD
255 sources = []
256
257 for file in files:
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')
d14a1e28 261 cpp_file = os.path.join(dir, gendir, basefile+'_wrap.cpp')
8994c3c2 262 xml_file = os.path.join("docs", "xml-raw", basefile+'_swig.xml')
1e4a197e
RD
263
264 sources.append(cpp_file)
265
ce8f00f3 266 if not cleaning and USE_SWIG:
1e4a197e
RD
267 for dep in swig_deps:
268 if newer(dep, py_file) or newer(dep, cpp_file):
269 force = 1
270 break
271
272 if force or newer(i_file, py_file) or newer(i_file, cpp_file):
d14a1e28
RD
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('\\'))
276
277 if BUILD_RENAMERS:
b0640a71
RD
278 #tempfile.tempdir = sourcePath
279 xmltemp = tempfile.mktemp('.xml')
280
8994c3c2
RD
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 + \
b0640a71 285 [ '-DBUILDING_RENAMERS', '-xmlout', xmltemp ] + \
8994c3c2
RD
286 ['-I'+dir, '-o', cpp_file, i_file]
287 msg(' '.join(cmd))
288 spawn(cmd)
289
290 # Next run build_renamers to process the XML
d14a1e28 291 cmd = [ sys.executable, '-u',
b0640a71 292 './distrib/build_renamers.py', dir, basefile, xmltemp]
d14a1e28
RD
293 msg(' '.join(cmd))
294 spawn(cmd)
b0640a71 295 os.remove(xmltemp)
d14a1e28
RD
296
297 # Then run swig for real
b0640a71
RD
298 cmd = [ swig_cmd ] + swig_args + ['-I'+dir, '-o', cpp_file,
299 '-xmlout', xml_file, i_file]
1e4a197e
RD
300 msg(' '.join(cmd))
301 spawn(cmd)
302
d14a1e28 303
1e4a197e
RD
304 # copy the generated python file to the package directory
305 copy_file(py_file, package, update=not force, verbose=0)
306
307 return sources
308
309
310
311def contrib_copy_tree(src, dest, verbose=0):
312 """Update local copies of wxWindows contrib files"""
313 from distutils.dir_util import mkpath, copy_tree
314
315 mkpath(dest, verbose=verbose)
316 copy_tree(src, dest, update=1, verbose=verbose)
317
318
319
320class smart_install_data(install_data):
321 def run(self):
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)
326
327
328def 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'))
331 for src in moFiles:
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)
336
337
338def 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):
341 for f in files:
342 filename = opj(dirname, f)
343 if not os.path.isdir(filename):
344 lst.append( (dirname, [filename]) )
345 file_list = []
346 os.path.walk(srcdir, walk_helper, file_list)
347 return file_list
348
349
1fded56b
RD
350def 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
353
354 def walk_helper(arg, dirname, files):
355 names = []
356 lst, wildcards = arg
357 for wc in wildcards:
358 for f in files:
359 filename = opj(dirname, f)
360 if fnmatch.fnmatch(filename, wc) and not os.path.isdir(filename):
361 names.append(filename)
362 if names:
363 lst.append( (dirname, names ) )
364
365 file_list = []
366 os.path.walk(srcdir, walk_helper, (file_list, wildcards))
367 return file_list
1e4a197e
RD
368
369
3ef86e32
RD
370def makeLibName(name):
371 if os.name == 'posix':
372 libname = '%s_%s-%s' % (WXBASENAME, name, WXRELEASE)
373 else:
3e46a8e6 374 libname = 'wxmsw%s%s_%s' % (WXDLLVER, libFlag(), name)
3ef86e32
RD
375
376 return [libname]
377
378
379
380def adjustCFLAGS(cflags, defines, includes):
d14a1e28 381 '''Extrace the raw -I, -D, and -U flags and put them into
3ef86e32
RD
382 defines and includes as needed.'''
383 newCFLAGS = []
384 for flag in cflags:
385 if flag[:2] == '-I':
386 includes.append(flag[2:])
387 elif flag[:2] == '-D':
388 flag = flag[2:]
389 if flag.find('=') == -1:
390 defines.append( (flag, None) )
391 else:
392 defines.append( tuple(flag.split('=')) )
393 elif flag[:2] == '-U':
394 defines.append( (flag[2:], ) )
395 else:
396 newCFLAGS.append(flag)
397 return newCFLAGS
398
399
400
401def adjustLFLAGS(lfags, libdirs, libs):
d14a1e28 402 '''Extrace the -L and -l flags and put them in libdirs and libs as needed'''
3ef86e32
RD
403 newLFLAGS = []
404 for flag in lflags:
405 if flag[:2] == '-L':
406 libdirs.append(flag[2:])
407 elif flag[:2] == '-l':
408 libs.append(flag[2:])
409 else:
410 newLFLAGS.append(flag)
411
412 return newLFLAGS
c8bc7bb8
RD
413
414#----------------------------------------------------------------------
415# sanity checks
416
c368d904 417if CORE_ONLY:
f221f8eb 418 BUILD_GLCANVAS = 0
c368d904
RD
419 BUILD_OGL = 0
420 BUILD_STC = 0
b166c703 421 BUILD_XRC = 0
ff5f1aba
RD
422 BUILD_GIZMOS = 0
423 BUILD_DLLWIDGET = 0
c731eb47 424 BUILD_IEWIN = 0
ff5f1aba 425
1e4a197e
RD
426if debug:
427 FINAL = 0
428 HYBRID = 0
c368d904 429
1e4a197e
RD
430if FINAL:
431 HYBRID = 0
c8bc7bb8 432
1e4a197e
RD
433if UNICODE and WXPORT not in ['msw', 'gtk2']:
434 raise SystemExit, "UNICODE mode not currently supported on this WXPORT: "+WXPORT
a541c325
RD
435
436
c368d904
RD
437#----------------------------------------------------------------------
438# Setup some platform specific stuff
439#----------------------------------------------------------------------
440
441if os.name == 'nt':
442 # Set compile flags and such for MSVC. These values are derived
a541c325
RD
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']
447 else:
448 msg("WARNING: WXWIN not set in environment.")
449 WXDIR = '..' # assumes in CVS tree
c368d904
RD
450 WXPLAT = '__WXMSW__'
451 GENDIR = 'msw'
452
d14a1e28
RD
453 includes = ['include', 'src',
454 opj(WXDIR, 'lib', 'vc_dll', 'msw' + libFlag()),
55c020cf 455 opj(WXDIR, 'include'),
5a2a9da2 456 opj(WXDIR, 'contrib', 'include'),
c368d904
RD
457 ]
458
1e4a197e 459 defines = [ ('WIN32', None),
c368d904 460 ('_WINDOWS', None),
c368d904
RD
461
462 (WXPLAT, None),
463 ('WXUSINGDLL', '1'),
464
465 ('SWIG_GLOBAL', None),
c368d904
RD
466 ('WXP_USE_THREAD', '1'),
467 ]
468
1e4a197e
RD
469 if UNDEF_NDEBUG:
470 defines.append( ('NDEBUG',) ) # using a 1-tuple makes it do an undef
22d08289 471
a3a2c5fe
RD
472 if HYBRID:
473 defines.append( ('__NO_VC_CRTDBG__', None) )
22d08289 474
c368d904
RD
475 if not FINAL or HYBRID:
476 defines.append( ('__WXDEBUG__', None) )
477
1e521887 478 libdirs = [ opj(WXDIR, 'lib', 'vc_dll') ]
0a67b751
RD
479 libs = [ 'wxbase' + WXDLLVER + libFlag(), # TODO: trim this down to what is really needed for the core
480 'wxbase' + WXDLLVER + libFlag() + '_net',
481 'wxbase' + WXDLLVER + libFlag() + '_xml',
482 makeLibName('core')[0],
483 makeLibName('adv')[0],
484 makeLibName('html')[0],
485 ]
a4fbdd76 486
22d08289 487 libs = libs + ['kernel32', 'user32', 'gdi32', 'comdlg32',
c368d904 488 'winspool', 'winmm', 'shell32', 'oldnames', 'comctl32',
1e4a197e 489 'odbc32', 'ole32', 'oleaut32', 'uuid', 'rpcrt4',
c368d904
RD
490 'advapi32', 'wsock32']
491
22d08289 492
d440a0e7 493 cflags = [ '/Gy',
ad07d019
RD
494 # '/GX-' # workaround for internal compiler error in MSVC on some machines
495 ]
c368d904
RD
496 lflags = None
497
1e4a197e 498 # Other MSVC flags...
1fded56b 499 # Too bad I don't remember why I was playing with these, can they be removed?
1e4a197e
RD
500 if FINAL:
501 pass #cflags = cflags + ['/O1']
502 elif HYBRID :
503 pass #cflags = cflags + ['/Ox']
504 else:
505 pass # cflags = cflags + ['/Od', '/Z7']
506 # lflags = ['/DEBUG', ]
22d08289
RD
507
508
22d08289 509
1e4a197e 510#----------------------------------------------------------------------
c368d904 511
3ef86e32 512elif os.name == 'posix':
d14a1e28
RD
513 WXDIR = '..'
514 includes = ['include', 'src']
e6056257
RD
515 defines = [('SWIG_GLOBAL', None),
516 ('HAVE_CONFIG_H', None),
517 ('WXP_USE_THREAD', '1'),
518 ]
1e4a197e
RD
519 if UNDEF_NDEBUG:
520 defines.append( ('NDEBUG',) ) # using a 1-tuple makes it do an undef
1e4a197e
RD
521
522 Verify_WX_CONFIG()
e6056257 523
3ef86e32
RD
524 libdirs = []
525 libs = []
526
f9b46bcb
RD
527 # If you get unresolved symbol errors on Solaris and are using gcc, then
528 # uncomment this block to add the right flags to the link step and build
529 # again.
530 ## if os.uname()[0] == 'SunOS':
531 ## libs.append('gcc')
532 ## libdirs.append(commands.getoutput("gcc -print-search-dirs | grep '^install' | awk '{print $2}'")[:-1])
533
e6056257 534 cflags = os.popen(WX_CONFIG + ' --cxxflags', 'r').read()[:-1]
1e4a197e 535 cflags = cflags.split()
ba201fa4
RD
536 if debug:
537 cflags.append('-g')
538 cflags.append('-O0')
8b9a4190
RD
539 else:
540 cflags.append('-O3')
e6056257
RD
541
542 lflags = os.popen(WX_CONFIG + ' --libs', 'r').read()[:-1]
1e4a197e 543 lflags = lflags.split()
e6056257 544
3ef86e32
RD
545 WXBASENAME = os.popen(WX_CONFIG + ' --basename').read()[:-1]
546 WXRELEASE = os.popen(WX_CONFIG + ' --release').read()[:-1]
547 WXPREFIX = os.popen(WX_CONFIG + ' --prefix').read()[:-1]
e6056257
RD
548
549
3ef86e32
RD
550 if sys.platform[:6] == "darwin":
551 # Flags and such for a Darwin (Max OS X) build of Python
552 WXPLAT = '__WXMAC__'
553 GENDIR = 'mac'
554 libs = ['stdc++']
555 NO_SCRIPTS = 1
c368d904 556
1e4a197e 557
3ef86e32
RD
558 else:
559 # Set flags for other Unix type platforms
560 GENDIR = WXPORT
561
562 if WXPORT == 'gtk':
563 WXPLAT = '__WXGTK__'
564 portcfg = os.popen('gtk-config --cflags', 'r').read()[:-1]
565 elif WXPORT == 'gtk2':
566 WXPLAT = '__WXGTK__'
567 GENDIR = 'gtk' # no code differences so use the same generated sources
568 portcfg = os.popen('pkg-config gtk+-2.0 --cflags', 'r').read()[:-1]
569 BUILD_BASE = BUILD_BASE + '-' + WXPORT
570 elif WXPORT == 'x11':
571 WXPLAT = '__WXX11__'
572 portcfg = ''
573 BUILD_BASE = BUILD_BASE + '-' + WXPORT
574 else:
575 raise SystemExit, "Unknown WXPORT value: " + WXPORT
1e4a197e 576
3ef86e32 577 cflags += portcfg.split()
1e4a197e 578
d14a1e28
RD
579 # Some distros (e.g. Mandrake) put libGLU in /usr/X11R6/lib, but
580 # wx-config doesn't output that for some reason. For now, just
581 # add it unconditionally but we should really check if the lib is
582 # really found there or wx-config should be fixed.
583 libdirs.append("/usr/X11R6/lib")
c368d904 584
1e4a197e 585
3ef86e32
RD
586 # Move the various -I, -D, etc. flags we got from the *config scripts
587 # into the distutils lists.
588 cflags = adjustCFLAGS(cflags, defines, includes)
589 lflags = adjustLFLAGS(lflags, libdirs, libs)
c368d904
RD
590
591
1e4a197e 592#----------------------------------------------------------------------
c368d904 593else:
1e4a197e
RD
594 raise 'Sorry Charlie, platform not supported...'
595
596
597#----------------------------------------------------------------------
1fded56b 598# post platform setup checks and tweaks, create the full version string
1e4a197e
RD
599#----------------------------------------------------------------------
600
601if UNICODE:
602 BUILD_BASE = BUILD_BASE + '.unicode'
1fded56b 603 VER_FLAGS += 'u'
c368d904
RD
604
605
1fded56b
RD
606VERSION = "%s.%s.%s.%s%s" % (VER_MAJOR, VER_MINOR, VER_RELEASE,
607 VER_SUBREL, VER_FLAGS)
608
c368d904 609#----------------------------------------------------------------------
1fded56b 610# Update the version file
c368d904
RD
611#----------------------------------------------------------------------
612
1fded56b
RD
613# Unconditionally updated since the version string can change based
614# on the UNICODE flag
615open('src/__version__.py', 'w').write("""\
616# This file was generated by setup.py...
617
d14a1e28
RD
618VERSION_STRING = '%(VERSION)s'
619MAJOR_VERSION = %(VER_MAJOR)s
620MINOR_VERSION = %(VER_MINOR)s
621RELEASE_VERSION = %(VER_RELEASE)s
622SUBREL_VERSION = %(VER_SUBREL)s
1fded56b 623
d14a1e28
RD
624VERSION = (MAJOR_VERSION, MINOR_VERSION, RELEASE_VERSION,
625 SUBREL_VERSION, '%(VER_FLAGS)s')
1fded56b 626
d14a1e28 627RELEASE_NUMBER = RELEASE_VERSION # for compatibility
1fded56b 628""" % globals())
1e4a197e 629
c368d904 630
1b62f00d
RD
631
632
c368d904 633#----------------------------------------------------------------------
1b62f00d 634# SWIG defaults
c368d904
RD
635#----------------------------------------------------------------------
636
d14a1e28 637swig_cmd = SWIG
c368d904 638swig_force = force
d14a1e28
RD
639swig_args = ['-c++',
640 '-Wall',
641 '-nodefault',
642
643## '-xml',
644
645 '-python',
646 '-keyword',
647 '-new_repr',
648 '-modern',
649
650 '-I./src',
651 '-D'+WXPLAT,
98fb9b71 652 '-noruntime'
e6056257 653 ]
a541c325 654if UNICODE:
c8bc7bb8
RD
655 swig_args.append('-DwxUSE_UNICODE')
656
d14a1e28
RD
657swig_deps = [ 'src/my_typemaps.i',
658 'src/common.swg',
659 'src/pyrun.swg',
660 ]
661
662depends = [ #'include/wx/wxPython/wxPython.h',
663 #'include/wx/wxPython/wxPython_int.h',
664 #'src/pyclasses.h',
665 ]
c368d904 666
c368d904 667
1b62f00d
RD
668#----------------------------------------------------------------------
669# Define the CORE extension module
670#----------------------------------------------------------------------
671
1e4a197e 672msg('Preparing CORE...')
d14a1e28
RD
673swig_sources = run_swig(['core.i'], 'src', GENDIR, PKGDIR,
674 USE_SWIG, swig_force, swig_args, swig_deps +
1e0c8722
RD
675 [ 'src/_accel.i',
676 'src/_app.i',
d14a1e28
RD
677 'src/_app_ex.py',
678 'src/_constraints.i',
679 'src/_core_api.i',
680 'src/_core_ex.py',
681 'src/_core_rename.i',
682 'src/_core_reverse.txt',
683 'src/_defs.i',
684 'src/_event.i',
685 'src/_event_ex.py',
686 'src/_evthandler.i',
687 'src/_filesys.i',
688 'src/_gdicmn.i',
689 'src/_image.i',
690 'src/_menu.i',
691 'src/_obj.i',
692 'src/_sizers.i',
693 'src/_gbsizer.i',
694 'src/_streams.i',
695 'src/_validator.i',
696 'src/_window.i',
697 ])
1b62f00d 698
1e4a197e
RD
699copy_file('src/__init__.py', PKGDIR, update=1, verbose=0)
700copy_file('src/__version__.py', PKGDIR, update=1, verbose=0)
1b62f00d
RD
701
702
d14a1e28
RD
703# update the license files
704mkpath('licence')
705for file in ['preamble.txt', 'licence.txt', 'licendoc.txt', 'lgpl.txt']:
706 copy_file(opj(WXDIR, 'docs', file), opj('licence',file), update=1, verbose=0)
c368d904 707
c368d904 708
1e4a197e
RD
709if os.name == 'nt':
710 build_locale_dir(opj(PKGDIR, 'locale'))
711 DATA_FILES += build_locale_list(opj(PKGDIR, 'locale'))
4f3449b4
RD
712
713
1e4a197e
RD
714if os.name == 'nt':
715 rc_file = ['src/wxc.rc']
716else:
717 rc_file = []
718
719
d14a1e28
RD
720ext = Extension('_core', ['src/helpers.cpp',
721 'src/libpy.c',
1e4a197e
RD
722 ] + rc_file + swig_sources,
723
724 include_dirs = includes,
725 define_macros = defines,
726
727 library_dirs = libdirs,
728 libraries = libs,
729
730 extra_compile_args = cflags,
731 extra_link_args = lflags,
d14a1e28
RD
732
733 depends = depends
1e4a197e
RD
734 )
735wxpExtensions.append(ext)
736
737
d14a1e28
RD
738
739
740
741# Extension for the GDI module
742swig_sources = run_swig(['gdi.i'], 'src', GENDIR, PKGDIR,
743 USE_SWIG, swig_force, swig_args, swig_deps +
744 ['src/_gdi_rename.i',
745 'src/_bitmap.i', 'src/_brush.i',
746 'src/_colour.i', 'src/_cursor.i',
747 'src/_dc.i', 'src/_font.i',
748 'src/_gdiobj.i', 'src/_icon.i',
749 'src/_imaglist.i', 'src/_pen.i',
750 'src/_region.i', 'src/_palette.i',
dd9f7fea 751 'src/_stockobjs.i',
d14a1e28
RD
752 'src/_effects.i',
753 'src/_intl.i',
754 'src/_intl_ex.py',
755 ])
756ext = Extension('_gdi', ['src/drawlist.cpp'] + swig_sources,
1e4a197e
RD
757 include_dirs = includes,
758 define_macros = defines,
759 library_dirs = libdirs,
760 libraries = libs,
761 extra_compile_args = cflags,
762 extra_link_args = lflags,
d14a1e28 763 depends = depends
1e4a197e
RD
764 )
765wxpExtensions.append(ext)
766
767
d14a1e28
RD
768
769
770
771
772# Extension for the windows module
773swig_sources = run_swig(['windows.i'], 'src', GENDIR, PKGDIR,
774 USE_SWIG, swig_force, swig_args, swig_deps +
775 ['src/_windows_rename.i', 'src/_windows_reverse.txt',
776 'src/_panel.i',
d14a1e28
RD
777 'src/_toplvl.i', 'src/_statusbar.i',
778 'src/_splitter.i', 'src/_sashwin.i',
779 'src/_popupwin.i', 'src/_tipwin.i',
780 'src/_vscroll.i', 'src/_taskbar.i',
781 'src/_cmndlgs.i', 'src/_mdi.i',
782 'src/_pywindows.i', 'src/_printfw.i',
783 ])
784ext = Extension('_windows', swig_sources,
1e4a197e
RD
785 include_dirs = includes,
786 define_macros = defines,
787 library_dirs = libdirs,
788 libraries = libs,
789 extra_compile_args = cflags,
790 extra_link_args = lflags,
d14a1e28 791 depends = depends
1e4a197e
RD
792 )
793wxpExtensions.append(ext)
794
795
d14a1e28
RD
796
797
798# Extension for the controls module
799swig_sources = run_swig(['controls.i'], 'src', GENDIR, PKGDIR,
800 USE_SWIG, swig_force, swig_args, swig_deps +
801 [ 'src/_controls_rename.i', 'src/_controls_reverse.txt',
802 'src/_control.i', 'src/_toolbar.i',
803 'src/_button.i', 'src/_checkbox.i',
804 'src/_choice.i', 'src/_combobox.i',
805 'src/_gauge.i', 'src/_statctrls.i',
806 'src/_listbox.i', 'src/_textctrl.i',
807 'src/_scrolbar.i', 'src/_spin.i',
808 'src/_radio.i', 'src/_slider.i',
809 'src/_tglbtn.i', 'src/_notebook.i',
810 'src/_listctrl.i', 'src/_treectrl.i',
811 'src/_dirctrl.i', 'src/_pycontrol.i',
dd9f7fea 812 'src/_cshelp.i', 'src/_dragimg.i',
d14a1e28
RD
813 ])
814ext = Extension('_controls', swig_sources,
815 include_dirs = includes,
816 define_macros = defines,
817 library_dirs = libdirs,
818 libraries = libs,
819 extra_compile_args = cflags,
820 extra_link_args = lflags,
821 depends = depends
822 )
823wxpExtensions.append(ext)
824
825
826
827
828# Extension for the misc module
829swig_sources = run_swig(['misc.i'], 'src', GENDIR, PKGDIR,
830 USE_SWIG, swig_force, swig_args, swig_deps +
831 [ 'src/_settings.i', 'src/_functions.i',
832 'src/_misc.i', 'src/_tipdlg.i',
833 'src/_timer.i', 'src/_log.i',
834 'src/_process.i', 'src/_joystick.i',
78862f24 835 'src/_sound.i', 'src/_mimetype.i',
d14a1e28
RD
836 'src/_artprov.i', 'src/_config.i',
837 'src/_datetime.i', 'src/_dataobj.i',
838 'src/_dnd.i',
839 'src/_clipbrd.i',
840 ])
841ext = Extension('_misc', swig_sources,
842 include_dirs = includes,
843 define_macros = defines,
844 library_dirs = libdirs,
845 libraries = libs,
846 extra_compile_args = cflags,
847 extra_link_args = lflags,
848 depends = depends
849 )
850wxpExtensions.append(ext)
851
852
853
854##
855## Core modules that are not in the "core" namespace start here
856##
857
1e4a197e
RD
858swig_sources = run_swig(['calendar.i'], 'src', GENDIR, PKGDIR,
859 USE_SWIG, swig_force, swig_args, swig_deps)
d14a1e28
RD
860ext = Extension('_calendar', swig_sources,
861 include_dirs = includes,
862 define_macros = defines,
863 library_dirs = libdirs,
864 libraries = libs,
865 extra_compile_args = cflags,
866 extra_link_args = lflags,
867 depends = depends
868 )
869wxpExtensions.append(ext)
870
871
872swig_sources = run_swig(['grid.i'], 'src', GENDIR, PKGDIR,
873 USE_SWIG, swig_force, swig_args, swig_deps)
874ext = Extension('_grid', swig_sources,
1e4a197e
RD
875 include_dirs = includes,
876 define_macros = defines,
877 library_dirs = libdirs,
878 libraries = libs,
879 extra_compile_args = cflags,
880 extra_link_args = lflags,
d14a1e28 881 depends = depends
1e4a197e
RD
882 )
883wxpExtensions.append(ext)
884
885
d14a1e28
RD
886
887swig_sources = run_swig(['html.i'], 'src', GENDIR, PKGDIR,
1e4a197e 888 USE_SWIG, swig_force, swig_args, swig_deps)
d14a1e28 889ext = Extension('_html', swig_sources,
1e4a197e
RD
890 include_dirs = includes,
891 define_macros = defines,
892 library_dirs = libdirs,
893 libraries = libs,
894 extra_compile_args = cflags,
895 extra_link_args = lflags,
d14a1e28 896 depends = depends
1e4a197e
RD
897 )
898wxpExtensions.append(ext)
899
900
d14a1e28 901
1e4a197e
RD
902swig_sources = run_swig(['wizard.i'], 'src', GENDIR, PKGDIR,
903 USE_SWIG, swig_force, swig_args, swig_deps)
d14a1e28 904ext = Extension('_wizard', swig_sources,
1e4a197e
RD
905 include_dirs = includes,
906 define_macros = defines,
907 library_dirs = libdirs,
908 libraries = libs,
909 extra_compile_args = cflags,
910 extra_link_args = lflags,
d14a1e28 911 depends = depends
1e4a197e
RD
912 )
913wxpExtensions.append(ext)
af83019e
RD
914
915
d14a1e28
RD
916
917
918
c368d904
RD
919#----------------------------------------------------------------------
920# Define the GLCanvas extension module
921#----------------------------------------------------------------------
922
1e4a197e 923if BUILD_GLCANVAS:
cfe766c3 924 msg('Preparing GLCANVAS...')
c368d904 925 location = 'contrib/glcanvas'
c368d904 926
d14a1e28 927 swig_sources = run_swig(['glcanvas.i'], location, GENDIR, PKGDIR,
10ef30eb 928 USE_SWIG, swig_force, swig_args, swig_deps)
c368d904
RD
929
930 gl_libs = []
931 if os.name == 'posix':
f32afe1c 932 gl_config = os.popen(WX_CONFIG + ' --gl-libs', 'r').read()[:-1]
1e4a197e 933 gl_lflags = gl_config.split() + lflags
f32afe1c 934 gl_libs = libs
19cf4f80 935 else:
3e46a8e6 936 gl_libs = libs + ['opengl32', 'glu32'] + makeLibName('gl')
f32afe1c 937 gl_lflags = lflags
c368d904 938
d14a1e28 939 ext = Extension('_glcanvas',
3e46a8e6 940 swig_sources,
1e7ecb7b
RD
941
942 include_dirs = includes,
943 define_macros = defines,
944
945 library_dirs = libdirs,
f32afe1c 946 libraries = gl_libs,
1e7ecb7b
RD
947
948 extra_compile_args = cflags,
f32afe1c 949 extra_link_args = gl_lflags,
1e7ecb7b
RD
950 )
951
952 wxpExtensions.append(ext)
c368d904
RD
953
954
955#----------------------------------------------------------------------
956# Define the OGL extension module
957#----------------------------------------------------------------------
958
1e4a197e 959if BUILD_OGL:
cfe766c3 960 msg('Preparing OGL...')
c368d904 961 location = 'contrib/ogl'
c368d904 962
a32360e0 963 swig_sources = run_swig(['ogl.i'], location, GENDIR, PKGDIR,
d14a1e28
RD
964 USE_SWIG, swig_force, swig_args, swig_deps +
965 [ '%s/_oglbasic.i' % location,
966 '%s/_oglshapes.i' % location,
967 '%s/_oglshapes2.i' % location,
968 '%s/_oglcanvas.i' % location,
969 '%s/_ogldefs.i' % location,
970 ])
c368d904 971
d14a1e28 972 ext = Extension('_ogl',
3ef86e32 973 swig_sources,
1e7ecb7b 974
a32360e0 975 include_dirs = includes + [ location ],
dd116e73 976 define_macros = defines + [('wxUSE_DEPRECATED', '0')],
1e7ecb7b
RD
977
978 library_dirs = libdirs,
3ef86e32 979 libraries = libs + makeLibName('ogl'),
1e7ecb7b
RD
980
981 extra_compile_args = cflags,
982 extra_link_args = lflags,
983 )
984
985 wxpExtensions.append(ext)
986
987
c368d904
RD
988
989#----------------------------------------------------------------------
990# Define the STC extension module
991#----------------------------------------------------------------------
992
1e4a197e 993if BUILD_STC:
cfe766c3 994 msg('Preparing STC...')
c368d904 995 location = 'contrib/stc'
5a2a9da2
RD
996 if os.name == 'nt':
997 STC_H = opj(WXDIR, 'contrib', 'include/wx/stc')
998 else:
999 STC_H = opj(WXPREFIX, 'include/wx/stc')
55c020cf 1000
de7b7fe6 1001## NOTE: need to add something like this to the stc.bkl...
55c020cf 1002
3ef86e32
RD
1003## # Check if gen_iface needs to be run for the wxSTC sources
1004## if (newer(opj(CTRB_SRC, 'stc/stc.h.in'), opj(CTRB_INC, 'stc/stc.h' )) or
1005## newer(opj(CTRB_SRC, 'stc/stc.cpp.in'), opj(CTRB_SRC, 'stc/stc.cpp')) or
1006## newer(opj(CTRB_SRC, 'stc/gen_iface.py'), opj(CTRB_SRC, 'stc/stc.cpp'))):
55c020cf 1007
3ef86e32
RD
1008## msg('Running gen_iface.py, regenerating stc.h and stc.cpp...')
1009## cwd = os.getcwd()
1010## os.chdir(opj(CTRB_SRC, 'stc'))
1011## sys.path.insert(0, os.curdir)
1012## import gen_iface
1013## gen_iface.main([])
1014## os.chdir(cwd)
c368d904
RD
1015
1016
d14a1e28 1017 swig_sources = run_swig(['stc.i'], location, '', PKGDIR,
c368d904
RD
1018 USE_SWIG, swig_force,
1019 swig_args + ['-I'+STC_H, '-I'+location],
10ef30eb 1020 [opj(STC_H, 'stc.h')] + swig_deps)
c368d904 1021
d14a1e28 1022 ext = Extension('_stc',
3ef86e32
RD
1023 swig_sources,
1024
1025 include_dirs = includes,
1026 define_macros = defines,
1e7ecb7b
RD
1027
1028 library_dirs = libdirs,
3ef86e32 1029 libraries = libs + makeLibName('stc'),
c368d904 1030
1e7ecb7b
RD
1031 extra_compile_args = cflags,
1032 extra_link_args = lflags,
1033 )
1034
1035 wxpExtensions.append(ext)
c368d904
RD
1036
1037
1038
926bb76c
RD
1039#----------------------------------------------------------------------
1040# Define the IEWIN extension module (experimental)
1041#----------------------------------------------------------------------
1042
1e4a197e 1043if BUILD_IEWIN:
cfe766c3 1044 msg('Preparing IEWIN...')
926bb76c
RD
1045 location = 'contrib/iewin'
1046
1047 swig_files = ['iewin.i', ]
1048
1049 swig_sources = run_swig(swig_files, location, '', PKGDIR,
10ef30eb 1050 USE_SWIG, swig_force, swig_args, swig_deps)
926bb76c
RD
1051
1052
de7b7fe6 1053 ext = Extension('_iewin', ['%s/IEHtmlWin.cpp' % location,
c731eb47 1054 '%s/wxactivex.cpp' % location,
926bb76c
RD
1055 ] + swig_sources,
1056
1057 include_dirs = includes,
1058 define_macros = defines,
1059
1060 library_dirs = libdirs,
1061 libraries = libs,
1062
1063 extra_compile_args = cflags,
1064 extra_link_args = lflags,
1065 )
1066
1067 wxpExtensions.append(ext)
1068
1069
d56cebe7
RD
1070#----------------------------------------------------------------------
1071# Define the XRC extension module
1072#----------------------------------------------------------------------
1073
1e4a197e 1074if BUILD_XRC:
cfe766c3 1075 msg('Preparing XRC...')
d56cebe7 1076 location = 'contrib/xrc'
d56cebe7 1077
d14a1e28
RD
1078 swig_sources = run_swig(['xrc.i'], location, '', PKGDIR,
1079 USE_SWIG, swig_force, swig_args, swig_deps +
1080 [ '%s/_xrc_rename.i' % location,
1081 '%s/_xrc_ex.py' % location,
1082 '%s/_xmlres.i' % location,
1083 '%s/_xmlsub.i' % location,
1084 '%s/_xml.i' % location,
1085 '%s/_xmlhandler.i' % location,
1086 ])
1087
1088 ext = Extension('_xrc',
3ef86e32 1089 swig_sources,
1fded56b 1090
3ef86e32 1091 include_dirs = includes,
d56cebe7
RD
1092 define_macros = defines,
1093
1094 library_dirs = libdirs,
3ef86e32 1095 libraries = libs + makeLibName('xrc'),
d56cebe7
RD
1096
1097 extra_compile_args = cflags,
1098 extra_link_args = lflags,
1099 )
1100
1101 wxpExtensions.append(ext)
1102
1103
1104
ebf4302c
RD
1105#----------------------------------------------------------------------
1106# Define the GIZMOS extension module
1107#----------------------------------------------------------------------
1108
1e4a197e 1109if BUILD_GIZMOS:
ebf4302c
RD
1110 msg('Preparing GIZMOS...')
1111 location = 'contrib/gizmos'
ebf4302c 1112
a32360e0 1113 swig_sources = run_swig(['gizmos.i'], location, GENDIR, PKGDIR,
10ef30eb 1114 USE_SWIG, swig_force, swig_args, swig_deps)
ebf4302c 1115
d14a1e28 1116 ext = Extension('_gizmos',
d84a9306 1117 [ '%s/treelistctrl.cpp' % location ] + swig_sources,
ebf4302c 1118
a32360e0 1119 include_dirs = includes + [ location ],
ebf4302c
RD
1120 define_macros = defines,
1121
1122 library_dirs = libdirs,
3ef86e32 1123 libraries = libs + makeLibName('gizmos'),
ebf4302c
RD
1124
1125 extra_compile_args = cflags,
1126 extra_link_args = lflags,
1127 )
1128
1129 wxpExtensions.append(ext)
1130
1131
1132
4a61305d
RD
1133#----------------------------------------------------------------------
1134# Define the DLLWIDGET extension module
1135#----------------------------------------------------------------------
1136
1e4a197e 1137if BUILD_DLLWIDGET:
4a61305d
RD
1138 msg('Preparing DLLWIDGET...')
1139 location = 'contrib/dllwidget'
1140 swig_files = ['dllwidget_.i']
1141
1142 swig_sources = run_swig(swig_files, location, '', PKGDIR,
10ef30eb 1143 USE_SWIG, swig_force, swig_args, swig_deps)
4a61305d
RD
1144
1145 # copy a contrib project specific py module to the main package dir
1146 copy_file(opj(location, 'dllwidget.py'), PKGDIR, update=1, verbose=0)
1147
1148 ext = Extension('dllwidget_c', [
1149 '%s/dllwidget.cpp' % location,
1150 ] + swig_sources,
1151
1152 include_dirs = includes,
1153 define_macros = defines,
1154
1155 library_dirs = libdirs,
1156 libraries = libs,
1157
1158 extra_compile_args = cflags,
1159 extra_link_args = lflags,
1160 )
1161
1162 wxpExtensions.append(ext)
1163
1164
1e4a197e
RD
1165
1166
1167#----------------------------------------------------------------------
1168# Tools and scripts
1169#----------------------------------------------------------------------
8916d007 1170
2eb31f8b
RD
1171if NO_SCRIPTS:
1172 SCRIPTS = None
1173else:
1e4a197e
RD
1174 SCRIPTS = [opj('scripts/helpviewer'),
1175 opj('scripts/img2png'),
2eb31f8b
RD
1176 opj('scripts/img2xpm'),
1177 opj('scripts/img2py'),
1178 opj('scripts/xrced'),
1179 opj('scripts/pyshell'),
1180 opj('scripts/pycrust'),
1fded56b
RD
1181 opj('scripts/pywrap'),
1182 opj('scripts/pywrap'),
1183 opj('scripts/pyalacarte'),
1184 opj('scripts/pyalamode'),
2eb31f8b 1185 ]
4a61305d 1186
926bb76c 1187
c2079460
RD
1188DATA_FILES += find_data_files('wx/tools/XRCed', '*.txt', '*.xrc')
1189DATA_FILES += find_data_files('wx/py', '*.txt', '*.ico', '*.css', '*.html')
1fded56b 1190DATA_FILES += find_data_files('wx', '*.txt', '*.css', '*.html')
1e4a197e
RD
1191
1192
c368d904
RD
1193#----------------------------------------------------------------------
1194# Do the Setup/Build/Install/Whatever
1195#----------------------------------------------------------------------
1196
1b62f00d 1197if __name__ == "__main__":
1e4a197e 1198 if not PREP_ONLY:
d14a1e28 1199 setup(name = 'wxPython',
1b62f00d
RD
1200 version = VERSION,
1201 description = DESCRIPTION,
1202 long_description = LONG_DESCRIPTION,
1203 author = AUTHOR,
1204 author_email = AUTHOR_EMAIL,
1205 url = URL,
851d4ac7 1206 download_url = DOWNLOAD_URL,
e2e02194 1207 license = LICENSE,
851d4ac7
RD
1208 platforms = PLATFORMS,
1209 classifiers = filter(None, CLASSIFIERS.split("\n")),
1210 keywords = KEYWORDS,
d14a1e28 1211
1fded56b
RD
1212 packages = ['wxPython',
1213 'wxPython.lib',
1214 'wxPython.lib.colourchooser',
1215 'wxPython.lib.editor',
1216 'wxPython.lib.mixins',
1fded56b 1217 'wxPython.tools',
1fded56b
RD
1218
1219 'wx',
1220 'wx.lib',
1221 'wx.lib.colourchooser',
1222 'wx.lib.editor',
1223 'wx.lib.mixins',
1224 'wx.py',
1225 'wx.tools',
1226 'wx.tools.XRCed',
1b62f00d
RD
1227 ],
1228
1229 ext_package = PKGDIR,
1230 ext_modules = wxpExtensions,
8916d007 1231
f6f98ecc 1232 options = { 'build' : { 'build_base' : BUILD_BASE }},
a541c325 1233
b817523b 1234 scripts = SCRIPTS,
c368d904 1235
1e4a197e
RD
1236 cmdclass = { 'install_data': smart_install_data},
1237 data_files = DATA_FILES,
8916d007 1238
1b62f00d 1239 )
c368d904 1240
c368d904 1241
c368d904
RD
1242#----------------------------------------------------------------------
1243#----------------------------------------------------------------------