dnl 
dnl configure.ac for kexec-tools
dnl 
dnl 

dnl ---Required
AC_INIT(kexec-tools, 2.0.18-rc1)
AC_CONFIG_AUX_DIR(./config)
AC_CONFIG_HEADERS([include/config.h])
AC_LANG(C)
AC_PROG_CC


dnl -- Compilation platform configuration
dnl -- the host specifices the host machine for the kexec binary, the
dnl -- the target specifies the architecture of the kernel to be kexeced.
AC_CANONICAL_HOST
AC_CANONICAL_TARGET

dnl Compute ARCH from target cpu info
case $target_cpu in
	i?86 )
		ARCH="i386"
		;;
	powerpc )
		ARCH="ppc"
		SUBARCH="BE"
		;;
	powerpc64 )
		ARCH="ppc64"
		SUBARCH="BE"
		;;
	powerpc64le )
		ARCH="ppc64"
		SUBARCH="LE"
		;;
	aarch64* )
		ARCH="arm64"
		;;
	arm* )
		ARCH="arm"
		;;
	s390x|s390 )
		ARCH="s390"
		;;
	sh4|sh4a|sh3|sh )
		ARCH="sh"
		;;
	mips* )
		ARCH="mips"
		;;
	cris|crisv32 )
		ARCH="cris"
		;;
	ia64|x86_64|alpha|m68k )
		ARCH="$target_cpu"
		;;
	* )
		AC_MSG_ERROR([unsupported architecture $target_cpu])
		;;
esac

dnl ---Options

OBJDIR=`pwd`/objdir
if test "${host_alias}" ; then
	OBJDIR="$OBJDIR-${host_alias}"
fi

if test "x$BUILD_CFLAGS" = "x" ; then
	BUILD_CFLAGS='-O2 -Wall'
fi

if test "x$TARGET_CFLAGS" = "x" ; then
	TARGET_CFLAGS='-O2 -Wall'
fi

AC_ARG_WITH([objdir], AC_HELP_STRING([--with-objdir=<dir>],[select directory for object files]),
	[ OBJDIR="$withval" ], [ OBJDIR="$OBJDIR" ])

AC_ARG_WITH([gamecube],
		AC_HELP_STRING([--with-gamecube],[enable gamecube support]),
		AC_DEFINE(WITH_GAMECUBE, 1,
			[Define to include gamecube support]))

AC_ARG_WITH([zlib], AC_HELP_STRING([--without-zlib],[disable zlib support]),
	[ with_zlib="$withval"], [ with_zlib=yes ] )

AC_ARG_WITH([lzma], AC_HELP_STRING([--without-lzma],[disable lzma support]),
	[ with_lzma="$withval"], [ with_lzma=yes ] )

AC_ARG_WITH([xen], AC_HELP_STRING([--without-xen],
	[disable extended xen support]), [ with_xen="$withval"], [ with_xen=yes ] )

AC_ARG_WITH([booke],
		AC_HELP_STRING([--with-booke],[build for booke]),
		AC_DEFINE(CONFIG_BOOKE,1,
			[Define to build for BookE]))

dnl ---Programs
dnl To specify a different compiler, just 'export CC=/path/to/compiler'
if test "${build}" != "${host}" ; then
	AC_CHECK_PROGS(BUILD_CC, [${build_alias}-gcc ${build}-gcc gcc])
else
	BUILD_CC="$CC"
fi

dnl Find the compiler tool chain
AC_PROG_CPP
AC_CHECK_TOOL([LD], ld, "no", $PATH)
AC_CHECK_TOOL([AS], as, "no", $PATH)
AC_CHECK_TOOL([OBJCOPY], objcopy, "no", $PATH)
AC_CHECK_TOOL([AR], ar, "", $PATH)
AC_CHECK_TOOL([STRIP], strip, "no", $PATH)

dnl Find compiler for target
if test "${target}" != "${host}" ; then
	AC_CHECK_PROGS(TARGET_CC, [${target_alias}-gcc ${target}-gcc gcc])
	AC_CHECK_PROGS(TARGET_LD, [${target_alias}-ld ${target}-ld ld])
else
	TARGET_CC="$CC"
	TARGET_LD="$LD"
fi

AC_MSG_CHECKING([whether $TARGET_CC accepts -fno-zero-initialized-in-bss])
saved_CFLAGS="$CFLAGS"
saved_CC="$CC"
CC="$TARGET_CC"
CFLAGS="$CFLAGS -fno-zero-initialized-in-bss"
AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,,)],
		  PURGATORY_EXTRA_CFLAGS="-fno-zero-initialized-in-bss"
		  AC_MSG_RESULT([Yes]), AC_MSG_RESULT([No]))
CFLAGS="$saved_CFLAGS"
CC="$saved_CC"

AC_SUBST(PURGATORY_EXTRA_CFLAGS, [$PURGATORY_EXTRA_CFLAGS])

dnl Find the helper functions
AC_PROG_INSTALL
AC_CHECK_PROG([MKDIR],    mkdir,    mkdir,    "no", [$PATH])
AC_CHECK_PROG([RM],       rm,       rm,       "no", [$PATH])
AC_CHECK_PROG([CP],       cp,       cp,       "no", [$PATH])
AC_CHECK_PROG([LN],       ln,       ln,       "no", [$PATH])
AC_CHECK_PROG([TAR],      tar,      tar,      "no", [$PATH])
AC_CHECK_PROG([RPMBUILD], rpmbuild, rpmbuild, "no", [$PATH])
AC_CHECK_PROG([SED],      sed,      sed,      "no", [$PATH])
AC_CHECK_PROG([FIND],     find,     find,     "no", [$PATH])
AC_CHECK_PROG([XARGS],    xargs,    xargs,    "no", [$PATH])
AC_CHECK_PROG([DIRNAME],  dirname,  dirname,  "no", [$PATH])

dnl See if I have a usable copy of zlib available
if test "$with_zlib" = yes ; then
	AC_CHECK_HEADER(zlib.h,
		[AC_CHECK_LIB(z, inflateInit_, ,
		AC_MSG_NOTICE([zlib support disabled]))])
fi

dnl See if I have a usable copy of lzma available
if test "$with_lzma" = yes ; then
	AC_CHECK_HEADER(lzma.h,
		[AC_CHECK_LIB(lzma, lzma_code, ,
		AC_MSG_NOTICE([lzma support disabled]))])
fi

dnl find Xen control stack libraries
if test "$with_xen" = yes ; then
	AC_CHECK_HEADER(xenctrl.h,
		[AC_CHECK_LIB(xenctrl, xc_kexec_load, ,
		AC_MSG_NOTICE([Xen support disabled]))])
fi

dnl Link libxenctrl.so at run-time rather than build-time
if test "$with_xen" = dl ; then
	AC_CHECK_HEADER(dlfcn.h,
		[AC_CHECK_LIB(dl, dlopen, ,
			AC_MSG_ERROR([Dynamic library linking not available]))],
		AC_MSG_ERROR([Dynamic library linking header not available]))
	AC_DEFINE(CONFIG_LIBXENCTRL_DL, 1, [Define to 1 to link libxenctrl.so at run-time rather than build-time])
	AC_CHECK_HEADER(xenctrl.h,
		[AC_CHECK_LIB(xenctrl, xc_kexec_load,
		AC_DEFINE(HAVE_LIBXENCTRL, 1, ), # required define, and prevent -lxenctrl
		AC_MSG_NOTICE([Xen support disabled]))])
fi

dnl Check for the Xen kexec_status hypercall - reachable from --with-xen=yes|dl
if test "$ac_cv_lib_xenctrl_xc_kexec_load" = yes ; then
	AC_CHECK_LIB(xenctrl, xc_kexec_status,
		AC_DEFINE(HAVE_KEXEC_CMD_STATUS, 1,
			[The kexec_status call is available]),
		AC_MSG_NOTICE([The kexec_status call is not available]))
fi

dnl ---Sanity checks
if test "$CC"      = "no"; then AC_MSG_ERROR([cc not found]); fi
if test "$CPP"     = "no"; then AC_MSG_ERROR([cpp not found]); fi
if test "$LD"      = "no"; then AC_MSG_ERROR([ld not found]); fi
if test "$AS"      = "no"; then AC_MSG_ERROR([as not found]); fi
if test "$OBJCOPY" = "no"; then	AC_MSG_ERROR([objcopy not found]); fi
if test "$AR"      = "no"; then	AC_MSG_ERROR([ar not found]); fi

if test "$MKDIR"   = "no"; then AC_MSG_ERROR([ mkdir not found]); fi
if test "$RM"      = "no"; then AC_MSG_ERROR([ rm not found]); fi
if test "$CP"      = "no"; then AC_MSG_ERROR([ cp not found]); fi
if test "$LN"      = "no"; then AC_MSG_ERROR([ ln not found]); fi
if test "$TAR"     = "no"; then AC_MSG_ERROR([ tar not found]); fi
if test "$RPM"     = "no"; then AC_MSG_ERROR([ rpm not found]); fi
if test "$SED"     = "no"; then AC_MSG_ERROR([ sed not found]); fi
if test "$FIND"    = "no"; then AC_MSG_ERROR([ find not found]); fi
if test "$XARGS"   = "no"; then AC_MSG_ERROR([ xargs not found]); fi
if test "$DIRNAME" = "no"; then AC_MSG_ERROR([ dirname not found]); fi
if test "$STRIP"   = "no"; then AC_MSG_ERROR([ strip not found]); fi

dnl ---Output variables...
AC_SUBST([BUILD_CC])
AC_SUBST([BUILD_CFLAGS])
AC_SUBST([TARGET_CC])
AC_SUBST([TARGET_LD])
AC_SUBST([TARGET_CFLAGS])
AC_SUBST([ASFLAGS])

AC_SUBST([ARCH])
AC_SUBST([SUBARCH])
AC_SUBST([OBJDIR])
AC_SUBST([INSTALL])

dnl ---Output
AC_OUTPUT([Makefile])
