[pacman-dev] [PATCH 3/3] Clean up libfetch checking in configure

Dan McGee dan at archlinux.org
Thu Sep 2 13:30:54 EDT 2010


Model it after the new OpenSSL check, and have it be a bit more useful. If
you do not explicitly pass a command line option, it will be linked if
available but will not error out if it is missing. Also bump the version to
that where connection caching was introduced as we use these new features in
the codebase.

Signed-off-by: Dan McGee <dan at archlinux.org>
---
 configure.ac        |   34 ++++++++++++++++------------------
 lib/libalpm/alpm.c  |    6 +++---
 lib/libalpm/dload.c |    6 +++---
 lib/libalpm/error.c |    4 ++--
 4 files changed, 24 insertions(+), 26 deletions(-)

diff --git a/configure.ac b/configure.ac
index e0aafba..4341f1f 100644
--- a/configure.ac
+++ b/configure.ac
@@ -94,9 +94,9 @@ AC_ARG_WITH(openssl,
 	[], [with_openssl=check])
 
 # Help line for libfetch
-AC_ARG_ENABLE(internal-download,
-	AS_HELP_STRING([--disable-internal-download], [do not build with libfetch support]),
-	[internaldownload=$enableval], [internaldownload=yes])
+AC_ARG_WITH(fetch,
+	AS_HELP_STRING([--with-fetch], [use libfetch as an internal downloader]),
+	[], [with_fetch=check])
 
 # Help line for documentation
 AC_ARG_ENABLE(doc,
@@ -150,21 +150,20 @@ AM_CONDITIONAL([HAVE_LIBSSL], [test "x$ac_cv_lib_ssl_MD5_Final" = "xyes"])
 
 # Enable or disable usage of libfetch
 AC_MSG_CHECKING(whether to link with libfetch)
-if test "x$internaldownload" = "xyes" ; then
-	AC_MSG_RESULT(yes)
-	AC_DEFINE([INTERNAL_DOWNLOAD], , [Use internal download library])
-	# Check for a download library if it was actually requested
+AS_IF([test "x$with_fetch" = "xyes"],
+	[AC_MSG_RESULT(yes)
 	AC_CHECK_LIB([fetch], [fetchParseURL], ,
-		AC_MSG_ERROR([libfetch is needed to compile with internal download support]), [-lcrypto -ldl] )
-	# Check if libfetch supports conditional GET
-	# (version >=2.21, struct url has member last_modified)
-	AC_CHECK_MEMBER(struct url.last_modified, ,
-		AC_MSG_ERROR([libfetch must be version 2.21 or greater]),
-		[#include <fetch.h>] )
-else
-	AC_MSG_RESULT(no)
-fi
-AM_CONDITIONAL(INTERNAL_DOWNLOAD, test "x$internaldownload" = "xyes")
+	[if test "x$with_fetch" != "xcheck"; then
+		AC_MSG_FAILURE([--with-fetch was given, but -lfetch was not found])
+	fi],
+	[-lcrypto -ldl])
+	# Check if libfetch supports connnection caching which we use
+	AC_CHECK_DECL(fetchConnectionCacheInit, ,
+		AC_MSG_ERROR([libfetch must be version 2.28 or greater]),
+		[#include <fetch.h>])
+	],
+	AC_MSG_RESULT(no))
+AM_CONDITIONAL([HAVE_LIBFETCH], [test "x$ac_cv_lib_fetch_fetchParseURL" = "xyes"])
 
 # Checks for header files.
 AC_CHECK_HEADERS([fcntl.h glob.h libintl.h limits.h locale.h string.h strings.h sys/ioctl.h sys/param.h sys/statvfs.h sys/syslimits.h sys/time.h syslog.h wchar.h])
@@ -406,7 +405,6 @@ ${PACKAGE_NAME}:
 
   Compilation options:
     Run make in doc/ dir   : ${wantdoc} ${asciidoc}
-    Use download library   : ${internaldownload}
     Doxygen support        : ${usedoxygen}
     debug support          : ${debug}
 "
diff --git a/lib/libalpm/alpm.c b/lib/libalpm/alpm.c
index 7bcfc8f..6f4f4a4 100644
--- a/lib/libalpm/alpm.c
+++ b/lib/libalpm/alpm.c
@@ -24,7 +24,7 @@
 #include "config.h"
 
 /* connection caching setup */
-#if defined(INTERNAL_DOWNLOAD)
+#ifdef HAVE_FETCH
 #include <fetch.h>
 #endif
 
@@ -59,7 +59,7 @@ int SYMEXPORT alpm_initialize(void)
 	bindtextdomain("libalpm", LOCALEDIR);
 #endif
 
-#ifdef INTERNAL_DOWNLOAD
+#ifdef HAVE_FETCH
 	fetchConnectionCacheInit(5, 1);
 #endif
 
@@ -82,7 +82,7 @@ int SYMEXPORT alpm_release(void)
 	_alpm_handle_free(handle);
 	handle = NULL;
 
-#ifdef INTERNAL_DOWNLOAD
+#ifdef HAVE_FETCH
 	fetchConnectionCacheClose();
 #endif
 
diff --git a/lib/libalpm/dload.c b/lib/libalpm/dload.c
index 3185d2a..32096e2 100644
--- a/lib/libalpm/dload.c
+++ b/lib/libalpm/dload.c
@@ -38,7 +38,7 @@
 #include <sys/param.h> /* MAXHOSTNAMELEN */
 #endif
 
-#if defined(INTERNAL_DOWNLOAD)
+#ifdef HAVE_FETCH
 #include <fetch.h>
 #endif
 
@@ -58,7 +58,7 @@ static char *get_filename(const char *url) {
 	return(filename);
 }
 
-#if defined(INTERNAL_DOWNLOAD)
+#ifdef HAVE_FETCH
 static char *get_destfile(const char *path, const char *filename) {
 	char *destfile;
 	/* len = localpath len + filename len + null */
@@ -338,7 +338,7 @@ cleanup:
 static int download(const char *url, const char *localpath,
 		int force) {
 	if(handle->fetchcb == NULL) {
-#if defined(INTERNAL_DOWNLOAD)
+#ifdef HAVE_FETCH
 		return(download_internal(url, localpath, force));
 #else
 		RET_ERR(PM_ERR_EXTERNAL_DOWNLOAD, -1);
diff --git a/lib/libalpm/error.c b/lib/libalpm/error.c
index 8d8d045..b64ee67 100644
--- a/lib/libalpm/error.c
+++ b/lib/libalpm/error.c
@@ -31,7 +31,7 @@
 #include <sys/param.h> /* MAXHOSTNAMELEN */
 #endif
 
-#if defined(INTERNAL_DOWNLOAD)
+#ifdef HAVE_FETCH
 #include <fetch.h> /* fetchLastErrString */
 #endif
 
@@ -145,7 +145,7 @@ const char SYMEXPORT *alpm_strerror(int err)
 			 * error string instead. */
 			return _("libarchive error");
 		case PM_ERR_LIBFETCH:
-#if defined(INTERNAL_DOWNLOAD)
+#ifdef HAVE_FETCH
 			return fetchLastErrString;
 #else
 			/* obviously shouldn't get here... */
-- 
1.7.2.2



More information about the pacman-dev mailing list