#! /bin/sh
#
# opkhelper
# configure
# Configuration script to generate Makefile.
#
# Copyright (C) 2012 Patrick "P. J." McDermott
#
# 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 3 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, see <http://www.gnu.org/licenses/>.

PACKAGE='opkhelper'
VERSION='1.0.0'

print_usage()
{
	printf 'Usage: %s [OPTION]...\n' "$1"
}

print_help()
{
	cat <<EOF
\`configure' configures ${PACKAGE} ${VERSION} to adapt to many kinds of systems.

$(print_usage "${1}")

Configuration:
  -h, --help            display this help and exit
  -V, --version         display version information and exit
  -q, --quiet           do not print \`checking ...' messages
      --srcdir=SRCDIR   find the scripts in SRCDIR
                        default: configure dir

Installation directories:
  --prefix=PREFIX       install files under PREFIX
                        default: /usr/local
  --bindir=BINDIR       install scripts in BINDIR
                        default: PREFIX/bin
  --libdir=LIBDIR       install library scripts in LIBDIR
                        default: PREFIX/lib
  --datadir=DATADIR     expect to find data in DATADIR
                        default: PREFIX/share
  --mandir=MANDIR       install manual pages in MANDIR
                        default: PREFIX/share/man
EOF
}

print_version()
{
	cat <<EOF
${PACKAGE} ${VERSION} configure
Not generated by GNU Autoconf

Copyright (C) 2011-2012 Patrick "P. J." McDermott
License: GNU GPL version 3 or later <http://www.gnu.org/licenses/gpl.html>.
This configure script is free software: you can redistribute and/or modify it.
There is NO WARRANTY, to the extent permitted by law.
EOF
}

opts=$(getopt -n "${0}" -o 'hVq' -l 'help,version,quiet' \
	-l 'srcdir:,prefix:,bindir:,libdir:,mandir:' -- "${@}")
if [ ${?} -ne 0 ]; then
	print_usage "${0}" >&2
	exit 1;
fi
eval set -- "${opts}"
while true; do
	case "${1}" in
		-h|--help)
			print_help "${0}"
			exit 0
			;;
		-V|--version)
			print_version
			exit 0
			;;
		-q|--quiet)
			QUIET=true
			shift
			;;
		--srcdir)
			SRCDIR="${2}"
			shift 2
			;;
		--prefix)
			PREFIX="${2}"
			shift 2
			;;
		--bindir)
			# Leave PREFIX unexpanded for now, in case it isn't set yet.
			BINDIR="\${PREFIX}/${2}"
			shift 2
			;;
		--libdir)
			# Leave PREFIX unexpanded for now, in case it isn't set yet.
			LIBDIR="\${PREFIX}/${2}"
			shift 2
			;;
		--datadir)
			# Leave PREFIX unexpanded for now, in case it isn't set yet.
			DATADIR="\${PREFIX}/${2}"
			shift 2
			;;
		--mandir)
			# Leave PREFIX unexpanded for now, in case it isn't set yet.
			MANDIR="\${PREFIX}/${2}"
			shift 2
			;;
		--)
			shift
			break
			;;
		*)
			print_usage "${0}" >&2
			exit 1
			;;
	esac
done

if [ -z "${QUIET}" ]; then
	QUIET=false
fi

if [ -z "${SRCDIR}" ]; then
	SRCDIR=$(dirname "${0}")
fi
# Make SRCDIR an absolute path if it isn't already.
SRCDIR=$(cd ${SRCDIR} && pwd)
if [ -z "${PREFIX}" ]; then
	PREFIX=/usr/local
fi
if [ -z "${BINDIR}" ]; then
	BINDIR=${PREFIX}/bin
fi
if [ -z "${LIBDIR}" ]; then
	LIBDIR=${PREFIX}/lib
fi
if [ -z "${DATADIR}" ]; then
	DATADIR=${PREFIX}/share
fi
if [ -z "${MANDIR}" ]; then
	MANDIR=${PREFIX}/share/man
fi
# Expand PREFIX if it's there.
eval "BINDIR=${BINDIR}"
eval "LIBDIR=${LIBDIR}"
eval "DATADIR=${DATADIR}"
eval "MANDIR=${MANDIR}"

find_dependency()
{
	dep=${1}
	var=${2}
	shift 2

	${QUIET} || printf 'checking for %s... ' "${dep}"

	while [ ${#} -gt 0 ]; do
		if [ -f "${1}/${dep}" ]; then
			${QUIET} || printf '%s/%s\n' "${1}" "${dep}"
			eval "${var}=${1}/${dep}"
			return 0
		fi
		shift
	done

	${QUIET} || printf 'not found\n'
	missing_dependencies=true
	return 1
}

missing_dependencies=false

find_dependency sh SHELL /bin
find_dependency install INSTALL /usr/bin
find_dependency make MAKE /usr/bin

if ${missing_dependencies}; then
	printf '\nSome dependencies could not be found.\n'
	printf 'Please make sure all dependencies are installed and try again.\n\n'
	exit 1
fi

sed_script="
s&@shell@&${SHELL}&
s&@install@&${INSTALL} -c&
s&@make@&${MAKE}&
s&@srcdir@&${SRCDIR}&
s&@prefix@&${PREFIX}&
s&@bindir@&${BINDIR}&
s&@libdir@&${LIBDIR}&
s&@datadir@&${DATADIR}&
s&@mandir@&${MANDIR}&
s&@package@&${PACKAGE}&
s&@version@&${VERSION}&"

# Replace configuration variables in Makefile.in
mkdir -p src lib man
sed "$sed_script" ${SRCDIR}/Makefile.in > Makefile
sed "$sed_script" ${SRCDIR}/src/Makefile.in > src/Makefile
sed "$sed_script" ${SRCDIR}/lib/Makefile.in > lib/Makefile
sed "$sed_script" ${SRCDIR}/man/Makefile.in > man/Makefile

printf '\nConfiguration complete!\n\n'