wxWidgets/wxPython/distrib/mac/wxPythonOSX/build
2004-10-22 15:20:51 +00:00

642 lines
18 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
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, figure out why, but in the meantime...
if [ "$UID" = "0" ]; then
chmod a+w lib
if [ "$CHARTYPE" = "ansi" ]; then
su robind -c "make lib/libwx_macd-2.5.3.r"
else
su robind -c "make lib/libwx_macud-2.5.3.r"
fi
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 <<EOF
Welcome!
This Installer package will install the wxPython $CHARTYPE runtime $VERSION for $W_MSG MacPython-OSX $PYVER. This includes:
* The wxPython packages and modules
* The wxWidgets shared libraries and headers
You must install onto your current boot disk, eventhough the installer does not enforce this, otherwise things will not work.
You can install more than one version of the wxPython runtime if you desire. You also need to install one instance of the wxPython-common package, which will determine which of the installed runtimes will be the default.
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
rm -rf \$2$SITEPACKAGES/$PKGDIR
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/$PKGDIR
$PYTHON -O \$2$PYLIB/compileall.py \$2$SITEPACKAGES/$PKGDIR
# and all of the wxPython pacakge should be group writable
chgrp -R admin \$2$SITEPACKAGES/$PKGDIR
chmod -R g+w \$2$SITEPACKAGES/$PKGDIR
exit 0
EOF
chmod +x $RESOURCEDIR/postflight
# Build the main Installer Package...
rm -rf wxPython${SHORTVER}-osx-$CHARTYPE-$KIND.pkg
python $PROGDIR/../buildpkg.py \
--Title=wxPython${SHORTVER}-osx-$CHARTYPE-$KIND \
--Version=$VERSION \
--Description="wxPython $CHARTYPE runtime $VERSION for $W_MSG MacPython-OSX $PYVER" \
--NeedsAuthorization="YES" \
--Relocatable="NO" \
--InstallOnly="YES" \
$INSTALLROOT \
$RESOURCEDIR
mv wxPython${SHORTVER}-osx-$CHARTYPE-$KIND.pkg $DMGROOT
rm $RESOURCEDIR/postflight
rm $RESOURCEDIR/preflight
rm $RESOURCEDIR/Welcome.txt
#-----------------------------------------------
# The common files package
# Make the welcome message
cat > $RESOURCEDIR/Welcome.txt <<EOF
Welcome!
This package contains the common files that are shared between versions of the wxPython runtime. This includes some command line scripts installed to /usr/local/bin as well as a Python .pth file for site-packages that will determine which version of the installed runtimes is the default version.
EOF
# Build the common Installer Package...
rm -rf wxPython-common-osx-$KIND.pkg
python $PROGDIR/../buildpkg.py \
--Title=wxPython-common-osx-$KIND \
--Version=$VERSION \
--Description="Common files for the wxPython runtime ($CHARTYPE-$VERSION)" \
--NeedsAuthorization="YES" \
--Relocatable="NO" \
--InstallOnly="YES" \
$INSTALLCOMMON \
$RESOURCEDIR
mv wxPython-common-osx-$KIND.pkg $DMGROOT
rm $RESOURCEDIR/Welcome.txt
#-----------------------------------------------
# Make a README to go on the disk image
cat > "$DMGROOT/README 1st.txt" <<EOF
Welcome to wxPython!
This disk image contains the following items:
wxPython${SHORTVER}-osx-$CHARTYPE-$VERSION-$KIND
This is the main component of the wxPython runtime. It
includes the Python modules and extension modules, as well as
the wxWidgets libraries. It is possible to have more than one
version of the runtime installed at once if you wish, See
http://wkik.wxpython.org/index.cgi/MultiVersionInstalls
for details on how to choose which version is installed.
wxPython-common-osx-$CHARTYPE-$VERSION-$KIND
This is the common files for the runtime that are shared
between all versions of the runtime. You need to have one of
these installed and it will determine which of the runtimes is
the default one that is imported with "import wx", so it
should match the version and character type of one of the
installed runtimes. If you are wanting to have only one
wxPython installed then be sure to install both of the
packages in this disk image.
uninstall_wxPython.py
A simple tool to help you manage your installed versions of
wxPython. It will allow you to choose from the currently
installed wxPython packages and to select one for
uninstallation. It is a text-mode tool so you can either run
it from a Terminal command line, or you can open it with
PythonLauncher and let it create a Terminal to run it in.
EOF
cp $PROGDIR/../uninstall_wxPython.py $DMGROOT
#-----------------------------------------------
# Make a disk image to hold these files
dmgname=wxPython${SHORTVER}-osx-$CHARTYPE-$VERSION-$KIND-py$PYVER
$PROGDIR/../makedmg $DMGROOT $DMGDIR $dmgname
echo Moving $DMGDIR/$dmgname.dmg to $DESTDIR
mv $DMGDIR/$dmgname.dmg $DESTDIR
#---------------------------------------------------------------------------
# Now create app bundles for the demo, docs, and tools and make another
# disk image to hold it all.
#---------------------------------------------------------------------------
cat > "$DMGAPPS/README 1st.txt" <<EOF
Welcome to wxPython!
On this disk image you will find Demo, Tools, Docs, and etc. for
wxPython $VERSION. Everything here is optional and you can drag them
out of the disk image and drop them wherever you want. You will need
to have an installed wxPython runtime to be able to use any of them.
wxPython Demo An application bundle version of the demo.
(This has it's own copy of the demo 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.
Docs/wxDocsViewer An application that allows you to view the
wxWidgets documentation.
Docs/licence License files.
Docs/other A few readmes, change log, etc.
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
if [ ! -e $TARBALLDIR/wxPython-docs-$VERSION.tar.gz ]; then
cat > "$DMGAPPS/Docs/Build ERROR.txt" <<EOF
The wxPython-docs tarball was not found when building this disk image!
EOF
else
pushd $BUILDROOT
tar xzvf $TARBALLDIR/wxPython-docs-$VERSION.tar.gz
popd
# Make an app to launch viewdocs.py
$PYTHONW $PROGDIR/../buildapp.py \
--builddir=$DMGAPPS/Docs \
--name=wxDocsViewer \
--mainprogram=$BUILDROOT/wxPython-$VERSION/docs/viewdocs.py \
--iconfile=$PROGDIR/Info.icns \
build
cp $BUILDROOT/wxPython-$VERSION/docs/*.zip $DMGAPPS/Docs/wxDocsViewer.app/Contents/Resources
cat > "$DMGAPPS/Docs/README 1st.txt" <<EOF
The wxDocsViewer application needs to be copied to your Desktop (or
someplace else you have write access to) before you can run it, so it
can cache some indexes within its bundle.
EOF
fi
# license files, docs, etc.
pushd $DMGAPPS/Docs
cp -pR $SRCROOT/wxPython/licence .
cp -pR $SRCROOT/wxPython/docs .
rm -rf docs/bin
rm -rf docs/xml-raw
mv docs other
popd
if [ ! -e $TARBALLDIR/wxPython-demo-$VERSION.tar.gz ]; then
cat > "$DMGAPPS/Samples/Build ERROR.txt" <<EOF
The wxPython-demo tarball was not found when building this disk image!
EOF
cp "$DMGAPPS/Samples/Build ERROR.txt" $DMGAPPS
else
# Copy the demo and samples to the disk image from the tarball
pushd $DMGAPPS/Samples
tar xzvf $TARBALLDIR/wxPython-demo-$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 run the demo
$PYTHONW $PROGDIR/../buildapp.py \
--builddir=$DMGAPPS \
--name="wxPython Demo" \
--mainprogram=$DMGAPPS/Samples/demo/demo.pyw \
--iconfile=$PROGDIR/RunDemo.icns \
build
cp -pR $DMGAPPS/Samples/demo/* "$DMGAPPS/wxPython Demo.app/Contents/Resources"
fi
# Make an app bundle to launch PyCrust
$PYTHONW $PROGDIR/../buildapp.py \
--builddir=$DMGAPPS \
--name=PyCrust \
--mainprogram=$INSTALLCOMMON$BINPREFIX/pycrust.py \
--iconfile=$PROGDIR/PieShell.icns \
build
# # and PyAlaMode
# $PYTHONW $PROGDIR/../buildapp.py \
# --builddir=$DMGAPPS \
# --name=PyAlaMode \
# --mainprogram=$INSTALLCOMMON$BINPREFIX/pyalamode.py \
# --iconfile=$PROGDIR/PieShell.icns \
# build
# Make an app to launch XRCed
$PYTHONW $PROGDIR/../buildapp.py \
--builddir=$DMGAPPS \
--name=XRCed \
--mainprogram=$INSTALLCOMMON$BINPREFIX/xrced.py \
--iconfile=$PROGDIR/XRCed.icns \
build
# and then finally make a disk image containing everything
dmgname=wxPython${SHORTVER}-osx-docs-demos-$VERSION
$PROGDIR/../makedmg $DMGAPPS $DMGDIR $dmgname
echo Moving $DMGDIR/$dmgname.dmg to $DESTDIR
mv $DMGDIR/$dmgname.dmg $DESTDIR
fi
# Cleanup build/install dirs
if [ $skipclean != yes ]; then
echo "Cleaning up..."
rm -rf $TMPDIR
else
echo "Cleanup is disabled. You should remove $TMPDIR when finished"
fi