wxPython on OSX can now be built in Unicode mode, can support multiple

version installs, and comes with an uninstaller script.


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@30055 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robin Dunn
2004-10-22 02:50:05 +00:00
parent c39e759922
commit 85245f48ad
4 changed files with 394 additions and 75 deletions

View File

@@ -606,7 +606,7 @@ if debug:
if FINAL: if FINAL:
HYBRID = 0 HYBRID = 0
if UNICODE and WXPORT not in ['msw', 'gtk2']: if UNICODE and WXPORT not in ['msw', 'gtk2', 'mac']:
raise SystemExit, "UNICODE mode not currently supported on this WXPORT: "+WXPORT raise SystemExit, "UNICODE mode not currently supported on this WXPORT: "+WXPORT

View File

@@ -0,0 +1,196 @@
#!/usr/bin/env python
"""
This script will search for installed versions of wxPython on OSX and
allow the user to choose one to uninstall. It then will use the
metadata stored about the installed package to remove all the files
associated with that install.
Only the files installed by the main Installer Package will be
removed. This includes the Python modules and the wxWidgets shared
libraries. If you also installed the demo or docs by dragging them out
of the disk image, then you will need to drag them to the Trash
yourself.
"""
import sys, os, glob
import cPickle, urllib
RCPTDIR = "/Library/Receipts"
RSRCDIR = "Contents/Resources"
# only clean up dirs that have one of these as a prefix. We do this
# because the file list returned from lsbom will include /, /usr,
# /usr/local, etc.
PREFIXES = [ '/Library/Python/2.3/',
'/Library/Python/2.4/',
'/usr/local/lib/',
]
class AccessError(Exception):
pass
class InstalledReceipt(object):
def __init__(self, rcptPath):
self.rcptPath = rcptPath
self.rsrcPath = os.path.join(rcptPath, RSRCDIR)
self.bomFile = glob.glob(os.path.join(self.rsrcPath, "*.bom"))[0]
self.findMetaData()
def findMetaData(self):
# TODO: Make this be able to also look at Info.plist files
infoFile = glob.glob(os.path.join(self.rsrcPath, "*.info"))[0]
self.mdata = {}
for line in open(infoFile, "r").readlines():
line = line.strip()
if line and line[0] != '#':
ls = line.split()
self.mdata[ls[0]] = line[len(ls[0])+1:]
def getFileList(self):
p = os.popen("lsbom -s %s" % self.bomFile, "r")
data = p.read()
data.strip()
data = filter(lambda s: s!='' and s!='.', data.split('\n'))
loc = self.mdata['DefaultLocation']
return [loc+item for item in data]
def walkFiles(self, handleFile, handleDir):
dirs = []
names = self.getFileList()
# the plain files
for name in names:
name = os.path.abspath(name)
if os.path.isdir(name):
dirs.append(name)
else:
handleFile(name)
# the directories
dirs.reverse()
for dir in dirs:
for prefix in PREFIXES:
if dir.startswith(prefix):
handleDir(dir)
break
# Finally, remove the Receipts package, bottom-up
for dirpath, dirname, filenames in os.walk(self.rcptPath, False):
for name in filenames:
name = os.path.join(dirpath, name)
handleFile(name)
handleDir(dirpath)
def showFiles(self):
def show(name):
if os.path.exists(name):
print "Will remove:", name
self.walkFiles(show, show)
def testUninstallAccess(self):
def testFile(name):
if os.path.exists(name):
if not os.access(name, os.W_OK):
raise AccessError(name)
self.walkFiles(testFile, testFile)
def doUninstall(self):
def removeFile(name):
if os.path.exists(name):
print "Removing:", name
os.unlink(name)
def removeDir(name):
print "Removing:", name
if os.path.exists(name):
hasFiles = os.listdir(name)
if hasFiles: # perhaps some left over symlinks, or .pyc files
for file in hasFiles:
os.unlink(os.path.join(name, file))
os.rmdir(name)
try:
self.testUninstallAccess()
except AccessError, e:
print "UNABLE TO UNINSTALL!\nNo permission to remove: ", e.args[0]
sys.exit()
self.walkFiles(removeFile, removeDir)
def findInstalled():
installed = []
for name in glob.glob(os.path.join(RCPTDIR, "wxPython*")):
ir = InstalledReceipt(name)
installed.append(ir)
return installed
# Just in case a Python < 2.3 is used to run this
try:
enumerate
except NameError:
def enumerate(sequence):
return zip(range(len(sequence)), sequence)
def main():
if len(sys.argv) > 1 and sys.argv[1] == "-doit":
inst = cPickle.loads(urllib.unquote(sys.argv[2]))
inst.doUninstall()
sys.exit()
print __doc__
installed = findInstalled()
if not installed:
print "*** No wxPython installations found! ***"
raw_input("Press RETURN...")
sys.exit()
for i, inst in enumerate(installed):
print " %d. %s \t%s" % (i+1, inst.mdata["Title"], inst.mdata["Version"])
print
ans = raw_input("Enter the number of the install to examine or 'Q' to quit: ")
if ans in ['Q', 'q']:
sys.exit()
inst = installed[int(ans) - 1]
while True:
print
print """
Title: %(Title)s
Version: %(Version)s
Description: %(Description)s
""" % inst.mdata
ans = raw_input("(U)ninstall, (S)how what will be removed, or (Q)uit? [u,s,q] ")
if ans in ['Q', 'q']:
sys.exit()
elif ans in ['S', 's']:
inst.showFiles()
elif ans in ['U', 'u']:
print
print "Launching uninstaller with sudo, please enter your password if prompted:"
os.system("sudo %s -doit %s" %
(sys.argv[0],
urllib.quote(cPickle.dumps(inst))))
sys.exit()
if __name__ == '__main__':
main()

View File

@@ -31,6 +31,7 @@ function usage {
echo " skiptar Don't unpack the tarball" echo " skiptar Don't unpack the tarball"
echo " inplace Don't use the tarball, build from the CVS tree instead" 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 " (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 " skipconfig Don't run configure"
echo " skipbuild Don't build wxWidgets or wxPython" echo " skipbuild Don't build wxWidgets or wxPython"
echo " skipinstall Don't do the installation step" echo " skipinstall Don't do the installation step"
@@ -61,6 +62,7 @@ skipinstall=no
skipdmg=no skipdmg=no
skipclean=no skipclean=no
inplace=no inplace=no
unicode=no
for flag in $*; do for flag in $*; do
case ${flag} in case ${flag} in
@@ -71,6 +73,7 @@ for flag in $*; do
skipdmg) skipdmg=yes ;; skipdmg) skipdmg=yes ;;
skipclean) skipclean=yes ;; skipclean) skipclean=yes ;;
inplace) inplace=yes; skiptar=yes ;; inplace) inplace=yes; skiptar=yes ;;
unicode) unicode=yes ;;
*) echo "Unknown flag \"${flag}\"" *) echo "Unknown flag \"${flag}\""
usage usage
@@ -86,9 +89,15 @@ PYLIB=$PYPREFIX/lib/python$PYVER
SITEPACKAGES=$PYLIB/site-packages SITEPACKAGES=$PYLIB/site-packages
SHORTVER=`echo $VERSION | cut -c 1,2,3` SHORTVER=`echo $VERSION | cut -c 1,2,3`
# TODO: enable selecting unicode or ansi builds, then set this accordingly... if [ $unicode == yes ]; then
CHARTYPE=ansi CHARTYPE=unicode
UNICODEOPT=--enable-unicode
PYUNICODEOPT=1
else
CHARTYPE=ansi
UNICODEOPT=--disable-unicode
PYUNICODEOPT=0
fi
if [ -z "$TARBALLDIR" ]; then if [ -z "$TARBALLDIR" ]; then
@@ -118,7 +127,7 @@ fi
PREFIX=/usr/local/lib/wxPython-$VERSION PREFIX=/usr/local/lib/wxPython-$CHARTYPE-$VERSION
BINPREFIX=/usr/local/bin BINPREFIX=/usr/local/bin
WXROOT=`dirname $PWD` WXROOT=`dirname $PWD`
@@ -126,9 +135,15 @@ PROGDIR="`dirname \"$0\"`"
TMPDIR=$PWD/_build_dmg TMPDIR=$PWD/_build_dmg
BUILDROOT=$TMPDIR/build BUILDROOT=$TMPDIR/build
INSTALLROOT=$TMPDIR/install
INSTALLDEVEL=$TMPDIR/install-devel INSTALLROOT=$TMPDIR/install-root
INSTALLCOMMON=$TMPDIR/install-common
INSTALLAPPS=$TMPDIR/install-apps
DMGDIR=$TMPDIR/dmg DMGDIR=$TMPDIR/dmg
DMGROOT=$DMGDIR/root
DMGAPPS=$DMGDIR/apps
RESOURCEDIR=$PROGDIR/resources RESOURCEDIR=$PROGDIR/resources
DESTDIR=$PWD/dist DESTDIR=$PWD/dist
SRCROOT=$BUILDROOT/wxPython-src-$VERSION SRCROOT=$BUILDROOT/wxPython-src-$VERSION
@@ -139,11 +154,13 @@ SRCROOT=$BUILDROOT/wxPython-src-$VERSION
mkdir -p $BUILDROOT mkdir -p $BUILDROOT
mkdir -p $INSTALLROOT mkdir -p $INSTALLROOT
#mkdir -p $INSTALLDEVEL mkdir -p $INSTALLCOMMON
mkdir -p $INSTALLAPPS
rm -rf $DMGDIR rm -rf $DMGDIR
mkdir -p $DMGDIR/root/Apps mkdir -p $DMGROOT
mkdir -p $DMGDIR/root/Docs mkdir -p $DMGAPPS/Docs
mkdir -p $DMGDIR/root/Samples mkdir -p $DMGAPPS/Samples
pushd $BUILDROOT pushd $BUILDROOT
@@ -191,11 +208,8 @@ if [ $skipconfig != yes ]; then
--enable-debug_flag \ --enable-debug_flag \
--enable-precomp=no \ --enable-precomp=no \
--enable-optimise \ --enable-optimise \
$UNICODEOPT
## --with-libjpeg=builtin \
## --with-libpng=builtin \
## --with-libtiff=builtin \
## --with-zlib=builtin \
fi fi
@@ -205,8 +219,10 @@ if [ $skipbuild != yes ]; then
# Make wxWidgets and some contribs # Make wxWidgets and some contribs
# For some reason Rez and DeRez have started locking up if run as root... # For some reason Rez and DeRez have started locking up if run as root...
if [ "$UID" = "0" ]; then
chmod a+w lib chmod a+w lib
su robind -c "make lib/libwx_macd-2.5.3.r" su robind -c "make lib/libwx_macd-2.5.3.r"
fi
make make
make -C contrib/src/gizmos make -C contrib/src/gizmos
@@ -216,6 +232,7 @@ if [ $skipbuild != yes ]; then
# Build wxPython # Build wxPython
cd $WXDIR/wxPython cd $WXDIR/wxPython
$PYTHON setup.py \ $PYTHON setup.py \
UNICODE=$PYUNICODEOPT \
NO_SCRIPTS=1 \ NO_SCRIPTS=1 \
EP_ADD_OPTS=1 \ EP_ADD_OPTS=1 \
WX_CONFIG="$WXBLD/wx-config --inplace" \ WX_CONFIG="$WXBLD/wx-config --inplace" \
@@ -242,6 +259,7 @@ if [ $skipinstall != yes ]; then
# and wxPython # and wxPython
cd $WXDIR/wxPython cd $WXDIR/wxPython
$PYTHON setup.py \ $PYTHON setup.py \
UNICODE=$PYUNICODEOPT \
NO_SCRIPTS=1 \ NO_SCRIPTS=1 \
EP_ADD_OPTS=1 \ EP_ADD_OPTS=1 \
WX_CONFIG="$INSTALLROOT/$PREFIX/bin/wx-config --prefix=$INSTALLROOT/$PREFIX" \ WX_CONFIG="$INSTALLROOT/$PREFIX/bin/wx-config --prefix=$INSTALLROOT/$PREFIX" \
@@ -263,21 +281,34 @@ if [ $skipinstall != yes ]; then
SITEPACKAGES=/Library/Python/$PYVER SITEPACKAGES=/Library/Python/$PYVER
fi 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 # install wxPython's tool scripts in COMMON too
mkdir -p $INSTALLROOT$BINPREFIX mkdir -p $INSTALLCOMMON$BINPREFIX
cd $WXDIR/wxPython/scripts cd $WXDIR/wxPython/scripts
python$PYVER CreateMacScripts.py $INSTALLROOT $BINPREFIX python$PYVER CreateMacScripts.py $INSTALLCOMMON $BINPREFIX
# Set premissions for files in $INSTALLROOT # 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 if [ "$UID" = "0" ]; then
chown -R root:admin $INSTALLROOT chown -R root:admin $INSTALLROOT $INSTALLCOMMON
chmod -R g+w $INSTALLROOT chmod -R g+w $INSTALLROOT $INSTALLCOMMON
fi fi
fi fi
PKGDIR=`cat $INSTALLROOT/Library/Python/$PYVER/wx.pth` if [ "$KIND" = "panther" ]; then
SITEPACKAGES=/Library/Python/$PYVER
fi
PKGDIR=`cat $INSTALLCOMMON$SITEPACKAGES/wx.pth`
popd popd
@@ -286,22 +317,27 @@ popd
# Make the Installer packages and disk image # Make the Installer packages and disk image
if [ $skipdmg != yes ]; then if [ $skipdmg != yes ]; then
# Remove the .pyc/.pyo files they just take up space and can be recreated #-----------------------------------------------
# during the install. # The main runtime installer package
$PYTHON $PROGDIR/../zappycfiles.py $INSTALLROOT > /dev/null
# Make the welcome message # Make the welcome message
case $KIND in case $KIND in
panther) W_MSG="the Panther (OS X 10.3.x) version of" ;; panther) W_MSG="the Panther (OS X 10.3.x) version of" ;;
jaguar) W_MSG="the Jaguar (OS X 10.2.x) version of" ;; jaguar) W_MSG="the Jaguar (OS X 10.2.x) version of" ;;
esac esac
cat > $RESOURCEDIR/Welcome.txt <<EOF cat > $RESOURCEDIR/Welcome.txt <<EOF
Welcome! 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:
You must install onto your current boot disk, even though the installer does not enforce this, otherwise things will not work. * 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` Build date: `date`
EOF EOF
@@ -324,7 +360,6 @@ EOF
$PYTHON \$2$PYLIB/compileall.py \$2$SITEPACKAGES/$PKGDIR $PYTHON \$2$PYLIB/compileall.py \$2$SITEPACKAGES/$PKGDIR
$PYTHON -O \$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 # and all of the wxPython pacakge should be group writable
chgrp -R admin \$2$SITEPACKAGES/$PKGDIR chgrp -R admin \$2$SITEPACKAGES/$PKGDIR
chmod -R g+w \$2$SITEPACKAGES/$PKGDIR chmod -R g+w \$2$SITEPACKAGES/$PKGDIR
@@ -340,41 +375,124 @@ EOF
python $PROGDIR/../buildpkg.py \ python $PROGDIR/../buildpkg.py \
--Title=wxPython${SHORTVER}-osx-$CHARTYPE-$KIND \ --Title=wxPython${SHORTVER}-osx-$CHARTYPE-$KIND \
--Version=$VERSION \ --Version=$VERSION \
--Description="wxPython $VERSION for $W_MSG MacPython-OSX $PYVER" \ --Description="wxPython $CHARTYPE runtime $VERSION for $W_MSG MacPython-OSX $PYVER" \
--NeedsAuthorization="YES" \ --NeedsAuthorization="YES" \
--Relocatable="NO" \ --Relocatable="NO" \
--InstallOnly="YES" \ --InstallOnly="YES" \
$INSTALLROOT \ $INSTALLROOT \
$RESOURCEDIR $RESOURCEDIR
mv wxPython${SHORTVER}-osx-$CHARTYPE-$KIND.pkg $DMGDIR/root 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.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! 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-$KIND.pkg The installer package. wxPython${SHORTVER}-osx-$CHARTYPE-$VERSION-$KIND
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 This is the main component of the wxPython runtime. It
image and drop them wherever you want. You do need to install the above includes the Python modules and extension modules, as well as
package before you can use any of the items below. 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.
Apps/wxPython Demo An application bundle version of the demo. wxPython-common-osx-$CHARTYPE-$VERSION-$KIND
(This has it's own copy of the sources within
the bundle.)
Apps/XRCed An application for editing wxPython resource 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.) files (XRC files.)
Apps/PyCrust An application that provides an interactive PyCrust An application that provides an interactive
Python shell and also namespace inspectors. Python shell and also namespace inspectors.
@@ -402,7 +520,7 @@ EOF
# wxDocs # wxDocs
if [ ! -e $TARBALLDIR/wxPython-docs-$VERSION.tar.gz ]; then 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! The wxPython-docs tarball was not found when building this disk image!
@@ -415,15 +533,15 @@ EOF
# Make an app to launch viewdocs.py # Make an app to launch viewdocs.py
$PYTHONW $PROGDIR/../buildapp.py \ $PYTHONW $PROGDIR/../buildapp.py \
--builddir=$DMGDIR/root/Docs \ --builddir=$DMGAPPS/Docs \
--name=wxDocsViewer \ --name=wxDocsViewer \
--mainprogram=$BUILDROOT/wxPython-$VERSION/docs/viewdocs.py \ --mainprogram=$BUILDROOT/wxPython-$VERSION/docs/viewdocs.py \
--iconfile=$PROGDIR/Info.icns \ --iconfile=$PROGDIR/Info.icns \
build 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 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 someplace else you have write access to) before you can run it, so it
@@ -434,7 +552,7 @@ EOF
fi fi
# license files, docs, etc. # license files, docs, etc.
pushd $DMGDIR/root/Docs pushd $DMGAPPS/Docs
cp -pR $SRCROOT/wxPython/licence . cp -pR $SRCROOT/wxPython/licence .
cp -pR $SRCROOT/wxPython/docs . cp -pR $SRCROOT/wxPython/docs .
rm -rf docs/bin rm -rf docs/bin
@@ -444,17 +562,17 @@ EOF
if [ ! -e $TARBALLDIR/wxPython-demo-$VERSION.tar.gz ]; then 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! The wxPython-demo tarball was not found when building this disk image!
EOF EOF
cp "$DMGDIR/root/Samples/Build ERROR.txt" $DMGDIR/root/Apps cp "$DMGAPPS/Samples/Build ERROR.txt" $DMGAPPS
else else
# Copy the demo and samples to the disk image from the tarball # 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 tar xzvf $TARBALLDIR/wxPython-demo-$VERSION.tar.gz
mv wxPython-$VERSION/* . mv wxPython-$VERSION/* .
rm -rf wxPython-$VERSION rm -rf wxPython-$VERSION
@@ -464,46 +582,47 @@ EOF
# Make an app bundle to run the demo # Make an app bundle to run the demo
$PYTHONW $PROGDIR/../buildapp.py \ $PYTHONW $PROGDIR/../buildapp.py \
--builddir=$DMGDIR/root/Apps \ --builddir=$DMGAPPS \
--name="wxPython Demo" \ --name="wxPython Demo" \
--mainprogram=$DMGDIR/root/Samples/demo/demo.pyw \ --mainprogram=$DMGAPPS/Samples/demo/demo.pyw \
--iconfile=$PROGDIR/RunDemo.icns \ --iconfile=$PROGDIR/RunDemo.icns \
build 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 fi
# Make an app bundle to launch PyCrust # Make an app bundle to launch PyCrust
$PYTHONW $PROGDIR/../buildapp.py \ $PYTHONW $PROGDIR/../buildapp.py \
--builddir=$DMGDIR/root/Apps \ --builddir=$DMGAPPS \
--name=PyCrust \ --name=PyCrust \
--mainprogram=$INSTALLROOT$BINPREFIX/pycrust.py \ --mainprogram=$INSTALLCOMMON$BINPREFIX/pycrust.py \
--iconfile=$PROGDIR/PieShell.icns \ --iconfile=$PROGDIR/PieShell.icns \
build build
# # and PyAlaMode # # and PyAlaMode
# $PYTHONW $PROGDIR/../buildapp.py \ # $PYTHONW $PROGDIR/../buildapp.py \
# --builddir=$DMGDIR/root \ # --builddir=$DMGAPPS \
# --name=PyAlaMode \ # --name=PyAlaMode \
# --mainprogram=$INSTALLROOT$BINPREFIX/pyalamode.py \ # --mainprogram=$INSTALLCOMMON$BINPREFIX/pyalamode.py \
# --iconfile=$PROGDIR/PieShell.icns \ # --iconfile=$PROGDIR/PieShell.icns \
# build # build
# Make an app to launch XRCed # Make an app to launch XRCed
$PYTHONW $PROGDIR/../buildapp.py \ $PYTHONW $PROGDIR/../buildapp.py \
--builddir=$DMGDIR/root/Apps \ --builddir=$DMGAPPS \
--name=XRCed \ --name=XRCed \
--mainprogram=$INSTALLROOT$BINPREFIX/xrced.py \ --mainprogram=$INSTALLCOMMON$BINPREFIX/xrced.py \
--iconfile=$PROGDIR/XRCed.icns \ --iconfile=$PROGDIR/XRCed.icns \
build build
# and then finally make a disk image containing the packages and etc. # and then finally make a disk image containing everything
$PROGDIR/../makedmg $DMGDIR/root $DMGDIR wxPython${SHORTVER}-osx-$CHARTYPE-$VERSION-$KIND-py$PYVER dmgname=wxPython${SHORTVER}-osx-docs-demos-$VERSION
$PROGDIR/../makedmg $DMGAPPS $DMGDIR $dmgname
echo Moving $DMGDIR/wxPython${SHORTVER}-osx-$CHARTYPE-$VERSION-$KIND-py$PYVER.dmg to $DESTDIR echo Moving $DMGDIR/$dmgname.dmg to $DESTDIR
mv $DMGDIR/wxPython${SHORTVER}-osx-$CHARTYPE-$VERSION-$KIND-py$PYVER.dmg $DESTDIR mv $DMGDIR/$dmgname.dmg $DESTDIR
fi fi

View File

@@ -189,6 +189,10 @@ Added (thanks to Kevin Ollivier!) wrappers for wx.WebKitCtrl for the
OSX build. Other platforms will raise an exception if you try to use OSX build. Other platforms will raise an exception if you try to use
it. it.
wxPython on OSX can now be built in Unicode mode, can support multiple
version installs, and comes with an uninstaller script.