From 45a4d4292cf103bf13165441663c5800da1f01fa Mon Sep 17 00:00:00 2001 From: Guy Harris Date: Fri, 26 Apr 2019 13:15:39 -0700 Subject: Use pkg-config if we can. Clean up some CMake stuff. If we have pkg-config, *and* it has .pc files for libpcap, use it to get the C compiler flags and linker flags for libpcap. find_library() sets a cache variable; when we're looping over libraries, trying to find their full paths, we really want the variable to act as a local variable, as we're looking up different libraries, so unset it after we're finished processing a particular library. When we're searching for static libraries, save the current value of CMAKE_FIND_LIBRARY_SUFFIXES, set it to ".a", and then restore it when we're done. Don't use cmake_push_check_state() for that, as CMAKE_FIND_LIBRARY_SUFFIXES is *not* one of the variables that it's guaranteed to save and restore. --- configure | 231 +++++++++++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 190 insertions(+), 41 deletions(-) (limited to 'configure') diff --git a/configure b/configure index 16a3ac0b..afd5fb5a 100755 --- a/configure +++ b/configure @@ -636,6 +636,7 @@ DEPENDENCY_CFLAG AR RANLIB PCAP_CONFIG +PKG_CONFIG LIBOBJS EGREP GREP @@ -5357,9 +5358,156 @@ fi if test $using_local_libpcap = no ; then # # We didn't find a local libpcap. - # Look for an installed pcap-config. + # Look for an installed pkg-config. # if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. +set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_PKG_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +PKG_CONFIG=$ac_cv_path_PKG_CONFIG +if test -n "$PKG_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 +$as_echo "$PKG_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_path_PKG_CONFIG"; then + ac_pt_PKG_CONFIG=$PKG_CONFIG + # Extract the first word of "pkg-config", so it can be a program name with args. +set dummy pkg-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $ac_pt_PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG +if test -n "$ac_pt_PKG_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 +$as_echo "$ac_pt_PKG_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_pt_PKG_CONFIG" = x; then + PKG_CONFIG="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + PKG_CONFIG=$ac_pt_PKG_CONFIG + fi +else + PKG_CONFIG="$ac_cv_path_PKG_CONFIG" +fi + + if test -n "$PKG_CONFIG" ; then + # + # We have it. Are there .pc files for libpcap? + # + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether there are .pc files for libpcap" >&5 +$as_echo_n "checking whether there are .pc files for libpcap... " >&6; } + if "$PKG_CONFIG" libpcap --exists ; then + # + # Yes, so we can use pkg-config to get configuration + # information for libpcap. + # + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + pkg_config_usable=yes + else + # + # No, so we can't use pkg-config to get configuration + # information for libpcap. + # + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + pkg_config_usable=no + fi + else + # + # We don't have it, so we obviously can't use it. + # + pkg_config_usable=no + fi + if test "$pkg_config_usable" = "yes" ; then + # + # Found both - use pkg-config to get the include flags for + # libpcap and the flags to link with libpcap. + # + # Please read section 11.6 "Shell Substitutions" + # in the autoconf manual before doing anything + # to this that involves quoting. Especially note + # the statement "There is just no portable way to use + # double-quoted strings inside double-quoted back-quoted + # expressions (pfew!)." + # + cflags=`"$PKG_CONFIG" libpcap --cflags` + V_INCLS="$cflags $V_INCLS" + libpcap=`"$PKG_CONFIG" libpcap --libs` + else + # + # No pkg-config + # Look for an installed pcap-config. + # + if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pcap-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pcap-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 @@ -5457,26 +5605,26 @@ else PCAP_CONFIG="$ac_cv_path_PCAP_CONFIG" fi - if test -n "$PCAP_CONFIG" ; then - # - # Found - use it to get the include flags for - # libpcap and the flags to link with libpcap. - # - # Please read section 11.6 "Shell Substitutions" - # in the autoconf manual before doing anything - # to this that involves quoting. Especially note - # the statement "There is just no portable way to use - # double-quoted strings inside double-quoted back-quoted - # expressions (pfew!)." - # - cflags=`"$PCAP_CONFIG" --cflags` - V_INCLS="$cflags $V_INCLS" - libpcap=`"$PCAP_CONFIG" --libs` - else - # - # Not found; look for an installed pcap. - # - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lpcap" >&5 + if test -n "$PCAP_CONFIG" ; then + # + # Found - use it to get the include flags for + # libpcap and the flags to link with libpcap. + # + # Please read section 11.6 "Shell Substitutions" + # in the autoconf manual before doing anything + # to this that involves quoting. Especially note + # the statement "There is just no portable way to use + # double-quoted strings inside double-quoted back-quoted + # expressions (pfew!)." + # + cflags=`"$PCAP_CONFIG" --cflags` + V_INCLS="$cflags $V_INCLS" + libpcap=`"$PCAP_CONFIG" --libs` + else + # + # Not found; look for an installed pcap. + # + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lpcap" >&5 $as_echo_n "checking for main in -lpcap... " >&6; } if ${ac_cv_lib_pcap_main+:} false; then : $as_echo_n "(cached) " >&6 @@ -5510,26 +5658,27 @@ if test "x$ac_cv_lib_pcap_main" = xyes; then : libpcap="-lpcap" fi - if test $libpcap = FAIL ; then - as_fn_error $? "see the INSTALL doc for more info" "$LINENO" 5 - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for extraneous pcap header directories" >&5 + if test $libpcap = FAIL ; then + as_fn_error $? "see the INSTALL doc for more info" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for extraneous pcap header directories" >&5 $as_echo_n "checking for extraneous pcap header directories... " >&6; } - if test \( ! -r /usr/local/include/pcap.h \) -a \ - \( ! -r /usr/include/pcap.h \); then - if test -r /usr/local/include/pcap/pcap.h; then - d="/usr/local/include/pcap" - elif test -r /usr/include/pcap/pcap.h; then - d="/usr/include/pcap" + if test \( ! -r /usr/local/include/pcap.h \) -a \ + \( ! -r /usr/include/pcap.h \); then + if test -r /usr/local/include/pcap/pcap.h; then + d="/usr/local/include/pcap" + elif test -r /usr/include/pcap/pcap.h; then + d="/usr/include/pcap" + fi fi - fi - if test -z "$d" ; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 + if test -z "$d" ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 $as_echo "not found" >&6; } - else - V_INCLS="-I$d $V_INCLS" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: found -- -I$d added" >&5 + else + V_INCLS="-I$d $V_INCLS" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: found -- -I$d added" >&5 $as_echo "found -- -I$d added" >&6; } + fi fi fi else @@ -5630,11 +5779,11 @@ fi fi fi - if test -z "$PCAP_CONFIG"; then + if test -z "$PKG_CONFIG" -a -z "$PCAP_CONFIG"; then # - # We don't have pcap-config; find out any additional link flags - # we need. (If we have pcap-config, we assume it tells us what - # we need.) + # We don't have pkg-config or pcap-config; find out any additional + # link flags we need. (If we have pkg-config or pcap-config, we + # assume it tells us what we need.) # case "$host_os" in -- cgit v1.2.1