dnl Process this file with autoconf to produce a configure script.
AC_INIT(ethtool, 5.3, netdev@vger.kernel.org)
AC_PREREQ(2.52)
AC_CONFIG_SRCDIR([ethtool.c])
AM_INIT_AUTOMAKE([gnu])
AC_CONFIG_HEADERS([ethtool-config.h])

AM_MAINTAINER_MODE

dnl Checks for programs.
AC_PROG_CC
AC_PROG_GCC_TRADITIONAL
AM_PROG_CC_C_O
PKG_PROG_PKG_CONFIG

dnl Checks for libraries.

dnl Checks for header files.

dnl Checks for typedefs, structures, and compiler characteristics.
AC_MSG_CHECKING([whether <linux/types.h> defines big-endian types])
AC_TRY_COMPILE([#include <linux/types.h>],
	       [__be16 foo;__be32 bar;],
	       [AC_MSG_RESULT(yes)
		AC_DEFINE([HAVE_BE_TYPES], [1],
			  [Define to 1 if <linux/types.h> defines big-endian types])],
	       [AC_MSG_RESULT(no)])

dnl Checks for library functions.
AC_HEADER_STDC
AC_CHECK_FUNCS(socket strtol)

dnl Check for options
AC_ARG_ENABLE(pretty-dump,
	      [  --enable-pretty-dump	  enable registers, EEPROM and SFP pretty dumps (enabled by default)],
	      ,
	      enable_pretty_dump=yes)
if test x$enable_pretty_dump = xyes; then
    AC_DEFINE(ETHTOOL_ENABLE_PRETTY_DUMP, 1,
	      [Define this to enable register, EEPROM and SFP pretty dumps.])
fi
AM_CONDITIONAL([ETHTOOL_ENABLE_PRETTY_DUMP], [test x$enable_pretty_dump = xyes])

AC_ARG_WITH([bash-completion-dir],
	    AS_HELP_STRING([--with-bash-completion-dir[=PATH]],
	                   [Install the bash-completion script in this directory. @<:@default=yes@:>@]),
	    [],
	    [with_bash_completion_dir=yes])
AS_IF([test "x$with_bash_completion_dir" = xyes],
      [AC_MSG_CHECKING([for bash-completion directory])
       dnl Attempt to use pkg-config completionsdir variable with given $prefix.
       dnl This matches distcheck expectation that all files install to $prefix.
       dnl It works with /usr and /usr/local (for default $XDG_DATA_DIRS) but
       dnl may install to directory not used by bash-completion in other cases.
       dnl See: https://lore.kernel.org/netdev/20190417025333.GA28674@kevinolos/
       AS_IF([test "x$PKG_CONFIG" != x \
	      && bash_completion_prefix=`"$PKG_CONFIG" --print-errors --variable=prefix bash-completion 2>&AS_MESSAGE_LOG_FD` \
	      && bash_completion_dir=`"$PKG_CONFIG" --print-errors --variable=completionsdir bash-completion 2>&AS_MESSAGE_LOG_FD`],
	     [bash_completion_dir="${bash_completion_dir#"$bash_completion_prefix"}"
	      bash_completion_dir="${bash_completion_dir#/}"
	      BASH_COMPLETION_DIR='${prefix}'/"$bash_completion_dir"],
	     [BASH_COMPLETION_DIR='${datadir}/bash-completion/completions'])
       AC_MSG_RESULT([$BASH_COMPLETION_DIR])],
      [BASH_COMPLETION_DIR="$with_bash_completion_dir"])
AC_SUBST([BASH_COMPLETION_DIR])
AM_CONDITIONAL([ENABLE_BASH_COMPLETION],
	       [test "x$with_bash_completion_dir" != xno])

AC_CONFIG_FILES([Makefile ethtool.spec ethtool.8])
AC_OUTPUT
