#!/bin/sh
# Mini configure script
# 1-10-2004

echo

MT_V="3.20"
MT_DATE="2007-12-27"

MT_VERSION="mtPaint $MT_V"
MT_LANG=NO
MT_MAN=NO
MT_LANG_DEST=/usr/share/locale
MT_PO_DEST=$MT_LANG_DEST
MT_MAN_DEST=/usr/local/man/man1
MT_PREFIX=/usr
LIN_BIN_INSTALL=/usr/local/bin
WIN_BIN_INSTALL="/c/Program Files/mtPaint/bin"
BIN_INSTALL=
MAKE_DIRS=src
ICON_SET=icons1

API_CHECKS=
STATIC_PNG=
STATIC_JPEG=
STATIC_JP2=
STATIC_TIFF=
STATIC_GIF=
AS_NEEDED=
IMAGE_LIBDIR=
HAVE_FUNCS=

GTK_FILE=_conf.txt

CFLAG=
MARCH=
OPTS=YES
DEBUG=NO
HELP=1

CC=gcc
CROSSPF=

L_EX=
STATIC_LAST=
# Called with lib ID & static mode
LIB_NAME ()
{
	if [ "$IMAGE_LIBDIR" ]
	then
		L_EX="$L_EX ${IMAGE_LIBDIR}/lib$1"
		if [ "$2" ]
		then
			L_EX="${L_EX}.a"
		else
			L_EX="${L_EX}.so"
		fi
	else
		if [ "$2" ]
		then
			if [ -z "$STATIC_LAST" ]
			then
				L_EX="$L_EX -Wl,-dn"
			fi
		else
			if [ "$STATIC_LAST" ]
			then
				L_EX="$L_EX -Wl,-dy"
			fi
		fi
		L_EX="$L_EX -l$1"
	fi
	STATIC_LAST=$2
}

if [ "$OSTYPE" = "msys" ]
then
	OS="MinGW/MSYS"
	GTK=2
	IS_LIB()
	{
		redir -e /dev/null ld -$1 -o _conf.tmp -L/lib > /dev/null 2>&1
	}
	HAVE_FUNC()
	{
		echo "main() { $1(); }" > _conf.c
		redir -e /dev/null gcc _conf.c -o _conf.tmp -L/lib > /dev/null 2>&1
	}
elif [ "$CROSSCC" ]
then
	OS="MinGW/GNU/Linux"
	GTK=2
	CROSSPF="/usr/$CROSSCC"
	CC=/usr/$CROSSCC/bin/$CROSSCC-gcc
	IS_LIB()
	{
		$CROSSPF/bin/$CROSSCC-ld -$1 -o _conf.tmp -L$CROSSPF/lib > /dev/null 2>&1
	}
	HAVE_FUNC()
	{
		echo "main() { $1(); }" > _conf.c
		$CC _conf.c -o _conf.tmp -L$CROSSPF/lib > /dev/null 2>&1
	}
else
	OS="GNU/Linux"
	if pkg-config gtk+-2.0 --cflags > /dev/null
	then
		GTK=2
	else
		GTK=1
	fi
	CROSSPF="/usr"
	IS_LIB()
	{
		ld -$1 -o _conf.tmp -L/lib -L/usr/lib -L/usr/X11R6/lib -lX11 -lz -lm > /dev/null 2>&1
	}
	HAVE_FUNC()
	{
		echo "main() { $1(); }" > _conf.c
		gcc _conf.c -o _conf.tmp -L/lib -L/usr/lib -L/usr/X11R6/lib -lX11 -lz -lm > /dev/null 2>&1
	}
fi

if HAVE_FUNC "mkdtemp"
then
	HAVE_FUNCS="$HAVE_FUNCS -DHAVE_MKDTEMP"
fi

if IS_LIB "lgif"
then
	NGIF=GIF
else
	if IS_LIB "lungif"
	then
		NGIF=YES
	else
		NGIF=NO
	fi
fi

if IS_LIB "ljpeg"
then
	NJPEG=YES
else
	NJPEG=NO
fi

if IS_LIB "lopenjpeg"
then
	NJP2=YES
else
	NJP2=NO
fi

if IS_LIB "ltiff"
then
	NTIFF=YES
else
	NTIFF=NO
fi

if IS_LIB "lfreetype"
then
	NFT=YES
else
	NFT=NO
fi

rm _conf.c _conf.tmp

for A in "$@"
do
	case "$A" in
		"flush" )	echo Clearing out directory to original state
				echo
				make clean
				echo
				rm _conf.txt
				rm po/mtpaint.pot
				rm src/graphics/*.xpm src/graphics/*.xbm
				rm -rf slack
				rm -f *.tgz
				exit;;
		"api" )		API_CHECKS=YES;;
		"staticpng" )	STATIC_PNG=PNG;;
		"GIF" )		NGIF=GIF;;
		"gif" )		NGIF=YES;;
		"nogif" )	NGIF=NO;;
		"staticgif" )	STATIC_GIF=GIF;;
		"jpeg" )	NJPEG=YES;;
		"nojpeg" )	NJPEG=NO;;
		"staticjpeg" )	STATIC_JPEG=JPEG;;
		"jp2" )		NJP2=YES;;
		"nojp2" )	NJP2=NO;;
		"staticjp2" )	STATIC_JP2=JPEG2000;;
		"tiff" )	NTIFF=YES;;
		"notiff" )	NTIFF=NO;;
		"statictiff" )	STATIC_TIFF=TIFF;;
		"noft" )	NFT=NO;;
		"--libdir="* )	IMAGE_LIBDIR="`echo "$A" | sed -e "s/--libdir=//"`";;
		"slow" )	OPTS=NO;;
		"asneeded" )	AS_NEEDED=-Wl,--as-needed;;
		"debug" )	DEBUG=YES
				OPTS=NO;;
		"gtk1" )	GTK=1;;
		"gtk2" )	GTK=2;;
		"win" )		OS="MinGW/MSYS"
				GTK=2;;
		"intl" )	MT_LANG=YES;;
		"merge" )	xgettext src/*.c src/*.h --keyword=_ -o po/mtpaint.pot
				cd po
				NEW_DIR=trans_
				mkdir $NEW_DIR`date +%d-%m-%Y-%H-%M-%S`
				ls *.po | while read file
				do
					echo New file = $file-a
					mv $file $file-a
					msgmerge -N $file-a mtpaint.pot > $file-b
					perl xtend.pl $file-b $file
					mv $file-* $NEW_DIR*
				done
				rm mtpaint.pot
				mv $NEW_DIR* ../../old_trans
				exit;;
		"newpo" )	xgettext src/*.c src/*.h --keyword=_ -o po/mtpaint.pot
				exit;;
		"man" )		MT_MAN=YES;;
		"pod" )		MT_POD=YES;;
		"--help" )	HELP=0;;
		"mtk="* )	MTK_DIR="`echo "$A" | sed -e "s/mtk=//"`"
				mkdir $MTK_DIR/mtpaint-$MT_V
				cp -ar $MTK_DIR/locale $MTK_DIR/mtpaint-$MT_V
				MT_LANG_DEST="$MTK_DIR/mtpaint-$MT_V/locale"
				MT_PO_DEST="locale"
				LIN_BIN_INSTALL="$MTK_DIR/mtpaint-$MT_V"
				WIN_BIN_INSTALL=$LIN_BIN_INSTALL
				MTK_XFT=YES
				;;
		"noxft" )	MTK_XFT=NO
				;;
		"--bindir="* )	LIN_BIN_INSTALL="`echo "$A" | sed -e "s/--bindir=//"`"
				WIN_BIN_INSTALL=$LIN_BIN_INSTALL;;
		"--locale="* )	MT_LANG_DEST="`echo "$A" | sed -e "s/--locale=//"`"
				MT_PO_DEST=$MT_LANG_DEST;;
		"--mandir="* )	MT_MAN_DEST="`echo "$A" | sed -e "s/--mandir=//"`";;
		"cflags" )	CFLAG=${CFLAGS};;
		"--cpu="* )	MARCH='-march='"`echo "$A" | sed -e "s/--cpu=//"`";;
		"icons"* )	ICON_SET=$A;;
		"386" )		MARCH='-march=i386';;
		"486" )		MARCH='-march=i486';;
		"586" )		MARCH='-march=i586';;
		"686" )		MARCH='-march=i686';;
		"release" )	CFLAG='-O2 -fweb -march=i386'
				HAVE_FUNCS="$HAVE_FUNCS -DGTK_NO_CHECK_CASTS -DG_DISABLE_CAST_CHECKS";;
		"--prefix="* )	MT_PREFIX="`echo "$A" | sed -e "s/--prefix=//"`"
				WIN_BIN_INSTALL="$MT_PREFIX/bin"
				LIN_BIN_INSTALL="$MT_PREFIX/bin"
				MT_LANG_DEST="$MT_PREFIX/share/locale"
				MT_PO_DEST=$MT_LANG_DEST
				MT_MAN_DEST="$MT_PREFIX/man/man1";;
		"--po="* )	MT_PO_DEST="`echo "$A" | sed -e "s/--po=//"`";;
		"guada" )	MARCH='-march=i386'
				MT_LANG=YES
				MT_MAN=YES
				MT_POD=YES
				LIN_BIN_INSTALL=/usr/bin
				MT_CUSTOM=GUADALINEX;;
		"build" )	./configure flush
				I_DIR=/home/mark/sf
				cd ..
				zip -r $I_DIR/mtpaint-$MT_V.zip mtpaint-$MT_V*/
				tar cjvf $I_DIR/mtpaint-$MT_V.tar.bz2 mtpaint-$MT_V*/
				cd mtpaint-$MT_V*

				./configure --prefix=`pwd`/slack/usr --bindir=`pwd`/slack/usr/local/bin --po=/usr/share/locale intl pod man release asneeded staticgif nojp2
				make
				mkdir -p slack/install/
				mkdir -p slack/usr/doc/mtpaint/
				cp -r ../docs-mtpaint3/mtpaint_*/docs/* slack/usr/doc/mtpaint/
				make install
				cp doc/slack-desc slack/install/
				cd slack
				GTK_V=gtk2
				makepkg --chown n $I_DIR/mtpaint-$MT_V$GTK_V-i386-1.tgz
				cd ..
				./configure flush

				./configure --prefix=`pwd`/slack/usr --bindir=`pwd`/slack/usr/local/bin --po=/usr/share/locale intl man gtk1 release asneeded staticgif nojp2
				make
				mkdir -p slack/install/
				mkdir -p slack/usr/doc/mtpaint/
				cp -r ../docs-mtpaint3/mtpaint_*/docs/* slack/usr/doc/mtpaint/
				make install
				cp doc/slack-desc slack/install/
				cd slack
				GTK_V=gtk1
				makepkg --chown y $I_DIR/mtpaint-$MT_V$GTK_V-i386-1.tgz
				cd ..
				./configure flush

				./configure --prefix=`pwd`/slack/usr --bindir=`pwd`/slack/usr/bin --po=/usr/share/locale intl man release GIF staticgif nojp2 --libdir=$I_DIR/ubuntulib
				make
				mkdir -p slack/install/
				mkdir -p slack/usr/share/doc/mtpaint/
				cp -r ../docs-mtpaint3/mtpaint_*/docs/* slack/usr/share/doc/mtpaint/
				make install
				cp doc/slack-desc slack/install/
				cd slack
				makepkg --chown y $I_DIR/mtpaint-$MT_V.tgz
				cd ..
				./configure flush

				cp doc/alien-desc "$I_DIR"
				cd "$I_DIR"
				export EMAIL="mtpaint-user@lists.sourceforge.net"
				alien -d --version=$MT_V --description="`cat alien-desc`" mtpaint-$MT_V.tgz
				rename -2_all _i386 *.deb
				chown mark *
				chgrp users *
				exit;;
	esac
done


if [ "$HELP" = 0 ]
then

cat << EOF
Usage: ./configure [OPTION] ...

Options:

win ............. Configure for Windows MinGW / MSYS
gtk1 ............ Configure for GTK+1
gtk2 ............ Configure for GTK+2
mtk=DIR ......... Configure for MTK at the given location, e.g. /home/mark/mtk-1.0
noxft ........... Don't use Xft in MTK

cflags .......... Use CFLAGS environment variable
--cpu= .......... Target a specific CPU, e.g. athlon-xp, x86-64
686 ............. Target 686 machines
586 ............. Target 586 machines
486 ............. Target 486 machines
386 ............. Target 386 machines
slow ............ Don't use compiler optimizations
asneeded ........ Use linker optimization --as-needed

staticpng ....... Statically link PNG library
GIF ............. Use libgif
gif ............. Use libungif
nogif ........... Don't use libgif and libungif
staticgif ....... Statically link GIF library
jpeg ............ Use libjpeg
nojpeg .......... Don't use libjpeg
staticjpeg ...... Statically link JPEG library
jp2 ............. Use libopenjpeg
nojp2 ........... Don't use libopenjpeg
staticjp2 ....... Statically link JPEG 2000 library
tiff ............ Use libtiff
notiff .......... Don't use libtiff
statictiff ...... Statically link TIFF library
noft ............ Don't use FreeType
--libdir=DIR .... DIR = location of image library files to use for cross-compilation

flush ........... Flush directories to initial state
debug ........... Include debugging info in binary
api ............. Use extra sanity checks required for libmtpaint
--bindir=DIR .... DIR = location of bin file to install, /usr/local/bin by default

intl ............ Use internationalized po files
newpo ........... Create ./po/mtpaint.pot
merge ........... Update all po files with new strings - developers only
--locale=DIR .... DIR = location of locale files to install, /usr/share/locale by default

man ............. Install the mtPaint man page
pod ............. Compile new man page - see ./doc/README for details
--mandir=DIR .... DIR = location of man page to install, /usr/local/man/man1 by default

--prefix=DIR .... DIR = prefix location of all installs, e.g. /usr or /usr/local

icons ........... Compile with alternative icon set - see ./src/icons1/README for details

Default settings: GNU/Linux system, O2 optimizations, English only version
pkg-config gtk+-2.0 is checked to determine GTK+2 availability in GNU/Linux
EOF
else
	cp src/$ICON_SET/*.xpm src/$ICON_SET/*.xbm src/graphics

	echo CC = $CC -Wall > $GTK_FILE
	echo "MT_VERSION=$MT_VERSION" >> $GTK_FILE
	echo "MT_DATE=$MT_DATE" >> $GTK_FILE
	echo "MT_PREFIX=\"$MT_PREFIX\"" >> $GTK_FILE

	if [ "$MTK_DIR" ]
	then
		BIN_INSTALL=$LIN_BIN_INSTALL
		GTK_INCLUDE="-I$MTK_DIR/include -I$MTK_DIR/include/glib -I/usr/include/X11 -DU_MTK"
		GTK_LIB="$MTK_DIR/lib/libgtk.a $MTK_DIR/lib/libgdk.a $MTK_DIR/lib/libgmodule.a $MTK_DIR/lib/libglib.a"

		echo "MTK_LIB = $GTK_LIB" >> $GTK_FILE

		GTK_LIB="-L/usr/lib -L/usr/X11R6/lib $GTK_LIB -ldl -lXi -lXext -lX11 -lm"

		if [ "$MTK_XFT" = "YES" ]
		then
			GTK_LIB="$GTK_LIB -lXft"
		fi
	else
	if [ "$OS" = "GNU/Linux" ]
	then
		BIN_INSTALL=$LIN_BIN_INSTALL
		if [ "$GTK" = "1" ]
		then
			if gtk-config --cflags > /dev/null
			then
				GTK_INCLUDE=`gtk-config --cflags`
				GTK_LIB=`gtk-config --libs`
			else
				echo
				echo I have not been able to find gtk-config so I am assuming the following:
				echo
				GTK_INCLUDE="-I/opt/gnome/include/gtk-1.2 -I/opt/gnome/include/glib-1.2 -I/opt/gnome/lib/glib/include -I/usr/X11R6/include"
				GTK_LIB="-L/usr/lib -L/usr/X11R6/lib -L/opt/gnome/lib -lgtk -lgdk -rdynamic -lgmodule -lglib -ldl -lXext -lX11 -lm"
				echo GTK_INCLUDE = $GTK_INCLUDE
				echo GTK_LIB = $GTK_LIB
				echo
				echo If these values are not right for your system, edit the configure script
				echo
			fi
		else
			GTK_INCLUDE=`pkg-config gtk+-2.0 --cflags`
			GTK_LIB=`pkg-config gtk+-2.0 --libs`
		fi
	else
		BIN_INSTALL=$WIN_BIN_INSTALL
		MT_LANG_DEST=locale
		MT_PO_DEST=locale
		if [ "$GTK" = "1" ]
		then
			GTK_INCLUDE="-I/include -I/include/glib-2.0 -I/lib/gtk+/include -I/lib/glib-2.0/include -mms-bitfields"
			GTK_LIB="-L/lib -lgtk -lgdk -lglib-2.0 -lm -mwindows"
		else
			GTK_INCLUDE="-I$CROSSPF/include/gtk-2.0 -I$CROSSPF/lib/gtk-2.0/include -I$CROSSPF/include/atk-1.0 -I$CROSSPF/include/pango-1.0 -I$CROSSPF/include/freetype2 -I$CROSSPF/include/glib-2.0 -I$CROSSPF/lib/glib-2.0/include -I$CROSSPF/include -mms-bitfields"
			GTK_LIB="-L$CROSSPF/lib -lgtk-win32-2.0 -lgdk-win32-2.0 -lpango-1.0 -lglib-2.0 -lgobject-2.0 -lgdk_pixbuf-2.0 -lm -mwindows"
		fi
	fi
	fi	# MTK

	if [ "$IMAGE_LIBDIR" ]
	then
		AS_NEEDED="-Wl,--as-needed -Wl,--unresolved-symbols=ignore-in-shared-libs"
	fi

	L_EX=$AS_NEEDED
	I_EX=$HAVE_FUNCS
	if [ "$NGIF" != "NO" ]
	then
		if [ "$NGIF" = "GIF" ]
		then
			LIB_NAME gif "$STATIC_GIF"
		else
			LIB_NAME ungif "$STATIC_GIF"
		fi
		I_EX="$I_EX -DU_GIF"
	fi
	if [ "$NJPEG" = "YES" ]
	then
		LIB_NAME jpeg "$STATIC_JPEG"
		I_EX="$I_EX -DU_JPEG"
	fi
	if [ "$NJP2" = "YES" ]
	then
		LIB_NAME openjpeg "$STATIC_JP2"
		I_EX="$I_EX -I$CROSSPF/include/openjpeg -DU_JP2"
		if [ "$STATIC_JP2" ] || [ "$OS" != "GNU/Linux" ]
		then
			I_EX="$I_EX -DOPJ_STATIC"
		fi
	fi
	if [ "$NTIFF" = "YES" ]
	then
		LIB_NAME tiff "$STATIC_TIFF"
		I_EX="$I_EX -DU_TIFF"
	fi
	LIB_NAME png "$STATIC_PNG"
	LIB_NAME z "$STATIC_PNG"
	if [ "$STATIC_LAST" ] && [ -z "$IMAGE_LIBDIR" ]
	then
		L_EX="$L_EX -Wl,-dy"
	fi

	if [ "$API_CHECKS" ]
	then
		I_EX="$I_EX -DU_API"
	fi

	if [ "$DEBUG" = NO ]
	then
		GTK_LIB="$GTK_LIB -s"
	else
		I_EX="$I_EX -ggdb"
	fi

	if [ "$MT_CUSTOM" ]
	then
		I_EX="$I_EX -DU_$MT_CUSTOM"
	fi

	if [ "$NFT" = YES ]
	then
		if [ "$OS" = "GNU/Linux" ]
		then
			I_EX="$I_EX -DU_FREETYPE `freetype-config --cflags`"
			L_EX="$L_EX `freetype-config --libs`"
		else
			I_EX="$I_EX -DU_FREETYPE"
			L_EX="$L_EX -lfreetype -liconv"
		fi
	fi

	if [ "$MT_LANG" = YES ]
	then
		I_EX="$I_EX -DU_NLS -DMT_LANG_DEST=\"\\\"$MT_PO_DEST\"\\\""
		MAKE_DIRS="$MAKE_DIRS po"

		if [ "$OS" = "GNU/Linux" ]
		then
			echo "MT_LANG_DEST=\"$MT_LANG_DEST\"" >> $GTK_FILE
		else
			L_EX="$L_EX -lintl"
			echo "MT_LANG_DEST=\"$BIN_INSTALL/$MT_LANG_DEST\"" >> $GTK_FILE
		fi
	fi
	if [ "$MT_MAN" = YES ]
	then
		MAKE_DIRS="$MAKE_DIRS doc"
		echo "MT_MAN_DEST=\"$MT_MAN_DEST\"" >> $GTK_FILE
	fi

	I_EX="$I_EX -DVERSION=\"\\\"$MT_VERSION\"\\\""
	GTK_INCLUDE="$GTK_INCLUDE $I_EX"
	echo "LDFLAG = $L_EX $GTK_LIB" >> $GTK_FILE

	if [ "$CFLAG" ]
	then
		echo "CFLAG = $CFLAG $GTK_INCLUDE" >> $GTK_FILE
	else
		if [ "$OPTS" = "YES" ]
		then
			echo "CFLAG = -O2 $MARCH $GTK_INCLUDE" >> $GTK_FILE
		else
			echo "CFLAG = $MARCH $GTK_INCLUDE" >> $GTK_FILE
		fi
	fi

	echo "subdirs = $MAKE_DIRS" >> $GTK_FILE
	echo "BIN_INSTALL=\"$BIN_INSTALL\"" >> $GTK_FILE


	if [ "$MT_POD" = "YES" ]
	then
		cd doc
		make pod
		cd ..
	fi

	echo
	echo
	echo --------------------------
	echo $MT_VERSION configuration
	echo --------------------------
	echo
	echo "System              $OS"
	echo
	echo -n "Toolkit             "
if [ "$MTK_DIR" ]
then
	echo "MTK - $MTK_DIR"
	echo
	echo "Use Xft             $MTK_XFT"
else
	echo "GTK+$GTK"
fi
	echo
if [ "$API_CHECKS" ]
then
	echo "API checks          $API_CHECKS"
	echo
fi
if [ "$CFLAG" ]
then
	echo "CFLAGS              $CFLAG"
else
if [ "$MARCH" ]
then
	echo "MARCH target        $MARCH"
	echo
fi
	echo "Optimizations       $OPTS $AS_NEEDED"
fi
	echo
	echo "Debug info          $DEBUG"
	echo
	echo "Use FreeType        $NFT"
	echo
	echo "Use GIF             $NGIF"
	echo
	echo "Use JPEG            $NJPEG"
	echo
	echo "Use JPEG 2000       $NJP2"
	echo
	echo "Use TIFF            $NTIFF"
	echo
	echo "Binary install      $BIN_INSTALL"
	echo
	echo "Internationalized   $MT_LANG"
	echo
if [ "$MT_LANG" = YES ]
then
	echo "Locale install      $MT_LANG_DEST"
	echo
	echo "Locale program      $MT_PO_DEST"
	echo
fi
	echo "Install man page    $MT_MAN"
	echo
if [ "$MT_MAN" = YES ]
then
	echo "Man page install    $MT_MAN_DEST"
	echo
fi
if [ "$MT_CUSTOM" ]
then
	echo "Customized for      $MT_CUSTOM"
	echo
fi
if [ "$STATIC_PNG" ] || [ "$STATIC_GIF" ] || [ "$STATIC_JPEG" ] || [ "$STATIC_JP2" ] || [ "$STATIC_TIFF" ]
then
	echo -n "Static libraries    "
	if [ "$STATIC_PNG" ]
	then
		echo -n "$STATIC_PNG "
	fi
	if [ "$STATIC_GIF" ]
	then
		echo -n "$STATIC_GIF "
	fi
	if [ "$STATIC_JPEG" ]
	then
		echo -n "$STATIC_JPEG "
	fi
	if [ "$STATIC_JP2" ]
	then
		echo -n "$STATIC_JP2 "
	fi
	if [ "$STATIC_TIFF" ]
	then
		echo -n "$STATIC_TIFF "
	fi
	echo
	echo
fi
	echo "Icon set            $ICON_SET"
	echo


fi

echo
