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 \
 
 261         --enable-precomp=no \
 
 263         --disable-debugreport \
 
 264         --disable-precompiled-headers \
 
 265         $UNICODEOPT $OTHER_CFG_OPTS 
 269 # Build wxWidgets and wxPython 
 270 if [ $skipbuild != yes ]; then 
 272     # Make wxWidgets and some contribs 
 273     WXBLD_CONFIG
="$WXBLD/wx-config" 
 274     if [ $universal = yes ]; then 
 276         export BUILDPREFIX
=$PREFIX 
 277         export INSTALLDIR
=$INSTALLROOT$PREFIX 
 278         $WXDIR/distrib
/scripts
/mac
/macbuild wxpython universal 
$CHARTYPE 
 281         make $MAKEJOBS -C contrib
/src
/animate
 
 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
/animate prefix
=$INSTALLROOT$PREFIX install 
 312         make -C contrib
/src
/gizmos  prefix
=$INSTALLROOT$PREFIX install 
 313         make -C contrib
/src
/stc     prefix
=$INSTALLROOT$PREFIX install 
 316     # relink wx-config with a relative link 
 317     cd $INSTALLROOT$PREFIX/bin
 
 319     ln -s ..
/lib
/wx
/config
/* wx
-config 
 324         UNICODE
=$PYUNICODEOPT \
 
 327         WX_CONFIG
="$INSTALLROOT$PREFIX/bin/wx-config --prefix=$INSTALLROOT$PREFIX" \
 
 328         BUILD_BASE
=$WXBLD/wxPython \
 
 333     # Apple's Python Framework (such as what comes with Panther) 
 334     # sym-links the site-packages dir in the framework to 
 335     # /Library/Python/$PYVER so we need to move the files so they are 
 336     # installed in the physical location, not the virtual one. 
 337     if [ $APPLE_PYTHON == yes ]; then 
 338         if [ -e $INSTALLROOT/Library
/Python
/$PYVER ]; then 
 339             rm -r $INSTALLROOT/Library
/Python
/$PYVER 
 341         mkdir -p $INSTALLROOT/Library
/Python
/$PYVER 
 342         mv $INSTALLROOT/$SITEPACKAGES/* $INSTALLROOT/Library
/Python
/$PYVER 
 343         rm -r $INSTALLROOT/System
 
 344         SITEPACKAGES
=/Library
/Python
/$PYVER 
 347     # install wxPython's tool scripts 
 348     mkdir -p $INSTALLROOT$BINPREFIX 
 349     cd $WXROOT/wxPython
/scripts
 
 350     python
$PYVER CreateMacScripts.py 
$INSTALLROOT $BINPREFIX 
 353     # Remove the .pyc/.pyo files they just take up space and can be recreated 
 354     # during the install. 
 355     pushd $WXROOT/wxPython
 
 356     $PYTHON $PROGDIR/..
/zappycfiles.py 
$INSTALLROOT > /dev
/null
 
 359     # Set premissions for files in $INSTALLROOT 
 360     if [ "$UID" = "0" ]; then 
 361         chown 
-R root
:admin 
$INSTALLROOT 
 362         chmod -R g
+w        
$INSTALLROOT 
 366 if [ $APPLE_PYTHON == yes ]; then 
 367     SITEPACKAGES
=/Library
/Python
/$PYVER 
 369 PKGDIR
=`cat $INSTALLROOT$SITEPACKAGES/wx.pth` 
 373 #---------------------------------------------------------------------- 
 375 # Make the Installer packages and disk image 
 376 if [ $skipdmg != yes ]; then 
 378     #----------------------------------------------- 
 379     # The main runtime installer package 
 381     # Make the welcome message 
 383         10.4)  W_MSG
="the Tiger (OS X 10.4.x Intel) version of" ;; 
 384         10.3)  W_MSG
="the Panther (OS X 10.3.x) version of" ;; 
 385         10.2)  W_MSG
="the Jaguar (OS X 10.2.x) version of" ;; 
 388     if [ $universal == yes ]; then 
 389       W_MSG
="the Universal (OS X 10.4.x and above) version of" 
 393     cat > $RESOURCEDIR/Welcome.txt 
<<EOF 
 396 This Installer package will install the wxPython $CHARTYPE runtime $VERSION for $W_MSG MacPython-OSX $PYVER.  This includes: 
 398     * The wxPython packages and modules 
 399     * The wxWidgets shared libraries and headers 
 400     * Some command line tool scripts, installed to /usr/local/bin. 
 402 You must install onto your current boot disk, eventhough the installer does not enforce this, otherwise things will not work. 
 404 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. 
 409     # make the preflight script 
 410     cat > $RESOURCEDIR/preflight 
<<EOF 
 412 # Cleanup any old install of the wxPython package 
 413 rm -rf \$2$SITEPACKAGES/wxPython 
 414 rm -rf \$2$SITEPACKAGES/wx 
 415 rm -rf \$2$SITEPACKAGES/$PKGDIR 
 418     chmod +x 
$RESOURCEDIR/preflight
 
 420     # make the postflight script 
 421     cat > $RESOURCEDIR/postflight 
<<EOF 
 423 # Compile the .py files in the wxPython pacakge 
 424 $PYTHON \$2$PYLIB/compileall.py \$2$SITEPACKAGES/$PKGDIR 
 425 $PYTHON -O \$2$PYLIB/compileall.py \$2$SITEPACKAGES/$PKGDIR 
 427 # and all of the wxPython pacakge should be group writable 
 428 chgrp -R admin \$2$SITEPACKAGES/$PKGDIR 
 429 chmod -R g+w \$2$SITEPACKAGES/$PKGDIR 
 433     chmod +x 
$RESOURCEDIR/postflight
 
 437     # Build the main Installer Package... 
 438     PKGNAME
=wxPython
${SHORTVER}-osx-$CHARTYPE-$TAG 
 439     if [ $PYVER != 2.3 ]; then 
 440         PKGNAME
=wxPython
${SHORTVER}-osx-$CHARTYPE-$TAG-py$PYVER 
 443     $PYTHON $PROGDIR/..
/buildpkg.py \
 
 446         --Description="wxPython $CHARTYPE runtime $VERSION for $W_MSG MacPython-OSX $PYVER" \
 
 447         --NeedsAuthorization="YES" \
 
 449         --InstallOnly="YES" \
 
 453     mv $PKGNAME.pkg 
$DMGROOT/$PKGNAME.pkg
 
 455     rm $RESOURCEDIR/postflight
 
 456     rm $RESOURCEDIR/preflight
 
 457     rm $RESOURCEDIR/Welcome.txt
 
 460     #----------------------------------------------- 
 461     # Make a README to go on the disk image 
 462     cat > "$DMGROOT/README 1st.txt" <<EOF 
 465 This disk image contains the following items: 
 467     wxPython${SHORTVER}-osx-$CHARTYPE-$VERSION-$KIND 
 469         This Installer contains the wxPython runtime, compiled on a 
 470         $KIND OS X system, using the $CHARTYPE build of the wxWidgets 
 471         library.  It includes the Python modules and extension 
 472         modules, as well as the wxWidgets libraries. 
 474         It is possible to have more than one version of the runtime 
 475         installed at once if you wish.  The most recently installed 
 476         version will be the default wxPython, but you can choose 
 477         another by setting the PYTHONPATH or by using the wxversion 
 478         module.  For more details see: 
 479         http://wiki.wxpython.org/index.cgi/MultiVersionInstalls  
 482     uninstall_wxPython.py 
 484         A simple tool to help you manage your installed versions of 
 485         wxPython.  It will allow you to choose from the currently 
 486         installed wxPython packages and to select one for 
 487         uninstallation.  It is a text-mode tool so you can either run 
 488         it from a Terminal command line, or you can open it with 
 489         PythonLauncher and let it create a Terminal to run it in. 
 491         NOTE: If you have versions prior to 2.5.3.1 installed, please 
 492         do run this uninstall tool to remove the older version. 
 498     cp $PROGDIR/..
/uninstall_wxPython.py 
$DMGROOT 
 501     #----------------------------------------------- 
 502     # Make a disk image to hold these files 
 503     dmgname
=wxPython
${SHORTVER}-osx-$CHARTYPE-$VERSION-$TAG-py$PYVER 
 504     $PROGDIR/..
/makedmg 
$DMGROOT $DMGDIR $dmgname 
 506     echo Moving 
$DMGDIR/$dmgname.dmg to 
$DESTDIR 
 507     mv $DMGDIR/$dmgname.dmg  
$DESTDIR/$dmgname.dmg
 
 510 #--------------------------------------------------------------------------- 
 511 # Now create app bundles for the demo, docs, and tools and make another 
 512 # disk image to hold it all. 
 513 #--------------------------------------------------------------------------- 
 515     cat > "$DMGAPPS/README 1st.txt" <<EOF 
 518 On this disk image you will find Demo, Tools, Docs, and etc. for 
 519 wxPython $VERSION.  Everything here is optional and you can drag them 
 520 out of the disk image and drop them wherever you want.  You will need 
 521 to have an installed wxPython runtime to be able to use any of them. 
 524    wxPython Demo        An application bundle version of the demo. 
 525                         (This has it's own copy of the demo sources  
 528    XRCed                An application for editing wxPython resource 
 531    PyCrust              An application that provides an interactive 
 532                         Python shell and also namespace inspectors. 
 536    Docs/wxDocsViewer    An application that allows you to view the 
 537                         wxWidgets documentation. 
 539    Docs/licence         License files. 
 541    Docs/other           A few readmes, change log, etc. 
 544    Samples/samples      Several small sample applications that 
 545                         demonstrate how to use wxPython. 
 547    Samples/demo         A copy of the wxPython demo source code, 
 548                         just open the folder and run demo.pyw. 
 553 #   PyAlaMode            An extension of PyCrust that includes source 
 554 #                        file editing capabilities. 
 558     if [ ! -e $TARBALLDIR/wxPython
-docs-$VERSION.
tar.bz2 
]; then 
 559         cat > "$DMGAPPS/Docs/Build ERROR.txt" <<EOF 
 561 The wxPython-docs tarball was not found when building this disk image! 
 567         tar xjvf 
$TARBALLDIR/wxPython
-docs-$VERSION.
tar.bz2
 
 570         # Make an app to launch viewdocs.py 
 571         $PYTHONW $PROGDIR/..
/buildapp.py \
 
 572             --builddir=$DMGAPPS/Docs \
 
 573             --name=wxDocsViewer \
 
 574             --mainprogram=$BUILDROOT/wxPython
-$VERSION/docs
/viewdocs.py \
 
 575             --iconfile=$PROGDIR/Info.icns \
 
 578         cp $BUILDROOT/wxPython
-$VERSION/docs
/*.
zip $DMGAPPS/Docs
/wxDocsViewer.app
/Contents
/Resources
 
 580         cat > "$DMGAPPS/Docs/README 1st.txt" <<EOF 
 582 The wxDocsViewer application needs to be copied to your Desktop (or 
 583 someplace else you have write access to) before you can run it, so it 
 584 can cache some indexes within its bundle. 
 590     # license files, docs, etc. 
 592     cp -pR $SRCROOT/wxPython
/licence   .
 
 593     cp -pR $SRCROOT/wxPython
/docs      .
 
 600     if [ ! -e $TARBALLDIR/wxPython
-demo-$VERSION.
tar.bz2 
]; then 
 601         cat > "$DMGAPPS/Samples/Build ERROR.txt" <<EOF 
 603 The wxPython-$VERSION-demo tarball was not found when building this disk image! 
 606         cp "$DMGAPPS/Samples/Build ERROR.txt" $DMGAPPS 
 610         # Copy the demo and samples to the disk image from the tarball 
 611         pushd $DMGAPPS/Samples
 
 612         tar xjvf 
$TARBALLDIR/wxPython
-demo-$VERSION.
tar.bz2
 
 613         mv wxPython
-$VERSION/* .
 
 614         rm -rf wxPython
-$VERSION 
 615         rm -f demo
/b demo
/.setup.sh
 
 616         mv demo
/demo.py demo
/demo.pyw
 
 619         # Make an app bundle to run the demo 
 620         $PYTHONW $PROGDIR/..
/buildapp.py \
 
 621             --builddir=$DMGAPPS \
 
 622             --name="wxPython Demo" \
 
 623             --mainprogram=$DMGAPPS/Samples
/demo
/demo.pyw \
 
 624             --iconfile=$PROGDIR/RunDemo.icns \
 
 626         cp -pR $DMGAPPS/Samples
/demo
/* "$DMGAPPS/wxPython Demo.app/Contents/Resources" 
 630     # Make an app bundle to launch PyCrust 
 631     $PYTHONW $PROGDIR/..
/buildapp.py \
 
 632         --builddir=$DMGAPPS \
 
 634         --mainprogram=$INSTALLROOT$BINPREFIX/pycrust.py \
 
 635         --iconfile=$PROGDIR/PieShell.icns \
 
 638 ## TODO: PyAlaMode needs tweaked to be able to run from a bundle.  It 
 639 ## needs to know to ignore command line parameters and etc... 
 641 #      $PYTHONW $PROGDIR/../buildapp.py \ 
 642 #       --builddir=$DMGAPPS \ 
 644 #       --mainprogram=$INSTALLROOT$BINPREFIX/pyalamode.py \ 
 645 #       --iconfile=$PROGDIR/PieShell.icns \ 
 648     # Make an app to launch XRCed 
 649     $PYTHONW $PROGDIR/..
/buildapp.py \
 
 650         --builddir=$DMGAPPS \
 
 652         --mainprogram=$INSTALLROOT$BINPREFIX/xrced.py \
 
 653         --iconfile=$PROGDIR/XRCed.icns \
 
 658     # and then finally make a disk image containing everything 
 659     dmgname
=wxPython
${SHORTVER}-osx-docs-demos-$VERSION-$TAG-py$PYVER 
 660     $PROGDIR/..
/makedmg 
$DMGAPPS $DMGDIR $dmgname 
 662     echo Moving 
$DMGDIR/$dmgname.dmg to 
$DESTDIR 
 663     mv $DMGDIR/$dmgname.dmg  
$DESTDIR/$dmgname.dmg
 
 667 # Cleanup build/install dirs 
 668 if [ $skipclean != yes ]; then 
 669     echo "Cleaning up..." 
 672     echo "Cleanup is disabled.  You should remove $TMPDIR when finished"