diff mbox series

[V6] rxvt-unicode: Fix installing of terminfo

Message ID 20240227071004.2402854-1-changqing.li@windriver.com
State Accepted, archived
Commit daff3b4bf9d7b77a8170d9bc6f0b9c81b0a077d7
Headers show
Series [V6] rxvt-unicode: Fix installing of terminfo | expand

Commit Message

Changqing Li Feb. 27, 2024, 7:10 a.m. UTC
From: Changqing Li <changqing.li@windriver.com>

For cross compile, TIC will be native tic in recipe-sysroot-native, and
the terminfo path will be native path, the rxvt-unicode terminfo will be
wrongly installed to native path.

disable the terminfo installation by setting TIC to : and use qemu to
install terminfo to make sure ncurses on target env use the correct
terminfo

Signed-off-by: Changqing Li <changqing.li@windriver.com>
---
 .../rxvt-unicode/rxvt-unicode.inc             | 20 +++++++++-
 ...ble-the-terminfo-installation-by-set.patch | 37 +++++++++++++++++++
 2 files changed, 55 insertions(+), 2 deletions(-)
 create mode 100644 meta/recipes-sato/rxvt-unicode/rxvt-unicode/0001-Makefile.in-disable-the-terminfo-installation-by-set.patch

Comments

Alexander Kanavin Feb. 27, 2024, 9:37 a.m. UTC | #1
On Tue, 27 Feb 2024 at 08:10, Changqing Li
<changqing.li@eng.windriver.com> wrote:
> +
> +       install -d ${D}/${sysconfdir}
> +       install -m 0644 ${S}/doc/etc/rxvt-unicode.terminfo ${D}/${sysconfdir}/rxvt-unicode.terminfo
> +}
> +
> +RDEPENDS:${PN} = "ncurses-tools"
> +PACKAGE_WRITE_DEPS += "qemu-native"
> +pkg_postinst:${PN} () {
> +       if [ -n "$D" ]; then
> +               if ${@bb.utils.contains('MACHINE_FEATURES', 'qemu-usermode', 'true', 'false', d)}; then
> +                       outdir=$(${@qemu_run_binary(d, '$D', '${bindir}/tic')} -D 2>&1 | sed -n "2p" | awk '{ print $2 }')
> +                       ${@qemu_run_binary(d, '$D', '${bindir}/tic')} -x ${sysconfdir}/rxvt-unicode.terminfo -o $D$outdir
> +               fi
> +       fi
>  }

I would really prefer to make native tic do the right thing, if the
only problem is that it installs the needed items into the wrong
location.

qemu usermode is notoriously brittle, and isn't available on some
targets at all.

Alex
Changqing Li Feb. 28, 2024, 1:54 a.m. UTC | #2
On 2/27/24 17:37, Alexander Kanavin wrote:
> CAUTION: This email comes from a non Wind River email account!
> Do not click links or open attachments unless you recognize the sender and know the content is safe.
>
> On Tue, 27 Feb 2024 at 08:10, Changqing Li
> <changqing.li@eng.windriver.com>  wrote:
>> +
>> +       install -d ${D}/${sysconfdir}
>> +       install -m 0644 ${S}/doc/etc/rxvt-unicode.terminfo ${D}/${sysconfdir}/rxvt-unicode.terminfo
>> +}
>> +
>> +RDEPENDS:${PN} = "ncurses-tools"
>> +PACKAGE_WRITE_DEPS += "qemu-native"
>> +pkg_postinst:${PN} () {
>> +       if [ -n "$D" ]; then
>> +               if ${@bb.utils.contains('MACHINE_FEATURES', 'qemu-usermode', 'true', 'false', d)}; then
>> +                       outdir=$(${@qemu_run_binary(d, '$D', '${bindir}/tic')} -D 2>&1 | sed -n "2p" | awk '{ print $2 }')
>> +                       ${@qemu_run_binary(d, '$D', '${bindir}/tic')} -x ${sysconfdir}/rxvt-unicode.terminfo -o $D$outdir
>> +               fi
>> +       fi
>>   }
> I would really prefer to make native tic do the right thing, if the
> only problem is that it installs the needed items into the wrong
> location.

Yes, the wrong location is the only problem. V4 patch is a way to make 
native tic install to  a right location.

but this solution (hardcode output dir to $(DESTDIR)$(datadir)/terminfo) 
is rejected by upstream.

if use V4 patch,  we need to make it an oe specific patch.


upstream said that to it is better to use target tic to generate the 
terminfo to make sure ncurses in the

target environment can get the correct terminfo. That's why I changed to 
use target tic. but we do will met

"some targets don't support usermode" problem.

So what's your suggestion about this? use V4 patch?

if you think the hardcode path $(DESTDIR)$(datadir)/terminfo) is not 
good in v4,  I can do some change for V4.

Since native tic and target tic is from the same recipe, the TERMINFO 
should be the same except native tic is under ${RECIPE_SYSROOT_NATIVE}.

how about like what I did in this patch,  get the native outputdir from 
native tic, cut ${RECIPE_SYSROOT_NATIVE} to get target outputdir, then 
pass it to nativetic .. -o  ${DESTDIR}${target outputdir}

//Changqing

>
> qemu usermode is notoriously brittle, and isn't available on some
> targets at all.
>
> Alex
Alexander Kanavin Feb. 28, 2024, 9:30 a.m. UTC | #3
On Wed, 28 Feb 2024 at 02:54, Changqing Li <changqing.li@windriver.com> wrote:

> Yes, the wrong location is the only problem. V4 patch is a way to make native tic install to  a right location.
>
> but this solution (hardcode output dir to $(DESTDIR)$(datadir)/terminfo) is rejected by upstream.
>
> if use V4 patch,  we need to make it an oe specific patch.
>
>
> upstream said that to it is better to use target tic to generate the terminfo to make sure ncurses in the
>
> target environment can get the correct terminfo. That's why I changed to use target tic. but we do will met
>
> "some targets don't support usermode" problem.
>
> So what's your suggestion about this? use V4 patch?

I would suggest this:

- recipe needs to depend on ncurses-native, otherwise we have a
floating dependency on tic executable

- drop the patch, and instead just add a manual tic invocation into
do_install:append () that places the output into correct directory in
${D}. As far as I understand, what doc/Makefile does is harmless, but
you can additionally set environment variable TIC to : or
/usr/bin/true as suggested by upstream to avoid that happening.

Alex
diff mbox series

Patch

diff --git a/meta/recipes-sato/rxvt-unicode/rxvt-unicode.inc b/meta/recipes-sato/rxvt-unicode/rxvt-unicode.inc
index e7d520ebef..e6ca10f6e0 100644
--- a/meta/recipes-sato/rxvt-unicode/rxvt-unicode.inc
+++ b/meta/recipes-sato/rxvt-unicode/rxvt-unicode.inc
@@ -11,9 +11,11 @@  DEPENDS = "virtual/libx11 libxt libxft gdk-pixbuf libxmu libptytty"
 SRC_URI = "http://dist.schmorp.de/rxvt-unicode/Attic/rxvt-unicode-${PV}.tar.bz2 \
 	   file://xwc.patch \
 	   file://rxvt.desktop \
-	   file://rxvt.png"
+	   file://rxvt.png \
+	   file://0001-Makefile.in-disable-the-terminfo-installation-by-set.patch \
+"
 
-inherit autotools pkgconfig update-alternatives
+inherit autotools pkgconfig update-alternatives qemu
 
 PROVIDES = "virtual/x-terminal-emulator"
 ALTERNATIVE:${PN} = "x-terminal-emulator"
@@ -53,6 +55,20 @@  do_install:append () {
 
 	install -m 0644 ${WORKDIR}/rxvt.png ${D}/${datadir}/pixmaps
 	install -m 0644 ${WORKDIR}/rxvt.desktop ${D}/${datadir}/applications
+
+	install -d ${D}/${sysconfdir}
+	install -m 0644 ${S}/doc/etc/rxvt-unicode.terminfo ${D}/${sysconfdir}/rxvt-unicode.terminfo
+}
+
+RDEPENDS:${PN} = "ncurses-tools"
+PACKAGE_WRITE_DEPS += "qemu-native"
+pkg_postinst:${PN} () {
+	if [ -n "$D" ]; then
+		if ${@bb.utils.contains('MACHINE_FEATURES', 'qemu-usermode', 'true', 'false', d)}; then
+			outdir=$(${@qemu_run_binary(d, '$D', '${bindir}/tic')} -D 2>&1 | sed -n "2p" | awk '{ print $2 }')
+			${@qemu_run_binary(d, '$D', '${bindir}/tic')} -x ${sysconfdir}/rxvt-unicode.terminfo -o $D$outdir
+		fi
+	fi
 }
 
 FILES:${PN} += "${datadir}/applications/rxvt.desktop ${datadir}/pixmaps/rxvt.png"
diff --git a/meta/recipes-sato/rxvt-unicode/rxvt-unicode/0001-Makefile.in-disable-the-terminfo-installation-by-set.patch b/meta/recipes-sato/rxvt-unicode/rxvt-unicode/0001-Makefile.in-disable-the-terminfo-installation-by-set.patch
new file mode 100644
index 0000000000..6bdbedb3c4
--- /dev/null
+++ b/meta/recipes-sato/rxvt-unicode/rxvt-unicode/0001-Makefile.in-disable-the-terminfo-installation-by-set.patch
@@ -0,0 +1,37 @@ 
+From ff5c75995485ee9c5331e52bb9bf3aa5db6d8837 Mon Sep 17 00:00:00 2001
+From: Changqing Li <changqing.li@windriver.com>
+Date: Wed, 7 Feb 2024 10:35:23 +0800
+Subject: [PATCH] Makefile.in: disable the terminfo installation by setting TIC
+ to :
+
+For cross compile, TIC will be native tic in recipe-sysroot-native, and
+the terminfo path will be native path, the rxvt-unicode terminfo will be
+installed to native path.
+
+disable the terminfo installation by setting TIC to :
+
+Upstream-Status: Inappropriate [ oe specific ]
+
+Signed-off-by: Changqing Li <changqing.li@windriver.com>
+---
+ doc/Makefile.in | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/doc/Makefile.in b/doc/Makefile.in
+index e3d1fe8..1961c93 100644
+--- a/doc/Makefile.in
++++ b/doc/Makefile.in
+@@ -100,8 +100,8 @@ install: all
+ 	$(INSTALL_DATA) rxvtd.1.man   $(DESTDIR)$(man1dir)/$(RXVTNAME)d.$(man1ext)
+ 	$(INSTALL_DATA) rxvt.7.man    $(DESTDIR)$(man7dir)/$(RXVTNAME).$(man7ext)
+ 	$(INSTALL_DATA) rclock.1.man  $(DESTDIR)$(man1dir)/urclock.$(man1ext)
+-	@TIC@ -x $(srcdir)/etc/rxvt-unicode.terminfo || \
+-           @TIC@ $(srcdir)/etc/rxvt-unicode.terminfo
++	: -x $(srcdir)/etc/rxvt-unicode.terminfo || \
++           : $(srcdir)/etc/rxvt-unicode.terminfo
+ 
+ distdepend: alldoc
+ 
+-- 
+2.25.1
+