#!/bin/bash
#
# Configure script, for most users only needed for backwards compatibility with
# pqiv 1.0 (pre-gtk3). I still recommend to use it in automated builds to
# ensure continued compatibility.
#

tempdir() {
	NAME=tmp_${RANDOM}
	while [ -d $NAME ]; do
		NAME=tmp_${RANDOM}
	done
	mkdir ${NAME}
	echo ${NAME}
}

PREFIX=/usr
DESTDIR=
GTK_VERSION=0
CROSS=
BINARY_EXTENSION=
CFLAGS=
MANDIR=
PKG_CONFIG=pkg-config

# Help and options
help() {
	cat >&2 <<EOF
pqiv configuration

options:
  --prefix=..           Set the prefix for installed files
  --destdir=..          Set the destdir for installed files (for package maintainers)
  --gtk-version=2       Use GTK+-2.0 even if GTK+-3.0 is available
  --cross=..            Set a cross-compiler prefix (e.g. \`i686-pc-mingw32-')

EOF
}

while [ $# -gt 0 ]; do
	PARAMETER=${1%=*}
	VALUE=${1#*=}

	case $PARAMETER in
		--prefix)
			PREFIX=$VALUE
			;;
		--destdir)
			DESTDIR=$VALUE
			;;
		--gtk-version)
			GTK_VERSION=$VALUE
			;;
		-h)
			help
			exit 0
			;;
		--help)
			help
			exit 0
			;;
		--cross)
			CROSS=$VALUE
			if [ "${CROSS: -1}" != "-" ]; then
				CROSS="$CROSS-"
			fi
			;;
		# Undocumented options for autoconf (esp. dh_auto_configure) compatibility
		--build)
			CROSS=${VALUE}-
			;;
		--mandir)
			MANDIR=${VALUE}
			MANDIR="${MANDIR//{/(}"
			MANDIR="${MANDIR//\}/)}"
			MANDIR="${MANDIR//prefix/PREFIX}"
			echo "Use of autoconf option --mandir is discouraged, because support is incomplete. Rewrote \`$VALUE' to \`$MANDIR' and used that as the MANDIR Make variable." >&2
			;;
		--includedir | --infodir | --sysconfdir | --localstatedir | --libdir | --libexecdir | --disable-maintainer-mode | --disable-dependency-tracking)
			echo "autoconf option ${PARAMETER} ignored" >&2
			;;
		--no-sorting | --no-compositing | --no-fading | --no-commands | --no-config-file | --no-inotify | --no-animations | --binary-name)
			echo "obsolete 1.0 option ${PARAMETER} ignored" >&2
			;;
		*)
			echo "Unknown option: $1" >&2
			help
			exit 1
	esac
	shift
done

# If cross-compiling, check if cc is present (usually it's not)
if [ -n "$CROSS" -a -z "$CC" ]; then
	echo -n "Checking for cross-compiler cc.. "
	if ! which ${CROSS}cc >/dev/null 2>&1; then
		if which ${CROSS}clang >/dev/null 2>&1; then
			export CC=clang
		elif which ${CROSS}gcc >/dev/null 2>&1; then
			export CC=gcc
		else
			echo
			echo
			echo "No compiler found. Please set the appropriate CC environment variable." >&2
			exit 1
		fi
		echo "using ${CROSS}${CC}"
	else
		echo "ok"
	fi
fi

# Determine binary extension (for Windows)
echo -n "Determining executable extension.. "
DIR=`tempdir`
cd $DIR
echo 'int main(int argc, char *argv[]) { return 0; }' > test.c
${CROSS}${CC:-cc} test.c
RV=$?
rm -f test.c
EXECUTABLE=`ls`
rm -f $EXECUTABLE
cd ..
rmdir $DIR
if [ "$RV" != 0 ]; then
	echo "The compiler can't compile executables!?" >&2
	echo
	exit 1
fi
EXECUTABLE_EXTENSION=${EXECUTABLE#a}
if [ "$EXECUTABLE_EXTENSION" = ".out" ]; then
	EXECUTABLE_EXTENSION=
fi
echo ${EXECUTABLE_EXTENSION:-(none)}

# Do a rudimental prerequisites check to have user-friendlier error messages
while read -r LINE; do
	for VAR in LIBS_GTK3 LIBS_GTK2; do
		if [ "${LINE#$VAR=}" != "${LINE}" ]; then
			eval ${VAR}=\"${LINE#$VAR=}\"
		fi
	done
done < Makefile

if [ -n "${CROSS}" ]; then
	echo -n "Checking for pkg-config.. "
	PKG_CONFIG=${CROSS}pkg-config
	if ! which ${PKG_CONFIG} >/dev/null 2>&1; then
		echo
		echo "Did not find a specialized tool ${CROSS}pkg-config, defaulting to pkg-config" >&2
		echo "If you really ARE cross-compiling, the build might therefore fail!" >&2
		echo
		PKG_CONFIG=pkg-config
	else
		echo "${PKG_CONFIG}"
	fi
fi

echo -n "Checking if GTK, cairo and glib are installed.. "
if $PKG_CONFIG --exists "$LIBS_GTK3"; then
	echo "ok"
else
	if $PKG_CONFIG --exists "$LIBS_GTK2"; then
		if [ "$GTK_VERSION" = 3 ]; then
			echo "failed."
			echo
			echo "GTK 2 was found, but you manually specified --gtk-version=3, which was not found." >&2
			echo "If you want GTK3, install the development packages for" >&2
			echo " ${LIBS_GTK3}" >&2
			exit 1
		fi
		echo "ok, found GTK 2"
		GTK_VERSION=2
	else
		echo "failed."
		echo
		echo "Please install either the development packages for " >&2
		echo " ${LIBS_GTK3}" >&2
		echo "or for" >&2
		echo " ${LIBS_GTK2}" >&2
		exit 1
	fi
fi

echo "Writing config.make."
(
cat <<EOF
DESTDIR=$DESTDIR
PREFIX=$PREFIX
GTK_VERSION=$GTK_VERSION
CROSS=$CROSS
EXECUTABLE_EXTENSION=$EXECUTABLE_EXTENSION
PKG_CONFIG=$PKG_CONFIG
EOF
if [ -n "$CFLAGS" ]; then
	echo "CFLAGS+=$CFLAGS"
fi
if [ -n "$MANDIR" ]; then
	echo "MANDIR=$MANDIR"
fi
) > config.make
[ -n "${CC}" ] && echo "CC=${CC}" >> config.make
echo
echo "Done. Run \`make install' to install pqiv."
exit 0
