# Copyright © 2005 Scott James Remnant <scott@netsplit.com>
# Copyright © 2006-2009 Guillem Jover <guillem@debian.org>

# _DPKG_ARCHITECTURE([DEB_VAR], [sh_var])
# ---------------------------------------
# Use dpkg-architecture from the source tree to set sh_var using DEB_VAR for
# the target architecture, to avoid duplicating its logic.
AC_DEFUN([_DPKG_ARCHITECTURE], [
AC_REQUIRE([DPKG_PROG_PERL])dnl
AC_REQUIRE([AC_CANONICAL_HOST])dnl
$2=$(cd $srcdir/scripts; \
    PERL5LIB=$(pwd) $PERL dpkg-architecture.pl -t$host -q$1 2>/dev/null)
])# _DPKG_ARCHITECURE

# DPKG_CPU_TYPE
# -------------
# Parse the host cpu name and check it against the cputable to determine
# the Debian name for it.  Sets ARCHITECTURE_CPU.
AC_DEFUN([DPKG_CPU_TYPE],
[AC_MSG_CHECKING([dpkg cpu type])
_DPKG_ARCHITECTURE([DEB_HOST_ARCH_CPU], [cpu_type])
if test "x$cpu_type" = "x"; then
	cpu_type=$host_cpu
	AC_MSG_RESULT([$cpu_type])
	AC_MSG_WARN([$host_cpu not found in cputable])
else
	AC_MSG_RESULT([$cpu_type])
fi
AC_DEFINE_UNQUOTED(ARCHITECTURE_CPU, "${cpu_type}",
	[Set this to the canonical dpkg CPU name.])
])# DPKG_CPU_TYPE

# DPKG_OS_TYPE
# ------------
# Parse the host operating system name and check it against a list of
# special cases to determine what type it is.  Sets ARCHITECTURE_OS.
AC_DEFUN([DPKG_OS_TYPE],
[AC_MSG_CHECKING([dpkg operating system type])
_DPKG_ARCHITECTURE([DEB_HOST_ARCH_OS], [os_type])
if test "x$os_type" = "x"; then
	os_type=$host_os
	AC_MSG_RESULT([$os_type])
	AC_MSG_WARN([$host_os not found in ostable])
else
	AC_MSG_RESULT([$os_type])
fi
AC_DEFINE_UNQUOTED(ARCHITECTURE_OS, "${os_type}",
	[Set this to the canonical dpkg system name.])
])# DPKG_OS_TYPE

# DPKG_ARCHITECTURE
# ------------------------
# Determine the Debian name for the host operating system,
# sets ARCHITECTURE.
AC_DEFUN([DPKG_ARCHITECTURE],
[DPKG_CPU_TYPE
DPKG_OS_TYPE
AC_MSG_CHECKING([dpkg architecture name])
_DPKG_ARCHITECTURE([DEB_HOST_ARCH], [dpkg_arch])
if test "x$dpkg_arch" = "x"; then
	AC_MSG_ERROR([cannot determine host dpkg architecture])
else
	AC_MSG_RESULT([$dpkg_arch])
fi
AC_DEFINE_UNQUOTED(ARCHITECTURE, "${dpkg_arch}",
	[Set this to the canonical dpkg architecture name.])
])# DPKG_ARCHITECTURE
