wxWidgets/wxPython/distrib/mac/wxPythonOSX/build
2004-03-13 06:10:26 +00:00

463 lines
12 KiB
Bash
Executable File

#!/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 [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 " use_cvs Use the CVS workspace instead of a tarfile"
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
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
TARBALLDIR=/stuff/Development/wxPython/dist/$VERSION
TARBALL=$TARBALLDIR/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
SRCROOT=$BUILDROOT/wxPythonSrc-$VERSION
#----------------------------------------------------------------------
# Setup builddirs
mkdir -p $BUILDROOT
mkdir -p $INSTALLROOT
#mkdir -p $INSTALLDEVEL
rm -rf $DMGDIR
mkdir -p $DMGDIR/root/Apps
mkdir -p $DMGDIR/root/Docs
mkdir -p $DMGDIR/root/Samples
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 wxWidgets
if [ -z "$skipconfig" ]; then
../configure \
--prefix=$PREFIX \
--with-mac \
--disable-monolithic \
--with-opengl \
--enable-sound \
--enable-display \
--enable-geometry \
--enable-precomp=no \
--enable-debug_flag
## --enable-optimise \
## --with-libjpeg=builtin \
## --with-libpng=builtin \
## --with-libtiff=builtin \
## --with-zlib=builtin \
fi
# Build wxWidgets and wxPython
if [ -z "$skipbuild" ]; then
# Make wxWidgets 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 wxWidgets
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.
Apps/wxPython Demo An application bundle version of the demo.
(This has it's own copy of the sources within
the bundle.)
Apps/XRCed An application for editing wxPython resource
files (XRC files.)
Apps/PyCrust An application that provides an interactive
Python shell and also namespace inspectors.
Docs/wxDocs A folder containing the wxWidgets documentation
bundled in .zip files, and a small wxPython
application that can be used to view the docs.
Just run viewer.pyw.
Docs/licence License files.
Docs/other A few readmes, change log, etc. The full
documentation is downloadable separately.
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
pushd $DMGDIR/root/Docs
tar xzvf $TARBALLDIR/wxPythonDocs-$VERSION.tar.gz
mv wxPython-$VERSION/docs wxDocs
rm -r wxPython-$VERSION
mv wxDocs/viewdocs.py wxDocs/viewdocs.pyw
# license files, docs, etc.
cp -pR $SRCROOT/wxPython/licence .
cp -pR $SRCROOT/wxPython/docs .
rm -rf docs/bin
rm -rf docs/xml-raw
mv docs other
popd
# Copy the demo and samples to the disk image from the tarball
pushd $DMGDIR/root/Samples
tar xzvf $TARBALLDIR/wxPythonDemo-$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 launch PyCrust
$PYTHONW $PROGDIR/../buildapp.py \
--builddir=$DMGDIR/root/Apps \
--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/Apps \
--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/Apps \
--name="wxPython Demo" \
--mainprogram=$DMGDIR/root/Samples/demo/demo.pyw \
--iconfile=$PROGDIR/RunDemo.icns \
build
cp -pR $DMGDIR/root/Samples/demo/* "$DMGDIR/root/Apps/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