bceb17b2e0
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@29890 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
518 lines
14 KiB
Bash
Executable File
518 lines
14 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 " 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
|
|
|
|
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 ;;
|
|
|
|
*) 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`
|
|
|
|
# TODO: enable selecting unicode or ansi builds, then set this accordingly...
|
|
CHARTYPE=ansi
|
|
|
|
|
|
|
|
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-$VERSION
|
|
BINPREFIX=/usr/local/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/wxPython-src-$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 [ $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 \
|
|
|
|
## --with-libjpeg=builtin \
|
|
## --with-libpng=builtin \
|
|
## --with-libtiff=builtin \
|
|
## --with-zlib=builtin \
|
|
|
|
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...
|
|
chmod a+w lib
|
|
su robind -c "make lib/libwx_macd-2.5.3.r"
|
|
|
|
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 \
|
|
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 \
|
|
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
|
|
|
|
|
|
# install wxPython's tool scripts
|
|
mkdir -p $INSTALLROOT$BINPREFIX
|
|
cd $WXDIR/wxPython/scripts
|
|
python$PYVER CreateMacScripts.py $INSTALLROOT $BINPREFIX
|
|
|
|
|
|
# Set premissions for files in $INSTALLROOT
|
|
if [ "$UID" = "0" ]; then
|
|
chown -R root:admin $INSTALLROOT
|
|
chmod -R g+w $INSTALLROOT
|
|
fi
|
|
fi
|
|
|
|
PKGDIR=`cat $INSTALLROOT/Library/Python/$PYVER/wx.pth`
|
|
|
|
popd
|
|
|
|
#----------------------------------------------------------------------
|
|
|
|
# Make the Installer packages and disk image
|
|
if [ $skipdmg != yes ]; then
|
|
|
|
# Remove the .pyc/.pyo files they just take up space and can be recreated
|
|
# during the install.
|
|
$PYTHON $PROGDIR/../zappycfiles.py $INSTALLROOT > /dev/null
|
|
|
|
|
|
# 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
|
|
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 $VERSION for $W_MSG MacPython-OSX $PYVER" \
|
|
--NeedsAuthorization="YES" \
|
|
--Relocatable="NO" \
|
|
--InstallOnly="YES" \
|
|
$INSTALLROOT \
|
|
$RESOURCEDIR
|
|
|
|
mv wxPython${SHORTVER}-osx-$CHARTYPE-$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${SHORTVER}-osx-$CHARTYPE-$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 wherever 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/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 > "$DMGDIR/root/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=$DMGDIR/root/Docs \
|
|
--name=wxDocsViewer \
|
|
--mainprogram=$BUILDROOT/wxPython-$VERSION/docs/viewdocs.py \
|
|
--iconfile=$PROGDIR/Info.icns \
|
|
build
|
|
|
|
cp $BUILDROOT/wxPython-$VERSION/docs/*.zip $DMGDIR/root/Docs/wxDocsViewer.app/Contents/Resources
|
|
|
|
cat > "$DMGDIR/root/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 $DMGDIR/root/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 > "$DMGDIR/root/Samples/Build ERROR.txt" <<EOF
|
|
|
|
The wxPython-demo tarball was not found when building this disk image!
|
|
|
|
EOF
|
|
cp "$DMGDIR/root/Samples/Build ERROR.txt" $DMGDIR/root/Apps
|
|
|
|
else
|
|
|
|
# Copy the demo and samples to the disk image from the tarball
|
|
pushd $DMGDIR/root/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=$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"
|
|
fi
|
|
|
|
|
|
# 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
|
|
|
|
|
|
|
|
# and then finally make a disk image containing the packages and etc.
|
|
$PROGDIR/../makedmg $DMGDIR/root $DMGDIR wxPython${SHORTVER}-osx-$CHARTYPE-$VERSION-$KIND-py$PYVER
|
|
|
|
echo Moving $DMGDIR/wxPython${SHORTVER}-osx-$CHARTYPE-$VERSION-$KIND-py$PYVER.dmg to $DESTDIR
|
|
mv $DMGDIR/wxPython${SHORTVER}-osx-$CHARTYPE-$VERSION-$KIND-py$PYVER.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
|
|
|