#!/bin/sh

DEPSFILE='.deps'

SRCS='api.c'

function help {
	log 'usage: configure [-h] [-p prefix]'
	log ''
	log 'command line options'
	log '	-h	show this help message'
	log '	-p	set the installation prefix, override PREFIX'
	log ' '
	log 'environment variables'
	log '	PREFIX	Installation prefix path. Default /usr/local'
	log '	CC	C compiler to use. Default cc'
	log '	CFLAGS	Compiler flags.'
	log '	COPTS	Compiler options.'
	log '	LDFLAGS	Linker flags.'
}

function log {
	echo "${@}" >&2
}

function logn {
	echo -n "${@}" >&2
}

function checkbzero {
	logn 'checking for explicit_bzero... '
	_name='explicit_bzero'
	_files='/usr/include/string.h /usr/include/strings.h'
	if grep ${_name} ${_files} >/dev/null 2>/dev/null; then
		MACROS="${MACROS} -D_HAVE_EXPLICIT_BZERO_"
		log 'use system version'
	else
		SRCS="${SRCS} explicit_bzero.c"
		log 'use embedded copy'
	fi

}

function checkstrlcpy {
	logn 'checking for strlcpy... '
	if grep strlcpy /usr/include/string.h >/dev/null 2>/dev/null; then
		MACROS="${MACROS} -D_HAVE_STRLCPY_"
		log 'use system version'
	else
		SRCS="${SRCS} strlcpy.c"
		log 'use embedded copy'
	fi
}

function checkreallocarray {
	logn 'checking for reallocarray... '
	if grep reallocarray /usr/include/stdlib.h >/dev/null 2>/dev/null; then
		MACROS="${MACROS} -D_HAVE_REALLOCARRAY_"
		log 'use system version'
	else
		SRCS="${SRCS} reallocarray.c"
		log 'use embedded copy'
	fi
}

function checkfreezero {
	logn 'checking for freezero... '
	if grep freezero /usr/include/stdlib.h >/dev/null 2>/dev/null; then
		MACROS="${MACROS} -D_HAVE_FREEZERO_"
		log 'use system version'
	else
		log 'use embedded copy'
	fi
}

function checkman {
	logn 'checking for mandoc... '
	case $(uname) in
	OpenBSD|FreeBSD)
		MAN=libapi.3
		log 'use the mandoc man page'
		;;
	*)
		MAN=man/libapi.3
		log 'use the traditional man page'
		;;
	esac
}

while getopts 'h' _flag; do
	case ${_flag} in
	h)
		help
		exit 0
		;;
	p)
		PREFIX=${OPTARG}
		;;
	?)
		help >&2
		exit 1
		;;
	esac
done

log 'checking for missing functions'

checkbzero
checkstrlcpy
checkfreezero
checkreallocarray
checkman

>.deps
for _f in ${SRCS}; do
	OBJS="${OBJS} ${_f%%.c}.o"

	echo "${_f%%.c}.o: ${_f}"
	echo "	${CC:-cc} -c ${CFLAGS} ${COPTS} ${MACROS} ${_f}"
	echo
done >>.deps

m4 -DM4OBJS="${OBJS}" -DM4LDFLAGS="${LDFLAGS}" \
    -DM4PREFIX=${PREFIX:-/usr/local} -DM4MAN=${MAN} Makefile.m4 >Makefile

log 'done'
