public inbox for cygwin-apps-cvs@sourceware.org
help / color / mirror / Atom feed
From: Jon Turney <jturney@sourceware.org>
To: cygwin-apps-cvs@sourceware.org
Subject: [cygport - the Cygwin packaging tool] branch master, updated. 0.35.5-20-ge79bd54c
Date: Sun, 15 Jan 2023 00:31:00 +0000 (GMT)	[thread overview]
Message-ID: <20230115003100.BEFE43858D1E@sourceware.org> (raw)




https://sourceware.org/git/gitweb.cgi?p=cygwin-apps/cygport.git;h=e79bd54c61473534c69148d412f0dbaca8e1a4d0

commit e79bd54c61473534c69148d412f0dbaca8e1a4d0
Author: Jon Turney <jon.turney@dronecode.org.uk>
Date:   Sat Jan 14 23:22:06 2023 +0000

    Tweak

https://sourceware.org/git/gitweb.cgi?p=cygwin-apps/cygport.git;h=8a098f8c2048adf43b938013f070cc725d0d3a2b

commit 8a098f8c2048adf43b938013f070cc725d0d3a2b
Author: Jon Turney <jon.turney@dronecode.org.uk>
Date:   Sat Jan 14 15:21:12 2023 +0000

    Update tests for python2 EOL
    
    * autotools/mate-menus: Update to make a python3 packages
    
    The bindings in this version aren't compatible with python3.  Later
    versions, which are python3 compatible, use introspection-based, rather
    than static bindings (so there's nothing to package)
    
    Just disable building the python2 bindings, for the moment.
    
    * download/svn: Drop making a python 2.7 wheel
    
    * python/distutils: BeautifulSoup 3.x doesn't support python3, so
    upgrade to bs4
    
    (not sure what to do when distutils goes away, and this becomes another
    test of wheel, but still needs a test for the moment)
    
    * python/pygtk: Drop test
    
    Drop this, snce pygtk is python2 (and gtk+2.0) only, there's nothing
    left to test.
    
    * waf/all: Update version of lv2
    
    Update to version of lv2 which still uses waf, but a waf which is
    compatible with python3
    
    * Don't install python2 test prerequisites in CI.

https://sourceware.org/git/gitweb.cgi?p=cygwin-apps/cygport.git;h=5f21261850ba6f38e3a94f36b63d5709d3845202

commit 5f21261850ba6f38e3a94f36b63d5709d3845202
Author: Jon Turney <jon.turney@dronecode.org.uk>
Date:   Sat Jan 14 15:13:00 2023 +0000

    Update copyrights to 2023

https://sourceware.org/git/gitweb.cgi?p=cygwin-apps/cygport.git;h=058117824e387fe91581a30a85359bd2d9cf3720

commit 058117824e387fe91581a30a85359bd2d9cf3720
Author: Jon Turney <jon.turney@dronecode.org.uk>
Date:   Sat Jan 14 13:19:10 2023 +0000

    Make PYTHON_WHEEL_VERSIONS containing "2" or "2.x" an error

https://sourceware.org/git/gitweb.cgi?p=cygwin-apps/cygport.git;h=0a967e36b152a201a8e9174572138e91d0215fe4

commit 0a967e36b152a201a8e9174572138e91d0215fe4
Author: Jon Turney <jon.turney@dronecode.org.uk>
Date:   Sat Jan 14 12:58:45 2023 +0000

    Make 'inherit python2{,-disutils,-wheel}' an error
    
    Make 'inherit python2{,-disutils,-wheel}' an error, as suggeested in
    739c181aea1d ("Updates to tests for further rusting of python2").
    
    Also warn about deprecated python2 compatibility classes python and
    pygtk.

https://sourceware.org/git/gitweb.cgi?p=cygwin-apps/cygport.git;h=ca59f3dd4e5d7134a74905f8af922759651e9632

commit ca59f3dd4e5d7134a74905f8af922759651e9632
Author: Jon Turney <jon.turney@dronecode.org.uk>
Date:   Sat Jan 14 12:32:12 2023 +0000

    pkg_info: Use absolute path to cygpath
    
    This avoids using the just built cygpath from ${D}/bin in the PATH, when
    building the cygwin package (which can sometimes fail due to "multiple
    cygwin DLLs" issues).

https://sourceware.org/git/gitweb.cgi?p=cygwin-apps/cygport.git;h=9b2d8ae90de1f4316facfb67f90d82e4a6b9adfa

commit 9b2d8ae90de1f4316facfb67f90d82e4a6b9adfa
Author: Jon Turney <jon.turney@dronecode.org.uk>
Date:   Mon Jan 9 14:36:06 2023 +0000

    pkg: doc: Drop mention of empty obsoletion packages
    
    We stopped generating these in 62f43d09.
    
    Also mention that PN_debuginfo_OBSOLETES can be used.

https://sourceware.org/git/gitweb.cgi?p=cygwin-apps/cygport.git;h=2020bd9128875315b20e311969df6f009e8c26e3

commit 2020bd9128875315b20e311969df6f009e8c26e3
Author: Jon Turney <jon.turney@dronecode.org.uk>
Date:   Mon Jan 9 14:36:57 2023 +0000

    python{,2,3}-distutils: Warn that distutils is deprecated
    
    distutils was deprecated in python 3.10 and removal is planned for python
    3.12.

https://sourceware.org/git/gitweb.cgi?p=cygwin-apps/cygport.git;h=5abf2e7d30a27eeb82d450e16d3a5681c1f1128b

commit 5abf2e7d30a27eeb82d450e16d3a5681c1f1128b
Author: Jon Turney <jon.turney@dronecode.org.uk>
Date:   Sat Dec 31 17:11:44 2022 +0000

    pkg_upload: doc: Update (now redirected) URLs in uploading documentation

https://sourceware.org/git/gitweb.cgi?p=cygwin-apps/cygport.git;h=38a59c014747129d4872b8eac5aeb74484c85269

commit 38a59c014747129d4872b8eac5aeb74484c85269
Author: Jon Turney <jon.turney@dronecode.org.uk>
Date:   Fri Dec 30 16:32:22 2022 +0000

    Ensure example cygports in documentation contain LICENSE and HOMEPAGE
    
    perl, php, python.org and R cygclasses already set HOMEPAGE, and should
    possibly set LICENSE using upstream metadata.

https://sourceware.org/git/gitweb.cgi?p=cygwin-apps/cygport.git;h=5d23a3f3e56dc1663c2a27e1047375c200488944

commit 5d23a3f3e56dc1663c2a27e1047375c200488944
Author: Jon Turney <jon.turney@dronecode.org.uk>
Date:   Mon Dec 19 17:49:07 2022 +0000

    Add a test of CYGWIN_FILES functionality
    
    This is based on the xinit cygport, simplified so it just exercises
    README, shell profile scripts and postinstall/preinstall scripts.

https://sourceware.org/git/gitweb.cgi?p=cygwin-apps/cygport.git;h=534d7bb64d61696d58079161472b0326f31845e0

commit 534d7bb64d61696d58079161472b0326f31845e0
Author: Jon Turney <jon.turney@dronecode.org.uk>
Date:   Mon Dec 19 13:35:59 2022 +0000

    Provide an alternative mechanism to get files into $C
    
    Creating these files from a .cygwin.patch file works fine when building
    from an existing source package, it's less great for creating a source
    package from a VCS checkout.
    
    Provide a semi-useful default of including a Cygwin-specific README, if
    present.
    
    Extend gpg signing to include a manifest of the files listed here, since
    we would have signed the .cygwin.patch itself, if present.

https://sourceware.org/git/gitweb.cgi?p=cygwin-apps/cygport.git;h=acb777a2bbd1735e4741aa420fbff6330399a2ba

commit acb777a2bbd1735e4741aa420fbff6330399a2ba
Author: Jon Turney <jon.turney@dronecode.org.uk>
Date:   Mon Dec 19 13:28:56 2022 +0000

    Document actions taken on files in $C
    
    Also note that .hint files in $C are obsolete, since we now have better
    ways supplying them, by automatic generation.
    
    I thought about declaring PKG.list files obsolete as well, but they
    perhaps still have a real use when "the contents of a package are too
    many or complicated to easily describe" in PKG_CONTENTS?

https://sourceware.org/git/gitweb.cgi?p=cygwin-apps/cygport.git;h=f716c05ac2057234b83c31c2f07d9b2b575ca8bd

commit f716c05ac2057234b83c31c2f07d9b2b575ca8bd
Author: Jon Turney <jon.turney@dronecode.org.uk>
Date:   Mon Dec 19 16:04:18 2022 +0000

    Add a test which runs 'cygport vars'

https://sourceware.org/git/gitweb.cgi?p=cygwin-apps/cygport.git;h=2c05a1e501110b2c6ee2305fd2868a18aeb0bf0f

commit 2c05a1e501110b2c6ee2305fd2868a18aeb0bf0f
Author: Jon Turney <jon.turney@dronecode.org.uk>
Date:   Fri Dec 16 17:45:21 2022 +0000

    Ignore errors in nested source-ing of cygport
    
    This avoids immediately terminating on calling the 'exit' built-in after
    any error in the source-ing (e.g. raised by free code in an inherited
    cygclass), which causes a silent exit now we that suppress stderr from
    that nested source-ing.
    
    We do this by writing "( stuff-which-may-exit ) || true".
    
    You might think that the extra subshell is not needed.  I certainly did,
    (because the rules for the 'errexit' mode (which the subshell inherits)
    are that non-final commands in || lists don't cause an exit if they
    fail).  I was baffled for a long time as to why it's needed until I
    realized that the 'exit' built-in causes the shell to exit, even when
    it succeeds.
    
    The '|| true' ensures that the substitution does not have a non-zero
    exit status, which is an error in the top-level shell.
    
    Fixes: aa665473aa7d ("Send informational messages to stderr")

https://sourceware.org/git/gitweb.cgi?p=cygwin-apps/cygport.git;h=70634227fcc7bbc4219b30119bf5889a66e5f55d

commit 70634227fcc7bbc4219b30119bf5889a66e5f55d
Author: Jon Turney <jon.turney@dronecode.org.uk>
Date:   Mon Dec 19 17:00:38 2022 +0000

    Add a test of arch-invariant SRC_URI and PATCH_URI logic

https://sourceware.org/git/gitweb.cgi?p=cygwin-apps/cygport.git;h=6574f491fe93a71f541faa2f32105a4b855dfa7e

commit 6574f491fe93a71f541faa2f32105a4b855dfa7e
Author: Jon Turney <jon.turney@dronecode.org.uk>
Date:   Wed Dec 14 21:06:40 2022 +0000

    Be more careful with source timestamps
    
    As suggested in [1], try harder to preserve timestamp information from
    the original files.
    
    This tries harder to retain remote timestamp of downloaded upstream
    files, and preserve timestamp of those, and of patch and cygport files
    when copying to the staging directory for the src archive.
    
    [1] https://cygwin.com/pipermail/cygwin-apps/2020-August/040407.html

https://sourceware.org/git/gitweb.cgi?p=cygwin-apps/cygport.git;h=79fff482c35a700f1348bb774fd446545a345a29

commit 79fff482c35a700f1348bb774fd446545a345a29
Author: Achim Gratz <Stromeko@Stromeko.DE>
Date:   Thu May 13 19:09:27 2021 +0200

    bin/cygport.in: make system-wide defaults overrideable by user defaults
    
    Make system-wide defaults overrideable by user defaults, and document
    the precedence of defaults files.

https://sourceware.org/git/gitweb.cgi?p=cygwin-apps/cygport.git;h=1db9bbe37f01a614b3df154f29abd7ae32b41db6

commit 1db9bbe37f01a614b3df154f29abd7ae32b41db6
Author: Jon Turney <jon.turney@dronecode.org.uk>
Date:   Tue Dec 13 14:25:35 2022 +0000

    pkg: don't put local user:group info into package archives
    
    Don't leak local user and group into the package archives we make. (This
    information is ignored by setup, in any case)
    
    Pick Guest:None to be the owner of all files in the archive, just in
    case we ever need to mark some as owned by Administrator:Administrators
    in future.
    
    Based on https://cygwin.com/pipermail/cygwin/2020-August/245738.html

https://sourceware.org/git/gitweb.cgi?p=cygwin-apps/cygport.git;h=59af06d5ad09d9305803499dafbde3003b33703c

commit 59af06d5ad09d9305803499dafbde3003b33703c
Author: Jon Turney <jon.turney@dronecode.org.uk>
Date:   Mon May 6 17:43:27 2019 +0100

    pkg: Allow package compression to be specified
    
    Do not hard-code package compression type to xz. Allow compression to be
    specified with the (optional) TAR_COMPRESSION_EXT variable.
    
    This allows packages to be compressed with ZStandard.


Diff:
---
 .github/workflows/cygwin.yml                       |  10 +-
 bin/cygport.in                                     |  21 +-
 cygclass/aspell-dict.cygclass                      |   2 +
 cygclass/autotools.cygclass                        |   4 +
 cygclass/font.cygclass                             |   1 +
 cygclass/httpd.cygclass                            |   2 +
 cygclass/multilib.cygclass                         |   1 +
 cygclass/pygtk.cygclass                            |   2 +
 cygclass/python-distutils.cygclass                 |   3 +
 cygclass/python-wheel.cygclass                     |  15 +-
 cygclass/python.cygclass                           |   2 +
 cygclass/python2-distutils.cygclass                |   3 +
 cygclass/python2-wheel.cygclass                    |   3 +
 cygclass/python2.cygclass                          |   2 +
 cygclass/python3-distutils.cygclass                |   2 +
 cygclass/python3-wheel.cygclass                    |   1 +
 data/cygport.conf                                  |  16 +-
 lib/pkg_info.cygpart                               |   4 +-
 lib/pkg_pkg.cygpart                                | 130 +++++++++---
 lib/pkg_upload.cygpart                             |  10 +-
 lib/src_fetch.cygpart                              |   6 +-
 lib/src_postinst.cygpart                           |  26 +++
 lib/src_prep.cygpart                               |  37 +++-
 lib/syntax.cygpart                                 |  11 +-
 testsuite/R/cran/vars                              |   3 +
 testsuite/aspell/dict/vars                         |   3 +
 testsuite/autotools/c/vars                         |   3 +
 testsuite/autotools/gnome/vars                     |   3 +
 testsuite/autotools/gtkmm/vars                     |   3 +
 testsuite/autotools/kde3/vars                      |   3 +
 .../python2-matemenu-1.18.0-1.hint                 |   8 -
 testsuite/autotools/mate/mate-menus.cygport        |  10 +-
 testsuite/autotools/mate/mate-menus.list           |   2 -
 testsuite/autotools/mate/vars                      |   3 +
 testsuite/autotools/meson.build                    |   2 +-
 testsuite/autotools/xfce/vars                      |   3 +
 testsuite/basic/info/vars                          |   3 +
 testsuite/cmake/c/vars                             |   3 +
 testsuite/cmake/kde4/vars                          |   3 +
 testsuite/cmake/kf5/vars                           |   3 +
 testsuite/cmake/qt4/vars                           |   3 +
 testsuite/cmake/qt5/vars                           |   3 +
 testsuite/cross/cmake/vars                         |   3 +
 testsuite/cross/make/vars                          |   3 +
 testsuite/cross/qt5/vars                           |   3 +
 testsuite/docbook/sgml/vars                        |   3 +
 testsuite/docbook/xml/vars                         |   3 +
 testsuite/download/R/vars                          |   3 +
 testsuite/download/bzr/vars                        |   3 +
 testsuite/download/cvs/vars                        |   3 +
 testsuite/download/git/vars                        |   3 +
 testsuite/download/gnome.org/vars                  |   3 +
 testsuite/download/hg/vars                         |   3 +
 testsuite/download/mate/vars                       |   3 +
 testsuite/download/mtn/vars                        |   3 +
 testsuite/download/perl/vars                       |   3 +
 testsuite/download/python.org/vars                 |   3 +
 .../python27-clang/python27-clang-9.0.1-1.hint     |   9 -
 testsuite/download/svn/python-clang.cygport        |   2 +-
 testsuite/download/svn/python-clang.list           |  17 --
 testsuite/download/svn/vars                        |   3 +
 testsuite/download/x.org/vars                      |   3 +
 testsuite/files/meson.build                        |   1 +
 testsuite/files/xinit/README                       |   1 +
 .../dist/xinit/xinit-1.4.2-2-src.hint              |  10 +
 .../dist/xinit/xinit-1.4.2-2.hint                  |   7 +
 .../xinit-debuginfo/xinit-debuginfo-1.4.2-2.hint}  |   6 +-
 testsuite/files/xinit/postinstall.sh               |   3 +
 testsuite/files/xinit/preremove.sh                 |   3 +
 testsuite/files/xinit/profile.d.csh                |   4 +
 testsuite/files/xinit/profile.d.fish               |   4 +
 testsuite/files/xinit/profile.d.sh                 |   1 +
 testsuite/files/xinit/startxdmcp.bat               | 102 ++++++++++
 testsuite/files/xinit/startxwin                    | 226 +++++++++++++++++++++
 testsuite/files/xinit/startxwin.1                  | 213 +++++++++++++++++++
 testsuite/files/xinit/vars                         |   3 +
 testsuite/files/xinit/xinit.cygport                |  44 ++++
 testsuite/files/xinit/xinit.list                   |   9 +
 testsuite/font/install/vars                        |   3 +
 testsuite/font/sfd2ttf/vars                        |   3 +
 testsuite/hints/multiple/vars                      |   3 +
 testsuite/hints/single/vars                        |   3 +
 testsuite/httpd/apxs/vars                          |   3 +
 testsuite/logic/arch_patch/arch_patch.cygport      |  12 ++
 testsuite/logic/arch_src/arch_src.cygport          |  12 ++
 testsuite/logic/meson.build                        |   9 +
 testsuite/lua/all/vars                             |   4 +
 testsuite/meson.build                              |   6 +-
 testsuite/meson/c/vars                             |   3 +
 testsuite/meson/gnome/vars                         |   3 +
 testsuite/ocaml/dune/vars                          |   4 +
 testsuite/ocaml/findlib/vars                       |   3 +
 testsuite/perl/ExtUtils-MakeMaker/vars             |   3 +
 testsuite/perl/Module-Build/vars                   |   3 +
 testsuite/php/pear/vars                            |   3 +
 testsuite/php/pecl/vars                            |   3 +
 .../python3-beautifulsoup-4.11.1-1-src.hint}       |   2 +-
 .../python3-beautifulsoup-4.11.1-1.hint}           |   3 +-
 .../python/distutils/python-beautifulsoup.cygport  |  18 +-
 .../python/distutils/python-beautifulsoup.list     | 114 ++++++++++-
 testsuite/python/distutils/vars                    |   3 +
 testsuite/python/meson.build                       |  10 +-
 .../python-pynotify-0.1.1-5-src.hint               |   7 -
 .../python-pynotify/python-pynotify-0.1.1-5.hint   |   5 -
 .../pygtk/notify-python-0.1.1-libnotify-0.7.patch  |  37 ----
 testsuite/python/pygtk/python-pynotify.cygport     |  18 --
 testsuite/python/pygtk/python-pynotify.list        |  10 -
 testsuite/python/wheel/vars                        |   3 +
 testsuite/qmake/qt3/vars                           |   3 +
 testsuite/qmake/qt4/vars                           |   3 +
 testsuite/qmake/qt5/vars                           |   3 +
 testsuite/ruby/gem/vars                            |   3 +
 testsuite/texlive/collection/vars                  |   3 +
 testsuite/vars                                     |  35 ++++
 testsuite/waf/all/1.12.0-cygwin-shlib.patch        |  66 ------
 .../dist/lv2/lv2-1.18.4-1-src.hint}                |   0
 .../dist/lv2/lv2-1.18.4-1.hint}                    |   0
 .../dist/lv2/lv2-devel/lv2-devel-1.18.4-1.hint}    |   2 +-
 testsuite/waf/all/lv2.cygport                      |   9 +-
 testsuite/waf/all/lv2.list                         |  90 +++++---
 testsuite/waf/all/vars                             |   3 +
 testsuite/waf/all/waf-python2.patch                |  16 --
 testsuite/waf/meson.build                          |   2 +-
 123 files changed, 1305 insertions(+), 340 deletions(-)

diff --git a/.github/workflows/cygwin.yml b/.github/workflows/cygwin.yml
index 9ed59f58..57df4f05 100644
--- a/.github/workflows/cygwin.yml
+++ b/.github/workflows/cygwin.yml
@@ -95,11 +95,7 @@ jobs:
         perl,^
         perl-Module-Build,^
         php-PEAR,^
-        python-gtk2.0-devel,^
-        python2-devel,^
-        python27-pip,^
-        python27-setuptools,^
-        python27-wheel,^
+        python38-devel,^
         python38-pip,^
         python38-setuptools,^
         python38-wheel,^
@@ -120,7 +116,9 @@ jobs:
     - name: Fixup Cygwin installation
       run: |
         bash --login
-        bash -c '/usr/sbin/alternatives --set python /usr/bin/python3.8 ; /usr/sbin/alternatives --set python3 /usr/bin/python3.8'
+        bash -c '/usr/sbin/alternatives --set python /usr/bin/python3.8'
+        bash -c '/usr/sbin/alternatives --set python3 /usr/bin/python3.8'
+        bash -c '/usr/sbin/alternatives --set python3-config /usr/bin/python3.8-config'
         bash -c 'sed -i s#/usr/bin/python\$#/usr/bin/python3.9# /usr/bin/pip3.9'
         bash -c 'sed -i s@#!/bin/python\$@#!/bin/python2@ /usr/bin/bzr'
         bash -c 'git config --system --add safe.directory /cygdrive/d/a/cygport/cygport'
diff --git a/bin/cygport.in b/bin/cygport.in
index 446734fa..46647573 100755
--- a/bin/cygport.in
+++ b/bin/cygport.in
@@ -57,7 +57,7 @@ source ${_privlibdir}/syntax.cygpart
 #  The Cygport Reference Manual documents cygport, a utility for creating and
 #  building software packages for the Cygwin platform.
 #
-#  |html Copyright &#169; 2006-2020 Cygport authors
+#  |html Copyright &#169; 2006-2023 Cygport authors
 #
 #  Permission is granted to copy, distribute and/or modify this manual
 #  under the terms of the GNU Free Documentation License, Version 1.3 or
@@ -263,16 +263,16 @@ fi
 declare    MAKEOPTS="${_nproc:--j $(($(nproc 2>/dev/null) + 1))} "
 
 # load configuration
-for conf in "${HOME}/.config/cygport.conf" \
-	    "${HOME}/.cygport/cygport.conf" \
-	    "${HOME}/.cygport.conf" \
-	    "${HOME}/.cygportrc" \
-	    "${_privsysconfdir}/cygport.conf"
+for conf in \
+	"${_privsysconfdir}/cygport.conf" \
+	"${HOME}/.config/cygport.conf" \
+	"${HOME}/.cygport/cygport.conf" \
+	"${HOME}/.cygport.conf" \
+	"${HOME}/.cygportrc"
 do
 	if [ -e "${conf}" ]
 	then
 		source "${conf}" || error "could not read ${conf}"
-		break;
 	fi
 done
 unset conf;
@@ -431,7 +431,10 @@ do
     n=0
     while (( n < ${#ARCHES[*]} ))
     do
-        read -r < <(declare ARCH=${ARCHES[$n]}; declare ARCH_${ARCH}=1; source ${top}/${cygportfile} 2>/dev/null; eval echo "\$${VAR}")
+        # the '\n' at the end ensures that if the source-ing fails, the process
+        # substitution still outputs something, so read has some input and
+        # doesn't fail on seeing an end-of-file
+        read -r < <( (declare ARCH=${ARCHES[$n]}; declare ARCH_${ARCH}=1; source ${top}/${cygportfile} 2>/dev/null ; eval echo "\$${VAR}}" ) || echo "\n" )
         VALUE[$n]=${REPLY}
         if (( n > 0 ))
         then
@@ -447,7 +450,7 @@ unset n VALUE ARCHES VAR
 
 # probe if the cygport sets ARCH - if it does, set ARCHES to that value,
 # otherwise set it to the default value "all".
-PROBE_ARCH=$(unset ARCH; source ${top}/${cygportfile} 2>/dev/null; echo "${ARCH}")
+PROBE_ARCH=$( (unset ARCH; source ${top}/${cygportfile} 2>/dev/null ; echo "${ARCH}") || true )
 if [ -z "${PROBE_ARCH}" ]
 then
 	declare -r ARCHES="all"
diff --git a/cygclass/aspell-dict.cygclass b/cygclass/aspell-dict.cygclass
index 565c44b6..22dd97b1 100644
--- a/cygclass/aspell-dict.cygclass
+++ b/cygclass/aspell-dict.cygclass
@@ -47,6 +47,8 @@
 #    to eventually replace Ispell. It can either be used as a library or as an
 #    independent spell checker.
 #    This package provides English dictionaries for Aspell."
+#    HOMEPAGE="http://aspell.net/"
+#    LICENSE="MIT and BSD"
 #
 #  REQUIRES
 #  aspell
diff --git a/cygclass/autotools.cygclass b/cygclass/autotools.cygclass
index c83dd001..1b608425 100644
--- a/cygclass/autotools.cygclass
+++ b/cygclass/autotools.cygclass
@@ -42,6 +42,7 @@
 #    containing a match to a specified pattern. By default, grep prints the
 #    matching lines."
 #    HOMEPAGE="https://www.gnu.org/software/grep/"
+#    LICENSE="GPL-2.0-or-later"
 #    SRC_URI="mirror://gnu/grep/grep-${VERSION}.tar.xz"
 #
 #  If the only customization needed is to add configure flags, use CYGCONF_ARGS:
@@ -57,6 +58,7 @@
 #    column number, auto-indentation, feature toggles, internationalization support,
 #    and filename tab completion."
 #    HOMEPAGE="https://www.nano-editor.org/"
+#    LICENSE="GPL-3.0-or-later"
 #    SRC_URI="https://www.nano-editor.org/dist/v${VERSION%.*}/nano-${VERSION}.tar.gz"
 #    PATCH_URI="2.2.4-wchar.patch"
 #    
@@ -74,6 +76,8 @@
 #    SUMMARY="Double-array digital search tree library"
 #    DESCRIPTION="This is an implementation of double-array structure for
 #    representing trie, as proposed by Junichi Aoe."
+#    HOMEPAGE="https://linux.thai.net/~thep/datrie/datrie.html"
+#    LICENSE="LGPL"
 #    
 #    PKG_NAMES="${NAME}1 ${NAME}-devel ${NAME}-doc"
 #    # see PKG_CONTENTS
diff --git a/cygclass/font.cygclass b/cygclass/font.cygclass
index 545b8be6..20bbfa54 100644
--- a/cygclass/font.cygclass
+++ b/cygclass/font.cygclass
@@ -38,6 +38,7 @@
 #    Humanist sans serif, and was developed for on-screen reading; in particular,
 #    reading web pages on a mobile phone."
 #    HOMEPAGE="https://gitlab.gnome.org/GNOME/cantarell-fonts/"
+#    LICENSE="OFL"
 #    
 #    src_compile() { :; }
 #    
diff --git a/cygclass/httpd.cygclass b/cygclass/httpd.cygclass
index e210ec6e..125d1f6e 100644
--- a/cygclass/httpd.cygclass
+++ b/cygclass/httpd.cygclass
@@ -48,6 +48,7 @@
 #    delivered by the proxy module (mod_proxy) for viruses using the Clamav
 #    virus scanning engine."
 #    HOMEPAGE="http://software.othello.ch/mod_clamav/"
+#    LICENSE="GPL-2.0-only"
 #    SRC_URI="http://software.othello.ch/mod_clamav/mod_clamav-${VERSION}.tar.gz"
 #    SRC_DIR="mod_clamav-${VERSION}"
 #    PATCH_URI="0.22-cygwin-layout.patch"
@@ -78,6 +79,7 @@
 #    city that a web request originated from.  It uses the GeoIP library and
 #    database to perform the lookup."
 #    HOMEPAGE="https://dev.maxmind.com/geoip/legacy/mod_geoip2/"
+#    LICENSE="Apache-1.1"
 #    SRC_URI="https://github.com/maxmind/geoip-api-mod_geoip2/archive/v${VERSION}.tar.gz"
 #    SRC_DIR="geoip-api-mod_geoip2-${VERSION}"
 #    
diff --git a/cygclass/multilib.cygclass b/cygclass/multilib.cygclass
index a9fbc85f..7ce36e73 100644
--- a/cygclass/multilib.cygclass
+++ b/cygclass/multilib.cygclass
@@ -53,6 +53,7 @@
 #  CATEGORY="Devel"
 #  SUMMARY="zlib for Linux x86-64/x32 toolchain"
 #  HOMEPAGE="https://www.zlib.net/"
+#  LICENSE="Zlib"
 #  SRC_URI="mirror://sourceforge/libpng/zlib-${VERSION}.tar.gz"
 #  SRC_DIR="zlib-${VERSION}"
 #  
diff --git a/cygclass/pygtk.cygclass b/cygclass/pygtk.cygclass
index b1412880..8bc38a8e 100644
--- a/cygclass/pygtk.cygclass
+++ b/cygclass/pygtk.cygclass
@@ -40,6 +40,8 @@
 #  gnome.org.cygclass (unless mate.cygclass has been inherit()ed), python.cygclass
 #****
 
+warning "pygtk.cygclass: pygtk bindings are limited to got gtk+2 and python2 and considered obsolete."
+
 case ${PN#python-} in
 	${PN})
 		# for packages which provide pygtk bindings together with the C lib.
diff --git a/cygclass/python-distutils.cygclass b/cygclass/python-distutils.cygclass
index 177bb88d..14d4ae65 100644
--- a/cygclass/python-distutils.cygclass
+++ b/cygclass/python-distutils.cygclass
@@ -27,6 +27,9 @@
 #  INHERITS
 #  python2-distutils.cygclass, python.cygclass
 #****
+
+warning "python-distutils.cygclass: deprecated compatibility wrapper for the python2-distutils cygclass"
+
 inherit python2-distutils python
 
 #****iC* python-distutils.cygclass/python_distutils_compile
diff --git a/cygclass/python-wheel.cygclass b/cygclass/python-wheel.cygclass
index 064fec2a..1ef23826 100644
--- a/cygclass/python-wheel.cygclass
+++ b/cygclass/python-wheel.cygclass
@@ -57,7 +57,7 @@ inherit python.org
 
 #****v* python-wheel.cygclass/PYTHON_WHEEL_VERSIONS
 #  SYNOPSIS
-#  PYTHON_WHEEL_VERSIONS="2.7:3.5" # e.g. added to stdlib in 3.6
+#  PYTHON_WHEEL_VERSIONS="3.5:3.6" # e.g. added to stdlib in 3.7
 #  inherit python-wheel
 #  DESCRIPTION
 #  A colon-seperated list of version(s) for which this module should be built.
@@ -71,11 +71,8 @@ inherit python.org
 #  If undefined, "default" is assumed.
 #  NOTES
 #  * Python 2.7 is no longer supported upstream, and all code should be moving
-#    to Python 3.y.  While the 2.7 packages will remain for now, they should
-#    only be used when absolutely needed.  Therefore, 2.7 has been dropped from
-#    the all/default/future sets.  If you still need to provide your module for
-#    2.7 -- and 2.7 is still supported by the module -- then set a value of
-#    e.g. PYTHON_WHEEL_VERSIONS="2:default".
+#    to Python 3.y.  A 2.x version appearing in PYTHON_WHEEL_VERSIONS is now an
+#    error.
 #  * It is not generally expected for wheel packages to be built with "all".
 #    This option is primarily intended for the most basic modules used to
 #    build, install, and run other modules (e.g. setuptools, wheel, pip, and
@@ -107,6 +104,12 @@ unset _tmp_wheel_v
 
 for ver in ${PYTHON_WHEEL_VERSIONS//:/ }
 do
+	case "${ver}" in
+	2.*)
+		error "${ver} in PYTHON_WHEEL_VERSIONS"
+		;;
+	esac
+
 	check_prog_req pip${ver} python${ver//.}-pip
 done
 
diff --git a/cygclass/python.cygclass b/cygclass/python.cygclass
index 6f3c1ca2..7502fa0e 100644
--- a/cygclass/python.cygclass
+++ b/cygclass/python.cygclass
@@ -30,6 +30,8 @@
 #  python2.cygclass
 #****
 
+warning "python.cygclass: deprecated compatibility wrapper for the python2 cygclass"
+
 inherit python2
 
 #****id* python.cygclass/PYTHON
diff --git a/cygclass/python2-distutils.cygclass b/cygclass/python2-distutils.cygclass
index 20468a3c..c20f6834 100644
--- a/cygclass/python2-distutils.cygclass
+++ b/cygclass/python2-distutils.cygclass
@@ -21,6 +21,9 @@
 #
 ################################################################################
 
+warning "python2-distutils.cygclass: python distutils is deprecated. Please migrate to the python-wheel cygclass."
+error "python2-distutils.cyclass: python2 was sunsetted on 1 January, 2020.  Please use python3 instead."
+
 #****h* Cygclasses/python2-distutils.cygclass
 #  DESCRIPTION
 #  Distutils is the most common method for building and installing Python
diff --git a/cygclass/python2-wheel.cygclass b/cygclass/python2-wheel.cygclass
index 26670fcc..8d3e32e9 100644
--- a/cygclass/python2-wheel.cygclass
+++ b/cygclass/python2-wheel.cygclass
@@ -50,6 +50,9 @@
 #  REQUIRES
 #  python2, python2-pip
 #****
+
+error "python2-wheel.cyclass: python2 was sunsetted on 1 January, 2020.  Please use python3 instead."
+
 inherit python2
 PYTHON_WHEEL_VERSIONS=${PYTHON2_VERSION}
 inherit python-wheel
diff --git a/cygclass/python2.cygclass b/cygclass/python2.cygclass
index 84aa4b93..0052689f 100644
--- a/cygclass/python2.cygclass
+++ b/cygclass/python2.cygclass
@@ -43,6 +43,8 @@
 #  python2
 #****
 
+error "python2.cyclass: python2 was sunsetted on 1 January, 2020.  Please use python3 instead."
+
 # cross-compiling is not (yet?) supported
 __cross_compiling_error
 
diff --git a/cygclass/python3-distutils.cygclass b/cygclass/python3-distutils.cygclass
index 114f5757..b74390fc 100644
--- a/cygclass/python3-distutils.cygclass
+++ b/cygclass/python3-distutils.cygclass
@@ -21,6 +21,8 @@
 #
 ################################################################################
 
+warning "python3-distutils.cygclass: python distutils is deprecated. Please migrate to the python-wheel cygclass."
+
 #****h* Cygclasses/python3-distutils.cygclass
 #  DESCRIPTION
 #  Distutils is the most common method for building and installing Python
diff --git a/cygclass/python3-wheel.cygclass b/cygclass/python3-wheel.cygclass
index e20e777c..72c3f169 100644
--- a/cygclass/python3-wheel.cygclass
+++ b/cygclass/python3-wheel.cygclass
@@ -43,6 +43,7 @@
 #    DESCRIPTION="git-review is a tool that helps submitting git branches to
 #    Gerrit for review."
 #    HOMEPAGE="https://opendev.org/opendev/git-review"
+#    LICENSE="Apache-2.0"
 #    SRC_URI="https://tarballs.opendev.org/openstack/git-review/${NAME}-${VERSION}.tar.gz"
 #    
 #    ARCH=noarch
diff --git a/data/cygport.conf b/data/cygport.conf
index 478b1a33..34ccd291 100644
--- a/data/cygport.conf
+++ b/data/cygport.conf
@@ -12,10 +12,18 @@
 
 #****** Configuration/cygport.conf
 #  DESCRIPTION
-#  The cygport.conf file can be used by users to customize certain aspects
-#  of cygport's behaviour.  Users who wish to customize their settings should
-#  copy the default /etc/cygport.conf file to $HOME/.cygport.conf and edit the
-#  latter.
+#  The cygport.conf file can be used by users to customize certain aspects of
+#  cygport's behaviour.  Users who wish to customize their settings should copy
+#  the respective settings from /etc/cygport.conf file to $HOME/.cygport.conf
+#  and edit the latter.
+#
+#  Settings in /etc/cygport.conf are read first and can be changed via
+#  user-defined settings in $HOME/.config/cygport.conf,
+#  $HOME/.cygport/cygport.conf, $HOME/.cygport.conf, $HOME/.cygportrc in that
+#  order.  The last one is for backwards compatibility with older versions of
+#  cygport, usually just one of these user-defined configuration files should
+#  exist.
+
 #****
 
 #****v* Configuration/DISTDIR
diff --git a/lib/pkg_info.cygpart b/lib/pkg_info.cygpart
index c399cc5f..b9022d73 100644
--- a/lib/pkg_info.cygpart
+++ b/lib/pkg_info.cygpart
@@ -137,9 +137,9 @@ __list_deps() {
 	export PATH+="${D}$(__host_prefix)/bin:${os_path}";
 
 	# only on Cygwin: assure Windows\System32 is present for w32api DLLs
-	if check_prog cygpath
+	if check_prog /bin/cygpath
 	then
-		PATH+=":$(cygpath -S)"
+		PATH+=":$(/bin/cygpath -S)"
 	fi
 
 	if (cross_compiling || [ "${CHOST}" != "${CTARGET}" ]) && ! __target_is_embedded && check_target_tool gcc
diff --git a/lib/pkg_pkg.cygpart b/lib/pkg_pkg.cygpart
index 6f02f7e9..65dd145d 100644
--- a/lib/pkg_pkg.cygpart
+++ b/lib/pkg_pkg.cygpart
@@ -32,6 +32,42 @@
 #  section.
 #****
 
+#****v* Packaging/TAR_COMPRESSION_EXT
+#  SYNOPSIS
+#  TAR_COMPRESSION_EXT="zstd"
+#  DESCRIPTION
+#  The compression to be used for package tar archives, default xz.
+#  DEFINITION
+TAR_COMPRESSION_EXT="${TAR_COMPRESSION_EXT:-xz}"
+#****
+
+__tar() {
+	local TAR_COMPRESSION_OPT;
+
+	# We could use --auto-compress, but this also constrains the extension
+	# to the currently valid set. We could probe if tar supports the
+	# compression and/or use an external compressor.
+	case ${TAR_COMPRESSION_EXT} in
+		bz2)
+			TAR_COMPRESSION_OPT="-j"
+			;;
+		gz)
+			TAR_COMPRESSION_OPT="-z"
+			warning "gzip compression for packages is considered obsolete"
+			;;
+		xz)
+			TAR_COMPRESSION_OPT="-J"
+			;;
+		zst)
+			TAR_COMPRESSION_OPT="--zstd"
+			;;
+		*)
+			error "tar option for TAR_COMPRESSION_EXT='${TAR_COMPRESSION_EXT}' unknown"
+			;;
+	esac
+	tar ${TAR_COMPRESSION_OPT} --owner=Guest:501 --group=None:513 -cvf "$@"
+}
+
 __pkg_binpkg() {
 	local -i n=0;
 	local pkg_contents;
@@ -62,9 +98,11 @@ __pkg_binpkg() {
 #  PKG_NAMES="foo libfoo1 libfoo-devel libfoo-doc"
 #  PKG_HINTS="setup runtime devel doc"
 #  DESCRIPTION
-#  A list of unsuffixed .hint files which should be used for each given
+#  A list of unsuffixed .hint files in $C, which should be used for each given
 #  binary package in PKG_NAMES.
 #  NOTES
+#  * This variable is obsolete, and allowing cygport to automatically generate
+#    hints should be used in new packages.
 #  * If PN is not included in PKG_NAMES, a file named $PN.hint or setup.hint
 #    is still required for the source package, but should not be listed in
 #    PKG_HINTS.
@@ -95,8 +133,7 @@ __pkg_binpkg() {
 #    form of an array.  This form should be considered deprecated in favour
 #    of explicitly-named variables as described above.
 #  * If the contents of a package are too many or complicated to easily
-#    describe in this form, a PN.list file can be used instead and placed
-#    in C before the packaging stage.
+#    describe in this form, a PKG.list file in $C can be used instead.
 #****
 
 	pkg_list=(${PKG_LISTS:-${PKG_NAMES}});
@@ -136,7 +173,7 @@ __pkg_binpkg() {
 		*-[0-9]*) error "Package ${pkg_name[${n}]}: Use underscore instead of hyphen when followed by digit" ;;
 		esac
 
-		__step "${pkg_name[${n}]}-${PVR}.tar.xz";
+		__step "${pkg_name[${n}]}-${PVR}.tar.${TAR_COMPRESSION_EXT}";
 
 		pkg_contents_var=${pkg_name[${n}]//[-+\.]/_}_CONTENTS;
 		pkg_docs_var=${pkg_name[${n}]//[-+\.]/_}_DOCS;
@@ -170,7 +207,7 @@ __pkg_binpkg() {
 		if defined pkg_contents
 		then
 			mkdir -p ${distdir}/${PN}/${distsubdir};
-			tar Jcvf ${distdir}/${PN}/${distsubdir}/${pkg_name[${n}]}-${PVR}.tar.xz \
+			__tar ${distdir}/${PN}/${distsubdir}/${pkg_name[${n}]}-${PVR}.tar.${TAR_COMPRESSION_EXT} \
 				--exclude=usr/lib/debug --exclude=usr/src \
 				--exclude=${autoloaddir} \
 				${pkg_contents} \
@@ -179,7 +216,8 @@ __pkg_binpkg() {
 		else
 			inform "Creating empty package"
 			mkdir -p ${distdir}/${PN}/${distsubdir};
-			tar -Jcf ${distdir}/${PN}/${distsubdir}/${pkg_name[${n}]}-${PVR}.tar.xz --files-from /dev/null \
+			__tar ${distdir}/${PN}/${distsubdir}/${pkg_name[${n}]}-${PVR}.tar.${TAR_COMPRESSION_EXT} \
+				--files-from /dev/null \
 				|| error "Empty package creation failed"
 			> ${T}/.${pkg_name[${n}]}.lst
 		fi
@@ -192,9 +230,9 @@ __pkg_binpkg() {
 		[ -d ${autoloaddir} ] || autoloaddir=
 		local dbg_contents_var=${PN//[-+\.]/_}_debuginfo_CONTENTS;
 
-		__step "${PN}-debuginfo-${PVR}.tar.xz";
+		__step "${PN}-debuginfo-${PVR}.tar.${TAR_COMPRESSION_EXT}";
 		mkdir -p ${distdir}/${PN}/${PN}-debuginfo;
-		tar Jcvf ${distdir}/${PN}/${PN}-debuginfo/${PN}-debuginfo-${PVR}.tar.xz \
+		__tar ${distdir}/${PN}/${PN}-debuginfo/${PN}-debuginfo-${PVR}.tar.${TAR_COMPRESSION_EXT} \
 			usr/*/debug/ ${autoloaddir} ${!dbg_contents_var} \
 			| tee ${T}/.${PN}-debuginfo.lst \
 			|| error "Debuginfo package creation failed: ${PN}-debuginfo"
@@ -223,7 +261,7 @@ __pkg_pkgcheck() {
 		n+=1
 	done
 
-	if ! defined _CYGPORT_RESTRICT_debuginfo_ && [ -f ${distdir}/${PN}/${PN}-debuginfo/${PN}-debuginfo-${PVR}.tar.xz ]
+	if ! defined _CYGPORT_RESTRICT_debuginfo_ && [ -f ${distdir}/${PN}/${PN}-debuginfo/${PN}-debuginfo-${PVR}.tar.${TAR_COMPRESSION_EXT} ]
 	then
 		grep -Ev "/$" ${T}/.${PN}-debuginfo.lst >> ${tmp1}
 	fi
@@ -280,6 +318,7 @@ __pkg_diff() {
 	local diff_excludes_x;
 	local difflevel;
 	local exclude;
+	local optional_patchfiles;
 
 	default_excludes="CYGWIN-PATCHES aclocal.m4~ aclocal.m4t autom4te.cache
 		config.cache config.guess config.log config.status config.sub
@@ -423,20 +462,30 @@ __pkg_diff() {
 			;;
 	esac
 
-	# diff exits >0 when targets differ, hence catch exception with true
 	if [ "${SRC_DIR}" = "." ]
 	then
-		diff -urN -x '*~' \
-			${origsrcdir##*/}/CYGWIN-PATCHES ${srcdir##*/}/CYGWIN-PATCHES \
-			> ${patchdir}/${cygwin_patchfile} || true;
 		difflevel=1;
 	else
-		diff -urN -x '*~' \
-			${origsrcdir##*/}/${SRC_DIR}/CYGWIN-PATCHES ${srcdir##*/}/${SRC_DIR}/CYGWIN-PATCHES \
-			> ${patchdir}/${cygwin_patchfile} || true;
+
 		difflevel=2;
 	fi
 
+	if [ -z "${CYGWIN_FILES}" ]
+	then
+		# diff exits >0 when targets differ, hence catch exception with true
+		if [ "${SRC_DIR}" = "." ]
+		then
+			diff -urN -x '*~' \
+				${origsrcdir##*/}/CYGWIN-PATCHES ${srcdir##*/}/CYGWIN-PATCHES \
+				> ${patchdir}/${cygwin_patchfile} || true;
+		else
+			diff -urN -x '*~' \
+				${origsrcdir##*/}/${SRC_DIR}/CYGWIN-PATCHES ${srcdir##*/}/${SRC_DIR}/CYGWIN-PATCHES \
+				> ${patchdir}/${cygwin_patchfile} || true;
+		fi
+		optional_patchfiles=${patchdir}/${cygwin_patchfile}
+	fi
+
 	if defined _CYGPORT_RESTRICT_diff_
 	then
 		rm -f ${patchdir}/${src_patchfile};
@@ -447,9 +496,9 @@ __pkg_diff() {
 			> ${patchdir}/${src_patchfile} || true;
 	fi
 
-	sed -b -e '/^diff -u/d' -i ${patchdir}/${cygwin_patchfile} ${patchdir}/${src_patchfile};
+	sed -b -e '/^diff -u/d' -i ${optional_patchfiles} ${patchdir}/${src_patchfile};
 
-	diffstat -p${difflevel} ${patchdir}/${cygwin_patchfile} ${patchdir}/${src_patchfile};
+	diffstat -p${difflevel} ${optional_patchfiles} ${patchdir}/${src_patchfile};
 }
 
 __gpg_sign() {
@@ -464,6 +513,7 @@ __squeeze_whitespace() {
 }
 
 __pkg_srcpkg() {
+	local cygwin_file;
 	local src;
 	local pkg_tag=${1};
 
@@ -480,17 +530,22 @@ __pkg_srcpkg() {
 
 	if [ -s ${patchdir}/${cygwin_patchfile} ]
 	then
-		cp ${patchdir}/${cygwin_patchfile} ${spkgdir};
+		cp --preserve=timestamps ${patchdir}/${cygwin_patchfile} ${spkgdir};
 	fi
 
 	if [ -s ${patchdir}/${src_patchfile} ]
 	then
-		cp ${patchdir}/${src_patchfile} ${spkgdir};
+		cp --preserve=timestamps ${patchdir}/${src_patchfile} ${spkgdir};
 	fi
 
 	__step "Creating source package";
 
-	cp ${top}/${cygportfile} ${spkgdir};
+	for cygwin_file in ${CYGWIN_FILES}
+	do
+		cp --preserve=timestamps ${C}/${cygwin_file} ${spkgdir}
+	done
+
+	cp --preserve=timestamps ${top}/${cygportfile} ${spkgdir};
 
 	for src in ${_src_orig_pkgs} ${_src_orig_patches}
 	do
@@ -503,7 +558,7 @@ __pkg_srcpkg() {
 		else
 			src=${top}/${src};
 		fi
-		cp ${src} ${spkgdir};
+		cp --preserve=timestamps ${src} ${spkgdir};
 	done
 
 	if __arg_bool SIG
@@ -517,6 +572,12 @@ __pkg_srcpkg() {
 				__gpg_sign ${spkgdir}/${cygwin_patchfile} "CYGWIN PATCH";
 			fi
 
+			if [ -n "${CYGWIN_FILES}" && check_prog sha512sum ]
+			then
+				(cd ${spkgdir} ; sha512sum ${CYGWIN_FILES} >${spkgdir}/sha512.sum)
+				__gpg_sign ${spkgdir}/sha512.sum "CYGWIN FILES MANIFEST";
+			fi
+
 			if [ -f ${spkgdir}/${src_patchfile} ]
 			then
 				__gpg_sign ${spkgdir}/${src_patchfile} "SOURCE PATCH";
@@ -529,7 +590,7 @@ __pkg_srcpkg() {
 	cd ${spkgdir%/*};
 
 	mkdir -p ${distdir}/${PN};
-	tar Jcvf ${distdir}/${PN}/${PF}-src.tar.xz ${spkgdir##*/}/ || error "Source package creation failed"
+	__tar ${distdir}/${PN}/${PF}-src.tar.${TAR_COMPRESSION_EXT} ${spkgdir##*/}/ || error "Source package creation failed"
 	echo;
 
 	# source package hint
@@ -698,9 +759,9 @@ __pkg_dist() {
 #****
 #****v* Packaging/OBSOLETES
 #  DESCRIPTION
-#  A single-line string containing a list of package(s) which this
-#  package replaces.  An empty package will be created for each listed
-#  obsoletion which will cause this package to be installed in its place.
+#  A single-line string containing a list of package(s) which this package
+#  replaces.  This package's metadata will include the listed obsoletions, which
+#  will cause this package to be installed in their place.
 #  NOTE
 #  If there is more than one package in PKG_NAMES, this variable will be
 #  ignored; you must use PKG_OBSOLETES instead.
@@ -709,9 +770,9 @@ __pkg_dist() {
 #****
 #****v* Packaging/PKG_OBSOLETES
 #  DESCRIPTION
-#  A single-line string containing a list of package(s) which this
-#  package replaces.  An empty package will be created for each listed
-#  obsoletion which will cause PKG to be installed in its place.
+#  A single-line string containing a list of package(s) which PKG replaces.
+#  PKG's metadata will include the listed obsoletions, which will cause PKG to
+#  be installed in their place.
 #
 #  Note that the PKG_OBSOLETES name is descriptive rather than literal,
 #  where "PKG" should be substituted with the name of the binary package
@@ -719,6 +780,12 @@ __pkg_dist() {
 #  cannot be used in a shell variable name (namely '+', '-', and '.'),
 #  that character must be substituted with an underscore ('_'), e.g.
 #  libfoo-devel will use libfoo_devel_OBSOLETES.
+#
+#  NOTES
+#  * Additionally, if a debuginfo package is automatically generated, you may
+#  specify a PN_debuginfo_OBSOLETES value, even though PN_debuginfo is not
+#  explicitly listed in PKG_NAMES.
+#
 #****
 #****v* Packaging/PROVIDES
 #  DESCRIPTION
@@ -872,7 +939,7 @@ _EOF
 		n+=1;
 	done
 
-	if ! defined _CYGPORT_RESTRICT_debuginfo_ && [ -f ${distdir}/${PN}/${PN}-debuginfo/${PN}-debuginfo-${PVR}.tar.xz ]
+	if ! defined _CYGPORT_RESTRICT_debuginfo_ && [ -f ${distdir}/${PN}/${PN}-debuginfo/${PN}-debuginfo-${PVR}.tar.${TAR_COMPRESSION_EXT} ]
 	then
 		if [ -f ${C}/${PN}-debuginfo.hint ]
 		then
@@ -905,4 +972,5 @@ _EOF
 }
 
 # protect functions
-readonly -f __pkg_binpkg __pkg_diff __gpg_sign __pkg_srcpkg __pkg_dist
+readonly -f __pkg_binpkg __pkg_diff __gpg_sign __pkg_srcpkg __pkg_dist \
+	 __squeeze_whitespace __tar
diff --git a/lib/pkg_upload.cygpart b/lib/pkg_upload.cygpart
index f4c22ce5..dcae8e2c 100644
--- a/lib/pkg_upload.cygpart
+++ b/lib/pkg_upload.cygpart
@@ -26,13 +26,13 @@
 #  to users you'll need to upload them to the Cygwin package archive.  Before
 #  you can upload packages, you'll need to do the following things:
 #  * Request upload privileges, and provide your ssh public key.  The
-#    |html <a href="https://sourceware.org/cygwin-apps/package-upload.html">Uploading Packages</a>
+#    |html <a href="https://cygwin.com/package-upload.html">Uploading Packages</a>
 #    page tells how to do that, and how to be notified in case of problems with
 #    your uploads.
 #  * After your key is approved, connect once to cygwin.com by
 #    |html <tt>sftp cygwin@cygwin.com</tt>.
 #    Verify that the host key fingerprint for cygwin.com matches one of the ones posted on the
-#    |html <a href="https://sourceware.org/cygwin-apps/package-upload.html">Uploading Packages</a>
+#    |html <a href="https://cygwin.com/packaging/key.html">Providing an SSH key</a>
 #    page. If it does, answer "yes" to continue connecting.  Then exit sftp.
 #    This will store the host key fingerprint in your ~/.known_hosts file.
 #    You have to do this once before uploading, or the upload will fail.
@@ -81,7 +81,7 @@ __pkg_upload() {
 
 	# Check that binary and source package files exist
 
-	pkg_files=("${NAME}/${NAME}-${PVR}-src.tar.xz" "${NAME}/${NAME}-${PVR}-src.hint")
+	pkg_files=("${NAME}/${NAME}-${PVR}-src.tar.${TAR_COMPRESSION_EXT}" "${NAME}/${NAME}-${PVR}-src.hint")
 
 	while (( n < pkg_count ))
 	do
@@ -90,13 +90,13 @@ __pkg_upload() {
 		*)      distsubdir=${pkg_name[${n}]} ;;
 		esac
 
-		pkg_files+=("${NAME}/${distsubdir}/${pkg_name[${n}]}-${PVR}.tar.xz" "${NAME}/${distsubdir}/${pkg_name[${n}]}-${PVR}.hint")
+		pkg_files+=("${NAME}/${distsubdir}/${pkg_name[${n}]}-${PVR}.tar.${TAR_COMPRESSION_EXT}" "${NAME}/${distsubdir}/${pkg_name[${n}]}-${PVR}.hint")
 		n+=1
 	done
 
 	if [ -d ${NAME}/${NAME}-debuginfo ]
 	then
-		pkg_files+=("${NAME}/${NAME}-debuginfo/${NAME}-debuginfo-${PVR}.tar.xz" "${NAME}/${NAME}-debuginfo/${NAME}-debuginfo-${PVR}.hint")
+		pkg_files+=("${NAME}/${NAME}-debuginfo/${NAME}-debuginfo-${PVR}.tar.${TAR_COMPRESSION_EXT}" "${NAME}/${NAME}-debuginfo/${NAME}-debuginfo-${PVR}.hint")
 	fi
 
 	for file in "${pkg_files[@]}"
diff --git a/lib/src_fetch.cygpart b/lib/src_fetch.cygpart
index 67e7bafe..930f5f65 100644
--- a/lib/src_fetch.cygpart
+++ b/lib/src_fetch.cygpart
@@ -64,9 +64,9 @@
 #
 #  NOTE
 #
-#  For historical reasons, patches with basenames of ${PVR}.{cygwin,src}.patch
+#  For historical reasons, patches with basenames of ${PF}.{cygwin,src}.patch
 #  should not be listed in PATCH_URI, as they are treated specially and are
-#  automatically applied, if present.
+#  automatically applied, if present, and generated, if required.
 #
 #  NOTE
 #
@@ -98,7 +98,7 @@ fetch() {
 		fi
 	elif check_prog curl
 	then
-		if curl -k --url ${uri} -o ${urifile}.tmp
+		if curl -R -k --url ${uri} -o ${urifile}.tmp
 		then
 			mv -f ${urifile}.tmp ${urifile}
 		else
diff --git a/lib/src_postinst.cygpart b/lib/src_postinst.cygpart
index b0361b1b..d5de9c3d 100644
--- a/lib/src_postinst.cygpart
+++ b/lib/src_postinst.cygpart
@@ -420,6 +420,11 @@ _EOF
 #  DESCRIPTION
 #  Standard documentation files in $S will be automatically installed into
 #  $D/usr/share/doc/PN.  Empty files will be skipped.
+#
+#  Any README in $C will be automatically installed into /usr/share/doc/Cygwin/
+#  as $PN.README. Any PKG.README will be automatically installed into
+#  /usr/share/doc/Cygwin/ (where PKG is the name of a binary package).
+#
 #  SEE ALSO
 #  RESTRICT
 #****
@@ -561,6 +566,21 @@ __prepetc() {
 	local -i n;
 	local s;
 
+#****P* Postinstall/Post-install and Pre-remove Scripts
+#  DESCRIPTION
+#  Any postinstall.sh or $PN.postinstall in $C will be automatically appended to
+#  /etc/postinstall/$PN.sh. Any PKG.postinstall in $C will be automatically
+#  appended to /etc/postinstall/$PKG.sh (where PKG is the name of a binary
+#  package).
+#
+#  Likewise, any preremove.sh or $PN.preremove in $C will be automatically
+#  appended to /etc/preremove/$PN.sh. Any PKG.preremove in $C will be
+#  automatically appended to /etc/preremove/$PKG.sh
+#
+#  As they are appended, these scripts should be written as stubs, without the
+#  sh-bang header.
+#****
+
 	for s in postinstall preremove
 	do
 		if [ -f ${C}/${s}.sh -a -f ${C}/${PN}.${s} ]
@@ -589,6 +609,12 @@ __prepetc() {
 		done
 	done
 
+#****P* Postinstall/Shell Profile Files
+#  DESCRIPTION
+#  Any profile.d.{sh,csh,fish} in $C will be automatically installed into
+#  /etc/profile.d/ as ${PN}.{sh,csh,fish}
+#****
+
 	if [ -f ${C}/profile.d.sh ]
 	then
 		exeinto /etc/profile.d;
diff --git a/lib/src_prep.cygpart b/lib/src_prep.cygpart
index ca487666..da174dd8 100644
--- a/lib/src_prep.cygpart
+++ b/lib/src_prep.cygpart
@@ -1,4 +1,3 @@
-
 ################################################################################
 #
 # src_prep.cygpart - cygport source unpacking and preparation functions
@@ -286,6 +285,7 @@ cygpatch() {
 }
 
 __src_prep() {
+	local cygwin_file;
 	local sigext;
 	local sig_exts="asc sig sign";
 	local src_orig_patch;
@@ -464,6 +464,41 @@ __src_prep() {
 	mkdir -p ${C};
 	ln -sfn ${C} ${workdir}/CYGWIN-PATCHES;
 
+#****v* Preparation/CYGWIN_FILES
+#  DESCRIPTION
+#  A list of files which are to be included in the source package, and installed
+#  into ${C}.
+#  NOTE
+#  Historically, files in $C were created by a patch file named
+#  ${PF}.cygwin.patch, which is automatically applied and generated.  This
+#  variable should not be set if that file is present.
+#
+#  In the absence of a ${PF}.cygwin.patch file, the default value is 'README' if
+#  a file of that name exists, otherwise empty.
+#
+#****
+
+	if [ ! -e ${top}/${cygwin_patchfile} ]
+	then
+		if [ -f ${top}/README ]
+		then
+			CYGWIN_FILES="${CYGWIN_FILES:-README}"
+		fi
+	fi
+
+	if [ -n "${CYGWIN_FILES}" ]
+	then
+		if [ -f ${top}/${cygwin_patchfile} ]
+		then
+			error "Use only the CYGWIN_FILES variable or a ${cygwin_patchfile} patchfile, not both"
+		fi
+
+		for cygwin_file in ${CYGWIN_FILES}
+		do
+			 cp -a ${top}/${cygwin_file} ${C}/
+		done
+	fi
+
 	cd ${S};
 
 	if [ -f ${top}/${cygwin_patchfile} ]
diff --git a/lib/syntax.cygpart b/lib/syntax.cygpart
index 4a400a71..84970007 100644
--- a/lib/syntax.cygpart
+++ b/lib/syntax.cygpart
@@ -360,9 +360,14 @@ __target_is_embedded() {
 #****
 #****d* Globals/C
 #  DESCRIPTION
-#  The CYGWIN-PATCHES directory where Cygwin READMEs, setup.hint files,
-#  custom postinstall scripts, and other Cygwin-specific files are placed
-#  before packaging.
+#  The directory where Cygwin READMEs, custom post-install scripts, shell
+#  profile scripts, PKG.list files, and other Cygwin-specific files are placed.
+#  NOTE
+#  Providing setup.hint or PKG.hint files in this directory (rather than
+#  allowing .hint files to be automatically generated) is an obsolete feature
+#  and should not be used in new packages.
+#
+#  For historical reasons, this directory is named 'CYGWIN-PATCHES'.
 #****
 #****d* Globals/D
 #  DESCRIPTION
diff --git a/testsuite/R/cran/vars b/testsuite/R/cran/vars
new file mode 100644
index 00000000..4e204326
--- /dev/null
+++ b/testsuite/R/cran/vars
@@ -0,0 +1,3 @@
+declare -r ARCHES="all"
+declare -- CROSS_HOST=""
+declare -- INHERITED="R autotools "
diff --git a/testsuite/aspell/dict/vars b/testsuite/aspell/dict/vars
new file mode 100644
index 00000000..11ed4d9a
--- /dev/null
+++ b/testsuite/aspell/dict/vars
@@ -0,0 +1,3 @@
+declare -r ARCHES="all"
+declare -- CROSS_HOST=""
+declare -- INHERITED="aspell-dict autotools "
diff --git a/testsuite/autotools/c/vars b/testsuite/autotools/c/vars
new file mode 100644
index 00000000..075532a6
--- /dev/null
+++ b/testsuite/autotools/c/vars
@@ -0,0 +1,3 @@
+declare -r ARCHES="all"
+declare -- CROSS_HOST=""
+declare -- INHERITED="autotools "
diff --git a/testsuite/autotools/gnome/vars b/testsuite/autotools/gnome/vars
new file mode 100644
index 00000000..ef6feea6
--- /dev/null
+++ b/testsuite/autotools/gnome/vars
@@ -0,0 +1,3 @@
+declare -r ARCHES="all"
+declare -- CROSS_HOST=""
+declare -- INHERITED="gnome.org gnome2 autotools "
diff --git a/testsuite/autotools/gtkmm/vars b/testsuite/autotools/gtkmm/vars
new file mode 100644
index 00000000..4a3301e6
--- /dev/null
+++ b/testsuite/autotools/gtkmm/vars
@@ -0,0 +1,3 @@
+declare -r ARCHES="all"
+declare -- CROSS_HOST=""
+declare -- INHERITED="gnome.org gtkmm autotools "
diff --git a/testsuite/autotools/kde3/vars b/testsuite/autotools/kde3/vars
new file mode 100644
index 00000000..01f22c0d
--- /dev/null
+++ b/testsuite/autotools/kde3/vars
@@ -0,0 +1,3 @@
+declare -r ARCHES="all"
+declare -- CROSS_HOST=""
+declare -- INHERITED="kde.org qt3 kde3 autotools "
diff --git a/testsuite/autotools/mate/hints/mate-menus-1.18.0-1.x86_64/dist/mate-menus/python2-matemenu/python2-matemenu-1.18.0-1.hint b/testsuite/autotools/mate/hints/mate-menus-1.18.0-1.x86_64/dist/mate-menus/python2-matemenu/python2-matemenu-1.18.0-1.hint
deleted file mode 100644
index b14d4a5b..00000000
--- a/testsuite/autotools/mate/hints/mate-menus-1.18.0-1.x86_64/dist/mate-menus/python2-matemenu/python2-matemenu-1.18.0-1.hint
+++ /dev/null
@@ -1,8 +0,0 @@
-category: Python
-requires: cygwin libglib2.0_0 libmate-menu2 python27
-sdesc: "MATE Desktop Menu Specification library (Python bindings)"
-ldesc: "MATE is a fork of the GNOME 2 desktop. It provides an intuitive
-and attractive desktop to Linux users using traditional metaphors."
-obsoletes: python-matemenu
-external-source: mate-menus
-
diff --git a/testsuite/autotools/mate/mate-menus.cygport b/testsuite/autotools/mate/mate-menus.cygport
index 75e03052..d2ea302e 100644
--- a/testsuite/autotools/mate/mate-menus.cygport
+++ b/testsuite/autotools/mate/mate-menus.cygport
@@ -1,4 +1,4 @@
-inherit mate python2
+inherit mate
 
 NAME="mate-menus"
 VERSION=1.18.0
@@ -9,9 +9,9 @@ DESCRIPTION="MATE is a fork of the GNOME 2 desktop. It provides an intuitive
 and attractive desktop to Linux users using traditional metaphors."
 
 PATCH_URI="1.2.0-no-undefined.patch"
-export PYTHON="python2"
+CYGCONF_ARGS="--disable-python"
 
-PKG_NAMES="${NAME} libmate-menu2 libmate-menu-devel girepository-MateMenu2.0 python2-matemenu"
+PKG_NAMES="${NAME} libmate-menu2 libmate-menu-devel girepository-MateMenu2.0"
 mate_menus_CATEGORY="MATE"
 mate_menus_CONTENTS="etc/ usr/share/doc/ usr/share/locale/ usr/share/mate/"
 libmate_menu2_SUMMARY="MATE Desktop Menu Specification library (runtime)"
@@ -21,7 +21,3 @@ libmate_menu_devel_SUMMARY="MATE Desktop Menu Specification library (development
 libmate_menu_devel_CONTENTS="usr/include/ usr/lib/lib* usr/lib/pkgconfig/"
 girepository_MateMenu2_0_SUMMARY="MATE Desktop Menu Specification library (GObject Introspection)"
 girepository_MateMenu2_0_CONTENTS="usr/*/gir*/MateMenu-2.0.*"
-python2_matemenu_CATEGORY="Python"
-python2_matemenu_SUMMARY="MATE Desktop Menu Specification library (Python bindings)"
-python2_matemenu_OBSOLETES="python-matemenu"
-python2_matemenu_CONTENTS="${PYTHON2_SITELIB#/}/matemenu.dll usr/share/mate-menus/examples/"
diff --git a/testsuite/autotools/mate/mate-menus.list b/testsuite/autotools/mate/mate-menus.list
index d9ffb350..3fe35899 100644
--- a/testsuite/autotools/mate/mate-menus.list
+++ b/testsuite/autotools/mate/mate-menus.list
@@ -6,7 +6,6 @@
 /usr/lib/girepository-1.0/MateMenu-2.0.typelib
 /usr/lib/libmate-menu.dll.a
 /usr/lib/pkgconfig/libmate-menu.pc
-/usr/lib/python2.7/site-packages/matemenu.dll
 /usr/share/doc/mate-menus/AUTHORS
 /usr/share/doc/mate-menus/COPYING
 /usr/share/doc/mate-menus/COPYING.LIB
@@ -121,7 +120,6 @@
 /usr/share/locale/zh_CN/LC_MESSAGES/mate-menus.mo
 /usr/share/locale/zh_HK/LC_MESSAGES/mate-menus.mo
 /usr/share/locale/zh_TW/LC_MESSAGES/mate-menus.mo
-/usr/share/mate-menus/examples/mate-menus-ls.py
 /usr/share/mate/desktop-directories/mate-audio-video.directory
 /usr/share/mate/desktop-directories/mate-development.directory
 /usr/share/mate/desktop-directories/mate-education.directory
diff --git a/testsuite/autotools/mate/vars b/testsuite/autotools/mate/vars
new file mode 100644
index 00000000..b5f82994
--- /dev/null
+++ b/testsuite/autotools/mate/vars
@@ -0,0 +1,3 @@
+declare -r ARCHES="all"
+declare -- CROSS_HOST=""
+declare -- INHERITED="mate autotools "
diff --git a/testsuite/autotools/meson.build b/testsuite/autotools/meson.build
index 1b20ff42..629fd399 100644
--- a/testsuite/autotools/meson.build
+++ b/testsuite/autotools/meson.build
@@ -24,7 +24,7 @@ endif
 if kde3.found() and libexif.found()
 tests += [['autotools/kde3', 720]]
 endif
-if mate_common.found() and gi.found() and python2.found()
+if mate_common.found() and gi.found() and python3.found()
 tests += [['autotools/mate', 720]]
 endif
 if xdt.found() and xfce4_panel.found()
diff --git a/testsuite/autotools/xfce/vars b/testsuite/autotools/xfce/vars
new file mode 100644
index 00000000..d2e51eaf
--- /dev/null
+++ b/testsuite/autotools/xfce/vars
@@ -0,0 +1,3 @@
+declare -r ARCHES="all"
+declare -- CROSS_HOST=""
+declare -- INHERITED="xfce4 autotools "
diff --git a/testsuite/basic/info/vars b/testsuite/basic/info/vars
new file mode 100644
index 00000000..075532a6
--- /dev/null
+++ b/testsuite/basic/info/vars
@@ -0,0 +1,3 @@
+declare -r ARCHES="all"
+declare -- CROSS_HOST=""
+declare -- INHERITED="autotools "
diff --git a/testsuite/cmake/c/vars b/testsuite/cmake/c/vars
new file mode 100644
index 00000000..c2de1531
--- /dev/null
+++ b/testsuite/cmake/c/vars
@@ -0,0 +1,3 @@
+declare -r ARCHES="all"
+declare -- CROSS_HOST=""
+declare -- INHERITED="ninja cmake autotools "
diff --git a/testsuite/cmake/kde4/vars b/testsuite/cmake/kde4/vars
new file mode 100644
index 00000000..240455f5
--- /dev/null
+++ b/testsuite/cmake/kde4/vars
@@ -0,0 +1,3 @@
+declare -r ARCHES="all"
+declare -- CROSS_HOST=""
+declare -- INHERITED="kde.org qt4 ninja cmake kde4 autotools "
diff --git a/testsuite/cmake/kf5/vars b/testsuite/cmake/kf5/vars
new file mode 100644
index 00000000..482bef4f
--- /dev/null
+++ b/testsuite/cmake/kf5/vars
@@ -0,0 +1,3 @@
+declare -r ARCHES="all"
+declare -- CROSS_HOST=""
+declare -- INHERITED="kde.org qt5 ninja cmake kf5 autotools "
diff --git a/testsuite/cmake/qt4/vars b/testsuite/cmake/qt4/vars
new file mode 100644
index 00000000..d9d73928
--- /dev/null
+++ b/testsuite/cmake/qt4/vars
@@ -0,0 +1,3 @@
+declare -r ARCHES="all"
+declare -- CROSS_HOST=""
+declare -- INHERITED="qt4 ninja cmake qt4-cmake autotools "
diff --git a/testsuite/cmake/qt5/vars b/testsuite/cmake/qt5/vars
new file mode 100644
index 00000000..93d1e596
--- /dev/null
+++ b/testsuite/cmake/qt5/vars
@@ -0,0 +1,3 @@
+declare -r ARCHES="all"
+declare -- CROSS_HOST=""
+declare -- INHERITED="ninja cmake qt5 autotools "
diff --git a/testsuite/cross/cmake/vars b/testsuite/cross/cmake/vars
new file mode 100644
index 00000000..891c9a76
--- /dev/null
+++ b/testsuite/cross/cmake/vars
@@ -0,0 +1,3 @@
+declare -r ARCHES="noarch"
+declare -- CROSS_HOST="i686-w64-mingw32"
+declare -- INHERITED="ninja cmake cross autotools "
diff --git a/testsuite/cross/make/vars b/testsuite/cross/make/vars
new file mode 100644
index 00000000..92816415
--- /dev/null
+++ b/testsuite/cross/make/vars
@@ -0,0 +1,3 @@
+declare -r ARCHES="noarch"
+declare -- CROSS_HOST="i686-w64-mingw32"
+declare -- INHERITED="git cross autotools "
diff --git a/testsuite/cross/qt5/vars b/testsuite/cross/qt5/vars
new file mode 100644
index 00000000..a6cfae09
--- /dev/null
+++ b/testsuite/cross/qt5/vars
@@ -0,0 +1,3 @@
+declare -r ARCHES="noarch"
+declare -- CROSS_HOST="i686-w64-mingw32"
+declare -- INHERITED="qt5 qt5-qmake cross autotools "
diff --git a/testsuite/docbook/sgml/vars b/testsuite/docbook/sgml/vars
new file mode 100644
index 00000000..db0ac7a7
--- /dev/null
+++ b/testsuite/docbook/sgml/vars
@@ -0,0 +1,3 @@
+declare -r ARCHES="all"
+declare -- CROSS_HOST=""
+declare -- INHERITED="docbook autotools "
diff --git a/testsuite/docbook/xml/vars b/testsuite/docbook/xml/vars
new file mode 100644
index 00000000..db0ac7a7
--- /dev/null
+++ b/testsuite/docbook/xml/vars
@@ -0,0 +1,3 @@
+declare -r ARCHES="all"
+declare -- CROSS_HOST=""
+declare -- INHERITED="docbook autotools "
diff --git a/testsuite/download/R/vars b/testsuite/download/R/vars
new file mode 100644
index 00000000..2a36b7a5
--- /dev/null
+++ b/testsuite/download/R/vars
@@ -0,0 +1,3 @@
+declare -r ARCHES="all"
+declare -- CROSS_HOST=""
+declare -- INHERITED="test-fetch autotools "
diff --git a/testsuite/download/bzr/vars b/testsuite/download/bzr/vars
new file mode 100644
index 00000000..af73e71d
--- /dev/null
+++ b/testsuite/download/bzr/vars
@@ -0,0 +1,3 @@
+declare -r ARCHES="all"
+declare -- CROSS_HOST=""
+declare -- INHERITED="test-fetch bzr autotools "
diff --git a/testsuite/download/cvs/vars b/testsuite/download/cvs/vars
new file mode 100644
index 00000000..b034a307
--- /dev/null
+++ b/testsuite/download/cvs/vars
@@ -0,0 +1,3 @@
+declare -r ARCHES="all"
+declare -- CROSS_HOST=""
+declare -- INHERITED="test-fetch cvs autotools "
diff --git a/testsuite/download/git/vars b/testsuite/download/git/vars
new file mode 100644
index 00000000..d68a2c30
--- /dev/null
+++ b/testsuite/download/git/vars
@@ -0,0 +1,3 @@
+declare -r ARCHES="all"
+declare -- CROSS_HOST=""
+declare -- INHERITED="test-fetch git autotools "
diff --git a/testsuite/download/gnome.org/vars b/testsuite/download/gnome.org/vars
new file mode 100644
index 00000000..9fef6133
--- /dev/null
+++ b/testsuite/download/gnome.org/vars
@@ -0,0 +1,3 @@
+declare -r ARCHES="noarch"
+declare -- CROSS_HOST=""
+declare -- INHERITED="test-fetch gnome.org gnome2 autotools "
diff --git a/testsuite/download/hg/vars b/testsuite/download/hg/vars
new file mode 100644
index 00000000..8bc94eda
--- /dev/null
+++ b/testsuite/download/hg/vars
@@ -0,0 +1,3 @@
+declare -r ARCHES="all"
+declare -- CROSS_HOST=""
+declare -- INHERITED="test-fetch hg autotools "
diff --git a/testsuite/download/mate/vars b/testsuite/download/mate/vars
new file mode 100644
index 00000000..09412d86
--- /dev/null
+++ b/testsuite/download/mate/vars
@@ -0,0 +1,3 @@
+declare -r ARCHES="noarch"
+declare -- CROSS_HOST=""
+declare -- INHERITED="test-fetch mate autotools "
diff --git a/testsuite/download/mtn/vars b/testsuite/download/mtn/vars
new file mode 100644
index 00000000..efed76b4
--- /dev/null
+++ b/testsuite/download/mtn/vars
@@ -0,0 +1,3 @@
+declare -r ARCHES="noarch"
+declare -- CROSS_HOST=""
+declare -- INHERITED="test-fetch mtn autotools "
diff --git a/testsuite/download/perl/vars b/testsuite/download/perl/vars
new file mode 100644
index 00000000..2bd4250b
--- /dev/null
+++ b/testsuite/download/perl/vars
@@ -0,0 +1,3 @@
+declare -r ARCHES="noarch"
+declare -- CROSS_HOST=""
+declare -- INHERITED="test-fetch perl autotools "
diff --git a/testsuite/download/python.org/vars b/testsuite/download/python.org/vars
new file mode 100644
index 00000000..1434fe2b
--- /dev/null
+++ b/testsuite/download/python.org/vars
@@ -0,0 +1,3 @@
+declare -r ARCHES="noarch"
+declare -- CROSS_HOST=""
+declare -- INHERITED="test-fetch python.org autotools "
diff --git a/testsuite/download/svn/hints/python-clang-9.0.1-1.noarch/dist/python-clang/python27-clang/python27-clang-9.0.1-1.hint b/testsuite/download/svn/hints/python-clang-9.0.1-1.noarch/dist/python-clang/python27-clang/python27-clang-9.0.1-1.hint
deleted file mode 100644
index dd23e2c4..00000000
--- a/testsuite/download/svn/hints/python-clang-9.0.1-1.noarch/dist/python-clang/python27-clang/python27-clang-9.0.1-1.hint
+++ /dev/null
@@ -1,9 +0,0 @@
-category: Python
-requires: python27 libclang9
-sdesc: "Python bindings for Clang-C Source Indexing Library"
-ldesc: "Clang is an LLVM native C/C++/ObjC compiler, which aims to deliver
-amazingly fast compiles, extremely useful error and warning messages and to
-provide a platform for building great source level tools."
-obsoletes: python-clang python2-clang
-external-source: python-clang
-
diff --git a/testsuite/download/svn/python-clang.cygport b/testsuite/download/svn/python-clang.cygport
index aef80a03..612d94ec 100644
--- a/testsuite/download/svn/python-clang.cygport
+++ b/testsuite/download/svn/python-clang.cygport
@@ -1,7 +1,7 @@
 SVN_URI="https://github.com/llvm/llvm-project"
 SVN_BRANCH="tags/llvmorg-${PV}/clang/bindings/python"
 SVN_MODULE="python-clang"
-PYTHON_WHEEL_VERSIONS="2:default"
+PYTHON_WHEEL_VERSIONS="default"
 inherit python-wheel svn
 
 NAME="python-clang"
diff --git a/testsuite/download/svn/python-clang.list b/testsuite/download/svn/python-clang.list
index a3b49623..6aaa655d 100644
--- a/testsuite/download/svn/python-clang.list
+++ b/testsuite/download/svn/python-clang.list
@@ -1,19 +1,3 @@
-/usr/lib/python2.7/site-packages/clang-9.0.1.dist-info/INSTALLER
-/usr/lib/python2.7/site-packages/clang-9.0.1.dist-info/METADATA
-/usr/lib/python2.7/site-packages/clang-9.0.1.dist-info/RECORD
-/usr/lib/python2.7/site-packages/clang-9.0.1.dist-info/REQUESTED
-/usr/lib/python2.7/site-packages/clang-9.0.1.dist-info/WHEEL
-/usr/lib/python2.7/site-packages/clang-9.0.1.dist-info/direct_url.json
-/usr/lib/python2.7/site-packages/clang-9.0.1.dist-info/top_level.txt
-/usr/lib/python2.7/site-packages/clang/__init__.py
-/usr/lib/python2.7/site-packages/clang/__init__.pyc
-/usr/lib/python2.7/site-packages/clang/__init__.pyo
-/usr/lib/python2.7/site-packages/clang/cindex.py
-/usr/lib/python2.7/site-packages/clang/cindex.pyc
-/usr/lib/python2.7/site-packages/clang/cindex.pyo
-/usr/lib/python2.7/site-packages/clang/enumerations.py
-/usr/lib/python2.7/site-packages/clang/enumerations.pyc
-/usr/lib/python2.7/site-packages/clang/enumerations.pyo
 /usr/lib/python3.8/site-packages/clang-9.0.1.dist-info/INSTALLER
 /usr/lib/python3.8/site-packages/clang-9.0.1.dist-info/METADATA
 /usr/lib/python3.8/site-packages/clang-9.0.1.dist-info/RECORD
@@ -52,6 +36,5 @@
 /usr/lib/python3.9/site-packages/clang/__pycache__/enumerations.cpython-39.pyc
 /usr/lib/python3.9/site-packages/clang/cindex.py
 /usr/lib/python3.9/site-packages/clang/enumerations.py
-/usr/share/doc/python27-clang/README.txt
 /usr/share/doc/python38-clang/README.txt
 /usr/share/doc/python39-clang/README.txt
diff --git a/testsuite/download/svn/vars b/testsuite/download/svn/vars
new file mode 100644
index 00000000..ce08dcba
--- /dev/null
+++ b/testsuite/download/svn/vars
@@ -0,0 +1,3 @@
+declare -r ARCHES="noarch"
+declare -- CROSS_HOST=""
+declare -- INHERITED="svn python.org python-wheel autotools "
diff --git a/testsuite/download/x.org/vars b/testsuite/download/x.org/vars
new file mode 100644
index 00000000..9999628d
--- /dev/null
+++ b/testsuite/download/x.org/vars
@@ -0,0 +1,3 @@
+declare -r ARCHES="noarch"
+declare -- CROSS_HOST=""
+declare -- INHERITED="test-fetch xorg autotools "
diff --git a/testsuite/files/meson.build b/testsuite/files/meson.build
new file mode 100644
index 00000000..00d5b45d
--- /dev/null
+++ b/testsuite/files/meson.build
@@ -0,0 +1 @@
+tests += [['files/xinit', 720]]
diff --git a/testsuite/files/xinit/README b/testsuite/files/xinit/README
new file mode 100644
index 00000000..62d85292
--- /dev/null
+++ b/testsuite/files/xinit/README
@@ -0,0 +1 @@
+An example Cygwin README
diff --git a/testsuite/files/xinit/hints/xinit-1.4.2-2.x86_64/dist/xinit/xinit-1.4.2-2-src.hint b/testsuite/files/xinit/hints/xinit-1.4.2-2.x86_64/dist/xinit/xinit-1.4.2-2-src.hint
new file mode 100644
index 00000000..5f8e4909
--- /dev/null
+++ b/testsuite/files/xinit/hints/xinit-1.4.2-2.x86_64/dist/xinit/xinit-1.4.2-2-src.hint
@@ -0,0 +1,10 @@
+category: X11
+build-depends: cygport 
+sdesc: "X.Org X server launcher"
+ldesc: "This package contains programs used to start the X Window System
+server and a first client program in environments that use multiple window
+systems."
+skip:
+
+homepage: https://www.x.org/
+license: MIT
diff --git a/testsuite/files/xinit/hints/xinit-1.4.2-2.x86_64/dist/xinit/xinit-1.4.2-2.hint b/testsuite/files/xinit/hints/xinit-1.4.2-2.x86_64/dist/xinit/xinit-1.4.2-2.hint
new file mode 100644
index 00000000..d517eb25
--- /dev/null
+++ b/testsuite/files/xinit/hints/xinit-1.4.2-2.x86_64/dist/xinit/xinit-1.4.2-2.hint
@@ -0,0 +1,7 @@
+category: X11
+requires: bash coreutils cygutils adwaita-themes dbus-x11 run sed util-linux setxkbmap xauth xdg-user-dirs xmodmap xrdb xorg-server xterm xwin-xdg-menu
+sdesc: "X.Org X server launcher"
+ldesc: "This package contains programs used to start the X Window System
+server and a first client program in environments that use multiple window
+systems."
+
diff --git a/testsuite/python/pygtk/hints/python-pynotify-0.1.1-5.x86_64/dist/python-pynotify/python-pynotify-debuginfo/python-pynotify-debuginfo-0.1.1-5.hint b/testsuite/files/xinit/hints/xinit-1.4.2-2.x86_64/dist/xinit/xinit-debuginfo/xinit-debuginfo-1.4.2-2.hint
similarity index 50%
rename from testsuite/python/pygtk/hints/python-pynotify-0.1.1-5.x86_64/dist/python-pynotify/python-pynotify-debuginfo/python-pynotify-debuginfo-0.1.1-5.hint
rename to testsuite/files/xinit/hints/xinit-1.4.2-2.x86_64/dist/xinit/xinit-debuginfo/xinit-debuginfo-1.4.2-2.hint
index 2b3e358e..d6e48ffa 100644
--- a/testsuite/python/pygtk/hints/python-pynotify-0.1.1-5.x86_64/dist/python-pynotify/python-pynotify-debuginfo/python-pynotify-debuginfo-0.1.1-5.hint
+++ b/testsuite/files/xinit/hints/xinit-1.4.2-2.x86_64/dist/xinit/xinit-debuginfo/xinit-debuginfo-1.4.2-2.hint
@@ -1,7 +1,7 @@
 category: Debug
 requires: cygwin-debuginfo
-external-source: python-pynotify
-sdesc: "Debug info for python-pynotify"
+external-source: xinit
+sdesc: "Debug info for xinit"
 ldesc: "This package contains files necessary for debugging the
-python-pynotify package with gdb."
+xinit package with gdb."
 
diff --git a/testsuite/files/xinit/postinstall.sh b/testsuite/files/xinit/postinstall.sh
new file mode 100644
index 00000000..a29881f2
--- /dev/null
+++ b/testsuite/files/xinit/postinstall.sh
@@ -0,0 +1,3 @@
+case $(uname -s) in *-WOW*) wow64=" (32-bit)" ;; esac
+/usr/bin/mkdir -p "$(/usr/bin/cygpath $CYGWINFORALL -P)/Cygwin-X${wow64}"
+/usr/bin/mkshortcut $CYGWINFORALL -P -w / -i /usr/bin/xwin-xdg-menu.exe -n "Cygwin-X${wow64}/XWin Server" -a "--quote /usr/bin/bash.exe -l -c \"cd; exec /usr/bin/startxwin\"" /usr/bin/run.exe
diff --git a/testsuite/files/xinit/preremove.sh b/testsuite/files/xinit/preremove.sh
new file mode 100644
index 00000000..6dbb3b78
--- /dev/null
+++ b/testsuite/files/xinit/preremove.sh
@@ -0,0 +1,3 @@
+case $(uname -s) in *-WOW*) wow64=" (32-bit)" ;; esac
+rm -f "$(cygpath $CYGWINFORALL -P)/Cygwin-X${wow64}/XWin Server.lnk"
+rmdir --ignore-fail-on-non-empty "$(cygpath $CYGWINFORALL -P)/Cygwin-X${wow64}"
diff --git a/testsuite/files/xinit/profile.d.csh b/testsuite/files/xinit/profile.d.csh
new file mode 100644
index 00000000..f6acfe6b
--- /dev/null
+++ b/testsuite/files/xinit/profile.d.csh
@@ -0,0 +1,4 @@
+unsetenv XAPPLRESDIR
+unsetenv XCMSDB
+unsetenv XKEYSYMDB
+unsetenv XNLSPATH
diff --git a/testsuite/files/xinit/profile.d.fish b/testsuite/files/xinit/profile.d.fish
new file mode 100644
index 00000000..5d65dbf1
--- /dev/null
+++ b/testsuite/files/xinit/profile.d.fish
@@ -0,0 +1,4 @@
+set -e XAPPLRESDIR
+set -e XCMSDB
+set -e XKEYSYMDB
+set -e XNLSPATH
diff --git a/testsuite/files/xinit/profile.d.sh b/testsuite/files/xinit/profile.d.sh
new file mode 100644
index 00000000..4c677613
--- /dev/null
+++ b/testsuite/files/xinit/profile.d.sh
@@ -0,0 +1 @@
+unset XAPPLRESDIR XCMSDB XKEYSYMDB XNLSPATH
diff --git a/testsuite/files/xinit/startxdmcp.bat b/testsuite/files/xinit/startxdmcp.bat
new file mode 100644
index 00000000..54ef171d
--- /dev/null
+++ b/testsuite/files/xinit/startxdmcp.bat
@@ -0,0 +1,102 @@
+@echo off
+SET DISPLAY=127.0.0.1:0.0
+
+REM
+REM The IP address or hostname of your remote host can be specified as the
+REM first (and only) argument to this script. You may also specify the default
+REM value in the IF statement below.
+REM
+
+SET REMOTE_HOST=%1
+
+IF "%REMOTE_HOST%" == "" SET REMOTE_HOST=10.0.0.1
+
+
+REM 
+REM The path in the CYGWIN_ROOT environment variable assignment assume
+REM that Cygwin is installed in a directory called 'cygwin' in the root
+REM directory of the current drive.  You will only need to modify
+REM CYGWIN_ROOT if you have installed Cygwin in another directory.  For
+REM example, if you installed Cygwin in \foo\bar\baz\cygwin, you will need 
+REM to change \cygwin to \foo\bar\baz\cygwin.
+REM 
+REM This batch file will almost always be run from the same drive (and
+REM directory) as the drive that contains Cygwin/X, therefore you will
+REM not need to add a drive letter to CYGWIN_ROOT.  For example, you do
+REM not need to change \cygwin to c:\cygwin if you are running this
+REM batch file from the C drive.
+REM 
+
+SET CYGWIN_ROOT=\cygwin
+SET RUN=%CYGWIN_ROOT%\bin\run -p /usr/bin
+
+SET PATH=.;%CYGWIN_ROOT%\bin;%PATH%
+
+SET XAPPLRESDIR=
+SET XCMSDB=
+SET XKEYSYMDB=
+SET XNLSPATH=
+
+
+
+REM
+REM Cleanup after last run.
+REM
+
+if not exist %CYGWIN_ROOT%\tmp\.X11-unix\X0 goto CLEANUP-FINISH
+attrib -s %CYGWIN_ROOT%\tmp\.X11-unix\X0
+del %CYGWIN_ROOT%\tmp\.X11-unix\X0
+
+:CLEANUP-FINISH
+if exist %CYGWIN_ROOT%\tmp\.X11-unix rmdir %CYGWIN_ROOT%\tmp\.X11-unix
+
+
+REM
+REM Startup the X Server and attempt to connect to a remote XDM server.
+REM 
+REM The error "Fatal server error: could not open default font 'fixed'" is
+REM caused by using a DOS mode mount for the mount that the Cygwin/X
+REM fonts are accessed through.  See the Cygwin/X FAQ for more 
+REM information:
+REM http://x.cygwin.com/docs/faq/cygwin-x-faq.html#q-error-font-eof
+REM
+
+if "%OS%" == "Windows_NT" goto OS_NT
+
+REM Windows 95/98/Me
+echo startxdmcp.bat - Starting on Windows 95/98/Me
+
+goto STARTUP
+
+:OS_NT
+
+REM Windows NT/2000/XP
+echo startxdmcp.bat - Starting on Windows NT/2000/XP
+
+:STARTUP
+
+
+REM
+REM A few examples of initiating an XDMCP connection are
+REM given below.  The default is to connect to a specified host
+REM with -query.  The second example connects to the first
+REM responding host with -broadcast.  The third example shows
+REM how to connect to the font server of a remote host.
+REM 
+REM See startxwin.bat for a description of the most typical
+REM command-line parameters for XWin.exe.
+REM
+
+REM Connect to a specified machine.
+
+%RUN% XWin -query %REMOTE_HOST% -nodecoration -lesspointer
+
+
+REM Connect to the first XDM machine to respond.
+
+REM %RUN% XWin -broadcast -nodecoration -lesspointer
+
+
+REM Connect to a specified machine and a specified font server.
+
+REM %RUN% XWin -query %REMOTE_HOST% -nodecoration -lesspointer -fp tcp/%REMOTE_HOST%:7100
diff --git a/testsuite/files/xinit/startxwin b/testsuite/files/xinit/startxwin
new file mode 100644
index 00000000..35757dbd
--- /dev/null
+++ b/testsuite/files/xinit/startxwin
@@ -0,0 +1,226 @@
+#!/bin/sh
+
+#
+# This is just a sample implementation of a slightly less primitive
+# interface than xinit. It looks for user .xinitrc and .xserverrc
+# files, then system xinitrc and xserverrc files, else lets xinit choose
+# its default. The system xinitrc should probably do things like check
+# for .Xresources files and merge them in, start up a window manager,
+# and pop a clock and several xterms.
+#
+# Site administrators are STRONGLY urged to write nicer versions.
+#
+
+unset DBUS_SESSION_BUS_ADDRESS
+unset SESSION_MANAGER
+userclientrc=$HOME/.startxwinrc
+sysclientrc=/etc/X11/xinit/startxwinrc
+
+userserverrc=$HOME/.xserverrc
+sysserverrc=/etc/X11/xinit/xserverrc
+defaultclient=xterm
+defaultserver=/usr/bin/XWin
+defaultclientargs=""
+defaultserverargs=""
+defaultdisplay=":0"
+clientargs=""
+serverargs=""
+vtarg=""
+display=""
+enable_xauth=1
+
+
+# Automatically determine an unused $DISPLAY
+d=0
+while true ; do
+    [ -e "/tmp/.X$d-lock" -o -S "/tmp/.X11-unix/X$d" ] || break
+    kill -0 `cat /tmp/.X$d-lock` 2>/dev/null || break
+    d=$(($d + 1))
+done
+defaultdisplay=":$d"
+unset d
+
+whoseargs="client"
+while [ x"$1" != x ]; do
+    case "$1" in
+    # '' required to prevent cpp from treating "/*" as a C comment.
+    /''*|\./''*)
+ if [ "$whoseargs" = "client" ]; then
+     if [ x"$client" = x ] && [ x"$clientargs" = x ]; then
+  client="$1"
+     else
+  clientargs="$clientargs $1"
+     fi
+ else
+     if [ x"$server" = x ] && [ x"$serverargs" = x ]; then
+  server="$1"
+     else
+  serverargs="$serverargs $1"
+     fi
+ fi
+ ;;
+    --)
+ whoseargs="server"
+ ;;
+    *)
+ if [ "$whoseargs" = "client" ]; then
+     clientargs="$clientargs $1"
+ else
+     # display must be the FIRST server argument
+     if [ x"$serverargs" = x ] && \
+   expr "$1" : ':[0-9][0-9]*$' > /dev/null 2>&1; then
+  display="$1"
+     else
+  serverargs="$serverargs $1"
+     fi
+ fi
+ ;;
+    esac
+    shift
+done
+
+# process client arguments
+if [ x"$client" = x ]; then
+    client=$defaultclient
+
+    # For compatibility reasons, only use startxwinrc if there were no client command line arguments
+    if [ x"$clientargs" = x ]; then
+        if [ -f "$userclientrc" ] && [ ! -x "$userclientrc" ]; then
+            echo "Skipping $userclientrc; present but not executable"
+        fi
+        if [ -x "$userclientrc" ]; then
+            client=$userclientrc
+        elif [ -f "$sysclientrc" ]; then
+            client=$sysclientrc
+        fi
+    fi
+fi
+
+# if no client arguments, use defaults
+if [ x"$clientargs" = x ]; then
+    clientargs=$defaultclientargs
+fi
+
+# process server arguments
+if [ x"$server" = x ]; then
+    server=$defaultserver
+    # For compatibility reasons, only use xserverrc if there were no server command line arguments
+    if [ x"$serverargs" = x -a x"$display" = x ]; then
+ if [ -f "$userserverrc" ]; then
+     server=$userserverrc
+ elif [ -f "$sysserverrc" ]; then
+     server=$sysserverrc
+ fi
+    fi
+fi
+
+# if no server arguments, use defaults
+if [ x"$serverargs" = x ]; then
+    serverargs=$defaultserverargs
+fi
+serverargs="-multiwindow $serverargs"
+
+# if no vt is specified add vtarg (which may be empty)
+have_vtarg="no"
+for i in $serverargs; do
+    if expr match "$i" '^vt[0-9]\+$' > /dev/null; then
+        have_vtarg="yes"
+    fi
+done
+if [ "$have_vtarg" = "no" ]; then
+    serverargs="$serverargs $vtarg"
+fi
+
+# if no display, use default
+if [ x"$display" = x ]; then
+    display=$defaultdisplay
+fi
+
+if [ x"$enable_xauth" = x1 ] ; then
+    if [ x"$XAUTHORITY" = x ]; then
+        XAUTHORITY=$HOME/.Xauthority
+        export XAUTHORITY
+    fi
+
+    removelist=
+
+    # set up default Xauth info for this machine
+    case `uname` in
+    Linux*)
+        if [ -z "`hostname --version 2>&1 | grep GNU`" ]; then
+            hostname=`hostname -f`
+        else
+            hostname=`hostname`
+        fi
+        ;;
+    *)
+        hostname=`hostname`
+        ;;
+    esac
+
+    authdisplay=${display:-:0}
+
+    mcookie=`/usr/bin/mcookie`
+
+
+
+
+
+
+
+    if test x"$mcookie" = x; then
+        echo "Couldn't create cookie"
+        exit 1
+    fi
+    dummy=0
+
+    # create a file with auth information for the server. ':0' is a dummy.
+    xserverauthfile=$HOME/.serverauth.$$
+    trap "rm -f '$xserverauthfile'" HUP INT QUIT ILL TRAP KILL BUS TERM
+    touch "$xserverauthfile"
+    xauth -q -f "$xserverauthfile" << EOF
+add :$dummy . $mcookie
+EOF
+
+    xserverauthfilequoted=$(echo ${xserverauthfile} | sed "s/'/'\\\\''/g")
+    serverargs=${serverargs}" -auth '"${xserverauthfilequoted}"'"
+
+
+
+
+    # now add the same credentials to the client authority file
+    # if '$displayname' already exists do not overwrite it as another
+    # server man need it. Add them to the '$xserverauthfile' instead.
+    for displayname in $authdisplay $hostname$authdisplay; do
+        authcookie=`xauth list "$displayname" \
+        | sed -n "s/.*$displayname[[:space:]*].*[[:space:]*]//p"` 2>/dev/null;
+        if [ "z${authcookie}" = "z" ] ; then
+            xauth -q << EOF
+add $displayname . $mcookie
+EOF
+        removelist="$displayname $removelist"
+        else
+            dummy=$(($dummy+1));
+            xauth -q -f "$xserverauthfile" << EOF
+add :$dummy . $authcookie
+EOF
+        fi
+    done
+fi
+
+
+eval xinit \"$client\" $clientargs -- \"$server\" $display $serverargs
+
+
+
+retval=$?
+
+if [ x"$enable_xauth" = x1 ] ; then
+    if [ x"$removelist" != x ]; then
+        xauth remove $removelist
+    fi
+    if [ x"$xserverauthfile" != x ]; then
+        rm -f "$xserverauthfile"
+    fi
+fi
+exit $retval
diff --git a/testsuite/files/xinit/startxwin.1 b/testsuite/files/xinit/startxwin.1
new file mode 100644
index 00000000..f51ef47a
--- /dev/null
+++ b/testsuite/files/xinit/startxwin.1
@@ -0,0 +1,213 @@
+.\"
+.\" Copyright 1993, 1998  The Open Group
+.\"
+.\" Permission to use, copy, modify, distribute, and sell this software and its
+.\" documentation for any purpose is hereby granted without fee, provided that
+.\" the above copyright notice appear in all copies and that both that
+.\" copyright notice and this permission notice appear in supporting
+.\" documentation.
+.\"
+.\" The above copyright notice and this permission notice shall be included
+.\" in all copies or substantial portions of the Software.
+.\"
+.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+.\" IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR
+.\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+.\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+.\" OTHER DEALINGS IN THE SOFTWARE.
+.\"
+.\" Except as contained in this notice, the name of The Open Group shall
+.\" not be used in advertising or otherwise to promote the sale, use or
+.\" other dealings in this Software without prior written authorization
+.\" from The Open Group.
+.\"
+.\"
+.TH STARTXWIN 1 "xinit 1.3.4" "X Version 11"
+.SH NAME
+startxwin \- initialize an X multiwindow session
+.SH SYNOPSIS
+.B startxwin
+[ [
+.I client
+]
+.I options
+\&\.\|.\|. ] [
+.B \-\^\-
+[
+.I server
+] [
+.I display
+] [
+.I -listen
+]
+.I options
+\&.\|.\|. ]
+.SH DESCRIPTION
+The \fBstartxwin\fP script is a front end to
+.BR xinit (1)
+that provides a
+somewhat nicer user interface for running a single session of the X
+Window System in multiwindow mode.  It is often run with no arguments.
+.PP
+Arguments immediately following the
+.I startxwin
+command are used to start a client in the same manner as
+.BR xinit (1).
+The special argument
+.RB '--'
+marks the end of client arguments and the beginning of server options.
+By default startxwin passes
+.RB '-nolisten\ tcp'
+to the server, the special server option
+.RB '-listen'
+can be used to stop startxwin from doing this.
+It may be convenient to specify server options with startxwin to change on a
+per-session basis the
+default color depth, the server's notion of the number of dots-per-inch the
+display device presents, or take advantage of a different server layout, as
+permitted by the
+.BR XWin (1)
+server and specified in the
+.BR XWinrc (5)
+configuration.  Some examples of specifying server arguments follow; consult
+the manual page for your X server to determine which arguments are legal.
+.RS
+.PP
+startxwin -- -depth 16
+.PP
+startxwin -- -dpi 100
+.RE
+.if ''' .ig
+.PP
+To determine the client to run,
+.B startxwin
+looks for the following files, in order:
+.RS
+.PP
+.I $(HOME)/.startxwinrc
+.PP
+.I /etc/X11/xinit/startxwinrc
+.RE
+.PP
+..
+.if !'x.'x.' .ig
+.PP
+To determine the client to run,
+.B startxwin
+first looks for a file called
+.I .startxwinrc
+in the user's home directory.  If that is not found, it uses
+the file
+.I startxwinrc
+in the
+.I xinit
+library directory.
+..
+If command line client options are given, they override this
+behavior and revert to the
+.BR xinit (1)
+behavior.
+To determine the server to run,
+.B startxwin
+first looks for a file called
+.I .xserverrc
+in the user's home directory.  If that is not found, it uses
+the file
+.I xserverrc
+in the
+.I xinit
+library directory.
+If command line server options are given, they override this
+behavior and revert to the
+.BR xinit (1)
+behavior.  Users rarely need to provide a
+.I .xserverrc
+file.
+See the
+.BR xinit (1)
+manual page for more details on the arguments.
+.PP
+The system-wide
+.I startxwinrc
+and
+.I xserverrc
+files are found in the
+.I /etc/X11/xinit
+directory.
+.PP
+The
+.I .startxwinrc
+is typically a shell script which starts many clients according to the
+user's preference.  When this shell script exits,
+.B startxwin
+kills the server and performs any other session shutdown needed.
+Most of the clients started by
+.I .startxwinrc
+should be run in the background.  The last client should run in the
+foreground; when it exits, the session will exit.  People often choose
+a session manager, window manager, or \fIxterm\fP as the ''magic'' client.
+.SH EXAMPLE
+.PP
+Below is a sample \fI\.startxwinrc\fP that starts several applications and
+leaves the panel running as the ''last'' application.  Assuming that
+the window manager has been configured properly, the user
+then chooses the ''Exit'' menu item to shut down X.
+.sp
+.in +4
+.nf
+xrdb \-load $HOME/.Xresources
+xbiff \-geometry \-430+5 &
+oclock \-geometry 75x75\-0\-0 &
+xload \-geometry \-80\-0 &
+xterm \-geometry +0+60 \-ls &
+xterm \-geometry +0\-100 &
+xconsole \-geometry \-0+0 \-fn 5x7 &
+exec fbpanel -profile multiwindow
+.fi
+.in -4
+.SH "ENVIRONMENT VARIABLES"
+.TP 25
+DISPLAY
+This variable gets set to the name of the display to which clients should
+connect.  Note that this gets
+.IR set ,
+not read.
+.TP 25
+XAUTHORITY
+This variable, if not already defined, gets set to
+.IR $(HOME)/.Xauthority .
+This is to prevent the X server, if not given the
+.I \-auth
+argument, from automatically setting up insecure host-based authentication
+for the local host.  See the
+.BR Xserver (1)
+and
+.IR Xsecurity (7)
+manual pages for more information on X client/server authentication.
+.SH FILES
+.TP 25
+.I $(HOME)/.startxwinrc
+Client to run.  Typically a shell script which runs many programs in
+the background.
+.TP 25
+.I $(HOME)/.xserverrc
+Server to run.  The default is
+.IR X .
+.TP 25
+.I /etc/X11/xinit/startxwinrc
+Client to run if the user has no
+.I .startxwinrc
+file.
+.TP 25
+.I /etc/X11/xinit/xserverrc
+Server to run if the user has no
+.I .xserverrc
+file.
+.SH "SEE ALSO"
+.BR xinit (1),
+.BR X (7),
+.BR Xserver (1),
+.BR XWin (1),
+.BR XWinrc (5)
diff --git a/testsuite/files/xinit/vars b/testsuite/files/xinit/vars
new file mode 100644
index 00000000..075532a6
--- /dev/null
+++ b/testsuite/files/xinit/vars
@@ -0,0 +1,3 @@
+declare -r ARCHES="all"
+declare -- CROSS_HOST=""
+declare -- INHERITED="autotools "
diff --git a/testsuite/files/xinit/xinit.cygport b/testsuite/files/xinit/xinit.cygport
new file mode 100644
index 00000000..eb6e2616
--- /dev/null
+++ b/testsuite/files/xinit/xinit.cygport
@@ -0,0 +1,44 @@
+# A simplified version of xinit.cygport to excercize the CYGWIN_FILES feature
+
+NAME="xinit"
+VERSION=1.4.2
+RELEASE=2
+CATEGORY="X11"
+SUMMARY="X.Org X server launcher"
+DESCRIPTION="This package contains programs used to start the X Window System
+server and a first client program in environments that use multiple window
+systems."
+HOMEPAGE="https://www.x.org/"
+LICENSE="MIT"
+
+SRC_DIR="."
+
+SRC_URI="
+	startxdmcp.bat
+	startxwin
+	startxwin.1
+"
+
+CYGWIN_FILES="
+	README
+	postinstall.sh
+	preremove.sh
+	profile.d.csh
+	profile.d.fish
+	profile.d.sh
+"
+
+xinit_REQUIRES="adwaita-themes dbus-x11 run sed util-linux setxkbmap xauth xdg-user-dirs xmodmap xrdb xorg-server xterm xwin-xdg-menu"
+# make sure we do not forget to add postinstall/preremove
+xinit_CONTENTS="etc/postinstall/ etc/preremove/ etc/profile.d/ usr/"
+
+src_compile() {
+	:
+}
+
+src_install() {
+	cd ${S}
+	dobin startxdmcp.bat startxwin
+	unix2dos ${D}/usr/bin/*.bat
+	doman startxwin.1
+}
diff --git a/testsuite/files/xinit/xinit.list b/testsuite/files/xinit/xinit.list
new file mode 100644
index 00000000..bbb50edd
--- /dev/null
+++ b/testsuite/files/xinit/xinit.list
@@ -0,0 +1,9 @@
+/etc/postinstall/xinit.sh
+/etc/preremove/xinit.sh
+/etc/profile.d/xinit.csh
+/etc/profile.d/xinit.fish
+/etc/profile.d/xinit.sh
+/usr/bin/startxdmcp.bat
+/usr/bin/startxwin
+/usr/share/doc/Cygwin/xinit.README
+/usr/share/man/man1/startxwin.1.gz
diff --git a/testsuite/font/install/vars b/testsuite/font/install/vars
new file mode 100644
index 00000000..e53cf498
--- /dev/null
+++ b/testsuite/font/install/vars
@@ -0,0 +1,3 @@
+declare -r ARCHES="noarch"
+declare -- CROSS_HOST=""
+declare -- INHERITED="font autotools "
diff --git a/testsuite/font/sfd2ttf/vars b/testsuite/font/sfd2ttf/vars
new file mode 100644
index 00000000..e53cf498
--- /dev/null
+++ b/testsuite/font/sfd2ttf/vars
@@ -0,0 +1,3 @@
+declare -r ARCHES="noarch"
+declare -- CROSS_HOST=""
+declare -- INHERITED="font autotools "
diff --git a/testsuite/hints/multiple/vars b/testsuite/hints/multiple/vars
new file mode 100644
index 00000000..075532a6
--- /dev/null
+++ b/testsuite/hints/multiple/vars
@@ -0,0 +1,3 @@
+declare -r ARCHES="all"
+declare -- CROSS_HOST=""
+declare -- INHERITED="autotools "
diff --git a/testsuite/hints/single/vars b/testsuite/hints/single/vars
new file mode 100644
index 00000000..075532a6
--- /dev/null
+++ b/testsuite/hints/single/vars
@@ -0,0 +1,3 @@
+declare -r ARCHES="all"
+declare -- CROSS_HOST=""
+declare -- INHERITED="autotools "
diff --git a/testsuite/httpd/apxs/vars b/testsuite/httpd/apxs/vars
new file mode 100644
index 00000000..8fab1ce1
--- /dev/null
+++ b/testsuite/httpd/apxs/vars
@@ -0,0 +1,3 @@
+declare -r ARCHES="all"
+declare -- CROSS_HOST=""
+declare -- INHERITED="httpd autotools "
diff --git a/testsuite/logic/arch_patch/arch_patch.cygport b/testsuite/logic/arch_patch/arch_patch.cygport
new file mode 100644
index 00000000..20207f75
--- /dev/null
+++ b/testsuite/logic/arch_patch/arch_patch.cygport
@@ -0,0 +1,12 @@
+NAME=arch_patch
+VERSION=1
+RELEASE=1
+
+case ${ARCH} in
+  "i686")
+    PATCH_URI="fix-for-x86.patch"
+    ;;
+  "x86_64")
+    PATCH_URI="fix-for-x86_64.patch"
+    ;;
+esac
diff --git a/testsuite/logic/arch_src/arch_src.cygport b/testsuite/logic/arch_src/arch_src.cygport
new file mode 100644
index 00000000..dd9e8ea7
--- /dev/null
+++ b/testsuite/logic/arch_src/arch_src.cygport
@@ -0,0 +1,12 @@
+NAME=arch_src
+VERSION=1
+RELEASE=1
+
+case ${ARCH} in
+  "i686")
+    SRC_URI="https://invalid.com/source-x86.tar.xz"
+    ;;
+  "x86_64")
+    SRC_URI="https://invalid.com/source-x86_64.tar.xz"
+    ;;
+esac
diff --git a/testsuite/logic/meson.build b/testsuite/logic/meson.build
new file mode 100644
index 00000000..2876f378
--- /dev/null
+++ b/testsuite/logic/meson.build
@@ -0,0 +1,9 @@
+test('arch_src', cygport_inplace,
+     args: ['arch_src', 'info'],
+     workdir: meson.current_source_dir() / 'arch_src',
+     should_fail: true)
+
+test('arch_patch', cygport_inplace,
+     args: ['arch_patch', 'info'],
+     workdir: meson.current_source_dir() / 'arch_patch',
+     should_fail: true)
diff --git a/testsuite/lua/all/vars b/testsuite/lua/all/vars
new file mode 100644
index 00000000..1d49e0dc
--- /dev/null
+++ b/testsuite/lua/all/vars
@@ -0,0 +1,4 @@
+declare -r ARCHES="all"
+declare -- BUILD_REQUIRES="  lua  liblua-devel"
+declare -- CROSS_HOST=""
+declare -- INHERITED="lua autotools "
diff --git a/testsuite/meson.build b/testsuite/meson.build
index cd43e41f..2b77594b 100644
--- a/testsuite/meson.build
+++ b/testsuite/meson.build
@@ -10,7 +10,7 @@ subdir('basic')
 test_driver = find_program('test-driver')
 # this is used in several subdirs
 cmake = find_program('cmake', required: false)
-python2 = find_program('python2', required: false)
+python3 = find_program('python3', required: false)
 
 tests = []
 
@@ -22,8 +22,10 @@ subdir('autotools')
 subdir('cmake')
 subdir('cross')
 subdir('docbook')
+subdir('files')
 subdir('font')
 subdir('httpd')
+subdir('logic')
 subdir('lua')
 subdir('meson')
 subdir('ocaml')
@@ -43,3 +45,5 @@ test(t[0], test_driver,
      is_parallel: t.length() > 1 ? false : true,
      timeout: t.length() > 1 ? t[1] : 240)
 endforeach
+
+test('vars', find_program('vars'), env: testenv, timeout: 0)
diff --git a/testsuite/meson/c/vars b/testsuite/meson/c/vars
new file mode 100644
index 00000000..8c86aaef
--- /dev/null
+++ b/testsuite/meson/c/vars
@@ -0,0 +1,3 @@
+declare -r ARCHES="all"
+declare -- CROSS_HOST=""
+declare -- INHERITED="git ninja meson autotools "
diff --git a/testsuite/meson/gnome/vars b/testsuite/meson/gnome/vars
new file mode 100644
index 00000000..cab57b42
--- /dev/null
+++ b/testsuite/meson/gnome/vars
@@ -0,0 +1,3 @@
+declare -r ARCHES="all"
+declare -- CROSS_HOST=""
+declare -- INHERITED="ninja meson gnome.org autotools "
diff --git a/testsuite/ocaml/dune/vars b/testsuite/ocaml/dune/vars
new file mode 100644
index 00000000..0202dfbc
--- /dev/null
+++ b/testsuite/ocaml/dune/vars
@@ -0,0 +1,4 @@
+declare -r ARCHES="all"
+declare -- BUILD_REQUIRES="ocaml ocaml-dune"
+declare -- CROSS_HOST=""
+declare -- INHERITED="ocaml ocaml-dune autotools "
diff --git a/testsuite/ocaml/findlib/vars b/testsuite/ocaml/findlib/vars
new file mode 100644
index 00000000..77bd9d58
--- /dev/null
+++ b/testsuite/ocaml/findlib/vars
@@ -0,0 +1,3 @@
+declare -r ARCHES="all"
+declare -- CROSS_HOST=""
+declare -- INHERITED="ocaml autotools "
diff --git a/testsuite/perl/ExtUtils-MakeMaker/vars b/testsuite/perl/ExtUtils-MakeMaker/vars
new file mode 100644
index 00000000..0aeaf68e
--- /dev/null
+++ b/testsuite/perl/ExtUtils-MakeMaker/vars
@@ -0,0 +1,3 @@
+declare -r ARCHES="noarch"
+declare -- CROSS_HOST=""
+declare -- INHERITED="perl autotools "
diff --git a/testsuite/perl/Module-Build/vars b/testsuite/perl/Module-Build/vars
new file mode 100644
index 00000000..f11c5763
--- /dev/null
+++ b/testsuite/perl/Module-Build/vars
@@ -0,0 +1,3 @@
+declare -r ARCHES="all"
+declare -- CROSS_HOST=""
+declare -- INHERITED="perl autotools "
diff --git a/testsuite/php/pear/vars b/testsuite/php/pear/vars
new file mode 100644
index 00000000..27196692
--- /dev/null
+++ b/testsuite/php/pear/vars
@@ -0,0 +1,3 @@
+declare -r ARCHES="noarch"
+declare -- CROSS_HOST=""
+declare -- INHERITED="php autotools "
diff --git a/testsuite/php/pecl/vars b/testsuite/php/pecl/vars
new file mode 100644
index 00000000..629c24e6
--- /dev/null
+++ b/testsuite/php/pecl/vars
@@ -0,0 +1,3 @@
+declare -r ARCHES="all"
+declare -- CROSS_HOST=""
+declare -- INHERITED="php autotools "
diff --git a/testsuite/python/distutils/hints/python-beautifulsoup-3.2.1-1.x86_64/dist/python-beautifulsoup/python-beautifulsoup-3.2.1-1-src.hint b/testsuite/python/distutils/hints/python3-beautifulsoup-4.11.1-1.x86_64/dist/python3-beautifulsoup/python3-beautifulsoup-4.11.1-1-src.hint
similarity index 83%
rename from testsuite/python/distutils/hints/python-beautifulsoup-3.2.1-1.x86_64/dist/python-beautifulsoup/python-beautifulsoup-3.2.1-1-src.hint
rename to testsuite/python/distutils/hints/python3-beautifulsoup-4.11.1-1.x86_64/dist/python3-beautifulsoup/python3-beautifulsoup-4.11.1-1-src.hint
index a78b5b82..5d3076c9 100644
--- a/testsuite/python/distutils/hints/python-beautifulsoup-3.2.1-1.x86_64/dist/python-beautifulsoup/python-beautifulsoup-3.2.1-1-src.hint
+++ b/testsuite/python/distutils/hints/python3-beautifulsoup-4.11.1-1.x86_64/dist/python3-beautifulsoup/python3-beautifulsoup-4.11.1-1-src.hint
@@ -6,4 +6,4 @@ turnaround projects like screen-scraping. Beautiful Soup parses anything you
 give it, and does the tree traversal stuff for you."
 skip:
 
-homepage: http://www.crummy.com/software/BeautifulSoup/
+homepage: https://www.crummy.com/software/BeautifulSoup/
diff --git a/testsuite/python/distutils/hints/python-beautifulsoup-3.2.1-1.x86_64/dist/python-beautifulsoup/python2-beautifulsoup/python2-beautifulsoup-3.2.1-1.hint b/testsuite/python/distutils/hints/python3-beautifulsoup-4.11.1-1.x86_64/dist/python3-beautifulsoup/python3-beautifulsoup-4.11.1-1.hint
similarity index 83%
rename from testsuite/python/distutils/hints/python-beautifulsoup-3.2.1-1.x86_64/dist/python-beautifulsoup/python2-beautifulsoup/python2-beautifulsoup-3.2.1-1.hint
rename to testsuite/python/distutils/hints/python3-beautifulsoup-4.11.1-1.x86_64/dist/python3-beautifulsoup/python3-beautifulsoup-4.11.1-1.hint
index f3957d94..73e356b9 100644
--- a/testsuite/python/distutils/hints/python-beautifulsoup-3.2.1-1.x86_64/dist/python-beautifulsoup/python2-beautifulsoup/python2-beautifulsoup-3.2.1-1.hint
+++ b/testsuite/python/distutils/hints/python3-beautifulsoup-4.11.1-1.x86_64/dist/python3-beautifulsoup/python3-beautifulsoup-4.11.1-1.hint
@@ -1,9 +1,8 @@
 category: Python
-requires: python27
+requires: python38
 sdesc: "Python HTML/XML parser"
 ldesc: "Beautiful Soup is a Python HTML/XML parser designed for quick
 turnaround projects like screen-scraping. Beautiful Soup parses anything you
 give it, and does the tree traversal stuff for you."
 obsoletes: python-beautifulsoup
-external-source: python-beautifulsoup
 
diff --git a/testsuite/python/distutils/python-beautifulsoup.cygport b/testsuite/python/distutils/python-beautifulsoup.cygport
index 155d31a8..cf703cd3 100644
--- a/testsuite/python/distutils/python-beautifulsoup.cygport
+++ b/testsuite/python/distutils/python-beautifulsoup.cygport
@@ -1,19 +1,21 @@
-ORIG_PN="BeautifulSoup"
+ORIG_PN="beautifulsoup4"
 inherit distutils
 
-NAME="python-beautifulsoup"
-VERSION=3.2.1
+NAME="python3-beautifulsoup"
+VERSION=4.11.1
 RELEASE=1
 CATEGORY="Python"
 SUMMARY="Python HTML/XML parser"
 DESCRIPTION="Beautiful Soup is a Python HTML/XML parser designed for quick
 turnaround projects like screen-scraping. Beautiful Soup parses anything you
 give it, and does the tree traversal stuff for you."
-HOMEPAGE="http://www.crummy.com/software/BeautifulSoup/"
-SRC_URI="http://www.crummy.com/software/BeautifulSoup/download/3.x/${ORIG_PN}-${PV}.tar.gz"
+HOMEPAGE="https://www.crummy.com/software/BeautifulSoup/"
+SRC_URI="https://www.crummy.com/software/BeautifulSoup/bs4/download/${PV%.*}/${ORIG_PN}-${PV}.tar.gz"
 
-PKG_NAMES="python2-beautifulsoup"
-python2_beautifulsoup_OBSOLETES=${NAME}
-python2_beautifulsoup_CONTENTS="*"
+PKG_NAMES="python3-beautifulsoup"
+python3_beautifulsoup_OBSOLETES="python-beautifulsoup"
+python3_beautifulsoup_CONTENTS="*"
 
 DOCS="PKG-INFO"
+
+export SETUPTOOLS_USE_DISTUTILS=local
diff --git a/testsuite/python/distutils/python-beautifulsoup.list b/testsuite/python/distutils/python-beautifulsoup.list
index 978fb6da..b0922eb7 100644
--- a/testsuite/python/distutils/python-beautifulsoup.list
+++ b/testsuite/python/distutils/python-beautifulsoup.list
@@ -1,8 +1,106 @@
-/usr/lib/python2.7/site-packages/BeautifulSoup-3.2.1-py2.7.egg-info
-/usr/lib/python2.7/site-packages/BeautifulSoup.py
-/usr/lib/python2.7/site-packages/BeautifulSoup.pyc
-/usr/lib/python2.7/site-packages/BeautifulSoup.pyo
-/usr/lib/python2.7/site-packages/BeautifulSoupTests.py
-/usr/lib/python2.7/site-packages/BeautifulSoupTests.pyc
-/usr/lib/python2.7/site-packages/BeautifulSoupTests.pyo
-/usr/share/doc/python-beautifulsoup/PKG-INFO
+/usr/lib/python3.8/site-packages/beautifulsoup4-4.11.1-py3.8.egg-info/PKG-INFO
+/usr/lib/python3.8/site-packages/beautifulsoup4-4.11.1-py3.8.egg-info/SOURCES.txt
+/usr/lib/python3.8/site-packages/beautifulsoup4-4.11.1-py3.8.egg-info/dependency_links.txt
+/usr/lib/python3.8/site-packages/beautifulsoup4-4.11.1-py3.8.egg-info/requires.txt
+/usr/lib/python3.8/site-packages/beautifulsoup4-4.11.1-py3.8.egg-info/top_level.txt
+/usr/lib/python3.8/site-packages/bs4/__init__.py
+/usr/lib/python3.8/site-packages/bs4/__pycache__/__init__.cpython-38.opt-1.pyc
+/usr/lib/python3.8/site-packages/bs4/__pycache__/__init__.cpython-38.opt-2.pyc
+/usr/lib/python3.8/site-packages/bs4/__pycache__/__init__.cpython-38.pyc
+/usr/lib/python3.8/site-packages/bs4/__pycache__/dammit.cpython-38.opt-1.pyc
+/usr/lib/python3.8/site-packages/bs4/__pycache__/dammit.cpython-38.opt-2.pyc
+/usr/lib/python3.8/site-packages/bs4/__pycache__/dammit.cpython-38.pyc
+/usr/lib/python3.8/site-packages/bs4/__pycache__/diagnose.cpython-38.opt-1.pyc
+/usr/lib/python3.8/site-packages/bs4/__pycache__/diagnose.cpython-38.opt-2.pyc
+/usr/lib/python3.8/site-packages/bs4/__pycache__/diagnose.cpython-38.pyc
+/usr/lib/python3.8/site-packages/bs4/__pycache__/element.cpython-38.opt-1.pyc
+/usr/lib/python3.8/site-packages/bs4/__pycache__/element.cpython-38.opt-2.pyc
+/usr/lib/python3.8/site-packages/bs4/__pycache__/element.cpython-38.pyc
+/usr/lib/python3.8/site-packages/bs4/__pycache__/formatter.cpython-38.opt-1.pyc
+/usr/lib/python3.8/site-packages/bs4/__pycache__/formatter.cpython-38.opt-2.pyc
+/usr/lib/python3.8/site-packages/bs4/__pycache__/formatter.cpython-38.pyc
+/usr/lib/python3.8/site-packages/bs4/builder/__init__.py
+/usr/lib/python3.8/site-packages/bs4/builder/__pycache__/__init__.cpython-38.opt-1.pyc
+/usr/lib/python3.8/site-packages/bs4/builder/__pycache__/__init__.cpython-38.opt-2.pyc
+/usr/lib/python3.8/site-packages/bs4/builder/__pycache__/__init__.cpython-38.pyc
+/usr/lib/python3.8/site-packages/bs4/builder/__pycache__/_html5lib.cpython-38.opt-1.pyc
+/usr/lib/python3.8/site-packages/bs4/builder/__pycache__/_html5lib.cpython-38.opt-2.pyc
+/usr/lib/python3.8/site-packages/bs4/builder/__pycache__/_html5lib.cpython-38.pyc
+/usr/lib/python3.8/site-packages/bs4/builder/__pycache__/_htmlparser.cpython-38.opt-1.pyc
+/usr/lib/python3.8/site-packages/bs4/builder/__pycache__/_htmlparser.cpython-38.opt-2.pyc
+/usr/lib/python3.8/site-packages/bs4/builder/__pycache__/_htmlparser.cpython-38.pyc
+/usr/lib/python3.8/site-packages/bs4/builder/__pycache__/_lxml.cpython-38.opt-1.pyc
+/usr/lib/python3.8/site-packages/bs4/builder/__pycache__/_lxml.cpython-38.opt-2.pyc
+/usr/lib/python3.8/site-packages/bs4/builder/__pycache__/_lxml.cpython-38.pyc
+/usr/lib/python3.8/site-packages/bs4/builder/_html5lib.py
+/usr/lib/python3.8/site-packages/bs4/builder/_htmlparser.py
+/usr/lib/python3.8/site-packages/bs4/builder/_lxml.py
+/usr/lib/python3.8/site-packages/bs4/dammit.py
+/usr/lib/python3.8/site-packages/bs4/diagnose.py
+/usr/lib/python3.8/site-packages/bs4/element.py
+/usr/lib/python3.8/site-packages/bs4/formatter.py
+/usr/lib/python3.8/site-packages/bs4/tests/__init__.py
+/usr/lib/python3.8/site-packages/bs4/tests/__pycache__/__init__.cpython-38.opt-1.pyc
+/usr/lib/python3.8/site-packages/bs4/tests/__pycache__/__init__.cpython-38.opt-2.pyc
+/usr/lib/python3.8/site-packages/bs4/tests/__pycache__/__init__.cpython-38.pyc
+/usr/lib/python3.8/site-packages/bs4/tests/__pycache__/test_builder.cpython-38.opt-1.pyc
+/usr/lib/python3.8/site-packages/bs4/tests/__pycache__/test_builder.cpython-38.opt-2.pyc
+/usr/lib/python3.8/site-packages/bs4/tests/__pycache__/test_builder.cpython-38.pyc
+/usr/lib/python3.8/site-packages/bs4/tests/__pycache__/test_builder_registry.cpython-38.opt-1.pyc
+/usr/lib/python3.8/site-packages/bs4/tests/__pycache__/test_builder_registry.cpython-38.opt-2.pyc
+/usr/lib/python3.8/site-packages/bs4/tests/__pycache__/test_builder_registry.cpython-38.pyc
+/usr/lib/python3.8/site-packages/bs4/tests/__pycache__/test_dammit.cpython-38.opt-1.pyc
+/usr/lib/python3.8/site-packages/bs4/tests/__pycache__/test_dammit.cpython-38.opt-2.pyc
+/usr/lib/python3.8/site-packages/bs4/tests/__pycache__/test_dammit.cpython-38.pyc
+/usr/lib/python3.8/site-packages/bs4/tests/__pycache__/test_docs.cpython-38.opt-1.pyc
+/usr/lib/python3.8/site-packages/bs4/tests/__pycache__/test_docs.cpython-38.opt-2.pyc
+/usr/lib/python3.8/site-packages/bs4/tests/__pycache__/test_docs.cpython-38.pyc
+/usr/lib/python3.8/site-packages/bs4/tests/__pycache__/test_element.cpython-38.opt-1.pyc
+/usr/lib/python3.8/site-packages/bs4/tests/__pycache__/test_element.cpython-38.opt-2.pyc
+/usr/lib/python3.8/site-packages/bs4/tests/__pycache__/test_element.cpython-38.pyc
+/usr/lib/python3.8/site-packages/bs4/tests/__pycache__/test_formatter.cpython-38.opt-1.pyc
+/usr/lib/python3.8/site-packages/bs4/tests/__pycache__/test_formatter.cpython-38.opt-2.pyc
+/usr/lib/python3.8/site-packages/bs4/tests/__pycache__/test_formatter.cpython-38.pyc
+/usr/lib/python3.8/site-packages/bs4/tests/__pycache__/test_html5lib.cpython-38.opt-1.pyc
+/usr/lib/python3.8/site-packages/bs4/tests/__pycache__/test_html5lib.cpython-38.opt-2.pyc
+/usr/lib/python3.8/site-packages/bs4/tests/__pycache__/test_html5lib.cpython-38.pyc
+/usr/lib/python3.8/site-packages/bs4/tests/__pycache__/test_htmlparser.cpython-38.opt-1.pyc
+/usr/lib/python3.8/site-packages/bs4/tests/__pycache__/test_htmlparser.cpython-38.opt-2.pyc
+/usr/lib/python3.8/site-packages/bs4/tests/__pycache__/test_htmlparser.cpython-38.pyc
+/usr/lib/python3.8/site-packages/bs4/tests/__pycache__/test_lxml.cpython-38.opt-1.pyc
+/usr/lib/python3.8/site-packages/bs4/tests/__pycache__/test_lxml.cpython-38.opt-2.pyc
+/usr/lib/python3.8/site-packages/bs4/tests/__pycache__/test_lxml.cpython-38.pyc
+/usr/lib/python3.8/site-packages/bs4/tests/__pycache__/test_navigablestring.cpython-38.opt-1.pyc
+/usr/lib/python3.8/site-packages/bs4/tests/__pycache__/test_navigablestring.cpython-38.opt-2.pyc
+/usr/lib/python3.8/site-packages/bs4/tests/__pycache__/test_navigablestring.cpython-38.pyc
+/usr/lib/python3.8/site-packages/bs4/tests/__pycache__/test_pageelement.cpython-38.opt-1.pyc
+/usr/lib/python3.8/site-packages/bs4/tests/__pycache__/test_pageelement.cpython-38.opt-2.pyc
+/usr/lib/python3.8/site-packages/bs4/tests/__pycache__/test_pageelement.cpython-38.pyc
+/usr/lib/python3.8/site-packages/bs4/tests/__pycache__/test_soup.cpython-38.opt-1.pyc
+/usr/lib/python3.8/site-packages/bs4/tests/__pycache__/test_soup.cpython-38.opt-2.pyc
+/usr/lib/python3.8/site-packages/bs4/tests/__pycache__/test_soup.cpython-38.pyc
+/usr/lib/python3.8/site-packages/bs4/tests/__pycache__/test_tag.cpython-38.opt-1.pyc
+/usr/lib/python3.8/site-packages/bs4/tests/__pycache__/test_tag.cpython-38.opt-2.pyc
+/usr/lib/python3.8/site-packages/bs4/tests/__pycache__/test_tag.cpython-38.pyc
+/usr/lib/python3.8/site-packages/bs4/tests/__pycache__/test_tree.cpython-38.opt-1.pyc
+/usr/lib/python3.8/site-packages/bs4/tests/__pycache__/test_tree.cpython-38.opt-2.pyc
+/usr/lib/python3.8/site-packages/bs4/tests/__pycache__/test_tree.cpython-38.pyc
+/usr/lib/python3.8/site-packages/bs4/tests/test_builder.py
+/usr/lib/python3.8/site-packages/bs4/tests/test_builder_registry.py
+/usr/lib/python3.8/site-packages/bs4/tests/test_dammit.py
+/usr/lib/python3.8/site-packages/bs4/tests/test_docs.py
+/usr/lib/python3.8/site-packages/bs4/tests/test_element.py
+/usr/lib/python3.8/site-packages/bs4/tests/test_formatter.py
+/usr/lib/python3.8/site-packages/bs4/tests/test_html5lib.py
+/usr/lib/python3.8/site-packages/bs4/tests/test_htmlparser.py
+/usr/lib/python3.8/site-packages/bs4/tests/test_lxml.py
+/usr/lib/python3.8/site-packages/bs4/tests/test_navigablestring.py
+/usr/lib/python3.8/site-packages/bs4/tests/test_pageelement.py
+/usr/lib/python3.8/site-packages/bs4/tests/test_soup.py
+/usr/lib/python3.8/site-packages/bs4/tests/test_tag.py
+/usr/lib/python3.8/site-packages/bs4/tests/test_tree.py
+/usr/share/doc/python3-beautifulsoup/COPYING.txt
+/usr/share/doc/python3-beautifulsoup/LICENSE
+/usr/share/doc/python3-beautifulsoup/NEWS.txt
+/usr/share/doc/python3-beautifulsoup/PKG-INFO
+/usr/share/doc/python3-beautifulsoup/README.md
diff --git a/testsuite/python/distutils/vars b/testsuite/python/distutils/vars
new file mode 100644
index 00000000..bd7c6897
--- /dev/null
+++ b/testsuite/python/distutils/vars
@@ -0,0 +1,3 @@
+declare -r ARCHES="all"
+declare -- CROSS_HOST=""
+declare -- INHERITED="python python2 python.org python2-distutils python-distutils distutils autotools "
diff --git a/testsuite/python/meson.build b/testsuite/python/meson.build
index 94a48a80..b30347f4 100644
--- a/testsuite/python/meson.build
+++ b/testsuite/python/meson.build
@@ -1,16 +1,10 @@
-pip27 = find_program('pip2.7', required: false)
 pip37 = find_program('pip3.7', required: false)
 pip38 = find_program('pip3.8', required: false)
-pygtk2 = find_program('pygtk-codegen-2.0', required: false)
 
-if python2.found()
+if python3.found()
 tests += [['python/distutils']]
 endif
 
-if pygtk2.found()
-tests += [['python/pygtk', 480]]
-endif
-
-if pip27.found() and pip37.found() and pip38.found()
+if pip37.found() and pip38.found()
 tests += [['python/wheel']]
 endif
diff --git a/testsuite/python/pygtk/hints/python-pynotify-0.1.1-5.x86_64/dist/python-pynotify/python-pynotify-0.1.1-5-src.hint b/testsuite/python/pygtk/hints/python-pynotify-0.1.1-5.x86_64/dist/python-pynotify/python-pynotify-0.1.1-5-src.hint
deleted file mode 100644
index 3042aae9..00000000
--- a/testsuite/python/pygtk/hints/python-pynotify-0.1.1-5.x86_64/dist/python-pynotify/python-pynotify-0.1.1-5-src.hint
+++ /dev/null
@@ -1,7 +0,0 @@
-category: Python
-build-depends: cygport 
-sdesc: "Python libnotify bindings"
-ldesc: "Python bindings for libnotify (desktop notification library)"
-skip:
-
-homepage: http://www.galago-project.org/
diff --git a/testsuite/python/pygtk/hints/python-pynotify-0.1.1-5.x86_64/dist/python-pynotify/python-pynotify-0.1.1-5.hint b/testsuite/python/pygtk/hints/python-pynotify-0.1.1-5.x86_64/dist/python-pynotify/python-pynotify-0.1.1-5.hint
deleted file mode 100644
index 7606a78b..00000000
--- a/testsuite/python/pygtk/hints/python-pynotify-0.1.1-5.x86_64/dist/python-pynotify/python-pynotify-0.1.1-5.hint
+++ /dev/null
@@ -1,5 +0,0 @@
-category: Python
-requires: cygwin libgdk_pixbuf2.0_0 libglib2.0_0 libnotify4 pkg-config python27 python-gobject python-gtk2.0
-sdesc: "Python libnotify bindings"
-ldesc: "Python bindings for libnotify (desktop notification library)"
-
diff --git a/testsuite/python/pygtk/notify-python-0.1.1-libnotify-0.7.patch b/testsuite/python/pygtk/notify-python-0.1.1-libnotify-0.7.patch
deleted file mode 100644
index ee146cb6..00000000
--- a/testsuite/python/pygtk/notify-python-0.1.1-libnotify-0.7.patch
+++ /dev/null
@@ -1,37 +0,0 @@
-http://pkgs.fedoraproject.org/gitweb/?p=notify-python.git;a=blob_plain;f=libnotify07.patch;hb=HEAD
-
---- src/pynotify.defs
-+++ src/pynotify.defs
-@@ -38,7 +38,6 @@
-     '("const-gchar*" "summary")
-     '("const-gchar*" "message" (null-ok) (default "NULL"))
-     '("const-gchar*" "icon" (null-ok) (default "NULL"))
--    '("GtkWidget*" "attach" (null-ok) (default "NULL"))
-   )
- )
- 
-@@ -53,24 +52,6 @@
-   )
- )
- 
--(define-method attach_to_widget
--  (of-object "NotifyNotification")
--  (c-name "notify_notification_attach_to_widget")
--  (return-type "none")
--  (parameters
--    '("GtkWidget*" "attach")
--  )
--)
--
--(define-method attach_to_status_icon
--  (of-object "NotifyNotification")
--  (c-name "notify_notification_attach_to_status_icon")
--  (return-type "none")
--  (parameters
--    '("GtkStatusIcon*" "attach")
--  )
--)
--
- (define-method show
-   (of-object "NotifyNotification")
-   (c-name "notify_notification_show")
diff --git a/testsuite/python/pygtk/python-pynotify.cygport b/testsuite/python/pygtk/python-pynotify.cygport
deleted file mode 100644
index 70570dcd..00000000
--- a/testsuite/python/pygtk/python-pynotify.cygport
+++ /dev/null
@@ -1,18 +0,0 @@
-ORIG_PN="notify-python"
-inherit pygtk
-
-NAME="python-pynotify"
-VERSION=0.1.1
-RELEASE=5
-CATEGORY="Python"
-SUMMARY="Python libnotify bindings"
-DESCRIPTION="Python bindings for libnotify (desktop notification library)"
-HOMEPAGE="http://www.galago-project.org/"
-SRC_URI="http://www.galago-project.org/files/releases/source/${ORIG_PN}/${ORIG_PN}-${PV}.tar.bz2"
-PATCH_URI="mirror://portage/dev-python/${ORIG_PN}/files/${ORIG_PN}-${PV}-libnotify-0.7.patch"
-
-DISTCLEANFILES="src/pynotify.c"
-
-REQUIRES="python-gobject python-gtk2.0"
-
-CFLAGS+=" -fcommon"
diff --git a/testsuite/python/pygtk/python-pynotify.list b/testsuite/python/pygtk/python-pynotify.list
deleted file mode 100644
index 7c8f460a..00000000
--- a/testsuite/python/pygtk/python-pynotify.list
+++ /dev/null
@@ -1,10 +0,0 @@
-/usr/lib/pkgconfig/notify-python.pc
-/usr/lib/python2.7/site-packages/gtk-2.0/pynotify/__init__.py
-/usr/lib/python2.7/site-packages/gtk-2.0/pynotify/__init__.pyc
-/usr/lib/python2.7/site-packages/gtk-2.0/pynotify/__init__.pyo
-/usr/lib/python2.7/site-packages/gtk-2.0/pynotify/_pynotify.dll
-/usr/share/doc/python-pynotify/AUTHORS
-/usr/share/doc/python-pynotify/COPYING
-/usr/share/doc/python-pynotify/ChangeLog
-/usr/share/doc/python-pynotify/NEWS
-/usr/share/pygtk/2.0/defs/pynotify.defs
diff --git a/testsuite/python/wheel/vars b/testsuite/python/wheel/vars
new file mode 100644
index 00000000..de82fe0a
--- /dev/null
+++ b/testsuite/python/wheel/vars
@@ -0,0 +1,3 @@
+declare -r ARCHES="noarch"
+declare -- CROSS_HOST=""
+declare -- INHERITED="python.org python-wheel autotools "
diff --git a/testsuite/qmake/qt3/vars b/testsuite/qmake/qt3/vars
new file mode 100644
index 00000000..2f563e7b
--- /dev/null
+++ b/testsuite/qmake/qt3/vars
@@ -0,0 +1,3 @@
+declare -r ARCHES="all"
+declare -- CROSS_HOST=""
+declare -- INHERITED="qt3 qt3-qmake autotools "
diff --git a/testsuite/qmake/qt4/vars b/testsuite/qmake/qt4/vars
new file mode 100644
index 00000000..9fdd9fe3
--- /dev/null
+++ b/testsuite/qmake/qt4/vars
@@ -0,0 +1,3 @@
+declare -r ARCHES="all"
+declare -- CROSS_HOST=""
+declare -- INHERITED="qt4 qt4-qmake autotools "
diff --git a/testsuite/qmake/qt5/vars b/testsuite/qmake/qt5/vars
new file mode 100644
index 00000000..4944800e
--- /dev/null
+++ b/testsuite/qmake/qt5/vars
@@ -0,0 +1,3 @@
+declare -r ARCHES="all"
+declare -- CROSS_HOST=""
+declare -- INHERITED="qt5 qt5-qmake autotools "
diff --git a/testsuite/ruby/gem/vars b/testsuite/ruby/gem/vars
new file mode 100644
index 00000000..af2660b4
--- /dev/null
+++ b/testsuite/ruby/gem/vars
@@ -0,0 +1,3 @@
+declare -r ARCHES="noarch"
+declare -- CROSS_HOST=""
+declare -- INHERITED="ruby rubygem autotools "
diff --git a/testsuite/texlive/collection/vars b/testsuite/texlive/collection/vars
new file mode 100644
index 00000000..2bb359ad
--- /dev/null
+++ b/testsuite/texlive/collection/vars
@@ -0,0 +1,3 @@
+declare -r ARCHES="noarch"
+declare -- CROSS_HOST=""
+declare -- INHERITED="texlive autotools "
diff --git a/testsuite/vars b/testsuite/vars
new file mode 100755
index 00000000..344ba560
--- /dev/null
+++ b/testsuite/vars
@@ -0,0 +1,35 @@
+#!/bin/bash
+set -e
+
+cd ${top_srcdir}/testsuite/
+for c in $(find . -name \*.cygport -not -path './logic/*')
+do
+  test=$(dirname ${c})
+  cygport=$(basename ${c})
+
+  test -d ${top_builddir}/testsuite/$test || mkdir -p ${top_builddir}/testsuite/$test
+  cd ${top_builddir}/testsuite/$test
+  cp -f ${top_srcdir}/testsuite/$test/$cygport $cygport
+
+  ${top_builddir}/bin/cygport-inplace $cygport vars ARCHES BUILD_REQUIRES CROSS_HOST INHERITED >vars
+
+  # compare results
+  if [ -a ${top_srcdir}/testsuite/$test/vars ];
+  then
+      diff -u ${top_srcdir}/testsuite/$test/vars vars || test_failed=1
+  else
+      # if CREATE_VARS is set, create the expected vars file for use in future testing
+      if [ -z ${CREATE_VARS+x} ]
+      then
+          echo "can't verify vars as expected vars ${top_srcdir}/testsuite/$test/vars not found." >&2
+          test_failed=1
+      else
+          cp vars ${top_srcdir}/testsuite/$test/vars
+      fi
+    fi
+done
+
+if [ -n "$test_failed" ]
+then
+    exit 1
+fi
diff --git a/testsuite/waf/all/1.12.0-cygwin-shlib.patch b/testsuite/waf/all/1.12.0-cygwin-shlib.patch
deleted file mode 100644
index 19aac8b1..00000000
--- a/testsuite/waf/all/1.12.0-cygwin-shlib.patch
+++ /dev/null
@@ -1,66 +0,0 @@
---- origsrc/lv2-1.12.0/plugins/eg-amp.lv2/wscript	2015-03-02 09:31:54.000000000 -0600
-+++ src/lv2-1.12.0/plugins/eg-amp.lv2/wscript	2015-11-26 02:01:55.756934600 -0600
-@@ -32,7 +32,7 @@ def build(bld):
-     bundle = 'eg-amp.lv2'
- 
-     # Make a pattern for shared objects without the 'lib' prefix
--    module_pat = re.sub('^lib', '', bld.env.cshlib_PATTERN)
-+    module_pat = re.sub('^(lib|cyg)', '', bld.env.cshlib_PATTERN)
-     module_ext = module_pat[module_pat.rfind('.'):]
- 
-     # Build manifest.ttl by substitution (for portable lib extension)
---- origsrc/lv2-1.12.0/plugins/eg-fifths.lv2/wscript	2015-03-02 09:31:54.000000000 -0600
-+++ src/lv2-1.12.0/plugins/eg-fifths.lv2/wscript	2015-11-26 02:02:34.348335100 -0600
-@@ -30,7 +30,7 @@ def build(bld):
-     bundle = 'eg-fifths.lv2'
- 
-     # Make a pattern for shared objects without the 'lib' prefix
--    module_pat = re.sub('^lib', '', bld.env.cshlib_PATTERN)
-+    module_pat = re.sub('^(lib|cyg)', '', bld.env.cshlib_PATTERN)
-     module_ext = module_pat[module_pat.rfind('.'):]
- 
-     # Build manifest.ttl by substitution (for portable lib extension)
---- origsrc/lv2-1.12.0/plugins/eg-metro.lv2/wscript	2015-03-02 09:31:54.000000000 -0600
-+++ src/lv2-1.12.0/plugins/eg-metro.lv2/wscript	2015-11-26 02:01:55.765435700 -0600
-@@ -32,7 +32,7 @@ def build(bld):
-     bundle = 'eg-metro.lv2'
- 
-     # Make a pattern for shared objects without the 'lib' prefix
--    module_pat = re.sub('^lib', '', bld.env.cshlib_PATTERN)
-+    module_pat = re.sub('^(lib|cyg)', '', bld.env.cshlib_PATTERN)
-     module_ext = module_pat[module_pat.rfind('.'):]
- 
-     # Build manifest.ttl by substitution (for portable lib extension)
---- origsrc/lv2-1.12.0/plugins/eg-midigate.lv2/wscript	2015-03-02 09:31:54.000000000 -0600
-+++ src/lv2-1.12.0/plugins/eg-midigate.lv2/wscript	2015-11-26 02:01:55.761435200 -0600
-@@ -30,7 +30,7 @@ def build(bld):
-     bundle = 'eg-midigate.lv2'
- 
-     # Make a pattern for shared objects without the 'lib' prefix
--    module_pat = re.sub('^lib', '', bld.env.cshlib_PATTERN)
-+    module_pat = re.sub('^(lib|cyg)', '', bld.env.cshlib_PATTERN)
-     module_ext = module_pat[module_pat.rfind('.'):]
- 
-     # Build manifest.ttl by substitution (for portable lib extension)
---- origsrc/lv2-1.12.0/plugins/eg-sampler.lv2/wscript	2015-03-02 09:31:54.000000000 -0600
-+++ src/lv2-1.12.0/plugins/eg-sampler.lv2/wscript	2015-11-26 02:01:55.770936400 -0600
-@@ -36,7 +36,7 @@ def build(bld):
-     bundle = 'eg-sampler.lv2'
- 
-     # Make a pattern for shared objects without the 'lib' prefix
--    module_pat = re.sub('^lib', '', bld.env.cshlib_PATTERN)
-+    module_pat = re.sub('^(lib|cyg)', '', bld.env.cshlib_PATTERN)
-     module_ext = module_pat[module_pat.rfind('.'):]
- 
-     # Build manifest.ttl by substitution (for portable lib extension)
---- origsrc/lv2-1.12.0/plugins/eg-scope.lv2/wscript	2015-03-02 09:31:54.000000000 -0600
-+++ src/lv2-1.12.0/plugins/eg-scope.lv2/wscript	2015-11-26 02:02:42.472866800 -0600
-@@ -35,7 +35,7 @@ def build(bld):
-     bundle = 'eg-scope.lv2'
- 
-     # Make a pattern for shared objects without the 'lib' prefix
--    module_pat = re.sub('^lib', '', bld.env.cshlib_PATTERN)
-+    module_pat = re.sub('^(lib|cyg)', '', bld.env.cshlib_PATTERN)
-     module_ext = module_pat[module_pat.rfind('.'):]
- 
-     # Build manifest.ttl by substitution (for portable lib extension)
diff --git a/testsuite/waf/all/hints/lv2-1.12.0-1.x86_64/dist/lv2/lv2-1.12.0-1-src.hint b/testsuite/waf/all/hints/lv2-1.18.4-1.x86_64/dist/lv2/lv2-1.18.4-1-src.hint
similarity index 100%
rename from testsuite/waf/all/hints/lv2-1.12.0-1.x86_64/dist/lv2/lv2-1.12.0-1-src.hint
rename to testsuite/waf/all/hints/lv2-1.18.4-1.x86_64/dist/lv2/lv2-1.18.4-1-src.hint
diff --git a/testsuite/waf/all/hints/lv2-1.12.0-1.x86_64/dist/lv2/lv2-1.12.0-1.hint b/testsuite/waf/all/hints/lv2-1.18.4-1.x86_64/dist/lv2/lv2-1.18.4-1.hint
similarity index 100%
rename from testsuite/waf/all/hints/lv2-1.12.0-1.x86_64/dist/lv2/lv2-1.12.0-1.hint
rename to testsuite/waf/all/hints/lv2-1.18.4-1.x86_64/dist/lv2/lv2-1.18.4-1.hint
diff --git a/testsuite/waf/all/hints/lv2-1.12.0-1.x86_64/dist/lv2/lv2-devel/lv2-devel-1.12.0-1.hint b/testsuite/waf/all/hints/lv2-1.18.4-1.x86_64/dist/lv2/lv2-devel/lv2-devel-1.18.4-1.hint
similarity index 93%
rename from testsuite/waf/all/hints/lv2-1.12.0-1.x86_64/dist/lv2/lv2-devel/lv2-devel-1.12.0-1.hint
rename to testsuite/waf/all/hints/lv2-1.18.4-1.x86_64/dist/lv2/lv2-devel/lv2-devel-1.18.4-1.hint
index 0e21dae3..ebd2efab 100644
--- a/testsuite/waf/all/hints/lv2-1.12.0-1.x86_64/dist/lv2/lv2-devel/lv2-devel-1.12.0-1.hint
+++ b/testsuite/waf/all/hints/lv2-1.18.4-1.x86_64/dist/lv2/lv2-devel/lv2-devel-1.18.4-1.hint
@@ -1,5 +1,5 @@
 category: Audio
-requires: pkg-config python3 lv2
+requires: bash pkg-config python3 lv2
 sdesc: "LV2 audio plugin specification"
 ldesc: "LV2 is a portable plugin standard for audio systems, similar in
 scope to LADSPA, VST, AU, and others. It defines a C API for code and a format
diff --git a/testsuite/waf/all/lv2.cygport b/testsuite/waf/all/lv2.cygport
index 36d86f90..4ceab9ec 100644
--- a/testsuite/waf/all/lv2.cygport
+++ b/testsuite/waf/all/lv2.cygport
@@ -1,7 +1,7 @@
 inherit waf
 
 NAME="lv2"
-VERSION=1.12.0
+VERSION=1.18.4
 RELEASE=1
 CATEGORY="Audio"
 SUMMARY="LV2 audio plugin specification"
@@ -13,17 +13,16 @@ more advanced functionality. This allows the interface to be grown to
 accommodate the needs of real software as they arise."
 HOMEPAGE="http://lv2plug.in/"
 SRC_URI="http://lv2plug.in/spec/lv2-${VERSION}.tar.bz2"
-PATCH_URI="1.12.0-cygwin-shlib.patch waf-python2.patch"
 
 PKG_NAMES="lv2 lv2-devel"
 lv2_OBSOLETES="lv2core"
 lv2_DOCS="COPYING NEWS README.md"
 lv2_CONTENTS="--exclude=eg-*.lv2 --exclude=*.[ch] etc/ usr/lib/lv2/"
 lv2_devel_REQUIRES="lv2"
-lv2_devel_CONTENTS="usr/bin/lv2specgen.py usr/include/lv2* usr/lib/lv2/*/*.[ch]
-	usr/lib/pkgconfig/ usr/share/lv2specgen/"
+lv2_devel_CONTENTS="usr/bin/lv2specgen.py usr/bin/lv2_validate usr/include/lv2*
+        usr/lib/lv2/*/*.[ch] usr/lib/pkgconfig/ usr/share/lv2specgen/"
 
-WAF_CONFIGURE_FLAGS="--no-plugins"
+WAF_CONFIGURE_FLAGS="--no-plugins --lv2dir=/usr/lib/lv2"
 
 src_install() {
 	cd ${B}
diff --git a/testsuite/waf/all/lv2.list b/testsuite/waf/all/lv2.list
index 841d7ab9..1555bd04 100644
--- a/testsuite/waf/all/lv2.list
+++ b/testsuite/waf/all/lv2.list
@@ -1,8 +1,17 @@
 /etc/profile.d/lv2.csh
 /etc/profile.d/lv2.fish
 /etc/profile.d/lv2.sh
+/usr/bin/lv2_validate
 /usr/bin/lv2specgen.py
 /usr/include/lv2.h
+/usr/include/lv2/atom
+/usr/include/lv2/buf-size
+/usr/include/lv2/core
+/usr/include/lv2/data-access
+/usr/include/lv2/dynmanifest
+/usr/include/lv2/event
+/usr/include/lv2/instance-access
+/usr/include/lv2/log
 /usr/include/lv2/lv2plug.in/ns/ext/atom
 /usr/include/lv2/lv2plug.in/ns/ext/buf-size
 /usr/include/lv2/lv2plug.in/ns/ext/data-access
@@ -27,78 +36,100 @@
 /usr/include/lv2/lv2plug.in/ns/extensions/ui
 /usr/include/lv2/lv2plug.in/ns/extensions/units
 /usr/include/lv2/lv2plug.in/ns/lv2core
+/usr/include/lv2/midi
+/usr/include/lv2/morph
+/usr/include/lv2/options
+/usr/include/lv2/parameters
+/usr/include/lv2/patch
+/usr/include/lv2/port-groups
+/usr/include/lv2/port-props
+/usr/include/lv2/presets
+/usr/include/lv2/resize-port
+/usr/include/lv2/state
+/usr/include/lv2/time
+/usr/include/lv2/ui
+/usr/include/lv2/units
+/usr/include/lv2/uri-map
+/usr/include/lv2/urid
+/usr/include/lv2/worker
+/usr/lib/lv2/atom.lv2/atom-test-utils.c
 /usr/lib/lv2/atom.lv2/atom-test.c
 /usr/lib/lv2/atom.lv2/atom.h
+/usr/lib/lv2/atom.lv2/atom.meta.ttl
 /usr/lib/lv2/atom.lv2/atom.ttl
+/usr/lib/lv2/atom.lv2/forge-overflow-test.c
 /usr/lib/lv2/atom.lv2/forge.h
-/usr/lib/lv2/atom.lv2/lv2-atom.doap.ttl
 /usr/lib/lv2/atom.lv2/manifest.ttl
 /usr/lib/lv2/atom.lv2/util.h
 /usr/lib/lv2/buf-size.lv2/buf-size.h
+/usr/lib/lv2/buf-size.lv2/buf-size.meta.ttl
 /usr/lib/lv2/buf-size.lv2/buf-size.ttl
-/usr/lib/lv2/buf-size.lv2/lv2-buf-size.doap.ttl
 /usr/lib/lv2/buf-size.lv2/manifest.ttl
+/usr/lib/lv2/core.lv2/attributes.h
+/usr/lib/lv2/core.lv2/lv2.h
+/usr/lib/lv2/core.lv2/lv2_util.h
+/usr/lib/lv2/core.lv2/lv2core.meta.ttl
+/usr/lib/lv2/core.lv2/lv2core.ttl
+/usr/lib/lv2/core.lv2/manifest.ttl
+/usr/lib/lv2/core.lv2/meta.ttl
+/usr/lib/lv2/core.lv2/people.ttl
 /usr/lib/lv2/data-access.lv2/data-access.h
+/usr/lib/lv2/data-access.lv2/data-access.meta.ttl
 /usr/lib/lv2/data-access.lv2/data-access.ttl
-/usr/lib/lv2/data-access.lv2/lv2-data-access.doap.ttl
 /usr/lib/lv2/data-access.lv2/manifest.ttl
 /usr/lib/lv2/dynmanifest.lv2/dynmanifest.h
+/usr/lib/lv2/dynmanifest.lv2/dynmanifest.meta.ttl
 /usr/lib/lv2/dynmanifest.lv2/dynmanifest.ttl
-/usr/lib/lv2/dynmanifest.lv2/lv2-dynmanifest.doap.ttl
 /usr/lib/lv2/dynmanifest.lv2/manifest.ttl
 /usr/lib/lv2/event.lv2/event-helpers.h
 /usr/lib/lv2/event.lv2/event.h
+/usr/lib/lv2/event.lv2/event.meta.ttl
 /usr/lib/lv2/event.lv2/event.ttl
-/usr/lib/lv2/event.lv2/lv2-event.doap.ttl
 /usr/lib/lv2/event.lv2/manifest.ttl
 /usr/lib/lv2/instance-access.lv2/instance-access.h
+/usr/lib/lv2/instance-access.lv2/instance-access.meta.ttl
 /usr/lib/lv2/instance-access.lv2/instance-access.ttl
-/usr/lib/lv2/instance-access.lv2/lv2-instance-access.doap.ttl
 /usr/lib/lv2/instance-access.lv2/manifest.ttl
 /usr/lib/lv2/log.lv2/log.h
+/usr/lib/lv2/log.lv2/log.meta.ttl
 /usr/lib/lv2/log.lv2/log.ttl
 /usr/lib/lv2/log.lv2/logger.h
-/usr/lib/lv2/log.lv2/lv2-log.doap.ttl
 /usr/lib/lv2/log.lv2/manifest.ttl
-/usr/lib/lv2/lv2core.lv2/lv2.h
-/usr/lib/lv2/lv2core.lv2/lv2core.doap.ttl
-/usr/lib/lv2/lv2core.lv2/lv2core.ttl
-/usr/lib/lv2/lv2core.lv2/manifest.ttl
-/usr/lib/lv2/midi.lv2/lv2-midi.doap.ttl
 /usr/lib/lv2/midi.lv2/manifest.ttl
 /usr/lib/lv2/midi.lv2/midi.h
+/usr/lib/lv2/midi.lv2/midi.meta.ttl
 /usr/lib/lv2/midi.lv2/midi.ttl
-/usr/lib/lv2/morph.lv2/lv2-morph.doap.ttl
 /usr/lib/lv2/morph.lv2/manifest.ttl
 /usr/lib/lv2/morph.lv2/morph.h
+/usr/lib/lv2/morph.lv2/morph.meta.ttl
 /usr/lib/lv2/morph.lv2/morph.ttl
-/usr/lib/lv2/options.lv2/lv2-options.doap.ttl
 /usr/lib/lv2/options.lv2/manifest.ttl
 /usr/lib/lv2/options.lv2/options.h
+/usr/lib/lv2/options.lv2/options.meta.ttl
 /usr/lib/lv2/options.lv2/options.ttl
-/usr/lib/lv2/parameters.lv2/lv2-parameters.doap.ttl
 /usr/lib/lv2/parameters.lv2/manifest.ttl
 /usr/lib/lv2/parameters.lv2/parameters.h
+/usr/lib/lv2/parameters.lv2/parameters.meta.ttl
 /usr/lib/lv2/parameters.lv2/parameters.ttl
-/usr/lib/lv2/patch.lv2/lv2-patch.doap.ttl
 /usr/lib/lv2/patch.lv2/manifest.ttl
 /usr/lib/lv2/patch.lv2/patch.h
+/usr/lib/lv2/patch.lv2/patch.meta.ttl
 /usr/lib/lv2/patch.lv2/patch.ttl
-/usr/lib/lv2/port-groups.lv2/lv2-port-groups.doap.ttl
 /usr/lib/lv2/port-groups.lv2/manifest.ttl
 /usr/lib/lv2/port-groups.lv2/port-groups.h
+/usr/lib/lv2/port-groups.lv2/port-groups.meta.ttl
 /usr/lib/lv2/port-groups.lv2/port-groups.ttl
-/usr/lib/lv2/port-props.lv2/lv2-port-props.doap.ttl
 /usr/lib/lv2/port-props.lv2/manifest.ttl
 /usr/lib/lv2/port-props.lv2/port-props.h
+/usr/lib/lv2/port-props.lv2/port-props.meta.ttl
 /usr/lib/lv2/port-props.lv2/port-props.ttl
-/usr/lib/lv2/presets.lv2/lv2-presets.doap.ttl
 /usr/lib/lv2/presets.lv2/manifest.ttl
 /usr/lib/lv2/presets.lv2/presets.h
+/usr/lib/lv2/presets.lv2/presets.meta.ttl
 /usr/lib/lv2/presets.lv2/presets.ttl
-/usr/lib/lv2/resize-port.lv2/lv2-resize-port.doap.ttl
 /usr/lib/lv2/resize-port.lv2/manifest.ttl
 /usr/lib/lv2/resize-port.lv2/resize-port.h
+/usr/lib/lv2/resize-port.lv2/resize-port.meta.ttl
 /usr/lib/lv2/resize-port.lv2/resize-port.ttl
 /usr/lib/lv2/schemas.lv2/dcs.ttl
 /usr/lib/lv2/schemas.lv2/dct.ttl
@@ -109,36 +140,35 @@
 /usr/lib/lv2/schemas.lv2/rdf.ttl
 /usr/lib/lv2/schemas.lv2/rdfs.ttl
 /usr/lib/lv2/schemas.lv2/xsd.ttl
-/usr/lib/lv2/state.lv2/lv2-state.doap.ttl
 /usr/lib/lv2/state.lv2/manifest.ttl
 /usr/lib/lv2/state.lv2/state.h
+/usr/lib/lv2/state.lv2/state.meta.ttl
 /usr/lib/lv2/state.lv2/state.ttl
-/usr/lib/lv2/time.lv2/lv2-time.doap.ttl
 /usr/lib/lv2/time.lv2/manifest.ttl
 /usr/lib/lv2/time.lv2/time.h
+/usr/lib/lv2/time.lv2/time.meta.ttl
 /usr/lib/lv2/time.lv2/time.ttl
-/usr/lib/lv2/ui.lv2/lv2-ui.doap.ttl
 /usr/lib/lv2/ui.lv2/manifest.ttl
 /usr/lib/lv2/ui.lv2/ui.h
+/usr/lib/lv2/ui.lv2/ui.meta.ttl
 /usr/lib/lv2/ui.lv2/ui.ttl
-/usr/lib/lv2/units.lv2/lv2-units.doap.ttl
 /usr/lib/lv2/units.lv2/manifest.ttl
 /usr/lib/lv2/units.lv2/units.h
+/usr/lib/lv2/units.lv2/units.meta.ttl
 /usr/lib/lv2/units.lv2/units.ttl
-/usr/lib/lv2/uri-map.lv2/lv2-uri-map.doap.ttl
 /usr/lib/lv2/uri-map.lv2/manifest.ttl
 /usr/lib/lv2/uri-map.lv2/uri-map.h
+/usr/lib/lv2/uri-map.lv2/uri-map.meta.ttl
 /usr/lib/lv2/uri-map.lv2/uri-map.ttl
-/usr/lib/lv2/urid.lv2/lv2-urid.doap.ttl
 /usr/lib/lv2/urid.lv2/manifest.ttl
 /usr/lib/lv2/urid.lv2/urid.h
+/usr/lib/lv2/urid.lv2/urid.meta.ttl
 /usr/lib/lv2/urid.lv2/urid.ttl
-/usr/lib/lv2/worker.lv2/lv2-worker.doap.ttl
 /usr/lib/lv2/worker.lv2/manifest.ttl
 /usr/lib/lv2/worker.lv2/worker.h
+/usr/lib/lv2/worker.lv2/worker.meta.ttl
 /usr/lib/lv2/worker.lv2/worker.ttl
 /usr/lib/pkgconfig/lv2.pc
-/usr/lib/pkgconfig/lv2core.pc
 /usr/share/doc/lv2/COPYING
 /usr/share/doc/lv2/NEWS
 /usr/share/doc/lv2/README.md
@@ -154,6 +184,7 @@
 /usr/share/lv2specgen/DTD/xhtml-charent-1.mod
 /usr/share/lv2specgen/DTD/xhtml-csismap-1.mod
 /usr/share/lv2specgen/DTD/xhtml-datatypes-1.mod
+/usr/share/lv2specgen/DTD/xhtml-datatypes-1.mod.1
 /usr/share/lv2specgen/DTD/xhtml-edit-1.mod
 /usr/share/lv2specgen/DTD/xhtml-events-1.mod
 /usr/share/lv2specgen/DTD/xhtml-form-1.mod
@@ -170,10 +201,13 @@
 /usr/share/lv2specgen/DTD/xhtml-link-1.mod
 /usr/share/lv2specgen/DTD/xhtml-list-1.mod
 /usr/share/lv2specgen/DTD/xhtml-meta-1.mod
+/usr/share/lv2specgen/DTD/xhtml-metaAttributes-1.mod
 /usr/share/lv2specgen/DTD/xhtml-object-1.mod
 /usr/share/lv2specgen/DTD/xhtml-param-1.mod
 /usr/share/lv2specgen/DTD/xhtml-pres-1.mod
 /usr/share/lv2specgen/DTD/xhtml-qname-1.mod
+/usr/share/lv2specgen/DTD/xhtml-rdfa-1.dtd
+/usr/share/lv2specgen/DTD/xhtml-rdfa-model-1.mod
 /usr/share/lv2specgen/DTD/xhtml-script-1.mod
 /usr/share/lv2specgen/DTD/xhtml-special.ent
 /usr/share/lv2specgen/DTD/xhtml-ssismap-1.mod
diff --git a/testsuite/waf/all/vars b/testsuite/waf/all/vars
new file mode 100644
index 00000000..35255e6e
--- /dev/null
+++ b/testsuite/waf/all/vars
@@ -0,0 +1,3 @@
+declare -r ARCHES="all"
+declare -- CROSS_HOST=""
+declare -- INHERITED="waf autotools "
diff --git a/testsuite/waf/all/waf-python2.patch b/testsuite/waf/all/waf-python2.patch
deleted file mode 100644
index e7c8e755..00000000
--- a/testsuite/waf/all/waf-python2.patch
+++ /dev/null
@@ -1,16 +0,0 @@
---- origsrc/lv2-1.12.0/waf	2015-01-25 21:24:02.000000000 +0000
-+++ src/lv2-1.12.0/waf	2022-03-14 16:41:08.376713600 +0000
-@@ -1,4 +1,4 @@
--#!/usr/bin/env python
-+#!/usr/bin/env python2
- # encoding: ISO8859-1
- # Thomas Nagy, 2005-2014
- 
---- origsrc/lv2-1.12.0/wscript	2015-04-07 20:02:55.000000000 +0100
-+++ src/lv2-1.12.0/wscript	2022-03-14 16:41:18.847770500 +0000
-@@ -1,4 +1,4 @@
--#!/usr/bin/env python
-+#!/usr/bin/env python2
- import glob
- import os
- import re
diff --git a/testsuite/waf/meson.build b/testsuite/waf/meson.build
index 498b2f01..59fac88a 100644
--- a/testsuite/waf/meson.build
+++ b/testsuite/waf/meson.build
@@ -1,3 +1,3 @@
-if python2.found()
+if python3.found()
 tests += [['waf/all']]
 endif


                 reply	other threads:[~2023-01-15  0:31 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20230115003100.BEFE43858D1E@sourceware.org \
    --to=jturney@sourceware.org \
    --cc=cygwin-apps-cvs@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).