summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDan McGee <dan@archlinux.org>2008-04-19 12:36:18 -0500
committerDan McGee <dan@archlinux.org>2008-04-19 16:18:17 -0500
commit7a873a8f1284058c968c5d8026fbde7867913cb5 (patch)
treebcb53ded41e969fc17955cbc459d632a832415f0
parent64e1dd64a4512a5faa34e6007e64314569593522 (diff)
downloadpacman-7a873a8f1284058c968c5d8026fbde7867913cb5.tar.xz
Give libalpm native support for both libdownload and libfetch
This should remove the need for any additional patching to run on platforms that have libfetch available but not libdownload. It isn't the prettiest, but we have kept our libdownload impact down to just a few files, so it can be easily done. Signed-off-by: Dan McGee <dan@archlinux.org>
-rw-r--r--configure.ac9
-rw-r--r--lib/libalpm/dload.c21
-rw-r--r--lib/libalpm/error.c18
3 files changed, 41 insertions, 7 deletions
diff --git a/configure.ac b/configure.ac
index aeec3f15..27efd170 100644
--- a/configure.ac
+++ b/configure.ac
@@ -145,20 +145,23 @@ AC_CHECK_LIB([archive], [archive_read_data], ,
AC_MSG_ERROR([libarchive is needed to compile pacman!]))
# Enable or disable usage of libdownload/libfetch
+# - this is a nested check- first see if we need a library, if we do then
+# check for libdownload first, then fallback to libfetch, then die
AC_MSG_CHECKING(whether to link with download library)
if test "x$internaldownload" = "xyes" ; then
AC_MSG_RESULT(yes)
AC_DEFINE([INTERNAL_DOWNLOAD], , [Use internal download library])
- # Check for libdownload if it was actually requested
+ # Check for a download library if it was actually requested
AC_CHECK_LIB([download], [downloadParseURL], ,
- AC_MSG_ERROR([libdownload is needed to compile pacman!]))
+ AC_CHECK_LIB([fetch], [fetchParseURL], ,
+ AC_MSG_ERROR([libdownload or libfetch are needed to compile with internal download support])) )
else
AC_MSG_RESULT(no)
fi
AM_CONDITIONAL(INTERNAL_DOWNLOAD, test "x$internaldownload" = "xyes")
# Checks for header files.
-AC_CHECK_HEADERS([fcntl.h libintl.h limits.h locale.h string.h strings.h sys/ioctl.h sys/statvfs.h sys/time.h syslog.h wchar.h])
+AC_CHECK_HEADERS([fcntl.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])
# Checks for typedefs, structures, and compiler characteristics.
AC_C_INLINE
diff --git a/lib/libalpm/dload.c b/lib/libalpm/dload.c
index 0977eea0..44acec70 100644
--- a/lib/libalpm/dload.c
+++ b/lib/libalpm/dload.c
@@ -24,8 +24,25 @@
#include <errno.h>
#include <string.h>
#include <unistd.h>
-#if defined(INTERNAL_DOWNLOAD)
-#include <download.h> /* libdownload */
+#include <limits.h>
+/* the following two are needed on BSD for libfetch */
+#if defined(HAVE_SYS_SYSLIMITS_H)
+#include <sys/syslimits.h> /* PATH_MAX */
+#endif
+#if defined(HAVE_SYS_PARAM_H)
+#include <sys/param.h> /* MAXHOSTNAMELEN */
+#endif
+
+#if defined(HAVE_LIBDOWNLOAD)
+#include <download.h>
+#elif defined(HAVE_LIBFETCH)
+#include <fetch.h>
+#define downloadFreeURL fetchFreeURL
+#define downloadLastErrCode fetchLastErrCode
+#define downloadLastErrString fetchLastErrString
+#define downloadParseURL fetchParseURL
+#define downloadTimeout fetchTimeout
+#define downloadXGet fetchXGet
#endif
/* libalpm */
diff --git a/lib/libalpm/error.c b/lib/libalpm/error.c
index 30e9cf86..7c30cd09 100644
--- a/lib/libalpm/error.c
+++ b/lib/libalpm/error.c
@@ -19,8 +19,22 @@
#include "config.h"
-#if defined(INTERNAL_DOWNLOAD)
+/* TODO: needed for the libfetch stuff, unfortunately- we should kill it */
+#include <stdio.h>
+#include <limits.h>
+/* the following two are needed on BSD for libfetch */
+#if defined(HAVE_SYS_SYSLIMITS_H)
+#include <sys/syslimits.h> /* PATH_MAX */
+#endif
+#if defined(HAVE_SYS_PARAM_H)
+#include <sys/param.h> /* MAXHOSTNAMELEN */
+#endif
+
+#if defined(HAVE_LIBDOWNLOAD)
#include <download.h> /* downloadLastErrString */
+#elif defined(HAVE_LIBFETCH)
+#include <fetch.h> /* fetchLastErrString */
+#define downloadLastErrString fetchLastErrString
#endif
/* libalpm */
@@ -145,7 +159,7 @@ const char SYMEXPORT *alpm_strerror(int err)
return downloadLastErrString;
#else
/* obviously shouldn't get here... */
- return _("libdownload error");
+ return _("download library error");
#endif
case PM_ERR_EXTERNAL_DOWNLOAD:
return _("error invoking external downloader");