#!/bin/sh -e #---------------------------------------------------------------------- # Build wxMac and wxPythonOSX from the tarball and then make an # Installer package out of it. ##set -x 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: I 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 PYVER [jaguar|panther] [command flags...]" echo "" echo " PYVER Python version to use to do the build" 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 " reswig Regenerate SWIG wrappers" echo " universal Generate Universal wxWidgets binary (requires Universal Python " echo " to general Universal wxPython)." 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 2 ]; then usage exit 1 fi PYVER=$1 if which python$PYVER && which pythonw$PYVER; then PYTHON=`which python$PYVER` PYTHONW=`which pythonw$PYVER` else usage; exit 1 fi KIND=$2 case $KIND in panther) TAG=macosx10.3 ;; jaguar) TAG=macosx10.2 ;; *) usage; exit 1 ;; esac shift;shift skiptar=no skipconfig=no skipbuild=no skipinstall=no skipdmg=no skipclean=no inplace=no unicode=no reswig=no universal=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 ;; reswig) reswig=yes ;; universal) universal=yes ;; *) echo "Unknown flag \"${flag}\"" usage exit 1 esac done VERSION=`$PYTHON -c "import setup;print setup.VERSION"` SHORTVER=`echo $VERSION | cut -c 1,2,3` PYPREFIX=`$PYTHON -c "import sys; print sys.exec_prefix"` PYLIB=$PYPREFIX/lib/python$PYVER SITEPACKAGES=$PYLIB/site-packages if [ $unicode == yes ]; then CHARTYPE=unicode UNICODEOPT=--enable-unicode PYUNICODEOPT=1 else CHARTYPE=ansi UNICODEOPT=--disable-unicode PYUNICODEOPT=0 fi # Test if the python we are using is the System installed framework # or one that was installed by the user. This changes where the # site-packages (or its alias) is located in the installer tree. APPLE_PYTHON=no if [ -e /Library/Python/$PYVER ] && [ `dirname $PYTHON` == "/usr/bin" ]; then APPLE_PYTHON=yes 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 SWIGBIN=/opt/swig/bin/swig 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 if [ ! -d $DESTDIR ]; then mkdir $DESTDIR fi 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" #---------------------------------------------------------------------- if [ $KIND = panther ]; then OTHER_CFG_OPTS=--enable-mediactrl fi UNIVOPT= if [ $universal = yes ]; then UNIVOPT=--enable-universal_binary fi # 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 \ --disable-debugreport \ --disable-precompiled-headers \ $UNICODEOPT $UNIVOPT $OTHER_CFG_OPTS 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 via # # an ssh terminal. Figure out why, but in the meantime... # if [ "$CHARTYPE" = "ansi" ]; then # echo cp /projects/wx2.5/bld/lib/libwx_macd-2.5.?.r* lib # cp /projects/wx2.5/bld/lib/libwx_macd-2.5.?.r* lib # else # echo cp /projects/wx2.5/bld-unicode/lib/libwx_macud-2.5.?.r* lib # cp /projects/wx2.5/bld-unicode/lib/libwx_macud-2.5.?.r* lib # fi # touch lib/libwx*.r* make $MAKEJOBS make $MAKEJOBS -C contrib/src/animate make $MAKEJOBS -C contrib/src/gizmos make $MAKEJOBS -C contrib/src/stc SWIGIT=0 if [ $reswig = yes ]; then SWIGIT=1 fi # 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 \ SWIG=$SWIGBIN \ USE_SWIG=$SWIGIT \ build fi #---------------------------------------------------------------------- if [ $skipinstall != yes ]; then # Install wxWidgets cd $WXBLD make prefix=$INSTALLROOT$PREFIX install make -C contrib/src/animate prefix=$INSTALLROOT$PREFIX install make -C contrib/src/gizmos 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 Framework (such as what comes with Panther) # sym-links the site-packages dir in the framework to # /Library/Python/$PYVER so we need to move the files so they are # installed in the physical location, not the virtual one. if [ $APPLE_PYTHON == yes ]; 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 [ $APPLE_PYTHON == yes ]; 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 < $RESOURCEDIR/preflight < $RESOURCEDIR/postflight < "$DMGROOT/README 1st.txt" < "$DMGAPPS/README 1st.txt" < "$DMGAPPS/Docs/Build ERROR.txt" < "$DMGAPPS/Docs/README 1st.txt" < "$DMGAPPS/Samples/Build ERROR.txt" <