#!/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 [ -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 INSTALLCOMMON=$TMPDIR/install-common 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 $INSTALLCOMMON 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 BUILDROOT, # adjust the variables to find things that way. WXDIR=$WXROOT SRCROOT=$WXROOT WXBLD=$BUILDROOT fi echo "Using source tree: $WXDIR" echo "Using build dir: $WXBLD" #---------------------------------------------------------------------- # 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... if [ "$UID" = "0" ]; then chmod a+w lib su robind -c "make lib/libwx_macd-2.5.3.r" fi make make -C contrib/src/gizmos make -C contrib/src/ogl CXXFLAGS="-DwxUSE_DEPRECATED=0" make -C contrib/src/stc # Build wxPython cd $WXDIR/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 $WXDIR/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 # move the common files to $INSTALLCOMMON mkdir -p $INSTALLCOMMON$SITEPACKAGES mv $INSTALLROOT$SITEPACKAGES/wx.pth $INSTALLCOMMON$SITEPACKAGES mv $INSTALLROOT$SITEPACKAGES/wxversion.py $INSTALLCOMMON$SITEPACKAGES # install wxPython's tool scripts in COMMON too mkdir -p $INSTALLCOMMON$BINPREFIX cd $WXDIR/wxPython/scripts python$PYVER CreateMacScripts.py $INSTALLCOMMON $BINPREFIX # Remove the .pyc/.pyo files they just take up space and can be recreated # during the install. pushd $WXDIR/wxPython $PYTHON $PROGDIR/../zappycfiles.py $INSTALLROOT > /dev/null popd # Set premissions for files in $INSTALLROOT and $INSTALLCOMMON if [ "$UID" = "0" ]; then chown -R root:admin $INSTALLROOT $INSTALLCOMMON chmod -R g+w $INSTALLROOT $INSTALLCOMMON fi fi if [ "$KIND" = "panther" ]; then SITEPACKAGES=/Library/Python/$PYVER fi PKGDIR=`cat $INSTALLCOMMON$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 < $RESOURCEDIR/Welcome.txt < "$DMGROOT/README 1st.txt" < "$DMGAPPS/README 1st.txt" < "$DMGAPPS/Docs/Build ERROR.txt" < "$DMGAPPS/Docs/README 1st.txt" < "$DMGAPPS/Samples/Build ERROR.txt" <