#!/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  wx_version  py_version  [command flags...]"
    echo "   wx_version     String to use for version in filenames, etc."
    echo "   py_version     String to append to python (which python version to use.)"
    echo ""
    echo "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"
}


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

VERSION=$1
PYVER=$2
shift;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


SRCDIR=/Volumes/Gate.Stuff/Development/wxPython/dist/$VERSION
TARBALL=$SRCDIR/wxPythonSrc-$VERSION.tar.gz
SITEPACKAGES=/Library/Frameworks/Python.framework/Versions/$PYVER/lib/python$PYVER/site-packages

# TODO:  Should I change the prefix to /usr?
PREFIX=/usr/local

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
    tar xzvf $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
    find /projects/wx $FEXPR -print \
	| grep -v wx/build \
	| grep -v wxPython/build \
	| grep -v wxPython/_build \
	| grep -v CVS \
	| cut -b 14- > filelist

    for x in `cat filelist`; do
	if [ -d "/projects/wx/$x" ]; then
	    mkdir -p "wxPythonSrc-$VERSION/$x"
	else
	    echo $x
	    cp -p "/projects/wx/$x" "wxPythonSrc-$VERSION/$x"
	fi
    done

    touch .last_copy
fi


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

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


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

fi

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

    cd $WXDIR/wxPython
    python$PYVER setup.py \
	IN_CVS_TREE=1 \
	WX_CONFIG="$WXDIR/build/wx-config --prefix=$WXDIR --exec-prefix=$WXDIR/build" \
	build


    # Build wxrc (XRC resource tool) but don't use the makefiles since they expect
    # a shared version of the xrc lib to have been built...
    cd $WXDIR/contrib/utils/wxrc
    WX_CONFIG="$WXDIR/build/wx-config --prefix=$WXDIR --exec-prefix=$WXDIR/build"
    wCC=`$WX_CONFIG --cc`
    wCXX=`$WX_CONFIG --cxx`

    for f in wxrc.cpp ../../src/xrc/*.cpp; do
	echo $f
	$wCXX `$WX_CONFIG --cxxflags` -I ../../include -I ../../src/xrc/expat/xmlparse -I ../../src/xrc/expat/xmltok -c $f
    done
    for f in ../../src/xrc/expat/xmlparse/xmlparse.c ../../src/xrc/expat/xmltok/xmlrole.c ../../src/xrc/expat/xmltok/xmltok.c; do
	echo $f
	$wCC `$WX_CONFIG --cxxflags` -I ../../include -I ../../src/xrc/expat/xmlparse -I ../../src/xrc/expat/xmltok -c $f
    done

    # the handlers are not needed
    rm xh_*.o xmlrsall.o

    $wCXX `$WX_CONFIG --libs` *.o -o wxrc
    strip wxrc

fi

#----------------------------------------------------------------------
# Install wxWindows

if [ -z "$skipinstall" ]; then
    cd $WXDIR/build
    make prefix=$INSTALLROOT/$PREFIX install


    # and wxPython
    cd $WXDIR/wxPython
    python$PYVER setup.py \
	IN_CVS_TREE=1 \
	WX_CONFIG="$WXDIR/build/wx-config --prefix=$WXDIR --exec-prefix=$WXDIR/build" \
	install \
	--root=$INSTALLROOT

    # install wxPython's tool scripts
    cd $WXDIR/wxPython/scripts
    python$PYVER CreateMacScripts.py $INSTALLROOT $PREFIX/bin

    # Install wxrc
    cp $WXDIR/contrib/utils/wxrc/wxrc $INSTALLROOT$PREFIX/bin


    # Move wxWindows devel files and save for a separate installer package
    mkdir -p $INSTALLDEVEL$PREFIX
    mkdir -p $INSTALLDEVEL$PREFIX/bin
    mkdir -p $INSTALLDEVEL$PREFIX/lib
    mv -f $INSTALLROOT$PREFIX/include $INSTALLDEVEL$PREFIX
    mv -f $INSTALLROOT$PREFIX/lib/wx  $INSTALLDEVEL$PREFIX/lib
    mv -f $INSTALLROOT$PREFIX/bin/wx* $INSTALLDEVEL$PREFIX/bin

    # TODO for $INSTALLROOT and $INSTALLDEVEL ?
    # chown -R root:admin
    # chmod -R g+w
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/Library/Frameworks/Python.framework

    # Copy the demo, samples, and such to the Applications dir
    APPDIR=$INSTALLROOT/Applications/wxPythonOSX-$VERSION
    mkdir -p $APPDIR
    cp -pR $WXDIR/wxPython/demo $APPDIR
    cp -pR $WXDIR/wxPython/samples $APPDIR

    # Move sample launchers to .pyw files.
    # TODO:  A better, more automated way to do this!!!
    pushd $APPDIR/samples
    for x in StyleEditor/STCStyleEditor \
  	    doodle/superdoodle \
	    frogedit/FrogEdit \
	    pySketch/pySketch \
	    wxProject/wxProject; do
        mv $x.py $x.pyw
    done
    popd

    # Make an app to launch the demo
    cat > $APPDIR/demo/RunDemo.pyw <<EOF
import sys, os
sys.path.insert(0, "/Applications/wxPythonOSX-$VERSION/demo")
os.chdir("/Applications/wxPythonOSX-$VERSION/demo")
import Main
Main.main()
EOF
    pythonw $PROGDIR/../buildapp.py \
	--builddir=$APPDIR \
	--name=RunDemo \
	--mainprogram=$APPDIR/demo/RunDemo.pyw \
	--iconfile=$PROGDIR/RunDemo.icns \
	build

    # Make an app to launch PyShell
    pythonw $PROGDIR/../buildapp.py \
	--builddir=$APPDIR \
	--name=PyShell \
	--mainprogram=$INSTALLROOT$PREFIX/bin/pyshell.py \
	--iconfile=$PROGDIR/PieShell.icns \
	build

     # Make an app to launch XRCed
     pythonw $PROGDIR/../buildapp.py \
 	--builddir=$APPDIR \
 	--name=XRCed \
 	--mainprogram=$INSTALLROOT$PREFIX/bin/xrced.py \
 	--iconfile=$PROGDIR/XRCed.icns \
 	build


    # Make the welcome message
    cat > $RESOURCEDIR/Welcome.txt <<EOF
Welcome!

This program will install wxPython $VERSION for MacPython-OSX $PYVER.

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
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
/usr/local/bin/python \$2$SITEPACKAGES/../compileall.py \$2$SITEPACKAGES/wxPython
/usr/local/bin/python -O \$2$SITEPACKAGES/../compileall.py \$2$SITEPACKAGES/wxPython

# and in the demo
/usr/local/bin/python \$2$SITEPACKAGES/../compileall.py /Applications/wxPythonOSX-$VERSION/demo

# Make the demo/data dir writable
chmod a+w /Applications/wxPythonOSX-$VERSION/demo/data

# and the wxPython pacakge should be group writable
chgrp -R admin \$2$SITEPACKAGES/wxPython
chgrp -R admin /Applications/wxPythonOSX-$VERSION
chmod -R g+w \$2$SITEPACKAGES/wxPython
chmod -R g+w /Applications/wxPythonOSX-$VERSION

exit 0
EOF
    chmod +x $RESOURCEDIR/postflight



    # Finally, build the main package...
    rm -rf wxPythonOSX.pkg
    python $PROGDIR/../buildpkg.py \
	--Title=wxPythonOSX \
	--Version=$VERSION \
	--Description="wxPython $VERSION for MacPython-OSX $PYVER" \
	--NeedsAuthorization="YES" \
	--Relocatable="NO" \
	--InstallOnly="YES" \
	$INSTALLROOT \
	$RESOURCEDIR

    mv wxPythonOSX.pkg $DMGDIR/root


    # and the devel package
    rm -rf wxPythonOSX-devel.pkg
    python $PROGDIR/../buildpkg.py \
	--Title=wxPythonOSX-devel \
	--Version=$VERSION \
	--Description="Headers and such that allow you to link with the same wxMac that wxPython does" \
	--NeedsAuthorization="YES" \
	--Relocatable="NO" \
	--InstallOnly="YES" \
	$INSTALLROOT

    mv wxPythonOSX-devel.pkg $DMGDIR/root


    # Make a README.txt to go on the disk image
    cat > $DMGDIR/root/README.txt <<EOF
The files on this disk image are Installer packages for wxPythonOSX
$VERSION for MacPython-OSX $PVER.  You must already have MacPython-OSX
installed.

The wxPython extension modules, library, demo and samples are
contained in the wxPythonOSX package. You should install at least this
package to use wxPython.

If you have any need to create applicaitons or extension modules that
link with the same wxMac that wxPython does, then you can also install
the wxPythonOSX-devel package to get the necessary header files and
such.  Otherwise you don't need it.

Happy Hacking!
EOF


    # license files, etc.
    cp -pR $WXDIR/wxPython/licence $DMGDIR/root
    cp $WXDIR/wxPython/CHANGES.txt $DMGDIR/root

    # and then finally make a disk image containing the packages and etc.
    $PROGDIR/../makedmg $DMGDIR/root $DMGDIR wxPythonOSX-$VERSION-py$PYVER

    echo Moving $DMGDIR/wxPythonOSX-$VERSION-py$PYVER.dmg to $DESTDIR
    mv $DMGDIR/wxPythonOSX-$VERSION-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