Files
wxWidgets/wxPython/distrib/mac/wxPythonOSX/build
2004-01-17 23:20:49 +00:00

413 lines
11 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 [apple|local] [command flags...]"
echo ""
echo " apple Build for Apple's python in /usr/bin"
echo " local Build for a locally installed python in /usr/local/bin"
echo " (for example Jaguar's MacPython)"
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
apple) PYTHON=/usr/bin/python ;;
local) 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"`
SITEPACKAGES=$PYPREFIX/lib/python$PYVER/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
#----------------------------------------------------------------------
# Install wxWindows
if [ -z "$skipinstall" ]; then
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
# 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
# TODO for $INSTALLROOT and $INSTALLDEVEL ?
#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
apple) W_MSG="an Apple installed (Panther) version of" ;;
local) W_MSG="a locally built version (or Jaguar version) of" ;;
esac
cat > $RESOURCEDIR/Welcome.txt <<EOF
Welcome!
This program will install wxPython $VERSION for $W_MSG 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
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$SITEPACKAGES/../compileall.py \$2$SITEPACKAGES/wxPython
$PYTHON \$2$SITEPACKAGES/../compileall.py \$2$SITEPACKAGES/wx
$PYTHON -O \$2$SITEPACKAGES/../compileall.py \$2$SITEPACKAGES/wxPython
$PYTHON -O \$2$SITEPACKAGES/../compileall.py \$2$SITEPACKAGES/wx
# and 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
# Finally, 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
# # 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" \
# $INSTALLDEVEL
# mv wxPythonOSX-devel.pkg $DMGDIR/root
# Make a README.txt to go on the disk image
cat > $DMGDIR/root/README.txt <<EOF
Welcome to wxPython!
On this disk image you will find the installer for the wxPython $VERSION for $W_MSG MacPython-OSX $PYVER. You must already have MacPython-OSX installed.
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 where ever you want.
docs/ A few readmes, change log, etc. The full
documentation is downloadable separately.
licence/ License docs.
demo/ A copy of the wxPython demo.
samples/ Several small sample applications that
demonstrate how to use wxPython.
Happy Hacking!
EOF
# 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
# 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