]> git.saurik.com Git - wxWidgets.git/blob - wxPython/distrib/mac/wxPythonOSX/build
Detect Apple bug that prevents the joystick code compiling for OS X 10.1
[wxWidgets.git] / wxPython / distrib / mac / wxPythonOSX / build
1 #!/bin/sh -e
2 #----------------------------------------------------------------------
3 # Build wxMac and wxPythonOSX from the tarball and then make an
4 # Installer package out of it.
5
6 ##set -x
7
8 spectemplate=distrib/wxPythonFull.spec.in
9
10 if [ ! -d wxPython -o ! -e ${spectemplate} ]; then
11 echo "Please run this script from the root wxPython directory."
12 exit 1
13 fi
14
15 if [ "$UID" != "0" ]; then
16 echo "-------------------------------------------------------"
17 echo " WARNING: I will be unable to change ownership of files"
18 echo " unless this script is run as root or via sudo"
19 echo "-------------------------------------------------------"
20 fi
21
22 #----------------------------------------------------------------------
23 # Check Parameters
24
25 function usage {
26 echo ""
27 echo "Usage: $0 PYVER [jaguar|panther] [command flags...]"
28 echo ""
29 echo " PYVER Python version to use to do the build"
30 echo ""
31 echo " panther Build for Apple's python in /usr/bin, such as on Panther"
32 echo " jaguar Build for a python in /usr/local/bin, such as on Jaguar"
33 echo ""
34 echo "optional command flags:"
35 echo " skiptar Don't unpack the tarball"
36 echo " inplace Don't use the tarball, build from the CVS tree instead"
37 echo " (The Docs and Demo tarballs are still required for a full build.)"
38 echo " unicode Make a unicode build"
39 echo " skipconfig Don't run configure"
40 echo " skipbuild Don't build wxWidgets or wxPython"
41 echo " skipinstall Don't do the installation step"
42 echo " skipdmg Don't make the package or diskimage"
43 echo " skipclean Don't do the cleanup at the end"
44 echo ""
45 }
46
47
48 if [ $# -lt 2 ]; then
49 usage
50 exit 1
51 fi
52
53 PYVER=$1
54 if which python$PYVER && which pythonw$PYVER; then
55 PYTHON=`which python$PYVER`
56 PYTHONW=`which pythonw$PYVER`
57 else
58 usage;
59 exit 1
60 fi
61
62 KIND=$2
63 case $KIND in
64 panther) TAG=macosx10.3 ;;
65 jaguar) TAG=macosx10.2 ;;
66 *) usage; exit 1 ;;
67 esac
68
69 shift;shift
70
71 skiptar=no
72 skipconfig=no
73 skipbuild=no
74 skipinstall=no
75 skipdmg=no
76 skipclean=no
77 inplace=no
78 unicode=no
79
80 for flag in $*; do
81 case ${flag} in
82 skiptar) skiptar=yes ;;
83 skipconfig) skipconfig=yes; skiptar=yes ;;
84 skipbuild) skipbuild=yes; skipconfig=yes; skiptar=yes ;;
85 skipinstall) skipinstall=yes ;;
86 skipdmg) skipdmg=yes ;;
87 skipclean) skipclean=yes ;;
88 inplace) inplace=yes; skiptar=yes ;;
89 unicode) unicode=yes ;;
90
91 *) echo "Unknown flag \"${flag}\""
92 usage
93 exit 1
94 esac
95 done
96
97
98 VERSION=`$PYTHON -c "import setup;print setup.VERSION"`
99 SHORTVER=`echo $VERSION | cut -c 1,2,3`
100 PYPREFIX=`$PYTHON -c "import sys; print sys.exec_prefix"`
101 PYLIB=$PYPREFIX/lib/python$PYVER
102 SITEPACKAGES=$PYLIB/site-packages
103
104 if [ $unicode == yes ]; then
105 CHARTYPE=unicode
106 UNICODEOPT=--enable-unicode
107 PYUNICODEOPT=1
108 else
109 CHARTYPE=ansi
110 UNICODEOPT=--disable-unicode
111 PYUNICODEOPT=0
112 fi
113
114
115 # Test if the python we are using is the System installed framework
116 # or one that was installed by the user. This changes where the
117 # site-packages (or its alias) is located in the installer tree.
118 APPLE_PYTHON=no
119 if [ -e /Library/Python/$PYVER ] && [ `dirname $PYTHON` == "/usr/bin" ]; then
120 APPLE_PYTHON=yes
121 fi
122
123
124
125 if [ -z "$TARBALLDIR" ]; then
126 # this is a spot on my fileserver where the tarballs go, adjust
127 # as needed for where you put the wxPython tarball, or set
128 # TARBALLDIR before invoking this script...
129 TARBALLDIR=/stuff/Development/wxPython/dist/$VERSION
130 fi
131 TARBALL=$TARBALLDIR/wxPython-src-$VERSION.tar.gz
132
133 if [ ! -e $TARBALLDIR/wxPython-demo-$VERSION.tar.gz ]; then
134 echo "-------------------------------------------------------"
135 echo " WARNING: Demo tarball not found, will skip building "
136 echo " the Demo app bundle and etc."
137 echo " $TARBALLDIR/wxPython-demo-$VERSION.tar.gz"
138 echo "-------------------------------------------------------"
139 fi
140
141 if [ ! -e $TARBALLDIR/wxPython-docs-$VERSION.tar.gz ]; then
142 echo "-------------------------------------------------------"
143 echo " WARNING: Docs tarball not found, will skip building "
144 echo " the the wxDocsViewer app bundle and etc."
145 echo " $TARBALLDIR/wxPython-docs-$VERSION.tar.gz"
146 echo "-------------------------------------------------------"
147 fi
148
149
150
151
152 PREFIX=/usr/local/lib/wxPython-$CHARTYPE-$VERSION
153 BINPREFIX=/usr/local/bin
154
155 WXROOT=`dirname $PWD`
156 PROGDIR="`dirname \"$0\"`"
157 TMPDIR=$PWD/_build_dmg
158
159 BUILDROOT=$TMPDIR/build
160
161 INSTALLROOT=$TMPDIR/install-root
162 INSTALLAPPS=$TMPDIR/install-apps
163
164 DMGDIR=$TMPDIR/dmg
165 DMGROOT=$DMGDIR/root
166 DMGAPPS=$DMGDIR/apps
167
168 RESOURCEDIR=$PROGDIR/resources
169 DESTDIR=$PWD/dist
170 SRCROOT=$BUILDROOT/wxPython-src-$VERSION
171
172
173 #----------------------------------------------------------------------
174 # Setup builddirs
175
176 mkdir -p $BUILDROOT
177 mkdir -p $INSTALLROOT
178 mkdir -p $INSTALLAPPS
179
180 rm -rf $DMGDIR
181 mkdir -p $DMGROOT
182 mkdir -p $DMGAPPS/Docs
183 mkdir -p $DMGAPPS/Samples
184
185
186 pushd $BUILDROOT
187
188
189 #----------------------------------------------------------------------
190 # Unpack the tarball
191
192 if [ $skiptar != yes ]; then
193 echo Unarchiving tarball...
194 tar xzf $TARBALL
195 fi
196
197 if [ $inplace = no ]; then
198 # make a build dir and cd to it.
199 cd wxPython-src-$VERSION
200 WXDIR=`pwd`
201 mkdir -p $WXDIR/bld
202 cd $WXDIR/bld
203 WXBLD=$WXDIR/bld
204 else
205
206 # If building "inplace" then our build dir will be off of the
207 # WXROOT like normal, adjust the variables to find things that
208 # way.
209 WXBLD=$WXROOT/build-$CHARTYPE
210 mkdir -p $WXBLD
211 cd $WXBLD
212 WXDIR=..
213 SRCROOT=$WXROOT
214 fi
215
216 echo "Using wx root dir: $WXROOT"
217 echo "Using build dir: $WXBLD"
218 echo "Using source tree: $WXDIR"
219
220 #----------------------------------------------------------------------
221
222 if [ $KIND = panther ]; then
223 OTHER_CFG_OPTS=--enable-mediactrl
224 fi
225
226 # Configure wxWidgets
227 if [ $skipconfig != yes ]; then
228 $WXDIR/configure \
229 --prefix=$PREFIX \
230 --with-mac \
231 --enable-monolithic \
232 --with-opengl \
233 --enable-sound \
234 --enable-display \
235 --enable-geometry \
236 --enable-debug_flag \
237 --enable-precomp=no \
238 --enable-optimise \
239 --disable-debugreport \
240 $UNICODEOPT $OTHER_CFG_OPTS
241
242 fi
243
244 # Build wxWidgets and wxPython
245 if [ $skipbuild != yes ]; then
246
247 # Make wxWidgets and some contribs
248
249 # # For some reason Rez and DeRez have started locking up if run via
250 # # an ssh terminal. Figure out why, but in the meantime...
251 # if [ "$CHARTYPE" = "ansi" ]; then
252 # echo cp /projects/wx2.5/bld/lib/libwx_macd-2.5.?.r* lib
253 # cp /projects/wx2.5/bld/lib/libwx_macd-2.5.?.r* lib
254 # else
255 # echo cp /projects/wx2.5/bld-unicode/lib/libwx_macud-2.5.?.r* lib
256 # cp /projects/wx2.5/bld-unicode/lib/libwx_macud-2.5.?.r* lib
257 # fi
258 # touch lib/libwx*.r*
259
260 make $MAKEJOBS
261 make $MAKEJOBS -C contrib/src/animate
262 make $MAKEJOBS -C contrib/src/gizmos
263 make $MAKEJOBS -C contrib/src/stc
264
265 # Build wxPython
266 cd $WXROOT/wxPython
267 $PYTHON setup.py \
268 UNICODE=$PYUNICODEOPT \
269 NO_SCRIPTS=1 \
270 EP_ADD_OPTS=1 \
271 WX_CONFIG="$WXBLD/wx-config --inplace" \
272 BUILD_BASE=$WXBLD/wxPython \
273 build
274 fi
275
276 #----------------------------------------------------------------------
277
278 if [ $skipinstall != yes ]; then
279 # Install wxWidgets
280 cd $WXBLD
281 make prefix=$INSTALLROOT$PREFIX install
282 make -C contrib/src/animate prefix=$INSTALLROOT$PREFIX install
283 make -C contrib/src/gizmos prefix=$INSTALLROOT$PREFIX install
284 make -C contrib/src/stc prefix=$INSTALLROOT$PREFIX install
285
286
287 # relink wx-config with a relative link
288 cd $INSTALLROOT$PREFIX/bin
289 rm wx-config
290 ln -s ../lib/wx/config/* wx-config
291
292 # and wxPython
293 cd $WXROOT/wxPython
294 $PYTHON setup.py \
295 UNICODE=$PYUNICODEOPT \
296 NO_SCRIPTS=1 \
297 EP_ADD_OPTS=1 \
298 WX_CONFIG="$INSTALLROOT/$PREFIX/bin/wx-config --prefix=$INSTALLROOT/$PREFIX" \
299 BUILD_BASE=$WXBLD/wxPython \
300 install \
301 --root=$INSTALLROOT
302
303
304 # Apple's Python Framework (such as what comes with Panther)
305 # sym-links the site-packages dir in the framework to
306 # /Library/Python/$PYVER so we need to move the files so they are
307 # installed in the physical location, not the virtual one.
308 if [ $APPLE_PYTHON == yes ]; then
309 if [ -e $INSTALLROOT/Library/Python/$PYVER ]; then
310 rm -r $INSTALLROOT/Library/Python/$PYVER
311 fi
312 mkdir -p $INSTALLROOT/Library/Python/$PYVER
313 mv $INSTALLROOT/$SITEPACKAGES/* $INSTALLROOT/Library/Python/$PYVER
314 rm -r $INSTALLROOT/System
315 SITEPACKAGES=/Library/Python/$PYVER
316 fi
317
318 # install wxPython's tool scripts
319 mkdir -p $INSTALLROOT$BINPREFIX
320 cd $WXROOT/wxPython/scripts
321 python$PYVER CreateMacScripts.py $INSTALLROOT $BINPREFIX
322
323
324 # Remove the .pyc/.pyo files they just take up space and can be recreated
325 # during the install.
326 pushd $WXROOT/wxPython
327 $PYTHON $PROGDIR/../zappycfiles.py $INSTALLROOT > /dev/null
328 popd
329
330 # Set premissions for files in $INSTALLROOT
331 if [ "$UID" = "0" ]; then
332 chown -R root:admin $INSTALLROOT
333 chmod -R g+w $INSTALLROOT
334 fi
335 fi
336
337 if [ $APPLE_PYTHON == yes ]; then
338 SITEPACKAGES=/Library/Python/$PYVER
339 fi
340 PKGDIR=`cat $INSTALLROOT$SITEPACKAGES/wx.pth`
341
342 popd
343
344 #----------------------------------------------------------------------
345
346 # Make the Installer packages and disk image
347 if [ $skipdmg != yes ]; then
348
349 #-----------------------------------------------
350 # The main runtime installer package
351
352 # Make the welcome message
353 case $KIND in
354 panther) W_MSG="the Panther (OS X 10.3.x) version of" ;;
355 jaguar) W_MSG="the Jaguar (OS X 10.2.x) version of" ;;
356 esac
357
358
359 cat > $RESOURCEDIR/Welcome.txt <<EOF
360 Welcome!
361
362 This Installer package will install the wxPython $CHARTYPE runtime $VERSION for $W_MSG MacPython-OSX $PYVER. This includes:
363
364 * The wxPython packages and modules
365 * The wxWidgets shared libraries and headers
366 * Some command line tool scripts, installed to /usr/local/bin.
367
368 You must install onto your current boot disk, eventhough the installer does not enforce this, otherwise things will not work.
369
370 You can install more than one version of the wxPython runtime if you desire. The most recently installed version will be the default wxPython, but you can choose another by setting the PYTHONPATH or by using the wxversion module. See http://wiki.wxpython.org/index.cgi/MultiVersionInstalls for more details.
371
372 Build date: `date`
373 EOF
374
375 # make the preflight script
376 cat > $RESOURCEDIR/preflight <<EOF
377 #!/bin/sh
378 # Cleanup any old install of the wxPython package
379 rm -rf \$2$SITEPACKAGES/wxPython
380 rm -rf \$2$SITEPACKAGES/wx
381 rm -rf \$2$SITEPACKAGES/$PKGDIR
382 exit 0
383 EOF
384 chmod +x $RESOURCEDIR/preflight
385
386 # make the postflight script
387 cat > $RESOURCEDIR/postflight <<EOF
388 #!/bin/sh -e
389 # Compile the .py files in the wxPython pacakge
390 $PYTHON \$2$PYLIB/compileall.py \$2$SITEPACKAGES/$PKGDIR
391 $PYTHON -O \$2$PYLIB/compileall.py \$2$SITEPACKAGES/$PKGDIR
392
393 # and all of the wxPython pacakge should be group writable
394 chgrp -R admin \$2$SITEPACKAGES/$PKGDIR
395 chmod -R g+w \$2$SITEPACKAGES/$PKGDIR
396
397 exit 0
398 EOF
399 chmod +x $RESOURCEDIR/postflight
400
401
402
403 # Build the main Installer Package...
404 PKGNAME=wxPython${SHORTVER}-osx-$CHARTYPE-$KIND
405 if [ $PYVER != 2.3 ]; then
406 PKGNAME=wxPython${SHORTVER}-osx-$CHARTYPE-$KIND-py$PYVER
407 fi
408 rm -rf $PKGNAME.pkg
409 $PYTHON $PROGDIR/../buildpkg.py \
410 --Title=$PKGNAME \
411 --Version=$VERSION \
412 --Description="wxPython $CHARTYPE runtime $VERSION for $W_MSG MacPython-OSX $PYVER" \
413 --NeedsAuthorization="YES" \
414 --Relocatable="NO" \
415 --InstallOnly="YES" \
416 $INSTALLROOT \
417 $RESOURCEDIR
418
419 mv $PKGNAME.pkg $DMGROOT
420
421 rm $RESOURCEDIR/postflight
422 rm $RESOURCEDIR/preflight
423 rm $RESOURCEDIR/Welcome.txt
424
425
426 #-----------------------------------------------
427 # Make a README to go on the disk image
428 cat > "$DMGROOT/README 1st.txt" <<EOF
429 Welcome to wxPython!
430
431 This disk image contains the following items:
432
433 wxPython${SHORTVER}-osx-$CHARTYPE-$VERSION-$KIND
434
435 This Installer contains the wxPython runtime, compiled on a
436 $KIND OS X system, using the $CHARTYPE build of the wxWidgets
437 library. It includes the Python modules and extension
438 modules, as well as the wxWidgets libraries.
439
440 It is possible to have more than one version of the runtime
441 installed at once if you wish. The most recently installed
442 version will be the default wxPython, but you can choose
443 another by setting the PYTHONPATH or by using the wxversion
444 module. For more details see:
445 http://wiki.wxpython.org/index.cgi/MultiVersionInstalls
446
447
448 uninstall_wxPython.py
449
450 A simple tool to help you manage your installed versions of
451 wxPython. It will allow you to choose from the currently
452 installed wxPython packages and to select one for
453 uninstallation. It is a text-mode tool so you can either run
454 it from a Terminal command line, or you can open it with
455 PythonLauncher and let it create a Terminal to run it in.
456
457 NOTE: If you have versions prior to 2.5.3.1 installed, please
458 do run this uninstall tool to remove the older version.
459
460 EOF
461
462
463
464 cp $PROGDIR/../uninstall_wxPython.py $DMGROOT
465
466
467 #-----------------------------------------------
468 # Make a disk image to hold these files
469 dmgname=wxPython${SHORTVER}-osx-$CHARTYPE-$VERSION-$TAG-py$PYVER
470 $PROGDIR/../makedmg $DMGROOT $DMGDIR $dmgname
471
472 echo Moving $DMGDIR/$dmgname.dmg to $DESTDIR
473 mv $DMGDIR/$dmgname.dmg $DESTDIR
474
475
476 #---------------------------------------------------------------------------
477 # Now create app bundles for the demo, docs, and tools and make another
478 # disk image to hold it all.
479 #---------------------------------------------------------------------------
480
481 cat > "$DMGAPPS/README 1st.txt" <<EOF
482 Welcome to wxPython!
483
484 On this disk image you will find Demo, Tools, Docs, and etc. for
485 wxPython $VERSION. Everything here is optional and you can drag them
486 out of the disk image and drop them wherever you want. You will need
487 to have an installed wxPython runtime to be able to use any of them.
488
489
490 wxPython Demo An application bundle version of the demo.
491 (This has it's own copy of the demo sources
492 within the bundle.)
493
494 XRCed An application for editing wxPython resource
495 files (XRC files.)
496
497 PyCrust An application that provides an interactive
498 Python shell and also namespace inspectors.
499
500
501
502 Docs/wxDocsViewer An application that allows you to view the
503 wxWidgets documentation.
504
505 Docs/licence License files.
506
507 Docs/other A few readmes, change log, etc.
508
509
510 Samples/samples Several small sample applications that
511 demonstrate how to use wxPython.
512
513 Samples/demo A copy of the wxPython demo source code,
514 just open the folder and run demo.pyw.
515
516 Happy Hacking!
517 EOF
518
519 # PyAlaMode An extension of PyCrust that includes source
520 # file editing capabilities.
521
522
523 # wxDocs
524 if [ ! -e $TARBALLDIR/wxPython-docs-$VERSION.tar.gz ]; then
525 cat > "$DMGAPPS/Docs/Build ERROR.txt" <<EOF
526
527 The wxPython-docs tarball was not found when building this disk image!
528
529 EOF
530
531 else
532 pushd $BUILDROOT
533 tar xzvf $TARBALLDIR/wxPython-docs-$VERSION.tar.gz
534 popd
535
536 # Make an app to launch viewdocs.py
537 $PYTHONW $PROGDIR/../buildapp.py \
538 --builddir=$DMGAPPS/Docs \
539 --name=wxDocsViewer \
540 --mainprogram=$BUILDROOT/wxPython-$VERSION/docs/viewdocs.py \
541 --iconfile=$PROGDIR/Info.icns \
542 build
543
544 cp $BUILDROOT/wxPython-$VERSION/docs/*.zip $DMGAPPS/Docs/wxDocsViewer.app/Contents/Resources
545
546 cat > "$DMGAPPS/Docs/README 1st.txt" <<EOF
547
548 The wxDocsViewer application needs to be copied to your Desktop (or
549 someplace else you have write access to) before you can run it, so it
550 can cache some indexes within its bundle.
551
552 EOF
553
554 fi
555
556 # license files, docs, etc.
557 pushd $DMGAPPS/Docs
558 cp -pR $SRCROOT/wxPython/licence .
559 cp -pR $SRCROOT/wxPython/docs .
560 rm -rf docs/bin
561 rm -rf docs/xml-raw
562 mv docs other
563 popd
564
565
566 if [ ! -e $TARBALLDIR/wxPython-demo-$VERSION.tar.gz ]; then
567 cat > "$DMGAPPS/Samples/Build ERROR.txt" <<EOF
568
569 The wxPython-demo tarball was not found when building this disk image!
570
571 EOF
572 cp "$DMGAPPS/Samples/Build ERROR.txt" $DMGAPPS
573
574 else
575
576 # Copy the demo and samples to the disk image from the tarball
577 pushd $DMGAPPS/Samples
578 tar xzvf $TARBALLDIR/wxPython-demo-$VERSION.tar.gz
579 mv wxPython-$VERSION/* .
580 rm -rf wxPython-$VERSION
581 rm demo/b demo/.setup.sh
582 mv demo/demo.py demo/demo.pyw
583 popd
584
585 # Make an app bundle to run the demo
586 $PYTHONW $PROGDIR/../buildapp.py \
587 --builddir=$DMGAPPS \
588 --name="wxPython Demo" \
589 --mainprogram=$DMGAPPS/Samples/demo/demo.pyw \
590 --iconfile=$PROGDIR/RunDemo.icns \
591 build
592 cp -pR $DMGAPPS/Samples/demo/* "$DMGAPPS/wxPython Demo.app/Contents/Resources"
593 fi
594
595
596 # Make an app bundle to launch PyCrust
597 $PYTHONW $PROGDIR/../buildapp.py \
598 --builddir=$DMGAPPS \
599 --name=PyCrust \
600 --mainprogram=$INSTALLROOT$BINPREFIX/pycrust.py \
601 --iconfile=$PROGDIR/PieShell.icns \
602 build
603
604 ## TODO: PyAlaMode needs tweaked to be able to run from a bundle. It
605 ## needs to know to ignore command line parameters and etc...
606 # # and PyAlaMode
607 # $PYTHONW $PROGDIR/../buildapp.py \
608 # --builddir=$DMGAPPS \
609 # --name=PyAlaMode \
610 # --mainprogram=$INSTALLROOT$BINPREFIX/pyalamode.py \
611 # --iconfile=$PROGDIR/PieShell.icns \
612 # build
613
614 # Make an app to launch XRCed
615 $PYTHONW $PROGDIR/../buildapp.py \
616 --builddir=$DMGAPPS \
617 --name=XRCed \
618 --mainprogram=$INSTALLROOT$BINPREFIX/xrced.py \
619 --iconfile=$PROGDIR/XRCed.icns \
620 build
621
622
623
624 # and then finally make a disk image containing everything
625 dmgname=wxPython${SHORTVER}-osx-docs-demos-$VERSION-$TAG-py$PYVER
626 $PROGDIR/../makedmg $DMGAPPS $DMGDIR $dmgname
627
628 echo Moving $DMGDIR/$dmgname.dmg to $DESTDIR
629 mv $DMGDIR/$dmgname.dmg $DESTDIR
630 fi
631
632
633 # Cleanup build/install dirs
634 if [ $skipclean != yes ]; then
635 echo "Cleaning up..."
636 rm -rf $TMPDIR
637 else
638 echo "Cleanup is disabled. You should remove $TMPDIR when finished"
639 fi
640