From: "Mike Frysinger" <vapier@gentoo.org>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] repo/gentoo:master commit in: sys-libs/ncurses/
Date: Mon, 25 Jun 2018 22:02:56 +0000 (UTC) [thread overview]
Message-ID: <1529964073.a4fad719c87e66e2bcd90a5db59b25cd2d383555.vapier@gentoo> (raw)
commit: a4fad719c87e66e2bcd90a5db59b25cd2d383555
Author: Mike Frysinger <vapier <AT> gentoo <DOT> org>
AuthorDate: Mon Jun 25 21:58:59 2018 +0000
Commit: Mike Frysinger <vapier <AT> gentoo <DOT> org>
CommitDate: Mon Jun 25 22:01:13 2018 +0000
URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=a4fad719
sys-libs/ncurses: rewrite the /etc/terminfo code & add a few more variants
Clean up the code to include more comments/documentation, and add rxvt
256color variants as well as screen.xterm-256color for newer versions.
sys-libs/ncurses/ncurses-6.1-r3.ebuild | 305 +++++++++++++++++++++++++++++++++
1 file changed, 305 insertions(+)
diff --git a/sys-libs/ncurses/ncurses-6.1-r3.ebuild b/sys-libs/ncurses/ncurses-6.1-r3.ebuild
new file mode 100644
index 00000000000..fa1908d7243
--- /dev/null
+++ b/sys-libs/ncurses/ncurses-6.1-r3.ebuild
@@ -0,0 +1,305 @@
+# Copyright 1999-2018 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI="6"
+
+inherit flag-o-matic toolchain-funcs multilib-minimal preserve-libs
+
+MY_PV=${PV:0:3}
+PV_SNAP=${PV:4}
+MY_P=${PN}-${MY_PV}
+DESCRIPTION="console display library"
+HOMEPAGE="https://www.gnu.org/software/ncurses/ http://dickey.his.com/ncurses/"
+SRC_URI="mirror://gnu/ncurses/${MY_P}.tar.gz"
+
+LICENSE="MIT"
+# The subslot reflects the SONAME.
+SLOT="0/6"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~m68k ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc ~x86 ~amd64-fbsd ~x86-fbsd"
+IUSE="ada +cxx debug doc gpm minimal profile static-libs test threads tinfo trace unicode"
+
+DEPEND="gpm? ( sys-libs/gpm[${MULTILIB_USEDEP}] )"
+# berkdb? ( sys-libs/db )"
+# Block the older ncurses that installed all files w/SLOT=5. #557472
+RDEPEND="${DEPEND}
+ !<=sys-libs/ncurses-5.9-r4:5
+ !<sys-libs/slang-2.3.2_pre23
+ !<x11-terms/rxvt-unicode-9.06-r3
+ !<x11-terms/st-0.6-r1"
+
+S=${WORKDIR}/${MY_P}
+
+PATCHES=(
+ "${FILESDIR}/${PN}-6.0-gfbsd.patch"
+ "${FILESDIR}/${PN}-5.7-nongnu.patch"
+ "${FILESDIR}/${PN}-6.0-rxvt-unicode-9.15.patch" #192083 #383871
+ "${FILESDIR}/${PN}-6.0-pkg-config.patch"
+ "${FILESDIR}/${PN}-5.9-gcc-5.patch" #545114
+ "${FILESDIR}/${PN}-6.0-ticlib.patch" #557360
+ "${FILESDIR}/${PN}-6.0-cppflags-cross.patch" #601426
+ "${FILESDIR}/${PN}-6.1-st07_terminfo_typo.patch" #651494
+)
+
+src_prepare() {
+ [[ -n ${PV_SNAP} ]] && eapply "${WORKDIR}"/${MY_P}-${PV_SNAP}-patch.sh
+ default
+}
+
+src_configure() {
+ unset TERMINFO #115036
+ tc-export_build_env BUILD_{CC,CPP}
+ BUILD_CPPFLAGS+=" -D_GNU_SOURCE" #214642
+
+ # Build the various variants of ncurses -- narrow, wide, and threaded. #510440
+ # Order matters here -- we want unicode/thread versions to come last so that the
+ # binaries in /usr/bin support both wide and narrow.
+ # The naming is also important as we use these directly with filenames and when
+ # checking configure flags.
+ NCURSES_TARGETS=(
+ ncurses
+ $(usex unicode 'ncursesw' '')
+ $(usex threads 'ncursest' '')
+ $(use unicode && usex threads 'ncursestw' '')
+ )
+
+ # When installing ncurses, we have to use a compatible version of tic.
+ # This comes up when cross-compiling, doing multilib builds, upgrading,
+ # or installing for the first time. Build a local copy of tic whenever
+ # the host version isn't available. #249363 #557598
+ if ! ROOT=/ has_version "~sys-libs/${P}:0" ; then
+ local lbuildflags="-static"
+
+ # some toolchains don't quite support static linking
+ local dbuildflags="-Wl,-rpath,${WORKDIR}/lib"
+ case ${CHOST} in
+ *-darwin*) dbuildflags= ;;
+ *-aix*) dbuildflags= ;;
+ esac
+ echo "int main() {}" | \
+ $(tc-getCC) -o x -x c - ${lbuildflags} -pipe >& /dev/null \
+ || lbuildflags="${dbuildflags}"
+
+ # We can't re-use the multilib BUILD_DIR because we run outside of it.
+ BUILD_DIR="${WORKDIR}" \
+ CHOST=${CBUILD} \
+ CFLAGS=${BUILD_CFLAGS} \
+ CXXFLAGS=${BUILD_CXXFLAGS} \
+ CPPFLAGS=${BUILD_CPPFLAGS} \
+ LDFLAGS="${BUILD_LDFLAGS} ${lbuildflags}" \
+ do_configure cross --without-shared --with-normal
+ fi
+ multilib-minimal_src_configure
+}
+
+multilib_src_configure() {
+ local t
+ for t in "${NCURSES_TARGETS[@]}" ; do
+ do_configure "${t}"
+ done
+}
+
+do_configure() {
+ local target=$1
+ shift
+
+ mkdir "${BUILD_DIR}/${target}" || die
+ cd "${BUILD_DIR}/${target}" || die
+
+ local conf=(
+ # We need the basic terminfo files in /etc, bug #37026. We will
+ # add '--with-terminfo-dirs' and then populate /etc/terminfo in
+ # src_install() ...
+ --with-terminfo-dirs="${EPREFIX}/etc/terminfo:${EPREFIX}/usr/share/terminfo"
+
+ # Disabled until #245417 is sorted out.
+ #$(use_with berkdb hashed-db)
+
+ # Enable installation of .pc files.
+ --enable-pc-files
+ # This path is used to control where the .pc files are installed.
+ --with-pkg-config-libdir="${EPREFIX}/usr/$(get_libdir)/pkgconfig"
+
+ # Now the rest of the various standard flags.
+ --with-shared
+ --without-hashed-db
+ $(use_with ada)
+ $(use_with cxx)
+ $(use_with cxx cxx-binding)
+ --with-cxx-shared
+ $(use_with debug)
+ $(use_with profile)
+ # The configure script uses ldd to parse the linked output which
+ # is flaky for cross-compiling/multilib/ldd versions/etc...
+ $(use_with gpm gpm libgpm.so.1)
+ # Required for building on mingw-w64, and possibly other windows
+ # platforms, bug #639670
+ $(use_enable kernel_Winnt term-driver)
+ --disable-termcap
+ --enable-symlinks
+ --with-rcs-ids
+ --with-manpage-format=normal
+ --enable-const
+ --enable-colorfgbg
+ --enable-hard-tabs
+ --enable-echo
+ $(use_enable !ada warnings)
+ $(use_with debug assertions)
+ $(use_enable !debug leaks)
+ $(use_with debug expanded)
+ $(use_with !debug macros)
+ $(multilib_native_with progs)
+ $(use_with test tests)
+ $(use_with trace)
+ $(use_with tinfo termlib)
+ --disable-stripping
+ )
+
+ if [[ ${target} == ncurses*w ]] ; then
+ conf+=( --enable-widec )
+ else
+ conf+=( --disable-widec )
+ fi
+ if [[ ${target} == ncursest* ]] ; then
+ conf+=( --with-{pthread,reentrant} )
+ else
+ conf+=( --without-{pthread,reentrant} )
+ fi
+ # Make sure each variant goes in a unique location.
+ if [[ ${target} == "ncurses" ]] ; then
+ # "ncurses" variant goes into "${EPREFIX}"/usr/include
+ # It is needed on Prefix because the configure script appends
+ # "ncurses" to "${prefix}/include" if "${prefix}" is not /usr.
+ conf+=( --enable-overwrite )
+ else
+ conf+=( --includedir="${EPREFIX}"/usr/include/${target} )
+ fi
+ # See comments in src_configure.
+ if [[ ${target} != "cross" ]] ; then
+ local cross_path="${WORKDIR}/cross"
+ [[ -d ${cross_path} ]] && export TIC_PATH="${cross_path}/progs/tic"
+ fi
+
+ # Force bash until upstream rebuilds the configure script with a newer
+ # version of autotools. #545532
+ CONFIG_SHELL=${EPREFIX}/bin/bash \
+ ECONF_SOURCE="${S}" \
+ econf "${conf[@]}" "$@"
+}
+
+src_compile() {
+ # See comments in src_configure.
+ if ! ROOT=/ has_version "~sys-libs/${P}:0" ; then
+ BUILD_DIR="${WORKDIR}" \
+ do_compile cross -C progs tic
+ fi
+
+ multilib-minimal_src_compile
+}
+
+multilib_src_compile() {
+ local t
+ for t in "${NCURSES_TARGETS[@]}" ; do
+ do_compile "${t}"
+ done
+}
+
+do_compile() {
+ local target=$1
+ shift
+
+ cd "${BUILD_DIR}/${target}" || die
+
+ # A little hack to fix parallel builds ... they break when
+ # generating sources so if we generate the sources first (in
+ # non-parallel), we can then build the rest of the package
+ # in parallel. This is not really a perf hit since the source
+ # generation is quite small.
+ emake -j1 sources
+ # For some reason, sources depends on pc-files which depends on
+ # compiled libraries which depends on sources which ...
+ # Manually delete the pc-files file so the install step will
+ # create the .pc files we want.
+ rm -f misc/pc-files || die
+ emake "$@"
+}
+
+multilib_src_install() {
+ local target
+ for target in "${NCURSES_TARGETS[@]}" ; do
+ emake -C "${BUILD_DIR}/${target}" DESTDIR="${D}" install
+ done
+
+ # Move main libraries into /.
+ if multilib_is_native_abi ; then
+ gen_usr_ldscript -a \
+ "${NCURSES_TARGETS[@]}" \
+ $(use tinfo && usex unicode 'tinfow' '') \
+ $(usev tinfo)
+ fi
+ if ! tc-is-static-only ; then
+ # Provide a link for -lcurses.
+ ln -sf libncurses$(get_libname) "${ED}"/usr/$(get_libdir)/libcurses$(get_libname) || die
+ fi
+ # don't delete '*.dll.a', needed for linking #631468
+ if ! use static-libs; then
+ find "${ED}"/usr/ -name '*.a' ! -name '*.dll.a' -delete || die
+ fi
+
+ # Build fails to create this ...
+ dosym ../share/terminfo /usr/$(get_libdir)/terminfo
+}
+
+multilib_src_install_all() {
+# if ! use berkdb ; then
+ # We need the basic terminfo files in /etc for embedded/recovery. #37026
+ einfo "Installing basic terminfo files in /etc..."
+ local terms=(
+ # Dumb/simple values that show up when using the in-kernel VT.
+ ansi console dumb linux
+ vt{52,100,102,200,220}
+ # [u]rxvt users used to be pretty common. Probably should drop this
+ # since upstream is dead and people are moving away from it.
+ rxvt{,-unicode}{,-256color}
+ # xterm users are common, as is terminals re-using/spoofing it.
+ xterm xterm-{,256}color
+ # screen is common (and reused by tmux).
+ screen{,-256color}
+ screen.xterm-256color
+ )
+ local x
+ for x in "${terms[@]}"; do
+ local termfile=$(find "${ED}"/usr/share/terminfo/ -name "${x}" 2>/dev/null)
+ local basedir=$(basename "$(dirname "${termfile}")")
+
+ if [[ -n ${termfile} ]] ; then
+ dodir "/etc/terminfo/${basedir}"
+ mv "${termfile}" "${ED}/etc/terminfo/${basedir}/" || die
+ dosym "../../../../etc/terminfo/${basedir}/${x}" \
+ "/usr/share/terminfo/${basedir}/${x}"
+ fi
+ done
+# fi
+
+ echo "CONFIG_PROTECT_MASK=\"/etc/terminfo\"" | newenvd - 50ncurses
+
+ use minimal && rm -r "${ED}"/usr/share/terminfo*
+ # Because ncurses5-config --terminfo returns the directory we keep it
+ keepdir /usr/share/terminfo #245374
+
+ cd "${S}" || die
+ dodoc ANNOUNCE MANIFEST NEWS README* TO-DO doc/*.doc
+ if use doc ; then
+ docinto html
+ dodoc -r doc/html/
+ fi
+}
+
+pkg_preinst() {
+ preserve_old_lib /$(get_libdir)/libncurses.so.5
+ use unicode && preserve_old_lib /$(get_libdir)/libncursesw.so.5
+}
+
+pkg_postinst() {
+ preserve_old_lib_notify /$(get_libdir)/libncurses.so.5
+ use unicode && preserve_old_lib_notify /$(get_libdir)/libncursesw.so.5
+}
next reply other threads:[~2018-06-25 22:03 UTC|newest]
Thread overview: 218+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-06-25 22:02 Mike Frysinger [this message]
-- strict thread matches above, loose matches on Subject: below --
2025-01-26 4:41 [gentoo-commits] repo/gentoo:master commit in: sys-libs/ncurses/ Sam James
2025-01-25 16:10 Sam James
2025-01-04 11:44 Sam James
2024-12-07 2:55 Sam James
2024-12-06 13:04 Sam James
2024-11-17 5:47 Sam James
2024-11-03 21:51 Andreas K. Hüttel
2024-06-22 12:28 Sam James
2024-06-22 12:28 Sam James
2024-05-11 15:19 Sam James
2024-05-07 18:54 Sam James
2024-04-28 4:32 Sam James
2024-04-28 4:32 Sam James
2024-04-28 4:32 Sam James
2024-04-28 4:32 Sam James
2024-04-28 4:32 Sam James
2024-04-28 4:32 Sam James
2024-04-28 4:32 Sam James
2024-04-28 4:03 Sam James
2024-04-28 4:03 Sam James
2024-04-28 4:03 Sam James
2024-04-28 4:03 Sam James
2024-04-28 4:03 Sam James
2024-04-28 4:03 Sam James
2024-04-28 4:03 Sam James
2024-04-28 4:03 Sam James
2024-04-15 2:09 Sam James
2024-04-15 2:03 Sam James
2024-04-06 9:04 Sam James
2023-06-29 6:18 Sam James
2023-06-25 19:17 Sam James
2023-06-02 18:39 Sam James
2023-06-02 0:33 Sam James
2023-05-29 18:21 Sam James
2023-05-21 2:22 Sam James
2023-05-13 7:15 Arthur Zamarin
2023-05-13 3:54 Sam James
2023-05-13 3:54 Sam James
2023-05-13 3:34 Sam James
2023-05-13 3:17 Sam James
2023-05-13 3:17 Sam James
2023-05-13 3:17 Sam James
2023-05-13 3:17 Sam James
2023-05-13 2:35 Sam James
2023-04-13 7:27 Sam James
2023-04-13 1:49 Sam James
2023-02-24 12:59 Sam James
2023-02-22 7:42 Sam James
2023-01-01 1:30 Sam James
2022-12-30 20:02 Mike Gilbert
2022-12-30 20:02 Mike Gilbert
2022-12-30 20:02 Mike Gilbert
2022-12-30 20:02 Mike Gilbert
2022-12-29 16:17 James Le Cuirot
2022-12-16 20:45 Arthur Zamarin
2022-12-16 15:54 Arthur Zamarin
2022-12-06 16:55 Sam James
2022-11-06 3:17 Mike Gilbert
2022-11-06 3:12 Mike Gilbert
2022-11-06 3:12 Mike Gilbert
2022-11-06 3:12 Mike Gilbert
2022-11-06 3:12 Mike Gilbert
2022-09-28 20:17 Sam James
2022-09-25 5:05 Sam James
2022-09-25 1:15 Sam James
2022-09-19 3:05 Sam James
2022-09-19 3:05 Sam James
2022-09-11 16:49 Sam James
2022-09-11 16:43 Sam James
2022-09-11 14:50 Sam James
2022-09-09 12:41 Sam James
2022-09-09 12:40 Sam James
2022-09-09 12:34 Sam James
2022-09-09 11:30 Sam James
2022-09-09 11:19 Sam James
2022-09-01 2:21 Sam James
2022-08-29 19:06 Sam James
2022-08-26 10:03 Sam James
2022-08-26 6:36 Sam James
2022-08-26 6:36 Sam James
2022-07-29 2:54 Sam James
2022-05-14 9:39 Jakov Smolić
2022-05-14 9:39 Jakov Smolić
2022-05-14 9:19 Jakov Smolić
2022-05-14 9:18 Jakov Smolić
2022-05-14 9:18 Jakov Smolić
2022-05-14 9:18 Jakov Smolić
2022-05-14 9:17 Arthur Zamarin
2022-05-14 8:35 Jakov Smolić
2022-05-08 9:02 WANG Xuerui
2022-05-08 9:02 WANG Xuerui
2022-05-03 17:52 Arthur Zamarin
2022-05-03 2:47 Sam James
2022-05-01 0:40 Sam James
2022-04-29 19:21 Sam James
2022-04-29 19:21 Sam James
2022-04-29 8:14 Sam James
2022-04-29 6:05 Agostino Sarubbo
2022-04-29 6:04 Agostino Sarubbo
2022-04-29 6:04 Agostino Sarubbo
2022-04-28 0:55 Sam James
2022-04-28 0:55 Sam James
2022-04-28 0:46 Sam James
2022-04-06 18:08 David Seifert
2021-11-11 3:28 Sam James
2021-11-10 3:19 Sam James
2021-11-01 2:23 Mike Frysinger
2021-10-27 15:07 Sam James
2021-10-27 4:13 Sam James
2021-10-26 3:14 Sam James
2021-10-24 0:19 Sam James
2021-10-23 13:51 Sam James
2021-10-23 13:51 Sam James
2021-10-23 13:51 Sam James
2021-10-23 13:51 Sam James
2021-10-22 8:21 Lars Wendler
2021-09-18 18:26 Sam James
2021-07-19 13:59 Lars Wendler
2021-05-09 12:53 David Seifert
2021-01-06 15:35 Fabian Groffen
2020-12-26 20:59 Sam James
2020-12-26 20:56 Sam James
2020-11-27 23:51 Sam James
2020-07-14 10:49 Lars Wendler
2020-05-11 16:49 Agostino Sarubbo
2020-05-10 8:10 Sergei Trofimovich
2020-05-08 17:15 Agostino Sarubbo
2020-05-08 17:13 Agostino Sarubbo
2020-05-08 17:11 Agostino Sarubbo
2020-05-06 14:23 Agostino Sarubbo
2020-03-29 10:16 Sergei Trofimovich
2020-02-13 10:20 Lars Wendler
2019-12-24 14:00 Mikle Kolyada
2019-12-17 21:41 Sergei Trofimovich
2019-12-15 14:07 Agostino Sarubbo
2019-12-15 13:59 Agostino Sarubbo
2019-12-15 12:48 Agostino Sarubbo
2019-12-15 11:38 Agostino Sarubbo
2019-12-15 10:36 Mikle Kolyada
2019-12-14 23:01 Aaron Bauman
2019-07-28 20:07 Mikle Kolyada
2019-07-28 20:07 Mikle Kolyada
2019-07-28 20:07 Mikle Kolyada
2019-07-21 14:55 Aaron Bauman
2019-07-21 8:16 Sergei Trofimovich
2019-07-19 11:33 Agostino Sarubbo
2019-07-18 14:26 Agostino Sarubbo
2019-07-18 13:11 Agostino Sarubbo
2019-07-18 13:07 Agostino Sarubbo
2019-07-18 13:06 Agostino Sarubbo
2019-07-18 7:26 Agostino Sarubbo
2019-07-17 14:03 Agostino Sarubbo
2019-07-17 12:17 Mikle Kolyada
2019-07-16 15:13 Lars Wendler
2019-07-16 15:13 Lars Wendler
2019-06-08 22:25 James Le Cuirot
2019-05-21 18:21 Lars Wendler
2019-05-03 23:03 Mikle Kolyada
2018-06-25 22:02 Mike Frysinger
2018-05-17 8:49 Mikle Kolyada
2018-04-17 18:56 Lars Wendler
2018-04-17 17:58 Thomas Deutschmann
2018-04-15 17:01 Mikle Kolyada
2018-04-08 6:54 Matt Turner
2018-03-31 9:38 Jeroen Roovers
2018-03-28 19:45 Mart Raudsepp
2018-03-28 7:47 Lars Wendler
2018-03-27 19:07 Sergei Trofimovich
2018-03-25 20:22 Sergei Trofimovich
2018-03-25 13:46 Sergei Trofimovich
2018-03-24 21:19 Sergei Trofimovich
2018-03-24 8:00 Mikle Kolyada
2018-02-21 14:52 Lars Wendler
2018-02-21 8:13 Lars Wendler
2018-02-21 5:19 Jeroen Roovers
2018-02-20 13:57 Lars Wendler
2018-01-28 21:22 Lars Wendler
2018-01-20 18:34 Mike Frysinger
2018-01-02 11:08 Mike Frysinger
2017-12-31 21:49 Michał Górny
2017-03-09 5:01 Mike Frysinger
2017-01-15 15:28 Benda XU
2016-12-06 5:42 Mike Frysinger
2016-12-04 15:45 Lars Wendler
2016-11-15 15:40 Mike Frysinger
2016-11-15 15:40 Mike Frysinger
2016-10-26 16:35 Markus Meier
2016-10-21 18:13 Tobias Klausmann
2016-10-21 18:11 Tobias Klausmann
2016-10-09 7:30 Jeroen Roovers
2016-02-09 14:54 Fabian Groffen
2015-12-21 19:01 Michał Górny
2015-12-21 14:49 Patrick Lauer
2015-11-24 17:31 Mike Frysinger
2015-10-14 5:40 Benda XU
2015-10-02 12:01 Michał Górny
2015-08-31 18:44 Fabian Groffen
2015-08-30 1:52 Mike Gilbert
2015-08-28 17:39 Mike Frysinger
2015-08-28 10:53 Jason Zaman
2015-08-27 17:03 Jason Zaman
2015-08-27 17:03 Jason Zaman
2015-08-27 11:59 Jason Zaman
2015-08-27 6:53 Mike Frysinger
2015-08-26 18:20 Mike Frysinger
2015-08-26 12:28 Justin Lecher
2015-08-26 12:19 Justin Lecher
2015-08-17 13:52 Mike Frysinger
2015-08-17 13:52 Mike Frysinger
2015-08-12 10:38 Mike Frysinger
2015-08-12 10:38 Mike Frysinger
2015-08-12 10:38 Mike Frysinger
2015-08-12 10:38 Mike Frysinger
2015-08-12 10:38 Mike Frysinger
2015-08-12 10:38 Mike Frysinger
2015-08-12 10:38 Mike Frysinger
2015-08-12 10:09 Mike Frysinger
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=1529964073.a4fad719c87e66e2bcd90a5db59b25cd2d383555.vapier@gentoo \
--to=vapier@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