On Mon, Sep 28, 2020 at 02:09:41PM +0200, Dan Horák wrote:
when looking at a recent issue when a change to lorax templates
broke
composes for ppc64le and s390x I have found that there are packages
that explicitly require the ncurses package and I wonder if all of these
Requires are correct. Because quite some time ago there was a split so
"ncurses" only contains the tools (tic, tac, reset, ...) and
ncurses-base contains the basic terminfo database and the libs live in
ncurses-libs.
[...]
perl-Term-Cap calls "infocmp" so it should be there,
perhaps reduced to
a weak dep, because it has a fall-back path, but I'm not sure about the
other.
perl-Term-Cap has a built-in path. But the path is not a fallback. It's
a primary source and infocmp is called as the fallback.
The built-in path is: /etc/termcap, /usr/share/misc/termcap. But none of these
directories exist in Fedora. ncurses-base has /usr/share/terminfo. My
knowledge about termcap and terminfo is zero, but it seems that
/usr/share/terminfo files are binary files, while perl-Term-Cap expects
a plain text files. Maybe that's the difference between termcap and terminfo.
As a result, perl-Term-Cap always calls infocmp, because it cannot consume
ncurses-base content:
$ strace -fq -e execve -- perl -MTerm::Cap -e 'print
Term::Cap::Tgetent()->{TERMCAP}'
execve("/usr/bin/perl", ["perl", "-MTerm::Cap",
"-e", "print Term::Cap::Tgetent()->{TER"...], 0x7ffdad6ca198 /* 20
vars */) = 0
[pid 24145] execve("/bin/sh", ["sh", "-c", "infocmp -C
2>/dev/null"], 0x56199a3babd0 /* 20 vars */) = 0
[pid 24146] execve("/usr/bin/infocmp", ["infocmp", "-C"],
0x55ba82bdb200 /* 20 vars */) = 0
[pid 24146] +++ exited with 0 +++
[pid 24145] --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=24146, si_uid=500,
si_status=0, si_utime=0, si_stime=0} ---
[pid 24145] +++ exited with 0 +++
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=24145, si_uid=500, si_status=0,
si_utime=0, si_stime=1} ---
screen.xterm-256color|GNU Screen with xterm using 256 colors:\
:am:bs:bw:km:mi:ms:xn:\
:co#80:it#8:li#24:\
:AL=\E[%dL:DC=\E[%dP:DL=\E[%dM:DO=\E[%dB:IC=\E[%d@:\
:K1=\EOw:K2=\EOu:K3=\EOy:K4=\EOq:K5=\EOs:LE=\E[%dD:\
:RI=\E[%dC:SF=\E[%dS:SR=\E[%dT:UP=\E[%dA:ae=\E(B:al=\E[L:\
:as=\E(0:bl=^G:bt=\E[Z:cd=\E[J:ce=\E[K:cl=\E[H\E[2J:\
:cm=\E[%i%d;%dH:cr=\r:cs=\E[%i%d;%dr:ct=\E[3g:dc=\E[P:\
:dl=\E[M:do=\n:ec=\E[%dX:ei=\E[4l:ho=\E[H:im=\E[4h:\
:is=\E[!p\E[?3;4l\E[4l\E>:k1=\EOP:k2=\EOQ:k3=\EOR:\
:k4=\EOS:k5=\E[15~:k6=\E[17~:k7=\E[18~:k8=\E[19~:\
:k9=\E[20~:kD=\E[3~:kI=\E[2~:kN=\E[6~:kP=\E[5~:kb=\177:\
:kd=\EOB:ke=\E[?1l\E>:kh=\E[1~:kl=\EOD:kr=\EOC:\
:ks=\E[?1h\E=:ku=\EOA:le=^H:mb=\E[5m:md=\E[1m:me=\E[0m:\
:mh=\E[2m:mm=\E[?1034h:mo=\E[?1034l:mr=\E[7m:nd=\E[C:\
:rc=\E8:sc=\E7:se=\E[27m:sf=\n:so=\E[7m:sr=\EM:st=\EH:ta=^I:\
:te=\E[?1049l\E[23;0;0t:ti=\E[?1049h\E[22;0;0t:\
:ue=\E[24m:up=\E[A:us=\E[4m:vb=\E[?5h\E[?5l:\
:ve=\E[?12l\E[?25h:vi=\E[?25l:vs=\E[?12;25h:
+++ exited with 0 +++
And thus the hard dependency on ncurses is correct. At the end Term::Cap
documentation defines the Perl module as "a Perl termcap interface". Not as a
terminfo interface.
-- Petr