Skip to contentSkip to conversation

ncurses: fix hanging installation due to old version of tic (series)

PATCH New Thomas De Schampheleire 1 participant 3 messages Mar 28, 2011

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 ncurses: fix hanging installation due to old version of tic (series)

During installation of ncurses, the 'tic' program from the host is used. In some cases, this version of tic is too old for the data to be processed, and the installation hangs indefinitely (already reported in July 2010, see [1])

With this patch, a static version of tic is built and used during the installation step of target ncurses. This method is based on a similar fix in Gentoo Linux (see [2] for the report and [3] for the solution).

Note that in order to build a host version of tic, I used the 'host' infrastructure of GENTARGETS. To avoid the install step (as it is also using the wrong tic and is really not needed) I added the recognition of HOST_PKGFOO_INSTALL_HOST to GENTARGETS, as a separate patch.

[1] http://lists.busybox.net/pipermail/buildroot/2010-July/036100.html
[2] http://bugs.gentoo.org/show_bug.cgi?id=249363#c25
[3] http://sources.gentoo.org/cgi-bin/viewvc.cgi/gentoo-x86/sys-libs/ncurses/ncurses-5.7-r2.ebuild

---
 package/Makefile.package.in |   6 +++++-
 package/ncurses/ncurses.mk  |  21 ++++++++++++++++++++-
 2 files changed, 25 insertions(+), 2 deletions(-)
#1 lore raw

PATCH 1/1 GENTARGETS: Allow disabling host package installation

For target builds, it's already possible to enable/disable installation in the target and staging directories. Host builds, however, are installed unconditionally.
In some cases, installation is not appropriate; building the package is enough. This patch checks whether the new variable HOST_PKGFOO_INSTALL_HOST equals NO, in which case the installation is not done.
This principle is inspired by the PKGFOO_INSTALL_STAGING and PKGFOO_INSTALL_TARGET variables, but with negative logic to suit the common case.

---
 package/Makefile.package.in |  6 +++++-
 1 files changed, 5 insertions(+), 1 deletions(-)
package/Makefile.package.in +5 -1
@@ -458,7 +458,11 @@
 $(1)-install-staging:
 endif
 
-$(1)-install-host:      $(1)-build $$($(2)_TARGET_INSTALL_HOST)
+ifneq ($$($(2)_INSTALL_HOST),NO)
+$(1)-install-host:	$(1)-build $$($(2)_TARGET_INSTALL_HOST)
+else
+$(1)-install-host:	$(1)-build
+endif
 
 $(1)-build:		$(1)-configure \
 			$$($(2)_TARGET_BUILD)
#2 lore raw

PATCH 1/1 ncurses: fix hanging installation due to old version of tic

In reply to Thomas De Schampheleire

During installation of ncurses, the 'tic' program from the host is used. In some cases, this version of tic is too old for the data to be processed, and the installation hangs indefinitely (already reported in July 2010, see [1])

With this patch, a static version of tic is built and used during the installation step of target ncurses. This method is based on a similar fix in Gentoo Linux (see [2] for the report and [3] for the solution).

[1] http://lists.busybox.net/pipermail/buildroot/2010-July/036100.html
[2] http://bugs.gentoo.org/show_bug.cgi?id=249363#c25
[3] http://sources.gentoo.org/cgi-bin/viewvc.cgi/gentoo-x86/sys-libs/ncurses/ncurses-5.7-r2.ebuild

---
 package/ncurses/ncurses.mk |  21 ++++++++++++++++++++-
 1 files changed, 20 insertions(+), 1 deletions(-)
package/ncurses/ncurses.mk +20 -1
@@ -27,6 +27,7 @@
 NCURSES_SITE = $(BR2_GNU_MIRROR)/ncurses
 NCURSES_SOURCE = ncurses-$(NCURSES_VERSION).tar.gz
 NCURSES_INSTALL_STAGING = YES
+NCURSES_DEPENDENCIES = host-ncurses
 
 NCURSES_CONF_OPT = \
 	--with-shared \
@@ -118,6 +119,24 @@
 	cp -dpf $(STAGING_DIR)/usr/share/terminfo/l/linux $(TARGET_DIR)/usr/share/terminfo/l
 	-$(STRIPCMD) $(STRIP_STRIP_UNNEEDED) $(TARGET_DIR)/usr/lib/libncurses.so*
 	$(NCURSES_INSTALL_TARGET_DEVFILES)
-endef # NCURSES_INSTALL_TARGET_CMDS
+endef
+
+#
+# On systems with an older version of tic, the installation of ncurses hangs
+# forever. To resolve the problem, build a static version of tic on host
+# ourselves, and use that during installation.
+#
+define HOST_NCURSES_BUILD_CMDS
+	$(MAKE1) -C $(@D) sources
+	$(MAKE) -C $(@D)/progs tic
+endef
+
+HOST_NCURSES_CONF_OPT = \
+	--without-shared
+
+HOST_NCURSES_INSTALL_HOST = NO
+
+NCURSES_MAKE_ENV += PATH=$(HOST_NCURSES_DIR)/progs:$(PATH)
 
 $(eval $(call AUTOTARGETS,package,ncurses))
+$(eval $(call AUTOTARGETS,package,ncurses,host))