#!/bin/bash
# Simple configure script for pqiv
# Running this script before make'ing is optional but recommended

OPTIONS=( "no-sorting"		"Disable sorting of loaded files"		"-DNO_SORTING"		"lib/strnatcmp.c"
          "no-compositing"	"Disable support for transparent windows"	"-DNO_COMPOSITING"	""
	  "no-fading"		"Disable support for fading images"		"-DNO_FADING"		""
	  "no-commands"		"Disable support for external command execution" "-DNO_COMMANDS"	""
	  "no-config-file"	"Disable support for a configuration file"	"-DNO_CONFIG_FILE"	""
	  "no-inotify"		"Disable support for file monitoring"		"-DNO_INOTIFY"		""
	  "no-animations"	"Disable support for animations"                "-DNO_ANIMATIONS"       ""
	)

# Load settings from Makefile
eval $(head -n 10 Makefile | grep -E '^[A-Z_]+=' | sed -re 's/=(.+)/="\1"/')

# Handle parameters
help() {
	cat <<EOF
pqiv configuration

options:
  --prefix=..           Set the prefix for installed files
  --destdir=..          Set the destdir for installed files (for package maintainers)
  --binary-name=..	Rename the binary (default: qiv)
EOF
	for INDEX in $(seq 0 4 $[${#OPTIONS[*]} - 1]); do
		echo -n "  --${OPTIONS[$INDEX]}"
		for n in $(seq $[20 - ${#OPTIONS[$INDEX]}]); do
			echo -n " "
		done
		echo ${OPTIONS[$[$INDEX + 1]]}
	done
	echo
	exit
}
POSSIBLES=""
for INDEX in $(seq 0 4 ${#OPTIONS[*]}); do
	POSSIBLES="${POSSIBLES},${OPTIONS[$INDEX]}"
done
PARAMETERS=$(getopt -q -l "prefix:,binary-name:,destdir:,help${POSSIBLES}" -o "h" -- "$@")
eval set -- ${PARAMETERS//\//\\/}
CHANGES=""
OPTIONFLAGS=""
for INDEX in $(seq 0 4 ${#OPTIONS[*]}); do
	if echo "$@" | grep -q -- "--${OPTIONS[$INDEX]}"; then
		OPTIONFLAGS="${OPTIONFLAGS} ${OPTIONS[$[$INDEX + 2]]}"
	else
		OPTIONFLAGS="${OPTIONFLAGS} ${OPTIONS[$[$INDEX + 3]]}"
	fi
done
while [ $# -gt 0 ]; do
	PARAMETER=$1;
	case ${PARAMETER} in
		--prefix)
			if [ "${2:0:2}" != "\/" ]; then
				echo "PREFIX must be an absolute pathname"
				exit 1
			fi
			CHANGES="${CHANGES} -e 's/^PREFIX=.*/PREFIX=\"$2\"/'"
			shift
			;;
		--destdir)
			if [ "${2:0:2}" != "\/" ]; then
				echo "DESTDIR must be an absolute pathname"
				exit 1
			fi
			CHANGES="${CHANGES} -e 's/^DESTDIR=.*/DESTDIR=\"$2\"/'"
			shift
			;;
		--binary-name)
			CHANGES="${CHANGES} -e 's/^BINARY_NAME=.*/BINARY_NAME=\"$2\"/'"
			shift
			;;
		--)
			break
			;;
		-h)
			help
			;;
		--help)
			help
			;;
	esac
	shift
done

# Check for inotify support
echo -n "Checking for inotify...        "
TEST_INOTIFY=$(tempfile -s .c)
TEST_INOTIFY_EXEC=$(tempfile)
cat > ${TEST_INOTIFY} <<EOF
#include <sys/inotify.h>
int main(int argc, char* argv[]) { inotify_init(); return 0; }
EOF
if cc -o ${TEST_INOTIFY_EXEC} ${TEST_INOTIFY}  > /dev/null 2>&1; then
	echo "ok"
else
	echo "unsupported. Enforcing --no-inotify"
	if echo "${OPTIONFLAGS}" | grep -vq "NO_INOTIFY"; then
		OPTIONFLAGS+="-DNO_INOTIFY"
	fi
fi
rm -f ${TEST_INOTIFY} ${TEST_INOTIFY_EXEC}

# Check tools
for TOOL in install pkg-config; do
	echo -n "Checking for ${TOOL}..."
	for n in $(seq $[15 - ${#TOOL}]); do echo -n " "; done
	which ${TOOL} &>/dev/null
	if [ $? == 0 ]; then
		echo "ok"
	else
		echo "failed"
		echo
		echo "Please install ${TOOL}"
		exit 1
	fi
done

# Check dependencies
for PACKAGE in ${REQUIRED_PACKAGES}; do
	echo -n "Checking for ${PACKAGE}..."
	for n in $(seq $[15 - ${#PACKAGE}]); do echo -n " "; done
	pkg-config ${PACKAGE}
	if [ $? == 0 ]; then
		echo "ok"
	else
		echo "failed"
		echo
		pkg-config --print-errors ${PACKAGE}
		exit 1
	fi
done

# Check headers
echo -n "Checking for headers...        "
TEST_INCLUDES=$(tempfile -s .c)
TEST_INCLUDES_EXEC=$(tempfile)
TEST_ERROR_FILE=$(tempfile)
sed -e '/}}}/q' pqiv.c > ${TEST_INCLUDES}
cat >> ${TEST_INCLUDES} <<EOF
int main(int argc, char* argv[]) { return 0; }
EOF
if
(
	cc "-I$(pwd)" ${CFLAGS} $(pkg-config --libs --cflags ${REQUIRED_PACKAGES}) ${OPTIONFLAGS} -o ${TEST_INCLUDES_EXEC} ${TEST_INCLUDES} 2>&1 && \
	${TEST_INCLUDES_EXEC} 2>&1
) > ${TEST_ERROR_FILE}
then
	echo "ok"
else
	echo "failed"
	echo
	echo "Error message:"
	cat ${TEST_ERROR_FILE}
	rm -f ${TEST_INCLUDES} ${TEST_INCLUDES_EXEC} ${TEST_ERROR_FILE}
	exit 1
fi
rm -f ${TEST_INCLUDES} ${TEST_INCLUDES_EXEC} ${TEST_ERROR_FILE}

# Change stuff in Makefile
if [ "${CHANGES}" != "" ]; then
	echo -n "Updating Makefile...           "
	eval sed -i -r ${CHANGES} Makefile &>/dev/null
	if [ "$?" == 0 ]; then
		echo "ok"
	else
		echo "failed"
		echo
		echo "Please update Makefile manually and report this as a bug!"
		exit 1
	fi
fi
sed -i -r "s#^OPTIONFLAGS=.*#OPTIONFLAGS=${OPTIONFLAGS}#" Makefile #&>/dev/null

# Reload settings and output
eval $(head -n 10 Makefile | egrep '^[A-Z_]+=' | sed -re 's/=(.+)/="\1"/')
echo
echo "Destdir:                       ${DESTDIR}"
echo "Prefix:                        ${PREFIX}"
echo "Binary-name:                   ${BINARY_NAME}"
echo
echo -e "Done. Run \033[1mmake all install\033[22m to install pqiv."
exit 0
