sys-apps/coreutils: add $COLORTERM support to 9.0-r2

Package-Manager: Portage-3.0.30, Repoman-3.0.3
Signed-off-by: Arsen Arsenović <arsen@aarsen.me>
Closes: https://github.com/gentoo/gentoo/pull/24174
Signed-off-by: Sam James <sam@gentoo.org>
This commit is contained in:
Arsen Arsenović
2022-02-12 23:12:23 +01:00
committed by Sam James
parent dcf79061e8
commit 76eb7a1b11
2 changed files with 358 additions and 0 deletions

View File

@@ -0,0 +1,228 @@
# Copyright 1999-2022 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=7
PYTHON_COMPAT=( python3_{8..10} )
inherit flag-o-matic python-any-r1 toolchain-funcs
PATCH="${PN}-8.30-patches-01"
DESCRIPTION="Standard GNU utilities (chmod, cp, dd, ls, sort, tr, head, wc, who,...)"
HOMEPAGE="https://www.gnu.org/software/coreutils/"
SRC_URI="mirror://gnu/${PN}/${P}.tar.xz
!vanilla? (
mirror://gentoo/${PATCH}.tar.xz
https://dev.gentoo.org/~polynomial-c/dist/${PATCH}.tar.xz
)"
LICENSE="GPL-3"
SLOT="0"
KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~x86-linux"
IUSE="acl caps gmp hostname kill multicall nls selinux +split-usr static test vanilla xattr"
RESTRICT="!test? ( test )"
LIB_DEPEND="acl? ( sys-apps/acl[static-libs] )
caps? ( sys-libs/libcap )
gmp? ( dev-libs/gmp:=[static-libs] )
xattr? ( sys-apps/attr[static-libs] )"
RDEPEND="!static? ( ${LIB_DEPEND//\[static-libs]} )
selinux? ( sys-libs/libselinux )
nls? ( virtual/libintl )"
DEPEND="
${RDEPEND}
static? ( ${LIB_DEPEND} )
"
BDEPEND="
app-arch/xz-utils
dev-lang/perl
test? (
dev-lang/perl
dev-perl/Expect
dev-util/strace
${PYTHON_DEPS}
)
"
RDEPEND+="
hostname? ( !sys-apps/net-tools[hostname] )
kill? (
!sys-apps/util-linux[kill]
!sys-process/procps[kill]
)
!app-misc/realpath
!<sys-apps/util-linux-2.13
!<sys-apps/sandbox-2.10-r4
!sys-apps/stat
!net-mail/base64
!sys-apps/mktemp
!<app-forensics/tct-1.18-r1
!<net-fs/netatalk-2.0.3-r4"
pkg_setup() {
if use test ; then
python-any-r1_pkg_setup
fi
}
src_prepare() {
local PATCHES=(
# Upstream patches
"${FILESDIR}"/${P}-fix-chmod-symlink-exit.patch
)
if ! use vanilla ; then
PATCHES+=( "${WORKDIR}"/patch )
PATCHES+=( "${FILESDIR}"/${PN}-8.32-sandbox-env-test.patch )
PATCHES+=( "${FILESDIR}"/${PN}-9.0-r1-0001-dircolors-consider-COLORTERM-sufficient-for-color.patch )
fi
default
# Since we've patched many .c files, the make process will try to
# re-build the manpages by running `./bin --help`. When doing a
# cross-compile, we can't do that since 'bin' isn't a native bin.
#
# Also, it's not like we changed the usage on any of these things,
# so let's just update the timestamps and skip the help2man step.
set -- man/*.x
touch ${@/%x/1} || die
# Avoid perl dep for compiled in dircolors default (bug #348642)
if ! has_version dev-lang/perl ; then
touch src/dircolors.h || die
touch ${@/%x/1} || die
fi
}
src_configure() {
local myconf=(
--with-packager="Gentoo"
--with-packager-version="${PVR} (p${PATCH_VER:-0})"
--with-packager-bug-reports="https://bugs.gentoo.org/"
# kill/uptime - procps
# groups/su - shadow
# hostname - net-tools
--enable-install-program="arch,$(usev hostname),$(usev kill)"
--enable-no-install-program="groups,$(usev !hostname),$(usev !kill),su,uptime"
--enable-largefile
$(usex caps '' --disable-libcap)
$(use_enable nls)
$(use_enable acl)
$(use_enable multicall single-binary)
$(use_enable xattr)
$(use_with gmp libgmp)
)
if use gmp ; then
myconf+=( --with-libgmp-prefix="${ESYSROOT}"/usr )
fi
if tc-is-cross-compiler && [[ ${CHOST} == *linux* ]] ; then
# bug #311569
export fu_cv_sys_stat_statfs2_bsize=yes
# bug #416629
export gl_cv_func_realpath_works=yes
fi
# bug #409919
export gl_cv_func_mknod_works=yes
if use static ; then
append-ldflags -static
# bug #321821
sed -i '/elf_sys=yes/s:yes:no:' configure || die
fi
if ! use selinux ; then
# bug #301782
export ac_cv_{header_selinux_{context,flash,selinux}_h,search_setfilecon}=no
fi
econf "${myconf[@]}"
}
src_test() {
# Known to fail with FEATURES=usersandbox (bug #439574):
# - tests/du/long-from-unreadable.sh} (bug #413621)
# - tests/rm/deep-2.sh (bug #413621)
# - tests/dd/no-allocate.sh (bug #629660)
if has usersandbox ${FEATURES} ; then
ewarn "You are emerging ${P} with 'usersandbox' enabled." \
"Expect some test failures or emerge with 'FEATURES=-usersandbox'!"
fi
# Non-root tests will fail if the full path isn't
# accessible to non-root users
chmod -R go-w "${WORKDIR}" || die
chmod a+rx "${WORKDIR}" || die
# coreutils tests like to do `mount` and such with temp dirs,
# so make sure:
# - /etc/mtab is writable (bug #265725)
# - /dev/loop* can be mounted (bug #269758)
mkdir -p "${T}"/mount-wrappers || die
mkwrap() {
local w ww
for w in "${@}" ; do
ww="${T}/mount-wrappers/${w}"
cat <<-EOF > "${ww}"
#!${EPREFIX}/bin/sh
exec env SANDBOX_WRITE="\${SANDBOX_WRITE}:/etc/mtab:/dev/loop" $(type -P ${w}) "\$@"
EOF
chmod a+rx "${ww}" || die
done
}
mkwrap mount umount
addwrite /dev/full
#export RUN_EXPENSIVE_TESTS="yes"
#export FETISH_GROUPS="portage wheel"
env PATH="${T}/mount-wrappers:${PATH}" \
emake -j1 -k check
}
src_install() {
default
insinto /etc
newins src/dircolors.hin DIR_COLORS
if use split-usr ; then
cd "${ED}"/usr/bin || die
dodir /bin
# Move critical binaries into /bin (required by FHS)
local fhs="cat chgrp chmod chown cp date dd df echo false ln ls
mkdir mknod mv pwd rm rmdir stty sync true uname"
mv ${fhs} ../../bin/ || die "Could not move FHS bins!"
if use hostname ; then
mv hostname ../../bin/ || die
fi
if use kill ; then
mv kill ../../bin/ || die
fi
# Move critical binaries into /bin (common scripts)
# (Why are these required for booting?)
local com="basename chroot cut dir dirname du env expr head mkfifo
mktemp readlink seq sleep sort tail touch tr tty vdir wc yes"
mv ${com} ../../bin/ || die "Could not move common bins!"
# Create a symlink for uname in /usr/bin/ since autotools require it.
# (Other than uname, we need to figure out why we are
# creating symlinks for these in /usr/bin instead of leaving
# the files there in the first place...)
local x
for x in ${com} uname ; do
dosym ../../bin/${x} /usr/bin/${x}
done
fi
}
pkg_postinst() {
ewarn "Make sure you run 'hash -r' in your active shells."
ewarn "You should also re-source your shell settings for LS_COLORS"
ewarn " changes, such as: source /etc/profile"
}

View File

@@ -0,0 +1,130 @@
From cbb451b63faee375415691c1abc8a6fd3e1677a9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?P=C3=A1draig=20Brady?= <P@draigBrady.com>
Date: Sat, 12 Feb 2022 22:54:07 +0100
Subject: [PATCH] dircolors: consider COLORTERM as well as TERM env vars
COLORTERM is an environment used usually to expose truecolor support in
terminal emulators. Therefore support matches on that in addition
to TERM. Also set the default COLORTERM match pattern so that
we apply colors if COLORTERM is any value.
This implicitly supports a terminal like "foot"
without a need for an explicit TERM entry.
* NEWS: Mention the new feature.
* src/dircolors.c (main): Match COLORTERM like we do for TERM.
* src/dircolors.hin: Add default config to match any COLORTERM.
* tests/misc/dircolors.pl: Add test cases.
---
Backported from coreutils 75c9fc6740e93dba95f63a1e5e92bd5cf17f1743.
See also https://lists.gnu.org/archive/html/coreutils/2022-02/msg00019.html
NEWS | 3 +++
src/dircolors.c | 15 ++++++++++++++-
src/dircolors.hin | 7 +++++--
tests/misc/dircolors.pl | 14 ++++++++++++++
4 files changed, 36 insertions(+), 3 deletions(-)
diff --git a/NEWS b/NEWS
index f2fbcbb..646c132 100644
--- a/NEWS
+++ b/NEWS
@@ -64,6 +64,9 @@ GNU coreutils NEWS -*- outline -*-
on (1024*5) buffer boundaries
[bug introduced in coreutils-8.31]
+ dircolors will now also match COLORTERM in addition to TERM environment
+ variables. The default config will apply colors with any COLORTERM set.
+
** Changes in behavior
cp and install now default to copy-on-write (COW) if available.
diff --git a/src/dircolors.c b/src/dircolors.c
index b765ded..64ff665 100644
--- a/src/dircolors.c
+++ b/src/dircolors.c
@@ -243,6 +243,7 @@ dc_parse_stream (FILE *fp, char const *filename)
size_t input_line_size = 0;
char const *line;
char const *term;
+ char const *colorterm;
bool ok = true;
/* State for the parser. */
@@ -253,6 +254,11 @@ dc_parse_stream (FILE *fp, char const *filename)
if (term == NULL || *term == '\0')
term = "none";
+ /* Also match $COLORTERM. */
+ colorterm = getenv ("COLORTERM");
+ if (colorterm == NULL)
+ colorterm = ""; /* Doesn't match default "?*" */
+
while (true)
{
char *keywd, *arg;
@@ -299,10 +305,17 @@ dc_parse_stream (FILE *fp, char const *filename)
else if (state != ST_TERMSURE)
state = ST_TERMNO;
}
+ else if (c_strcasecmp (keywd, "COLORTERM") == 0)
+ {
+ if (fnmatch (arg, colorterm, 0) == 0)
+ state = ST_TERMSURE;
+ else if (state != ST_TERMSURE)
+ state = ST_TERMNO;
+ }
else
{
if (state == ST_TERMSURE)
- state = ST_TERMYES; /* Another TERM can cancel */
+ state = ST_TERMYES; /* Another {COLOR,}TERM can cancel. */
if (state != ST_TERMNO)
{
diff --git a/src/dircolors.hin b/src/dircolors.hin
index b5d6452..6d2d3a4 100644
--- a/src/dircolors.hin
+++ b/src/dircolors.hin
@@ -8,8 +8,11 @@
# The keywords COLOR, OPTIONS, and EIGHTBIT (honored by the
# slackware version of dircolors) are recognized but ignored.
-# Below are TERM entries, which can be a glob patterns, to match
-# against the TERM environment variable to determine if it is colorizable.
+# Global config options can be specified before TERM or COLORTERM entries
+
+# Below are TERM or COLORTERM entries, which can be glob patterns, which
+# restrict following config to systems with matching environment variables.
+COLORTERM ?*
TERM Eterm
TERM ansi
TERM *color*
diff --git a/tests/misc/dircolors.pl b/tests/misc/dircolors.pl
index 2c57104..464acfd 100755
--- a/tests/misc/dircolors.pl
+++ b/tests/misc/dircolors.pl
@@ -42,6 +42,20 @@ my @Tests =
['term-4', '-b', {IN => "TERM N*match\nowt 40;33\n"},
{OUT => "LS_COLORS='';\nexport LS_COLORS\n"}],
+ ['print-clash1', '-p', '--print-ls',
+ {ERR => "dircolors: options --print-database and --print-ls-colors " .
+ "are mutually exclusive\n" .
+ "Try 'dircolors --help' for more information.\n"},
+ {EXIT => 1}],
+ ['print-clash2', '-b', '--print-database',
+ {ERR => "dircolors: the options to output non shell syntax,\n" .
+ "and to select a shell syntax are mutually exclusive\n" .
+ "Try 'dircolors --help' for more information.\n"},
+ {EXIT => 1}],
+
+ ['print-ls-colors', '--print-ls-colors', {IN => "OWT 40;33\n"},
+ {OUT => "\x1B[40;33mtw\t40;33\x1B[0m\n"}],
+
# CAREFUL: always specify the -b option, unless explicitly testing
# for csh syntax output.
);
--
2.34.1