# Process this file with autoconf to produce a configure script.
#
# Copyright (C) 2013, 2015, 2016, 2019  Patrick McDermott
#
# This file is part of the ProteanOS Development Kit.
#
# The ProteanOS Development Kit 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.
#
# The ProteanOS Development Kit 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 the ProteanOS Development Kit.  If not, see
# <http://www.gnu.org/licenses/>.

AC_INIT([ProteanOS Development Kit], [2.0.0],
	[mailto:proteanos-dev@lists.proteanos.com], [prokit],
	[http://www.proteanos.com/dev/prokit/])
AC_CONFIG_AUX_DIR([build-aux])
AC_CONFIG_SRCDIR([src/main.sh])

AM_INIT_AUTOMAKE([gnu check-news dist-bzip2 dist-xz subdir-objects])
AM_SILENT_RULES([yes])

AM_CONDITIONAL([IN_GIT],
	[test -d "${srcdir}/.git" && command -v git >/dev/null 2>&1])

AC_ARG_WITH(
	[sh],
	[AS_HELP_STRING([--with-sh], [POSIX-conformant shell with `local'])],
	dnl This `dnl' is needed to workaround Vim syntax highlighting.
	[
		case "${withval}" in
			'yes'|'')
				AC_MSG_ERROR([--with-sh requires an argument])
				;;
			'no')
				AC_MSG_ERROR([sh is required])
				;;
			*)
				SH="${withval}"
				AC_SUBST([SH])
				;;
		esac
	],
	[
		AC_PATH_PROG([SH], [sh])
		if test -z "${SH}"; then
			AC_MSG_ERROR([sh not found])
		fi
	]
)

AC_ARG_WITH(
	[wget],
	[AS_HELP_STRING([--with-wget=PATH], [path to wget utility])],
	[
		case "${withval}" in
			'yes'|'')
				AC_MSG_ERROR(
					[--with-wget requires an argument])
				;;
			'no')
				AC_MSG_ERROR([wget is required])
				;;
			*)
				WGET="${withval}"
				AC_SUBST([WGET])
				;;
		esac
	],
	[
		AC_PATH_PROG([WGET], [wget])
		if test -z "${WGET}"; then
			AC_MSG_ERROR([wget not found])
		fi
	]
)
AC_ARG_WITH(
	[gunzip],
	[AS_HELP_STRING([--with-gunzip=PATH], [path to gunzip utility])],
	[
		case "${withval}" in
			'yes'|'')
				AC_MSG_ERROR(
					[--with-gunzip requires an argument])
				;;
			'no')
				AC_MSG_ERROR([gunzip is required])
				;;
			*)
				GUNZIP="${withval}"
				AC_SUBST([GUNZIP])
				;;
		esac
	],
	[
		AC_PATH_PROG([GUNZIP], [gunzip])
		if test -z "${GUNZIP}"; then
			AC_MSG_ERROR([gunzip not found])
		fi
	]
)
AC_ARG_WITH(
	[md5sum],
	[AS_HELP_STRING([--with-md5sum=PATH], [path to md5sum utility])],
	[
		case "${withval}" in
			'yes'|'')
				AC_MSG_ERROR(
					[--with-md5sum requires an argument])
				;;
			'no')
				AC_MSG_ERROR([md5sum is required])
				;;
			*)
				MD5SUM="${withval}"
				AC_SUBST([MD5SUM])
				;;
		esac
	],
	[
		AC_PATH_PROG([MD5SUM], [md5sum])
		if test -z "${MD5SUM}"; then
			AC_MSG_ERROR([md5sum not found])
		fi
	]
)
AC_ARG_WITH(
	[sha256sum],
	[AS_HELP_STRING([--with-sha256sum=PATH], [path to sha256sum utility])],
	[
		case "${withval}" in
			'yes'|'')
				AC_MSG_ERROR(
					[--with-sha256sum requires an argument])
				;;
			'no')
				AC_MSG_ERROR([sha256sum is required])
				;;
			*)
				SHA256SUM="${withval}"
				AC_SUBST([SHA256SUM])
				;;
		esac
	],
	[
		AC_PATH_PROG([SHA256SUM], [sha256sum])
		if test -z "${SHA256SUM}"; then
			AC_MSG_ERROR([sha256sum not found])
		fi
	]
)
sbin_path="${PATH}${PATH_SEPARATOR}/sbin${PATH_SEPARATOR}/usr/sbin"
AC_ARG_WITH(
	[sfdisk],
	[AS_HELP_STRING([--with-sfdisk=PATH], [path to sfdisk utility])],
	[
		case "${withval}" in
			'yes'|'')
				AC_MSG_ERROR(
					[--with-sfdisk requires an argument])
				;;
			'no')
				HAVE_SFDISK=false
				;;
			*)
				SFDISK="${withval}"
				AC_SUBST([SFDISK])
				HAVE_SFDISK=true
				;;
		esac
	],
	[
		AC_PATH_PROG([SFDISK], [sfdisk], [], [${sbin_path}])
		if test -z "${SFDISK}"; then
			HAVE_SFDISK=false
		else
			HAVE_SFDISK=true
		fi
	]
)
AC_SUBST([HAVE_SFDISK])
AC_ARG_WITH(
	[fdisk],
	[AS_HELP_STRING([--with-fdisk=PATH], [path to fdisk utility])],
	[
		case "${withval}" in
			'yes'|'')
				AC_MSG_ERROR(
					[--with-fdisk requires an argument])
				;;
			'no')
				HAVE_FDISK=false
				;;
			*)
				FDISK="${withval}"
				AC_SUBST([FDISK])
				HAVE_FDISK=true
				;;
		esac
	],
	[
		if ! ${HAVE_SFDISK}; then
			AC_PATH_PROG([FDISK], [fdisk], [], [${sbin_path}])
			if test -z "${FDISK}"; then
				HAVE_FDISK=false
			else
				HAVE_FDISK=true
			fi
		else
			HAVE_FDISK=false
		fi
	]
)
AC_SUBST([HAVE_FDISK])
if ! ${HAVE_SFDISK} && ! ${HAVE_FDISK}; then
	AC_MSG_ERROR([sfdisk or fdisk is required])
fi
AC_ARG_WITH(
	[mke2fs],
	[AS_HELP_STRING([--with-mke2fs=PATH], [path to mke2fs utility])],
	[
		case "${withval}" in
			'yes'|'')
				AC_MSG_ERROR(
					[--with-mke2fs requires an argument])
				;;
			'no')
				AC_MSG_ERROR([mke2fs is required])
				;;
			*)
				MKE2FS="${withval}"
				AC_SUBST([MKE2FS])
				;;
		esac
	],
	[
		AC_PATH_PROG([MKE2FS], [mke2fs], [], [${sbin_path}])
		if test -z "${MKE2FS}"; then
			AC_MSG_ERROR([mke2fs not found])
		fi
	]
)
if ! ${MKE2FS} -V >/dev/null 2>&1; then
	AC_MSG_ERROR([mke2fs from the e2fsprogs package is required])
fi
AC_ARG_WITH(
	[cpio],
	[AS_HELP_STRING([--with-cpio=PATH], [path to cpio utility])],
	[
		case "${withval}" in
			'yes'|'')
				AC_MSG_ERROR(
					[--with-cpio requires an argument])
				;;
			'no')
				AC_MSG_ERROR([cpio is required])
				;;
			*)
				CPIO="${withval}"
				AC_SUBST([CPIO])
				;;
		esac
	],
	[
		AC_PATH_PROG([CPIO], [cpio])
		if test -z "${CPIO}"; then
			AC_MSG_ERROR([cpio not found])
		fi
	]
)
AC_ARG_WITH(
	[xz],
	[AS_HELP_STRING([--with-xz=PATH], [path to xz utility])],
	[
		case "${withval}" in
			'yes'|'')
				AC_MSG_ERROR(
					[--with-xz requires an argument])
				;;
			'no')
				AC_MSG_ERROR([xz is required])
				;;
			*)
				XZ="${withval}"
				AC_SUBST([XZ])
				;;
		esac
	],
	[
		AC_PATH_PROG([XZ], [xz])
		if test -z "${XZ}"; then
			AC_MSG_ERROR([xz not found])
		fi
	]
)
if ! ${XZ} -V 2>&1 | grep '^xz (XZ Utils) ' >/dev/null 2>&1; then
	AC_MSG_ERROR([xz from the XZ Utils package is required])
fi

#
# usign
#
AC_ARG_WITH(
	[system-usign],
	[AS_HELP_STRING([--with-system-usign[=PATH]], [use system usign])],
	[
		case "${withval}" in
			'yes'|'')
				AC_PATH_PROG([USIGN], [usign])
				if test -z "${USIGN}"; then
					AC_MSG_ERROR([usign not found])
				fi
				embedded_usign=false
				;;
			'no')
				embedded_usign=true
				;;
			*)
				USIGN="${withval}"
				AC_SUBST([USIGN])
				embedded_usign=false
				;;
		esac
	],
	[
		embedded_usign=true
	]
)
AC_ARG_WITH(
	[cmake],
	[AS_HELP_STRING([--with-cmake=PATH], [path to cmake utility])],
	[
		if ${embedded_usign}; then
			case "${withval}" in
				'yes'|'')
					AC_MSG_ERROR([--with-cmake requires an
						argument])
					;;
				'no')
					AC_MSG_ERROR([cmake is required])
					;;
				*)
					CMAKE="${withval}"
					AC_SUBST([CMAKE])
					;;
			esac
		fi
	],
	[
		if ${embedded_usign}; then
			AC_PATH_PROG([CMAKE], [cmake])
			if test -z "${CMAKE}"; then
				AC_MSG_ERROR([cmake not found])
			fi
		fi
	]
)
if ${embedded_usign}; then
	AS_MKDIR_P([3rdparty/usign])
	abs_srcdir="$(cd "${srcdir}" && pwd)"
	(
		cd 3rdparty/usign
		"${CMAKE}" -DUSE_LIBUBOX:BOOL=OFF "${abs_srcdir}/3rdparty/usign"
	)
fi
AM_CONDITIONAL([EMBEDDED_USIGN], [${embedded_usign}])

AC_CONFIG_FILES([Makefile])
AC_CONFIG_FILES([config.sh])
AC_OUTPUT()