#!/bin/sh -e
#----------------------------------------------------------------------
# Build MacPython 2.4 and make an Installer package of it

# TODO:  Parameterize the versions, builddirs, etc...

# Script configs
PYVERSION=2.4.1
PYVER=2.4
BUILDNUM=1
DOCLEANUP=no

PROGDIR="`dirname \"$0\"`"
case x$PROGDIR in
x|x.) PROGDIR=`pwd` ;;
x/*) ;;
*) echo "Please run with a full pathname"
   exit 1
   ;;
esac

if [ ! -e /usr/bin/python ]; then
	echo "No /usr/bin/python; this script expects to be run on 10.3 only"
	exit 1
fi
vers=`/usr/bin/python -V 2>&1`
if [ "$vers" != "Python 2.3" ]; then
    echo "/usr/bin/python is not version 2.3; this script expects to be run on 10.3 only"
    exit 1
fi

TMPDIR=/tmp/_py
#TMPDIR=/projects/_py

INSTALLROOT=$TMPDIR/install
DMGDIR=$TMPDIR/dmg
RESOURCEDIR=$PROGDIR/resources
DESTDIR=$TMPDIR/dist
PYTHONSRC=$PROGDIR/../../..
WASTEDIR=$PYTHONSRC/../waste

# Check that the Apple Python 2.3 Makefile fixes have been applied on this
# machine
if python $PYTHONSRCDIR/Mac/OSX/fixapplepython23.py -n; then
    :
else
    echo
    echo This installer will also install a fix to Apple-installed 2.3
    echo to make building extensions work in the face of other Pythons.
    echo But this system needs to have that fix to be able to put it in the installer.
    echo
    echo Please run $PYTHONSRCDIR/Mac/OSX/fixapplepython23.py to install the fix.
    exit
fi

case x$1 in
x)
	BUILDROOT=$TMPDIR/build
	;;
*)
	BUILDROOT=$1
	;;
esac

# Setup
if [ -e $BUILDROOT ]; then
	echo Using existing build directory $BUILDROOT
	CLEANBUILD=no
else
	echo Creating clean build directory $BUILDROOT
	CLEANBUILD=yes
	mkdir -p $BUILDROOT
fi
rm -rf $DMGDIR
if [ ! -e $TMPDIR ]; then
	mkdir $TMPDIR
fi
chgrp admin $TMPDIR
mkdir -p $DMGDIR/root


# Configure and build Python
pushd $BUILDROOT

# Ask the user whether s/he has edited Welcome.txt
read -p "Have you updated $RESOURCEDIR/Welcome.txt (Y/n)? " welcome

if [ "$welcome" = "n" -o "$welcome" = "N" ]; then
	echo "Please do so and retry"
	exit
fi

# If the filesystem is case-sensitive then "python" will be built, but
# some parts of the install expect "python.exe which is what is built
# on a case-insensitive filesystem.  Make a link just in case it is
# needed.
if [ ! -e python.exe ]; then
    ln -s python python.exe
fi

# Make a link to the waste dir so that lib can be found.  This allows
# the PythonIDE to be built
if [ ! -e waste ]; then
    ln -s $WASTEDIR waste
fi

$PYTHONSRC/configure -C --enable-framework LDFLAGS=-Wl,-x
make
make DIRMODE=775 EXEMODE=775 FILEMODE=664 DESTDIR=$INSTALLROOT frameworkinstall
make DIRMODE=775 EXEMODE=775 FILEMODE=664 DESTDIR=$INSTALLROOT frameworkinstallextras

# Install the Makefile fixes
config=System/Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/config
(cd / ; tar cf - $config/Makefile $config/PantherPythonFix) | (cd $INSTALLROOT; tar xf -)

# Unfortunately all the ...MODE arguments above still don't do the trick.
# Cop out, and recursively set everything group-writeable.
chmod -R ug+w $INSTALLROOT

if [ "$builddocs" = "y" -o "$builddocs" = "Y" ]; then
    ./python.exe $PYTHONSRC/Mac/OSX/setupDocs.py build
    echo ""
    read -p "When the help indexer is done press Enter..." ans
    ./python.exe $PYTHONSRC/Mac/OSX/setupDocs.py install \
	--prefix=$INSTALLROOT/Library/Frameworks/Python.framework/Versions/$PYVER
fi

popd



# Make the Installer package:
# First, remove the unix tools as their paths will be wrong.  We'll recreate
# them in the postinstall.
rm -rf $INSTALLROOT/usr

# Next, remove the .pyc/.pyo files
python $PYTHONSRC/Mac/scripts/zappycfiles.py $INSTALLROOT/Library/Frameworks/Python.framework/Versions/$PYVER/lib/python$PYVER
python $PYTHONSRC/Mac/scripts/zappycfiles.py $INSTALLROOT/Library/Frameworks/Python.framework/Versions/$PYVER/Mac/Tools

# Finally, build the package...
rm -rf MacPython-OSX.pkg
python $PYTHONSRC/Mac/scripts/buildpkg.py \
    --Title=MacPython-OSX \
    --Version=$PYVERSION-$BUILDNUM \
    --Description="Python $PYVERSION for Mac OS X 10.3, framework based" \
    --NeedsAuthorization="YES" \
    --Relocatable="NO" \
    --InstallOnly="YES" \
    --UseUserMask="NO" \
    $INSTALLROOT \
    $RESOURCEDIR

#    --RootVolumeOnly="YES" \

# ...and then make a disk image containing the package.
mv MacPython-OSX.pkg $DMGDIR/root
cp $RESOURCEDIR/ReadMe.txt $DMGDIR/root/ReadMe.txt
$PROGDIR/makedmg $DMGDIR/root $DMGDIR MacPython-OSX-$PYVERSION-$BUILDNUM

echo Moving $DMGDIR/MacPython-OSX-$PYVERSION-$BUILDNUM to $DESTDIR
if [ ! -e $DESTDIR ]; then
    mkdir $DESTDIR
fi
mv $DMGDIR/MacPython-OSX-$PYVERSION-$BUILDNUM.dmg $DESTDIR


# Cleanup build/install dirs
if [ $DOCLEANUP = yes ]; then
    echo "Cleaning up..."
    if [ $CLEANBUILD = yes ]; then
    	rm -rf $BUILDROOT
    fi
    rm -rf $INSTALLROOT
    rm -rf $DMGDIR
else
    echo "Cleanup is disabled.  You should remove these dirs when done:"
    if [ $CLEANBUILD = yes ]; then
    	echo "          $BUILDROOT"
    fi
    echo "          $INSTALLROOT"
    echo "          $DMGDIR"
fi
echo "Your installer can be found in $DESTDIR"