From e64ef39d9ce89f73ce4a15fa1d0786b63342ad08 Mon Sep 17 00:00:00 2001 From: Michael Biebl Date: Fri, 22 Aug 2008 18:57:23 +0000 Subject: [PATCH] Refine check for dhcp client This commit is based on a patch by Roy Marples Refine the detection logic of the dhcp client to not require a installed dhcp client and be more backwards compatible: 1.) If no argument is given, first search for dhclient, then dhcpcd. If none is found, fall back to /sbin/dhclient (old behaviour) 2.) If either dhclient or dhcpcd is used as argument to --with-dhcp-client, search for the binary and the correct version. Fail if not found. 3.) If a complete path is given, do no search for the binary. Finally, check if the backend is either "dhclient" or "dhcpcd" and fail otherwise. git-svn-id: http://svn-archive.gnome.org/svn/NetworkManager/trunk@4002 4912f4e0-d625-0410-9fb7-b9a5a253dbdc --- configure.in | 38 ++++++++++++++++++++++++++++---------- 1 file changed, 28 insertions(+), 10 deletions(-) diff --git a/configure.in b/configure.in index 95737a030..b7aa4371d 100644 --- a/configure.in +++ b/configure.in @@ -338,7 +338,14 @@ AC_SUBST(PPPD_PLUGIN_DIR) # DHCP client AC_ARG_WITH([dhcp-client], AS_HELP_STRING([--with-dhcp-client=dhcpcd|dhclient], [path to the chosen dhcp client])) -if test "x$with_dhcp_client" = "x" || test x`basename "$with_dhcp_client"` = "xdhclient"; then +# If a full path is given, use that and do not test if it works or not. +case "${with_dhcp_client}" in + /*) + DHCP_CLIENT_PATH="${with_dhcp_client}" + AC_MSG_NOTICE(using the DHCP client ${DHCP_CLIENT_PATH}) + ;; +esac +if test -z "$DHCP_CLIENT_PATH" -a \( -z "$with_dhcp_client" -o x`basename "$with_dhcp_client"` = "xdhclient" \); then # We only work with ISC dhclient - the FreeBSD and OpenBSD derivatives don't have the same userland. AC_MSG_CHECKING(for dhclient) for client in "$with_dhcp_client" /sbin/dhclient /usr/pkg/sbin/dhclient /usr/local/sbin/dhclient; do @@ -347,15 +354,17 @@ if test "x$with_dhcp_client" = "x" || test x`basename "$with_dhcp_client"` = "xd "isc-dhclient-"*) DHCP_CLIENT_PATH="$client"; break;; esac done - if test "x$DHCP_CLIENT_PATH" = "x"; then + if test -z "$DHCP_CLIENT_PATH"; then AC_MSG_RESULT(no) - if test "x$with_dhcp_client" != "x"; then + if test -n "$with_dhcp_client"; then AC_MSG_ERROR([Could not find ISC dhclient]) fi + else + AC_MSG_RESULT($DHCP_CLIENT_PATH) fi - AC_MSG_RESULT($DHCP_CLIENT_PATH) fi -if test "x$with_dhcp_client" = "x" -a "x$DHCP_CLIENT_PATH" = "x" || test x`basename "$with_dhcp_client"` = "xdhcpcd"; then +if test -z "$DHCP_CLIENT_PATH" -a \( -z "$with_dhcp_client" -o x`basename "$with_dhcp_client"` = "xdhcpcd" \); then + test -n "$DHCP_CLIENT_PATH" && echo bar # We fully work with upstream dhcpcd-4 AC_MSG_CHECKING([for dhcpcd]) for client in "$with_dhcp_client" /sbin/dhcpcd /usr/pkg/sbin/dhcpcd /usr/local/sbin/dhcpcd; do @@ -365,19 +374,28 @@ if test "x$with_dhcp_client" = "x" -a "x$DHCP_CLIENT_PATH" = "x" || test x`basen "dhcpcd "*) DHCP_CLIENT_PATH="$client"; break;; esac done - if test "x$DHCP_CLIENT_PATH" = "x"; then + if test -z "$DHCP_CLIENT_PATH"; then AC_MSG_RESULT(no) - if test "x$with_dhcp_client" != "x"; then + if test -n "$with_dhcp_client"; then AC_MSG_ERROR([Could not find dhcpcd-4 or newer]) fi + else + AC_MSG_RESULT($DHCP_CLIENT_PATH) fi - AC_MSG_RESULT($DHCP_CLIENT_PATH) fi -if test "x$DHCP_CLIENT_PATH" = "x"; then - AC_MSG_ERROR([Could not find a suitable DHCP client]) +if test -z "$DHCP_CLIENT_PATH"; then + # DHCP clients are not a build time dependency, only runtime. + # dhclient has been the longtime default for NM and it's in /sbin + # in most distros, so use it. + AC_MSG_WARN([Could not find a suitable DHCP client]) + DHCP_CLIENT_PATH=/sbin/dhclient + AC_MSG_WARN([Falling back to ISC dhclient, ${DHCP_CLIENT_PATH}]) fi AC_SUBST(DHCP_CLIENT_PATH) DHCP_CLIENT=`basename "$DHCP_CLIENT_PATH"` +if test "$DHCP_CLIENT" != "dhclient" -a "$DHCP_CLIENT" != "dhcpcd"; then + AC_MSG_ERROR([No backend for the DHCP client ${DHCP_CLIENT}]) +fi AC_SUBST(DHCP_CLIENT) AC_ARG_ENABLE(more-warnings,