]> git.saurik.com Git - wxWidgets.git/blame - wxPython/setup.py
now we don't only show label mnemonics but they also work
[wxWidgets.git] / wxPython / setup.py
CommitLineData
c368d904
RD
1#!/usr/bin/env python
2#----------------------------------------------------------------------
1128a89b
RD
3# Name: setup.py
4# Purpose: Distutils script for building wxPython
5#
6# Author: Robin Dunn
7#
8# Created: 12-Oct-2000
9# RCS-ID: $Id$
10# Copyright: (c) 2000 by Total Control Software
11# Licence: wxWindows license
1e4a197e
RD
12#----------------------------------------------------------------------
13
f35d1a03 14import sys, os
e6056257 15
e6056257 16
1128a89b
RD
17# The full contents of the wx.build.config module used to be located
18# here in setup.py. They were split into a separate module so it will
19# be installed with wxPython and can then be used by the build scripts
80050aa1
DS
20# of other extension modules that wish to be wxPython compatible.
21# The split is still fairly new and hasn't been tested by building
1128a89b
RD
22# third-party extensions yet, so expect some things to still shift
23# back and forth, and also more stuff in config.py will get converted
24# to functions, etc.
e6056257 25
8f8c4b40
RD
26# This script imports it as just "config" because if wxPython doesn't
27# exist yet, then it can't be imported from wx.build.config (since
28# wx._core doesn't exist yet.) So instead we keep the main copy of
29# config .py in the same place as setup.py, and then copy it to
30# wx/build as needed below.
31
f35d1a03
RD
32# To fully support external builds, we need to have a build options
33# file that is created whenever a new wxPython build is performed.
80050aa1
DS
34# We happen to be doing that here in this script, so make sure to
35# remove the build_options.py file, so that config.py will recreate it.
f35d1a03 36
02b800ce
RD
37for bo_name in ["build_options.py", "build_options.pyc"]:
38 if os.path.exists(bo_name):
39 os.remove(bo_name)
f35d1a03 40
1128a89b 41sys.setup_is_main = __name__ == "__main__" # an icky hack!
8f8c4b40
RD
42from config import *
43
44
45#----------------------------------------------------------------------
46# Update the packaged config file.
47#----------------------------------------------------------------------
c368d904 48
8f8c4b40 49copy_file('config.py', 'wx/build', update=1, verbose=1)
f35d1a03 50copy_file('build_options.py', 'wx/build', update=1, verbose=1)
8f8c4b40 51CLEANUP.append('wx/build/config.py')
f35d1a03 52CLEANUP.append('wx/build/build_options.py')
c368d904 53
c368d904 54#----------------------------------------------------------------------
1fded56b 55# Update the version file
c368d904
RD
56#----------------------------------------------------------------------
57
1128a89b
RD
58# The version file is unconditionally updated every time setup.py is
59# run since the version string can change based on the UNICODE flag
60
e83135b2 61open('wx/__version__.py', 'w').write("""\
1fded56b
RD
62# This file was generated by setup.py...
63
d14a1e28
RD
64VERSION_STRING = '%(VERSION)s'
65MAJOR_VERSION = %(VER_MAJOR)s
66MINOR_VERSION = %(VER_MINOR)s
67RELEASE_VERSION = %(VER_RELEASE)s
68SUBREL_VERSION = %(VER_SUBREL)s
1fded56b 69
d14a1e28 70VERSION = (MAJOR_VERSION, MINOR_VERSION, RELEASE_VERSION,
e83135b2 71 SUBREL_VERSION, '%(VER_FLAGS)s')
1fded56b 72
d14a1e28 73RELEASE_NUMBER = RELEASE_VERSION # for compatibility
1fded56b 74""" % globals())
1e4a197e 75
99abd512 76CLEANUP.append('wx/__version__.py')
c368d904 77
1b62f00d 78
1ea8df6e
RD
79#----------------------------------------------------------------------
80# Write the SWIG version to a header file
81#----------------------------------------------------------------------
82
83if USE_SWIG:
84 try:
85 # It may come on either stdout or stderr, depending on the
86 # version, so read both.
87 i, o, e = os.popen3(SWIG + ' -version', 't')
88 stext = o.read() + e.read()
89 import re
90 match = re.search(r'[0-9]+\.[0-9]+\.[0-9]+$', stext, re.MULTILINE)
91 if not match:
92 raise 'NotFound'
93 SVER = match.group(0)
94 open('include/wx/wxPython/swigver.h', 'w').write('''\
95// This file was generated by setup.py
96
97#define wxPy_SWIG_VERSION "SWIG-%s"
98''' % SVER)
99 msg('Using SWIG-' + SVER)
100
101 except:
102 msg('\nUnable to get SWIG version number\n')
103
104
41e8a69c
RD
105#----------------------------------------------------------------------
106# patch distutils if it can't cope with the "classifiers" or
107# "download_url" keywords
108#----------------------------------------------------------------------
109
110if sys.version < '2.2.3':
111 from distutils.dist import DistributionMetadata
112 DistributionMetadata.classifiers = None
113 DistributionMetadata.download_url = None
114 depends = {}
115else:
116 depends = {'depends' : depends}
117
118
1b62f00d
RD
119#----------------------------------------------------------------------
120# Define the CORE extension module
121#----------------------------------------------------------------------
122
1e4a197e 123msg('Preparing CORE...')
d14a1e28
RD
124swig_sources = run_swig(['core.i'], 'src', GENDIR, PKGDIR,
125 USE_SWIG, swig_force, swig_args, swig_deps +
1e0c8722
RD
126 [ 'src/_accel.i',
127 'src/_app.i',
d14a1e28
RD
128 'src/_app_ex.py',
129 'src/_constraints.i',
130 'src/_core_api.i',
131 'src/_core_ex.py',
54f9ee45
RD
132 'src/__core_rename.i',
133 'src/__core_reverse.txt',
d14a1e28
RD
134 'src/_defs.i',
135 'src/_event.i',
136 'src/_event_ex.py',
38b97c15 137 'src/_evtloop.i',
d14a1e28
RD
138 'src/_evthandler.i',
139 'src/_filesys.i',
140 'src/_gdicmn.i',
141 'src/_image.i',
142 'src/_menu.i',
143 'src/_obj.i',
144 'src/_sizers.i',
145 'src/_gbsizer.i',
146 'src/_streams.i',
147 'src/_validator.i',
148 'src/_window.i',
99abd512 149 'src/_control.i',
10694396 150 'src/_swigtype.i',
54f9ee45
RD
151 ],
152 True)
1b62f00d 153
1e4a197e 154copy_file('src/__init__.py', PKGDIR, update=1, verbose=0)
99abd512 155CLEANUP.append(opj(PKGDIR, '__init__.py'))
1b62f00d
RD
156
157
d14a1e28
RD
158# update the license files
159mkpath('licence')
160for file in ['preamble.txt', 'licence.txt', 'licendoc.txt', 'lgpl.txt']:
161 copy_file(opj(WXDIR, 'docs', file), opj('licence',file), update=1, verbose=0)
99abd512
RD
162 CLEANUP.append(opj('licence',file))
163CLEANUP.append('licence')
c368d904 164
c368d904 165
1e4a197e
RD
166if os.name == 'nt':
167 build_locale_dir(opj(PKGDIR, 'locale'))
168 DATA_FILES += build_locale_list(opj(PKGDIR, 'locale'))
4f3449b4
RD
169
170
1e4a197e
RD
171if os.name == 'nt':
172 rc_file = ['src/wxc.rc']
173else:
174 rc_file = []
175
176
54f9ee45 177ext = Extension('_core_', ['src/helpers.cpp',
54f9ee45 178 ] + rc_file + swig_sources,
1e4a197e
RD
179
180 include_dirs = includes,
181 define_macros = defines,
182
183 library_dirs = libdirs,
184 libraries = libs,
185
186 extra_compile_args = cflags,
187 extra_link_args = lflags,
d14a1e28 188
41e8a69c 189 **depends
1e4a197e
RD
190 )
191wxpExtensions.append(ext)
192
193
d14a1e28
RD
194
195
196
197# Extension for the GDI module
198swig_sources = run_swig(['gdi.i'], 'src', GENDIR, PKGDIR,
199 USE_SWIG, swig_force, swig_args, swig_deps +
54f9ee45 200 ['src/__gdi_rename.i',
99abd512
RD
201 'src/_bitmap.i',
202 'src/_colour.i',
203 'src/_dc.i',
204 'src/_gdiobj.i',
205 'src/_imaglist.i',
206 'src/_region.i',
207 'src/_stockobjs.i',
d14a1e28 208 'src/_effects.i',
99abd512
RD
209 'src/_intl.i',
210 'src/_intl_ex.py',
211 'src/_brush.i',
212 'src/_cursor.i',
213 'src/_font.i',
214 'src/_icon.i',
215 'src/_pen.i',
216 'src/_palette.i',
c95499b9 217 'src/_renderer.i',
54f9ee45
RD
218 ],
219 True)
220ext = Extension('_gdi_', ['src/drawlist.cpp'] + swig_sources,
1e4a197e
RD
221 include_dirs = includes,
222 define_macros = defines,
223 library_dirs = libdirs,
224 libraries = libs,
225 extra_compile_args = cflags,
226 extra_link_args = lflags,
41e8a69c 227 **depends
1e4a197e
RD
228 )
229wxpExtensions.append(ext)
230
231
d14a1e28
RD
232
233
234
235
236# Extension for the windows module
237swig_sources = run_swig(['windows.i'], 'src', GENDIR, PKGDIR,
238 USE_SWIG, swig_force, swig_args, swig_deps +
54f9ee45
RD
239 ['src/__windows_rename.i',
240 'src/__windows_reverse.txt',
d14a1e28 241 'src/_panel.i',
99abd512
RD
242 'src/_toplvl.i',
243 'src/_statusbar.i',
244 'src/_splitter.i',
245 'src/_sashwin.i',
246 'src/_popupwin.i',
247 'src/_tipwin.i',
248 'src/_vscroll.i',
249 'src/_taskbar.i',
250 'src/_cmndlgs.i',
251 'src/_mdi.i',
252 'src/_pywindows.i',
253 'src/_printfw.i',
54f9ee45
RD
254 ],
255 True)
256ext = Extension('_windows_', swig_sources,
1e4a197e
RD
257 include_dirs = includes,
258 define_macros = defines,
259 library_dirs = libdirs,
260 libraries = libs,
261 extra_compile_args = cflags,
262 extra_link_args = lflags,
41e8a69c 263 **depends
1e4a197e
RD
264 )
265wxpExtensions.append(ext)
266
267
d14a1e28
RD
268
269
270# Extension for the controls module
271swig_sources = run_swig(['controls.i'], 'src', GENDIR, PKGDIR,
272 USE_SWIG, swig_force, swig_args, swig_deps +
54f9ee45
RD
273 [ 'src/__controls_rename.i',
274 'src/__controls_reverse.txt',
cf636c45 275 'src/_toolbar.i',
99abd512
RD
276 'src/_button.i',
277 'src/_checkbox.i',
278 'src/_choice.i',
279 'src/_combobox.i',
280 'src/_gauge.i',
281 'src/_statctrls.i',
282 'src/_listbox.i',
283 'src/_textctrl.i',
284 'src/_scrolbar.i',
285 'src/_spin.i',
286 'src/_radio.i',
287 'src/_slider.i',
288 'src/_tglbtn.i',
289 'src/_notebook.i',
290 'src/_listctrl.i',
291 'src/_treectrl.i',
292 'src/_dirctrl.i',
293 'src/_pycontrol.i',
294 'src/_cshelp.i',
295 'src/_dragimg.i',
b3b61cda 296 'src/_datectrl.i',
54f9ee45
RD
297 ],
298 True)
299ext = Extension('_controls_', swig_sources,
d14a1e28
RD
300 include_dirs = includes,
301 define_macros = defines,
302 library_dirs = libdirs,
303 libraries = libs,
304 extra_compile_args = cflags,
305 extra_link_args = lflags,
41e8a69c 306 **depends
d14a1e28
RD
307 )
308wxpExtensions.append(ext)
309
310
311
312
313# Extension for the misc module
314swig_sources = run_swig(['misc.i'], 'src', GENDIR, PKGDIR,
315 USE_SWIG, swig_force, swig_args, swig_deps +
54f9ee45
RD
316 [ 'src/__misc_rename.i',
317 'src/__misc_reverse.txt',
318 'src/_settings.i',
99abd512
RD
319 'src/_functions.i',
320 'src/_misc.i',
321 'src/_tipdlg.i',
322 'src/_timer.i',
323 'src/_log.i',
324 'src/_process.i',
325 'src/_joystick.i',
326 'src/_sound.i',
327 'src/_mimetype.i',
328 'src/_artprov.i',
329 'src/_config.i',
330 'src/_datetime.i',
331 'src/_dataobj.i',
332 'src/_dnd.i',
333 'src/_display.i',
d14a1e28 334 'src/_clipbrd.i',
53112743 335 'src/_stdpaths.i',
54f9ee45
RD
336 ],
337 True)
338ext = Extension('_misc_', swig_sources,
d14a1e28
RD
339 include_dirs = includes,
340 define_macros = defines,
341 library_dirs = libdirs,
342 libraries = libs,
343 extra_compile_args = cflags,
344 extra_link_args = lflags,
41e8a69c 345 **depends
d14a1e28
RD
346 )
347wxpExtensions.append(ext)
348
349
350
351##
352## Core modules that are not in the "core" namespace start here
353##
354
1e4a197e
RD
355swig_sources = run_swig(['calendar.i'], 'src', GENDIR, PKGDIR,
356 USE_SWIG, swig_force, swig_args, swig_deps)
d14a1e28
RD
357ext = Extension('_calendar', swig_sources,
358 include_dirs = includes,
359 define_macros = defines,
360 library_dirs = libdirs,
361 libraries = libs,
362 extra_compile_args = cflags,
363 extra_link_args = lflags,
41e8a69c 364 **depends
d14a1e28
RD
365 )
366wxpExtensions.append(ext)
367
368
369swig_sources = run_swig(['grid.i'], 'src', GENDIR, PKGDIR,
370 USE_SWIG, swig_force, swig_args, swig_deps)
371ext = Extension('_grid', swig_sources,
1e4a197e
RD
372 include_dirs = includes,
373 define_macros = defines,
374 library_dirs = libdirs,
375 libraries = libs,
376 extra_compile_args = cflags,
377 extra_link_args = lflags,
41e8a69c 378 **depends
1e4a197e
RD
379 )
380wxpExtensions.append(ext)
381
382
d14a1e28
RD
383
384swig_sources = run_swig(['html.i'], 'src', GENDIR, PKGDIR,
1e4a197e 385 USE_SWIG, swig_force, swig_args, swig_deps)
d14a1e28 386ext = Extension('_html', swig_sources,
1e4a197e
RD
387 include_dirs = includes,
388 define_macros = defines,
389 library_dirs = libdirs,
390 libraries = libs,
391 extra_compile_args = cflags,
392 extra_link_args = lflags,
41e8a69c 393 **depends
1e4a197e
RD
394 )
395wxpExtensions.append(ext)
396
f6f1e19f 397
eadf221f
RD
398mediaLibs = libs[:]
399if not MONOLITHIC and os.name == 'nt':
400 mediaLibs.append(makeLibName('media')[0])
870501f0
RD
401swig_sources = run_swig(['media.i'], 'src', GENDIR, PKGDIR,
402 USE_SWIG, swig_force, swig_args, swig_deps)
403ext = Extension('_media', swig_sources,
404 include_dirs = includes,
405 define_macros = defines,
406 library_dirs = libdirs,
eadf221f 407 libraries = mediaLibs,
870501f0
RD
408 extra_compile_args = cflags,
409 extra_link_args = lflags,
410 **depends
411 )
412wxpExtensions.append(ext)
413
414
7875e5ff
KO
415swig_sources = run_swig(['webkit.i'], 'src', GENDIR, PKGDIR,
416 USE_SWIG, swig_force, swig_args, swig_deps)
417ext = Extension('_webkit', swig_sources,
418 include_dirs = includes,
419 define_macros = defines,
420 library_dirs = libdirs,
421 libraries = libs,
422 extra_compile_args = cflags,
423 extra_link_args = lflags,
424 **depends
425 )
426wxpExtensions.append(ext)
d14a1e28 427
f6f1e19f
RD
428
429
1e4a197e
RD
430swig_sources = run_swig(['wizard.i'], 'src', GENDIR, PKGDIR,
431 USE_SWIG, swig_force, swig_args, swig_deps)
d14a1e28 432ext = Extension('_wizard', swig_sources,
1e4a197e
RD
433 include_dirs = includes,
434 define_macros = defines,
435 library_dirs = libdirs,
436 libraries = libs,
437 extra_compile_args = cflags,
438 extra_link_args = lflags,
41e8a69c 439 **depends
1e4a197e
RD
440 )
441wxpExtensions.append(ext)
af83019e
RD
442
443
38b97c15
RD
444
445swig_sources = run_swig(['xrc.i'], 'src', GENDIR, PKGDIR,
446 USE_SWIG, swig_force, swig_args, swig_deps +
447 [ 'src/_xrc_rename.i',
448 'src/_xrc_ex.py',
449 'src/_xmlres.i',
450 'src/_xmlsub.i',
451 'src/_xml.i',
452 'src/_xmlhandler.i',
453 ])
454ext = Extension('_xrc',
455 swig_sources,
456
457 include_dirs = includes + CONTRIBS_INC,
458 define_macros = defines,
459
460 library_dirs = libdirs,
461 libraries = libs,
462
463 extra_compile_args = cflags,
464 extra_link_args = lflags,
465 )
466wxpExtensions.append(ext)
467
468
c368d904
RD
469#----------------------------------------------------------------------
470# Define the GLCanvas extension module
471#----------------------------------------------------------------------
472
1e4a197e 473if BUILD_GLCANVAS:
cfe766c3 474 msg('Preparing GLCANVAS...')
c368d904 475 location = 'contrib/glcanvas'
c368d904 476
d14a1e28 477 swig_sources = run_swig(['glcanvas.i'], location, GENDIR, PKGDIR,
10ef30eb 478 USE_SWIG, swig_force, swig_args, swig_deps)
c368d904
RD
479
480 gl_libs = []
481 if os.name == 'posix':
cb9a93a2 482 gl_config = os.popen(WX_CONFIG + ' --libs gl', 'r').read()[:-1]
1e4a197e 483 gl_lflags = gl_config.split() + lflags
f32afe1c 484 gl_libs = libs
19cf4f80 485 else:
3e46a8e6 486 gl_libs = libs + ['opengl32', 'glu32'] + makeLibName('gl')
f32afe1c 487 gl_lflags = lflags
c368d904 488
d14a1e28 489 ext = Extension('_glcanvas',
3e46a8e6 490 swig_sources,
1e7ecb7b 491
4c417214 492 include_dirs = includes + CONTRIBS_INC,
1e7ecb7b
RD
493 define_macros = defines,
494
495 library_dirs = libdirs,
f32afe1c 496 libraries = gl_libs,
1e7ecb7b
RD
497
498 extra_compile_args = cflags,
f32afe1c 499 extra_link_args = gl_lflags,
1e7ecb7b
RD
500 )
501
502 wxpExtensions.append(ext)
c368d904
RD
503
504
505#----------------------------------------------------------------------
506# Define the OGL extension module
507#----------------------------------------------------------------------
508
1e4a197e 509if BUILD_OGL:
cfe766c3 510 msg('Preparing OGL...')
c368d904 511 location = 'contrib/ogl'
c368d904 512
a32360e0 513 swig_sources = run_swig(['ogl.i'], location, GENDIR, PKGDIR,
d14a1e28
RD
514 USE_SWIG, swig_force, swig_args, swig_deps +
515 [ '%s/_oglbasic.i' % location,
516 '%s/_oglshapes.i' % location,
517 '%s/_oglshapes2.i' % location,
518 '%s/_oglcanvas.i' % location,
519 '%s/_ogldefs.i' % location,
520 ])
c368d904 521
d14a1e28 522 ext = Extension('_ogl',
3ef86e32 523 swig_sources,
1e7ecb7b 524
4c417214 525 include_dirs = includes + [ location ] + CONTRIBS_INC,
dd116e73 526 define_macros = defines + [('wxUSE_DEPRECATED', '0')],
1e7ecb7b
RD
527
528 library_dirs = libdirs,
3ef86e32 529 libraries = libs + makeLibName('ogl'),
1e7ecb7b
RD
530
531 extra_compile_args = cflags,
532 extra_link_args = lflags,
533 )
534
535 wxpExtensions.append(ext)
536
537
c368d904
RD
538
539#----------------------------------------------------------------------
540# Define the STC extension module
541#----------------------------------------------------------------------
542
1e4a197e 543if BUILD_STC:
cfe766c3 544 msg('Preparing STC...')
c368d904 545 location = 'contrib/stc'
020fb2ee
RD
546 #if os.name == 'nt':
547 STC_H = opj(WXDIR, 'contrib', 'include/wx/stc')
548 #else:
549 # STC_H = opj(WXPREFIX, 'include/wx-%d.%d/wx/stc' % (VER_MAJOR, VER_MINOR))
55c020cf 550
de7b7fe6 551## NOTE: need to add something like this to the stc.bkl...
55c020cf 552
3ef86e32
RD
553## # Check if gen_iface needs to be run for the wxSTC sources
554## if (newer(opj(CTRB_SRC, 'stc/stc.h.in'), opj(CTRB_INC, 'stc/stc.h' )) or
555## newer(opj(CTRB_SRC, 'stc/stc.cpp.in'), opj(CTRB_SRC, 'stc/stc.cpp')) or
556## newer(opj(CTRB_SRC, 'stc/gen_iface.py'), opj(CTRB_SRC, 'stc/stc.cpp'))):
55c020cf 557
3ef86e32
RD
558## msg('Running gen_iface.py, regenerating stc.h and stc.cpp...')
559## cwd = os.getcwd()
560## os.chdir(opj(CTRB_SRC, 'stc'))
561## sys.path.insert(0, os.curdir)
562## import gen_iface
563## gen_iface.main([])
564## os.chdir(cwd)
c368d904
RD
565
566
befa6977 567 swig_sources = run_swig(['stc.i'], location, GENDIR, PKGDIR,
c368d904
RD
568 USE_SWIG, swig_force,
569 swig_args + ['-I'+STC_H, '-I'+location],
1ce1bd84
RD
570 [opj(STC_H, 'stc.h'),
571 opj(location, "_stc_utf8_methods.py"),
f2ccce28
RD
572 opj(location, "_stc_docstrings.i"),
573 opj(location, "_stc_gendocs.i"),
1ce1bd84 574 ] + swig_deps)
c368d904 575
d14a1e28 576 ext = Extension('_stc',
3ef86e32
RD
577 swig_sources,
578
4c417214 579 include_dirs = includes + CONTRIBS_INC,
3ef86e32 580 define_macros = defines,
1e7ecb7b
RD
581
582 library_dirs = libdirs,
3ef86e32 583 libraries = libs + makeLibName('stc'),
c368d904 584
1e7ecb7b
RD
585 extra_compile_args = cflags,
586 extra_link_args = lflags,
587 )
588
589 wxpExtensions.append(ext)
c368d904
RD
590
591
b7c75283
RD
592#----------------------------------------------------------------------
593# Define the ACTIVEX extension module (experimental)
594#----------------------------------------------------------------------
595
596if BUILD_ACTIVEX:
597 msg('Preparing ACTIVEX...')
598 location = 'contrib/activex'
599 axloc = opj(location, "wxie")
600
601 swig_files = ['activex.i', ]
602
603 swig_sources = run_swig(swig_files, location, '', PKGDIR,
604 USE_SWIG, swig_force, swig_args, swig_deps +
605 [ '%s/_activex_ex.py' % location])
606
607
608 ext = Extension('_activex', ['%s/IEHtmlWin.cpp' % axloc,
609 '%s/wxactivex.cpp' % axloc,
610 ] + swig_sources,
611
612 include_dirs = includes + [ axloc ],
613 define_macros = defines,
614
615 library_dirs = libdirs,
616 libraries = libs,
617
618 extra_compile_args = cflags,
926bb76c
RD
619 extra_link_args = lflags,
620 )
621
622 wxpExtensions.append(ext)
623
624
ebf4302c
RD
625#----------------------------------------------------------------------
626# Define the GIZMOS extension module
627#----------------------------------------------------------------------
628
1e4a197e 629if BUILD_GIZMOS:
ebf4302c
RD
630 msg('Preparing GIZMOS...')
631 location = 'contrib/gizmos'
ebf4302c 632
a32360e0 633 swig_sources = run_swig(['gizmos.i'], location, GENDIR, PKGDIR,
10ef30eb 634 USE_SWIG, swig_force, swig_args, swig_deps)
ebf4302c 635
d14a1e28 636 ext = Extension('_gizmos',
28eab81f 637 [ '%s/treelistctrl.cpp' % opj(location, 'wxCode/src') ] + swig_sources,
ebf4302c 638
28eab81f 639 include_dirs = includes + [ location, opj(location, 'wxCode/include') ] + CONTRIBS_INC,
ebf4302c
RD
640 define_macros = defines,
641
642 library_dirs = libdirs,
3ef86e32 643 libraries = libs + makeLibName('gizmos'),
ebf4302c
RD
644
645 extra_compile_args = cflags,
646 extra_link_args = lflags,
647 )
648
649 wxpExtensions.append(ext)
650
651
2e5aa9c4
RD
652#----------------------------------------------------------------------
653# Define the ANIMATE extension module
654#----------------------------------------------------------------------
655
656if BUILD_ANIMATE:
657 msg('Preparing ANIMATE...')
658 location = 'contrib/animate'
659
660 swig_sources = run_swig(['animate.i'], location, GENDIR, PKGDIR,
661 USE_SWIG, swig_force, swig_args, swig_deps)
662
663 ext = Extension('_animate',
664 swig_sources,
665
666 include_dirs = includes + CONTRIBS_INC,
667 define_macros = defines,
668
669 library_dirs = libdirs,
670 libraries = libs + makeLibName('animate'),
671
672 extra_compile_args = cflags,
673 extra_link_args = lflags,
674 )
675
676 wxpExtensions.append(ext)
677
678
ebf4302c 679
4a61305d
RD
680#----------------------------------------------------------------------
681# Define the DLLWIDGET extension module
682#----------------------------------------------------------------------
683
1e4a197e 684if BUILD_DLLWIDGET:
4a61305d
RD
685 msg('Preparing DLLWIDGET...')
686 location = 'contrib/dllwidget'
687 swig_files = ['dllwidget_.i']
688
689 swig_sources = run_swig(swig_files, location, '', PKGDIR,
10ef30eb 690 USE_SWIG, swig_force, swig_args, swig_deps)
4a61305d
RD
691
692 # copy a contrib project specific py module to the main package dir
693 copy_file(opj(location, 'dllwidget.py'), PKGDIR, update=1, verbose=0)
99abd512 694 CLEANUP.append(opj(PKGDIR, 'dllwidget.py'))
4a61305d
RD
695
696 ext = Extension('dllwidget_c', [
697 '%s/dllwidget.cpp' % location,
698 ] + swig_sources,
699
4c417214 700 include_dirs = includes + CONTRIBS_INC,
4a61305d
RD
701 define_macros = defines,
702
703 library_dirs = libdirs,
704 libraries = libs,
705
706 extra_compile_args = cflags,
707 extra_link_args = lflags,
708 )
709
710 wxpExtensions.append(ext)
711
712
1e4a197e 713
38b97c15 714
1e4a197e 715#----------------------------------------------------------------------
1128a89b 716# Tools, scripts data files, etc.
1e4a197e 717#----------------------------------------------------------------------
8916d007 718
2eb31f8b
RD
719if NO_SCRIPTS:
720 SCRIPTS = None
721else:
1e4a197e
RD
722 SCRIPTS = [opj('scripts/helpviewer'),
723 opj('scripts/img2png'),
2eb31f8b 724 opj('scripts/img2py'),
d48c1c64
RD
725 opj('scripts/img2xpm'),
726 opj('scripts/pyalacarte'),
727 opj('scripts/pyalamode'),
2eb31f8b 728 opj('scripts/pycrust'),
d48c1c64 729 opj('scripts/pyshell'),
1fded56b
RD
730 opj('scripts/pywrap'),
731 opj('scripts/pywrap'),
b6536d60 732 opj('scripts/pywxrc'),
d48c1c64 733 opj('scripts/xrced'),
2eb31f8b 734 ]
d48c1c64 735
4a61305d 736
926bb76c 737
c2079460
RD
738DATA_FILES += find_data_files('wx/tools/XRCed', '*.txt', '*.xrc')
739DATA_FILES += find_data_files('wx/py', '*.txt', '*.ico', '*.css', '*.html')
1fded56b 740DATA_FILES += find_data_files('wx', '*.txt', '*.css', '*.html')
1e4a197e
RD
741
742
1128a89b
RD
743if NO_HEADERS:
744 HEADERS = None
745else:
746 h_files = glob.glob(opj("include/wx/wxPython/*.h"))
747 i_files = glob.glob(opj("src/*.i")) + \
748 glob.glob(opj("src/_*.py")) + \
749 glob.glob(opj("src/*.swg"))
750
e9019d1c
RD
751 HEADERS = zip(h_files, ["/wxPython"]*len(h_files)) + \
752 zip(i_files, ["/wxPython/i_files"]*len(i_files))
753
1128a89b 754
d48c1c64
RD
755
756if INSTALL_MULTIVERSION:
095315e2 757 EXTRA_PATH = getExtraPath(addOpts=EP_ADD_OPTS, shortVer=not EP_FULL_VER)
d48c1c64
RD
758 open("src/wx.pth", "w").write(EXTRA_PATH)
759 CLEANUP.append("src/wx.pth")
760else:
761 EXTRA_PATH = None
762
763
764
c368d904
RD
765#----------------------------------------------------------------------
766# Do the Setup/Build/Install/Whatever
767#----------------------------------------------------------------------
768
1b62f00d 769if __name__ == "__main__":
1e4a197e 770 if not PREP_ONLY:
d48c1c64 771
d14a1e28 772 setup(name = 'wxPython',
1b62f00d
RD
773 version = VERSION,
774 description = DESCRIPTION,
775 long_description = LONG_DESCRIPTION,
776 author = AUTHOR,
777 author_email = AUTHOR_EMAIL,
778 url = URL,
851d4ac7 779 download_url = DOWNLOAD_URL,
e2e02194 780 license = LICENSE,
851d4ac7
RD
781 platforms = PLATFORMS,
782 classifiers = filter(None, CLASSIFIERS.split("\n")),
783 keywords = KEYWORDS,
d14a1e28 784
1fded56b
RD
785 packages = ['wxPython',
786 'wxPython.lib',
787 'wxPython.lib.colourchooser',
788 'wxPython.lib.editor',
789 'wxPython.lib.mixins',
1fded56b 790 'wxPython.tools',
1fded56b
RD
791
792 'wx',
1128a89b 793 'wx.build',
1fded56b
RD
794 'wx.lib',
795 'wx.lib.colourchooser',
796 'wx.lib.editor',
42463de2 797 'wx.lib.floatcanvas',
9176f38f 798 'wx.lib.masked',
1fded56b 799 'wx.lib.mixins',
f847103a 800 'wx.lib.ogl',
1fded56b
RD
801 'wx.py',
802 'wx.tools',
803 'wx.tools.XRCed',
1b62f00d
RD
804 ],
805
d48c1c64
RD
806 extra_path = EXTRA_PATH,
807
1b62f00d
RD
808 ext_package = PKGDIR,
809 ext_modules = wxpExtensions,
8916d007 810
1128a89b
RD
811 options = { 'build' : { 'build_base' : BUILD_BASE },
812 },
a541c325 813
1128a89b 814 scripts = SCRIPTS,
1e4a197e 815 data_files = DATA_FILES,
1128a89b 816 headers = HEADERS,
8916d007 817
d48c1c64
RD
818 # Override some of the default distutils command classes with my own
819 cmdclass = { 'install' : wx_install,
820 'install_data': wx_smart_install_data,
1128a89b
RD
821 'install_headers': wx_install_headers,
822 'clean': wx_extra_clean,
823 },
1b62f00d 824 )
c368d904 825
c368d904 826
d48c1c64
RD
827 if INSTALL_MULTIVERSION:
828 setup(name = 'wxPython-common',
829 version = VERSION,
830 description = DESCRIPTION,
831 long_description = LONG_DESCRIPTION,
832 author = AUTHOR,
833 author_email = AUTHOR_EMAIL,
834 url = URL,
835 download_url = DOWNLOAD_URL,
836 license = LICENSE,
837 platforms = PLATFORMS,
838 classifiers = filter(None, CLASSIFIERS.split("\n")),
839 keywords = KEYWORDS,
840
841 package_dir = { '': 'wxversion' },
842 py_modules = ['wxversion'],
843
844 data_files = [('', ['src/wx.pth'])],
845
846 options = { 'build' : { 'build_base' : BUILD_BASE },
847 },
848
849 cmdclass = { 'install_data': wx_smart_install_data,
850 },
851 )
852
c368d904
RD
853#----------------------------------------------------------------------
854#----------------------------------------------------------------------