]> git.saurik.com Git - wxWidgets.git/blob - wxPython/config.py
don't fail if the cleanup fails
[wxWidgets.git] / wxPython / config.py
1 #----------------------------------------------------------------------
2 # Name: wx.build.config
3 # Purpose: Most of the contents of this module used to be located
4 # in wxPython's setup.py script. It was moved here so
5 # it would be installed with the rest of wxPython and
6 # could therefore be used by the setup.py for other
7 # projects that needed this same info and functionality
8 # (most likely in order to be compatible with wxPython.)
9 #
10 # This split from setup.py is still fairly rough, and
11 # some things may still get shuffled back and forth,
12 # refactored, etc. Please send me any comments and
13 # suggestions about this.
14 #
15 # Author: Robin Dunn
16 #
17 # Created: 23-March-2004
18 # RCS-ID: $Id$
19 # Copyright: (c) 2004 by Total Control Software
20 # Licence: wxWindows license
21 #----------------------------------------------------------------------
22
23 import sys, os, glob, fnmatch, tempfile
24 from distutils.core import setup, Extension
25 from distutils.file_util import copy_file
26 from distutils.dir_util import mkpath
27 from distutils.dep_util import newer
28 from distutils.spawn import spawn
29
30 import distutils.command.install_data
31 import distutils.command.install_headers
32 import distutils.command.clean
33
34 #----------------------------------------------------------------------
35 # flags and values that affect this script
36 #----------------------------------------------------------------------
37
38 VER_MAJOR = 2 # The first three must match wxWidgets
39 VER_MINOR = 5
40 VER_RELEASE = 2
41 VER_SUBREL = 2 # wxPython release num for x.y.z release of wxWidgets
42 VER_FLAGS = "p" # release flags, such as prerelease num, unicode, etc.
43
44 DESCRIPTION = "Cross platform GUI toolkit for Python"
45 AUTHOR = "Robin Dunn"
46 AUTHOR_EMAIL = "Robin Dunn <robin@alldunn.com>"
47 URL = "http://wxPython.org/"
48 DOWNLOAD_URL = "http://wxPython.org/download.php"
49 LICENSE = "wxWidgets Library License (LGPL derivative)"
50 PLATFORMS = "WIN32,OSX,POSIX"
51 KEYWORDS = "GUI,wx,wxWindows,wxWidgets,cross-platform"
52
53 LONG_DESCRIPTION = """\
54 wxPython is a GUI toolkit for Python that is a wrapper around the
55 wxWidgets C++ GUI library. wxPython provides a large variety of
56 window types and controls, all implemented with a native look and
57 feel (by using the native widgets) on the platforms it is supported
58 on.
59 """
60
61 CLASSIFIERS = """\
62 Development Status :: 6 - Mature
63 Environment :: MacOS X :: Carbon
64 Environment :: Win32 (MS Windows)
65 Environment :: X11 Applications :: GTK
66 Intended Audience :: Developers
67 License :: OSI Approved
68 Operating System :: MacOS :: MacOS X
69 Operating System :: Microsoft :: Windows :: Windows 95/98/2000
70 Operating System :: POSIX
71 Programming Language :: Python
72 Topic :: Software Development :: User Interfaces
73 """
74
75 ## License :: OSI Approved :: wxWidgets Library Licence
76
77
78 # Config values below this point can be reset on the setup.py command line.
79
80 BUILD_GLCANVAS = 1 # If true, build the contrib/glcanvas extension module
81 BUILD_OGL = 1 # If true, build the contrib/ogl extension module
82 BUILD_STC = 1 # If true, build the contrib/stc extension module
83 BUILD_XRC = 1 # XML based resource system
84 BUILD_GIZMOS = 1 # Build a module for the gizmos contrib library
85 BUILD_DLLWIDGET = 0# Build a module that enables unknown wx widgets
86 # to be loaded from a DLL and to be used from Python.
87
88 # Internet Explorer wrapper (experimental)
89 BUILD_IEWIN = (os.name == 'nt')
90 BUILD_ACTIVEX = (os.name == 'nt') # new version of IEWIN and more
91
92
93 CORE_ONLY = 0 # if true, don't build any of the above
94
95 PREP_ONLY = 0 # Only run the prepatory steps, not the actual build.
96
97 USE_SWIG = 0 # Should we actually execute SWIG, or just use the
98 # files already in the distribution?
99
100 SWIG = "swig" # The swig executable to use.
101
102 BUILD_RENAMERS = 1 # Should we build the renamer modules too?
103
104 FULL_DOCS = 0 # Some docstrings are split into a basic docstring and a
105 # details string. Setting this flag to 1 will
106 # cause the two strings to be combined and output
107 # as the full docstring.
108
109 UNICODE = 0 # This will pass the 'wxUSE_UNICODE' flag to SWIG and
110 # will ensure that the right headers are found and the
111 # right libs are linked.
112
113 UNDEF_NDEBUG = 1 # Python 2.2 on Unix/Linux by default defines NDEBUG,
114 # and distutils will pick this up and use it on the
115 # compile command-line for the extensions. This could
116 # conflict with how wxWidgets was built. If NDEBUG is
117 # set then wxWidgets' __WXDEBUG__ setting will be turned
118 # off. If wxWidgets was actually built with it turned
119 # on then you end up with mismatched class structures,
120 # and wxPython will crash.
121
122 NO_SCRIPTS = 0 # Don't install the tool scripts
123 NO_HEADERS = 0 # Don't install the wxPython *.h and *.i files
124
125 WX_CONFIG = None # Usually you shouldn't need to touch this, but you can set
126 # it to pass an alternate version of wx-config or alternate
127 # flags, eg. as required by the .deb in-tree build. By
128 # default a wx-config command will be assembled based on
129 # version, port, etc. and it will be looked for on the
130 # default $PATH.
131
132 WXPORT = 'gtk' # On Linux/Unix there are several ports of wxWidgets available.
133 # Setting this value lets you select which will be used for
134 # the wxPython build. Possibilites are 'gtk', 'gtk2' and
135 # 'x11'. Curently only gtk and gtk2 works.
136
137 BUILD_BASE = "build" # Directory to use for temporary build files.
138 # This name will be appended to if the WXPORT or
139 # the UNICODE flags are set to non-standard
140 # values. See below.
141
142
143 CONTRIBS_INC = "" # A dir to add as an -I flag when compiling the contribs
144
145
146 # Some MSW build settings
147
148 FINAL = 0 # Mirrors use of same flag in wx makefiles,
149 # (0 or 1 only) should probably find a way to
150 # autodetect this...
151
152 HYBRID = 1 # If set and not debug or FINAL, then build a
153 # hybrid extension that can be used by the
154 # non-debug version of python, but contains
155 # debugging symbols for wxWidgets and wxPython.
156 # wxWidgets must have been built with /MD, not /MDd
157 # (using FINAL=hybrid will do it.)
158
159 # Version part of wxWidgets LIB/DLL names
160 WXDLLVER = '%d%d' % (VER_MAJOR, VER_MINOR)
161
162
163 #----------------------------------------------------------------------
164
165 def msg(text):
166 if hasattr(sys, 'setup_is_main') and sys.setup_is_main:
167 print text
168
169
170 def opj(*args):
171 path = apply(os.path.join, args)
172 return os.path.normpath(path)
173
174
175 def libFlag():
176 if FINAL:
177 rv = ''
178 elif HYBRID:
179 rv = 'h'
180 else:
181 rv = 'd'
182 if UNICODE:
183 rv = 'u' + rv
184 return rv
185
186
187 #----------------------------------------------------------------------
188 # Some other globals
189 #----------------------------------------------------------------------
190
191 PKGDIR = 'wx'
192 wxpExtensions = []
193 DATA_FILES = []
194 CLEANUP = []
195
196 force = '--force' in sys.argv or '-f' in sys.argv
197 debug = '--debug' in sys.argv or '-g' in sys.argv
198 cleaning = 'clean' in sys.argv
199
200
201 # change the PORT default for wxMac
202 if sys.platform[:6] == "darwin":
203 WXPORT = 'mac'
204
205 # and do the same for wxMSW, just for consistency
206 if os.name == 'nt':
207 WXPORT = 'msw'
208
209
210 #----------------------------------------------------------------------
211 # Check for build flags on the command line
212 #----------------------------------------------------------------------
213
214 # Boolean (int) flags
215 for flag in ['BUILD_GLCANVAS', 'BUILD_OGL', 'BUILD_STC', 'BUILD_XRC',
216 'BUILD_GIZMOS', 'BUILD_DLLWIDGET', 'BUILD_IEWIN', 'BUILD_ACTIVEX',
217 'CORE_ONLY', 'PREP_ONLY', 'USE_SWIG', 'UNICODE',
218 'UNDEF_NDEBUG', 'NO_SCRIPTS', 'NO_HEADERS', 'BUILD_RENAMERS',
219 'FULL_DOCS',
220 'FINAL', 'HYBRID', ]:
221 for x in range(len(sys.argv)):
222 if sys.argv[x].find(flag) == 0:
223 pos = sys.argv[x].find('=') + 1
224 if pos > 0:
225 vars()[flag] = eval(sys.argv[x][pos:])
226 sys.argv[x] = ''
227
228 # String options
229 for option in ['WX_CONFIG', 'WXDLLVER', 'BUILD_BASE', 'WXPORT', 'SWIG',
230 'CONTRIBS_INC']:
231 for x in range(len(sys.argv)):
232 if sys.argv[x].find(option) == 0:
233 pos = sys.argv[x].find('=') + 1
234 if pos > 0:
235 vars()[option] = sys.argv[x][pos:]
236 sys.argv[x] = ''
237
238 sys.argv = filter(None, sys.argv)
239
240
241 #----------------------------------------------------------------------
242 # some helper functions
243 #----------------------------------------------------------------------
244
245 def Verify_WX_CONFIG():
246 """ Called below for the builds that need wx-config,
247 if WX_CONFIG is not set then tries to select the specific
248 wx*-config script based on build options. If not found
249 then it defaults to 'wx-config'.
250 """
251 # if WX_CONFIG hasn't been set to an explicit value then construct one.
252 global WX_CONFIG
253 if WX_CONFIG is None:
254 if debug: # TODO: Fix this. wxPython's --debug shouldn't be tied to wxWidgets...
255 df = 'd'
256 else:
257 df = ''
258 if UNICODE:
259 uf = 'u'
260 else:
261 uf = ''
262 ver2 = "%s.%s" % (VER_MAJOR, VER_MINOR)
263 port = WXPORT
264 if port == "x11":
265 port = "x11univ"
266 WX_CONFIG = 'wx%s%s%s-%s-config' % (port, uf, df, ver2)
267
268 searchpath = os.environ["PATH"]
269 for p in searchpath.split(':'):
270 fp = os.path.join(p, WX_CONFIG)
271 if os.path.exists(fp) and os.access(fp, os.X_OK):
272 # success
273 msg("Found wx-config: " + fp)
274 WX_CONFIG = fp
275 break
276 else:
277 msg("WX_CONFIG not specified and %s not found on $PATH "
278 "defaulting to \"wx-config\"" % WX_CONFIG)
279 WX_CONFIG = 'wx-config'
280
281
282
283 def run_swig(files, dir, gendir, package, USE_SWIG, force, swig_args,
284 swig_deps=[], add_under=False):
285 """Run SWIG the way I want it done"""
286
287 if USE_SWIG and not os.path.exists(os.path.join(dir, gendir)):
288 os.mkdir(os.path.join(dir, gendir))
289
290 if USE_SWIG and not os.path.exists(os.path.join("docs", "xml-raw")):
291 os.mkdir(os.path.join("docs", "xml-raw"))
292
293 sources = []
294
295 if add_under: pre = '_'
296 else: pre = ''
297
298 for file in files:
299 basefile = os.path.splitext(file)[0]
300 i_file = os.path.join(dir, file)
301 py_file = os.path.join(dir, gendir, pre+basefile+'.py')
302 cpp_file = os.path.join(dir, gendir, pre+basefile+'_wrap.cpp')
303 xml_file = os.path.join("docs", "xml-raw", basefile+pre+'_swig.xml')
304
305 if add_under:
306 interface = ['-interface', '_'+basefile+'_']
307 else:
308 interface = []
309
310 sources.append(cpp_file)
311
312 if not cleaning and USE_SWIG:
313 for dep in swig_deps:
314 if newer(dep, py_file) or newer(dep, cpp_file):
315 force = 1
316 break
317
318 if force or newer(i_file, py_file) or newer(i_file, cpp_file):
319 ## we need forward slashes here even on win32
320 #cpp_file = opj(cpp_file) #'/'.join(cpp_file.split('\\'))
321 #i_file = opj(i_file) #'/'.join(i_file.split('\\'))
322
323 if BUILD_RENAMERS:
324 #tempfile.tempdir = sourcePath
325 xmltemp = tempfile.mktemp('.xml')
326
327 # First run swig to produce the XML file, adding
328 # an extra -D that prevents the old rename
329 # directives from being used
330 cmd = [ swig_cmd ] + swig_args + \
331 [ '-DBUILDING_RENAMERS', '-xmlout', xmltemp ] + \
332 ['-I'+dir, '-o', cpp_file, i_file]
333 msg(' '.join(cmd))
334 spawn(cmd)
335
336 # Next run build_renamers to process the XML
337 cmd = [ sys.executable, '-u',
338 './distrib/build_renamers.py', dir, pre+basefile, xmltemp]
339 msg(' '.join(cmd))
340 spawn(cmd)
341 os.remove(xmltemp)
342
343 # Then run swig for real
344 cmd = [ swig_cmd ] + swig_args + interface + \
345 ['-I'+dir, '-o', cpp_file, '-xmlout', xml_file, i_file]
346 msg(' '.join(cmd))
347 spawn(cmd)
348
349
350 # copy the generated python file to the package directory
351 copy_file(py_file, package, update=not force, verbose=0)
352 CLEANUP.append(opj(package, os.path.basename(py_file)))
353
354 return sources
355
356
357
358 # Specializations of some distutils command classes
359 class wx_smart_install_data(distutils.command.install_data.install_data):
360 """need to change self.install_dir to the actual library dir"""
361 def run(self):
362 install_cmd = self.get_finalized_command('install')
363 self.install_dir = getattr(install_cmd, 'install_lib')
364 return distutils.command.install_data.install_data.run(self)
365
366
367 class wx_extra_clean(distutils.command.clean.clean):
368 """
369 Also cleans stuff that this setup.py copies itself. If the
370 --all flag was used also searches for .pyc, .pyd, .so files
371 """
372 def run(self):
373 from distutils import log
374 from distutils.filelist import FileList
375 global CLEANUP
376
377 distutils.command.clean.clean.run(self)
378
379 if self.all:
380 fl = FileList()
381 fl.include_pattern("*.pyc", 0)
382 fl.include_pattern("*.pyd", 0)
383 fl.include_pattern("*.so", 0)
384 CLEANUP += fl.files
385
386 for f in CLEANUP:
387 if os.path.isdir(f):
388 try:
389 if not self.dry_run and os.path.exists(f):
390 os.rmdir(f)
391 log.info("removing '%s'", f)
392 except IOError:
393 log.warning("unable to remove '%s'", f)
394
395 else:
396 try:
397 if not self.dry_run and os.path.exists(f):
398 os.remove(f)
399 log.info("removing '%s'", f)
400 except IOError:
401 log.warning("unable to remove '%s'", f)
402
403
404
405 class wx_install_headers(distutils.command.install_headers.install_headers):
406 """
407 Install the header files to the WXPREFIX, with an extra dir per
408 filename too
409 """
410 def initialize_options (self):
411 self.root = None
412 distutils.command.install_headers.install_headers.initialize_options(self)
413
414 def finalize_options (self):
415 self.set_undefined_options('install', ('root', 'root'))
416 distutils.command.install_headers.install_headers.finalize_options(self)
417
418 def run(self):
419 if os.name == 'nt':
420 return
421 headers = self.distribution.headers
422 if not headers:
423 return
424
425 root = self.root
426 if root is None or WXPREFIX.startswith(root):
427 root = ''
428 for header, location in headers:
429 install_dir = os.path.normpath(root + WXPREFIX + location)
430 self.mkpath(install_dir)
431 (out, _) = self.copy_file(header, install_dir)
432 self.outfiles.append(out)
433
434
435
436
437 def build_locale_dir(destdir, verbose=1):
438 """Build a locale dir under the wxPython package for MSW"""
439 moFiles = glob.glob(opj(WXDIR, 'locale', '*.mo'))
440 for src in moFiles:
441 lang = os.path.splitext(os.path.basename(src))[0]
442 dest = opj(destdir, lang, 'LC_MESSAGES')
443 mkpath(dest, verbose=verbose)
444 copy_file(src, opj(dest, 'wxstd.mo'), update=1, verbose=verbose)
445 CLEANUP.append(opj(dest, 'wxstd.mo'))
446 CLEANUP.append(dest)
447
448
449 def build_locale_list(srcdir):
450 # get a list of all files under the srcdir, to be used for install_data
451 def walk_helper(lst, dirname, files):
452 for f in files:
453 filename = opj(dirname, f)
454 if not os.path.isdir(filename):
455 lst.append( (dirname, [filename]) )
456 file_list = []
457 os.path.walk(srcdir, walk_helper, file_list)
458 return file_list
459
460
461 def find_data_files(srcdir, *wildcards):
462 # get a list of all files under the srcdir matching wildcards,
463 # returned in a format to be used for install_data
464
465 def walk_helper(arg, dirname, files):
466 names = []
467 lst, wildcards = arg
468 for wc in wildcards:
469 for f in files:
470 filename = opj(dirname, f)
471 if fnmatch.fnmatch(filename, wc) and not os.path.isdir(filename):
472 names.append(filename)
473 if names:
474 lst.append( (dirname, names ) )
475
476 file_list = []
477 os.path.walk(srcdir, walk_helper, (file_list, wildcards))
478 return file_list
479
480
481 def makeLibName(name):
482 if os.name == 'posix':
483 libname = '%s_%s-%s' % (WXBASENAME, name, WXRELEASE)
484 else:
485 libname = 'wxmsw%s%s_%s' % (WXDLLVER, libFlag(), name)
486
487 return [libname]
488
489
490
491 def adjustCFLAGS(cflags, defines, includes):
492 '''Extrace the raw -I, -D, and -U flags and put them into
493 defines and includes as needed.'''
494 newCFLAGS = []
495 for flag in cflags:
496 if flag[:2] == '-I':
497 includes.append(flag[2:])
498 elif flag[:2] == '-D':
499 flag = flag[2:]
500 if flag.find('=') == -1:
501 defines.append( (flag, None) )
502 else:
503 defines.append( tuple(flag.split('=')) )
504 elif flag[:2] == '-U':
505 defines.append( (flag[2:], ) )
506 else:
507 newCFLAGS.append(flag)
508 return newCFLAGS
509
510
511
512 def adjustLFLAGS(lfags, libdirs, libs):
513 '''Extrace the -L and -l flags and put them in libdirs and libs as needed'''
514 newLFLAGS = []
515 for flag in lflags:
516 if flag[:2] == '-L':
517 libdirs.append(flag[2:])
518 elif flag[:2] == '-l':
519 libs.append(flag[2:])
520 else:
521 newLFLAGS.append(flag)
522
523 return newLFLAGS
524
525 #----------------------------------------------------------------------
526 # sanity checks
527
528 if CORE_ONLY:
529 BUILD_GLCANVAS = 0
530 BUILD_OGL = 0
531 BUILD_STC = 0
532 BUILD_XRC = 0
533 BUILD_GIZMOS = 0
534 BUILD_DLLWIDGET = 0
535 BUILD_IEWIN = 0
536 BUILD_ACTIVEX = 0
537
538 if debug:
539 FINAL = 0
540 HYBRID = 0
541
542 if FINAL:
543 HYBRID = 0
544
545 if UNICODE and WXPORT not in ['msw', 'gtk2']:
546 raise SystemExit, "UNICODE mode not currently supported on this WXPORT: "+WXPORT
547
548
549 if CONTRIBS_INC:
550 CONTRIBS_INC = [ CONTRIBS_INC ]
551 else:
552 CONTRIBS_INC = []
553
554
555 #----------------------------------------------------------------------
556 # Setup some platform specific stuff
557 #----------------------------------------------------------------------
558
559 if os.name == 'nt':
560 # Set compile flags and such for MSVC. These values are derived
561 # from the wxWidgets makefiles for MSVC, other compilers settings
562 # will probably vary...
563 if os.environ.has_key('WXWIN'):
564 WXDIR = os.environ['WXWIN']
565 else:
566 msg("WARNING: WXWIN not set in environment.")
567 WXDIR = '..' # assumes in CVS tree
568 WXPLAT = '__WXMSW__'
569 GENDIR = 'msw'
570
571 includes = ['include', 'src',
572 opj(WXDIR, 'lib', 'vc_dll', 'msw' + libFlag()),
573 opj(WXDIR, 'include'),
574 opj(WXDIR, 'contrib', 'include'),
575 ]
576
577 defines = [ ('WIN32', None),
578 ('_WINDOWS', None),
579
580 (WXPLAT, None),
581 ('WXUSINGDLL', '1'),
582
583 ('SWIG_GLOBAL', None),
584 ('WXP_USE_THREAD', '1'),
585 ]
586
587 if UNDEF_NDEBUG:
588 defines.append( ('NDEBUG',) ) # using a 1-tuple makes it do an undef
589
590 if HYBRID:
591 defines.append( ('__NO_VC_CRTDBG__', None) )
592
593 if not FINAL or HYBRID:
594 defines.append( ('__WXDEBUG__', None) )
595
596 libdirs = [ opj(WXDIR, 'lib', 'vc_dll') ]
597 libs = [ 'wxbase' + WXDLLVER + libFlag(), # TODO: trim this down to what is really needed for the core
598 'wxbase' + WXDLLVER + libFlag() + '_net',
599 'wxbase' + WXDLLVER + libFlag() + '_xml',
600 makeLibName('core')[0],
601 makeLibName('adv')[0],
602 makeLibName('html')[0],
603 ]
604
605 libs = libs + ['kernel32', 'user32', 'gdi32', 'comdlg32',
606 'winspool', 'winmm', 'shell32', 'oldnames', 'comctl32',
607 'odbc32', 'ole32', 'oleaut32', 'uuid', 'rpcrt4',
608 'advapi32', 'wsock32']
609
610
611 cflags = [ '/Gy',
612 # '/GX-' # workaround for internal compiler error in MSVC on some machines
613 ]
614 lflags = None
615
616 # Other MSVC flags...
617 # Too bad I don't remember why I was playing with these, can they be removed?
618 if FINAL:
619 pass #cflags = cflags + ['/O1']
620 elif HYBRID :
621 pass #cflags = cflags + ['/Ox']
622 else:
623 pass # cflags = cflags + ['/Od', '/Z7']
624 # lflags = ['/DEBUG', ]
625
626
627
628 #----------------------------------------------------------------------
629
630 elif os.name == 'posix':
631 WXDIR = '..'
632 includes = ['include', 'src']
633 defines = [('SWIG_GLOBAL', None),
634 ('HAVE_CONFIG_H', None),
635 ('WXP_USE_THREAD', '1'),
636 ]
637 if UNDEF_NDEBUG:
638 defines.append( ('NDEBUG',) ) # using a 1-tuple makes it do an undef
639
640 Verify_WX_CONFIG()
641
642 libdirs = []
643 libs = []
644
645 # If you get unresolved symbol errors on Solaris and are using gcc, then
646 # uncomment this block to add the right flags to the link step and build
647 # again.
648 ## if os.uname()[0] == 'SunOS':
649 ## libs.append('gcc')
650 ## libdirs.append(commands.getoutput("gcc -print-search-dirs | grep '^install' | awk '{print $2}'")[:-1])
651
652 cflags = os.popen(WX_CONFIG + ' --cxxflags', 'r').read()[:-1]
653 cflags = cflags.split()
654 if debug:
655 cflags.append('-g')
656 cflags.append('-O0')
657 else:
658 cflags.append('-O3')
659
660 lflags = os.popen(WX_CONFIG + ' --libs', 'r').read()[:-1]
661 lflags = lflags.split()
662
663 WXBASENAME = os.popen(WX_CONFIG + ' --basename').read()[:-1]
664 WXRELEASE = os.popen(WX_CONFIG + ' --release').read()[:-1]
665 WXPREFIX = os.popen(WX_CONFIG + ' --prefix').read()[:-1]
666
667
668 if sys.platform[:6] == "darwin":
669 # Flags and such for a Darwin (Max OS X) build of Python
670 WXPLAT = '__WXMAC__'
671 GENDIR = 'mac'
672 libs = ['stdc++']
673 NO_SCRIPTS = 1
674
675
676 else:
677 # Set flags for other Unix type platforms
678 GENDIR = WXPORT
679
680 if WXPORT == 'gtk':
681 WXPLAT = '__WXGTK__'
682 portcfg = os.popen('gtk-config --cflags', 'r').read()[:-1]
683 elif WXPORT == 'gtk2':
684 WXPLAT = '__WXGTK__'
685 GENDIR = 'gtk' # no code differences so use the same generated sources
686 portcfg = os.popen('pkg-config gtk+-2.0 --cflags', 'r').read()[:-1]
687 BUILD_BASE = BUILD_BASE + '-' + WXPORT
688 elif WXPORT == 'x11':
689 WXPLAT = '__WXX11__'
690 portcfg = ''
691 BUILD_BASE = BUILD_BASE + '-' + WXPORT
692 else:
693 raise SystemExit, "Unknown WXPORT value: " + WXPORT
694
695 cflags += portcfg.split()
696
697 # Some distros (e.g. Mandrake) put libGLU in /usr/X11R6/lib, but
698 # wx-config doesn't output that for some reason. For now, just
699 # add it unconditionally but we should really check if the lib is
700 # really found there or wx-config should be fixed.
701 libdirs.append("/usr/X11R6/lib")
702
703
704 # Move the various -I, -D, etc. flags we got from the *config scripts
705 # into the distutils lists.
706 cflags = adjustCFLAGS(cflags, defines, includes)
707 lflags = adjustLFLAGS(lflags, libdirs, libs)
708
709
710 #----------------------------------------------------------------------
711 else:
712 raise 'Sorry, platform not supported...'
713
714
715 #----------------------------------------------------------------------
716 # post platform setup checks and tweaks, create the full version string
717 #----------------------------------------------------------------------
718
719 if UNICODE:
720 BUILD_BASE = BUILD_BASE + '.unicode'
721 VER_FLAGS += 'u'
722
723 if os.path.exists('DAILY_BUILD'):
724
725 VER_FLAGS += '.' + open('DAILY_BUILD').read().strip()
726
727 VERSION = "%s.%s.%s.%s%s" % (VER_MAJOR, VER_MINOR, VER_RELEASE,
728 VER_SUBREL, VER_FLAGS)
729
730
731 #----------------------------------------------------------------------
732 # SWIG defaults
733 #----------------------------------------------------------------------
734
735 swig_cmd = SWIG
736 swig_force = force
737 swig_args = ['-c++',
738 '-Wall',
739 '-nodefault',
740
741 '-python',
742 '-keyword',
743 '-new_repr',
744 '-modern',
745
746 '-I./src',
747 '-D'+WXPLAT,
748 '-noruntime'
749 ]
750 if UNICODE:
751 swig_args.append('-DwxUSE_UNICODE')
752
753 if FULL_DOCS:
754 swig_args.append('-D_DO_FULL_DOCS')
755
756
757 swig_deps = [ 'src/my_typemaps.i',
758 'src/common.swg',
759 'src/pyrun.swg',
760 ]
761
762 depends = [ #'include/wx/wxPython/wxPython.h',
763 #'include/wx/wxPython/wxPython_int.h',
764 #'src/pyclasses.h',
765 ]
766
767 #----------------------------------------------------------------------