]> git.saurik.com Git - wxWidgets.git/blobdiff - wxPython/distrib/mac/wxPythonOSX/build
wxPython on OSX can now be built in Unicode mode, can support multiple
[wxWidgets.git] / wxPython / distrib / mac / wxPythonOSX / build
index 58456b12e3b0cb17d3b51098274807a2b2569a13..53404d8e2b58e24f2ee767d19812a4640317a666 100755 (executable)
@@ -10,6 +10,13 @@ if [ ! -d wxPython -o ! -e ${spectemplate} ]; then
     exit 1
 fi
 
     exit 1
 fi
 
+if [ "$UID" != "0" ]; then
+    echo "-------------------------------------------------------"
+    echo " WARNING:  will be unable to change ownership of files"
+    echo " unless this script is run as root or via sudo"
+    echo "-------------------------------------------------------"
+fi
+
 #----------------------------------------------------------------------
 # Check Parameters
 
 #----------------------------------------------------------------------
 # Check Parameters
 
@@ -22,7 +29,9 @@ function usage {
     echo ""
     echo "optional command flags:"
     echo "   skiptar        Don't unpack the tarball"
     echo ""
     echo "optional command flags:"
     echo "   skiptar        Don't unpack the tarball"
-    echo "   use_cvs        Use the CVS workspace instead of a tarfile"
+    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"
@@ -46,16 +55,25 @@ esac
 PYTHONW=${PYTHON}w
 shift
 
 PYTHONW=${PYTHON}w
 shift
 
+skiptar=no
+skipconfig=no
+skipbuild=no
+skipinstall=no
+skipdmg=no
+skipclean=no
+inplace=no
+unicode=no
 
 for flag in $*; do
     case ${flag} in
 
 for flag in $*; do
     case ${flag} in
-       skiptar)     skiptar=1                   ;;
-       use_cvs)     skiptar=1; use_cvs=1        ;;
-       skipconfig)  skipconfig=1; skiptar=1     ;;
-       skipbuild)   skipbuild=1; skipconfig=1; skiptar=1 ;;
-       skipinstall) skipinstall=1               ;;
-        skipdmg)     skipdmg=1                   ;;
-       skipclean)   skipclean=1                 ;;
+       skiptar)     skiptar=yes                                ;;
+       skipconfig)  skipconfig=yes; skiptar=yes                ;;
+       skipbuild)   skipbuild=yes; skipconfig=yes; skiptar=yes ;;
+       skipinstall) skipinstall=yes                            ;;
+        skipdmg)     skipdmg=yes                                ;;
+       skipclean)   skipclean=yes                              ;;
+       inplace)     inplace=yes; skiptar=yes                   ;;
+       unicode)     unicode=yes                                ;;
 
        *)  echo "Unknown flag \"${flag}\""
            usage
 
        *)  echo "Unknown flag \"${flag}\""
            usage
@@ -69,24 +87,66 @@ PYVER=`$PYTHON -c "import sys; print sys.version[:3]"`
 PYPREFIX=`$PYTHON -c "import sys; print sys.exec_prefix"`
 PYLIB=$PYPREFIX/lib/python$PYVER
 SITEPACKAGES=$PYLIB/site-packages
 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`
+
+if [ $unicode == yes ]; then
+    CHARTYPE=unicode
+    UNICODEOPT=--enable-unicode
+    PYUNICODEOPT=1
+else
+    CHARTYPE=ansi
+    UNICODEOPT=--disable-unicode
+    PYUNICODEOPT=0
+fi
 
 
-TARBALLDIR=/stuff/Development/wxPython/dist/$VERSION
-TARBALL=$TARBALLDIR/wxPythonSrc-$VERSION.tar.gz
 
 
-PREFIX=/usr/lib/wxPython-$VERSION
-BINPREFIX=/usr/bin
+if [ -z "$TARBALLDIR" ]; then
+    # this is a spot on my fileserver where the tarballs go, adjust
+    # as needed for where you put the wxPython tarball, or set
+    # TARBALLDIR before invoking this script...
+    TARBALLDIR=/stuff/Development/wxPython/dist/$VERSION
+fi
+TARBALL=$TARBALLDIR/wxPython-src-$VERSION.tar.gz
+
+if [ ! -e $TARBALLDIR/wxPython-demo-$VERSION.tar.gz ]; then 
+    echo "-------------------------------------------------------"
+    echo " WARNING:  Demo tarball not found, will skip building "
+    echo "           the Demo app bundle and etc."
+    echo " $TARBALLDIR/wxPython-demo-$VERSION.tar.gz"
+    echo "-------------------------------------------------------"
+fi
+
+if [ ! -e $TARBALLDIR/wxPython-docs-$VERSION.tar.gz ]; then
+    echo "-------------------------------------------------------"
+    echo " WARNING:  Docs tarball not found, will skip building "
+    echo "           the the wxDocsViewer app bundle and etc."
+    echo " $TARBALLDIR/wxPython-docs-$VERSION.tar.gz"
+    echo "-------------------------------------------------------"
+fi
+
+
+
+
+PREFIX=/usr/local/lib/wxPython-$CHARTYPE-$VERSION
+BINPREFIX=/usr/local/bin
 
 WXROOT=`dirname $PWD`
 PROGDIR="`dirname \"$0\"`"
 TMPDIR=$PWD/_build_dmg
 
 BUILDROOT=$TMPDIR/build
 
 WXROOT=`dirname $PWD`
 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
 DMGDIR=$TMPDIR/dmg
+DMGROOT=$DMGDIR/root
+DMGAPPS=$DMGDIR/apps
+
 RESOURCEDIR=$PROGDIR/resources
 DESTDIR=$PWD/dist
 RESOURCEDIR=$PROGDIR/resources
 DESTDIR=$PWD/dist
-SRCROOT=$BUILDROOT/wxPythonSrc-$VERSION
+SRCROOT=$BUILDROOT/wxPython-src-$VERSION
 
 
 #----------------------------------------------------------------------
 
 
 #----------------------------------------------------------------------
@@ -94,11 +154,13 @@ SRCROOT=$BUILDROOT/wxPythonSrc-$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
@@ -107,120 +169,101 @@ pushd $BUILDROOT
 #----------------------------------------------------------------------
 # Unpack the tarball
 
 #----------------------------------------------------------------------
 # Unpack the tarball
 
-if [ -z "$skiptar" ]; then
+if [ $skiptar != yes ]; then
     echo Unarchiving tarball...
     tar xzf $TARBALL
 fi
 
     echo Unarchiving tarball...
     tar xzf $TARBALL
 fi
 
-if [ "$use_cvs" = 1 ]; then
-    # copy the cvs workspace, except for build dirs
-
-    mkdir -p wxPythonSrc-$VERSION
-
-    echo Finding updated files...
-    if [ -e .last_copy ]; then
-       FEXPR="-cnewer .last_copy"
-    fi
-    MEASURE=$WXROOT//
-    find $WXROOT $FEXPR -print \
-       | grep -v $WXROOT/bld \
-       | grep -v wxPython/build \
-       | grep -v wxPython/_build \
-       | grep -v CVS \
-       | grep -v .pyc \
-       | cut -b ${#MEASURE}- > filelist
-
-    for x in `cat filelist`; do
-       if [ -d "$WXROOT/$x" ]; then
-           mkdir -p "wxPythonSrc-$VERSION/$x"
-       else
-           echo $x
-           cp -p "$WXROOT/$x" "wxPythonSrc-$VERSION/$x"
-       fi
-    done
-
-    touch .last_copy
+if [ $inplace = no ]; then
+    # make a build dir and cd to it.
+    cd wxPython-src-$VERSION
+    WXDIR=`pwd`
+    mkdir -p $WXDIR/bld
+    cd $WXDIR/bld
+    WXBLD=$WXDIR/bld
+else
+    # If building "inplace" then our build dir will be BUILDROOT,
+    # adjust the variables to find things that way.
+    WXDIR=$WXROOT
+    SRCROOT=$WXROOT
+    WXBLD=$BUILDROOT
 fi
 
 fi
 
-
-cd wxPythonSrc-$VERSION
-WXDIR=`pwd`
-mkdir -p $WXDIR/bld
-cd $WXDIR/bld
+echo "Using source tree: $WXDIR"
+echo "Using build dir:   $WXBLD" 
 
 #----------------------------------------------------------------------
 
 
 # Configure wxWidgets
 
 #----------------------------------------------------------------------
 
 
 # Configure wxWidgets
-if [ -z "$skipconfig" ]; then
-    ../configure \
+if [ $skipconfig != yes ]; then
+    $WXDIR/configure \
        --prefix=$PREFIX \
        --with-mac \
        --prefix=$PREFIX \
        --with-mac \
-       --disable-monolithic \
+       --enable-monolithic \
        --with-opengl \
        --enable-sound \
        --enable-display \
        --enable-geometry \
        --with-opengl \
        --enable-sound \
        --enable-display \
        --enable-geometry \
+       --enable-debug_flag \
        --enable-precomp=no \
        --enable-precomp=no \
-       --enable-debug_flag
+       --enable-optimise \
+       $UNICODEOPT
 
 
-##     --enable-optimise \
-##     --with-libjpeg=builtin \
-##     --with-libpng=builtin \
-##     --with-libtiff=builtin \
-##     --with-zlib=builtin \
 
 fi
 
 # Build wxWidgets and wxPython
 
 fi
 
 # Build wxWidgets and wxPython
-if [ -z "$skipbuild" ]; then
+if [ $skipbuild != yes ]; then
 
     # Make wxWidgets and some contribs
 
     # Make wxWidgets and some contribs
-    make 
-    make -C contrib/src/gizmos 
-    make -C contrib/src/ogl CXXFLAGS="-DwxUSE_DEPRECATED=0"
-    make -C contrib/src/stc
-    make -C contrib/src/xrc
 
 
-    if [ ! -e $WXDIR/include/wx/gizmos ]; then
-       # Make some links so the wxPython build can find all the headers it needs
-       pushd $WXDIR/include/wx
-       ln -s ../../contrib/include/wx/* .
-       popd
+    # 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
 
     fi
 
+    make
+    make -C contrib/src/gizmos
+    make -C contrib/src/ogl CXXFLAGS="-DwxUSE_DEPRECATED=0"
+    make -C contrib/src/stc
+
     # Build wxPython
     cd $WXDIR/wxPython
     $PYTHON setup.py \
     # Build wxPython
     cd $WXDIR/wxPython
     $PYTHON setup.py \
+       UNICODE=$PYUNICODEOPT \
        NO_SCRIPTS=1 \
        NO_SCRIPTS=1 \
-       WX_CONFIG="$WXDIR/bld/wx-config --prefix=$WXDIR --exec-prefix=$WXDIR/bld" \
+       EP_ADD_OPTS=1 \
+       WX_CONFIG="$WXBLD/wx-config --inplace" \
+       BUILD_BASE=$WXBLD/wxPython \
        build
        build
-
-
-    # Build wxrc (XRC resource tool) 
-    cd $WXDIR/bld/contrib/utils/wxrc
-    make 
-    strip wxrc
-
 fi
 
 #----------------------------------------------------------------------
 
 fi
 
 #----------------------------------------------------------------------
 
-if [ -z "$skipinstall" ]; then
+if [ $skipinstall != yes ]; then
     # Install wxWidgets
     # Install wxWidgets
-    cd $WXDIR/bld
+    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/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 -C contrib/src/xrc prefix=$INSTALLROOT$PREFIX install
 
 
 
 
+    # relink wx-config with a relative link
+    cd $INSTALLROOT$PREFIX/bin
+    rm wx-config
+    ln -s ../lib/wx/config/* wx-config
+
     # and wxPython
     cd $WXDIR/wxPython
     $PYTHON setup.py \
     # and wxPython
     cd $WXDIR/wxPython
     $PYTHON setup.py \
+       UNICODE=$PYUNICODEOPT \
        NO_SCRIPTS=1 \
        NO_SCRIPTS=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" \
+       BUILD_BASE=$WXBLD/wxPython \
        install \
        --root=$INSTALLROOT
 
        install \
        --root=$INSTALLROOT
 
@@ -229,58 +272,72 @@ if [ -z "$skipinstall" ]; then
     # /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
     # /Library/Python/$PYVER so we need to move the files so they are
     # installed in the physical location, not the virtual one.
     if [ "$KIND" = "panther" ]; then
+       if [ -e $INSTALLROOT/Library/Python/$PYVER ]; then
+           rm -r $INSTALLROOT/Library/Python/$PYVER
+       fi          
        mkdir -p $INSTALLROOT/Library/Python/$PYVER
        mv $INSTALLROOT/$SITEPACKAGES/* $INSTALLROOT/Library/Python/$PYVER
        rm -r $INSTALLROOT/System
        SITEPACKAGES=/Library/Python/$PYVER
     fi
 
        mkdir -p $INSTALLROOT/Library/Python/$PYVER
        mv $INSTALLROOT/$SITEPACKAGES/* $INSTALLROOT/Library/Python/$PYVER
        rm -r $INSTALLROOT/System
        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
 
 
-    # Install wxrc
-    cp $WXDIR/bld/contrib/utils/wxrc/wxrc $INSTALLROOT$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
 
 
-#     # install the wxPython headers
-#     cd $WXDIR/wxPython
-#     cp -R include $INSTALLROOT$PREFIX
-#     mkdir -p      $INSTALLROOT$PREFIX/include/wx/wxPython/i_files
-#     cp src/*.i    $INSTALLROOT$PREFIX/include/wx/wxPython/i_files
-
+    # Set premissions for files in $INSTALLROOT and $INSTALLCOMMON
+    if [ "$UID" = "0" ]; then
+       chown -R root:admin $INSTALLROOT $INSTALLCOMMON
+       chmod -R g+w        $INSTALLROOT $INSTALLCOMMON
+    fi
+fi
 
 
-    # Set premissions for files in $INSTALLROOT 
-    chown -R root:admin $INSTALLROOT
-    chmod -R g+w        $INSTALLROOT
+if [ "$KIND" = "panther" ]; then
+    SITEPACKAGES=/Library/Python/$PYVER
 fi
 fi
+PKGDIR=`cat $INSTALLCOMMON$SITEPACKAGES/wx.pth`
 
 popd
 
 #----------------------------------------------------------------------
 
 # Make the Installer packages and disk image
 
 popd
 
 #----------------------------------------------------------------------
 
 # Make the Installer packages and disk image
-if [ -z "$skipdmg" ]; then
-
-    # Remove the .pyc/.pyo files they just take up space and can be recreated
-    # during the install.
-    $PYTHON $PROGDIR/../zappycfiles.py $INSTALLROOT
+if [ $skipdmg != yes ]; then
 
 
+    #-----------------------------------------------
+    # 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:
+
+    * 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 must install onto your current boot disk, even though 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
@@ -291,6 +348,7 @@ EOF
 # Cleanup any old install of the wxPython package
 rm -rf \$2$SITEPACKAGES/wxPython
 rm -rf \$2$SITEPACKAGES/wx
 # Cleanup any old install of the wxPython package
 rm -rf \$2$SITEPACKAGES/wxPython
 rm -rf \$2$SITEPACKAGES/wx
+rm -rf \$2$SITEPACKAGES/$PKGDIR
 exit 0
 EOF
     chmod +x $RESOURCEDIR/preflight
 exit 0
 EOF
     chmod +x $RESOURCEDIR/preflight
@@ -299,106 +357,191 @@ EOF
     cat > $RESOURCEDIR/postflight <<EOF
 #!/bin/sh -e
 # Compile the .py files in the wxPython pacakge
     cat > $RESOURCEDIR/postflight <<EOF
 #!/bin/sh -e
 # Compile the .py files in the wxPython pacakge
-$PYTHON \$2$PYLIB/compileall.py \$2$SITEPACKAGES/wxPython
-$PYTHON \$2$PYLIB/compileall.py \$2$SITEPACKAGES/wx
-$PYTHON -O \$2$PYLIB/compileall.py \$2$SITEPACKAGES/wxPython
-$PYTHON -O \$2$PYLIB/compileall.py \$2$SITEPACKAGES/wx
-
+$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
 
 # and all of the wxPython pacakge should be group writable
-chgrp -R admin \$2$SITEPACKAGES/wxPython
-chmod -R g+w \$2$SITEPACKAGES/wxPython
-chgrp -R admin \$2$SITEPACKAGES/wx
-chmod -R g+w \$2$SITEPACKAGES/wx
+chgrp -R admin \$2$SITEPACKAGES/$PKGDIR
+chmod -R g+w \$2$SITEPACKAGES/$PKGDIR
 
 exit 0
 EOF
     chmod +x $RESOURCEDIR/postflight
 
 
 exit 0
 EOF
     chmod +x $RESOURCEDIR/postflight
 
-
+    
 
     # Build the main Installer Package...
 
     # Build the main Installer Package...
-    rm -rf wxPythonOSX-$KIND.pkg
+    rm -rf wxPython${SHORTVER}-osx-$CHARTYPE-$KIND.pkg
     python $PROGDIR/../buildpkg.py \
     python $PROGDIR/../buildpkg.py \
-       --Title=wxPythonOSX-$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" \
        --Relocatable="NO" \
        --InstallOnly="YES" \
        $INSTALLROOT \
        $RESOURCEDIR
 
        --NeedsAuthorization="YES" \
        --Relocatable="NO" \
        --InstallOnly="YES" \
        $INSTALLROOT \
        $RESOURCEDIR
 
-    mv wxPythonOSX-$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-$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-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.
+#---------------------------------------------------------------------------
 
 
-   wxPython-$KIND.pkg   The installer package.  It contains the wxPython 
-                        extension modules, wxMac dynamic libraries and
-                        headers, and some scripts for the command-line 
-                        tools.  
+    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 whereever 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.
 
 
 
-   Docs/wxDocsViewer    An application that allows you to view the 
+   Docs/wxDocsViewer    An application that allows you to view the
                         wxWidgets documentation.
 
    Docs/licence         License files.
 
                         wxWidgets documentation.
 
    Docs/licence         License files.
 
-   Docs/other           A few readmes, change log, etc.  The full 
-                        documentation is downloadable separately. 
+   Docs/other           A few readmes, change log, etc.
 
 
 
 
-   Samples/samples      Several small sample applications that 
+   Samples/samples      Several small sample applications that
                         demonstrate how to use wxPython.
 
                         demonstrate how to use wxPython.
 
-   Samples/demo         A copy of the wxPython demo source code, 
+   Samples/demo         A copy of the wxPython demo source code,
                         just open the folder and run demo.pyw.
 
 Happy Hacking!
 EOF
 
                         just open the folder and run demo.pyw.
 
 Happy Hacking!
 EOF
 
-#   PyAlaMode            An extension of PyCrust that includes source 
+#   PyAlaMode            An extension of PyCrust that includes source
 #                        file editing capabilities.
 
 
     # wxDocs
 #                        file editing capabilities.
 
 
     # wxDocs
-    pushd $BUILDROOT
-    tar xzvf $TARBALLDIR/wxPythonDocs-$VERSION.tar.gz
-    popd
+    if [ ! -e $TARBALLDIR/wxPython-docs-$VERSION.tar.gz ]; then
+       cat > "$DMGAPPS/Docs/Build ERROR.txt" <<EOF
 
 
-    # Make an app to launch viewdocs.py
-    $PYTHONW $PROGDIR/../buildapp.py \
-       --builddir=$DMGDIR/root/Docs \
-       --name=wxDocsViewer \
-       --mainprogram=$BUILDROOT/wxPython-$VERSION/docs/viewdocs.py \
-       --iconfile=$PROGDIR/Info.icns \
-       build
+The wxPython-docs tarball was not found when building this disk image!
+
+EOF
+
+    else
+       pushd $BUILDROOT
+       tar xzvf $TARBALLDIR/wxPython-docs-$VERSION.tar.gz
+       popd
 
 
-    cp $BUILDROOT/wxPython-$VERSION/docs/*.zip $DMGDIR/root/Docs/wxDocsViewer.app/Contents/Resources
+        # Make an app to launch viewdocs.py
+       $PYTHONW $PROGDIR/../buildapp.py \
+           --builddir=$DMGAPPS/Docs \
+           --name=wxDocsViewer \
+           --mainprogram=$BUILDROOT/wxPython-$VERSION/docs/viewdocs.py \
+           --iconfile=$PROGDIR/Info.icns \
+           build
 
 
-    cat > "$DMGDIR/root/Docs/README 1st.txt" <<EOF
+       cp $BUILDROOT/wxPython-$VERSION/docs/*.zip $DMGAPPS/Docs/wxDocsViewer.app/Contents/Resources
+
+       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
@@ -406,69 +549,85 @@ can cache some indexes within its bundle.
 
 EOF
 
 
 EOF
 
+    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/docs      .
     rm -rf docs/bin
     rm -rf docs/xml-raw
     mv docs other
     popd
     cp -pR $SRCROOT/wxPython/licence   .
     cp -pR $SRCROOT/wxPython/docs      .
     rm -rf docs/bin
     rm -rf docs/xml-raw
     mv docs other
     popd
-    
-    # Copy the demo and samples to the disk image from the tarball
-    pushd $DMGDIR/root/Samples
-    tar xzvf $TARBALLDIR/wxPythonDemo-$VERSION.tar.gz
-    mv wxPython-$VERSION/* .
-    rm -rf wxPython-$VERSION
-    rm demo/b demo/.setup.sh
-    mv demo/demo.py demo/demo.pyw
-    popd
-    
+
+
+    if [ ! -e $TARBALLDIR/wxPython-demo-$VERSION.tar.gz ]; then
+       cat > "$DMGAPPS/Samples/Build ERROR.txt" <<EOF
+
+The wxPython-demo tarball was not found when building this disk image!
+
+EOF
+       cp "$DMGAPPS/Samples/Build ERROR.txt" $DMGAPPS
+
+    else
+
+        # Copy the demo and samples to the disk image from the tarball
+       pushd $DMGAPPS/Samples
+       tar xzvf $TARBALLDIR/wxPython-demo-$VERSION.tar.gz
+       mv wxPython-$VERSION/* .
+       rm -rf wxPython-$VERSION
+       rm demo/b demo/.setup.sh
+       mv demo/demo.py demo/demo.pyw
+       popd
+
+        # Make an app bundle to run the demo
+       $PYTHONW $PROGDIR/../buildapp.py \
+           --builddir=$DMGAPPS \
+           --name="wxPython Demo" \
+           --mainprogram=$DMGAPPS/Samples/demo/demo.pyw \
+           --iconfile=$PROGDIR/RunDemo.icns \
+           build
+       cp -pR $DMGAPPS/Samples/demo/* "$DMGAPPS/wxPython Demo.app/Contents/Resources"
+    fi
+
 
     # Make an app bundle to launch PyCrust
     $PYTHONW $PROGDIR/../buildapp.py \
 
     # 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
 
-    # Make an app bundle to run the demo
-    $PYTHONW $PROGDIR/../buildapp.py \
-       --builddir=$DMGDIR/root/Apps \
-       --name="wxPython Demo" \
-       --mainprogram=$DMGDIR/root/Samples/demo/demo.pyw \
-       --iconfile=$PROGDIR/RunDemo.icns \
-       build
-    cp -pR $DMGDIR/root/Samples/demo/* "$DMGDIR/root/Apps/wxPython Demo.app/Contents/Resources"
-    
 
 
-    # and then finally make a disk image containing the packages and etc.
-    $PROGDIR/../makedmg $DMGDIR/root $DMGDIR wxPythonOSX-$VERSION-$KIND-Py$PYVER
 
 
-    echo Moving $DMGDIR/wxPythonOSX-$VERSION-$KIND-Py$PYVER.dmg to $DESTDIR
-    mv $DMGDIR/wxPythonOSX-$VERSION-$KIND-Py$PYVER.dmg  $DESTDIR
+    # and then finally make a disk image containing everything
+    dmgname=wxPython${SHORTVER}-osx-docs-demos-$VERSION
+    $PROGDIR/../makedmg $DMGAPPS $DMGDIR $dmgname
+
+    echo Moving $DMGDIR/$dmgname.dmg to $DESTDIR
+    mv $DMGDIR/$dmgname.dmg  $DESTDIR
 fi
 
 
 # Cleanup build/install dirs
 fi
 
 
 # Cleanup build/install dirs
-if [ -z "$skipclean" ]; then
+if [ $skipclean != yes ]; then
     echo "Cleaning up..."
     rm -rf $TMPDIR
 else
     echo "Cleaning up..."
     rm -rf $TMPDIR
 else