public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
From: "Andreas Sturmlechner" <asturm@gentoo.org>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] repo/gentoo:master commit in: dev-util/cmake/, dev-util/cmake/files/
Date: Sat, 12 Dec 2020 18:02:46 +0000 (UTC)	[thread overview]
Message-ID: <1607795903.755299aaafbf5b1dd243ab371375f742699fcceb.asturm@gentoo> (raw)

commit:     755299aaafbf5b1dd243ab371375f742699fcceb
Author:     Andreas Sturmlechner <asturm <AT> gentoo <DOT> org>
AuthorDate: Sat Dec 12 17:00:40 2020 +0000
Commit:     Andreas Sturmlechner <asturm <AT> gentoo <DOT> org>
CommitDate: Sat Dec 12 17:58:23 2020 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=755299aa

dev-util/cmake: Fix spurious include target

Reported-by: Attila Tóth <atoth <AT> atoth.sote.hu>
Closes: https://bugs.gentoo.org/759271
Package-Manager: Portage-3.0.12, Repoman-3.0.2
Signed-off-by: Andreas Sturmlechner <asturm <AT> gentoo.org>

 dev-util/cmake/cmake-3.19.1-r1.ebuild              | 225 +++++++++++++++++++++
 .../cmake-3.19.1-fix-spurious-include-target.patch | 198 ++++++++++++++++++
 2 files changed, 423 insertions(+)

diff --git a/dev-util/cmake/cmake-3.19.1-r1.ebuild b/dev-util/cmake/cmake-3.19.1-r1.ebuild
new file mode 100644
index 00000000000..97f173f95a8
--- /dev/null
+++ b/dev-util/cmake/cmake-3.19.1-r1.ebuild
@@ -0,0 +1,225 @@
+# Copyright 1999-2020 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+CMAKE_MAKEFILE_GENERATOR="emake" # TODO: Re-check with 3.19, see commit 491dddfb; bug #596460
+CMAKE_REMOVE_MODULES_LIST=( none )
+inherit bash-completion-r1 cmake elisp-common flag-o-matic multiprocessing \
+	toolchain-funcs virtualx xdg-utils
+
+MY_P="${P/_/-}"
+
+DESCRIPTION="Cross platform Make"
+HOMEPAGE="https://cmake.org/"
+SRC_URI="https://cmake.org/files/v$(ver_cut 1-2)/${MY_P}.tar.gz"
+
+LICENSE="CMake"
+SLOT="0"
+[[ "${PV}" = *_rc* ]] || \
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos ~x86-macos ~sparc-solaris ~x64-solaris ~x86-solaris"
+IUSE="doc emacs ncurses qt5 test"
+RESTRICT="!test? ( test )"
+
+RDEPEND="
+	>=app-arch/libarchive-3.3.3:=
+	app-crypt/rhash
+	>=dev-libs/expat-2.0.1
+	>=dev-libs/jsoncpp-1.9.2-r2:0=
+	>=dev-libs/libuv-1.10.0:=
+	>=net-misc/curl-7.21.5[ssl]
+	sys-libs/zlib
+	virtual/pkgconfig
+	emacs? ( >=app-editors/emacs-23.1:* )
+	ncurses? ( sys-libs/ncurses:0= )
+	qt5? (
+		dev-qt/qtcore:5
+		dev-qt/qtgui:5
+		dev-qt/qtwidgets:5
+	)
+"
+DEPEND="${RDEPEND}"
+BDEPEND="
+	doc? (
+		dev-python/requests
+		dev-python/sphinx
+	)
+"
+
+S="${WORKDIR}/${MY_P}"
+
+SITEFILE="50${PN}-gentoo.el"
+
+PATCHES=(
+	# prefix
+	"${FILESDIR}"/${PN}-3.16.0_rc4-darwin-bundle.patch
+	"${FILESDIR}"/${PN}-3.14.0_rc3-prefix-dirs.patch
+	"${FILESDIR}"/${PN}-3.19.1-darwin-gcc.patch
+
+	# handle gentoo packaging in find modules
+	"${FILESDIR}"/${PN}-3.17.0_rc1-FindBLAS.patch
+	# Next patch needs to be reworked
+	#"${FILESDIR}"/${PN}-3.17.0_rc1-FindLAPACK.patch
+	"${FILESDIR}"/${PN}-3.5.2-FindQt4.patch
+
+	# respect python eclasses
+	"${FILESDIR}"/${PN}-2.8.10.2-FindPythonLibs.patch
+	"${FILESDIR}"/${PN}-3.9.0_rc2-FindPythonInterp.patch
+
+	"${FILESDIR}"/${PN}-3.18.0-filter_distcc_warning.patch # bug 691544
+
+	# upstream fixes (can usually be removed with a version bump)
+	"${FILESDIR}"/${P}-fix-spurious-include-target.patch # bug 759271
+)
+
+cmake_src_bootstrap() {
+	# disable running of cmake in bootstrap command
+	sed -i \
+		-e '/"${cmake_bootstrap_dir}\/cmake"/s/^/#DONOTRUN /' \
+		bootstrap || die "sed failed"
+
+	# execinfo.h on Solaris isn't quite what it is on Darwin
+	if [[ ${CHOST} == *-solaris* ]] ; then
+		sed -i -e 's/execinfo\.h/blablabla.h/' \
+			Source/kwsys/CMakeLists.txt || die
+	fi
+
+	# bootstrap script isn't exactly /bin/sh compatible
+	tc-env_build ${CONFIG_SHELL:-sh} ./bootstrap \
+		--prefix="${T}/cmakestrap/" \
+		--parallel=$(makeopts_jobs "${MAKEOPTS}" "$(get_nproc)") \
+		|| die "Bootstrap failed"
+}
+
+cmake_src_test() {
+	# fix OutDir and SelectLibraryConfigurations tests
+	# these are altered thanks to our eclass
+	sed -i -e 's:^#_cmake_modify_IGNORE ::g' \
+		"${S}"/Tests/{OutDir,CMakeOnly/SelectLibraryConfigurations}/CMakeLists.txt \
+		|| die
+
+	pushd "${BUILD_DIR}" > /dev/null
+
+	local ctestargs
+	[[ -n ${TEST_VERBOSE} ]] && ctestargs="--extra-verbose --output-on-failure"
+
+	# Excluded tests:
+	#    BootstrapTest: we actually bootstrap it every time so why test it.
+	#    BundleUtilities: bundle creation broken
+	#    CMakeOnly.AllFindModules: pthread issues
+	#    CTest.updatecvs: fails to commit as root
+	#    Fortran: requires fortran
+	#    RunCMake.CommandLineTar: whatever...
+	#    RunCMake.CompilerLauncher: also requires fortran
+	#    RunCMake.CPack_RPM: breaks if app-arch/rpm is installed because
+	#        debugedit binary is not in the expected location
+	#    RunCMake.CPack_DEB: breaks if app-arch/dpkg is installed because
+	#        it can't find a deb package that owns libc
+	#    RunCMake.{IncompatibleQt,ObsoleteQtMacros}: Require Qt4
+	#    TestUpload: requires network access
+	"${BUILD_DIR}"/bin/ctest \
+		-j "$(makeopts_jobs)" \
+		--test-load "$(makeopts_loadavg)" \
+		${ctestargs} \
+		-E "(BootstrapTest|BundleUtilities|CMakeOnly.AllFindModules|CompileOptions|CTest.UpdateCVS|DependencyGraph|Fortran|RunCMake.CommandLineTar|RunCMake.CompilerLauncher|RunCMake.IncompatibleQt|RunCMake.ObsoleteQtMacros|RunCMake.PrecompileHeaders|RunCMake.CPack_(DEB|RPM)|TestUpload)" \
+		|| die "Tests failed"
+
+	popd > /dev/null
+}
+
+src_prepare() {
+	cmake_src_prepare
+
+	if [[ ${CHOST} == *-darwin* ]] ; then
+		# disable Xcode hooks, bug #652134
+		sed -i -e 's/__APPLE__/__DISABLED_APPLE__/' \
+			Source/cmGlobalXCodeGenerator.cxx || die
+		# disable isysroot usage with GCC, we've properly instructed
+		# where things are via GCC configuration and ldwrapper
+		sed -i -e '/cmake_gnu_set_sysroot_flag/d' \
+			Modules/Platform/Apple-GNU-*.cmake || die
+		# don't set a POSIX standard, system headers don't like that, #757426
+		sed -i -e 's/^#if !defined(_WIN32) && !defined(__sun)/& \&\& !defined(__APPLE__)/' \
+			Source/cmLoadCommandCommand.cxx \
+			Source/cmStandardLexer.h \
+			Source/cmSystemTools.cxx \
+			Source/cmTimestamp.cxx
+	fi
+
+	# Add gcc libs to the default link paths
+	sed -i \
+		-e "s|@GENTOO_PORTAGE_GCCLIBDIR@|${EPREFIX}/usr/${CHOST}/lib/|g" \
+		-e "$(usex prefix-guest "s|@GENTOO_HOST@||" "/@GENTOO_HOST@/d")" \
+		-e "s|@GENTOO_PORTAGE_EPREFIX@|${EPREFIX}/|g" \
+		Modules/Platform/{UnixPaths,Darwin}.cmake || die "sed failed"
+	if ! has_version -b \>=${CATEGORY}/${PN}-3.4.0_rc1 || ! cmake --version &>/dev/null ; then
+		CMAKE_BINARY="${S}/Bootstrap.cmk/cmake"
+		cmake_src_bootstrap
+	fi
+}
+
+src_configure() {
+	# Fix linking on Solaris
+	[[ ${CHOST} == *-solaris* ]] && append-ldflags -lsocket -lnsl
+
+	local mycmakeargs=(
+		-DCMAKE_USE_SYSTEM_LIBRARIES=ON
+		-DCMAKE_DOC_DIR=/share/doc/${PF}
+		-DCMAKE_MAN_DIR=/share/man
+		-DCMAKE_DATA_DIR=/share/${PN}
+		-DSPHINX_MAN=$(usex doc)
+		-DSPHINX_HTML=$(usex doc)
+		-DBUILD_CursesDialog="$(usex ncurses)"
+		-DBUILD_TESTING=$(usex test)
+	)
+	use qt5 && mycmakeargs+=( -DBUILD_QtDialog=ON )
+
+	cmake_src_configure
+}
+
+src_compile() {
+	cmake_src_compile
+	use emacs && elisp-compile Auxiliary/cmake-mode.el
+}
+
+src_test() {
+	virtx cmake_src_test
+}
+
+src_install() {
+	cmake_src_install
+
+	if use emacs; then
+		elisp-install ${PN} Auxiliary/cmake-mode.el Auxiliary/cmake-mode.elc
+		elisp-site-file-install "${FILESDIR}/${SITEFILE}"
+	fi
+
+	insinto /usr/share/vim/vimfiles/syntax
+	doins Auxiliary/vim/syntax/cmake.vim
+
+	insinto /usr/share/vim/vimfiles/indent
+	doins Auxiliary/vim/indent/cmake.vim
+
+	insinto /usr/share/vim/vimfiles/ftdetect
+	doins "${FILESDIR}/${PN}.vim"
+
+	dobashcomp Auxiliary/bash-completion/{${PN},ctest,cpack}
+}
+
+pkg_postinst() {
+	use emacs && elisp-site-regen
+	if use qt5; then
+		xdg_icon_cache_update
+		xdg_desktop_database_update
+		xdg_mimeinfo_database_update
+	fi
+}
+
+pkg_postrm() {
+	use emacs && elisp-site-regen
+	if use qt5; then
+		xdg_icon_cache_update
+		xdg_desktop_database_update
+		xdg_mimeinfo_database_update
+	fi
+}

diff --git a/dev-util/cmake/files/cmake-3.19.1-fix-spurious-include-target.patch b/dev-util/cmake/files/cmake-3.19.1-fix-spurious-include-target.patch
new file mode 100644
index 00000000000..1b51cf013fe
--- /dev/null
+++ b/dev-util/cmake/files/cmake-3.19.1-fix-spurious-include-target.patch
@@ -0,0 +1,198 @@
+From 38bcb5c0a3accd2dd29fb7632c6b3bf31b990d82 Mon Sep 17 00:00:00 2001
+From: Deniz Bahadir <dbahadir@benocs.com>
+Date: Tue, 1 Dec 2020 00:25:39 +0100
+Subject: [PATCH] export: Do not fail generation for separate namelink only
+ case
+
+Update the change from commit 64690f6df0 (export: Do not fail generation
+for namelink-only case, 2020-10-09, v3.19.0-rc1~7^2) to also handle
+separate namelink-only and namelink-skip calls.
+
+Fixes: #21529
+---
+ Source/cmExportBuildFileGenerator.cxx         |  3 +++
+ Source/cmExportInstallFileGenerator.cxx       |  3 +++
+ Source/cmInstallCommand.cxx                   | 19 +++++++++++--------
+ Source/cmTargetExport.h                       |  2 ++
+ Tests/RunCMake/export/RunCMakeTest.cmake      |  1 +
+ .../export/SeparateNamelinkExport.cmake       | 16 ++++++++++++++++
+ .../install/EXPORT-SeparateNamelink.cmake     | 19 +++++++++++++++++++
+ Tests/RunCMake/install/RunCMakeTest.cmake     |  1 +
+ 8 files changed, 56 insertions(+), 8 deletions(-)
+ create mode 100644 Tests/RunCMake/export/SeparateNamelinkExport.cmake
+ create mode 100644 Tests/RunCMake/install/EXPORT-SeparateNamelink.cmake
+
+diff --git a/Source/cmExportBuildFileGenerator.cxx b/Source/cmExportBuildFileGenerator.cxx
+index dd700c5edf..1a31ae4afd 100644
+--- a/Source/cmExportBuildFileGenerator.cxx
++++ b/Source/cmExportBuildFileGenerator.cxx
+@@ -288,6 +288,9 @@ void cmExportBuildFileGenerator::GetTargets(
+   if (this->ExportSet) {
+     for (std::unique_ptr<cmTargetExport> const& te :
+          this->ExportSet->GetTargetExports()) {
++      if (te->NamelinkOnly) {
++        continue;
++      }
+       targets.push_back(te->TargetName);
+     }
+     return;
+diff --git a/Source/cmExportInstallFileGenerator.cxx b/Source/cmExportInstallFileGenerator.cxx
+index 987ec9ea7b..0b9b183d54 100644
+--- a/Source/cmExportInstallFileGenerator.cxx
++++ b/Source/cmExportInstallFileGenerator.cxx
+@@ -42,6 +42,9 @@ bool cmExportInstallFileGenerator::GenerateMainFile(std::ostream& os)
+     std::string sep;
+     for (std::unique_ptr<cmTargetExport> const& te :
+          this->IEGen->GetExportSet()->GetTargetExports()) {
++      if (te->NamelinkOnly) {
++        continue;
++      }
+       expectedTargets += sep + this->Namespace + te->Target->GetExportName();
+       sep = " ";
+       if (this->ExportedTargets.insert(te->Target).second) {
+diff --git a/Source/cmInstallCommand.cxx b/Source/cmInstallCommand.cxx
+index b99e6a3c6c..ff08ee41ef 100644
+--- a/Source/cmInstallCommand.cxx
++++ b/Source/cmInstallCommand.cxx
+@@ -461,6 +461,13 @@ bool HandleTargetsMode(std::vector<std::string> const& args,
+     std::unique_ptr<cmInstallFilesGenerator> publicHeaderGenerator;
+     std::unique_ptr<cmInstallFilesGenerator> resourceGenerator;
+ 
++    // Avoid selecting default destinations for PUBLIC_HEADER and
++    // PRIVATE_HEADER if any artifacts are specified.
++    bool artifactsSpecified = false;
++
++    // Track whether this is a namelink-only rule.
++    bool namelinkOnly = false;
++
+     auto addTargetExport = [&]() {
+       // Add this install rule to an export if one was specified.
+       if (!exports.empty()) {
+@@ -475,20 +482,13 @@ bool HandleTargetsMode(std::vector<std::string> const& args,
+         te->ObjectsGenerator = objectGenerator.get();
+         te->InterfaceIncludeDirectories =
+           cmJoin(includesArgs.GetIncludeDirs(), ";");
+-
++        te->NamelinkOnly = namelinkOnly;
+         helper.Makefile->GetGlobalGenerator()
+           ->GetExportSets()[exports]
+           .AddTargetExport(std::move(te));
+       }
+     };
+ 
+-    // Avoid selecting default destinations for PUBLIC_HEADER and
+-    // PRIVATE_HEADER if any artifacts are specified.
+-    bool artifactsSpecified = false;
+-
+-    // Track whether this is a namelink-only rule.
+-    bool namelinkOnly = false;
+-
+     switch (target.GetType()) {
+       case cmStateEnums::SHARED_LIBRARY: {
+         // Shared libraries are handled differently on DLL and non-DLL
+@@ -497,6 +497,7 @@ bool HandleTargetsMode(std::vector<std::string> const& args,
+         if (target.IsDLLPlatform()) {
+           // When in namelink only mode skip all libraries on Windows.
+           if (namelinkMode == cmInstallTargetGenerator::NamelinkModeOnly) {
++            namelinkOnly = true;
+             addTargetExport();
+             continue;
+           }
+@@ -529,6 +530,7 @@ bool HandleTargetsMode(std::vector<std::string> const& args,
+           if (target.IsFrameworkOnApple()) {
+             // When in namelink only mode skip frameworks.
+             if (namelinkMode == cmInstallTargetGenerator::NamelinkModeOnly) {
++              namelinkOnly = true;
+               addTargetExport();
+               continue;
+             }
+@@ -574,6 +576,7 @@ bool HandleTargetsMode(std::vector<std::string> const& args,
+         if (target.IsFrameworkOnApple()) {
+           // When in namelink only mode skip frameworks.
+           if (namelinkMode == cmInstallTargetGenerator::NamelinkModeOnly) {
++            namelinkOnly = true;
+             addTargetExport();
+             continue;
+           }
+diff --git a/Source/cmTargetExport.h b/Source/cmTargetExport.h
+index cb4d8dae44..1e38d84923 100644
+--- a/Source/cmTargetExport.h
++++ b/Source/cmTargetExport.h
+@@ -31,4 +31,6 @@ public:
+   cmInstallFilesGenerator* HeaderGenerator;
+   std::string InterfaceIncludeDirectories;
+   ///@}
++
++  bool NamelinkOnly = false;
+ };
+diff --git a/Tests/RunCMake/export/RunCMakeTest.cmake b/Tests/RunCMake/export/RunCMakeTest.cmake
+index 95c8d5cf45..0e6020f0f4 100644
+--- a/Tests/RunCMake/export/RunCMakeTest.cmake
++++ b/Tests/RunCMake/export/RunCMakeTest.cmake
+@@ -17,3 +17,4 @@ run_cmake(DependOnNotExport)
+ run_cmake(DependOnDoubleExport)
+ run_cmake(UnknownExport)
+ run_cmake(NamelinkOnlyExport)
++run_cmake(SeparateNamelinkExport)
+diff --git a/Tests/RunCMake/export/SeparateNamelinkExport.cmake b/Tests/RunCMake/export/SeparateNamelinkExport.cmake
+new file mode 100644
+index 0000000000..b006aea128
+--- /dev/null
++++ b/Tests/RunCMake/export/SeparateNamelinkExport.cmake
+@@ -0,0 +1,16 @@
++enable_language(CXX)
++add_library(foo SHARED empty.cpp)
++install(TARGETS foo EXPORT fooExport
++  RUNTIME DESTINATION bin
++  LIBRARY
++     DESTINATION lib
++     COMPONENT runtime
++     NAMELINK_SKIP
++)
++install(TARGETS foo EXPORT fooExport
++  LIBRARY
++     DESTINATION lib
++     COMPONENT development
++     NAMELINK_ONLY
++)
++export(EXPORT fooExport FILE "${CMAKE_CURRENT_BINARY_DIR}/foo.cmake")
+diff --git a/Tests/RunCMake/install/EXPORT-SeparateNamelink.cmake b/Tests/RunCMake/install/EXPORT-SeparateNamelink.cmake
+new file mode 100644
+index 0000000000..5c6fa10d18
+--- /dev/null
++++ b/Tests/RunCMake/install/EXPORT-SeparateNamelink.cmake
+@@ -0,0 +1,19 @@
++enable_language(C)
++add_library(foo SHARED empty.c)
++install(TARGETS foo EXPORT fooExport
++  RUNTIME DESTINATION bin
++  LIBRARY
++     DESTINATION lib
++     COMPONENT runtime
++     NAMELINK_SKIP
++)
++install(TARGETS foo EXPORT fooExport
++  LIBRARY
++     DESTINATION lib
++     COMPONENT development
++     NAMELINK_ONLY
++)
++install(EXPORT fooExport
++    DESTINATION "lib/cmake/"
++    FILE "foo.cmake"
++)
+diff --git a/Tests/RunCMake/install/RunCMakeTest.cmake b/Tests/RunCMake/install/RunCMakeTest.cmake
+index 5aab88ca80..d64d88b770 100644
+--- a/Tests/RunCMake/install/RunCMakeTest.cmake
++++ b/Tests/RunCMake/install/RunCMakeTest.cmake
+@@ -78,6 +78,7 @@ run_cmake(TARGETS-DESTINATION-bad)
+ run_cmake(EXPORT-OldIFace)
+ run_cmake(EXPORT-UnknownExport)
+ run_cmake(EXPORT-NamelinkOnly)
++run_cmake(EXPORT-SeparateNamelink)
+ run_cmake(CMP0062-OLD)
+ run_cmake(CMP0062-NEW)
+ run_cmake(CMP0062-WARN)
+-- 
+GitLab
+


             reply	other threads:[~2020-12-12 18:02 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-12-12 18:02 Andreas Sturmlechner [this message]
  -- strict thread matches above, loose matches on Subject: below --
2023-12-07 12:22 [gentoo-commits] repo/gentoo:master commit in: dev-util/cmake/, dev-util/cmake/files/ Sam James
2023-06-09  9:48 Sam James
2021-10-14 19:38 Lars Wendler
2021-09-02 10:43 Andreas Sturmlechner
2021-06-15 12:22 Lars Wendler
2021-02-26 21:19 Andreas Sturmlechner
2020-12-18 20:19 Fabian Groffen
2020-12-17 13:31 Andreas Sturmlechner
2020-12-17 10:23 Andreas Sturmlechner
2020-07-22 16:26 Lars Wendler
2020-02-13 12:27 Lars Wendler
2019-07-04 19:40 Andreas Sturmlechner
2019-06-14 20:42 Andreas Sturmlechner
2019-03-01 22:21 Lars Wendler
2019-02-18  9:24 Lars Wendler
2019-02-10 22:18 Lars Wendler
2019-02-03  9:59 Benda XU
2018-07-19  9:33 Lars Wendler
2018-03-15 13:50 Lars Wendler
2018-02-19 13:08 Lars Wendler
2017-06-09  1:19 Lars Wendler
2017-03-23 12:20 Lars Wendler
2017-03-18  2:54 Michael Palimaka
2017-01-01 16:32 Johannes Huber
2016-11-30  9:42 Michał Górny
2016-05-21 18:36 Michael Palimaka
2015-11-13 12:42 Lars Wendler
2015-10-12 13:04 Michael Palimaka

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=1607795903.755299aaafbf5b1dd243ab371375f742699fcceb.asturm@gentoo \
    --to=asturm@gentoo.org \
    --cc=gentoo-commits@lists.gentoo.org \
    --cc=gentoo-dev@lists.gentoo.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