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"