File ubuntu-zstd-support.patch of Package dpkg

diff -urN dpkg-1.20.9/config.h.in dpkg-1.20.9ubuntu1/config.h.in
--- dpkg-1.20.9/config.h.in	2021-04-14 00:43:39.000000000 +0200
+++ dpkg-1.20.9ubuntu1/config.h.in	2021-04-14 12:32:22.000000000 +0200
@@ -380,6 +380,9 @@
 /* Define to 1 to use z library rather than console tool */
 #undef WITH_LIBZ
 
+/* Define to 1 to use zstd library rather than console tool */
+#undef WITH_LIBZSTD
+
 /* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most
    significant byte first (like Motorola and SPARC, unlike Intel). */
 #if defined AC_APPLE_UNIVERSAL_BUILD
diff -urN dpkg-1.20.9/configure dpkg-1.20.9ubuntu1/configure
--- dpkg-1.20.9/configure	2021-04-14 00:43:39.000000000 +0200
+++ dpkg-1.20.9ubuntu1/configure	2021-04-14 12:32:22.000000000 +0200
@@ -741,6 +741,7 @@
 PKG_CONFIG
 LZMA_LIBS
 BZ2_LIBS
+ZSTD_LIBS
 Z_LIBS
 HAVE_LIBMD_MD5_FALSE
 HAVE_LIBMD_MD5_TRUE
@@ -959,6 +960,7 @@
 enable_largefile
 with_libmd
 with_libz
+with_libzstd
 with_libbz2
 with_liblzma
 with_libselinux
@@ -991,6 +993,7 @@
 POD2MAN
 MD_LIBS
 Z_LIBS
+ZSTD_LIBS
 BZ2_LIBS
 LZMA_LIBS
 PKG_CONFIG
@@ -1686,6 +1689,7 @@
                           change default dpkg-deb build compressor
   --with-libmd            use libmd library for message digest functions
   --with-libz             use z library for compression and decompression
+  --with-libzstd          use zstd library for compression and decompression
   --with-libbz2           use bz2 library for compression and decompression
   --with-liblzma          use lzma library for compression and decompression
   --with-libselinux       use selinux library to set security contexts
@@ -1712,6 +1716,7 @@
   POD2MAN     pod2man program
   MD_LIBS     linker flags for md library
   Z_LIBS      linker flags for z library
+  ZSTD_LIBS   linker flags for zstd library
   BZ2_LIBS    linker flags for bz2 library
   LZMA_LIBS   linker flags for lzma library
   PKG_CONFIG  path to pkg-config utility
@@ -21919,6 +21924,106 @@
 
 
 
+# Check whether --with-libzstd was given.
+if test "${with_libzstd+set}" = set; then :
+  withval=$with_libzstd;
+else
+  with_libzstd=check
+fi
+
+  have_libzstd="no"
+  if test "x$with_libzstd" != "xno"; then :
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ZSTD_decompressStream in -lzstd" >&5
+$as_echo_n "checking for ZSTD_decompressStream in -lzstd... " >&6; }
+if ${ac_cv_lib_zstd_ZSTD_decompressStream+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lzstd  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char ZSTD_decompressStream ();
+int
+main ()
+{
+return ZSTD_decompressStream ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_zstd_ZSTD_decompressStream=yes
+else
+  ac_cv_lib_zstd_ZSTD_decompressStream=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_zstd_ZSTD_decompressStream" >&5
+$as_echo "$ac_cv_lib_zstd_ZSTD_decompressStream" >&6; }
+if test "x$ac_cv_lib_zstd_ZSTD_decompressStream" = xyes; then :
+
+      ac_fn_c_check_header_mongrel "$LINENO" "zstd.h" "ac_cv_header_zstd_h" "$ac_includes_default"
+if test "x$ac_cv_header_zstd_h" = xyes; then :
+
+        have_libzstd="yes"
+
+fi
+
+
+
+fi
+
+
+    if test "x$with_libzstd" != "xno"; then :
+
+      if test "x$have_libzstd" = "xyes"; then :
+
+
+$as_echo "#define WITH_LIBZSTD 1" >>confdefs.h
+
+        if test "x$with_libzstd" = "xstatic"; then :
+
+          dpkg_zstd_libs="-Wl,-Bstatic -lzstd -Wl,-Bdynamic"
+
+else
+
+          dpkg_zstd_libs="-lzstd"
+
+fi
+        ZSTD_LIBS="${ZSTD_LIBS:+$ZSTD_LIBS }$dpkg_zstd_libs"
+
+else
+
+        if test "x$with_libzstd" != "xcheck"; then :
+
+          { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "libzstd library or header not found
+See \`config.log' for more details" "$LINENO" 5; }
+
+fi
+
+fi
+
+fi
+
+fi
+
+
+
+
+
+
 # Check whether --with-libbz2 was given.
 if test "${with_libbz2+set}" = set; then :
   withval=$with_libbz2;
@@ -30344,6 +30449,7 @@
     libselinux  . . . . . . . . . : $have_libselinux
     libmd . . . . . . . . . . . . : $have_libmd
     libz  . . . . . . . . . . . . : $have_libz
+    libzstd  . . . . . . . . . .  : $have_libzstd
     liblzma . . . . . . . . . . . : $have_liblzma
     libbz2  . . . . . . . . . . . : $have_libbz2
     libcurses . . . . . . . . . . : ${have_libcurses:-no}
diff -urN dpkg-1.20.9/configure.ac dpkg-1.20.9ubuntu1/configure.ac
--- dpkg-1.20.9/configure.ac	2021-01-30 07:09:02.000000000 +0100
+++ dpkg-1.20.9ubuntu1/configure.ac	2021-06-14 16:04:10.000000000 +0200
@@ -66,7 +66,7 @@
   [system logging directory [LOCALSTATEDIR/log]])
 
 # Set default dpkg-deb values
-DPKG_DEB_COMPRESSOR([xz])
+DPKG_DEB_COMPRESSOR([zstd])
 DPKG_DEB_PROG_TAR
 
 # Checks for programs.
@@ -88,6 +88,7 @@
 # Checks for libraries.
 DPKG_LIB_MD
 DPKG_LIB_Z
+DPKG_LIB_ZSTD
 DPKG_LIB_BZ2
 DPKG_LIB_LZMA
 DPKG_LIB_SELINUX
@@ -279,6 +280,7 @@
     libselinux  . . . . . . . . . : $have_libselinux
     libmd . . . . . . . . . . . . : $have_libmd
     libz  . . . . . . . . . . . . : $have_libz
+    libzstd  . . . . . . . . . .  : $have_libzstd
     liblzma . . . . . . . . . . . : $have_liblzma
     libbz2  . . . . . . . . . . . : $have_libbz2
     libcurses . . . . . . . . . . : ${have_libcurses:-no}
diff -urN dpkg-1.20.9/dpkg-deb/extract.c dpkg-1.20.9ubuntu1/dpkg-deb/extract.c
--- dpkg-1.20.9/dpkg-deb/extract.c	2021-02-15 00:03:29.000000000 +0100
+++ dpkg-1.20.9ubuntu1/dpkg-deb/extract.c	2021-04-14 12:32:22.000000000 +0200
@@ -180,6 +180,7 @@
           decompressor = compressor_find_by_extension(extension);
           if (decompressor != COMPRESSOR_TYPE_NONE &&
               decompressor != COMPRESSOR_TYPE_GZIP &&
+              decompressor != COMPRESSOR_TYPE_ZSTD &&
               decompressor != COMPRESSOR_TYPE_XZ)
             ohshit(_("archive '%s' uses unknown compression for member '%.*s', "
                      "giving up"),
diff -urN dpkg-1.20.9/dpkg-deb/main.c dpkg-1.20.9ubuntu1/dpkg-deb/main.c
--- dpkg-1.20.9/dpkg-deb/main.c	2021-01-30 07:09:02.000000000 +0100
+++ dpkg-1.20.9ubuntu1/dpkg-deb/main.c	2021-04-14 12:32:22.000000000 +0200
@@ -108,7 +108,7 @@
 "      --[no-]uniform-compression   Use the compression params on all members.\n"
 "  -z#                              Set the compression level when building.\n"
 "  -Z<type>                         Set the compression type used when building.\n"
-"                                     Allowed types: gzip, xz, none.\n"
+"                                     Allowed types: gzip, xz, zstd, none.\n"
 "  -S<strategy>                     Set the compression strategy when building.\n"
 "                                     Allowed values: none; extreme (xz);\n"
 "                                     filtered, huffman, rle, fixed (gzip).\n"
@@ -245,6 +245,7 @@
   if (opt_uniform_compression &&
       (compress_params.type != COMPRESSOR_TYPE_NONE &&
        compress_params.type != COMPRESSOR_TYPE_GZIP &&
+       compress_params.type != COMPRESSOR_TYPE_ZSTD &&
        compress_params.type != COMPRESSOR_TYPE_XZ))
     badusage(_("unsupported compression type '%s' with uniform compression"),
              compressor_get_name(compress_params.type));
diff -urN dpkg-1.20.9/dpkg-deb/Makefile.am dpkg-1.20.9ubuntu1/dpkg-deb/Makefile.am
--- dpkg-1.20.9/dpkg-deb/Makefile.am	2021-01-30 07:07:17.000000000 +0100
+++ dpkg-1.20.9ubuntu1/dpkg-deb/Makefile.am	2021-04-14 12:32:22.000000000 +0200
@@ -21,5 +21,6 @@
 	../lib/dpkg/libdpkg.la \
 	$(LIBINTL) \
 	$(Z_LIBS) \
+	$(ZSTD_LIBS) \
 	$(LZMA_LIBS) \
 	$(BZ2_LIBS)
diff -urN dpkg-1.20.9/dpkg-deb/Makefile.in dpkg-1.20.9ubuntu1/dpkg-deb/Makefile.in
--- dpkg-1.20.9/dpkg-deb/Makefile.in	2021-04-14 00:43:39.000000000 +0200
+++ dpkg-1.20.9ubuntu1/dpkg-deb/Makefile.in	2021-04-14 12:32:22.000000000 +0200
@@ -122,7 +122,7 @@
 am__DEPENDENCIES_1 =
 dpkg_deb_DEPENDENCIES = ../lib/dpkg/libdpkg.la $(am__DEPENDENCIES_1) \
 	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
-	$(am__DEPENDENCIES_1)
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
 AM_V_lt = $(am__v_lt_@AM_V@)
 am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
 am__v_lt_0 = --silent
@@ -313,6 +313,7 @@
 XGETTEXT = @XGETTEXT@
 XGETTEXT_015 = @XGETTEXT_015@
 XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+ZSTD_LIBS = @ZSTD_LIBS@
 Z_LIBS = @Z_LIBS@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
@@ -389,6 +390,7 @@
 	../lib/dpkg/libdpkg.la \
 	$(LIBINTL) \
 	$(Z_LIBS) \
+	$(ZSTD_LIBS) \
 	$(LZMA_LIBS) \
 	$(BZ2_LIBS)
 
diff -urN dpkg-1.20.9/dpkg-split/Makefile.in dpkg-1.20.9ubuntu1/dpkg-split/Makefile.in
--- dpkg-1.20.9/dpkg-split/Makefile.in	2021-04-14 00:43:39.000000000 +0200
+++ dpkg-1.20.9ubuntu1/dpkg-split/Makefile.in	2021-04-14 12:32:22.000000000 +0200
@@ -311,6 +311,7 @@
 XGETTEXT = @XGETTEXT@
 XGETTEXT_015 = @XGETTEXT_015@
 XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+ZSTD_LIBS = @ZSTD_LIBS@
 Z_LIBS = @Z_LIBS@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
diff -urN dpkg-1.20.9/dselect/Makefile.in dpkg-1.20.9ubuntu1/dselect/Makefile.in
--- dpkg-1.20.9/dselect/Makefile.in	2021-04-14 00:43:39.000000000 +0200
+++ dpkg-1.20.9ubuntu1/dselect/Makefile.in	2021-04-14 12:32:22.000000000 +0200
@@ -385,6 +385,7 @@
 XGETTEXT = @XGETTEXT@
 XGETTEXT_015 = @XGETTEXT_015@
 XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+ZSTD_LIBS = @ZSTD_LIBS@
 Z_LIBS = @Z_LIBS@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
diff -urN dpkg-1.20.9/dselect/methods/Makefile.in dpkg-1.20.9ubuntu1/dselect/methods/Makefile.in
--- dpkg-1.20.9/dselect/methods/Makefile.in	2021-04-14 00:43:39.000000000 +0200
+++ dpkg-1.20.9ubuntu1/dselect/methods/Makefile.in	2021-04-14 12:32:22.000000000 +0200
@@ -290,6 +290,7 @@
 XGETTEXT = @XGETTEXT@
 XGETTEXT_015 = @XGETTEXT_015@
 XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+ZSTD_LIBS = @ZSTD_LIBS@
 Z_LIBS = @Z_LIBS@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
diff -urN dpkg-1.20.9/lib/compat/Makefile.in dpkg-1.20.9ubuntu1/lib/compat/Makefile.in
--- dpkg-1.20.9/lib/compat/Makefile.in	2021-04-14 00:43:39.000000000 +0200
+++ dpkg-1.20.9ubuntu1/lib/compat/Makefile.in	2021-04-14 12:32:22.000000000 +0200
@@ -391,6 +391,7 @@
 XGETTEXT = @XGETTEXT@
 XGETTEXT_015 = @XGETTEXT_015@
 XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+ZSTD_LIBS = @ZSTD_LIBS@
 Z_LIBS = @Z_LIBS@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
diff -urN dpkg-1.20.9/lib/dpkg/compress.c dpkg-1.20.9ubuntu1/lib/dpkg/compress.c
--- dpkg-1.20.9/lib/dpkg/compress.c	2021-01-30 07:07:17.000000000 +0100
+++ dpkg-1.20.9ubuntu1/lib/dpkg/compress.c	2021-04-14 12:32:22.000000000 +0200
@@ -32,6 +32,9 @@
 #ifdef WITH_LIBZ
 #include <zlib.h>
 #endif
+#ifdef WITH_LIBZSTD
+#include <zstd.h>
+#endif
 #ifdef WITH_LIBLZMA
 #include <lzma.h>
 #endif
@@ -47,7 +50,7 @@
 #include <dpkg/buffer.h>
 #include <dpkg/command.h>
 #include <dpkg/compress.h>
-#if !defined(WITH_LIBZ) || !defined(WITH_LIBLZMA) || !defined(WITH_LIBBZ2)
+#if !defined(WITH_LIBZ) || !defined(WITH_LIBZSTD) || !defined(WITH_LIBLZMA) || !defined(WITH_LIBBZ2)
 #include <dpkg/subproc.h>
 
 static void DPKG_ATTR_SENTINEL
@@ -764,6 +767,157 @@
 };
 
 /*
+ * Zstd compressor.
+ */
+
+#define ZSTD		"zstd"
+
+#ifdef WITH_LIBZSTD
+
+static void
+decompress_zstd(int fd_in, int fd_out, const char *desc)
+{
+	size_t const buf_in_size = ZSTD_DStreamInSize();
+	void*  const buf_in = m_malloc(buf_in_size);
+	size_t const buf_out_size = ZSTD_DStreamOutSize();
+	void*  const buf_out = m_malloc(buf_out_size);
+	size_t init_result, just_read, to_read;
+	ZSTD_DStream* const dstream = ZSTD_createDStream();
+	if (dstream == NULL) {
+		ohshit(_("ZSTD_createDStream error creating stream"));
+	}
+
+	init_result = ZSTD_initDStream(dstream);
+	if (ZSTD_isError(init_result)) {
+		ohshit(_("ZSTD_initDStream error : %s"), ZSTD_getErrorName(init_result));
+	}
+	to_read = init_result;
+	while ((just_read = fd_read(fd_in, buf_in, to_read))) {
+		ZSTD_inBuffer input = { buf_in, just_read, 0 };
+		while (input.pos < input.size) {
+			size_t actualwrite;
+			ZSTD_outBuffer output = { buf_out, buf_out_size, 0 };
+			to_read = ZSTD_decompressStream(dstream, &output , &input);
+			if (ZSTD_isError(to_read)) {
+				ohshit(_("ZSTD_decompressStream error : %s \n"),
+				       ZSTD_getErrorName(to_read));
+			}
+			actualwrite = fd_write(fd_out, output.dst, output.pos);
+			if (actualwrite != output.pos) {
+				const char *errmsg = strerror(errno);
+				ohshite(_("%s: internal zstd write error: '%s'"), desc, errmsg);
+			}
+			/* possible next frame */
+			if (to_read == 0) {
+				init_result = ZSTD_initDStream(dstream);
+				if (ZSTD_isError(init_result)) {
+					ohshit(_("ZSTD_initDStream error : %s"), ZSTD_getErrorName(init_result));
+				}
+				to_read = init_result;
+			}
+		}
+	}
+
+	ZSTD_freeDStream(dstream);
+	free(buf_in);
+	free(buf_out);
+	if (close(fd_out))
+		ohshite(_("%s: internal zstd write error"), desc);
+}
+
+static void
+compress_zstd(int fd_in, int fd_out, struct compress_params *params, const char *desc)
+{
+	size_t const buf_in_size = ZSTD_CStreamInSize();
+	void*  const buf_in = m_malloc(buf_in_size);
+	size_t const buf_out_size = ZSTD_CStreamOutSize();
+	void*  const buf_out = m_malloc(buf_out_size);
+	size_t init_result, end_res;
+	size_t just_read, to_read;
+	ZSTD_CStream* const cstream = ZSTD_createCStream();
+	if (cstream == NULL) {
+		ohshit(_("ZSTD_createCStream error"));
+	}
+
+	init_result = ZSTD_initCStream(cstream, params->level);
+	if (ZSTD_isError(init_result)) {
+		ohshit(_("ZSTD_initCStream error : %s"), ZSTD_getErrorName(init_result));
+	}
+	to_read = buf_in_size;
+	while ((just_read = fd_read(fd_in, buf_in, to_read))) {
+		ZSTD_inBuffer input = { buf_in, just_read, 0 };
+		while (input.pos < input.size) {
+			size_t actualwrite;
+			ZSTD_outBuffer output = { buf_out, buf_out_size, 0 };
+			to_read = ZSTD_compressStream(cstream, &output , &input);
+			if (ZSTD_isError(to_read)) {
+				ohshit(_("ZSTD_decompressStream error : %s \n"),
+				       ZSTD_getErrorName(to_read));
+			}
+			actualwrite = fd_write(fd_out, output.dst, output.pos);
+			if (actualwrite != output.pos) {
+				const char *errmsg = strerror(errno);
+				ohshite(_("%s: internal zstd write error: '%s'"),
+					desc, errmsg);
+			}
+		}
+	}
+	do {
+		size_t actualwrite;
+		ZSTD_outBuffer output = { buf_out, buf_out_size, 0 };
+		end_res = ZSTD_endStream(cstream, &output);
+		if (ZSTD_isError(end_res)) {
+			ohshit(_("ZSTD_endStream error : %s \n"),
+			       ZSTD_getErrorName(end_res));
+		}
+		actualwrite = fd_write(fd_out, output.dst, output.pos);
+		if (actualwrite != output.pos) {
+			const char *errmsg = strerror(errno);
+			ohshite(_("%s: internal zstd write error: '%s'"), desc,
+				errmsg);
+		}
+	} while (end_res > 0);
+
+	ZSTD_freeCStream(cstream);
+	free(buf_in);
+	free(buf_out);
+
+	/* ZSTD_endStream() already flushed the output buffers */
+	if (close(fd_out))
+		ohshite(_("%s: internal zstd write error"), desc);
+}
+
+#else
+static const char *env_zstd[] = {};
+
+static void
+decompress_zstd(int fd_in, int fd_out, const char *desc)
+{
+	fd_fd_filter(fd_in, fd_out, desc, env_zstd, ZSTD, "-dcq", NULL);
+}
+
+static void
+compress_zstd(int fd_in, int fd_out, struct compress_params *params, const char *desc)
+{
+	char combuf[6];
+
+	snprintf(combuf, sizeof(combuf), "-c%d", params->level);
+	fd_fd_filter(fd_in, fd_out, desc, env_zstd, ZSTD, combuf, "-q", NULL);
+}
+#endif
+
+static const struct compressor compressor_zstd = {
+	.name = "zstd",
+	.extension = ".zst",
+        /* zstd commands's default is 3 but the aim is to be closer to xz's
+         * default compression efficiency */
+	.default_level = 19,
+	.fixup_params = fixup_none_params,
+	.compress = compress_zstd,
+	.decompress = decompress_zstd,
+};
+
+/*
  * Generic compressor filter.
  */
 
@@ -773,6 +927,7 @@
 	[COMPRESSOR_TYPE_XZ] = &compressor_xz,
 	[COMPRESSOR_TYPE_BZIP2] = &compressor_bzip2,
 	[COMPRESSOR_TYPE_LZMA] = &compressor_lzma,
+	[COMPRESSOR_TYPE_ZSTD] = &compressor_zstd,
 };
 
 static const struct compressor *
diff -urN dpkg-1.20.9/lib/dpkg/compress.h dpkg-1.20.9ubuntu1/lib/dpkg/compress.h
--- dpkg-1.20.9/lib/dpkg/compress.h	2021-01-30 07:07:17.000000000 +0100
+++ dpkg-1.20.9ubuntu1/lib/dpkg/compress.h	2021-04-14 12:32:22.000000000 +0200
@@ -42,6 +42,7 @@
 	COMPRESSOR_TYPE_XZ,
 	COMPRESSOR_TYPE_BZIP2,
 	COMPRESSOR_TYPE_LZMA,
+	COMPRESSOR_TYPE_ZSTD,
 };
 
 enum compressor_strategy {
diff -urN dpkg-1.20.9/lib/dpkg/Makefile.in dpkg-1.20.9ubuntu1/lib/dpkg/Makefile.in
--- dpkg-1.20.9/lib/dpkg/Makefile.in	2021-04-14 00:43:39.000000000 +0200
+++ dpkg-1.20.9ubuntu1/lib/dpkg/Makefile.in	2021-04-14 12:32:22.000000000 +0200
@@ -446,6 +446,7 @@
 XGETTEXT = @XGETTEXT@
 XGETTEXT_015 = @XGETTEXT_015@
 XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+ZSTD_LIBS = @ZSTD_LIBS@
 Z_LIBS = @Z_LIBS@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
diff -urN dpkg-1.20.9/lib/dpkg/parse.c dpkg-1.20.9ubuntu1/lib/dpkg/parse.c
--- dpkg-1.20.9/lib/dpkg/parse.c	2021-03-02 03:15:25.000000000 +0100
+++ dpkg-1.20.9ubuntu1/lib/dpkg/parse.c	2021-04-14 12:32:22.000000000 +0200
@@ -319,7 +319,8 @@
   if (pkg->status == PKG_STAT_NOTINSTALLED)
      return;
 
-  if (pkgbin->multiarch == PKG_MULTIARCH_SAME)
+  // mvo: consider stat_configfiles multiarch to prevent LP: #1015567
+  if (pkgbin->multiarch == PKG_MULTIARCH_SAME || pkg->status == PKG_STAT_CONFIGFILES)
     count->multi++;
   else
     count->single++;
diff -urN dpkg-1.20.9/lib/dpkg/pkg-spec.c dpkg-1.20.9ubuntu1/lib/dpkg/pkg-spec.c
--- dpkg-1.20.9/lib/dpkg/pkg-spec.c	2021-01-30 07:07:17.000000000 +0100
+++ dpkg-1.20.9ubuntu1/lib/dpkg/pkg-spec.c	2021-04-14 12:32:22.000000000 +0200
@@ -102,10 +102,7 @@
 		/* Single instancing only applies with no architecture. */
 		if (ps->arch->type == DPKG_ARCH_NONE &&
 		    pkgset_installed_instances(set) > 1) {
-			snprintf(msg, sizeof(msg),
-			         _("ambiguous package name '%s' with more "
-			           "than one installed instance"), ps->name);
-			return msg;
+			ps->arch = dpkg_arch_get(DPKG_ARCH_NATIVE);
 		}
 	}
 
diff -urN dpkg-1.20.9/lib/dpkg/t/Makefile.in dpkg-1.20.9ubuntu1/lib/dpkg/t/Makefile.in
--- dpkg-1.20.9/lib/dpkg/t/Makefile.in	2021-04-14 00:43:39.000000000 +0200
+++ dpkg-1.20.9ubuntu1/lib/dpkg/t/Makefile.in	2021-04-14 12:32:22.000000000 +0200
@@ -556,6 +556,7 @@
 XGETTEXT = @XGETTEXT@
 XGETTEXT_015 = @XGETTEXT_015@
 XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+ZSTD_LIBS = @ZSTD_LIBS@
 Z_LIBS = @Z_LIBS@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
diff -urN dpkg-1.20.9/lib/Makefile.in dpkg-1.20.9ubuntu1/lib/Makefile.in
--- dpkg-1.20.9/lib/Makefile.in	2021-04-14 00:43:39.000000000 +0200
+++ dpkg-1.20.9ubuntu1/lib/Makefile.in	2021-04-14 12:32:22.000000000 +0200
@@ -315,6 +315,7 @@
 XGETTEXT = @XGETTEXT@
 XGETTEXT_015 = @XGETTEXT_015@
 XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+ZSTD_LIBS = @ZSTD_LIBS@
 Z_LIBS = @Z_LIBS@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
diff -urN dpkg-1.20.9/m4/codeset.m4 dpkg-1.20.9ubuntu1/m4/codeset.m4
--- dpkg-1.20.9/m4/codeset.m4	1970-01-01 01:00:00.000000000 +0100
+++ dpkg-1.20.9ubuntu1/m4/codeset.m4	2021-04-14 12:32:22.000000000 +0200
@@ -0,0 +1,24 @@
+# codeset.m4 serial 5 (gettext-0.18.2)
+dnl Copyright (C) 2000-2002, 2006, 2008-2014, 2016 Free Software Foundation,
+dnl Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+AC_DEFUN([AM_LANGINFO_CODESET],
+[
+  AC_CACHE_CHECK([for nl_langinfo and CODESET], [am_cv_langinfo_codeset],
+    [AC_LINK_IFELSE(
+       [AC_LANG_PROGRAM(
+          [[#include <langinfo.h>]],
+          [[char* cs = nl_langinfo(CODESET); return !cs;]])],
+       [am_cv_langinfo_codeset=yes],
+       [am_cv_langinfo_codeset=no])
+    ])
+  if test $am_cv_langinfo_codeset = yes; then
+    AC_DEFINE([HAVE_LANGINFO_CODESET], [1],
+      [Define if you have <langinfo.h> and nl_langinfo(CODESET).])
+  fi
+])
diff -urN dpkg-1.20.9/m4/dpkg-build.m4 dpkg-1.20.9ubuntu1/m4/dpkg-build.m4
--- dpkg-1.20.9/m4/dpkg-build.m4	2021-01-30 07:07:17.000000000 +0100
+++ dpkg-1.20.9ubuntu1/m4/dpkg-build.m4	2021-06-14 16:04:10.000000000 +0200
@@ -78,7 +78,7 @@
       [change default dpkg-deb build compressor])],
     [with_dpkg_deb_compressor=$withval], [with_dpkg_deb_compressor=$1])
   AS_CASE([$with_dpkg_deb_compressor],
-    [gzip|xz], [:],
+    [gzip|xz|zstd], [:],
     [AC_MSG_ERROR([unsupported default compressor $with_dpkg_deb_compressor])])
   AC_DEFINE_UNQUOTED([DPKG_DEB_DEFAULT_COMPRESSOR],
     [COMPRESSOR_TYPE_]AS_TR_CPP(${with_dpkg_deb_compressor}),
diff -urN dpkg-1.20.9/m4/dpkg-libs.m4 dpkg-1.20.9ubuntu1/m4/dpkg-libs.m4
--- dpkg-1.20.9/m4/dpkg-libs.m4	2021-01-30 07:07:17.000000000 +0100
+++ dpkg-1.20.9ubuntu1/m4/dpkg-libs.m4	2021-04-14 12:32:22.000000000 +0200
@@ -75,6 +75,13 @@
   DPKG_WITH_COMPRESS_LIB([z], [zlib.h], [gzdopen])
 ])# DPKG_LIB_Z
 
+# DPKG_LIB_ZSTD
+# -------------
+# Check for zstd library.
+AC_DEFUN([DPKG_LIB_ZSTD], [
+  DPKG_WITH_COMPRESS_LIB([zstd], [zstd.h], [ZSTD_decompressStream])
+])# DPKG_LIB_ZSTD
+
 # DPKG_LIB_LZMA
 # -------------
 # Check for lzma library.
diff -urN dpkg-1.20.9/m4/extern-inline.m4 dpkg-1.20.9ubuntu1/m4/extern-inline.m4
--- dpkg-1.20.9/m4/extern-inline.m4	1970-01-01 01:00:00.000000000 +0100
+++ dpkg-1.20.9ubuntu1/m4/extern-inline.m4	2021-04-14 12:32:22.000000000 +0200
@@ -0,0 +1,102 @@
+dnl 'extern inline' a la ISO C99.
+
+dnl Copyright 2012-2016 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_EXTERN_INLINE],
+[
+  AH_VERBATIM([extern_inline],
+[/* Please see the Gnulib manual for how to use these macros.
+
+   Suppress extern inline with HP-UX cc, as it appears to be broken; see
+   <http://lists.gnu.org/archive/html/bug-texinfo/2013-02/msg00030.html>.
+
+   Suppress extern inline with Sun C in standards-conformance mode, as it
+   mishandles inline functions that call each other.  E.g., for 'inline void f
+   (void) { } inline void g (void) { f (); }', c99 incorrectly complains
+   'reference to static identifier "f" in extern inline function'.
+   This bug was observed with Sun C 5.12 SunOS_i386 2011/11/16.
+
+   Suppress extern inline (with or without __attribute__ ((__gnu_inline__)))
+   on configurations that mistakenly use 'static inline' to implement
+   functions or macros in standard C headers like <ctype.h>.  For example,
+   if isdigit is mistakenly implemented via a static inline function,
+   a program containing an extern inline function that calls isdigit
+   may not work since the C standard prohibits extern inline functions
+   from calling static functions.  This bug is known to occur on:
+
+     OS X 10.8 and earlier; see:
+     http://lists.gnu.org/archive/html/bug-gnulib/2012-12/msg00023.html
+
+     DragonFly; see
+     http://muscles.dragonflybsd.org/bulk/bleeding-edge-potential/latest-per-pkg/ah-tty-0.3.12.log
+
+     FreeBSD; see:
+     http://lists.gnu.org/archive/html/bug-gnulib/2014-07/msg00104.html
+
+   OS X 10.9 has a macro __header_inline indicating the bug is fixed for C and
+   for clang but remains for g++; see <http://trac.macports.org/ticket/41033>.
+   Assume DragonFly and FreeBSD will be similar.  */
+#if (((defined __APPLE__ && defined __MACH__) \
+      || defined __DragonFly__ || defined __FreeBSD__) \
+     && (defined __header_inline \
+         ? (defined __cplusplus && defined __GNUC_STDC_INLINE__ \
+            && ! defined __clang__) \
+         : ((! defined _DONT_USE_CTYPE_INLINE_ \
+             && (defined __GNUC__ || defined __cplusplus)) \
+            || (defined _FORTIFY_SOURCE && 0 < _FORTIFY_SOURCE \
+                && defined __GNUC__ && ! defined __cplusplus))))
+# define _GL_EXTERN_INLINE_STDHEADER_BUG
+#endif
+#if ((__GNUC__ \
+      ? defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ \
+      : (199901L <= __STDC_VERSION__ \
+         && !defined __HP_cc \
+         && !defined __PGI \
+         && !(defined __SUNPRO_C && __STDC__))) \
+     && !defined _GL_EXTERN_INLINE_STDHEADER_BUG)
+# define _GL_INLINE inline
+# define _GL_EXTERN_INLINE extern inline
+# define _GL_EXTERN_INLINE_IN_USE
+#elif (2 < __GNUC__ + (7 <= __GNUC_MINOR__) && !defined __STRICT_ANSI__ \
+       && !defined _GL_EXTERN_INLINE_STDHEADER_BUG)
+# if defined __GNUC_GNU_INLINE__ && __GNUC_GNU_INLINE__
+   /* __gnu_inline__ suppresses a GCC 4.2 diagnostic.  */
+#  define _GL_INLINE extern inline __attribute__ ((__gnu_inline__))
+# else
+#  define _GL_INLINE extern inline
+# endif
+# define _GL_EXTERN_INLINE extern
+# define _GL_EXTERN_INLINE_IN_USE
+#else
+# define _GL_INLINE static _GL_UNUSED
+# define _GL_EXTERN_INLINE static _GL_UNUSED
+#endif
+
+/* In GCC 4.6 (inclusive) to 5.1 (exclusive),
+   suppress bogus "no previous prototype for 'FOO'"
+   and "no previous declaration for 'FOO'" diagnostics,
+   when FOO is an inline function in the header; see
+   <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=54113> and
+   <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63877>.  */
+#if __GNUC__ == 4 && 6 <= __GNUC_MINOR__
+# if defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__
+#  define _GL_INLINE_HEADER_CONST_PRAGMA
+# else
+#  define _GL_INLINE_HEADER_CONST_PRAGMA \
+     _Pragma ("GCC diagnostic ignored \"-Wsuggest-attribute=const\"")
+# endif
+# define _GL_INLINE_HEADER_BEGIN \
+    _Pragma ("GCC diagnostic push") \
+    _Pragma ("GCC diagnostic ignored \"-Wmissing-prototypes\"") \
+    _Pragma ("GCC diagnostic ignored \"-Wmissing-declarations\"") \
+    _GL_INLINE_HEADER_CONST_PRAGMA
+# define _GL_INLINE_HEADER_END \
+    _Pragma ("GCC diagnostic pop")
+#else
+# define _GL_INLINE_HEADER_BEGIN
+# define _GL_INLINE_HEADER_END
+#endif])
+])
diff -urN dpkg-1.20.9/m4/fcntl-o.m4 dpkg-1.20.9ubuntu1/m4/fcntl-o.m4
--- dpkg-1.20.9/m4/fcntl-o.m4	1970-01-01 01:00:00.000000000 +0100
+++ dpkg-1.20.9ubuntu1/m4/fcntl-o.m4	2021-04-14 12:32:22.000000000 +0200
@@ -0,0 +1,134 @@
+# fcntl-o.m4 serial 4
+dnl Copyright (C) 2006, 2009-2016 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl Written by Paul Eggert.
+
+# Test whether the flags O_NOATIME and O_NOFOLLOW actually work.
+# Define HAVE_WORKING_O_NOATIME to 1 if O_NOATIME works, or to 0 otherwise.
+# Define HAVE_WORKING_O_NOFOLLOW to 1 if O_NOFOLLOW works, or to 0 otherwise.
+AC_DEFUN([gl_FCNTL_O_FLAGS],
+[
+  dnl Persuade glibc <fcntl.h> to define O_NOATIME and O_NOFOLLOW.
+  dnl AC_USE_SYSTEM_EXTENSIONS was introduced in autoconf 2.60 and obsoletes
+  dnl AC_GNU_SOURCE.
+  m4_ifdef([AC_USE_SYSTEM_EXTENSIONS],
+    [AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])],
+    [AC_REQUIRE([AC_GNU_SOURCE])])
+
+  AC_CHECK_HEADERS_ONCE([unistd.h])
+  AC_CHECK_FUNCS_ONCE([symlink])
+  AC_CACHE_CHECK([for working fcntl.h], [gl_cv_header_working_fcntl_h],
+    [AC_RUN_IFELSE(
+       [AC_LANG_PROGRAM(
+          [[#include <sys/types.h>
+           #include <sys/stat.h>
+           #if HAVE_UNISTD_H
+           # include <unistd.h>
+           #else /* on Windows with MSVC */
+           # include <io.h>
+           # include <stdlib.h>
+           # defined sleep(n) _sleep ((n) * 1000)
+           #endif
+           #include <fcntl.h>
+           #ifndef O_NOATIME
+            #define O_NOATIME 0
+           #endif
+           #ifndef O_NOFOLLOW
+            #define O_NOFOLLOW 0
+           #endif
+           static int const constants[] =
+            {
+              O_CREAT, O_EXCL, O_NOCTTY, O_TRUNC, O_APPEND,
+              O_NONBLOCK, O_SYNC, O_ACCMODE, O_RDONLY, O_RDWR, O_WRONLY
+            };
+          ]],
+          [[
+            int result = !constants;
+            #if HAVE_SYMLINK
+            {
+              static char const sym[] = "conftest.sym";
+              if (symlink ("/dev/null", sym) != 0)
+                result |= 2;
+              else
+                {
+                  int fd = open (sym, O_WRONLY | O_NOFOLLOW | O_CREAT, 0);
+                  if (fd >= 0)
+                    {
+                      close (fd);
+                      result |= 4;
+                    }
+                }
+              if (unlink (sym) != 0 || symlink (".", sym) != 0)
+                result |= 2;
+              else
+                {
+                  int fd = open (sym, O_RDONLY | O_NOFOLLOW);
+                  if (fd >= 0)
+                    {
+                      close (fd);
+                      result |= 4;
+                    }
+                }
+              unlink (sym);
+            }
+            #endif
+            {
+              static char const file[] = "confdefs.h";
+              int fd = open (file, O_RDONLY | O_NOATIME);
+              if (fd < 0)
+                result |= 8;
+              else
+                {
+                  struct stat st0;
+                  if (fstat (fd, &st0) != 0)
+                    result |= 16;
+                  else
+                    {
+                      char c;
+                      sleep (1);
+                      if (read (fd, &c, 1) != 1)
+                        result |= 24;
+                      else
+                        {
+                          if (close (fd) != 0)
+                            result |= 32;
+                          else
+                            {
+                              struct stat st1;
+                              if (stat (file, &st1) != 0)
+                                result |= 40;
+                              else
+                                if (st0.st_atime != st1.st_atime)
+                                  result |= 64;
+                            }
+                        }
+                    }
+                }
+            }
+            return result;]])],
+       [gl_cv_header_working_fcntl_h=yes],
+       [case $? in #(
+        4) gl_cv_header_working_fcntl_h='no (bad O_NOFOLLOW)';; #(
+        64) gl_cv_header_working_fcntl_h='no (bad O_NOATIME)';; #(
+        68) gl_cv_header_working_fcntl_h='no (bad O_NOATIME, O_NOFOLLOW)';; #(
+         *) gl_cv_header_working_fcntl_h='no';;
+        esac],
+       [gl_cv_header_working_fcntl_h=cross-compiling])])
+
+  case $gl_cv_header_working_fcntl_h in #(
+  *O_NOATIME* | no | cross-compiling) ac_val=0;; #(
+  *) ac_val=1;;
+  esac
+  AC_DEFINE_UNQUOTED([HAVE_WORKING_O_NOATIME], [$ac_val],
+    [Define to 1 if O_NOATIME works.])
+
+  case $gl_cv_header_working_fcntl_h in #(
+  *O_NOFOLLOW* | no | cross-compiling) ac_val=0;; #(
+  *) ac_val=1;;
+  esac
+  AC_DEFINE_UNQUOTED([HAVE_WORKING_O_NOFOLLOW], [$ac_val],
+    [Define to 1 if O_NOFOLLOW works.])
+])
diff -urN dpkg-1.20.9/m4/glibc21.m4 dpkg-1.20.9ubuntu1/m4/glibc21.m4
--- dpkg-1.20.9/m4/glibc21.m4	1970-01-01 01:00:00.000000000 +0100
+++ dpkg-1.20.9ubuntu1/m4/glibc21.m4	2021-04-14 12:32:22.000000000 +0200
@@ -0,0 +1,34 @@
+# glibc21.m4 serial 5
+dnl Copyright (C) 2000-2002, 2004, 2008, 2010-2016 Free Software Foundation,
+dnl Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+# Test for the GNU C Library, version 2.1 or newer, or uClibc.
+# From Bruno Haible.
+
+AC_DEFUN([gl_GLIBC21],
+  [
+    AC_CACHE_CHECK([whether we are using the GNU C Library >= 2.1 or uClibc],
+      [ac_cv_gnu_library_2_1],
+      [AC_EGREP_CPP([Lucky],
+        [
+#include <features.h>
+#ifdef __GNU_LIBRARY__
+ #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2)
+  Lucky GNU user
+ #endif
+#endif
+#ifdef __UCLIBC__
+ Lucky user
+#endif
+        ],
+        [ac_cv_gnu_library_2_1=yes],
+        [ac_cv_gnu_library_2_1=no])
+      ]
+    )
+    AC_SUBST([GLIBC21])
+    GLIBC21="$ac_cv_gnu_library_2_1"
+  ]
+)
diff -urN dpkg-1.20.9/m4/glibc2.m4 dpkg-1.20.9ubuntu1/m4/glibc2.m4
--- dpkg-1.20.9/m4/glibc2.m4	1970-01-01 01:00:00.000000000 +0100
+++ dpkg-1.20.9ubuntu1/m4/glibc2.m4	2021-04-14 12:32:22.000000000 +0200
@@ -0,0 +1,31 @@
+# glibc2.m4 serial 3
+dnl Copyright (C) 2000-2002, 2004, 2008, 2010-2016 Free Software Foundation,
+dnl Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+# Test for the GNU C Library, version 2.0 or newer.
+# From Bruno Haible.
+
+AC_DEFUN([gt_GLIBC2],
+  [
+    AC_CACHE_CHECK([whether we are using the GNU C Library 2 or newer],
+      [ac_cv_gnu_library_2],
+      [AC_EGREP_CPP([Lucky GNU user],
+        [
+#include <features.h>
+#ifdef __GNU_LIBRARY__
+ #if (__GLIBC__ >= 2) && !defined __UCLIBC__
+  Lucky GNU user
+ #endif
+#endif
+        ],
+        [ac_cv_gnu_library_2=yes],
+        [ac_cv_gnu_library_2=no])
+      ]
+    )
+    AC_SUBST([GLIBC2])
+    GLIBC2="$ac_cv_gnu_library_2"
+  ]
+)
diff -urN dpkg-1.20.9/m4/intdiv0.m4 dpkg-1.20.9ubuntu1/m4/intdiv0.m4
--- dpkg-1.20.9/m4/intdiv0.m4	1970-01-01 01:00:00.000000000 +0100
+++ dpkg-1.20.9ubuntu1/m4/intdiv0.m4	2021-04-14 12:32:22.000000000 +0200
@@ -0,0 +1,87 @@
+# intdiv0.m4 serial 6 (gettext-0.18.2)
+dnl Copyright (C) 2002, 2007-2008, 2010-2016 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+AC_DEFUN([gt_INTDIV0],
+[
+  AC_REQUIRE([AC_PROG_CC])dnl
+  AC_REQUIRE([AC_CANONICAL_HOST])dnl
+
+  AC_CACHE_CHECK([whether integer division by zero raises SIGFPE],
+    gt_cv_int_divbyzero_sigfpe,
+    [
+      gt_cv_int_divbyzero_sigfpe=
+changequote(,)dnl
+      case "$host_os" in
+        macos* | darwin[6-9]* | darwin[1-9][0-9]*)
+          # On Mac OS X 10.2 or newer, just assume the same as when cross-
+          # compiling. If we were to perform the real test, 1 Crash Report
+          # dialog window would pop up.
+          case "$host_cpu" in
+            i[34567]86 | x86_64)
+              gt_cv_int_divbyzero_sigfpe="guessing yes" ;;
+          esac
+          ;;
+      esac
+changequote([,])dnl
+      if test -z "$gt_cv_int_divbyzero_sigfpe"; then
+        AC_RUN_IFELSE(
+          [AC_LANG_SOURCE([[
+#include <stdlib.h>
+#include <signal.h>
+
+static void
+sigfpe_handler (int sig)
+{
+  /* Exit with code 0 if SIGFPE, with code 1 if any other signal.  */
+  _exit (sig != SIGFPE);
+}
+
+int x = 1;
+int y = 0;
+int z;
+int nan;
+
+int main ()
+{
+  signal (SIGFPE, sigfpe_handler);
+/* IRIX and AIX (when "xlc -qcheck" is used) yield signal SIGTRAP.  */
+#if (defined (__sgi) || defined (_AIX)) && defined (SIGTRAP)
+  signal (SIGTRAP, sigfpe_handler);
+#endif
+/* Linux/SPARC yields signal SIGILL.  */
+#if defined (__sparc__) && defined (__linux__)
+  signal (SIGILL, sigfpe_handler);
+#endif
+
+  z = x / y;
+  nan = y / y;
+  exit (2);
+}
+]])],
+          [gt_cv_int_divbyzero_sigfpe=yes],
+          [gt_cv_int_divbyzero_sigfpe=no],
+          [
+            # Guess based on the CPU.
+changequote(,)dnl
+            case "$host_cpu" in
+              alpha* | i[34567]86 | x86_64 | m68k | s390*)
+                gt_cv_int_divbyzero_sigfpe="guessing yes";;
+              *)
+                gt_cv_int_divbyzero_sigfpe="guessing no";;
+            esac
+changequote([,])dnl
+          ])
+      fi
+    ])
+  case "$gt_cv_int_divbyzero_sigfpe" in
+    *yes) value=1;;
+    *) value=0;;
+  esac
+  AC_DEFINE_UNQUOTED([INTDIV0_RAISES_SIGFPE], [$value],
+    [Define if integer division by zero raises signal SIGFPE.])
+])
diff -urN dpkg-1.20.9/m4/intldir.m4 dpkg-1.20.9ubuntu1/m4/intldir.m4
--- dpkg-1.20.9/m4/intldir.m4	1970-01-01 01:00:00.000000000 +0100
+++ dpkg-1.20.9ubuntu1/m4/intldir.m4	2021-04-14 12:32:22.000000000 +0200
@@ -0,0 +1,19 @@
+# intldir.m4 serial 2 (gettext-0.18)
+dnl Copyright (C) 2006, 2009-2014, 2016 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl
+dnl This file can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Library General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Library General Public License, and the rest of the GNU
+dnl gettext package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+AC_PREREQ([2.52])
+
+dnl Tells the AM_GNU_GETTEXT macro to consider an intl/ directory.
+AC_DEFUN([AM_GNU_GETTEXT_INTL_SUBDIR], [])
diff -urN dpkg-1.20.9/m4/intl.m4 dpkg-1.20.9ubuntu1/m4/intl.m4
--- dpkg-1.20.9/m4/intl.m4	1970-01-01 01:00:00.000000000 +0100
+++ dpkg-1.20.9ubuntu1/m4/intl.m4	2021-04-14 12:32:22.000000000 +0200
@@ -0,0 +1,304 @@
+# intl.m4 serial 29 (gettext-0.19)
+dnl Copyright (C) 1995-2014, 2016 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl
+dnl This file can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Library General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Library General Public License, and the rest of the GNU
+dnl gettext package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Authors:
+dnl   Ulrich Drepper <drepper@cygnus.com>, 1995-2000.
+dnl   Bruno Haible <haible@clisp.cons.org>, 2000-2009.
+
+AC_PREREQ([2.60])
+
+dnl Checks for all prerequisites of the intl subdirectory,
+dnl except for INTL_LIBTOOL_SUFFIX_PREFIX (and possibly LIBTOOL), INTLOBJS,
+dnl            USE_INCLUDED_LIBINTL, BUILD_INCLUDED_LIBINTL.
+AC_DEFUN([AM_INTL_SUBDIR],
+[
+  AC_REQUIRE([AC_PROG_INSTALL])dnl
+  AC_REQUIRE([AC_PROG_MKDIR_P])dnl
+  AC_REQUIRE([AC_PROG_CC])dnl
+  AC_REQUIRE([AC_CANONICAL_HOST])dnl
+  AC_REQUIRE([gt_GLIBC2])dnl
+  AC_REQUIRE([AC_PROG_RANLIB])dnl
+  AC_REQUIRE([gl_VISIBILITY])dnl
+  AC_REQUIRE([gt_INTL_SUBDIR_CORE])dnl
+  AC_REQUIRE([AC_TYPE_LONG_LONG_INT])dnl
+  AC_REQUIRE([gt_TYPE_WCHAR_T])dnl
+  AC_REQUIRE([gt_TYPE_WINT_T])dnl
+  AC_REQUIRE([gl_AC_HEADER_INTTYPES_H])
+  AC_REQUIRE([gt_TYPE_INTMAX_T])
+  AC_REQUIRE([gt_PRINTF_POSIX])
+  AC_REQUIRE([gl_GLIBC21])dnl
+  AC_REQUIRE([gl_XSIZE])dnl
+  AC_REQUIRE([gl_FCNTL_O_FLAGS])dnl
+  AC_REQUIRE([gt_INTL_MACOSX])dnl
+  AC_REQUIRE([gl_EXTERN_INLINE])dnl
+  AC_REQUIRE([gt_GL_ATTRIBUTE])dnl
+
+  dnl Support for automake's --enable-silent-rules.
+  case "$enable_silent_rules" in
+    yes) INTL_DEFAULT_VERBOSITY=0;;
+    no)  INTL_DEFAULT_VERBOSITY=1;;
+    *)   INTL_DEFAULT_VERBOSITY=1;;
+  esac
+  AC_SUBST([INTL_DEFAULT_VERBOSITY])
+
+  AC_CHECK_TYPE([ptrdiff_t], ,
+    [AC_DEFINE([ptrdiff_t], [long],
+       [Define as the type of the result of subtracting two pointers, if the system doesn't define it.])
+    ])
+  AC_CHECK_HEADERS([features.h stddef.h stdlib.h string.h])
+  AC_CHECK_FUNCS([asprintf fwprintf newlocale putenv setenv setlocale \
+    snprintf strnlen wcslen wcsnlen mbrtowc wcrtomb])
+
+  dnl Use the _snprintf function only if it is declared (because on NetBSD it
+  dnl is defined as a weak alias of snprintf; we prefer to use the latter).
+  AC_CHECK_DECLS([_snprintf, _snwprintf], , , [#include <stdio.h>])
+
+  dnl Use the *_unlocked functions only if they are declared.
+  dnl (because some of them were defined without being declared in Solaris
+  dnl 2.5.1 but were removed in Solaris 2.6, whereas we want binaries built
+  dnl on Solaris 2.5.1 to run on Solaris 2.6).
+  AC_CHECK_DECLS([getc_unlocked], , , [#include <stdio.h>])
+
+  case $gt_cv_func_printf_posix in
+    *yes) HAVE_POSIX_PRINTF=1 ;;
+    *) HAVE_POSIX_PRINTF=0 ;;
+  esac
+  AC_SUBST([HAVE_POSIX_PRINTF])
+  if test "$ac_cv_func_asprintf" = yes; then
+    HAVE_ASPRINTF=1
+  else
+    HAVE_ASPRINTF=0
+  fi
+  AC_SUBST([HAVE_ASPRINTF])
+  if test "$ac_cv_func_snprintf" = yes; then
+    HAVE_SNPRINTF=1
+  else
+    HAVE_SNPRINTF=0
+  fi
+  AC_SUBST([HAVE_SNPRINTF])
+  if test "$ac_cv_func_newlocale" = yes; then
+    HAVE_NEWLOCALE=1
+  else
+    HAVE_NEWLOCALE=0
+  fi
+  AC_SUBST([HAVE_NEWLOCALE])
+  if test "$ac_cv_func_wprintf" = yes; then
+    HAVE_WPRINTF=1
+  else
+    HAVE_WPRINTF=0
+  fi
+  AC_SUBST([HAVE_WPRINTF])
+
+  AM_LANGINFO_CODESET
+  gt_LC_MESSAGES
+
+  dnl Compilation on mingw and Cygwin needs special Makefile rules, because
+  dnl 1. when we install a shared library, we must arrange to export
+  dnl    auxiliary pointer variables for every exported variable,
+  dnl 2. when we install a shared library and a static library simultaneously,
+  dnl    the include file specifies __declspec(dllimport) and therefore we
+  dnl    must arrange to define the auxiliary pointer variables for the
+  dnl    exported variables _also_ in the static library.
+  if test "$enable_shared" = yes; then
+    case "$host_os" in
+      mingw* | cygwin*) is_woe32dll=yes ;;
+      *) is_woe32dll=no ;;
+    esac
+  else
+    is_woe32dll=no
+  fi
+  WOE32DLL=$is_woe32dll
+  AC_SUBST([WOE32DLL])
+
+  dnl On mingw and Cygwin, we can activate special Makefile rules which add
+  dnl version information to the shared libraries and executables.
+  case "$host_os" in
+    mingw* | cygwin*) is_woe32=yes ;;
+    *) is_woe32=no ;;
+  esac
+  WOE32=$is_woe32
+  AC_SUBST([WOE32])
+  if test $WOE32 = yes; then
+    dnl Check for a program that compiles Windows resource files.
+    AC_CHECK_TOOL([WINDRES], [windres])
+  fi
+
+  dnl Determine whether when creating a library, "-lc" should be passed to
+  dnl libtool or not. On many platforms, it is required for the libtool option
+  dnl -no-undefined to work. On HP-UX, however, the -lc - stored by libtool
+  dnl in the *.la files - makes it impossible to create multithreaded programs,
+  dnl because libtool also reorders the -lc to come before the -pthread, and
+  dnl this disables pthread_create() <http://docs.hp.com/en/1896/pthreads.html>.
+  case "$host_os" in
+    hpux*) LTLIBC="" ;;
+    *)     LTLIBC="-lc" ;;
+  esac
+  AC_SUBST([LTLIBC])
+
+  dnl Rename some macros and functions used for locking.
+  AH_BOTTOM([
+#define __libc_lock_t                   gl_lock_t
+#define __libc_lock_define              gl_lock_define
+#define __libc_lock_define_initialized  gl_lock_define_initialized
+#define __libc_lock_init                gl_lock_init
+#define __libc_lock_lock                gl_lock_lock
+#define __libc_lock_unlock              gl_lock_unlock
+#define __libc_lock_recursive_t                   gl_recursive_lock_t
+#define __libc_lock_define_recursive              gl_recursive_lock_define
+#define __libc_lock_define_initialized_recursive  gl_recursive_lock_define_initialized
+#define __libc_lock_init_recursive                gl_recursive_lock_init
+#define __libc_lock_lock_recursive                gl_recursive_lock_lock
+#define __libc_lock_unlock_recursive              gl_recursive_lock_unlock
+#define glthread_in_use  libintl_thread_in_use
+#define glthread_lock_init_func     libintl_lock_init_func
+#define glthread_lock_lock_func     libintl_lock_lock_func
+#define glthread_lock_unlock_func   libintl_lock_unlock_func
+#define glthread_lock_destroy_func  libintl_lock_destroy_func
+#define glthread_rwlock_init_multithreaded     libintl_rwlock_init_multithreaded
+#define glthread_rwlock_init_func              libintl_rwlock_init_func
+#define glthread_rwlock_rdlock_multithreaded   libintl_rwlock_rdlock_multithreaded
+#define glthread_rwlock_rdlock_func            libintl_rwlock_rdlock_func
+#define glthread_rwlock_wrlock_multithreaded   libintl_rwlock_wrlock_multithreaded
+#define glthread_rwlock_wrlock_func            libintl_rwlock_wrlock_func
+#define glthread_rwlock_unlock_multithreaded   libintl_rwlock_unlock_multithreaded
+#define glthread_rwlock_unlock_func            libintl_rwlock_unlock_func
+#define glthread_rwlock_destroy_multithreaded  libintl_rwlock_destroy_multithreaded
+#define glthread_rwlock_destroy_func           libintl_rwlock_destroy_func
+#define glthread_recursive_lock_init_multithreaded     libintl_recursive_lock_init_multithreaded
+#define glthread_recursive_lock_init_func              libintl_recursive_lock_init_func
+#define glthread_recursive_lock_lock_multithreaded     libintl_recursive_lock_lock_multithreaded
+#define glthread_recursive_lock_lock_func              libintl_recursive_lock_lock_func
+#define glthread_recursive_lock_unlock_multithreaded   libintl_recursive_lock_unlock_multithreaded
+#define glthread_recursive_lock_unlock_func            libintl_recursive_lock_unlock_func
+#define glthread_recursive_lock_destroy_multithreaded  libintl_recursive_lock_destroy_multithreaded
+#define glthread_recursive_lock_destroy_func           libintl_recursive_lock_destroy_func
+#define glthread_once_func            libintl_once_func
+#define glthread_once_singlethreaded  libintl_once_singlethreaded
+#define glthread_once_multithreaded   libintl_once_multithreaded
+])
+])
+
+
+dnl Checks for the core files of the intl subdirectory:
+dnl   dcigettext.c
+dnl   eval-plural.h
+dnl   explodename.c
+dnl   finddomain.c
+dnl   gettextP.h
+dnl   gmo.h
+dnl   hash-string.h hash-string.c
+dnl   l10nflist.c
+dnl   libgnuintl.h.in (except the *printf stuff)
+dnl   loadinfo.h
+dnl   loadmsgcat.c
+dnl   localealias.c
+dnl   log.c
+dnl   plural-exp.h plural-exp.c
+dnl   plural.y
+dnl Used by libglocale.
+AC_DEFUN([gt_INTL_SUBDIR_CORE],
+[
+  AC_REQUIRE([AC_C_INLINE])dnl
+  AC_REQUIRE([AC_TYPE_SIZE_T])dnl
+  AC_REQUIRE([gl_AC_HEADER_STDINT_H])
+  AC_REQUIRE([AC_FUNC_ALLOCA])dnl
+  AC_REQUIRE([AC_FUNC_MMAP])dnl
+  AC_REQUIRE([gt_INTDIV0])dnl
+  AC_REQUIRE([gl_AC_TYPE_UINTMAX_T])dnl
+  AC_REQUIRE([gt_INTTYPES_PRI])dnl
+  AC_REQUIRE([gl_LOCK])dnl
+
+  AC_LINK_IFELSE(
+    [AC_LANG_PROGRAM(
+       [[int foo (int a) { a = __builtin_expect (a, 10); return a == 10 ? 0 : 1; }]],
+       [[]])],
+    [AC_DEFINE([HAVE_BUILTIN_EXPECT], [1],
+       [Define to 1 if the compiler understands __builtin_expect.])])
+
+  AC_CHECK_HEADERS([argz.h inttypes.h limits.h unistd.h sys/param.h])
+  AC_CHECK_FUNCS([getcwd getegid geteuid getgid getuid mempcpy munmap \
+    stpcpy strcasecmp strdup strtoul tsearch uselocale argz_count \
+    argz_stringify argz_next __fsetlocking])
+
+  dnl Solaris 12 provides getlocalename_l, while Illumos doesn't have
+  dnl it nor the equivalent.
+  if test $ac_cv_func_uselocale = yes; then
+    AC_CHECK_FUNCS([getlocalename_l])
+  fi
+
+  dnl Use the *_unlocked functions only if they are declared.
+  dnl (because some of them were defined without being declared in Solaris
+  dnl 2.5.1 but were removed in Solaris 2.6, whereas we want binaries built
+  dnl on Solaris 2.5.1 to run on Solaris 2.6).
+  AC_CHECK_DECLS([feof_unlocked, fgets_unlocked], , , [#include <stdio.h>])
+
+  AM_ICONV
+
+  dnl intl/plural.c is generated from intl/plural.y. It requires bison,
+  dnl because plural.y uses bison specific features. It requires at least
+  dnl bison-2.7 for %define api.pure.
+  dnl bison is only needed for the maintainer (who touches plural.y). But in
+  dnl order to avoid separate Makefiles or --enable-maintainer-mode, we put
+  dnl the rule in general Makefile. Now, some people carelessly touch the
+  dnl files or have a broken "make" program, hence the plural.c rule will
+  dnl sometimes fire. To avoid an error, defines BISON to ":" if it is not
+  dnl present or too old.
+  AC_CHECK_PROGS([INTLBISON], [bison])
+  if test -z "$INTLBISON"; then
+    ac_verc_fail=yes
+  else
+    dnl Found it, now check the version.
+    AC_MSG_CHECKING([version of bison])
+changequote(<<,>>)dnl
+    ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'`
+    case $ac_prog_version in
+      '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
+      2.[7-9]* | [3-9].*)
+changequote([,])dnl
+         ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
+      *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
+    esac
+    AC_MSG_RESULT([$ac_prog_version])
+  fi
+  if test $ac_verc_fail = yes; then
+    INTLBISON=:
+  fi
+])
+
+dnl Copies _GL_UNUSED and _GL_ATTRIBUTE_PURE definitions from
+dnl gnulib-common.m4 as a fallback, if the project isn't using Gnulib.
+AC_DEFUN([gt_GL_ATTRIBUTE], [
+  m4_ifndef([gl_[]COMMON],
+    AH_VERBATIM([gt_gl_attribute],
+[/* Define as a marker that can be attached to declarations that might not
+    be used.  This helps to reduce warnings, such as from
+    GCC -Wunused-parameter.  */
+#ifndef _GL_UNUSED
+# if __GNUC__ >= 3 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7)
+#  define _GL_UNUSED __attribute__ ((__unused__))
+# else
+#  define _GL_UNUSED
+# endif
+#endif
+
+/* The __pure__ attribute was added in gcc 2.96.  */
+#ifndef _GL_ATTRIBUTE_PURE
+# if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
+#  define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__))
+# else
+#  define _GL_ATTRIBUTE_PURE /* empty */
+# endif
+#endif
+]))])
diff -urN dpkg-1.20.9/m4/intmax.m4 dpkg-1.20.9ubuntu1/m4/intmax.m4
--- dpkg-1.20.9/m4/intmax.m4	1970-01-01 01:00:00.000000000 +0100
+++ dpkg-1.20.9ubuntu1/m4/intmax.m4	2021-04-14 12:32:22.000000000 +0200
@@ -0,0 +1,36 @@
+# intmax.m4 serial 6 (gettext-0.18.2)
+dnl Copyright (C) 2002-2005, 2008-2016 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+dnl Test whether the system has the 'intmax_t' type, but don't attempt to
+dnl find a replacement if it is lacking.
+
+AC_DEFUN([gt_TYPE_INTMAX_T],
+[
+  AC_REQUIRE([gl_AC_HEADER_INTTYPES_H])
+  AC_REQUIRE([gl_AC_HEADER_STDINT_H])
+  AC_CACHE_CHECK([for intmax_t], [gt_cv_c_intmax_t],
+    [AC_COMPILE_IFELSE(
+       [AC_LANG_PROGRAM(
+          [[
+#include <stddef.h>
+#include <stdlib.h>
+#if HAVE_STDINT_H_WITH_UINTMAX
+#include <stdint.h>
+#endif
+#if HAVE_INTTYPES_H_WITH_UINTMAX
+#include <inttypes.h>
+#endif
+          ]],
+          [[intmax_t x = -1;
+            return !x;]])],
+       [gt_cv_c_intmax_t=yes],
+       [gt_cv_c_intmax_t=no])])
+  if test $gt_cv_c_intmax_t = yes; then
+    AC_DEFINE([HAVE_INTMAX_T], [1],
+      [Define if you have the 'intmax_t' type in <stdint.h> or <inttypes.h>.])
+  fi
+])
diff -urN dpkg-1.20.9/m4/inttypes_h.m4 dpkg-1.20.9ubuntu1/m4/inttypes_h.m4
--- dpkg-1.20.9/m4/inttypes_h.m4	1970-01-01 01:00:00.000000000 +0100
+++ dpkg-1.20.9ubuntu1/m4/inttypes_h.m4	2021-04-14 12:32:22.000000000 +0200
@@ -0,0 +1,29 @@
+# inttypes_h.m4 serial 10
+dnl Copyright (C) 1997-2004, 2006, 2008-2016 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Paul Eggert.
+
+# Define HAVE_INTTYPES_H_WITH_UINTMAX if <inttypes.h> exists,
+# doesn't clash with <sys/types.h>, and declares uintmax_t.
+
+AC_DEFUN([gl_AC_HEADER_INTTYPES_H],
+[
+  AC_CACHE_CHECK([for inttypes.h], [gl_cv_header_inttypes_h],
+    [AC_COMPILE_IFELSE(
+       [AC_LANG_PROGRAM(
+          [[
+#include <sys/types.h>
+#include <inttypes.h>
+          ]],
+          [[uintmax_t i = (uintmax_t) -1; return !i;]])],
+       [gl_cv_header_inttypes_h=yes],
+       [gl_cv_header_inttypes_h=no])])
+  if test $gl_cv_header_inttypes_h = yes; then
+    AC_DEFINE_UNQUOTED([HAVE_INTTYPES_H_WITH_UINTMAX], [1],
+      [Define if <inttypes.h> exists, doesn't clash with <sys/types.h>,
+       and declares uintmax_t. ])
+  fi
+])
diff -urN dpkg-1.20.9/m4/inttypes-pri.m4 dpkg-1.20.9ubuntu1/m4/inttypes-pri.m4
--- dpkg-1.20.9/m4/inttypes-pri.m4	1970-01-01 01:00:00.000000000 +0100
+++ dpkg-1.20.9ubuntu1/m4/inttypes-pri.m4	2021-04-14 12:32:22.000000000 +0200
@@ -0,0 +1,42 @@
+# inttypes-pri.m4 serial 7 (gettext-0.18.2)
+dnl Copyright (C) 1997-2002, 2006, 2008-2016 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+AC_PREREQ([2.53])
+
+# Define PRI_MACROS_BROKEN if <inttypes.h> exists and defines the PRI*
+# macros to non-string values.  This is the case on AIX 4.3.3.
+
+AC_DEFUN([gt_INTTYPES_PRI],
+[
+  AC_CHECK_HEADERS([inttypes.h])
+  if test $ac_cv_header_inttypes_h = yes; then
+    AC_CACHE_CHECK([whether the inttypes.h PRIxNN macros are broken],
+      [gt_cv_inttypes_pri_broken],
+      [
+        AC_COMPILE_IFELSE(
+          [AC_LANG_PROGRAM(
+             [[
+#include <inttypes.h>
+#ifdef PRId32
+char *p = PRId32;
+#endif
+             ]],
+             [[]])],
+          [gt_cv_inttypes_pri_broken=no],
+          [gt_cv_inttypes_pri_broken=yes])
+      ])
+  fi
+  if test "$gt_cv_inttypes_pri_broken" = yes; then
+    AC_DEFINE_UNQUOTED([PRI_MACROS_BROKEN], [1],
+      [Define if <inttypes.h> exists and defines unusable PRI* macros.])
+    PRI_MACROS_BROKEN=1
+  else
+    PRI_MACROS_BROKEN=0
+  fi
+  AC_SUBST([PRI_MACROS_BROKEN])
+])
diff -urN dpkg-1.20.9/m4/lcmessage.m4 dpkg-1.20.9ubuntu1/m4/lcmessage.m4
--- dpkg-1.20.9/m4/lcmessage.m4	1970-01-01 01:00:00.000000000 +0100
+++ dpkg-1.20.9ubuntu1/m4/lcmessage.m4	2021-04-14 12:32:22.000000000 +0200
@@ -0,0 +1,35 @@
+# lcmessage.m4 serial 7 (gettext-0.18.2)
+dnl Copyright (C) 1995-2002, 2004-2005, 2008-2014, 2016 Free Software
+dnl Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl
+dnl This file can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Library General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Library General Public License, and the rest of the GNU
+dnl gettext package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Authors:
+dnl   Ulrich Drepper <drepper@cygnus.com>, 1995.
+
+# Check whether LC_MESSAGES is available in <locale.h>.
+
+AC_DEFUN([gt_LC_MESSAGES],
+[
+  AC_CACHE_CHECK([for LC_MESSAGES], [gt_cv_val_LC_MESSAGES],
+    [AC_LINK_IFELSE(
+       [AC_LANG_PROGRAM(
+          [[#include <locale.h>]],
+          [[return LC_MESSAGES]])],
+       [gt_cv_val_LC_MESSAGES=yes],
+       [gt_cv_val_LC_MESSAGES=no])])
+  if test $gt_cv_val_LC_MESSAGES = yes; then
+    AC_DEFINE([HAVE_LC_MESSAGES], [1],
+      [Define if your <locale.h> file defines LC_MESSAGES.])
+  fi
+])
diff -urN dpkg-1.20.9/m4/lock.m4 dpkg-1.20.9ubuntu1/m4/lock.m4
--- dpkg-1.20.9/m4/lock.m4	1970-01-01 01:00:00.000000000 +0100
+++ dpkg-1.20.9ubuntu1/m4/lock.m4	2021-04-14 12:32:22.000000000 +0200
@@ -0,0 +1,42 @@
+# lock.m4 serial 13 (gettext-0.18.2)
+dnl Copyright (C) 2005-2016 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+AC_DEFUN([gl_LOCK],
+[
+  AC_REQUIRE([gl_THREADLIB])
+  if test "$gl_threads_api" = posix; then
+    # OSF/1 4.0 and Mac OS X 10.1 lack the pthread_rwlock_t type and the
+    # pthread_rwlock_* functions.
+    AC_CHECK_TYPE([pthread_rwlock_t],
+      [AC_DEFINE([HAVE_PTHREAD_RWLOCK], [1],
+         [Define if the POSIX multithreading library has read/write locks.])],
+      [],
+      [#include <pthread.h>])
+    # glibc defines PTHREAD_MUTEX_RECURSIVE as enum, not as a macro.
+    AC_COMPILE_IFELSE([
+      AC_LANG_PROGRAM(
+        [[#include <pthread.h>]],
+        [[
+#if __FreeBSD__ == 4
+error "No, in FreeBSD 4.0 recursive mutexes actually don't work."
+#elif (defined __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ \
+       && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 1070)
+error "No, in Mac OS X < 10.7 recursive mutexes actually don't work."
+#else
+int x = (int)PTHREAD_MUTEX_RECURSIVE;
+return !x;
+#endif
+        ]])],
+      [AC_DEFINE([HAVE_PTHREAD_MUTEX_RECURSIVE], [1],
+         [Define if the <pthread.h> defines PTHREAD_MUTEX_RECURSIVE.])])
+  fi
+  gl_PREREQ_LOCK
+])
+
+# Prerequisites of lib/glthread/lock.c.
+AC_DEFUN([gl_PREREQ_LOCK], [:])
diff -urN dpkg-1.20.9/m4/longlong.m4 dpkg-1.20.9ubuntu1/m4/longlong.m4
--- dpkg-1.20.9/m4/longlong.m4	1970-01-01 01:00:00.000000000 +0100
+++ dpkg-1.20.9ubuntu1/m4/longlong.m4	2021-04-14 12:32:22.000000000 +0200
@@ -0,0 +1,113 @@
+# longlong.m4 serial 17
+dnl Copyright (C) 1999-2007, 2009-2016 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Paul Eggert.
+
+# Define HAVE_LONG_LONG_INT if 'long long int' works.
+# This fixes a bug in Autoconf 2.61, and can be faster
+# than what's in Autoconf 2.62 through 2.68.
+
+# Note: If the type 'long long int' exists but is only 32 bits large
+# (as on some very old compilers), HAVE_LONG_LONG_INT will not be
+# defined. In this case you can treat 'long long int' like 'long int'.
+
+AC_DEFUN([AC_TYPE_LONG_LONG_INT],
+[
+  AC_REQUIRE([AC_TYPE_UNSIGNED_LONG_LONG_INT])
+  AC_CACHE_CHECK([for long long int], [ac_cv_type_long_long_int],
+     [ac_cv_type_long_long_int=yes
+      if test "x${ac_cv_prog_cc_c99-no}" = xno; then
+        ac_cv_type_long_long_int=$ac_cv_type_unsigned_long_long_int
+        if test $ac_cv_type_long_long_int = yes; then
+          dnl Catch a bug in Tandem NonStop Kernel (OSS) cc -O circa 2004.
+          dnl If cross compiling, assume the bug is not important, since
+          dnl nobody cross compiles for this platform as far as we know.
+          AC_RUN_IFELSE(
+            [AC_LANG_PROGRAM(
+               [[@%:@include <limits.h>
+                 @%:@ifndef LLONG_MAX
+                 @%:@ define HALF \
+                          (1LL << (sizeof (long long int) * CHAR_BIT - 2))
+                 @%:@ define LLONG_MAX (HALF - 1 + HALF)
+                 @%:@endif]],
+               [[long long int n = 1;
+                 int i;
+                 for (i = 0; ; i++)
+                   {
+                     long long int m = n << i;
+                     if (m >> i != n)
+                       return 1;
+                     if (LLONG_MAX / 2 < m)
+                       break;
+                   }
+                 return 0;]])],
+            [],
+            [ac_cv_type_long_long_int=no],
+            [:])
+        fi
+      fi])
+  if test $ac_cv_type_long_long_int = yes; then
+    AC_DEFINE([HAVE_LONG_LONG_INT], [1],
+      [Define to 1 if the system has the type 'long long int'.])
+  fi
+])
+
+# Define HAVE_UNSIGNED_LONG_LONG_INT if 'unsigned long long int' works.
+# This fixes a bug in Autoconf 2.61, and can be faster
+# than what's in Autoconf 2.62 through 2.68.
+
+# Note: If the type 'unsigned long long int' exists but is only 32 bits
+# large (as on some very old compilers), AC_TYPE_UNSIGNED_LONG_LONG_INT
+# will not be defined. In this case you can treat 'unsigned long long int'
+# like 'unsigned long int'.
+
+AC_DEFUN([AC_TYPE_UNSIGNED_LONG_LONG_INT],
+[
+  AC_CACHE_CHECK([for unsigned long long int],
+    [ac_cv_type_unsigned_long_long_int],
+    [ac_cv_type_unsigned_long_long_int=yes
+     if test "x${ac_cv_prog_cc_c99-no}" = xno; then
+       AC_LINK_IFELSE(
+         [_AC_TYPE_LONG_LONG_SNIPPET],
+         [],
+         [ac_cv_type_unsigned_long_long_int=no])
+     fi])
+  if test $ac_cv_type_unsigned_long_long_int = yes; then
+    AC_DEFINE([HAVE_UNSIGNED_LONG_LONG_INT], [1],
+      [Define to 1 if the system has the type 'unsigned long long int'.])
+  fi
+])
+
+# Expands to a C program that can be used to test for simultaneous support
+# of 'long long' and 'unsigned long long'. We don't want to say that
+# 'long long' is available if 'unsigned long long' is not, or vice versa,
+# because too many programs rely on the symmetry between signed and unsigned
+# integer types (excluding 'bool').
+AC_DEFUN([_AC_TYPE_LONG_LONG_SNIPPET],
+[
+  AC_LANG_PROGRAM(
+    [[/* For now, do not test the preprocessor; as of 2007 there are too many
+         implementations with broken preprocessors.  Perhaps this can
+         be revisited in 2012.  In the meantime, code should not expect
+         #if to work with literals wider than 32 bits.  */
+      /* Test literals.  */
+      long long int ll = 9223372036854775807ll;
+      long long int nll = -9223372036854775807LL;
+      unsigned long long int ull = 18446744073709551615ULL;
+      /* Test constant expressions.   */
+      typedef int a[((-9223372036854775807LL < 0 && 0 < 9223372036854775807ll)
+                     ? 1 : -1)];
+      typedef int b[(18446744073709551615ULL <= (unsigned long long int) -1
+                     ? 1 : -1)];
+      int i = 63;]],
+    [[/* Test availability of runtime routines for shift and division.  */
+      long long int llmax = 9223372036854775807ll;
+      unsigned long long int ullmax = 18446744073709551615ull;
+      return ((ll << 63) | (ll >> 63) | (ll < i) | (ll > i)
+              | (llmax / ll) | (llmax % ll)
+              | (ull << 63) | (ull >> 63) | (ull << i) | (ull >> i)
+              | (ullmax / ull) | (ullmax % ull));]])
+])
diff -urN dpkg-1.20.9/m4/printf-posix.m4 dpkg-1.20.9ubuntu1/m4/printf-posix.m4
--- dpkg-1.20.9/m4/printf-posix.m4	1970-01-01 01:00:00.000000000 +0100
+++ dpkg-1.20.9ubuntu1/m4/printf-posix.m4	2021-04-14 12:32:22.000000000 +0200
@@ -0,0 +1,48 @@
+# printf-posix.m4 serial 6 (gettext-0.18.2)
+dnl Copyright (C) 2003, 2007, 2009-2016 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+dnl Test whether the printf() function supports POSIX/XSI format strings with
+dnl positions.
+
+AC_DEFUN([gt_PRINTF_POSIX],
+[
+  AC_REQUIRE([AC_PROG_CC])
+  AC_CACHE_CHECK([whether printf() supports POSIX/XSI format strings],
+    gt_cv_func_printf_posix,
+    [
+      AC_RUN_IFELSE(
+        [AC_LANG_SOURCE([[
+#include <stdio.h>
+#include <string.h>
+/* The string "%2$d %1$d", with dollar characters protected from the shell's
+   dollar expansion (possibly an autoconf bug).  */
+static char format[] = { '%', '2', '$', 'd', ' ', '%', '1', '$', 'd', '\0' };
+static char buf[100];
+int main ()
+{
+  sprintf (buf, format, 33, 55);
+  return (strcmp (buf, "55 33") != 0);
+}]])],
+        [gt_cv_func_printf_posix=yes],
+        [gt_cv_func_printf_posix=no],
+        [
+          AC_EGREP_CPP([notposix], [
+#if defined __NetBSD__ || defined __BEOS__ || defined _MSC_VER || defined __MINGW32__ || defined __CYGWIN__
+  notposix
+#endif
+            ],
+            [gt_cv_func_printf_posix="guessing no"],
+            [gt_cv_func_printf_posix="guessing yes"])
+        ])
+    ])
+  case $gt_cv_func_printf_posix in
+    *yes)
+      AC_DEFINE([HAVE_POSIX_PRINTF], [1],
+        [Define if your printf() function supports format strings with positions.])
+      ;;
+  esac
+])
diff -urN dpkg-1.20.9/m4/size_max.m4 dpkg-1.20.9ubuntu1/m4/size_max.m4
--- dpkg-1.20.9/m4/size_max.m4	1970-01-01 01:00:00.000000000 +0100
+++ dpkg-1.20.9ubuntu1/m4/size_max.m4	2021-04-14 12:32:22.000000000 +0200
@@ -0,0 +1,79 @@
+# size_max.m4 serial 10
+dnl Copyright (C) 2003, 2005-2006, 2008-2016 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+AC_DEFUN([gl_SIZE_MAX],
+[
+  AC_CHECK_HEADERS([stdint.h])
+  dnl First test whether the system already has SIZE_MAX.
+  AC_CACHE_CHECK([for SIZE_MAX], [gl_cv_size_max], [
+    gl_cv_size_max=
+    AC_EGREP_CPP([Found it], [
+#include <limits.h>
+#if HAVE_STDINT_H
+#include <stdint.h>
+#endif
+#ifdef SIZE_MAX
+Found it
+#endif
+], [gl_cv_size_max=yes])
+    if test -z "$gl_cv_size_max"; then
+      dnl Define it ourselves. Here we assume that the type 'size_t' is not wider
+      dnl than the type 'unsigned long'. Try hard to find a definition that can
+      dnl be used in a preprocessor #if, i.e. doesn't contain a cast.
+      AC_COMPUTE_INT([size_t_bits_minus_1], [sizeof (size_t) * CHAR_BIT - 1],
+        [#include <stddef.h>
+#include <limits.h>], [size_t_bits_minus_1=])
+      AC_COMPUTE_INT([fits_in_uint], [sizeof (size_t) <= sizeof (unsigned int)],
+        [#include <stddef.h>], [fits_in_uint=])
+      if test -n "$size_t_bits_minus_1" && test -n "$fits_in_uint"; then
+        if test $fits_in_uint = 1; then
+          dnl Even though SIZE_MAX fits in an unsigned int, it must be of type
+          dnl 'unsigned long' if the type 'size_t' is the same as 'unsigned long'.
+          AC_COMPILE_IFELSE(
+            [AC_LANG_PROGRAM(
+               [[#include <stddef.h>
+                 extern size_t foo;
+                 extern unsigned long foo;
+               ]],
+               [[]])],
+            [fits_in_uint=0])
+        fi
+        dnl We cannot use 'expr' to simplify this expression, because 'expr'
+        dnl works only with 'long' integers in the host environment, while we
+        dnl might be cross-compiling from a 32-bit platform to a 64-bit platform.
+        if test $fits_in_uint = 1; then
+          gl_cv_size_max="(((1U << $size_t_bits_minus_1) - 1) * 2 + 1)"
+        else
+          gl_cv_size_max="(((1UL << $size_t_bits_minus_1) - 1) * 2 + 1)"
+        fi
+      else
+        dnl Shouldn't happen, but who knows...
+        gl_cv_size_max='((size_t)~(size_t)0)'
+      fi
+    fi
+  ])
+  if test "$gl_cv_size_max" != yes; then
+    AC_DEFINE_UNQUOTED([SIZE_MAX], [$gl_cv_size_max],
+      [Define as the maximum value of type 'size_t', if the system doesn't define it.])
+  fi
+  dnl Don't redefine SIZE_MAX in config.h if config.h is re-included after
+  dnl <stdint.h>. Remember that the #undef in AH_VERBATIM gets replaced with
+  dnl #define by AC_DEFINE_UNQUOTED.
+  AH_VERBATIM([SIZE_MAX],
+[/* Define as the maximum value of type 'size_t', if the system doesn't define
+   it. */
+#ifndef SIZE_MAX
+# undef SIZE_MAX
+#endif])
+])
+
+dnl Autoconf >= 2.61 has AC_COMPUTE_INT built-in.
+dnl Remove this when we can assume autoconf >= 2.61.
+m4_ifdef([AC_COMPUTE_INT], [], [
+  AC_DEFUN([AC_COMPUTE_INT], [_AC_COMPUTE_INT([$2],[$1],[$3],[$4])])
+])
diff -urN dpkg-1.20.9/m4/stdint_h.m4 dpkg-1.20.9ubuntu1/m4/stdint_h.m4
--- dpkg-1.20.9/m4/stdint_h.m4	1970-01-01 01:00:00.000000000 +0100
+++ dpkg-1.20.9ubuntu1/m4/stdint_h.m4	2021-04-14 12:32:22.000000000 +0200
@@ -0,0 +1,27 @@
+# stdint_h.m4 serial 9
+dnl Copyright (C) 1997-2004, 2006, 2008-2016 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Paul Eggert.
+
+# Define HAVE_STDINT_H_WITH_UINTMAX if <stdint.h> exists,
+# doesn't clash with <sys/types.h>, and declares uintmax_t.
+
+AC_DEFUN([gl_AC_HEADER_STDINT_H],
+[
+  AC_CACHE_CHECK([for stdint.h], [gl_cv_header_stdint_h],
+    [AC_COMPILE_IFELSE(
+       [AC_LANG_PROGRAM(
+          [[#include <sys/types.h>
+            #include <stdint.h>]],
+          [[uintmax_t i = (uintmax_t) -1; return !i;]])],
+       [gl_cv_header_stdint_h=yes],
+       [gl_cv_header_stdint_h=no])])
+  if test $gl_cv_header_stdint_h = yes; then
+    AC_DEFINE_UNQUOTED([HAVE_STDINT_H_WITH_UINTMAX], [1],
+      [Define if <stdint.h> exists, doesn't clash with <sys/types.h>,
+       and declares uintmax_t. ])
+  fi
+])
diff -urN dpkg-1.20.9/m4/threadlib.m4 dpkg-1.20.9ubuntu1/m4/threadlib.m4
--- dpkg-1.20.9/m4/threadlib.m4	1970-01-01 01:00:00.000000000 +0100
+++ dpkg-1.20.9ubuntu1/m4/threadlib.m4	2021-04-14 12:32:22.000000000 +0200
@@ -0,0 +1,389 @@
+# threadlib.m4 serial 11 (gettext-0.18.2)
+dnl Copyright (C) 2005-2016 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+dnl gl_THREADLIB
+dnl ------------
+dnl Tests for a multithreading library to be used.
+dnl If the configure.ac contains a definition of the gl_THREADLIB_DEFAULT_NO
+dnl (it must be placed before the invocation of gl_THREADLIB_EARLY!), then the
+dnl default is 'no', otherwise it is system dependent. In both cases, the user
+dnl can change the choice through the options --enable-threads=choice or
+dnl --disable-threads.
+dnl Defines at most one of the macros USE_POSIX_THREADS, USE_SOLARIS_THREADS,
+dnl USE_PTH_THREADS, USE_WINDOWS_THREADS
+dnl Sets the variables LIBTHREAD and LTLIBTHREAD to the linker options for use
+dnl in a Makefile (LIBTHREAD for use without libtool, LTLIBTHREAD for use with
+dnl libtool).
+dnl Sets the variables LIBMULTITHREAD and LTLIBMULTITHREAD similarly, for
+dnl programs that really need multithread functionality. The difference
+dnl between LIBTHREAD and LIBMULTITHREAD is that on platforms supporting weak
+dnl symbols, typically LIBTHREAD is empty whereas LIBMULTITHREAD is not.
+dnl Adds to CPPFLAGS the flag -D_REENTRANT or -D_THREAD_SAFE if needed for
+dnl multithread-safe programs.
+
+AC_DEFUN([gl_THREADLIB_EARLY],
+[
+  AC_REQUIRE([gl_THREADLIB_EARLY_BODY])
+])
+
+dnl The guts of gl_THREADLIB_EARLY. Needs to be expanded only once.
+
+AC_DEFUN([gl_THREADLIB_EARLY_BODY],
+[
+  dnl Ordering constraints: This macro modifies CPPFLAGS in a way that
+  dnl influences the result of the autoconf tests that test for *_unlocked
+  dnl declarations, on AIX 5 at least. Therefore it must come early.
+  AC_BEFORE([$0], [gl_FUNC_GLIBC_UNLOCKED_IO])dnl
+  AC_BEFORE([$0], [gl_ARGP])dnl
+
+  AC_REQUIRE([AC_CANONICAL_HOST])
+  dnl _GNU_SOURCE is needed for pthread_rwlock_t on glibc systems.
+  dnl AC_USE_SYSTEM_EXTENSIONS was introduced in autoconf 2.60 and obsoletes
+  dnl AC_GNU_SOURCE.
+  m4_ifdef([AC_USE_SYSTEM_EXTENSIONS],
+    [AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])],
+    [AC_REQUIRE([AC_GNU_SOURCE])])
+  dnl Check for multithreading.
+  m4_ifdef([gl_THREADLIB_DEFAULT_NO],
+    [m4_divert_text([DEFAULTS], [gl_use_threads_default=no])],
+    [m4_divert_text([DEFAULTS], [gl_use_threads_default=])])
+  AC_ARG_ENABLE([threads],
+AC_HELP_STRING([--enable-threads={posix|solaris|pth|windows}], [specify multithreading API])m4_ifdef([gl_THREADLIB_DEFAULT_NO], [], [
+AC_HELP_STRING([--disable-threads], [build without multithread safety])]),
+    [gl_use_threads=$enableval],
+    [if test -n "$gl_use_threads_default"; then
+       gl_use_threads="$gl_use_threads_default"
+     else
+changequote(,)dnl
+       case "$host_os" in
+         dnl Disable multithreading by default on OSF/1, because it interferes
+         dnl with fork()/exec(): When msgexec is linked with -lpthread, its
+         dnl child process gets an endless segmentation fault inside execvp().
+         dnl Disable multithreading by default on Cygwin 1.5.x, because it has
+         dnl bugs that lead to endless loops or crashes. See
+         dnl <http://cygwin.com/ml/cygwin/2009-08/msg00283.html>.
+         osf*) gl_use_threads=no ;;
+         cygwin*)
+               case `uname -r` in
+                 1.[0-5].*) gl_use_threads=no ;;
+                 *)         gl_use_threads=yes ;;
+               esac
+               ;;
+         *)    gl_use_threads=yes ;;
+       esac
+changequote([,])dnl
+     fi
+    ])
+  if test "$gl_use_threads" = yes || test "$gl_use_threads" = posix; then
+    # For using <pthread.h>:
+    case "$host_os" in
+      osf*)
+        # On OSF/1, the compiler needs the flag -D_REENTRANT so that it
+        # groks <pthread.h>. cc also understands the flag -pthread, but
+        # we don't use it because 1. gcc-2.95 doesn't understand -pthread,
+        # 2. putting a flag into CPPFLAGS that has an effect on the linker
+        # causes the AC_LINK_IFELSE test below to succeed unexpectedly,
+        # leading to wrong values of LIBTHREAD and LTLIBTHREAD.
+        CPPFLAGS="$CPPFLAGS -D_REENTRANT"
+        ;;
+    esac
+    # Some systems optimize for single-threaded programs by default, and
+    # need special flags to disable these optimizations. For example, the
+    # definition of 'errno' in <errno.h>.
+    case "$host_os" in
+      aix* | freebsd*) CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE" ;;
+      solaris*) CPPFLAGS="$CPPFLAGS -D_REENTRANT" ;;
+    esac
+  fi
+])
+
+dnl The guts of gl_THREADLIB. Needs to be expanded only once.
+
+AC_DEFUN([gl_THREADLIB_BODY],
+[
+  AC_REQUIRE([gl_THREADLIB_EARLY_BODY])
+  gl_threads_api=none
+  LIBTHREAD=
+  LTLIBTHREAD=
+  LIBMULTITHREAD=
+  LTLIBMULTITHREAD=
+  if test "$gl_use_threads" != no; then
+    dnl Check whether the compiler and linker support weak declarations.
+    AC_CACHE_CHECK([whether imported symbols can be declared weak],
+      [gl_cv_have_weak],
+      [gl_cv_have_weak=no
+       dnl First, test whether the compiler accepts it syntactically.
+       AC_LINK_IFELSE(
+         [AC_LANG_PROGRAM(
+            [[extern void xyzzy ();
+#pragma weak xyzzy]],
+            [[xyzzy();]])],
+         [gl_cv_have_weak=maybe])
+       if test $gl_cv_have_weak = maybe; then
+         dnl Second, test whether it actually works. On Cygwin 1.7.2, with
+         dnl gcc 4.3, symbols declared weak always evaluate to the address 0.
+         AC_RUN_IFELSE(
+           [AC_LANG_SOURCE([[
+#include <stdio.h>
+#pragma weak fputs
+int main ()
+{
+  return (fputs == NULL);
+}]])],
+           [gl_cv_have_weak=yes],
+           [gl_cv_have_weak=no],
+           [dnl When cross-compiling, assume that only ELF platforms support
+            dnl weak symbols.
+            AC_EGREP_CPP([Extensible Linking Format],
+              [#ifdef __ELF__
+               Extensible Linking Format
+               #endif
+              ],
+              [gl_cv_have_weak="guessing yes"],
+              [gl_cv_have_weak="guessing no"])
+           ])
+       fi
+      ])
+    if test "$gl_use_threads" = yes || test "$gl_use_threads" = posix; then
+      # On OSF/1, the compiler needs the flag -pthread or -D_REENTRANT so that
+      # it groks <pthread.h>. It's added above, in gl_THREADLIB_EARLY_BODY.
+      AC_CHECK_HEADER([pthread.h],
+        [gl_have_pthread_h=yes], [gl_have_pthread_h=no])
+      if test "$gl_have_pthread_h" = yes; then
+        # Other possible tests:
+        #   -lpthreads (FSU threads, PCthreads)
+        #   -lgthreads
+        gl_have_pthread=
+        # Test whether both pthread_mutex_lock and pthread_mutexattr_init exist
+        # in libc. IRIX 6.5 has the first one in both libc and libpthread, but
+        # the second one only in libpthread, and lock.c needs it.
+        #
+        # If -pthread works, prefer it to -lpthread, since Ubuntu 14.04
+        # needs -pthread for some reason.  See:
+        # http://lists.gnu.org/archive/html/bug-gnulib/2014-09/msg00023.html
+        save_LIBS=$LIBS
+        for gl_pthread in '' '-pthread'; do
+          LIBS="$LIBS $gl_pthread"
+          AC_LINK_IFELSE(
+            [AC_LANG_PROGRAM(
+               [[#include <pthread.h>
+                 pthread_mutex_t m;
+                 pthread_mutexattr_t ma;
+               ]],
+               [[pthread_mutex_lock (&m);
+                 pthread_mutexattr_init (&ma);]])],
+            [gl_have_pthread=yes
+             LIBTHREAD=$gl_pthread LTLIBTHREAD=$gl_pthread
+             LIBMULTITHREAD=$gl_pthread LTLIBMULTITHREAD=$gl_pthread])
+          LIBS=$save_LIBS
+          test -n "$gl_have_pthread" && break
+        done
+
+        # Test for libpthread by looking for pthread_kill. (Not pthread_self,
+        # since it is defined as a macro on OSF/1.)
+        if test -n "$gl_have_pthread" && test -z "$LIBTHREAD"; then
+          # The program links fine without libpthread. But it may actually
+          # need to link with libpthread in order to create multiple threads.
+          AC_CHECK_LIB([pthread], [pthread_kill],
+            [LIBMULTITHREAD=-lpthread LTLIBMULTITHREAD=-lpthread
+             # On Solaris and HP-UX, most pthread functions exist also in libc.
+             # Therefore pthread_in_use() needs to actually try to create a
+             # thread: pthread_create from libc will fail, whereas
+             # pthread_create will actually create a thread.
+             case "$host_os" in
+               solaris* | hpux*)
+                 AC_DEFINE([PTHREAD_IN_USE_DETECTION_HARD], [1],
+                   [Define if the pthread_in_use() detection is hard.])
+             esac
+            ])
+        elif test -z "$gl_have_pthread"; then
+          # Some library is needed. Try libpthread and libc_r.
+          AC_CHECK_LIB([pthread], [pthread_kill],
+            [gl_have_pthread=yes
+             LIBTHREAD=-lpthread LTLIBTHREAD=-lpthread
+             LIBMULTITHREAD=-lpthread LTLIBMULTITHREAD=-lpthread])
+          if test -z "$gl_have_pthread"; then
+            # For FreeBSD 4.
+            AC_CHECK_LIB([c_r], [pthread_kill],
+              [gl_have_pthread=yes
+               LIBTHREAD=-lc_r LTLIBTHREAD=-lc_r
+               LIBMULTITHREAD=-lc_r LTLIBMULTITHREAD=-lc_r])
+          fi
+        fi
+        if test -n "$gl_have_pthread"; then
+          gl_threads_api=posix
+          AC_DEFINE([USE_POSIX_THREADS], [1],
+            [Define if the POSIX multithreading library can be used.])
+          if test -n "$LIBMULTITHREAD" || test -n "$LTLIBMULTITHREAD"; then
+            if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then
+              AC_DEFINE([USE_POSIX_THREADS_WEAK], [1],
+                [Define if references to the POSIX multithreading library should be made weak.])
+              LIBTHREAD=
+              LTLIBTHREAD=
+            fi
+          fi
+        fi
+      fi
+    fi
+    if test -z "$gl_have_pthread"; then
+      if test "$gl_use_threads" = yes || test "$gl_use_threads" = solaris; then
+        gl_have_solaristhread=
+        gl_save_LIBS="$LIBS"
+        LIBS="$LIBS -lthread"
+        AC_LINK_IFELSE(
+          [AC_LANG_PROGRAM(
+             [[
+#include <thread.h>
+#include <synch.h>
+             ]],
+             [[thr_self();]])],
+          [gl_have_solaristhread=yes])
+        LIBS="$gl_save_LIBS"
+        if test -n "$gl_have_solaristhread"; then
+          gl_threads_api=solaris
+          LIBTHREAD=-lthread
+          LTLIBTHREAD=-lthread
+          LIBMULTITHREAD="$LIBTHREAD"
+          LTLIBMULTITHREAD="$LTLIBTHREAD"
+          AC_DEFINE([USE_SOLARIS_THREADS], [1],
+            [Define if the old Solaris multithreading library can be used.])
+          if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then
+            AC_DEFINE([USE_SOLARIS_THREADS_WEAK], [1],
+              [Define if references to the old Solaris multithreading library should be made weak.])
+            LIBTHREAD=
+            LTLIBTHREAD=
+          fi
+        fi
+      fi
+    fi
+    if test "$gl_use_threads" = pth; then
+      gl_save_CPPFLAGS="$CPPFLAGS"
+      AC_LIB_LINKFLAGS([pth])
+      gl_have_pth=
+      gl_save_LIBS="$LIBS"
+      LIBS="$LIBS $LIBPTH"
+      AC_LINK_IFELSE(
+        [AC_LANG_PROGRAM([[#include <pth.h>]], [[pth_self();]])],
+        [gl_have_pth=yes])
+      LIBS="$gl_save_LIBS"
+      if test -n "$gl_have_pth"; then
+        gl_threads_api=pth
+        LIBTHREAD="$LIBPTH"
+        LTLIBTHREAD="$LTLIBPTH"
+        LIBMULTITHREAD="$LIBTHREAD"
+        LTLIBMULTITHREAD="$LTLIBTHREAD"
+        AC_DEFINE([USE_PTH_THREADS], [1],
+          [Define if the GNU Pth multithreading library can be used.])
+        if test -n "$LIBMULTITHREAD" || test -n "$LTLIBMULTITHREAD"; then
+          if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then
+            AC_DEFINE([USE_PTH_THREADS_WEAK], [1],
+              [Define if references to the GNU Pth multithreading library should be made weak.])
+            LIBTHREAD=
+            LTLIBTHREAD=
+          fi
+        fi
+      else
+        CPPFLAGS="$gl_save_CPPFLAGS"
+      fi
+    fi
+    if test -z "$gl_have_pthread"; then
+      case "$gl_use_threads" in
+        yes | windows | win32) # The 'win32' is for backward compatibility.
+          if { case "$host_os" in
+                 mingw*) true;;
+                 *) false;;
+               esac
+             }; then
+            gl_threads_api=windows
+            AC_DEFINE([USE_WINDOWS_THREADS], [1],
+              [Define if the native Windows multithreading API can be used.])
+          fi
+          ;;
+      esac
+    fi
+  fi
+  AC_MSG_CHECKING([for multithread API to use])
+  AC_MSG_RESULT([$gl_threads_api])
+  AC_SUBST([LIBTHREAD])
+  AC_SUBST([LTLIBTHREAD])
+  AC_SUBST([LIBMULTITHREAD])
+  AC_SUBST([LTLIBMULTITHREAD])
+])
+
+AC_DEFUN([gl_THREADLIB],
+[
+  AC_REQUIRE([gl_THREADLIB_EARLY])
+  AC_REQUIRE([gl_THREADLIB_BODY])
+])
+
+
+dnl gl_DISABLE_THREADS
+dnl ------------------
+dnl Sets the gl_THREADLIB default so that threads are not used by default.
+dnl The user can still override it at installation time, by using the
+dnl configure option '--enable-threads'.
+
+AC_DEFUN([gl_DISABLE_THREADS], [
+  m4_divert_text([INIT_PREPARE], [gl_use_threads_default=no])
+])
+
+
+dnl Survey of platforms:
+dnl
+dnl Platform           Available  Compiler    Supports   test-lock
+dnl                    flavours   option      weak       result
+dnl ---------------    ---------  ---------   --------   ---------
+dnl Linux 2.4/glibc    posix      -lpthread       Y      OK
+dnl
+dnl GNU Hurd/glibc     posix
+dnl
+dnl Ubuntu 14.04       posix      -pthread        Y      OK
+dnl
+dnl FreeBSD 5.3        posix      -lc_r           Y
+dnl                    posix      -lkse ?         Y
+dnl                    posix      -lpthread ?     Y
+dnl                    posix      -lthr           Y
+dnl
+dnl FreeBSD 5.2        posix      -lc_r           Y
+dnl                    posix      -lkse           Y
+dnl                    posix      -lthr           Y
+dnl
+dnl FreeBSD 4.0,4.10   posix      -lc_r           Y      OK
+dnl
+dnl NetBSD 1.6         --
+dnl
+dnl OpenBSD 3.4        posix      -lpthread       Y      OK
+dnl
+dnl Mac OS X 10.[123]  posix      -lpthread       Y      OK
+dnl
+dnl Solaris 7,8,9      posix      -lpthread       Y      Sol 7,8: 0.0; Sol 9: OK
+dnl                    solaris    -lthread        Y      Sol 7,8: 0.0; Sol 9: OK
+dnl
+dnl HP-UX 11           posix      -lpthread       N (cc) OK
+dnl                                               Y (gcc)
+dnl
+dnl IRIX 6.5           posix      -lpthread       Y      0.5
+dnl
+dnl AIX 4.3,5.1        posix      -lpthread       N      AIX 4: 0.5; AIX 5: OK
+dnl
+dnl OSF/1 4.0,5.1      posix      -pthread (cc)   N      OK
+dnl                               -lpthread (gcc) Y
+dnl
+dnl Cygwin             posix      -lpthread       Y      OK
+dnl
+dnl Any of the above   pth        -lpth                  0.0
+dnl
+dnl Mingw              windows                    N      OK
+dnl
+dnl BeOS 5             --
+dnl
+dnl The test-lock result shows what happens if in test-lock.c EXPLICIT_YIELD is
+dnl turned off:
+dnl   OK if all three tests terminate OK,
+dnl   0.5 if the first test terminates OK but the second one loops endlessly,
+dnl   0.0 if the first test already loops endlessly.
diff -urN dpkg-1.20.9/m4/uintmax_t.m4 dpkg-1.20.9ubuntu1/m4/uintmax_t.m4
--- dpkg-1.20.9/m4/uintmax_t.m4	1970-01-01 01:00:00.000000000 +0100
+++ dpkg-1.20.9ubuntu1/m4/uintmax_t.m4	2021-04-14 12:32:22.000000000 +0200
@@ -0,0 +1,30 @@
+# uintmax_t.m4 serial 12
+dnl Copyright (C) 1997-2004, 2007-2016 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Paul Eggert.
+
+AC_PREREQ([2.13])
+
+# Define uintmax_t to 'unsigned long' or 'unsigned long long'
+# if it is not already defined in <stdint.h> or <inttypes.h>.
+
+AC_DEFUN([gl_AC_TYPE_UINTMAX_T],
+[
+  AC_REQUIRE([gl_AC_HEADER_INTTYPES_H])
+  AC_REQUIRE([gl_AC_HEADER_STDINT_H])
+  if test $gl_cv_header_inttypes_h = no && test $gl_cv_header_stdint_h = no; then
+    AC_REQUIRE([AC_TYPE_UNSIGNED_LONG_LONG_INT])
+    test $ac_cv_type_unsigned_long_long_int = yes \
+      && ac_type='unsigned long long' \
+      || ac_type='unsigned long'
+    AC_DEFINE_UNQUOTED([uintmax_t], [$ac_type],
+      [Define to unsigned long or unsigned long long
+       if <stdint.h> and <inttypes.h> don't define.])
+  else
+    AC_DEFINE([HAVE_UINTMAX_T], [1],
+      [Define if you have the 'uintmax_t' type in <stdint.h> or <inttypes.h>.])
+  fi
+])
diff -urN dpkg-1.20.9/m4/visibility.m4 dpkg-1.20.9ubuntu1/m4/visibility.m4
--- dpkg-1.20.9/m4/visibility.m4	1970-01-01 01:00:00.000000000 +0100
+++ dpkg-1.20.9ubuntu1/m4/visibility.m4	2021-04-14 12:32:22.000000000 +0200
@@ -0,0 +1,77 @@
+# visibility.m4 serial 5 (gettext-0.18.2)
+dnl Copyright (C) 2005, 2008, 2010-2016 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+dnl Tests whether the compiler supports the command-line option
+dnl -fvisibility=hidden and the function and variable attributes
+dnl __attribute__((__visibility__("hidden"))) and
+dnl __attribute__((__visibility__("default"))).
+dnl Does *not* test for __visibility__("protected") - which has tricky
+dnl semantics (see the 'vismain' test in glibc) and does not exist e.g. on
+dnl Mac OS X.
+dnl Does *not* test for __visibility__("internal") - which has processor
+dnl dependent semantics.
+dnl Does *not* test for #pragma GCC visibility push(hidden) - which is
+dnl "really only recommended for legacy code".
+dnl Set the variable CFLAG_VISIBILITY.
+dnl Defines and sets the variable HAVE_VISIBILITY.
+
+AC_DEFUN([gl_VISIBILITY],
+[
+  AC_REQUIRE([AC_PROG_CC])
+  CFLAG_VISIBILITY=
+  HAVE_VISIBILITY=0
+  if test -n "$GCC"; then
+    dnl First, check whether -Werror can be added to the command line, or
+    dnl whether it leads to an error because of some other option that the
+    dnl user has put into $CC $CFLAGS $CPPFLAGS.
+    AC_MSG_CHECKING([whether the -Werror option is usable])
+    AC_CACHE_VAL([gl_cv_cc_vis_werror], [
+      gl_save_CFLAGS="$CFLAGS"
+      CFLAGS="$CFLAGS -Werror"
+      AC_COMPILE_IFELSE(
+        [AC_LANG_PROGRAM([[]], [[]])],
+        [gl_cv_cc_vis_werror=yes],
+        [gl_cv_cc_vis_werror=no])
+      CFLAGS="$gl_save_CFLAGS"])
+    AC_MSG_RESULT([$gl_cv_cc_vis_werror])
+    dnl Now check whether visibility declarations are supported.
+    AC_MSG_CHECKING([for simple visibility declarations])
+    AC_CACHE_VAL([gl_cv_cc_visibility], [
+      gl_save_CFLAGS="$CFLAGS"
+      CFLAGS="$CFLAGS -fvisibility=hidden"
+      dnl We use the option -Werror and a function dummyfunc, because on some
+      dnl platforms (Cygwin 1.7) the use of -fvisibility triggers a warning
+      dnl "visibility attribute not supported in this configuration; ignored"
+      dnl at the first function definition in every compilation unit, and we
+      dnl don't want to use the option in this case.
+      if test $gl_cv_cc_vis_werror = yes; then
+        CFLAGS="$CFLAGS -Werror"
+      fi
+      AC_COMPILE_IFELSE(
+        [AC_LANG_PROGRAM(
+           [[extern __attribute__((__visibility__("hidden"))) int hiddenvar;
+             extern __attribute__((__visibility__("default"))) int exportedvar;
+             extern __attribute__((__visibility__("hidden"))) int hiddenfunc (void);
+             extern __attribute__((__visibility__("default"))) int exportedfunc (void);
+             void dummyfunc (void) {}
+           ]],
+           [[]])],
+        [gl_cv_cc_visibility=yes],
+        [gl_cv_cc_visibility=no])
+      CFLAGS="$gl_save_CFLAGS"])
+    AC_MSG_RESULT([$gl_cv_cc_visibility])
+    if test $gl_cv_cc_visibility = yes; then
+      CFLAG_VISIBILITY="-fvisibility=hidden"
+      HAVE_VISIBILITY=1
+    fi
+  fi
+  AC_SUBST([CFLAG_VISIBILITY])
+  AC_SUBST([HAVE_VISIBILITY])
+  AC_DEFINE_UNQUOTED([HAVE_VISIBILITY], [$HAVE_VISIBILITY],
+    [Define to 1 or 0, depending whether the compiler supports simple visibility declarations.])
+])
diff -urN dpkg-1.20.9/m4/wchar_t.m4 dpkg-1.20.9ubuntu1/m4/wchar_t.m4
--- dpkg-1.20.9/m4/wchar_t.m4	1970-01-01 01:00:00.000000000 +0100
+++ dpkg-1.20.9ubuntu1/m4/wchar_t.m4	2021-04-14 12:32:22.000000000 +0200
@@ -0,0 +1,24 @@
+# wchar_t.m4 serial 4 (gettext-0.18.2)
+dnl Copyright (C) 2002-2003, 2008-2016 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+dnl Test whether <stddef.h> has the 'wchar_t' type.
+dnl Prerequisite: AC_PROG_CC
+
+AC_DEFUN([gt_TYPE_WCHAR_T],
+[
+  AC_CACHE_CHECK([for wchar_t], [gt_cv_c_wchar_t],
+    [AC_COMPILE_IFELSE(
+       [AC_LANG_PROGRAM(
+          [[#include <stddef.h>
+            wchar_t foo = (wchar_t)'\0';]],
+          [[]])],
+       [gt_cv_c_wchar_t=yes],
+       [gt_cv_c_wchar_t=no])])
+  if test $gt_cv_c_wchar_t = yes; then
+    AC_DEFINE([HAVE_WCHAR_T], [1], [Define if you have the 'wchar_t' type.])
+  fi
+])
diff -urN dpkg-1.20.9/m4/wint_t.m4 dpkg-1.20.9ubuntu1/m4/wint_t.m4
--- dpkg-1.20.9/m4/wint_t.m4	1970-01-01 01:00:00.000000000 +0100
+++ dpkg-1.20.9ubuntu1/m4/wint_t.m4	2021-04-14 12:32:22.000000000 +0200
@@ -0,0 +1,32 @@
+# wint_t.m4 serial 5 (gettext-0.18.2)
+dnl Copyright (C) 2003, 2007-2016 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+dnl Test whether <wchar.h> has the 'wint_t' type.
+dnl Prerequisite: AC_PROG_CC
+
+AC_DEFUN([gt_TYPE_WINT_T],
+[
+  AC_CACHE_CHECK([for wint_t], [gt_cv_c_wint_t],
+    [AC_COMPILE_IFELSE(
+       [AC_LANG_PROGRAM(
+          [[
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included
+   before <wchar.h>.  */
+#include <stddef.h>
+#include <stdio.h>
+#include <time.h>
+#include <wchar.h>
+            wint_t foo = (wchar_t)'\0';]],
+          [[]])],
+       [gt_cv_c_wint_t=yes],
+       [gt_cv_c_wint_t=no])])
+  if test $gt_cv_c_wint_t = yes; then
+    AC_DEFINE([HAVE_WINT_T], [1], [Define if you have the 'wint_t' type.])
+  fi
+])
diff -urN dpkg-1.20.9/m4/xsize.m4 dpkg-1.20.9ubuntu1/m4/xsize.m4
--- dpkg-1.20.9/m4/xsize.m4	1970-01-01 01:00:00.000000000 +0100
+++ dpkg-1.20.9ubuntu1/m4/xsize.m4	2021-04-14 12:32:22.000000000 +0200
@@ -0,0 +1,12 @@
+# xsize.m4 serial 5
+dnl Copyright (C) 2003-2004, 2008-2016 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_XSIZE],
+[
+  dnl Prerequisites of lib/xsize.h.
+  AC_REQUIRE([gl_SIZE_MAX])
+  AC_CHECK_HEADERS([stdint.h])
+])
diff -urN dpkg-1.20.9/Makefile.in dpkg-1.20.9ubuntu1/Makefile.in
--- dpkg-1.20.9/Makefile.in	2021-04-14 00:43:39.000000000 +0200
+++ dpkg-1.20.9ubuntu1/Makefile.in	2021-04-14 12:32:22.000000000 +0200
@@ -225,9 +225,9 @@
 	$(top_srcdir)/build-aux/ltmain.sh \
 	$(top_srcdir)/build-aux/missing $(top_srcdir)/check.am \
 	$(top_srcdir)/cpan.am $(top_srcdir)/doc/Doxyfile.in ABOUT-NLS \
-	AUTHORS COPYING NEWS README THANKS TODO build-aux/ar-lib \
-	build-aux/compile build-aux/config.guess \
-	build-aux/config.rpath build-aux/config.sub \
+	AUTHORS COPYING ChangeLog NEWS README THANKS TODO \
+	build-aux/ar-lib build-aux/compile build-aux/config.guess \
+	build-aux/config.rpath build-aux/config.sub build-aux/depcomp \
 	build-aux/install-sh build-aux/ltmain.sh build-aux/missing
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 distdir = $(PACKAGE)-$(VERSION)
@@ -393,6 +393,7 @@
 XGETTEXT = @XGETTEXT@
 XGETTEXT_015 = @XGETTEXT_015@
 XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+ZSTD_LIBS = @ZSTD_LIBS@
 Z_LIBS = @Z_LIBS@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
diff -urN dpkg-1.20.9/man/dpkg-buildflags.pod dpkg-1.20.9ubuntu1/man/dpkg-buildflags.pod
--- dpkg-1.20.9/man/dpkg-buildflags.pod	2021-04-05 00:50:44.000000000 +0200
+++ dpkg-1.20.9ubuntu1/man/dpkg-buildflags.pod	2021-04-14 12:32:22.000000000 +0200
@@ -354,6 +354,24 @@
 
 =back
 
+=head2 optimize
+
+Several compile-time options (detailed below) can be used to help optimize
+a resulting binary (since dpkg 1.21.0).
+B<Note>: enabling B<all> these options can result in unreproducible binary
+artifacts.
+
+=over
+
+=item lto
+
+This setting (since dpkg 1.21.0; disabled by default) enables
+Link Time Optimization by adding B<-flto=auto -ffat-lto-objects> to
+B<CFLAGS>, B<CXXFLAGS>, B<OBJCFLAGS>, B<OBJCXXFLAGS>, B<GCJFLAGS>,
+B<FFLAGS> and B<FCFLAGS>.
+
+=back
+
 =head2 sanitize
 
 Several compile-time options (detailed below) can be used to help sanitize
diff -urN dpkg-1.20.9/man/dpkg-deb.pod dpkg-1.20.9ubuntu1/man/dpkg-deb.pod
--- dpkg-1.20.9/man/dpkg-deb.pod	2021-01-30 07:09:02.000000000 +0100
+++ dpkg-1.20.9ubuntu1/man/dpkg-deb.pod	2021-06-14 16:04:10.000000000 +0200
@@ -254,7 +254,7 @@
 =item B<-z>I<compress-level>
 
 Specify which compression level to use on the compressor backend, when
-building a package (default is 9 for gzip, 6 for xz).
+building a package (default is 9 for gzip, 6 for xz and 19 for zstd).
 The accepted values are 0-9 with: 0 being mapped to compressor none for gzip.
 Before dpkg 1.16.2 level 0 was equivalent to compressor none for all
 compressors.
@@ -269,8 +269,8 @@
 =item B<-Z>I<compress-type>
 
 Specify which compression type to use when building a package.
-Allowed values are B<gzip>, B<xz> (since dpkg 1.15.6),
-and B<none> (default is B<xz>).
+Allowed values are B<gzip>, B<xz> (since dpkg 1.15.6), B<zstd>
+(since dpkg 1.19.0.5ubuntu2) and B<none> (default is B<zstd>).
 
 =item B<--[no-]uniform-compression>
 
@@ -278,8 +278,7 @@
 members (i.e. B<control.tar> and B<data.tar>; since dpkg 1.17.6).
 Otherwise only the
 B<data.tar> member will use those parameters. The only supported
-compression types allowed to be uniformly used are B<none>, B<gzip>
-and B<xz>.
+compression types allowed to be uniformly used are B<none>, B<gzip>, B<xz> and B<zstd>.
 The B<--no-uniform-compression> option disables uniform compression
 (since dpkg 1.19.0).
 Uniform compression is the default (since dpkg 1.19.0).
diff -urN dpkg-1.20.9/man/Makefile.in dpkg-1.20.9ubuntu1/man/Makefile.in
--- dpkg-1.20.9/man/Makefile.in	2021-04-14 00:43:39.000000000 +0200
+++ dpkg-1.20.9ubuntu1/man/Makefile.in	2021-04-14 12:32:22.000000000 +0200
@@ -300,6 +300,7 @@
 XGETTEXT = @XGETTEXT@
 XGETTEXT_015 = @XGETTEXT_015@
 XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+ZSTD_LIBS = @ZSTD_LIBS@
 Z_LIBS = @Z_LIBS@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
diff -urN dpkg-1.20.9/man/po/dpkg-man.pot dpkg-1.20.9ubuntu1/man/po/dpkg-man.pot
--- dpkg-1.20.9/man/po/dpkg-man.pot	2021-04-14 00:43:16.000000000 +0200
+++ dpkg-1.20.9ubuntu1/man/po/dpkg-man.pot	2021-04-14 12:32:22.000000000 +0200
@@ -9390,7 +9390,8 @@
 #: dpkg-deb.pod
 msgid ""
 "Specify which compression level to use on the compressor backend, when "
-"building a package (default is 9 for gzip, 6 for xz).  The accepted values "
+"building a package (default is 9 for gzip, 6 for xz and 19 for zstd).  "
+"The accepted values "
 "are 0-9 with: 0 being mapped to compressor none for gzip.  Before dpkg "
 "1.16.2 level 0 was equivalent to compressor none for all compressors."
 msgstr ""
diff -urN dpkg-1.20.9/po/Makevars.template dpkg-1.20.9ubuntu1/po/Makevars.template
--- dpkg-1.20.9/po/Makevars.template	1970-01-01 01:00:00.000000000 +0100
+++ dpkg-1.20.9ubuntu1/po/Makevars.template	2021-04-14 12:32:22.000000000 +0200
@@ -0,0 +1,78 @@
+# Makefile variables for PO directory in any package using GNU gettext.
+
+# Usually the message domain is the same as the package name.
+DOMAIN = $(PACKAGE)
+
+# These two variables depend on the location of this directory.
+subdir = po
+top_builddir = ..
+
+# These options get passed to xgettext.
+XGETTEXT_OPTIONS = --keyword=_ --keyword=N_
+
+# This is the copyright holder that gets inserted into the header of the
+# $(DOMAIN).pot file.  Set this to the copyright holder of the surrounding
+# package.  (Note that the msgstr strings, extracted from the package's
+# sources, belong to the copyright holder of the package.)  Translators are
+# expected to transfer the copyright for their translations to this person
+# or entity, or to disclaim their copyright.  The empty string stands for
+# the public domain; in this case the translators are expected to disclaim
+# their copyright.
+COPYRIGHT_HOLDER = Free Software Foundation, Inc.
+
+# This tells whether or not to prepend "GNU " prefix to the package
+# name that gets inserted into the header of the $(DOMAIN).pot file.
+# Possible values are "yes", "no", or empty.  If it is empty, try to
+# detect it automatically by scanning the files in $(top_srcdir) for
+# "GNU packagename" string.
+PACKAGE_GNU =
+
+# This is the email address or URL to which the translators shall report
+# bugs in the untranslated strings:
+# - Strings which are not entire sentences, see the maintainer guidelines
+#   in the GNU gettext documentation, section 'Preparing Strings'.
+# - Strings which use unclear terms or require additional context to be
+#   understood.
+# - Strings which make invalid assumptions about notation of date, time or
+#   money.
+# - Pluralisation problems.
+# - Incorrect English spelling.
+# - Incorrect formatting.
+# It can be your email address, or a mailing list address where translators
+# can write to without being subscribed, or the URL of a web page through
+# which the translators can contact you.
+MSGID_BUGS_ADDRESS =
+
+# This is the list of locale categories, beyond LC_MESSAGES, for which the
+# message catalogs shall be used.  It is usually empty.
+EXTRA_LOCALE_CATEGORIES =
+
+# This tells whether the $(DOMAIN).pot file contains messages with an 'msgctxt'
+# context.  Possible values are "yes" and "no".  Set this to yes if the
+# package uses functions taking also a message context, like pgettext(), or
+# if in $(XGETTEXT_OPTIONS) you define keywords with a context argument.
+USE_MSGCTXT = no
+
+# These options get passed to msgmerge.
+# Useful options are in particular:
+#   --previous            to keep previous msgids of translated messages,
+#   --quiet               to reduce the verbosity.
+MSGMERGE_OPTIONS =
+
+# These options get passed to msginit.
+# If you want to disable line wrapping when writing PO files, add
+# --no-wrap to MSGMERGE_OPTIONS, XGETTEXT_OPTIONS, and
+# MSGINIT_OPTIONS.
+MSGINIT_OPTIONS =
+
+# This tells whether or not to regenerate a PO file when $(DOMAIN).pot
+# has changed.  Possible values are "yes" and "no".  Set this to no if
+# the POT file is checked in the repository and the version control
+# program ignores timestamps.
+PO_DEPENDS_ON_POT = yes
+
+# This tells whether or not to forcibly update $(DOMAIN).pot and
+# regenerate PO files on "make dist".  Possible values are "yes" and
+# "no".  Set this to no if the POT file and PO files are maintained
+# externally.
+DIST_DEPENDS_ON_UPDATE_PO = yes
diff -urN dpkg-1.20.9/README dpkg-1.20.9ubuntu1/README
--- dpkg-1.20.9/README	2021-01-30 07:07:17.000000000 +0100
+++ dpkg-1.20.9ubuntu1/README	2021-04-14 12:32:22.000000000 +0200
@@ -73,6 +73,7 @@
 
   libmd (used by libdpkg, currently falling back to embedded code)
   libz (from zlib, used instead of gzip command-line tool)
+  libzstd (from libzstd, used instead of zstd command-line tool)
   liblzma (from xz utils, used instead of xz command-line tool)
   libbz2 (from bzip2, used instead of bzip2 command-line tool)
   libselinux
diff -urN dpkg-1.20.9/scripts/Dpkg/BuildProfiles.pm dpkg-1.20.9ubuntu1/scripts/Dpkg/BuildProfiles.pm
--- dpkg-1.20.9/scripts/Dpkg/BuildProfiles.pm	2021-01-30 07:07:17.000000000 +0100
+++ dpkg-1.20.9ubuntu1/scripts/Dpkg/BuildProfiles.pm	2021-04-14 12:32:22.000000000 +0200
@@ -30,6 +30,7 @@
 use List::Util qw(any);
 
 use Dpkg::Build::Env;
+use Dpkg::Vendor qw(run_vendor_hook);
 
 my $cache_profiles;
 my @build_profiles;
@@ -63,6 +64,7 @@
         @build_profiles = split ' ', Dpkg::Build::Env::get('DEB_BUILD_PROFILES');
     }
     $cache_profiles = 1;
+    run_vendor_hook('update-buildprofiles', \@build_profiles);
 
     return @build_profiles;
 }
@@ -79,7 +81,8 @@
 
     $cache_profiles = 1;
     @build_profiles = @profiles;
-    Dpkg::Build::Env::set('DEB_BUILD_PROFILES', join ' ', @profiles);
+    run_vendor_hook('update-buildprofiles', \@build_profiles);
+    Dpkg::Build::Env::set('DEB_BUILD_PROFILES', join ' ', @build_profiles);
 }
 
 =item @profiles = parse_build_profiles($string)
diff -urN dpkg-1.20.9/scripts/Dpkg/Shlibs/Objdump.pm dpkg-1.20.9ubuntu1/scripts/Dpkg/Shlibs/Objdump.pm
--- dpkg-1.20.9/scripts/Dpkg/Shlibs/Objdump.pm	2021-01-30 07:07:17.000000000 +0100
+++ dpkg-1.20.9ubuntu1/scripts/Dpkg/Shlibs/Objdump.pm	2021-04-14 12:32:22.000000000 +0200
@@ -24,6 +24,7 @@
 
 use Dpkg::Gettext;
 use Dpkg::ErrorHandling;
+use Dpkg::IPC;
 
 sub new {
     my $this = shift;
@@ -73,6 +74,53 @@
     return exists $self->{objects}{$objid};
 }
 
+sub is_armhf {
+    my ($file) = @_;
+    my ($output, %opts, $pid, $res);
+    my $hf = 0;
+    my $sf = 0;
+    $pid = spawn(exec => [ "readelf", "-h", "--", $file ],
+		 env => { "LC_ALL" => "C" },
+		 to_pipe => \$output, %opts);
+    while (<$output>) {
+	chomp;
+	if (/0x500040./) {
+	    $hf = 1;
+	    last;
+	}
+	if (/0x500020./) {
+	    $sf = 1;
+	    last;
+	}
+    }
+    close($output);
+    wait_child($pid, nocheck => 1);
+    if ($?) {
+	subprocerr("readelf");
+    }
+    if(($hf) || ($sf)) {
+	return $hf;
+    }
+    $hf = 0;
+    undef $output;
+    $pid = spawn(exec => [ "readelf", "-A", "--", $file ],
+		 env => { "LC_ALL" => "C" },
+		 to_pipe => \$output, %opts);
+    while (<$output>) {
+	chomp;
+	if (/Tag_ABI_VFP_args: VFP registers/) {
+	    $hf = 1;
+	    last;
+	}
+    }
+    close($output);
+    wait_child($pid, nocheck => 1);
+    if ($?) {
+	subprocerr("readelf");
+    }
+    return $hf;
+}
+
 use constant {
     ELF_BITS_NONE           => 0,
     ELF_BITS_32             => 1,
@@ -212,6 +260,14 @@
     # Mask any processor flags that might not change the architecture ABI.
     $elf{flags} &= $elf_flags_mask{$elf{mach}} // 0;
 
+    if (($elf{mach} == ELF_MACH_ARM) && ($elf{endian} == ELF_ORDER_2LSB)) {
+        if (is_armhf($file)) {
+            $elf{flags} |= ELF_FLAG_ARM_HARD_FLOAT;
+        } else {
+            $elf{flags} |= ELF_FLAG_ARM_SOFT_FLOAT;
+        }
+    }
+
     # Repack for easy comparison, as a big-endian byte stream, so that
     # unpacking for output gives meaningful results.
     $format{$file} = pack 'C2(SL)>', @elf{qw(bits endian mach flags)};
@@ -373,6 +429,13 @@
 	} elsif ($section eq 'none') {
 	    if (/^\s*.+:\s*file\s+format\s+(\S+)$/) {
 		$self->{format} = $1;
+		if (($self->{format} eq "elf32-littlearm") && $self->{file}) {
+		    if (Dpkg::Shlibs::Objdump::is_armhf($self->{file})) {
+			$self->{format} = "elf32-littlearm-hfabi";
+		    } else {
+			$self->{format} = "elf32-littlearm-sfabi";
+		    }
+		}
 	    } elsif (/^architecture:\s*\S+,\s*flags\s*\S+:$/) {
 		# Parse 2 lines of "-f"
 		# architecture: i386, flags 0x00000112:
diff -urN dpkg-1.20.9/scripts/Dpkg/Source/Package/V3/Native.pm dpkg-1.20.9ubuntu1/scripts/Dpkg/Source/Package/V3/Native.pm
--- dpkg-1.20.9/scripts/Dpkg/Source/Package/V3/Native.pm	2021-01-30 07:07:17.000000000 +0100
+++ dpkg-1.20.9ubuntu1/scripts/Dpkg/Source/Package/V3/Native.pm	2021-04-14 12:32:22.000000000 +0200
@@ -73,7 +73,7 @@
     my ($self, $dir) = @_;
 
     my $v = Dpkg::Version->new($self->{fields}->{'Version'});
-    return (0, g_('native package version may not have a revision'))
+    warning (g_('native package version may not have a revision'))
         unless $v->is_native();
 
     return 1;
diff -urN dpkg-1.20.9/scripts/Dpkg/Source/Package/V3/Quilt.pm dpkg-1.20.9ubuntu1/scripts/Dpkg/Source/Package/V3/Quilt.pm
--- dpkg-1.20.9/scripts/Dpkg/Source/Package/V3/Quilt.pm	2021-01-30 07:07:17.000000000 +0100
+++ dpkg-1.20.9ubuntu1/scripts/Dpkg/Source/Package/V3/Quilt.pm	2021-04-14 12:32:22.000000000 +0200
@@ -93,7 +93,7 @@
     return ($code, $msg) if $code == 0;
 
     my $v = Dpkg::Version->new($self->{fields}->{'Version'});
-    return (0, g_('non-native package version does not contain a revision'))
+    warning (g_('non-native package version does not contain a revision'))
         if $v->is_native();
 
     my $quilt = $self->_build_quilt_object($dir);
diff -urN dpkg-1.20.9/scripts/Dpkg/Vendor/Debian.pm dpkg-1.20.9ubuntu1/scripts/Dpkg/Vendor/Debian.pm
--- dpkg-1.20.9/scripts/Dpkg/Vendor/Debian.pm	2021-04-05 00:50:44.000000000 +0200
+++ dpkg-1.20.9ubuntu1/scripts/Dpkg/Vendor/Debian.pm	2021-04-14 12:32:22.000000000 +0200
@@ -26,6 +26,7 @@
 our $VERSION = '0.01';
 
 use Dpkg;
+use Dpkg::Arch;
 use Dpkg::Gettext;
 use Dpkg::ErrorHandling;
 use Dpkg::Control::Types;
@@ -91,6 +92,45 @@
     }
 }
 
+sub _lto_disabled {
+    my $fn = "/usr/share/lto-disabled-list/lto-disabled-list";
+    open(LIST, "<", $fn) or return;
+
+    # get source name
+    -r "debian/control" or return;
+    require Dpkg::Control::Info;
+    my $ctrl = Dpkg::Control::Info->new();
+    my $src_fields = $ctrl->get_source();
+    return unless defined $src_fields;
+
+    my $src = "";
+    foreach (keys %{$src_fields}) {
+	my $v = $src_fields->{$_};
+        if (m/^Source$/i) {
+	    $src = $v;
+	    last;
+	}
+    }
+    return unless $src ne "";
+    
+    my $arch = Dpkg::Arch::get_host_arch();
+
+    # read disabled-list
+    while (<LIST>) {
+        if (m/^$src\s/) {
+	    if (m/^$src\s.*(any|$arch)\s/) {
+		close(LIST);
+		return 1;
+	    } else {
+		close(LIST);
+		return;
+	    }
+	}
+    }
+    close(LIST);
+    return;
+}
+
 sub _add_build_flags {
     my ($self, $flags) = @_;
 
@@ -108,6 +148,9 @@
             fixfilepath => 1,
             fixdebugpath => 1,
         },
+        optimize => {
+            lto => 0,
+        },
         sanitize => {
             address => 0,
             thread => 0,
@@ -127,6 +170,21 @@
         },
     );
 
+    # no hook to set in Ubuntu.pm
+    require Dpkg::Arch;
+    my $arch = Dpkg::Arch::get_host_arch();
+
+    if (Dpkg::Arch::debarch_eq($arch, 'amd64')
+    	or Dpkg::Arch::debarch_eq($arch, 'arm64')
+    	or Dpkg::Arch::debarch_eq($arch, 'ppc64el')
+    	or Dpkg::Arch::debarch_eq($arch, 's390x'))
+    {
+    	$use_feature{optimize}{lto} = 1;
+    	if (_lto_disabled()) {
+    	    $use_feature{optimize}{lto} = 0;
+        }
+    }
+    
     my %builtin_feature = (
         hardening => {
             pie => 1,
@@ -146,9 +204,6 @@
         $opts_maint->parse_features($area, $use_feature{$area});
     }
 
-    require Dpkg::Arch;
-
-    my $arch = Dpkg::Arch::get_host_arch();
     my ($abi, $libc, $os, $cpu) = Dpkg::Arch::debarch_to_debtuple($arch);
 
     unless (defined $abi and defined $libc and defined $os and defined $cpu) {
@@ -270,6 +325,20 @@
         $flags->append('GCJFLAGS', $map);
     }
 
+    ## Area: optimize
+
+    if ($use_feature{optimize}{lto}) {
+        my $ltoflag = '-flto=auto -ffat-lto-objects';
+        $flags->append('CFLAGS', $ltoflag);
+        $flags->append('CXXFLAGS', $ltoflag);
+        $flags->append('OBJCFLAGS', $ltoflag);
+        $flags->append('OBJCXXFLAGS', $ltoflag);
+        $flags->append('FFLAGS', $ltoflag);
+        $flags->append('FCFLAGS', $ltoflag);
+	
+        $flags->append('LDFLAGS', '-flto=auto');
+    }
+
     ## Area: sanitize
 
     # Handle logical feature interactions.
diff -urN dpkg-1.20.9/scripts/Dpkg/Vendor/Default.pm dpkg-1.20.9ubuntu1/scripts/Dpkg/Vendor/Default.pm
--- dpkg-1.20.9/scripts/Dpkg/Vendor/Default.pm	2021-01-30 07:07:17.000000000 +0100
+++ dpkg-1.20.9ubuntu1/scripts/Dpkg/Vendor/Default.pm	2021-04-14 12:32:22.000000000 +0200
@@ -130,6 +130,12 @@
 the default values set for the various build flags. $flags is a
 Dpkg::BuildFlags object.
 
+=item update-buildprofiles ($build_profiles_ref)
+
+The hook is called in Dpkg::BuildProfiles to allow the vendor to
+override the default values set. $build_profiles_ref is a array ref to
+Dpkg::BuildProfiles object.
+
 =item builtin-system-build-paths ()
 
 The hook is called by dpkg-genbuildinfo to determine if the current path
@@ -180,6 +186,8 @@
 	my ($textref, $ch_info) = @params;
     } elsif ($hook eq 'update-buildflags') {
 	my $flags = shift @params;
+    } elsif ($hook eq 'update-buildprofiles') {
+	my $build_profiles_ref = shift @params;
     } elsif ($hook eq 'builtin-system-build-paths') {
         return ();
     } elsif ($hook eq 'build-tainted-by') {
diff -urN dpkg-1.20.9/scripts/Dpkg/Vendor/Ubuntu.pm dpkg-1.20.9ubuntu1/scripts/Dpkg/Vendor/Ubuntu.pm
--- dpkg-1.20.9/scripts/Dpkg/Vendor/Ubuntu.pm	2021-01-30 07:07:17.000000000 +0100
+++ dpkg-1.20.9ubuntu1/scripts/Dpkg/Vendor/Ubuntu.pm	2021-04-14 12:32:22.000000000 +0200
@@ -92,6 +92,14 @@
             $fields->{'Launchpad-Bugs-Fixed'} = join(' ', @$bugs);
         }
 
+    } elsif ($hook eq 'update-buildopts') {
+	my $build_opts = shift @params;
+	require Dpkg::Arch;
+	my $arch = Dpkg::Arch::get_host_arch();
+	if (Dpkg::Arch::debarch_eq($arch, 'riscv64')) {
+	    $build_opts->set('nocheck', 1, 'riscv64');
+	}
+
     } elsif ($hook eq 'update-buildflags') {
 	my $flags = shift @params;
 
@@ -117,6 +125,14 @@
 	}
 	# Per https://wiki.ubuntu.com/DistCompilerFlags
         $flags->prepend('LDFLAGS', '-Wl,-Bsymbolic-functions');
+    } elsif ($hook eq 'update-buildprofiles') {
+        my $build_profiles_ref = shift @params;
+        unless(grep $_ =~ /^!?noudeb$/, @$build_profiles_ref) {
+            unshift(@$build_profiles_ref, 'noudeb');
+        } else {
+            # Strip otherwise invalid profile name
+            @$build_profiles_ref = grep { $_ ne "!noudeb" } @$build_profiles_ref;
+        }
     } else {
         return $self->SUPER::run_hook($hook, @params);
     }
diff -urN dpkg-1.20.9/scripts/dpkg-buildpackage.pl dpkg-1.20.9ubuntu1/scripts/dpkg-buildpackage.pl
--- dpkg-1.20.9/scripts/dpkg-buildpackage.pl	2021-04-05 00:50:44.000000000 +0200
+++ dpkg-1.20.9ubuntu1/scripts/dpkg-buildpackage.pl	2021-04-14 12:32:22.000000000 +0200
@@ -203,6 +203,8 @@
 
 my $build_opts = Dpkg::BuildOptions->new();
 
+run_vendor_hook('update-buildopts', $build_opts);
+
 if ($build_opts->has('nocheck')) {
     $check_command = undef;
 } elsif (not find_command($check_command)) {
@@ -426,9 +428,11 @@
     }
     $build_opts->set('parallel', $parallel);
     $build_opts->export();
+} else {
+    $build_opts->export();
 }
 
-set_build_profiles(@build_profiles) if @build_profiles;
+set_build_profiles(@build_profiles);
 
 my $changelog = changelog_parse();
 my $ctrl = Dpkg::Control::Info->new();
diff -urN dpkg-1.20.9/scripts/dpkg-gencontrol.pl dpkg-1.20.9ubuntu1/scripts/dpkg-gencontrol.pl
--- dpkg-1.20.9/scripts/dpkg-gencontrol.pl	2021-01-30 07:07:17.000000000 +0100
+++ dpkg-1.20.9ubuntu1/scripts/dpkg-gencontrol.pl	2021-04-14 12:32:22.000000000 +0200
@@ -313,7 +313,8 @@
         unless defined $fields->{$f};
 }
 
-my $pkg_type = $pkg->{'Package-Type'} ||
+my $pkg_type = $override{'Package-Type'} ||
+               $pkg->{'Package-Type'} ||
                $pkg->get_custom_field('Package-Type') || 'deb';
 
 if ($pkg_type eq 'udeb') {
diff -urN dpkg-1.20.9/scripts/Makefile.in dpkg-1.20.9ubuntu1/scripts/Makefile.in
--- dpkg-1.20.9/scripts/Makefile.in	2021-04-14 00:43:39.000000000 +0200
+++ dpkg-1.20.9ubuntu1/scripts/Makefile.in	2021-04-14 12:32:22.000000000 +0200
@@ -365,6 +365,7 @@
 XGETTEXT = @XGETTEXT@
 XGETTEXT_015 = @XGETTEXT_015@
 XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+ZSTD_LIBS = @ZSTD_LIBS@
 Z_LIBS = @Z_LIBS@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
diff -urN dpkg-1.20.9/scripts/mk/Makefile.in dpkg-1.20.9ubuntu1/scripts/mk/Makefile.in
--- dpkg-1.20.9/scripts/mk/Makefile.in	2021-04-14 00:43:39.000000000 +0200
+++ dpkg-1.20.9ubuntu1/scripts/mk/Makefile.in	2021-04-14 12:32:22.000000000 +0200
@@ -286,6 +286,7 @@
 XGETTEXT = @XGETTEXT@
 XGETTEXT_015 = @XGETTEXT_015@
 XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+ZSTD_LIBS = @ZSTD_LIBS@
 Z_LIBS = @Z_LIBS@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
diff -urN dpkg-1.20.9/scripts/po/Makevars.template dpkg-1.20.9ubuntu1/scripts/po/Makevars.template
--- dpkg-1.20.9/scripts/po/Makevars.template	1970-01-01 01:00:00.000000000 +0100
+++ dpkg-1.20.9ubuntu1/scripts/po/Makevars.template	2021-04-14 12:32:22.000000000 +0200
@@ -0,0 +1,78 @@
+# Makefile variables for PO directory in any package using GNU gettext.
+
+# Usually the message domain is the same as the package name.
+DOMAIN = $(PACKAGE)
+
+# These two variables depend on the location of this directory.
+subdir = po
+top_builddir = ..
+
+# These options get passed to xgettext.
+XGETTEXT_OPTIONS = --keyword=_ --keyword=N_
+
+# This is the copyright holder that gets inserted into the header of the
+# $(DOMAIN).pot file.  Set this to the copyright holder of the surrounding
+# package.  (Note that the msgstr strings, extracted from the package's
+# sources, belong to the copyright holder of the package.)  Translators are
+# expected to transfer the copyright for their translations to this person
+# or entity, or to disclaim their copyright.  The empty string stands for
+# the public domain; in this case the translators are expected to disclaim
+# their copyright.
+COPYRIGHT_HOLDER = Free Software Foundation, Inc.
+
+# This tells whether or not to prepend "GNU " prefix to the package
+# name that gets inserted into the header of the $(DOMAIN).pot file.
+# Possible values are "yes", "no", or empty.  If it is empty, try to
+# detect it automatically by scanning the files in $(top_srcdir) for
+# "GNU packagename" string.
+PACKAGE_GNU =
+
+# This is the email address or URL to which the translators shall report
+# bugs in the untranslated strings:
+# - Strings which are not entire sentences, see the maintainer guidelines
+#   in the GNU gettext documentation, section 'Preparing Strings'.
+# - Strings which use unclear terms or require additional context to be
+#   understood.
+# - Strings which make invalid assumptions about notation of date, time or
+#   money.
+# - Pluralisation problems.
+# - Incorrect English spelling.
+# - Incorrect formatting.
+# It can be your email address, or a mailing list address where translators
+# can write to without being subscribed, or the URL of a web page through
+# which the translators can contact you.
+MSGID_BUGS_ADDRESS =
+
+# This is the list of locale categories, beyond LC_MESSAGES, for which the
+# message catalogs shall be used.  It is usually empty.
+EXTRA_LOCALE_CATEGORIES =
+
+# This tells whether the $(DOMAIN).pot file contains messages with an 'msgctxt'
+# context.  Possible values are "yes" and "no".  Set this to yes if the
+# package uses functions taking also a message context, like pgettext(), or
+# if in $(XGETTEXT_OPTIONS) you define keywords with a context argument.
+USE_MSGCTXT = no
+
+# These options get passed to msgmerge.
+# Useful options are in particular:
+#   --previous            to keep previous msgids of translated messages,
+#   --quiet               to reduce the verbosity.
+MSGMERGE_OPTIONS =
+
+# These options get passed to msginit.
+# If you want to disable line wrapping when writing PO files, add
+# --no-wrap to MSGMERGE_OPTIONS, XGETTEXT_OPTIONS, and
+# MSGINIT_OPTIONS.
+MSGINIT_OPTIONS =
+
+# This tells whether or not to regenerate a PO file when $(DOMAIN).pot
+# has changed.  Possible values are "yes" and "no".  Set this to no if
+# the POT file is checked in the repository and the version control
+# program ignores timestamps.
+PO_DEPENDS_ON_POT = yes
+
+# This tells whether or not to forcibly update $(DOMAIN).pot and
+# regenerate PO files on "make dist".  Possible values are "yes" and
+# "no".  Set this to no if the POT file and PO files are maintained
+# externally.
+DIST_DEPENDS_ON_UPDATE_PO = yes
diff -urN dpkg-1.20.9/scripts/t/Dpkg_BuildFlags.t dpkg-1.20.9ubuntu1/scripts/t/Dpkg_BuildFlags.t
--- dpkg-1.20.9/scripts/t/Dpkg_BuildFlags.t	2021-04-13 20:15:56.000000000 +0200
+++ dpkg-1.20.9ubuntu1/scripts/t/Dpkg_BuildFlags.t	2021-04-14 12:32:22.000000000 +0200
@@ -16,7 +16,7 @@
 use strict;
 use warnings;
 
-use Test::More tests => 26;
+use Test::More tests => 28;
 
 BEGIN {
     $ENV{DEB_BUILD_ARCH} = 'amd64';
@@ -71,6 +71,9 @@
         fixfilepath
         timeless
     ) ],
+    optimize => [ qw)
+        lto
+    ) ],
     sanitize => [ qw(
         address
         leak
diff -urN dpkg-1.20.9/scripts/t/Dpkg_BuildProfiles.t dpkg-1.20.9ubuntu1/scripts/t/Dpkg_BuildProfiles.t
--- dpkg-1.20.9/scripts/t/Dpkg_BuildProfiles.t	2021-01-30 07:07:17.000000000 +0100
+++ dpkg-1.20.9ubuntu1/scripts/t/Dpkg_BuildProfiles.t	2021-04-14 12:32:22.000000000 +0200
@@ -16,7 +16,7 @@
 use strict;
 use warnings;
 
-use Test::More tests => 8;
+use Test::More tests => 10;
 
 BEGIN {
     use_ok('Dpkg::BuildProfiles', qw(parse_build_profiles
@@ -26,6 +26,9 @@
 
 # TODO: Add actual test cases.
 
+# Check stock things
+$ENV{DEB_VENDOR} = 'Debian';
+
 my $formula;
 
 $formula = [ ];
@@ -58,4 +61,16 @@
 is_deeply([ get_build_profiles() ], [ qw(nocheck stage1) ],
     'get active build profiles explicitly set');
 
+# Check Ubuntu vendor hook
+$ENV{DEB_VENDOR} = 'Ubuntu';
+
+set_build_profiles(qw(nocheck stage1));
+is_deeply([ get_build_profiles() ], [ qw(noudeb nocheck stage1) ],
+    'get active build profiles explicitly set');
+
+set_build_profiles(qw(!noudeb nocheck stage1));
+is_deeply([ get_build_profiles() ], [ qw(nocheck stage1) ],
+    'get active build profiles explicitly set');
+
+
 1;
diff -urN dpkg-1.20.9/src/Makefile.in dpkg-1.20.9ubuntu1/src/Makefile.in
--- dpkg-1.20.9/src/Makefile.in	2021-04-14 00:43:39.000000000 +0200
+++ dpkg-1.20.9ubuntu1/src/Makefile.in	2021-04-14 12:32:22.000000000 +0200
@@ -363,6 +363,7 @@
 XGETTEXT = @XGETTEXT@
 XGETTEXT_015 = @XGETTEXT_015@
 XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+ZSTD_LIBS = @ZSTD_LIBS@
 Z_LIBS = @Z_LIBS@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
Datei dpkg-1.20.9/tests/t-unpack-fifo/pkg-fifo/test-fifo ist ein FIFO, während Datei dpkg-1.20.9ubuntu1/tests/t-unpack-fifo/pkg-fifo/test-fifo ein FIFO ist.
Datei dpkg-1.20.9/tests/t-unpack-hardlink/pkg-hardlink/test-fifo-link0 ist ein FIFO, während Datei dpkg-1.20.9ubuntu1/tests/t-unpack-hardlink/pkg-hardlink/test-fifo-link0 ein FIFO ist.
Datei dpkg-1.20.9/tests/t-unpack-hardlink/pkg-hardlink/test-fifo-link1 ist ein FIFO, während Datei dpkg-1.20.9ubuntu1/tests/t-unpack-hardlink/pkg-hardlink/test-fifo-link1 ein FIFO ist.
diff -urN dpkg-1.20.9/t-func/deb-format.at dpkg-1.20.9ubuntu1/t-func/deb-format.at
--- dpkg-1.20.9/t-func/deb-format.at	2021-01-30 07:07:17.000000000 +0100
+++ dpkg-1.20.9ubuntu1/t-func/deb-format.at	2021-04-14 12:32:22.000000000 +0200
@@ -28,6 +28,7 @@
 xz -c data.tar >data.tar.xz
 bzip2 -c data.tar >data.tar.bz2
 lzma -c data.tar >data.tar.lzma
+pzstd -q -c data.tar >data.tar.zst
 touch _ignore
 touch unknown
 ])
@@ -289,6 +290,18 @@
 drwxr-xr-x root/root         0 1970-01-01 00:00 ./
 -rw-r--r-- root/root         5 1970-01-01 00:00 ./file-templ
 ])
+
+AT_CHECK([
+# Test data.tar.zst member
+ar rc pkg-data-zst.deb debian-binary control.tar.gz data.tar.zst
+ar t pkg-data-zst.deb
+dpkg-deb -c pkg-data-zst.deb
+], [], [debian-binary
+control.tar.gz
+data.tar.zst
+drwxr-xr-x root/root         0 1970-01-01 00:00 ./
+-rw-r--r-- root/root         5 1970-01-01 00:00 ./file-templ
+])
 
 AT_CHECK([
 # Test data.tar.lzma member
diff -urN dpkg-1.20.9/t-func/Makefile.in dpkg-1.20.9ubuntu1/t-func/Makefile.in
--- dpkg-1.20.9/t-func/Makefile.in	2021-04-14 00:43:39.000000000 +0200
+++ dpkg-1.20.9ubuntu1/t-func/Makefile.in	2021-04-14 12:32:22.000000000 +0200
@@ -255,6 +255,7 @@
 XGETTEXT = @XGETTEXT@
 XGETTEXT_015 = @XGETTEXT_015@
 XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+ZSTD_LIBS = @ZSTD_LIBS@
 Z_LIBS = @Z_LIBS@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
diff -urN dpkg-1.20.9/utils/Makefile.in dpkg-1.20.9ubuntu1/utils/Makefile.in
--- dpkg-1.20.9/utils/Makefile.in	2021-04-14 00:43:39.000000000 +0200
+++ dpkg-1.20.9ubuntu1/utils/Makefile.in	2021-04-14 12:32:22.000000000 +0200
@@ -370,6 +370,7 @@
 XGETTEXT = @XGETTEXT@
 XGETTEXT_015 = @XGETTEXT_015@
 XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+ZSTD_LIBS = @ZSTD_LIBS@
 Z_LIBS = @Z_LIBS@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
diff -urN dpkg-1.20.9/utils/update-alternatives.c dpkg-1.20.9ubuntu1/utils/update-alternatives.c
--- dpkg-1.20.9/utils/update-alternatives.c	2021-03-02 03:15:25.000000000 +0100
+++ dpkg-1.20.9ubuntu1/utils/update-alternatives.c	2021-04-14 12:32:22.000000000 +0200
@@ -2850,7 +2850,8 @@
 	bool modifies_sys = false;
 	int i = 0;
 
-	setlocale(LC_ALL, "");
+	if (getenv("DPKG_UNTRANSLATED_MESSAGES") == NULL)
+		setlocale(LC_ALL, "");
 	bindtextdomain(PACKAGE, LOCALEDIR);
 	textdomain(PACKAGE);
 
openSUSE Build Service is sponsored by