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:
@@ -606,7 +606,7 @@ if debug:
|
||||
if FINAL:
|
||||
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
|
||||
|
||||
|
||||
|
196
wxPython/distrib/mac/uninstall_wxPython.py
Executable file
196
wxPython/distrib/mac/uninstall_wxPython.py
Executable 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()
|
@@ -31,6 +31,7 @@ function usage {
|
||||
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"
|
||||
@@ -61,6 +62,7 @@ skipinstall=no
|
||||
skipdmg=no
|
||||
skipclean=no
|
||||
inplace=no
|
||||
unicode=no
|
||||
|
||||
for flag in $*; do
|
||||
case ${flag} in
|
||||
@@ -71,6 +73,7 @@ for flag in $*; do
|
||||
skipdmg) skipdmg=yes ;;
|
||||
skipclean) skipclean=yes ;;
|
||||
inplace) inplace=yes; skiptar=yes ;;
|
||||
unicode) unicode=yes ;;
|
||||
|
||||
*) echo "Unknown flag \"${flag}\""
|
||||
usage
|
||||
@@ -86,9 +89,15 @@ 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
|
||||
|
||||
|
||||
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
|
||||
|
||||
WXROOT=`dirname $PWD`
|
||||
@@ -126,9 +135,15 @@ PROGDIR="`dirname \"$0\"`"
|
||||
TMPDIR=$PWD/_build_dmg
|
||||
|
||||
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
|
||||
DMGROOT=$DMGDIR/root
|
||||
DMGAPPS=$DMGDIR/apps
|
||||
|
||||
RESOURCEDIR=$PROGDIR/resources
|
||||
DESTDIR=$PWD/dist
|
||||
SRCROOT=$BUILDROOT/wxPython-src-$VERSION
|
||||
@@ -139,11 +154,13 @@ SRCROOT=$BUILDROOT/wxPython-src-$VERSION
|
||||
|
||||
mkdir -p $BUILDROOT
|
||||
mkdir -p $INSTALLROOT
|
||||
#mkdir -p $INSTALLDEVEL
|
||||
mkdir -p $INSTALLCOMMON
|
||||
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
|
||||
@@ -191,11 +208,8 @@ if [ $skipconfig != yes ]; then
|
||||
--enable-debug_flag \
|
||||
--enable-precomp=no \
|
||||
--enable-optimise \
|
||||
$UNICODEOPT
|
||||
|
||||
## --with-libjpeg=builtin \
|
||||
## --with-libpng=builtin \
|
||||
## --with-libtiff=builtin \
|
||||
## --with-zlib=builtin \
|
||||
|
||||
fi
|
||||
|
||||
@@ -205,8 +219,10 @@ if [ $skipbuild != yes ]; then
|
||||
# Make wxWidgets and some contribs
|
||||
|
||||
# For some reason Rez and DeRez have started locking up if run as root...
|
||||
if [ "$UID" = "0" ]; then
|
||||
chmod a+w lib
|
||||
su robind -c "make lib/libwx_macd-2.5.3.r"
|
||||
fi
|
||||
|
||||
make
|
||||
make -C contrib/src/gizmos
|
||||
@@ -216,6 +232,7 @@ if [ $skipbuild != yes ]; then
|
||||
# Build wxPython
|
||||
cd $WXDIR/wxPython
|
||||
$PYTHON setup.py \
|
||||
UNICODE=$PYUNICODEOPT \
|
||||
NO_SCRIPTS=1 \
|
||||
EP_ADD_OPTS=1 \
|
||||
WX_CONFIG="$WXBLD/wx-config --inplace" \
|
||||
@@ -242,6 +259,7 @@ if [ $skipinstall != yes ]; then
|
||||
# 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" \
|
||||
@@ -263,21 +281,34 @@ if [ $skipinstall != yes ]; then
|
||||
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
|
||||
mkdir -p $INSTALLROOT$BINPREFIX
|
||||
# install wxPython's tool scripts in COMMON too
|
||||
mkdir -p $INSTALLCOMMON$BINPREFIX
|
||||
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
|
||||
chown -R root:admin $INSTALLROOT
|
||||
chmod -R g+w $INSTALLROOT
|
||||
chown -R root:admin $INSTALLROOT $INSTALLCOMMON
|
||||
chmod -R g+w $INSTALLROOT $INSTALLCOMMON
|
||||
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
|
||||
|
||||
@@ -286,22 +317,27 @@ 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:
|
||||
|
||||
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`
|
||||
EOF
|
||||
@@ -324,7 +360,6 @@ 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
|
||||
@@ -340,41 +375,124 @@ EOF
|
||||
python $PROGDIR/../buildpkg.py \
|
||||
--Title=wxPython${SHORTVER}-osx-$CHARTYPE-$KIND \
|
||||
--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 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!
|
||||
|
||||
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.
|
||||
It contains the wxPython extension modules,
|
||||
wxMac dynamic libraries and headers, and some
|
||||
scripts for the command-line tools.
|
||||
wxPython${SHORTVER}-osx-$CHARTYPE-$VERSION-$KIND
|
||||
|
||||
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.
|
||||
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.
|
||||
|
||||
|
||||
Apps/wxPython Demo An application bundle version of the demo.
|
||||
(This has it's own copy of the sources within
|
||||
the bundle.)
|
||||
wxPython-common-osx-$CHARTYPE-$VERSION-$KIND
|
||||
|
||||
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.)
|
||||
|
||||
Apps/PyCrust An application that provides an interactive
|
||||
PyCrust An application that provides an interactive
|
||||
Python shell and also namespace inspectors.
|
||||
|
||||
|
||||
@@ -402,7 +520,7 @@ EOF
|
||||
|
||||
# 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!
|
||||
|
||||
@@ -415,15 +533,15 @@ EOF
|
||||
|
||||
# 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
|
||||
@@ -434,7 +552,7 @@ EOF
|
||||
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
|
||||
@@ -444,17 +562,17 @@ EOF
|
||||
|
||||
|
||||
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
|
||||
@@ -464,46 +582,47 @@ EOF
|
||||
|
||||
# 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 \
|
||||
--mainprogram=$INSTALLCOMMON$BINPREFIX/pycrust.py \
|
||||
--iconfile=$PROGDIR/PieShell.icns \
|
||||
build
|
||||
|
||||
# # and PyAlaMode
|
||||
# $PYTHONW $PROGDIR/../buildapp.py \
|
||||
# --builddir=$DMGDIR/root \
|
||||
# --builddir=$DMGAPPS \
|
||||
# --name=PyAlaMode \
|
||||
# --mainprogram=$INSTALLROOT$BINPREFIX/pyalamode.py \
|
||||
# --mainprogram=$INSTALLCOMMON$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 \
|
||||
--mainprogram=$INSTALLCOMMON$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
|
||||
# and then finally make a disk image containing everything
|
||||
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
|
||||
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
|
||||
|
||||
|
||||
|
@@ -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
|
||||
it.
|
||||
|
||||
wxPython on OSX can now be built in Unicode mode, can support multiple
|
||||
version installs, and comes with an uninstaller script.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user