#! /bin/ksh

#
#  $Id$  
#
#  build-mysql-client.sh
#  sequel-pro
#
#  Created by Stuart Connolly (stuconnolly.com)
#  Copyright (c) 2009 Stuart Connolly. All rights reserved.
#
#  This program is free software; you can redistribute it and/or modify
#  it under the terms of the GNU General Public License as published by
#  the Free Software Foundation; either version 2 of the License, or
#  (at your option) any later version.
#
#  This program is distributed in the hope that it will be useful,
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#  GNU General Public License for more details.
#
#  You should have received a copy of the GNU General Public License
#  along with this program; if not, write to the Free Software
#  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
#
#  More info at <http://code.google.com/p/sequel-pro/>

#  Builds the MySQL client libraries for distrubution in Sequel Pro's MCPKit MySQL framework.
#
#  Paramters: -s -- The path to the MySQL source directory.
#             -q -- Quiet. Don't output any compiler messages.
#             -c -- Clean the source after build completes.
#             -d -- Debug. Output the build statements.

QUIET='NO'
DEBUG='NO'
CLEAN='NO'

# C/C++ compiler flags
export CFLAGS='-isysroot /Developer/SDKs/MacOSX10.5.sdk -arch ppc -arch i386 -arch x86_64 -O3 -fno-omit-frame-pointer -fno-exceptions -mmacosx-version-min=10.5'
export CXXFLAGS='-isysroot /Developer/SDKs/MacOSX10.5.sdk -arch ppc -arch i386 -arch x86_64 -O3 -fno-omit-frame-pointer -felide-constructors -fno-exceptions -fno-rtti -mmacosx-version-min=10.5'

CONFIGURE_OPTIONS='--without-server --enable-thread-safe-client --disable-dependency-tracking --enable-local-infile --with-ssl --enable-assembler --with-mysqld-ldflags=-all-static'
BINARY_DISTRIBUTION_SCRIPT='scripts/make_binary_distribution'

usage() 
{	
	cat <<!EOF
Usage: $(basename $0): -s <mysql_source_path> [-q -c -d]

Where: -s -- Path to the MySQL source directory
       -q -- Be quiet during the build. Suppress all compiler messages
       -c -- Clean the source directory after the build completes
       -d -- Debug. Output all the build commands
!EOF
}

if [ $# -eq 0 ]
then
	echo "Invalid number of arguments. I need the path to the MySQL source directory."
	echo ''
	usage
	exit 1
fi

echo ''
echo "This script builds the MySQL client libraries for distribution in Sequel Pro's MCPKit MySQL framework."
echo 'They are all built as 3-way binaries (32 bit PPC, 32/64 bit i386).'
echo ''
echo -n 'This may take a while, are you sure you want to continue [y | n]: '

read CONTINUE

if [ "x${CONTINUE}" == 'xn' ]
then
	echo 'Aborting...'
	exit 0
fi

while getopts ':s:qcd' OPTION
do
    case "$OPTION" in
        s) MYSQL_SOURCE_DIR="$OPTARG";;
		q) QUIET='YES';;
		c) CLEAN='YES';;
        d) DEBUG='YES';;
        *) echo 'Unrecognised option'; usage; exit 1;;
    esac
done

if [ ! -d "$MYSQL_SOURCE_DIR" ]
then
	echo "MySQL source directory does not exist at path '${MYSQL_SOURCE_DIR}'."
	echo 'Exiting...'
	exit 1
fi

# Change to source directory
cd "$MYSQL_SOURCE_DIR"

echo 'Configuring MySQL source...'

if [ "x${DEBUG}" == 'xYES' ]
then
	echo "${MYSQL_SOURCE_DIR}/configure" "$CONFIGURE_OPTIONS"
fi

if [ "x${QUIET}" == 'xYES' ]
then
	./configure $CONFIGURE_OPTIONS > /dev/null
else
	./configure $CONFIGURE_OPTIONS
fi

if [ $? -eq 0 ]
then
	echo 'Configure successfully completed'
else
	echo 'Configure failed. Exiting...'
	exit 1
fi

echo 'Building client libraries...'

if [ "x${QUIET}" == 'xYES' ]
then
	make > /dev/null
else
	make
fi

if [ $? -eq 0 ]
then
	echo 'Building libraries successfully completed'
else
	echo 'Building libraries failed. Exiting...'
	exit 1
fi

echo 'Building binary distribution...'

if [ "x${QUIET}" == 'xYES' ]
then
	$BINARY_DISTRIBUTION_SCRIPT > /dev/null
else
	$BINARY_DISTRIBUTION_SCRIPT
fi

if [ $? -eq 0 ]
then
	echo 'Building binary distribution successfully completed'
else
	echo 'Building binary distribution failed. Exiting...'
	exit 1
fi

if [ "x${CLEAN}" == 'xYES' ]
then
	echo 'Cleaning build...'
	
	if [ "x${QUIET}" == 'xYES' ]
	then
		make clean > /dev/null
	else
		make clean
	fi
fi 

echo 'Building MySQL client libraries successfully completed.'

exit 0