# Build wxMac and wxPythonOSX from the tarball and then make an
# Installer package out of it.
+##set -x
+
spectemplate=distrib/wxPythonFull.spec.in
if [ ! -d wxPython -o ! -e ${spectemplate} ]; then
if [ "$UID" != "0" ]; then
echo "-------------------------------------------------------"
- echo " WARNING: will be unable to change ownership of files"
+ echo " WARNING: I will be unable to change ownership of files"
echo " unless this script is run as root or via sudo"
echo "-------------------------------------------------------"
fi
function usage {
echo ""
- echo "Usage: $0 [panther|jaguar] [command flags...]"
+ echo "Usage: $0 PYVER [jaguar|panther] [command flags...]"
+ echo ""
+ echo " PYVER Python version to use to do the build"
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 " 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"
}
-if [ $# -lt 1 ]; then
+if [ $# -lt 2 ]; then
usage
exit 1
fi
-KIND=$1
+PYVER=$1
+if which python$PYVER && which pythonw$PYVER; then
+ PYTHON=`which python$PYVER`
+ PYTHONW=`which pythonw$PYVER`
+else
+ usage;
+ exit 1
+fi
+
+KIND=$2
case $KIND in
- panther) PYTHON=/usr/bin/python ;;
- jaguar) PYTHON=/usr/local/bin/python ;;
+ panther) TAG=macosx10.3 ;;
+ jaguar) TAG=macosx10.2 ;;
*) usage; exit 1 ;;
esac
-PYTHONW=${PYTHON}w
-shift
+
+shift;shift
skiptar=no
skipconfig=no
skipdmg=no
skipclean=no
inplace=no
+unicode=no
for flag in $*; do
case ${flag} in
skipdmg) skipdmg=yes ;;
skipclean) skipclean=yes ;;
inplace) inplace=yes; skiptar=yes ;;
+ unicode) unicode=yes ;;
*) echo "Unknown flag \"${flag}\""
usage
VERSION=`$PYTHON -c "import setup;print setup.VERSION"`
-PYVER=`$PYTHON -c "import sys; print sys.version[:3]"`
+SHORTVER=`echo $VERSION | cut -c 1,2,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 [ $unicode == yes ]; then
+ CHARTYPE=unicode
+ UNICODEOPT=--enable-unicode
+ PYUNICODEOPT=1
+else
+ CHARTYPE=ansi
+ UNICODEOPT=--disable-unicode
+ PYUNICODEOPT=0
+fi
+
+
+# Test if the python we are using is the System installed framework
+# or one that was installed by the user. This changes where the
+# site-packages (or its alias) is located in the installer tree.
+APPLE_PYTHON=no
+if [ -e /Library/Python/$PYVER ] && [ `dirname $PYTHON` == "/usr/bin" ]; then
+ APPLE_PYTHON=yes
+fi
-PREFIX=/usr/local/lib/wxPython-$VERSION
+PREFIX=/usr/local/lib/wxPython-$CHARTYPE-$VERSION
BINPREFIX=/usr/local/bin
WXROOT=`dirname $PWD`
TMPDIR=$PWD/_build_dmg
BUILDROOT=$TMPDIR/build
-INSTALLROOT=$TMPDIR/install
-INSTALLDEVEL=$TMPDIR/install-devel
+
+INSTALLROOT=$TMPDIR/install-root
+INSTALLAPPS=$TMPDIR/install-apps
+
DMGDIR=$TMPDIR/dmg
+DMGROOT=$DMGDIR/root
+DMGAPPS=$DMGDIR/apps
+
RESOURCEDIR=$PROGDIR/resources
DESTDIR=$PWD/dist
SRCROOT=$BUILDROOT/wxPython-src-$VERSION
mkdir -p $BUILDROOT
mkdir -p $INSTALLROOT
-#mkdir -p $INSTALLDEVEL
+mkdir -p $INSTALLAPPS
+
rm -rf $DMGDIR
-mkdir -p $DMGDIR/root/Apps
-mkdir -p $DMGDIR/root/Docs
-mkdir -p $DMGDIR/root/Samples
+mkdir -p $DMGROOT
+mkdir -p $DMGAPPS/Docs
+mkdir -p $DMGAPPS/Samples
pushd $BUILDROOT
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
+
+ # If building "inplace" then our build dir will be off of the
+ # WXROOT like normal, adjust the variables to find things that
+ # way.
+ WXBLD=$WXROOT/build-$CHARTYPE
+ mkdir -p $WXBLD
+ cd $WXBLD
+ WXDIR=..
SRCROOT=$WXROOT
- WXBLD=$BUILDROOT
fi
-echo "Using source tree: $WXDIR"
+echo "Using wx root dir: $WXROOT"
echo "Using build dir: $WXBLD"
+echo "Using source tree: $WXDIR"
#----------------------------------------------------------------------
+if [ $KIND = panther ]; then
+ OTHER_CFG_OPTS=--enable-mediactrl
+fi
# Configure wxWidgets
if [ $skipconfig != yes ]; then
--enable-debug_flag \
--enable-precomp=no \
--enable-optimise \
-
-## --with-libjpeg=builtin \
-## --with-libpng=builtin \
-## --with-libtiff=builtin \
-## --with-zlib=builtin \
+ --disable-debugreport \
+ $UNICODEOPT $OTHER_CFG_OPTS
fi
# 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
+# # For some reason Rez and DeRez have started locking up if run via
+# # an ssh terminal. Figure out why, but in the meantime...
+# if [ "$CHARTYPE" = "ansi" ]; then
+# echo cp /projects/wx2.5/bld/lib/libwx_macd-2.5.?.r* lib
+# cp /projects/wx2.5/bld/lib/libwx_macd-2.5.?.r* lib
+# else
+# echo cp /projects/wx2.5/bld-unicode/lib/libwx_macud-2.5.?.r* lib
+# cp /projects/wx2.5/bld-unicode/lib/libwx_macud-2.5.?.r* lib
+# fi
+# touch lib/libwx*.r*
+
+ make $MAKEJOBS
+ make $MAKEJOBS -C contrib/src/animate
+ make $MAKEJOBS -C contrib/src/gizmos
+ make $MAKEJOBS -C contrib/src/stc
# Build wxPython
- cd $WXDIR/wxPython
+ cd $WXROOT/wxPython
$PYTHON setup.py \
+ UNICODE=$PYUNICODEOPT \
NO_SCRIPTS=1 \
EP_ADD_OPTS=1 \
WX_CONFIG="$WXBLD/wx-config --inplace" \
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
+ make prefix=$INSTALLROOT$PREFIX install
+ make -C contrib/src/animate prefix=$INSTALLROOT$PREFIX install
+ make -C contrib/src/gizmos prefix=$INSTALLROOT$PREFIX install
+ make -C contrib/src/stc prefix=$INSTALLROOT$PREFIX install
# relink wx-config with a relative link
ln -s ../lib/wx/config/* wx-config
# and wxPython
- cd $WXDIR/wxPython
+ cd $WXROOT/wxPython
$PYTHON setup.py \
+ UNICODE=$PYUNICODEOPT \
NO_SCRIPTS=1 \
EP_ADD_OPTS=1 \
WX_CONFIG="$INSTALLROOT/$PREFIX/bin/wx-config --prefix=$INSTALLROOT/$PREFIX" \
--root=$INSTALLROOT
- # Apple's Python (on Panther) sym-links the site-packages dir to
+ # Apple's Python Framework (such as what comes with Panther)
+ # sym-links the site-packages dir in the framework 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 [ $APPLE_PYTHON == yes ]; then
if [ -e $INSTALLROOT/Library/Python/$PYVER ]; then
rm -r $INSTALLROOT/Library/Python/$PYVER
fi
SITEPACKAGES=/Library/Python/$PYVER
fi
-
# install wxPython's tool scripts
mkdir -p $INSTALLROOT$BINPREFIX
- cd $WXDIR/wxPython/scripts
+ cd $WXROOT/wxPython/scripts
python$PYVER CreateMacScripts.py $INSTALLROOT $BINPREFIX
+ # Remove the .pyc/.pyo files they just take up space and can be recreated
+ # during the install.
+ pushd $WXROOT/wxPython
+ $PYTHON $PROGDIR/../zappycfiles.py $INSTALLROOT > /dev/null
+ popd
+
# Set premissions for files in $INSTALLROOT
if [ "$UID" = "0" ]; then
chown -R root:admin $INSTALLROOT
fi
fi
-PKGDIR=`cat $INSTALLROOT/Library/Python/$PYVER/wx.pth`
+if [ $APPLE_PYTHON == yes ]; then
+ SITEPACKAGES=/Library/Python/$PYVER
+fi
+PKGDIR=`cat $INSTALLROOT$SITEPACKAGES/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
-
+ #-----------------------------------------------
+ # 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 program will install wxPython $VERSION for $W_MSG MacPython-OSX $PYVER.
+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
+ * Some command line tool scripts, installed to /usr/local/bin.
-You must install onto your current boot disk, even though the installer does not enforce this, otherwise things will not work.
+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. The most recently installed version will be the default wxPython, but you can choose another by setting the PYTHONPATH or by using the wxversion module. See http://wiki.wxpython.org/index.cgi/MultiVersionInstalls for more details.
Build date: `date`
EOF
$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
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 \
+ PKGNAME=wxPython${SHORTVER}-osx-$CHARTYPE-$KIND
+ if [ $PYVER != 2.3 ]; then
+ PKGNAME=wxPython${SHORTVER}-osx-$CHARTYPE-$KIND-py$PYVER
+ fi
+ rm -rf $PKGNAME.pkg
+ $PYTHON $PROGDIR/../buildpkg.py \
+ --Title=$PKGNAME \
--Version=$VERSION \
- --Description="wxPython $VERSION for $W_MSG MacPython-OSX $PYVER" \
+ --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 $DMGDIR/root
+ mv $PKGNAME.pkg $DMGROOT
+ rm $RESOURCEDIR/postflight
+ rm $RESOURCEDIR/preflight
+ rm $RESOURCEDIR/Welcome.txt
- # Make a README.txt to go on the disk image
- cat > "$DMGDIR/root/README 1st.txt" <<EOF
+ #-----------------------------------------------
+ # Make a README to go on the disk image
+ cat > "$DMGROOT/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.
+This disk image contains the following items:
+
+ wxPython${SHORTVER}-osx-$CHARTYPE-$VERSION-$KIND
+
+ This Installer contains the wxPython runtime, compiled on a
+ $KIND OS X system, using the $CHARTYPE build of the wxWidgets
+ library. 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. The most recently installed
+ version will be the default wxPython, but you can choose
+ another by setting the PYTHONPATH or by using the wxversion
+ module. For more details see:
+ http://wiki.wxpython.org/index.cgi/MultiVersionInstalls
- 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.
+ 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.
+
+ NOTE: If you have versions prior to 2.5.3.1 installed, please
+ do run this uninstall tool to remove the older version.
+
+EOF
+
+
+
+ cp $PROGDIR/../uninstall_wxPython.py $DMGROOT
+
+
+ #-----------------------------------------------
+ # Make a disk image to hold these files
+ dmgname=wxPython${SHORTVER}-osx-$CHARTYPE-$VERSION-$TAG-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.
- Apps/wxPython Demo An application bundle version of the demo.
- (This has it's own copy of the sources within
- the bundle.)
+ wxPython Demo An application bundle version of the demo.
+ (This has it's own copy of the demo sources
+ within the bundle.)
- Apps/XRCed An application for editing wxPython resource
+ XRCed An application for editing wxPython resource
files (XRC files.)
- Apps/PyCrust An application that provides an interactive
+ PyCrust An application that provides an interactive
Python shell and also namespace inspectors.
# wxDocs
if [ ! -e $TARBALLDIR/wxPython-docs-$VERSION.tar.gz ]; then
- cat > "$DMGDIR/root/Docs/Build ERROR.txt" <<EOF
+ cat > "$DMGAPPS/Docs/Build ERROR.txt" <<EOF
The wxPython-docs tarball was not found when building this disk image!
# Make an app to launch viewdocs.py
$PYTHONW $PROGDIR/../buildapp.py \
- --builddir=$DMGDIR/root/Docs \
+ --builddir=$DMGAPPS/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
+ cp $BUILDROOT/wxPython-$VERSION/docs/*.zip $DMGAPPS/Docs/wxDocsViewer.app/Contents/Resources
- cat > "$DMGDIR/root/Docs/README 1st.txt" <<EOF
+ 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
fi
# license files, docs, etc.
- pushd $DMGDIR/root/Docs
+ pushd $DMGAPPS/Docs
cp -pR $SRCROOT/wxPython/licence .
cp -pR $SRCROOT/wxPython/docs .
rm -rf docs/bin
if [ ! -e $TARBALLDIR/wxPython-demo-$VERSION.tar.gz ]; then
- cat > "$DMGDIR/root/Samples/Build ERROR.txt" <<EOF
+ cat > "$DMGAPPS/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
+ cp "$DMGAPPS/Samples/Build ERROR.txt" $DMGAPPS
else
# Copy the demo and samples to the disk image from the tarball
- pushd $DMGDIR/root/Samples
+ pushd $DMGAPPS/Samples
tar xzvf $TARBALLDIR/wxPython-demo-$VERSION.tar.gz
mv wxPython-$VERSION/* .
rm -rf wxPython-$VERSION
# Make an app bundle to run the demo
$PYTHONW $PROGDIR/../buildapp.py \
- --builddir=$DMGDIR/root/Apps \
+ --builddir=$DMGAPPS \
--name="wxPython Demo" \
- --mainprogram=$DMGDIR/root/Samples/demo/demo.pyw \
+ --mainprogram=$DMGAPPS/Samples/demo/demo.pyw \
--iconfile=$PROGDIR/RunDemo.icns \
build
- cp -pR $DMGDIR/root/Samples/demo/* "$DMGDIR/root/Apps/wxPython Demo.app/Contents/Resources"
+ cp -pR $DMGAPPS/Samples/demo/* "$DMGAPPS/wxPython Demo.app/Contents/Resources"
fi
# Make an app bundle to launch PyCrust
$PYTHONW $PROGDIR/../buildapp.py \
- --builddir=$DMGDIR/root/Apps \
+ --builddir=$DMGAPPS \
--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
+## TODO: PyAlaMode needs tweaked to be able to run from a bundle. It
+## needs to know to ignore command line parameters and etc...
+# # and PyAlaMode
+# $PYTHONW $PROGDIR/../buildapp.py \
+# --builddir=$DMGAPPS \
+# --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 \
+ --builddir=$DMGAPPS \
--name=XRCed \
--mainprogram=$INSTALLROOT$BINPREFIX/xrced.py \
--iconfile=$PROGDIR/XRCed.icns \
- # 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
+ # and then finally make a disk image containing everything
+ dmgname=wxPython${SHORTVER}-osx-docs-demos-$VERSION-$TAG-py$PYVER
+ $PROGDIR/../makedmg $DMGAPPS $DMGDIR $dmgname
- 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
+ echo Moving $DMGDIR/$dmgname.dmg to $DESTDIR
+ mv $DMGDIR/$dmgname.dmg $DESTDIR
fi