#!/bin/sh -e #---------------------------------------------------------------------- # Build wxMac and wxPythonOSX from the tarball and then make an # Installer package out of it. spectemplate=distrib/wxPythonFull.spec.in if [ ! -d wxPython -o ! -e ${spectemplate} ]; then echo "Please run this script from the root wxPython directory." exit 1 fi if [ "$UID" != "0" ]; then echo "-------------------------------------------------------" echo " WARNING: will be unable to change ownership of files" echo " unless this script is run as root or via sudo" echo "-------------------------------------------------------" fi #---------------------------------------------------------------------- # Check Parameters function usage { echo "" echo "Usage: $0 [panther|jaguar] [command flags...]" echo "" echo " panther Build for Apple's python in /usr/bin, such as on Panther" echo " jaguar Build for a python in /usr/local/bin, such as on Jaguar" echo "" echo "optional command flags:" echo " skiptar Don't unpack the tarball" echo " inplace Don't use the tarball, build from the CVS tree instead" echo " (The Docs and Demo tarballs are still required for a full build.)" echo " unicode Make a unicode build" echo " skipconfig Don't run configure" echo " skipbuild Don't build wxWidgets or wxPython" echo " skipinstall Don't do the installation step" echo " skipdmg Don't make the package or diskimage" echo " skipclean Don't do the cleanup at the end" echo "" } if [ $# -lt 1 ]; then usage exit 1 fi KIND=$1 case $KIND in panther) PYTHON=/usr/bin/python ;; jaguar) PYTHON=/usr/local/bin/python ;; *) usage; exit 1 ;; esac PYTHONW=${PYTHON}w shift skiptar=no skipconfig=no skipbuild=no skipinstall=no skipdmg=no skipclean=no inplace=no unicode=no for flag in $*; do case ${flag} in skiptar) skiptar=yes ;; skipconfig) skipconfig=yes; skiptar=yes ;; skipbuild) skipbuild=yes; skipconfig=yes; skiptar=yes ;; skipinstall) skipinstall=yes ;; skipdmg) skipdmg=yes ;; skipclean) skipclean=yes ;; inplace) inplace=yes; skiptar=yes ;; unicode) unicode=yes ;; *) echo "Unknown flag \"${flag}\"" usage exit 1 esac done VERSION=`$PYTHON -c "import setup;print setup.VERSION"` PYVER=`$PYTHON -c "import sys; print sys.version[:3]"` PYPREFIX=`$PYTHON -c "import sys; print sys.exec_prefix"` PYLIB=$PYPREFIX/lib/python$PYVER SITEPACKAGES=$PYLIB/site-packages SHORTVER=`echo $VERSION | cut -c 1,2,3` if [ $unicode == yes ]; then CHARTYPE=unicode UNICODEOPT=--enable-unicode PYUNICODEOPT=1 else CHARTYPE=ansi UNICODEOPT=--disable-unicode PYUNICODEOPT=0 fi #if [ "$HOSTNAME" = "bigmac.alldunn.com" ]; then # MAKEJOBS="--jobs=2" #fi if [ -z "$TARBALLDIR" ]; then # this is a spot on my fileserver where the tarballs go, adjust # as needed for where you put the wxPython tarball, or set # TARBALLDIR before invoking this script... TARBALLDIR=/stuff/Development/wxPython/dist/$VERSION fi TARBALL=$TARBALLDIR/wxPython-src-$VERSION.tar.gz if [ ! -e $TARBALLDIR/wxPython-demo-$VERSION.tar.gz ]; then echo "-------------------------------------------------------" echo " WARNING: Demo tarball not found, will skip building " echo " the Demo app bundle and etc." echo " $TARBALLDIR/wxPython-demo-$VERSION.tar.gz" echo "-------------------------------------------------------" fi if [ ! -e $TARBALLDIR/wxPython-docs-$VERSION.tar.gz ]; then echo "-------------------------------------------------------" echo " WARNING: Docs tarball not found, will skip building " echo " the the wxDocsViewer app bundle and etc." echo " $TARBALLDIR/wxPython-docs-$VERSION.tar.gz" echo "-------------------------------------------------------" fi PREFIX=/usr/local/lib/wxPython-$CHARTYPE-$VERSION BINPREFIX=/usr/local/bin WXROOT=`dirname $PWD` PROGDIR="`dirname \"$0\"`" TMPDIR=$PWD/_build_dmg BUILDROOT=$TMPDIR/build INSTALLROOT=$TMPDIR/install-root INSTALLAPPS=$TMPDIR/install-apps DMGDIR=$TMPDIR/dmg DMGROOT=$DMGDIR/root DMGAPPS=$DMGDIR/apps RESOURCEDIR=$PROGDIR/resources DESTDIR=$PWD/dist SRCROOT=$BUILDROOT/wxPython-src-$VERSION #---------------------------------------------------------------------- # Setup builddirs mkdir -p $BUILDROOT mkdir -p $INSTALLROOT mkdir -p $INSTALLAPPS rm -rf $DMGDIR mkdir -p $DMGROOT mkdir -p $DMGAPPS/Docs mkdir -p $DMGAPPS/Samples pushd $BUILDROOT #---------------------------------------------------------------------- # Unpack the tarball if [ $skiptar != yes ]; then echo Unarchiving tarball... tar xzf $TARBALL fi if [ $inplace = no ]; then # make a build dir and cd to it. cd wxPython-src-$VERSION WXDIR=`pwd` mkdir -p $WXDIR/bld cd $WXDIR/bld WXBLD=$WXDIR/bld else # If building "inplace" then our build dir will be off of the # WXROOT like normal, adjust the variables to find things that # way. WXBLD=$WXROOT/build-$CHARTYPE mkdir -p $WXBLD cd $WXBLD WXDIR=.. SRCROOT=$WXROOT fi echo "Using wx root dir: $WXROOT" echo "Using build dir: $WXBLD" echo "Using source tree: $WXDIR" #---------------------------------------------------------------------- # Configure wxWidgets if [ $skipconfig != yes ]; then $WXDIR/configure \ --prefix=$PREFIX \ --with-mac \ --enable-monolithic \ --with-opengl \ --enable-sound \ --enable-display \ --enable-geometry \ --enable-debug_flag \ --enable-precomp=no \ --enable-optimise \ $UNICODEOPT fi # Build wxWidgets and wxPython if [ $skipbuild != yes ]; then # Make wxWidgets and some contribs # For some reason Rez and DeRez have started locking up if run as # root, figure out why, but in the meantime... if [ "$UID" = "0" ]; then chmod a+w lib if [ "$CHARTYPE" = "ansi" ]; then su robind -c "make lib/libwx_macd-2.5.3.r" else su robind -c "make lib/libwx_macud-2.5.3.r" fi fi make $MAKEJOBS make $MAKEJOBS -C contrib/src/gizmos make $MAKEJOBS -C contrib/src/ogl CXXFLAGS="-DwxUSE_DEPRECATED=0" make $MAKEJOBS -C contrib/src/stc # Build wxPython cd $WXROOT/wxPython $PYTHON setup.py \ UNICODE=$PYUNICODEOPT \ NO_SCRIPTS=1 \ EP_ADD_OPTS=1 \ WX_CONFIG="$WXBLD/wx-config --inplace" \ BUILD_BASE=$WXBLD/wxPython \ build fi #---------------------------------------------------------------------- if [ $skipinstall != yes ]; then # Install wxWidgets cd $WXBLD make prefix=$INSTALLROOT$PREFIX install make -C contrib/src/gizmos prefix=$INSTALLROOT$PREFIX install make -C contrib/src/ogl CXXFLAGS="-DwxUSE_DEPRECATED=0" prefix=$INSTALLROOT/$PREFIX install make -C contrib/src/stc prefix=$INSTALLROOT$PREFIX install # relink wx-config with a relative link cd $INSTALLROOT$PREFIX/bin rm wx-config ln -s ../lib/wx/config/* wx-config # and wxPython cd $WXROOT/wxPython $PYTHON setup.py \ UNICODE=$PYUNICODEOPT \ NO_SCRIPTS=1 \ EP_ADD_OPTS=1 \ WX_CONFIG="$INSTALLROOT/$PREFIX/bin/wx-config --prefix=$INSTALLROOT/$PREFIX" \ BUILD_BASE=$WXBLD/wxPython \ install \ --root=$INSTALLROOT # Apple's Python (on Panther) sym-links the site-packages dir to # /Library/Python/$PYVER so we need to move the files so they are # installed in the physical location, not the virtual one. if [ "$KIND" = "panther" ]; then if [ -e $INSTALLROOT/Library/Python/$PYVER ]; then rm -r $INSTALLROOT/Library/Python/$PYVER fi mkdir -p $INSTALLROOT/Library/Python/$PYVER mv $INSTALLROOT/$SITEPACKAGES/* $INSTALLROOT/Library/Python/$PYVER rm -r $INSTALLROOT/System SITEPACKAGES=/Library/Python/$PYVER fi # install wxPython's tool scripts mkdir -p $INSTALLROOT$BINPREFIX cd $WXROOT/wxPython/scripts python$PYVER CreateMacScripts.py $INSTALLROOT $BINPREFIX # Remove the .pyc/.pyo files they just take up space and can be recreated # during the install. pushd $WXROOT/wxPython $PYTHON $PROGDIR/../zappycfiles.py $INSTALLROOT > /dev/null popd # Set premissions for files in $INSTALLROOT if [ "$UID" = "0" ]; then chown -R root:admin $INSTALLROOT chmod -R g+w $INSTALLROOT fi fi if [ "$KIND" = "panther" ]; then SITEPACKAGES=/Library/Python/$PYVER fi PKGDIR=`cat $INSTALLROOT$SITEPACKAGES/wx.pth` popd #---------------------------------------------------------------------- # Make the Installer packages and disk image if [ $skipdmg != yes ]; then #----------------------------------------------- # The main runtime installer package # Make the welcome message case $KIND in panther) W_MSG="the Panther (OS X 10.3.x) version of" ;; jaguar) W_MSG="the Jaguar (OS X 10.2.x) version of" ;; esac cat > $RESOURCEDIR/Welcome.txt <<EOF Welcome! This Installer package will install the wxPython $CHARTYPE runtime $VERSION for $W_MSG MacPython-OSX $PYVER. This includes: * The wxPython packages and modules * The wxWidgets shared libraries and headers * Some command line tool scripts, installed to /usr/local/bin. You must install onto your current boot disk, eventhough the installer does not enforce this, otherwise things will not work. 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. Build date: `date` EOF # make the preflight script cat > $RESOURCEDIR/preflight <<EOF #!/bin/sh # Cleanup any old install of the wxPython package rm -rf \$2$SITEPACKAGES/wxPython rm -rf \$2$SITEPACKAGES/wx rm -rf \$2$SITEPACKAGES/$PKGDIR exit 0 EOF chmod +x $RESOURCEDIR/preflight # make the postflight script cat > $RESOURCEDIR/postflight <<EOF #!/bin/sh -e # Compile the .py files in the wxPython pacakge $PYTHON \$2$PYLIB/compileall.py \$2$SITEPACKAGES/$PKGDIR $PYTHON -O \$2$PYLIB/compileall.py \$2$SITEPACKAGES/$PKGDIR # and all of the wxPython pacakge should be group writable chgrp -R admin \$2$SITEPACKAGES/$PKGDIR chmod -R g+w \$2$SITEPACKAGES/$PKGDIR exit 0 EOF chmod +x $RESOURCEDIR/postflight # Build the main Installer Package... rm -rf wxPython${SHORTVER}-osx-$CHARTYPE-$KIND.pkg python $PROGDIR/../buildpkg.py \ --Title=wxPython${SHORTVER}-osx-$CHARTYPE-$KIND \ --Version=$VERSION \ --Description="wxPython $CHARTYPE runtime $VERSION for $W_MSG MacPython-OSX $PYVER" \ --NeedsAuthorization="YES" \ --Relocatable="NO" \ --InstallOnly="YES" \ $INSTALLROOT \ $RESOURCEDIR mv wxPython${SHORTVER}-osx-$CHARTYPE-$KIND.pkg $DMGROOT rm $RESOURCEDIR/postflight rm $RESOURCEDIR/preflight rm $RESOURCEDIR/Welcome.txt #----------------------------------------------- # Make a README to go on the disk image cat > "$DMGROOT/README 1st.txt" <<EOF Welcome to wxPython! This disk image contains the following items: wxPython${SHORTVER}-osx-$CHARTYPE-$VERSION-$KIND This Installer contains the wxPython runtime, compiled on a $KIND OS X system, using the $CHARTYPE build of the wxWidgets library. It includes the Python modules and extension modules, as well as the wxWidgets libraries. It is possible to have more than one version of the runtime installed at once if you wish. 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. For more details see: http://wiki.wxpython.org/index.cgi/MultiVersionInstalls uninstall_wxPython.py A simple tool to help you manage your installed versions of wxPython. It will allow you to choose from the currently installed wxPython packages and to select one for uninstallation. It is a text-mode tool so you can either run it from a Terminal command line, or you can open it with PythonLauncher and let it create a Terminal to run it in. NOTE: If you have versions prior to 2.5.3.1 installed, please do run this uninstall tool to remove the older version. EOF cp $PROGDIR/../uninstall_wxPython.py $DMGROOT #----------------------------------------------- # Make a disk image to hold these files dmgname=wxPython${SHORTVER}-osx-$CHARTYPE-$VERSION-$KIND-py$PYVER $PROGDIR/../makedmg $DMGROOT $DMGDIR $dmgname echo Moving $DMGDIR/$dmgname.dmg to $DESTDIR mv $DMGDIR/$dmgname.dmg $DESTDIR #--------------------------------------------------------------------------- # Now create app bundles for the demo, docs, and tools and make another # disk image to hold it all. #--------------------------------------------------------------------------- cat > "$DMGAPPS/README 1st.txt" <<EOF Welcome to wxPython! On this disk image you will find Demo, Tools, Docs, and etc. for wxPython $VERSION. Everything here is optional and you can drag them out of the disk image and drop them wherever you want. You will need to have an installed wxPython runtime to be able to use any of them. wxPython Demo An application bundle version of the demo. (This has it's own copy of the demo sources within the bundle.) XRCed An application for editing wxPython resource files (XRC files.) PyCrust An application that provides an interactive Python shell and also namespace inspectors. Docs/wxDocsViewer An application that allows you to view the wxWidgets documentation. Docs/licence License files. Docs/other A few readmes, change log, etc. Samples/samples Several small sample applications that demonstrate how to use wxPython. Samples/demo A copy of the wxPython demo source code, just open the folder and run demo.pyw. Happy Hacking! EOF # PyAlaMode An extension of PyCrust that includes source # file editing capabilities. # wxDocs if [ ! -e $TARBALLDIR/wxPython-docs-$VERSION.tar.gz ]; then cat > "$DMGAPPS/Docs/Build ERROR.txt" <<EOF The wxPython-docs tarball was not found when building this disk image! EOF else pushd $BUILDROOT tar xzvf $TARBALLDIR/wxPython-docs-$VERSION.tar.gz popd # Make an app to launch viewdocs.py $PYTHONW $PROGDIR/../buildapp.py \ --builddir=$DMGAPPS/Docs \ --name=wxDocsViewer \ --mainprogram=$BUILDROOT/wxPython-$VERSION/docs/viewdocs.py \ --iconfile=$PROGDIR/Info.icns \ build cp $BUILDROOT/wxPython-$VERSION/docs/*.zip $DMGAPPS/Docs/wxDocsViewer.app/Contents/Resources cat > "$DMGAPPS/Docs/README 1st.txt" <<EOF The wxDocsViewer application needs to be copied to your Desktop (or someplace else you have write access to) before you can run it, so it can cache some indexes within its bundle. EOF fi # license files, docs, etc. pushd $DMGAPPS/Docs cp -pR $SRCROOT/wxPython/licence . cp -pR $SRCROOT/wxPython/docs . rm -rf docs/bin rm -rf docs/xml-raw mv docs other popd if [ ! -e $TARBALLDIR/wxPython-demo-$VERSION.tar.gz ]; then cat > "$DMGAPPS/Samples/Build ERROR.txt" <<EOF The wxPython-demo tarball was not found when building this disk image! EOF cp "$DMGAPPS/Samples/Build ERROR.txt" $DMGAPPS else # Copy the demo and samples to the disk image from the tarball pushd $DMGAPPS/Samples tar xzvf $TARBALLDIR/wxPython-demo-$VERSION.tar.gz mv wxPython-$VERSION/* . rm -rf wxPython-$VERSION rm demo/b demo/.setup.sh mv demo/demo.py demo/demo.pyw popd # Make an app bundle to run the demo $PYTHONW $PROGDIR/../buildapp.py \ --builddir=$DMGAPPS \ --name="wxPython Demo" \ --mainprogram=$DMGAPPS/Samples/demo/demo.pyw \ --iconfile=$PROGDIR/RunDemo.icns \ build cp -pR $DMGAPPS/Samples/demo/* "$DMGAPPS/wxPython Demo.app/Contents/Resources" fi # Make an app bundle to launch PyCrust $PYTHONW $PROGDIR/../buildapp.py \ --builddir=$DMGAPPS \ --name=PyCrust \ --mainprogram=$INSTALLROOT$BINPREFIX/pycrust.py \ --iconfile=$PROGDIR/PieShell.icns \ build ## TODO: PyAlaMode needs tweaked to be able to run from a bundle. It ## needs to know to ignore command line parameters and etc... # # and PyAlaMode # $PYTHONW $PROGDIR/../buildapp.py \ # --builddir=$DMGAPPS \ # --name=PyAlaMode \ # --mainprogram=$INSTALLROOT$BINPREFIX/pyalamode.py \ # --iconfile=$PROGDIR/PieShell.icns \ # build # Make an app to launch XRCed $PYTHONW $PROGDIR/../buildapp.py \ --builddir=$DMGAPPS \ --name=XRCed \ --mainprogram=$INSTALLROOT$BINPREFIX/xrced.py \ --iconfile=$PROGDIR/XRCed.icns \ build # and then finally make a disk image containing everything dmgname=wxPython${SHORTVER}-osx-docs-demos-$VERSION-$KIND $PROGDIR/../makedmg $DMGAPPS $DMGDIR $dmgname echo Moving $DMGDIR/$dmgname.dmg to $DESTDIR mv $DMGDIR/$dmgname.dmg $DESTDIR fi # Cleanup build/install dirs if [ $skipclean != yes ]; then echo "Cleaning up..." rm -rf $TMPDIR else echo "Cleanup is disabled. You should remove $TMPDIR when finished" fi