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