]> git.saurik.com Git - wxWidgets.git/commitdiff
wxPython on OSX can now be built in Unicode mode, can support multiple
authorRobin Dunn <robin@alldunn.com>
Fri, 22 Oct 2004 02:50:05 +0000 (02:50 +0000)
committerRobin Dunn <robin@alldunn.com>
Fri, 22 Oct 2004 02:50:05 +0000 (02:50 +0000)
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

wxPython/config.py
wxPython/distrib/mac/uninstall_wxPython.py [new file with mode: 0755]
wxPython/distrib/mac/wxPythonOSX/build
wxPython/docs/CHANGES.txt

index b76666bcaf3b73b566cc4bf22a49bf62da46a9f9..4089667e0a96d5f3feceffa430cda026b90b5b6a 100644 (file)
@@ -606,7 +606,7 @@ if debug:
 if FINAL:
     HYBRID = 0
 
 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
 
 
     raise SystemExit, "UNICODE mode not currently supported on this WXPORT: "+WXPORT
 
 
diff --git a/wxPython/distrib/mac/uninstall_wxPython.py b/wxPython/distrib/mac/uninstall_wxPython.py
new file mode 100755 (executable)
index 0000000..80373c2
--- /dev/null
@@ -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()
index a28104cbbb6cb3064c3fcbd4edf30e42b09dc2cc..53404d8e2b58e24f2ee767d19812a4640317a666 100755 (executable)
@@ -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 "   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 "   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
 skipdmg=no
 skipclean=no
 inplace=no
+unicode=no
 
 for flag in $*; do
     case ${flag} in
 
 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                   ;;
         skipdmg)     skipdmg=yes                                ;;
        skipclean)   skipclean=yes                              ;;
        inplace)     inplace=yes; skiptar=yes                   ;;
+       unicode)     unicode=yes                                ;;
 
        *)  echo "Unknown flag \"${flag}\""
            usage
 
        *)  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`
 
 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
 
 
 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`
 BINPREFIX=/usr/local/bin
 
 WXROOT=`dirname $PWD`
@@ -126,9 +135,15 @@ PROGDIR="`dirname \"$0\"`"
 TMPDIR=$PWD/_build_dmg
 
 BUILDROOT=$TMPDIR/build
 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
 DMGDIR=$TMPDIR/dmg
+DMGROOT=$DMGDIR/root
+DMGAPPS=$DMGDIR/apps
+
 RESOURCEDIR=$PROGDIR/resources
 DESTDIR=$PWD/dist
 SRCROOT=$BUILDROOT/wxPython-src-$VERSION
 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 $BUILDROOT
 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 $DMGDIR/root/Docs
-mkdir -p $DMGDIR/root/Samples
+mkdir -p $DMGROOT
+mkdir -p $DMGAPPS/Docs
+mkdir -p $DMGAPPS/Samples
 
 
 pushd $BUILDROOT
 
 
 pushd $BUILDROOT
@@ -191,11 +208,8 @@ if [ $skipconfig != yes ]; then
        --enable-debug_flag \
        --enable-precomp=no \
        --enable-optimise \
        --enable-debug_flag \
        --enable-precomp=no \
        --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
 
     # For some reason Rez and DeRez have started locking up if run as root...
     # 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"
+    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
 
     make
     make -C contrib/src/gizmos
@@ -216,6 +232,7 @@ if [ $skipbuild != yes ]; then
     # Build wxPython
     cd $WXDIR/wxPython
     $PYTHON setup.py \
     # Build wxPython
     cd $WXDIR/wxPython
     $PYTHON setup.py \
+       UNICODE=$PYUNICODEOPT \
        NO_SCRIPTS=1 \
        EP_ADD_OPTS=1 \
        WX_CONFIG="$WXBLD/wx-config --inplace" \
        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 \
     # 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" \
        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
 
        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
     cd $WXDIR/wxPython/scripts
-    python$PYVER CreateMacScripts.py $INSTALLROOT $BINPREFIX
+    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
+    # Set premissions for files in $INSTALLROOT and $INSTALLCOMMON
     if [ "$UID" = "0" ]; then
     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
 
     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
 if [ $skipdmg != yes ]; then
 
 # 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
 
     # 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!
 
     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
 
 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
 
 $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
 # and all of the wxPython pacakge should be group writable
 chgrp -R admin \$2$SITEPACKAGES/$PKGDIR
 chmod -R g+w \$2$SITEPACKAGES/$PKGDIR
@@ -333,48 +368,131 @@ exit 0
 EOF
     chmod +x $RESOURCEDIR/postflight
 
 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 \
 
     # 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" \
+       --Description="wxPython $CHARTYPE runtime $VERSION for $W_MSG MacPython-OSX $PYVER" \
        --NeedsAuthorization="YES" \
        --Relocatable="NO" \
        --InstallOnly="YES" \
        $INSTALLROOT \
        $RESOURCEDIR
 
        --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
 
 
 
 
-    # Make a README.txt to go on the disk image
-    cat > "$DMGDIR/root/README 1st.txt" <<EOF
+    #-----------------------------------------------
+    # 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!
 
 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 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${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-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!
 
 
-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.
+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.)
 
                         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
     if [ ! -e $TARBALLDIR/wxPython-docs-$VERSION.tar.gz ]; then
 
     # 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!
 
 
 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 \
 
         # 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
 
            --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
 
 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.
     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
     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
 
 
     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
 
 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
 
     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
        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 \
 
         # Make an app bundle to run the demo
        $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 \
            build
            --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 \
     fi
 
 
     # Make an app bundle to launch PyCrust
     $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 \
        build
 
        --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
+#      # 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 \
 
     # Make an app to launch XRCed
     $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 \
        build
 
 
 
        --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
 
 
 fi
 
 
index c3ecc31bfd16ef25b9ab34f8387cfe600c36c03b..ff9ea43d2347b5540798e19fe34d7388c70caaec 100644 (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
 it. 
 
 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.
+
+