2 #----------------------------------------------------------------------
3 # Build wxMac and wxPythonOSX from the tarball and then make an
4 # Installer package out of it.
8 spectemplate
=distrib
/wxPythonFull.spec.
in
10 if [ ! -d wxPython
-o ! -e ${spectemplate} ]; then
11 echo "Please run this script from the root wxPython directory."
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 "-------------------------------------------------------"
22 #----------------------------------------------------------------------
27 echo "Usage: $0 PYVER [command flags...]"
29 echo " PYVER Python version to use to do the build. A"
30 echo " matching python\$PYVER must be found on the PATH"
32 echo "optional command flags:"
33 echo " skiptar Don't unpack the tarball"
34 echo " inplace Don't use the tarball, build from the CVS tree instead"
35 echo " (The Docs and Demo tarballs are still required for a full build.)"
36 echo " reswig Regenerate SWIG wrappers"
37 echo " universal Generate Universal wxWidgets binary (requires Universal Python "
38 echo " to general Universal wxPython)."
39 echo " unicode Make a unicode build"
40 echo " skipconfig Don't run configure"
41 echo " skipbuild Don't build wxWidgets or wxPython"
42 echo " skipinstall Don't do the installation step"
43 echo " skipdmg Don't make the package or diskimage"
44 echo " skipclean Don't do the cleanup at the end"
50 if [ "$PYVER" != "" ] && which python
$PYVER && which pythonw
$PYVER; then
51 PYTHON
=`which python$PYVER`
52 PYTHONW
=`which pythonw$PYVER`
74 skiptar
) skiptar
=yes ;;
75 skipconfig
) skipconfig
=yes; skiptar
=yes ;;
76 skipbuild
) skipbuild
=yes; skipconfig
=yes; skiptar
=yes ;;
77 skipinstall
) skipinstall
=yes ;;
78 skipdmg
) skipdmg
=yes ;;
79 skipclean
) skipclean
=yes ;;
80 inplace
) inplace
=yes; skiptar
=yes ;;
81 unicode
) unicode
=yes ;;
85 universal
) universal
=yes ;;
86 *) echo "Unknown flag \"${flag}\""
94 OSX_VERSION
=`sw_vers -productVersion`
95 OSX_VERSION
=${OSX_VERSION:0:4}
98 10.4) TAG
=macosx10.4
;;
99 10.3) TAG
=macosx10.3
;;
100 10.2) TAG
=macosx10.2
;;
104 if [ $universal = yes ]; then
110 VERSION
=`$PYTHON -c "import setup;print setup.VERSION"`
111 SHORTVER
=`echo $VERSION | cut -c 1,2,3`
112 PYPREFIX
=`$PYTHON -c "import sys; print sys.exec_prefix"`
113 PYLIB
=$PYPREFIX/lib
/python
$PYVER
114 SITEPACKAGES
=$PYLIB/site
-packages
116 if [ $unicode == yes ]; then
118 UNICODEOPT
=--enable-unicode
122 UNICODEOPT
=--disable-unicode
126 if [ $debug == yes ]; then
127 DEBUG_FLAG
=--enable-debug
130 DEBUG_FLAG
=--enable-debug_flag
135 # Test if the python we are using is the System installed framework
136 # or one that was installed by the user. This changes where the
137 # site-packages (or its alias) is located in the installer tree.
139 if [ -e /Library
/Python
/$PYVER ] && [ `dirname $PYTHON` == "/usr/bin" ]; then
145 if [ -z "$TARBALLDIR" ]; then
146 # this is a spot on my fileserver where the tarballs go, adjust
147 # as needed for where you put the wxPython tarball, or set
148 # TARBALLDIR before invoking this script...
149 TARBALLDIR
=/stuff
/Development
/wxPython
/dist
/$VERSION
151 TARBALL
=$TARBALLDIR/wxPython
-src-$VERSION.
tar.bz2
153 if [ ! -e $TARBALLDIR/wxPython
-demo-$VERSION.
tar.bz2
]; then
154 echo "-------------------------------------------------------"
155 echo " WARNING: Demo tarball not found, will skip building "
156 echo " the Demo app bundle and etc."
157 echo " $TARBALLDIR/wxPython-demo-$VERSION.tar.bz2"
158 echo "-------------------------------------------------------"
161 if [ ! -e $TARBALLDIR/wxPython
-docs-$VERSION.
tar.bz2
]; then
162 echo "-------------------------------------------------------"
163 echo " WARNING: Docs tarball not found, will skip building "
164 echo " the the wxDocsViewer app bundle and etc."
165 echo " $TARBALLDIR/wxPython-docs-$VERSION.tar.bz2"
166 echo "-------------------------------------------------------"
172 PREFIX
=/usr
/local
/lib
/wxPython
-$CHARTYPE-$VERSION
173 BINPREFIX
=/usr
/local
/bin
175 SWIGBIN
=/opt
/swig
/bin
/swig
176 WXROOT
=`dirname $PWD`
177 PROGDIR
="`dirname \"$0\"`"
178 TMPDIR
=$PWD/_build_dmg
180 BUILDROOT
=$TMPDIR/build
182 INSTALLROOT
=$TMPDIR/install-root
183 INSTALLAPPS
=$TMPDIR/install-apps
189 RESOURCEDIR
=$PROGDIR/resources
191 SRCROOT
=$BUILDROOT/wxPython
-src-$VERSION
194 #----------------------------------------------------------------------
198 mkdir -p $INSTALLROOT
199 mkdir -p $INSTALLAPPS
203 mkdir -p $DMGAPPS/Docs
204 mkdir -p $DMGAPPS/Samples
206 if [ ! -d $DESTDIR ]; then
213 #----------------------------------------------------------------------
216 if [ $skiptar != yes ]; then
217 echo Unarchiving tarball...
221 if [ $inplace = no
]; then
222 # make a build dir and cd to it.
223 cd wxPython
-src-$VERSION
230 # If building "inplace" then our build dir will be off of the
231 # WXROOT like normal, adjust the variables to find things that
233 WXBLD
=$WXROOT/build
-$CHARTYPE
240 echo "Using wx root dir: $WXROOT"
241 echo "Using build dir: $WXBLD"
242 echo "Using source tree: $WXDIR"
244 #----------------------------------------------------------------------
246 if [ $OSX_VERSION = 10.3 -o $OSX_VERSION = 10.4 ]; then
247 OTHER_CFG_OPTS
=--enable-mediactrl
250 # Configure wxWidgets
251 if [ $skipconfig != yes -a $universal != yes ]; then
255 --enable-monolithic \
260 --enable-graphics_ctx \
262 --enable-precomp=no \
264 --disable-debugreport \
265 --disable-precompiled-headers \
266 $UNICODEOPT $OTHER_CFG_OPTS
270 # Build wxWidgets and wxPython
271 if [ $skipbuild != yes ]; then
273 # Make wxWidgets and some contribs
274 WXBLD_CONFIG
="$WXBLD/wx-config"
275 if [ $universal = yes ]; then
277 export BUILDPREFIX
=$PREFIX
278 export INSTALLDIR
=$INSTALLROOT$PREFIX
279 $WXDIR/distrib
/scripts
/mac
/macbuild wxpython universal
$CHARTYPE
282 make $MAKEJOBS -C contrib
/src
/gizmos
283 make $MAKEJOBS -C contrib
/src
/stc
287 if [ $reswig = yes ]; then
294 UNICODE
=$PYUNICODEOPT \
297 WX_CONFIG
="$WXBLD_CONFIG --inplace" \
298 BUILD_BASE
=$WXBLD/wxPython \
304 #----------------------------------------------------------------------
306 if [ $skipinstall != yes ]; then
309 if [ $universal != yes ]; then
310 make prefix
=$INSTALLROOT$PREFIX install
311 make -C contrib
/src
/gizmos prefix
=$INSTALLROOT$PREFIX install
312 make -C contrib
/src
/stc prefix
=$INSTALLROOT$PREFIX install
315 # relink wx-config with a relative link
316 cd $INSTALLROOT$PREFIX/bin
318 ln -s ..
/lib
/wx
/config
/* wx
-config
323 UNICODE
=$PYUNICODEOPT \
326 WX_CONFIG
="$INSTALLROOT$PREFIX/bin/wx-config --prefix=$INSTALLROOT$PREFIX" \
327 BUILD_BASE
=$WXBLD/wxPython \
332 # Apple's Python Framework (such as what comes with Panther)
333 # sym-links the site-packages dir in the framework to
334 # /Library/Python/$PYVER so we need to move the files so they are
335 # installed in the physical location, not the virtual one.
336 if [ $APPLE_PYTHON == yes ]; then
337 if [ -e $INSTALLROOT/Library
/Python
/$PYVER ]; then
338 rm -r $INSTALLROOT/Library
/Python
/$PYVER
340 mkdir -p $INSTALLROOT/Library
/Python
/$PYVER
341 mv $INSTALLROOT/$SITEPACKAGES/* $INSTALLROOT/Library
/Python
/$PYVER
342 rm -r $INSTALLROOT/System
343 SITEPACKAGES
=/Library
/Python
/$PYVER
346 # install wxPython's tool scripts
347 mkdir -p $INSTALLROOT$BINPREFIX
348 cd $WXROOT/wxPython
/scripts
349 python
$PYVER CreateMacScripts.py
$INSTALLROOT $BINPREFIX
352 # Remove the .pyc/.pyo files they just take up space and can be recreated
353 # during the install.
354 pushd $WXROOT/wxPython
355 $PYTHON $PROGDIR/..
/zappycfiles.py
$INSTALLROOT > /dev
/null
358 # Set premissions for files in $INSTALLROOT
359 if [ "$UID" = "0" ]; then
360 chown
-R root
:admin
$INSTALLROOT
361 chmod -R g
+w
$INSTALLROOT
365 if [ $APPLE_PYTHON == yes ]; then
366 SITEPACKAGES
=/Library
/Python
/$PYVER
368 PKGDIR
=`cat $INSTALLROOT$SITEPACKAGES/wx.pth`
372 #----------------------------------------------------------------------
374 # Make the Installer packages and disk image
375 if [ $skipdmg != yes ]; then
377 #-----------------------------------------------
378 # The main runtime installer package
380 # Make the welcome message
382 10.4) W_MSG
="the Tiger (OS X 10.4.x Intel) version of" ;;
383 10.3) W_MSG
="the Panther (OS X 10.3.x) version of" ;;
384 10.2) W_MSG
="the Jaguar (OS X 10.2.x) version of" ;;
387 if [ $universal == yes ]; then
388 W_MSG
="the Universal (OS X 10.4.x and above) version of"
392 cat > $RESOURCEDIR/Welcome.txt
<<EOF
395 This Installer package will install the wxPython $CHARTYPE runtime $VERSION for $W_MSG MacPython-OSX $PYVER. This includes:
397 * The wxPython packages and modules
398 * The wxWidgets shared libraries and headers
399 * Some command line tool scripts, installed to /usr/local/bin.
401 You must install onto your current boot disk, eventhough the installer does not enforce this, otherwise things will not work.
403 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.
408 # make the preflight script
409 cat > $RESOURCEDIR/preflight
<<EOF
411 # Cleanup any old install of the wxPython package
412 rm -rf \$2$SITEPACKAGES/wxPython
413 rm -rf \$2$SITEPACKAGES/wx
414 rm -rf \$2$SITEPACKAGES/$PKGDIR
417 chmod +x
$RESOURCEDIR/preflight
419 # make the postflight script
420 cat > $RESOURCEDIR/postflight
<<EOF
422 # Compile the .py files in the wxPython pacakge
423 $PYTHON \$2$PYLIB/compileall.py \$2$SITEPACKAGES/$PKGDIR
424 $PYTHON -O \$2$PYLIB/compileall.py \$2$SITEPACKAGES/$PKGDIR
426 # and all of the wxPython pacakge should be group writable
427 chgrp -R admin \$2$SITEPACKAGES/$PKGDIR
428 chmod -R g+w \$2$SITEPACKAGES/$PKGDIR
432 chmod +x
$RESOURCEDIR/postflight
436 # Build the main Installer Package...
437 PKGNAME
=wxPython
${SHORTVER}-osx-$CHARTYPE-$TAG
438 if [ $PYVER != 2.3 ]; then
439 PKGNAME
=wxPython
${SHORTVER}-osx-$CHARTYPE-$TAG-py$PYVER
442 $PYTHON $PROGDIR/..
/buildpkg.py \
445 --Description="wxPython $CHARTYPE runtime $VERSION for $W_MSG MacPython-OSX $PYVER" \
446 --NeedsAuthorization="YES" \
448 --InstallOnly="YES" \
452 mv $PKGNAME.pkg
$DMGROOT/$PKGNAME.pkg
454 rm $RESOURCEDIR/postflight
455 rm $RESOURCEDIR/preflight
456 rm $RESOURCEDIR/Welcome.txt
459 #-----------------------------------------------
460 # Make a README to go on the disk image
461 cat > "$DMGROOT/README 1st.txt" <<EOF
464 This disk image contains the following items:
466 wxPython${SHORTVER}-osx-$CHARTYPE-$VERSION-$KIND
468 This Installer contains the wxPython runtime, compiled on a
469 $KIND OS X system, using the $CHARTYPE build of the wxWidgets
470 library. It includes the Python modules and extension
471 modules, as well as the wxWidgets libraries.
473 It is possible to have more than one version of the runtime
474 installed at once if you wish. The most recently installed
475 version will be the default wxPython, but you can choose
476 another by setting the PYTHONPATH or by using the wxversion
477 module. For more details see:
478 http://wiki.wxpython.org/index.cgi/MultiVersionInstalls
481 uninstall_wxPython.py
483 A simple tool to help you manage your installed versions of
484 wxPython. It will allow you to choose from the currently
485 installed wxPython packages and to select one for
486 uninstallation. It is a text-mode tool so you can either run
487 it from a Terminal command line, or you can open it with
488 PythonLauncher and let it create a Terminal to run it in.
490 NOTE: If you have versions prior to 2.5.3.1 installed, please
491 do run this uninstall tool to remove the older version.
497 cp $PROGDIR/..
/uninstall_wxPython.py
$DMGROOT
500 #-----------------------------------------------
501 # Make a disk image to hold these files
502 dmgname
=wxPython
${SHORTVER}-osx-$CHARTYPE-$VERSION-$TAG-py$PYVER
503 $PROGDIR/..
/makedmg
$DMGROOT $DMGDIR $dmgname
505 echo Moving
$DMGDIR/$dmgname.dmg to
$DESTDIR
506 mv $DMGDIR/$dmgname.dmg
$DESTDIR/$dmgname.dmg
509 #---------------------------------------------------------------------------
510 # Now create app bundles for the demo, docs, and tools and make another
511 # disk image to hold it all.
512 #---------------------------------------------------------------------------
514 cat > "$DMGAPPS/README 1st.txt" <<EOF
517 On this disk image you will find Demo, Tools, Docs, and etc. for
518 wxPython $VERSION. Everything here is optional and you can drag them
519 out of the disk image and drop them wherever you want. You will need
520 to have an installed wxPython runtime to be able to use any of them.
523 wxPython Demo An application bundle version of the demo.
524 (This has it's own copy of the demo sources
527 XRCed An application for editing wxPython resource
530 PyCrust An application that provides an interactive
531 Python shell and also namespace inspectors.
535 Docs/wxDocsViewer An application that allows you to view the
536 wxWidgets documentation.
538 Docs/licence License files.
540 Docs/other A few readmes, change log, etc.
543 Samples/samples Several small sample applications that
544 demonstrate how to use wxPython.
546 Samples/demo A copy of the wxPython demo source code,
547 just open the folder and run demo.pyw.
552 # PyAlaMode An extension of PyCrust that includes source
553 # file editing capabilities.
557 if [ ! -e $TARBALLDIR/wxPython
-docs-$VERSION.
tar.bz2
]; then
558 cat > "$DMGAPPS/Docs/Build ERROR.txt" <<EOF
560 The wxPython-docs tarball was not found when building this disk image!
566 tar xjvf
$TARBALLDIR/wxPython
-docs-$VERSION.
tar.bz2
569 # Make an app to launch viewdocs.py
570 $PYTHONW $PROGDIR/..
/buildapp.py \
571 --builddir=$DMGAPPS/Docs \
572 --name=wxDocsViewer \
573 --mainprogram=$BUILDROOT/wxPython
-$VERSION/docs
/viewdocs.py \
574 --iconfile=$PROGDIR/Info.icns \
577 cp $BUILDROOT/wxPython
-$VERSION/docs
/*.
zip $DMGAPPS/Docs
/wxDocsViewer.app
/Contents
/Resources
579 cat > "$DMGAPPS/Docs/README 1st.txt" <<EOF
581 The wxDocsViewer application needs to be copied to your Desktop (or
582 someplace else you have write access to) before you can run it, so it
583 can cache some indexes within its bundle.
589 # license files, docs, etc.
591 cp -pR $SRCROOT/wxPython
/licence .
592 cp -pR $SRCROOT/wxPython
/docs .
599 if [ ! -e $TARBALLDIR/wxPython
-demo-$VERSION.
tar.bz2
]; then
600 cat > "$DMGAPPS/Samples/Build ERROR.txt" <<EOF
602 The wxPython-$VERSION-demo tarball was not found when building this disk image!
605 cp "$DMGAPPS/Samples/Build ERROR.txt" $DMGAPPS
609 # Copy the demo and samples to the disk image from the tarball
610 pushd $DMGAPPS/Samples
611 tar xjvf
$TARBALLDIR/wxPython
-demo-$VERSION.
tar.bz2
612 mv wxPython
-$VERSION/* .
613 rm -rf wxPython
-$VERSION
614 rm -f demo
/b demo
/.setup.sh
615 mv demo
/demo.py demo
/demo.pyw
618 # Make an app bundle to run the demo
619 $PYTHONW $PROGDIR/..
/buildapp.py \
620 --builddir=$DMGAPPS \
621 --name="wxPython Demo" \
622 --mainprogram=$DMGAPPS/Samples
/demo
/demo.pyw \
623 --iconfile=$PROGDIR/RunDemo.icns \
625 cp -pR $DMGAPPS/Samples
/demo
/* "$DMGAPPS/wxPython Demo.app/Contents/Resources"
629 # Make an app bundle to launch PyCrust
630 $PYTHONW $PROGDIR/..
/buildapp.py \
631 --builddir=$DMGAPPS \
633 --mainprogram=$INSTALLROOT$BINPREFIX/pycrust.py \
634 --iconfile=$PROGDIR/PieShell.icns \
637 ## TODO: PyAlaMode needs tweaked to be able to run from a bundle. It
638 ## needs to know to ignore command line parameters and etc...
640 # $PYTHONW $PROGDIR/../buildapp.py \
641 # --builddir=$DMGAPPS \
643 # --mainprogram=$INSTALLROOT$BINPREFIX/pyalamode.py \
644 # --iconfile=$PROGDIR/PieShell.icns \
647 # Make an app to launch XRCed
648 $PYTHONW $PROGDIR/..
/buildapp.py \
649 --builddir=$DMGAPPS \
651 --mainprogram=$INSTALLROOT$BINPREFIX/xrced.py \
652 --iconfile=$PROGDIR/XRCed.icns \
657 # and then finally make a disk image containing everything
658 dmgname
=wxPython
${SHORTVER}-osx-docs-demos-$VERSION-$TAG-py$PYVER
659 $PROGDIR/..
/makedmg
$DMGAPPS $DMGDIR $dmgname
661 echo Moving
$DMGDIR/$dmgname.dmg to
$DESTDIR
662 mv $DMGDIR/$dmgname.dmg
$DESTDIR/$dmgname.dmg
666 # Cleanup build/install dirs
667 if [ $skipclean != yes ]; then
668 echo "Cleaning up..."
671 echo "Cleanup is disabled. You should remove $TMPDIR when finished"