#!/bin/sh -e
#----------------------------------------------------------------------
# Build wxMac and wxPythonOSX from the tarball and then make an
# Installer package out of it.

spectemplate=distrib/wxPythonFull.spec.in

if [ ! -d wxPython -o ! -e ${spectemplate} ]; then
    echo "Please run this script from the root wxPython directory."
    exit 1
fi

#----------------------------------------------------------------------
# Check Parameters

function usage {
    echo ""
    echo "Usage: $0  [apple|local]  [command flags...]"
    echo ""
    echo "   panther        Build for Apple's python in /usr/bin, such as on Panther"
    echo "   jaguar         Build for a python in /usr/local/bin, such as on Jaguar"
    echo ""
    echo "optional command flags:"
    echo "   skiptar        Don't unpack the tarball"
    echo "   use_cvs        Use the CVS workspace instead of a tarfile"
    echo "   skipconfig     Don't run configure"
    echo "   skipbuild      Don't build wxWindows or wxPython"
    echo "   skipinstall    Don't do the installation step"
    echo "   skipdmg        Don't make the package or diskimage"
    echo "   skipclean      Don't do the cleanup at the end"
    echo ""
}


if [ $# -lt 1 ]; then
    usage
    exit 1
fi

KIND=$1
case $KIND in
    panther)    PYTHON=/usr/bin/python ;;
    jaguar)     PYTHON=/usr/local/bin/python ;;
    *)          usage; exit 1 ;;
esac
PYTHONW=${PYTHON}w
shift


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                 ;;

	*)  echo "Unknown flag \"${flag}\""
	    usage
	    exit 1
    esac
done


VERSION=`$PYTHON -c "import setup;print setup.VERSION"`
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

SRCDIR=/stuff/Development/wxPython/dist/$VERSION
TARBALL=$SRCDIR/wxPythonSrc-$VERSION.tar.gz

PREFIX=/usr/lib/wxPython-$VERSION
BINPREFIX=/usr/bin

WXROOT=`dirname $PWD`
PROGDIR="`dirname \"$0\"`"
TMPDIR=$PWD/_build_dmg

BUILDROOT=$TMPDIR/build
INSTALLROOT=$TMPDIR/install
INSTALLDEVEL=$TMPDIR/install-devel
DMGDIR=$TMPDIR/dmg
RESOURCEDIR=$PROGDIR/resources
DESTDIR=$PWD/dist



#----------------------------------------------------------------------
# Setup builddirs

mkdir -p $BUILDROOT
mkdir -p $INSTALLROOT
#mkdir -p $INSTALLDEVEL
rm -rf $DMGDIR
mkdir -p $DMGDIR/root

pushd $BUILDROOT


#----------------------------------------------------------------------
# Unpack the tarball

if [ -z "$skiptar" ]; then
    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
fi


cd wxPythonSrc-$VERSION
WXDIR=`pwd`
mkdir -p $WXDIR/bld
cd $WXDIR/bld

#----------------------------------------------------------------------


# Configure wxWindows
if [ -z "$skipconfig" ]; then
    ../configure \
	--prefix=$PREFIX \
	--with-mac \
	--disable-monolithic \
	--with-opengl \
	--enable-geometry \
	--enable-optimise \
	--enable-precomp=no \
	\
	--with-libjpeg=builtin \
	--with-libpng=builtin \
	--with-libtiff=builtin \
	--with-zlib=builtin \
	\
	--enable-debug_flag

fi

# Build wxWindows and wxPython
if [ -z "$skipbuild" ]; then

    # Make wxWindows 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
    fi

    # Build wxPython
    cd $WXDIR/wxPython
    $PYTHON setup.py \
	NO_SCRIPTS=1 \
	WX_CONFIG="$WXDIR/bld/wx-config --prefix=$WXDIR --exec-prefix=$WXDIR/bld" \
	build


    # Build wxrc (XRC resource tool) 
    cd $WXDIR/bld/contrib/utils/wxrc
    make 
    strip wxrc

fi

#----------------------------------------------------------------------

if [ -z "$skipinstall" ]; then
    # Install wxWindows
    cd $WXDIR/bld
    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


    # and wxPython
    cd $WXDIR/wxPython
    $PYTHON setup.py \
	NO_SCRIPTS=1 \
	WX_CONFIG="$INSTALLROOT/$PREFIX/bin/wx-config --prefix=$INSTALLROOT/$PREFIX" \
	install \
	--root=$INSTALLROOT


    # Apple's Python (on Panther) sym-links the site-packages dir to
    # /Library/Python/$PYVER so we need to move the files so they are
    # installed in the physical location, not the virtual one.
    if [ "$KIND" = "panther" ]; then
	mkdir -p $INSTALLROOT/Library/Python/$PYVER
	mv $INSTALLROOT/$SITEPACKAGES/* $INSTALLROOT/Library/Python/$PYVER
	rm -r $INSTALLROOT/System
	SITEPACKAGES=/Library/Python/$PYVER
    fi


    # install wxPython's tool scripts
    mkdir -p $INSTALLROOT$BINPREFIX
    cd $WXDIR/wxPython/scripts
    python$PYVER CreateMacScripts.py $INSTALLROOT $BINPREFIX


    # Install wxrc
    cp $WXDIR/bld/contrib/utils/wxrc/wxrc $INSTALLROOT$BINPREFIX


    # 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 
    chown -R root:admin $INSTALLROOT
    chmod -R g+w        $INSTALLROOT
fi

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


    # 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.

You must install onto your current boot disk, even though the installer does not enforce this, otherwise things will not work.

Build date:   `date`
EOF

    # make the preflight script
    cat > $RESOURCEDIR/preflight <<EOF
#!/bin/sh
# Cleanup any old install of the wxPython package
rm -rf \$2$SITEPACKAGES/wxPython
rm -rf \$2$SITEPACKAGES/wx
exit 0
EOF
    chmod +x $RESOURCEDIR/preflight

    # make the postflight script
    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


# 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

exit 0
EOF
    chmod +x $RESOURCEDIR/postflight



    # Build the main Installer Package...
    rm -rf wxPythonOSX-$KIND.pkg
    python $PROGDIR/../buildpkg.py \
	--Title=wxPythonOSX-$KIND \
	--Version=$VERSION \
	--Description="wxPython $VERSION for $W_MSG MacPython-OSX $PYVER" \
	--NeedsAuthorization="YES" \
	--Relocatable="NO" \
	--InstallOnly="YES" \
	$INSTALLROOT \
	$RESOURCEDIR

    mv wxPythonOSX-$KIND.pkg $DMGDIR/root



    # Make a README.txt to go on the disk image
    cat > "$DMGDIR/root/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.  

   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.  

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.

   docs/                A few readmes, change log, etc.  The full 
                        documentation is downloadable separately. 

   licence/             License docs.

   demo/                A copy of the wxPython demo source code, 
                        just open the folder and run demo.py.

   samples/             Several small sample applications that 
                        demonstrate how to use wxPython.

   wxPython Demo        An application bundle version of the demo.
                        (This has it's own copy of the sources within
                        the bundle.)

   XRCed                An application for editing wxPython resource
                        files  (XRC files.)

   PyCrust              An application that provides an interactive 
                        Python shell and also namespace inspectors.

Happy Hacking!
EOF

#   PyAlaMode            An extension of PyCrust that includes source 
#                        file editing capabilities.


    # license files, docs, etc.
    cp -pR $WXDIR/wxPython/licence $DMGDIR/root
    rm -rf $WXDIR/wxPython/docs/xml-raw
    cp -pR $WXDIR/wxPython/docs $DMGDIR/root
    rm -rf $DMGDIR/root/docs/bin

    # Copy the demo and samples to the disk image
    cp -pR $WXDIR/wxPython/demo $DMGDIR/root
    cp -pR $WXDIR/wxPython/samples $DMGDIR/root
    rm $DMGDIR/root/demo/b

    
    # Make an app bundle to launch PyCrust
    $PYTHONW $PROGDIR/../buildapp.py \
	--builddir=$DMGDIR/root \
	--name=PyCrust \
	--mainprogram=$INSTALLROOT$BINPREFIX/pycrust.py \
	--iconfile=$PROGDIR/PieShell.icns \
	build

#     # and PyAlaMode
#     $PYTHONW $PROGDIR/../buildapp.py \
# 	--builddir=$DMGDIR/root \
# 	--name=PyAlaMode \
# 	--mainprogram=$INSTALLROOT$BINPREFIX/pyalamode.py \
# 	--iconfile=$PROGDIR/PieShell.icns \
# 	build

    # Make an app to launch XRCed
    $PYTHONW $PROGDIR/../buildapp.py \
 	--builddir=$DMGDIR/root \
 	--name=XRCed \
 	--mainprogram=$INSTALLROOT$BINPREFIX/xrced.py \
 	--iconfile=$PROGDIR/XRCed.icns \
 	build

    # Make an app bundle to run the demo
    $PYTHONW $PROGDIR/../buildapp.py \
 	--builddir=$DMGDIR/root \
 	--name="wxPython Demo" \
 	--mainprogram=$DMGDIR/root/demo/demo.py \
 	--iconfile=$PROGDIR/RunDemo.icns \
 	build
    cp -pR $DMGDIR/root/demo/* "$DMGDIR/root/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
fi


# Cleanup build/install dirs
if [ -z "$skipclean" ]; then
    echo "Cleaning up..."
    rm -rf $TMPDIR
else
    echo "Cleanup is disabled.  You should remove $TMPDIR when finished"
fi