#!/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 #---------------------------------------------------------------------- # Check Parameters function usage { echo "" echo "Usage: $0 [apple|local] [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 " use_cvs Use the CVS workspace instead of a tarfile" echo " skipconfig Don't run configure" echo " skipbuild Don't build wxWindows 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 for flag in $*; do case ${flag} in skiptar) skiptar=1 ;; use_cvs) skiptar=1; use_cvs=1 ;; skipconfig) skipconfig=1; skiptar=1 ;; skipbuild) skipbuild=1; skipconfig=1; skiptar=1 ;; skipinstall) skipinstall=1 ;; skipdmg) skipdmg=1 ;; skipclean) skipclean=1 ;; *) 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 SRCDIR=/stuff/Development/wxPython/dist/$VERSION TARBALL=$SRCDIR/wxPythonSrc-$VERSION.tar.gz PREFIX=/usr/lib/wxPython-$VERSION BINPREFIX=/usr/bin WXROOT=`dirname $PWD` PROGDIR="`dirname \"$0\"`" TMPDIR=$PWD/_build_dmg BUILDROOT=$TMPDIR/build INSTALLROOT=$TMPDIR/install INSTALLDEVEL=$TMPDIR/install-devel DMGDIR=$TMPDIR/dmg RESOURCEDIR=$PROGDIR/resources DESTDIR=$PWD/dist #---------------------------------------------------------------------- # Setup builddirs mkdir -p $BUILDROOT mkdir -p $INSTALLROOT #mkdir -p $INSTALLDEVEL rm -rf $DMGDIR mkdir -p $DMGDIR/root pushd $BUILDROOT #---------------------------------------------------------------------- # Unpack the tarball if [ -z "$skiptar" ]; then echo Unarchiving tarball... tar xzf $TARBALL fi if [ "$use_cvs" = 1 ]; then # copy the cvs workspace, except for build dirs mkdir -p wxPythonSrc-$VERSION echo Finding updated files... if [ -e .last_copy ]; then FEXPR="-cnewer .last_copy" fi MEASURE=$WXROOT// find $WXROOT $FEXPR -print \ | grep -v $WXROOT/bld \ | grep -v wxPython/build \ | grep -v wxPython/_build \ | grep -v CVS \ | grep -v .pyc \ | cut -b ${#MEASURE}- > filelist for x in `cat filelist`; do if [ -d "$WXROOT/$x" ]; then mkdir -p "wxPythonSrc-$VERSION/$x" else echo $x cp -p "$WXROOT/$x" "wxPythonSrc-$VERSION/$x" fi done touch .last_copy fi cd wxPythonSrc-$VERSION WXDIR=`pwd` mkdir -p $WXDIR/bld cd $WXDIR/bld #---------------------------------------------------------------------- # Configure wxWindows if [ -z "$skipconfig" ]; then ../configure \ --prefix=$PREFIX \ --with-mac \ --disable-monolithic \ --with-opengl \ --enable-geometry \ --enable-optimise \ --enable-precomp=no \ \ --with-libjpeg=builtin \ --with-libpng=builtin \ --with-libtiff=builtin \ --with-zlib=builtin \ \ --enable-debug_flag fi # Build wxWindows and wxPython if [ -z "$skipbuild" ]; then # Make wxWindows and some contribs make make -C contrib/src/gizmos make -C contrib/src/ogl CXXFLAGS="-DwxUSE_DEPRECATED=0" make -C contrib/src/stc make -C contrib/src/xrc if [ ! -e $WXDIR/include/wx/gizmos ]; then # Make some links so the wxPython build can find all the headers it needs pushd $WXDIR/include/wx ln -s ../../contrib/include/wx/* . popd fi # Build wxPython cd $WXDIR/wxPython $PYTHON setup.py \ NO_SCRIPTS=1 \ WX_CONFIG="$WXDIR/bld/wx-config --prefix=$WXDIR --exec-prefix=$WXDIR/bld" \ build # Build wxrc (XRC resource tool) cd $WXDIR/bld/contrib/utils/wxrc make strip wxrc fi #---------------------------------------------------------------------- if [ -z "$skipinstall" ]; then # Install wxWindows cd $WXDIR/bld 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 make -C contrib/src/xrc prefix=$INSTALLROOT$PREFIX install # and wxPython cd $WXDIR/wxPython $PYTHON setup.py \ NO_SCRIPTS=1 \ WX_CONFIG="$INSTALLROOT/$PREFIX/bin/wx-config --prefix=$INSTALLROOT/$PREFIX" \ 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 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 $WXDIR/wxPython/scripts python$PYVER CreateMacScripts.py $INSTALLROOT $BINPREFIX # Install wxrc cp $WXDIR/bld/contrib/utils/wxrc/wxrc $INSTALLROOT$BINPREFIX # install the wxPython headers cd $WXDIR/wxPython cp -R include $INSTALLROOT$PREFIX mkdir -p $INSTALLROOT$PREFIX/include/wx/wxPython/i_files cp src/*.i $INSTALLROOT$PREFIX/include/wx/wxPython/i_files # Set premissions for files in $INSTALLROOT chown -R root:admin $INSTALLROOT chmod -R g+w $INSTALLROOT fi popd #---------------------------------------------------------------------- # Make the Installer packages and disk image if [ -z "$skipdmg" ]; then # Remove the .pyc/.pyo files they just take up space and can be recreated # during the install. $PYTHON $PROGDIR/../zappycfiles.py $INSTALLROOT # 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 program will install wxPython $VERSION for $W_MSG MacPython-OSX $PYVER. You must install onto your current boot disk, even though the installer does not enforce this, otherwise things will not work. 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 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/wxPython $PYTHON \$2$PYLIB/compileall.py \$2$SITEPACKAGES/wx $PYTHON -O \$2$PYLIB/compileall.py \$2$SITEPACKAGES/wxPython $PYTHON -O \$2$PYLIB/compileall.py \$2$SITEPACKAGES/wx # and all of the wxPython pacakge should be group writable chgrp -R admin \$2$SITEPACKAGES/wxPython chmod -R g+w \$2$SITEPACKAGES/wxPython chgrp -R admin \$2$SITEPACKAGES/wx chmod -R g+w \$2$SITEPACKAGES/wx exit 0 EOF chmod +x $RESOURCEDIR/postflight # Build the main Installer Package... rm -rf wxPythonOSX-$KIND.pkg python $PROGDIR/../buildpkg.py \ --Title=wxPythonOSX-$KIND \ --Version=$VERSION \ --Description="wxPython $VERSION for $W_MSG MacPython-OSX $PYVER" \ --NeedsAuthorization="YES" \ --Relocatable="NO" \ --InstallOnly="YES" \ $INSTALLROOT \ $RESOURCEDIR mv wxPythonOSX-$KIND.pkg $DMGDIR/root # Make a README.txt to go on the disk image cat > "$DMGDIR/root/README 1st.txt" <<EOF Welcome to wxPython! On this disk image you will find the installer for wxPython $VERSION for $W_MSG MacPython-OSX $PYVER. MacPython-OSX is not included. wxPython-$KIND.pkg The installer package. It contains the wxPython extension modules, wxMac dynamic libraries and headers, and some scripts for the command-line tools. Everything else here is optional and you can drag them out of the disk image and drop them whereever you want. You do need to install the above package before you can use any of the items below. docs/ A few readmes, change log, etc. The full documentation is downloadable separately. licence/ License docs. demo/ A copy of the wxPython demo source code, just open the folder and run demo.py. samples/ Several small sample applications that demonstrate how to use wxPython. wxPython Demo An application bundle version of the demo. (This has it's own copy of the 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. Happy Hacking! EOF # PyAlaMode An extension of PyCrust that includes source # file editing capabilities. # license files, docs, etc. cp -pR $WXDIR/wxPython/licence $DMGDIR/root rm -rf $WXDIR/wxPython/docs/xml-raw cp -pR $WXDIR/wxPython/docs $DMGDIR/root rm -rf $DMGDIR/root/docs/bin # Copy the demo and samples to the disk image cp -pR $WXDIR/wxPython/demo $DMGDIR/root cp -pR $WXDIR/wxPython/samples $DMGDIR/root rm $DMGDIR/root/demo/b # Make an app bundle to launch PyCrust $PYTHONW $PROGDIR/../buildapp.py \ --builddir=$DMGDIR/root \ --name=PyCrust \ --mainprogram=$INSTALLROOT$BINPREFIX/pycrust.py \ --iconfile=$PROGDIR/PieShell.icns \ build # # and PyAlaMode # $PYTHONW $PROGDIR/../buildapp.py \ # --builddir=$DMGDIR/root \ # --name=PyAlaMode \ # --mainprogram=$INSTALLROOT$BINPREFIX/pyalamode.py \ # --iconfile=$PROGDIR/PieShell.icns \ # build # Make an app to launch XRCed $PYTHONW $PROGDIR/../buildapp.py \ --builddir=$DMGDIR/root \ --name=XRCed \ --mainprogram=$INSTALLROOT$BINPREFIX/xrced.py \ --iconfile=$PROGDIR/XRCed.icns \ build # Make an app bundle to run the demo $PYTHONW $PROGDIR/../buildapp.py \ --builddir=$DMGDIR/root \ --name="wxPython Demo" \ --mainprogram=$DMGDIR/root/demo/demo.py \ --iconfile=$PROGDIR/RunDemo.icns \ build cp -pR $DMGDIR/root/demo/* "$DMGDIR/root/wxPython Demo.app/Contents/Resources" # and then finally make a disk image containing the packages and etc. $PROGDIR/../makedmg $DMGDIR/root $DMGDIR wxPythonOSX-$VERSION-$KIND-Py$PYVER echo Moving $DMGDIR/wxPythonOSX-$VERSION-$KIND-Py$PYVER.dmg to $DESTDIR mv $DMGDIR/wxPythonOSX-$VERSION-$KIND-Py$PYVER.dmg $DESTDIR fi # Cleanup build/install dirs if [ -z "$skipclean" ]; then echo "Cleaning up..." rm -rf $TMPDIR else echo "Cleanup is disabled. You should remove $TMPDIR when finished" fi