#!/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 wx_version py_version [command flags...]" echo " wx_version String to use for version in filenames, etc." echo " py_version String to append to python (which python version to use.)" echo "" echo "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" } if [ $# -lt 2 ]; then usage exit 1 fi VERSION=$1 PYVER=$2 shift;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 SRCDIR=/Volumes/Gate.Stuff/Development/wxPython/dist/$VERSION TARBALL=$SRCDIR/wxPythonSrc-$VERSION.tar.gz SITEPACKAGES=/Library/Frameworks/Python.framework/Versions/$PYVER/lib/python$PYVER/site-packages # TODO: Should I change the prefix to /usr? PREFIX=/usr/local 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 tar xzvf $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 find /projects/wx $FEXPR -print \ | grep -v wx/build \ | grep -v wxPython/build \ | grep -v wxPython/_build \ | grep -v CVS \ | cut -b 14- > filelist for x in `cat filelist`; do if [ -d "/projects/wx/$x" ]; then mkdir -p "wxPythonSrc-$VERSION/$x" else echo $x cp -p "/projects/wx/$x" "wxPythonSrc-$VERSION/$x" fi done touch .last_copy fi cd wxPythonSrc-$VERSION WXDIR=`pwd` mkdir -p $WXDIR/build cd $WXDIR/build #---------------------------------------------------------------------- # Configure wxWindows if [ -z "$skipconfig" ]; then ../configure --with-mac --prefix=$PREFIX \ --with-opengl \ --enable-precomp=no \ --enable-geometry \ --enable-optimise \ --enable-debug_flag \ --with-libjpeg=builtin \ --with-libpng=builtin \ --with-libtiff=builtin \ --with-zlib=builtin fi # Build wxWindows and wxPython if [ -z "$skipbuild" ]; then make cd $WXDIR/wxPython python$PYVER setup.py \ IN_CVS_TREE=1 \ WX_CONFIG="$WXDIR/build/wx-config --prefix=$WXDIR --exec-prefix=$WXDIR/build" \ build # Build wxrc (XRC resource tool) but don't use the makefiles since they expect # a shared version of the xrc lib to have been built... cd $WXDIR/contrib/utils/wxrc WX_CONFIG="$WXDIR/build/wx-config --prefix=$WXDIR --exec-prefix=$WXDIR/build" wCC=`$WX_CONFIG --cc` wCXX=`$WX_CONFIG --cxx` for f in wxrc.cpp ../../src/xrc/*.cpp; do echo $f $wCXX `$WX_CONFIG --cxxflags` -I ../../include -I ../../src/xrc/expat/xmlparse -I ../../src/xrc/expat/xmltok -c $f done for f in ../../src/xrc/expat/xmlparse/xmlparse.c ../../src/xrc/expat/xmltok/xmlrole.c ../../src/xrc/expat/xmltok/xmltok.c; do echo $f $wCC `$WX_CONFIG --cxxflags` -I ../../include -I ../../src/xrc/expat/xmlparse -I ../../src/xrc/expat/xmltok -c $f done # the handlers are not needed rm xh_*.o xmlrsall.o $wCXX `$WX_CONFIG --libs` *.o -o wxrc strip wxrc fi #---------------------------------------------------------------------- # Install wxWindows if [ -z "$skipinstall" ]; then cd $WXDIR/build make prefix=$INSTALLROOT/$PREFIX install # and wxPython cd $WXDIR/wxPython python$PYVER setup.py \ IN_CVS_TREE=1 \ WX_CONFIG="$WXDIR/build/wx-config --prefix=$WXDIR --exec-prefix=$WXDIR/build" \ install \ --root=$INSTALLROOT # install wxPython's tool scripts cd $WXDIR/wxPython/scripts python$PYVER CreateMacScripts.py $INSTALLROOT $PREFIX/bin # Install wxrc cp $WXDIR/contrib/utils/wxrc/wxrc $INSTALLROOT$PREFIX/bin # Move wxWindows devel files and save for a separate installer package mkdir -p $INSTALLDEVEL$PREFIX mkdir -p $INSTALLDEVEL$PREFIX/bin mkdir -p $INSTALLDEVEL$PREFIX/lib mv -f $INSTALLROOT$PREFIX/include $INSTALLDEVEL$PREFIX mv -f $INSTALLROOT$PREFIX/lib/wx $INSTALLDEVEL$PREFIX/lib mv -f $INSTALLROOT$PREFIX/bin/wx* $INSTALLDEVEL$PREFIX/bin # TODO for $INSTALLROOT and $INSTALLDEVEL ? # chown -R root:admin # chmod -R g+w 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/Library/Frameworks/Python.framework # Copy the demo, samples, and such to the Applications dir APPDIR=$INSTALLROOT/Applications/wxPythonOSX-$VERSION mkdir -p $APPDIR cp -pR $WXDIR/wxPython/demo $APPDIR cp -pR $WXDIR/wxPython/samples $APPDIR # Move sample launchers to .pyw files. # TODO: A better, more automated way to do this!!! pushd $APPDIR/samples for x in StyleEditor/STCStyleEditor \ doodle/superdoodle \ frogedit/FrogEdit \ pySketch/pySketch \ wxProject/wxProject; do mv $x.py $x.pyw done popd # Make an app to launch the demo cat > $APPDIR/demo/RunDemo.pyw <<EOF import sys, os sys.path.insert(0, "/Applications/wxPythonOSX-$VERSION/demo") os.chdir("/Applications/wxPythonOSX-$VERSION/demo") import Main Main.main() EOF pythonw $PROGDIR/../buildapp.py \ --builddir=$APPDIR \ --name=RunDemo \ --mainprogram=$APPDIR/demo/RunDemo.pyw \ --iconfile=$PROGDIR/RunDemo.icns \ build # Make an app to launch PyShell pythonw $PROGDIR/../buildapp.py \ --builddir=$APPDIR \ --name=PyShell \ --mainprogram=$INSTALLROOT$PREFIX/bin/pyshell.py \ --iconfile=$PROGDIR/PieShell.icns \ build # Make an app to launch XRCed pythonw $PROGDIR/../buildapp.py \ --builddir=$APPDIR \ --name=XRCed \ --mainprogram=$INSTALLROOT$PREFIX/bin/xrced.py \ --iconfile=$PROGDIR/XRCed.icns \ build # Make the welcome message cat > $RESOURCEDIR/Welcome.txt <<EOF Welcome! This program will install wxPython $VERSION for MacPython-OSX $PYVER. 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 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 /usr/local/bin/python \$2$SITEPACKAGES/../compileall.py \$2$SITEPACKAGES/wxPython /usr/local/bin/python -O \$2$SITEPACKAGES/../compileall.py \$2$SITEPACKAGES/wxPython # and in the demo /usr/local/bin/python \$2$SITEPACKAGES/../compileall.py /Applications/wxPythonOSX-$VERSION/demo # Make the demo/data dir writable chmod a+w /Applications/wxPythonOSX-$VERSION/demo/data # and the wxPython pacakge should be group writable chgrp -R admin \$2$SITEPACKAGES/wxPython chgrp -R admin /Applications/wxPythonOSX-$VERSION chmod -R g+w \$2$SITEPACKAGES/wxPython chmod -R g+w /Applications/wxPythonOSX-$VERSION exit 0 EOF chmod +x $RESOURCEDIR/postflight # Finally, build the main package... rm -rf wxPythonOSX.pkg python $PROGDIR/../buildpkg.py \ --Title=wxPythonOSX \ --Version=$VERSION \ --Description="wxPython $VERSION for MacPython-OSX $PYVER" \ --NeedsAuthorization="YES" \ --Relocatable="NO" \ --InstallOnly="YES" \ $INSTALLROOT \ $RESOURCEDIR mv wxPythonOSX.pkg $DMGDIR/root # and the devel package rm -rf wxPythonOSX-devel.pkg python $PROGDIR/../buildpkg.py \ --Title=wxPythonOSX-devel \ --Version=$VERSION \ --Description="Headers and such that allow you to link with the same wxMac that wxPython does" \ --NeedsAuthorization="YES" \ --Relocatable="NO" \ --InstallOnly="YES" \ $INSTALLROOT mv wxPythonOSX-devel.pkg $DMGDIR/root # Make a README.txt to go on the disk image cat > $DMGDIR/root/README.txt <<EOF The files on this disk image are Installer packages for wxPythonOSX $VERSION for MacPython-OSX $PVER. You must already have MacPython-OSX installed. The wxPython extension modules, library, demo and samples are contained in the wxPythonOSX package. You should install at least this package to use wxPython. If you have any need to create applicaitons or extension modules that link with the same wxMac that wxPython does, then you can also install the wxPythonOSX-devel package to get the necessary header files and such. Otherwise you don't need it. Happy Hacking! EOF # license files, etc. cp -pR $WXDIR/wxPython/licence $DMGDIR/root cp $WXDIR/wxPython/CHANGES.txt $DMGDIR/root # and then finally make a disk image containing the packages and etc. $PROGDIR/../makedmg $DMGDIR/root $DMGDIR wxPythonOSX-$VERSION-py$PYVER echo Moving $DMGDIR/wxPythonOSX-$VERSION-py$PYVER.dmg to $DESTDIR mv $DMGDIR/wxPythonOSX-$VERSION-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