From 9c7cb6f4965349a2fec0ec16056beff6b8c5d3ce Mon Sep 17 00:00:00 2001 From: Mike Fleetwood Date: Thu, 13 Nov 2014 20:53:54 +0000 Subject: [PATCH] Use pkg-config Autoconf check for libparted version first (#740004) Currently ./configure links and runs a program to query the libparted library version, which is used to determine the availability of some features. This makes cross-compiling harder because the compile host has to fake a virtual installation target in which to run the check. Because of this, pkg-config based Autoconf checks are preferred. Switch to using a pkg-config based Autoconf check first to determine the version of libparted, falling back to the previous method for older distributions which don't provide a pkg-config file for libparted. Also small comment tidy-up elsewhere. Bug 740004 - use pkg-config to check for version of libparted --- configure.ac | 50 +++++++++++++++++++++++++++++++++----------------- 1 file changed, 33 insertions(+), 17 deletions(-) diff --git a/configure.ac b/configure.ac index 37025b03..e1709bc3 100644 --- a/configure.ac +++ b/configure.ac @@ -43,14 +43,31 @@ AC_CHECK_LIB([dl], [dlopen], [], AC_MSG_ERROR([*** libdl not found.])) AC_CHECK_LIB([parted], [ped_device_read], [], AC_MSG_ERROR([*** libparted not found.])) -dnl Check for minimum required libparted version +dnl Check for minimum required libparted version. +dnl 1) Check using pkg-config. +dnl (Older distros tend to not provide pkg-config information for libparted). +dnl 2) Check by linking and running a program to report libparted version directly. LIBPARTED_REQUIRED_VERSION='1.7.1' -AC_MSG_CHECKING([for libparted >= $LIBPARTED_REQUIRED_VERSION]) +AC_MSG_CHECKING([for libparted >= $LIBPARTED_REQUIRED_VERSION (querying pkg-config)]) LIBPARTED_REQUIRED_INT=`echo "$LIBPARTED_REQUIRED_VERSION" | $AWK -F. '{print $1 * 10000 + $2 * 100 + $3}'` -AC_RUN_IFELSE( - [AC_LANG_SOURCE( - [[ +dnl 1) Check using pkg-config. +PKG_CHECK_EXISTS( + [libparted], + [LIBPARTED_FOUND_VERSION=`$PKG_CONFIG --modversion libparted` + LIBPARTED_FOUND_INT=`echo "$LIBPARTED_FOUND_VERSION" | + $AWK -F. '{print $1 * 10000 + $2 * 100 + $3}'` + AC_MSG_RESULT([$LIBPARTED_FOUND_VERSION]) + test "$LIBPARTED_FOUND_INT" -ge "$LIBPARTED_REQUIRED_INT" || + AC_MSG_ERROR([*** libparted too old. Require libparted >= $LIBPARTED_REQUIRED_VERSION but only found libparted $LIBPARTED_FOUND_VERSION.]) + ], + [AC_MSG_RESULT([not found]) + dnl 2) Check by linking and running a program to report libparted version + dnl directly. + AC_MSG_CHECKING([for libparted >= $LIBPARTED_REQUIRED_VERSION (querying libparted)]) + AC_RUN_IFELSE( + [AC_LANG_SOURCE( + [[ #include #include #include @@ -66,16 +83,17 @@ int main() printf("%s\n", version); return EXIT_SUCCESS; } - ]] - )], - dnl Run test program again to cache libparted version. - [LIBPARTED_FOUND_VERSION=`./conftest$EXEEXT` - LIBPARTED_FOUND_INT=`echo "$LIBPARTED_FOUND_VERSION" | - $AWK -F. '{print $1 * 10000 + $2 * 100 + $3}'` - test "$LIBPARTED_FOUND_INT" -ge "$LIBPARTED_REQUIRED_INT" || - AC_MSG_ERROR([*** libparted too old. Require libparted >= $LIBPARTED_REQUIRED_VERSION but only found libparted $LIBPARTED_FOUND_VERSION.]) - ], - [AC_MSG_ERROR([*** Error querying libparted version. Check config.log for details.])] + ]] + )], + dnl Run test program again to cache libparted version. + [LIBPARTED_FOUND_VERSION=`./conftest$EXEEXT` + LIBPARTED_FOUND_INT=`echo "$LIBPARTED_FOUND_VERSION" | + $AWK -F. '{print $1 * 10000 + $2 * 100 + $3}'` + test "$LIBPARTED_FOUND_INT" -ge "$LIBPARTED_REQUIRED_INT" || + AC_MSG_ERROR([*** libparted too old. Require libparted >= $LIBPARTED_REQUIRED_VERSION but only found libparted $LIBPARTED_FOUND_VERSION.]) + ], + [AC_MSG_ERROR([*** Error querying libparted version. Check config.log for details.])] + )] ) @@ -106,8 +124,6 @@ dnl NOTE: dnl For AC_CHECK_LIB the default action-if-found ($3) includes extending dnl LIBS with the newly found library ($1) thus: dnl LIBS="-l$1 $LIBS" -dnl If default action-if-found is overridden, LIBS is not extended when -dnl the library is found. dnl dnl As the default action-if-found is overridden, LIBS isn't extended so dnl saving and restoring LIBS isn't required.