From ebde5406d1699ce968a52df0078a1a15dce92c64 Mon Sep 17 00:00:00 2001 From: Markham Date: Sat, 4 Jun 2022 22:30:08 +0200 Subject: [PATCH] update djmount patches --- .../0011-fix-build-with-gettext-0.20.x.patch | 21 ++++ .../djmount-fix-hang-with-asset-upnp.patch | 27 +++++ ...nge-when-retrieving-content-via-HTTP.patch | 26 ++++ .../djmount/djmount-fix-new-autotools.patch | 33 +++++ .../djmount/djmount-fix-newer-gcc.patch | 13 ++ ...fixed-crash-when-using-UTF-8-charset.patch | 26 ++++ .../djmount/djmount-fixed-crash.patch | 26 ++++ .../djmount-support-fstab-mounting.patch | 96 +++++++++++++++ ...t-support-seeking-in-large-2gb-files.patch | 114 ++++++++++++++++++ make/applications.mk | 27 ++++- make/archives.mk | 2 +- 11 files changed, 404 insertions(+), 7 deletions(-) create mode 100644 archive-patches/djmount/0011-fix-build-with-gettext-0.20.x.patch create mode 100644 archive-patches/djmount/djmount-fix-hang-with-asset-upnp.patch create mode 100644 archive-patches/djmount/djmount-fix-incorrect-range-when-retrieving-content-via-HTTP.patch create mode 100644 archive-patches/djmount/djmount-fix-new-autotools.patch create mode 100644 archive-patches/djmount/djmount-fix-newer-gcc.patch create mode 100644 archive-patches/djmount/djmount-fixed-crash-when-using-UTF-8-charset.patch create mode 100644 archive-patches/djmount/djmount-fixed-crash.patch create mode 100644 archive-patches/djmount/djmount-support-fstab-mounting.patch create mode 100644 archive-patches/djmount/djmount-support-seeking-in-large-2gb-files.patch diff --git a/archive-patches/djmount/0011-fix-build-with-gettext-0.20.x.patch b/archive-patches/djmount/0011-fix-build-with-gettext-0.20.x.patch new file mode 100644 index 0000000..b3f4bee --- /dev/null +++ b/archive-patches/djmount/0011-fix-build-with-gettext-0.20.x.patch @@ -0,0 +1,21 @@ +--- a/configure.ac ++++ b/configure.ac +@@ -17,7 +17,7 @@ AC_CONFIG_MACRO_DIR(m4) + + AC_CONFIG_SRCDIR(djmount/djfs.c) + +-AM_INIT_AUTOMAKE([1.9 -Wall std-options gnu]) ++AM_INIT_AUTOMAKE([1.9 -Wall subdir-objects std-options gnu foreign]) + + AC_CONFIG_HEADERS(config.h) + +@@ -191,7 +191,8 @@ if test x"$enable_charset" = xyes; then + # Checks for function in C library or libiconv + # (AM macros from "gettext" package) + AM_ICONV +- AM_LANGINFO_CODESET ++# AM_LANGINFO_CODESET ++ AM_GNU_GETTEXT([external]) + # TBD print warning if no setlocale or nl_langinfo(CODESET) implemented + fi + AM_CONDITIONAL(WANT_ICONV, diff --git a/archive-patches/djmount/djmount-fix-hang-with-asset-upnp.patch b/archive-patches/djmount/djmount-fix-hang-with-asset-upnp.patch new file mode 100644 index 0000000..f91b71d --- /dev/null +++ b/archive-patches/djmount/djmount-fix-hang-with-asset-upnp.patch @@ -0,0 +1,27 @@ +From b4ef6638dcd47703079f1d55519dbfdad44b9cee Mon Sep 17 00:00:00 2001 +Message-Id: +From: Yonathan Yusim +Date: Wed, 4 Jan 2012 16:07:07 +0200 +Subject: [PATCH] fix hang with asset upnp + +--- + djmount/device_list.c | 2 ++ + 1 files changed, 2 insertions(+), 0 deletions(-) + +diff --git a/djmount/device_list.c b/djmount/device_list.c +index b5c2103..22beb01 100644 +--- a/djmount/device_list.c ++++ b/djmount/device_list.c +@@ -230,7 +230,9 @@ DeviceList_RemoveDevice (const char* deviceId) + ListDelNode (&GlobalDeviceList, node, /*freeItem=>*/ 0); + // Do the notification while the global list is still locked + NotifyUpdate (E_DEVICE_REMOVED, devnode); ++ ithread_mutex_unlock (&DeviceListMutex); + talloc_free (devnode); ++ ithread_mutex_lock (&DeviceListMutex); + } else { + Log_Printf (LOG_WARNING, "RemoveDevice can't find Id=%s", + NN(deviceId)); +-- +1.7.3.4 + diff --git a/archive-patches/djmount/djmount-fix-incorrect-range-when-retrieving-content-via-HTTP.patch b/archive-patches/djmount/djmount-fix-incorrect-range-when-retrieving-content-via-HTTP.patch new file mode 100644 index 0000000..c4c3ee0 --- /dev/null +++ b/archive-patches/djmount/djmount-fix-incorrect-range-when-retrieving-content-via-HTTP.patch @@ -0,0 +1,26 @@ +From ebb90c54d9af735f9561aefeb1e0959e29d6ea95 Mon Sep 17 00:00:00 2001 +Message-Id: +From: striper +Date: Sun, 2 Dec 2012 17:33:03 +0100 +Subject: [PATCH] - fix incorrect range when retrieving content via HTTP + +--- + djmount/file_buffer.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/djmount/file_buffer.c b/djmount/file_buffer.c +index 80a9e34..9d3e8ae 100644 +--- a/djmount/file_buffer.c ++++ b/djmount/file_buffer.c +@@ -199,7 +199,7 @@ FileBuffer_Read (FileBuffer* file, char* buffer, + int rc = UpnpOpenHttpGetEx (file->url, &handle, + &contentType, &contentLength, + &httpStatus, +- offset, offset + size, ++ offset, offset + size - 1, + HTTP_DEFAULT_TIMEOUT + ); + if (rc != UPNP_E_SUCCESS) +-- +1.7.3.4 + diff --git a/archive-patches/djmount/djmount-fix-new-autotools.patch b/archive-patches/djmount/djmount-fix-new-autotools.patch new file mode 100644 index 0000000..00c7435 --- /dev/null +++ b/archive-patches/djmount/djmount-fix-new-autotools.patch @@ -0,0 +1,33 @@ +commit e505f2db5ea8f449d413f8a74453a7668a78a156 +Author: Mattia Barbon +Date: Sat May 21 20:37:45 2011 +0200 + + Fixes for new autotools versions. + +diff --git a/configure.ac b/configure.ac +index dd9dbfd..762f0df 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -13,9 +13,7 @@ AC_INIT(djmount, 0.71, r3mi@users.sourceforge.net) + + # share auxiliary files with sub-configure in "libupnp" + AC_CONFIG_AUX_DIR(libupnp/config.aux) +-AC_CONFIG_MACRO_DIR(libupnp/m4) + AC_CONFIG_MACRO_DIR(m4) +-AC_CONFIG_MACRO_DIR(gl/m4) + + AC_CONFIG_SRCDIR(djmount/djfs.c) + +diff --git a/libupnp/m4/rt_bool_arg_enable.m4 b/libupnp/m4/rt_bool_arg_enable.m4 +index efed41a..71bd7e8 100644 +--- a/libupnp/m4/rt_bool_arg_enable.m4 ++++ b/libupnp/m4/rt_bool_arg_enable.m4 +@@ -34,7 +34,7 @@ AC_DEFUN([RT_BOOL_ARG_ENABLE],[ + )]) + test "x$enable_[$1]" != [x]m4_if([$2],[yes],[no],[yes]) dnl + && enable_[]Name=[$2] +- AC_MSG_RESULT($enable_[]Name)dnl ++ AC_MSG_RESULT($enable_[]Name) + AM_CONDITIONAL([ENABLE_]NAME, test x"$enable_[]Name" = xyes) + dnl + m4_popdef([NAME])dnl diff --git a/archive-patches/djmount/djmount-fix-newer-gcc.patch b/archive-patches/djmount/djmount-fix-newer-gcc.patch new file mode 100644 index 0000000..2526fca --- /dev/null +++ b/archive-patches/djmount/djmount-fix-newer-gcc.patch @@ -0,0 +1,13 @@ +diff --git a/libupnp/upnp/src/genlib/net/http/webserver.c b/libupnp/upnp/src/genlib/net/http/webserver.c +index f5dc1c9..70c7993 100644 +--- a/libupnp/upnp/src/genlib/net/http/webserver.c ++++ b/libupnp/upnp/src/genlib/net/http/webserver.c +@@ -280,7 +280,7 @@ search_extension( IN const char *extension, + * 0 - On Sucess + * UPNP_E_OUTOF_MEMORY - on memory allocation failures + ************************************************************************/ +-XINLINE int ++static XINLINE int + get_content_type( IN const char *filename, + OUT DOMString * content_type ) + { diff --git a/archive-patches/djmount/djmount-fixed-crash-when-using-UTF-8-charset.patch b/archive-patches/djmount/djmount-fixed-crash-when-using-UTF-8-charset.patch new file mode 100644 index 0000000..b0cf110 --- /dev/null +++ b/archive-patches/djmount/djmount-fixed-crash-when-using-UTF-8-charset.patch @@ -0,0 +1,26 @@ +From 5ee82020984ada3c20c523490f637bba3fc08b79 Mon Sep 17 00:00:00 2001 +Message-Id: <5ee82020984ada3c20c523490f637bba3fc08b79.1354462423.git.striper@gmx.de> +From: Yonathan Yusim +Date: Tue, 23 Aug 2011 17:33:21 +0300 +Subject: [PATCH] fixed crash when using UTF-8 charset + +--- + djmount/charset.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/djmount/charset.c b/djmount/charset.c +index 993fac0..4c255ca 100644 +--- a/djmount/charset.c ++++ b/djmount/charset.c +@@ -491,7 +491,7 @@ Charset_Finish() + for (i = 0; i < NB_CONVERTERS; i++) { + Converter* const cvt = g_converters + i; + ithread_mutex_destroy (&cvt->mutex); +- if (iconv_close (cvt->cd)) ++ if (cvt->cd != (iconv_t)-1 && iconv_close (cvt->cd)) + rc = errno; + cvt->cd = (iconv_t) -1; + } +-- +1.7.3.4 + diff --git a/archive-patches/djmount/djmount-fixed-crash.patch b/archive-patches/djmount/djmount-fixed-crash.patch new file mode 100644 index 0000000..788db02 --- /dev/null +++ b/archive-patches/djmount/djmount-fixed-crash.patch @@ -0,0 +1,26 @@ +From 5057f1332e02d9c2582b5887ff7bb4ba28060903 Mon Sep 17 00:00:00 2001 +Message-Id: <5057f1332e02d9c2582b5887ff7bb4ba28060903.1354464698.git.striper@gmx.de> +From: Yonathan Yusim +Date: Mon, 4 Jul 2011 17:34:12 +0300 +Subject: [PATCH] fixed crash + +--- + djmount/device_list.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/djmount/device_list.c b/djmount/device_list.c +index b3cb08f..b5c2103 100644 +--- a/djmount/device_list.c ++++ b/djmount/device_list.c +@@ -426,7 +426,7 @@ AddDevice (const char* deviceId, + } else { + // If SSDP target specified, check that the device + // matches it. +- if (strstr (g_ssdp_target, ":service:")) { ++ if (g_ssdp_target && strstr (g_ssdp_target, ":service:")) { + const Service* serv = Device_GetServiceFrom + (devnode->d, g_ssdp_target, + FROM_SERVICE_TYPE, false); +-- +1.7.3.4 + diff --git a/archive-patches/djmount/djmount-support-fstab-mounting.patch b/archive-patches/djmount/djmount-support-fstab-mounting.patch new file mode 100644 index 0000000..551bac4 --- /dev/null +++ b/archive-patches/djmount/djmount-support-fstab-mounting.patch @@ -0,0 +1,96 @@ +Description: Support /etc/fstab mounting +Forwarded: https://sourceforge.net/tracker/?func=detail&aid=3514280&group_id=142039&atid=751317 +Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=660098 +Author: Kevin Vargo +Last-Update: 2012-04-02 +--- djmount-0.71.orig/djmount/fuse_main.c 2006-08-27 16:12:20.000000000 -0400 ++++ djmount-0.71/djmount/fuse_main.c 2011-12-23 15:39:29.000000000 -0500 +@@ -529,6 +529,7 @@ + " --version print version number, then exit\n" + " -o [options] mount options (see below)\n" + " -d[levels] enable debug output (implies -f)\n" ++ " -s sloppy -- ignore unknown options\n" + " -f foreground operation (default: daemonized)\n" + "\n" + "Mount options (one or more comma separated options) :\n" +@@ -538,6 +539,7 @@ + " playlists use playlists for AV files, instead of plain files\n" + " search_history= number of remembered searches (default: %d)\n" + " (set to 0 to disable search)\n" ++ " sloppy ignore unknown options (e.g., for /etc/fstab)\n" + "\n", DEFAULT_SEARCH_HISTORY_SIZE); + fprintf + (stream, +@@ -635,6 +637,9 @@ + Log_Printf (LOG_DEBUG, " Fuse option = %s", fuse_argv[fuse_argc]); \ + fuse_argc++ + ++ //Ignore unknown options "sloppy" -- mount -s ++ bool options_sloppy = false; ++ + int opt = 1; + char* o; + while ((o = argv[opt++])) { +@@ -646,6 +651,9 @@ + + } else if (strcmp(o, "-f") == 0) { + background = false; ++ ++ } else if (strcmp(o, "-s") == 0) { ++ options_sloppy = true; + + } else if (*o != '-') { + // mount point +@@ -657,6 +665,10 @@ + char* options_copy = strdup (options); + char* tokptr = 0; + char* s; ++ ++ char** unknown_options = talloc_size(tmp_ctx, sizeof(char) * strlen(options_copy)); ++ int unknown_ptr = -1; ++ + for (s = strtok_r (options_copy, ",", &tokptr); + s != NULL; + s = strtok_r (NULL, ",", &tokptr)) { +@@ -669,16 +681,39 @@ + } else if (strncmp(s, "search_history=", 15) + == 0) { + search_history_size = atoi (s+15); ++ //check for '-s|-o sloppy' -- ignore unknown options ++ } else if (strncmp(s, "sloppy", 15) == 0 || ++ (strlen(s) == 1 && strncmp(s, "s", 1) == 0)) { ++ options_sloppy = true; + } else if (strncmp(s, "fsname=", 7) == 0 || + strstr (FUSE_ALLOWED_OPTIONS, s)) { + FUSE_ARG ("-o"); + FUSE_ARG (talloc_strdup (tmp_ctx, s)); + } else { ++ //Record unknown options for analysis, after we're sure ++ //we don't see '-o sloppy' ++ unknown_options[++unknown_ptr] = strdup(s); ++ } ++ } ++ ++ //Now, we should know if we have invalid option(s), or can ++ //ignore: ++ if (unknown_ptr >= 0) { ++ //If debug... ++ int i = 0; ++ for (i = 0; i <= unknown_ptr; i++) { ++ Log_Printf (LOG_WARNING, "Found unknown option = %s%s", ++ unknown_options[i], (options_sloppy ? "; ignoring" : "")); ++ } ++ //If 'sloppy' is not enabled... ++ if (! options_sloppy) { + bad_usage (argv[0], +- "unknown mount option '%s'", +- s); // ----------> ++ "unknown mount option '%s' (and [-s|-o sloppy] not provided)", ++ unknown_options[0]); // ----------> + } + } ++ talloc_free(unknown_options); ++ + free (options_copy); + Log_Printf (LOG_INFO, " Mount options = %s", options); + diff --git a/archive-patches/djmount/djmount-support-seeking-in-large-2gb-files.patch b/archive-patches/djmount/djmount-support-seeking-in-large-2gb-files.patch new file mode 100644 index 0000000..58dc64e --- /dev/null +++ b/archive-patches/djmount/djmount-support-seeking-in-large-2gb-files.patch @@ -0,0 +1,114 @@ +From fbe644e0d4abebee4c5d7459efe6791504e0fe18 Mon Sep 17 00:00:00 2001 +Message-Id: +From: Yonathan Yusim +Date: Wed, 31 Aug 2011 18:46:47 +0300 +Subject: [PATCH] support seeking in large > 2gb files + +--- + djmount/file_buffer.h | 2 +- + djmount/media_file.c | 2 +- + libupnp/upnp/inc/upnp.h | 4 ++-- + libupnp/upnp/src/api/upnpapi.c | 4 ++-- + libupnp/upnp/src/genlib/net/http/httpreadwrite.c | 6 +++--- + libupnp/upnp/src/inc/httpreadwrite.h | 4 ++-- + 6 files changed, 11 insertions(+), 11 deletions(-) + +diff --git a/djmount/file_buffer.h b/djmount/file_buffer.h +index 215e017..9434efb 100644 +--- a/djmount/file_buffer.h ++++ b/djmount/file_buffer.h +@@ -60,7 +60,7 @@ typedef struct _FileBuffer FileBuffer; + * + *****************************************************************************/ + +-#define FILE_BUFFER_MAX_CONTENT_LENGTH ((uintmax_t) INT_MAX) ++#define FILE_BUFFER_MAX_CONTENT_LENGTH ((uintmax_t) ~0ULL) + + + /***************************************************************************** +diff --git a/djmount/media_file.c b/djmount/media_file.c +index 44b4ffe..761f715 100644 +--- a/djmount/media_file.c ++++ b/djmount/media_file.c +@@ -284,7 +284,7 @@ MediaFile_GetResSize (const MediaFile* const file) + { + const char* const str = ixmlElement_getAttribute (file->res, "size"); + off_t res; +- STRING_TO_INT (str, res, -1); ++ STRING_TO_INT (str, res, 8ULL * 1024 * 1024 * 1024); + return res; + } + +diff --git a/libupnp/upnp/inc/upnp.h b/libupnp/upnp/inc/upnp.h +index aac43ee..34cb188 100644 +--- a/libupnp/upnp/inc/upnp.h ++++ b/libupnp/upnp/inc/upnp.h +@@ -2262,9 +2262,9 @@ int UpnpOpenHttpGetEx( + IN OUT int *httpStatus, /** The status returned on receiving a + response message from the remote + server. */ +- IN int lowRange, /** An integer value representing the low ++ IN unsigned long long lowRange, /** An integer value representing the low + end of a range to retrieve. */ +- IN int highRange, /** An integer value representing the high ++ IN unsigned long long highRange, /** An integer value representing the high + end of a range to retrieve. */ + IN int timeout /** A time out value sent with the request + during which a response is expected +diff --git a/libupnp/upnp/src/api/upnpapi.c b/libupnp/upnp/src/api/upnpapi.c +index ea5460b..8642060 100644 +--- a/libupnp/upnp/src/api/upnpapi.c ++++ b/libupnp/upnp/src/api/upnpapi.c +@@ -3117,8 +3117,8 @@ UpnpOpenHttpGetEx( IN const char *url_str, + IN OUT char **contentType, + OUT int *contentLength, + OUT int *httpStatus, +- IN int lowRange, +- IN int highRange, ++ IN unsigned long long lowRange, ++ IN unsigned long long highRange, + IN int timeout ) + { + return http_OpenHttpGetEx( url_str, +diff --git a/libupnp/upnp/src/genlib/net/http/httpreadwrite.c b/libupnp/upnp/src/genlib/net/http/httpreadwrite.c +index 838b3be..bb03419 100644 +--- a/libupnp/upnp/src/genlib/net/http/httpreadwrite.c ++++ b/libupnp/upnp/src/genlib/net/http/httpreadwrite.c +@@ -2072,8 +2072,8 @@ http_OpenHttpGetEx( IN const char *url_str, + IN OUT char **contentType, + OUT int *contentLength, + OUT int *httpStatus, +- IN int lowRange, +- IN int highRange, ++ IN unsigned long long lowRange, ++ IN unsigned long long highRange, + IN int timeout ) + { + int http_error_code; +@@ -2107,7 +2107,7 @@ http_OpenHttpGetEx( IN const char *url_str, + } + + memset( &rangeBuf, 0, sizeof( rangeBuf ) ); +- sprintf( rangeBuf.RangeHeader, "Range: bytes=%d-%d\r\n", ++ sprintf( rangeBuf.RangeHeader, "Range: bytes=%llu-%llu\r\n", + lowRange, highRange ); + + membuffer_init( &request ); +diff --git a/libupnp/upnp/src/inc/httpreadwrite.h b/libupnp/upnp/src/inc/httpreadwrite.h +index a657320..e583858 100644 +--- a/libupnp/upnp/src/inc/httpreadwrite.h ++++ b/libupnp/upnp/src/inc/httpreadwrite.h +@@ -494,8 +494,8 @@ int http_OpenHttpGetEx(IN const char *url_str, + IN OUT char **contentType, + OUT int *contentLength, + OUT int *httpStatus, +- IN int lowRange, +- IN int highRange, ++ IN unsigned long long lowRange, ++ IN unsigned long long highRange, + IN int timeout); + + /************************************************************************ +-- +1.7.3.4 + diff --git a/make/applications.mk b/make/applications.mk index d5f1758..8da35b6 100755 --- a/make/applications.mk +++ b/make/applications.mk @@ -667,17 +667,32 @@ $(D)/motion: $(ARCHIVE)/motion-3.2.12.tar.gz | $(TARGETPREFIX) $(REMOVE)/motion-3.2.12 $(TOUCH) +DJMOUNT_PATCH = djmount-fixed-crash.patch +DJMOUNT_PATCH += djmount-fixed-crash-when-using-UTF-8-charset.patch +DJMOUNT_PATCH += djmount-fix-hang-with-asset-upnp.patch +DJMOUNT_PATCH += djmount-fix-incorrect-range-when-retrieving-content-via-HTTP.patch +DJMOUNT_PATCH += djmount-fix-new-autotools.patch +DJMOUNT_PATCH += djmount-fix-newer-gcc.patch +DJMOUNT_PATCH += djmount-support-fstab-mounting.patch +DJMOUNT_PATCH += djmount-support-seeking-in-large-2gb-files.patch +DJMOUNT_PATCH += 0011-fix-build-with-gettext-0.20.x.patch + $(D)/djmount: $(D)/libfuse $(ARCHIVE)/djmount-0.71.tar.gz | $(TARGETPREFIX) $(START_BUILD) $(UNTAR)/djmount-0.71.tar.gz pushd $(BUILD_TMP)/djmount-0.71 && \ - $(PATCH)/djmount-0.71.diff && \ - CFLAGS="-I$(TARGETPREFIX)/include" \ - LDFLAGS="-L$(TARGETPREFIX)/lib -lz" \ + $(call apply_patches, $(addprefix djmount/, $(DJMOUNT_PATCH))); \ + CFLAGS="-I$(TARGETPREFIX)/include -fPIC" \ + LDFLAGS="-L$(TARGETPREFIX)/lib -lz -fPIC" \ LIBS="-Wl,--rpath-link -Wl,$(TARGETPREFIX)/lib" \ - ./configure -C prefix=$(TARGETPREFIX) --with-fuse-prefix=$(TARGETPREFIX) --build=$(BUILD) --host=$(TARGET) && \ - $(MAKE) && \ - $(MAKE) install; + touch libupnp/config.aux/config.rpath; \ + autoreconf -fi; \ + $(CONFIGURE) -C \ + --prefix= --build=$(BUILD) --host=$(TARGET) \ + --disable-debug \ + --with-lib-prefix=$(TARGETPREFIX) && \ + make && \ + make install DESTDIR=$(TARGETPREFIX); install -m 755 $(PATCHES)/djmount/djmount.init $(TARGETPREFIX)/etc/init.d/djmount pushd $(TARGETPREFIX)/etc/init.d ln -sf djmount $(TARGETPREFIX)/etc/init.d/S75djmount diff --git a/make/archives.mk b/make/archives.mk index 94b84f5..bbc7ce2 100755 --- a/make/archives.mk +++ b/make/archives.mk @@ -295,7 +295,7 @@ $(ARCHIVE)/sdparm-1.08.tar.gz: $(WGET) http://www.fhloston-paradise.de/sdparm-1.08.tar.gz $(ARCHIVE)/djmount-0.71.tar.gz: - $(WGET) http://www.fhloston-paradise.de/djmount-0.71.tar.gz + $(WGET) https://sourceforge.net/projects/djmount/files/djmount/0.71/djmount-0.71.tar.gz $(ARCHIVE)/libupnp-$(LIBUPNP_VER).tar.bz2: $(WGET) https://qa.debian.org/watch/sf.php/pupnp/libupnp-$(LIBUPNP_VER).tar.bz2 -- 2.39.5