Message ID | 1389862338.918565.412332853863.3.gpush@pablo |
---|---|
State | Superseded |
Headers | show |
Dear Jeremy Kerr, On Thu, 16 Jan 2014 16:52:18 +0800, Jeremy Kerr wrote: > if BR2_PACKAGE_NCURSES > +config BR2_PACKAGE_NCURSES_WIDEC One empty line between the if line and the config line. > + bool "enable wide char support" > + depends on BR2_PACKAGE_NCURSES dependency not needed since you're inside a if BR2_PACKAGE_NCURSES. I believe this option most likely depends on BR2_USE_WCHAR. Also, maybe name the option BR2_PACKAGE_NCURSES_WCHAR, to match the BR2_USE_WCHAR name we're already using in Buildroot to talk about wide char support. > + help > + Enable wide char & UTF-8 support in ncurses libraries > > config BR2_PACKAGE_NCURSES_TARGET_PANEL > bool "ncurses libpanel in target" > diff --git a/package/ncurses/ncurses.mk b/package/ncurses/ncurses.mk > index f3319763..ba4cacd1 100644 > --- a/package/ncurses/ncurses.mk > +++ b/package/ncurses/ncurses.mk > @@ -12,7 +12,7 @@ HOST_NCURSES_DEPENDENCIES = > NCURSES_PROGS = clear infocmp tabs tic toe tput tset > NCURSES_LICENSE = MIT with advertising clause > NCURSES_LICENSE_FILES = README > -NCURSES_CONFIG_SCRIPTS = ncurses5-config > +NCURSES_CONFIG_SCRIPTS = ncurses$(W)5-config > > NCURSES_CONF_OPT = \ > $(if $(BR2_PREFER_STATIC_LIB),--without-shared,--with-shared) \ > @@ -36,6 +36,15 @@ ifeq ($(BR2_PACKAGE_BUSYBOX),y) > NCURSES_DEPENDENCIES += busybox > endif > > +ifeq ($(BR2_PACKAGE_NCURSES_WIDEC),y) > +NCURSES_CONF_OPT += --enable-widec > +W=w > +W_LINK=ln -sf > +else > +W= > +W_LINK=: > +endif We really don't want to have variables named W and W_LINK. The variable namespace in Buildroot is global. So if one package defines W, and another package uses it, we screwed. So all variables should be prefixed by the name of the package. > + > ifneq ($(BR2_ENABLE_DEBUG),y) > NCURSES_CONF_OPT += --without-debug > endif > @@ -48,19 +57,22 @@ ifneq ($(BR2_PREFER_STATIC_LIB),y) > > ifeq ($(BR2_PACKAGE_NCURSES_TARGET_PANEL),y) > define NCURSES_INSTALL_TARGET_PANEL > - cp -dpf $(NCURSES_DIR)/lib/libpanel.so* $(TARGET_DIR)/usr/lib/ > + cp -dpf $(NCURSES_DIR)/lib/libpanel$(W).so* $(TARGET_DIR)/usr/lib/ > + $(W_LINK) libpanelw.so $(TARGET_DIR)/usr/lib/libpanel.so > endef > endif > > ifeq ($(BR2_PACKAGE_NCURSES_TARGET_FORM),y) > define NCURSES_INSTALL_TARGET_FORM > - cp -dpf $(NCURSES_DIR)/lib/libform.so* $(TARGET_DIR)/usr/lib/ > + cp -dpf $(NCURSES_DIR)/lib/libform$(W).so* $(TARGET_DIR)/usr/lib/ > + $(W_LINK) libformw.so $(TARGET_DIR)/usr/lib/libform.so > endef > endif > > ifeq ($(BR2_PACKAGE_NCURSES_TARGET_MENU),y) > define NCURSES_INSTALL_TARGET_MENU > - cp -dpf $(NCURSES_DIR)/lib/libmenu.so* $(TARGET_DIR)/usr/lib/ > + cp -dpf $(NCURSES_DIR)/lib/libmenu$(W).so* $(TARGET_DIR)/usr/lib/ > + $(W_LINK) libmenuw.so $(TARGET_DIR)/usr/lib/libmenu.so > endef > endif > > @@ -78,7 +90,8 @@ endif > > define NCURSES_INSTALL_TARGET_CMDS > mkdir -p $(TARGET_DIR)/usr/lib > - $(if $(BR2_PREFER_STATIC_LIB),,cp -dpf $(NCURSES_DIR)/lib/libncurses.so* $(TARGET_DIR)/usr/lib/) > + $(if $(BR2_PREFER_STATIC_LIB),,cp -dpf $(NCURSES_DIR)/lib/libncurses$(W).so* $(TARGET_DIR)/usr/lib/) > + $(W_LINK) libncursesw.so $(TARGET_DIR)/usr/lib/libncurses.so > $(NCURSES_INSTALL_TARGET_PANEL) > $(NCURSES_INSTALL_TARGET_FORM) > $(NCURSES_INSTALL_TARGET_MENU) > @@ -101,6 +114,33 @@ define NCURSES_INSTALL_TARGET_CMDS > cp -dpf $(STAGING_DIR)/usr/share/terminfo/s/screen $(TARGET_DIR)/usr/share/terminfo/s > endef # NCURSES_INSTALL_TARGET_CMDS > > +define NCURSES_POST_INSTALL_SYMLINK > + $(W_LINK) libncursesw.so $(STAGING_DIR)/usr/lib/libncurses.so > +endef > +NCURSES_POST_INSTALL_STAGING_HOOKS += NCURSES_POST_INSTALL_SYMLINK > + > +ifeq ($(BR2_PACKAGE_NCURSES_TARGET_PANEL),y) > +define NCURSES_POST_INSTALL_SYMLINK_PANEL > + $(W_LINK) libpanelw.so $(STAGING_DIR)/usr/lib/libpanel.so > +endef > +NCURSES_POST_INSTALL_STAGING_HOOKS += NCURSES_POST_INSTALL_SYMLINK_PANEL > +endif > + > +ifeq ($(BR2_PACKAGE_NCURSES_TARGET_FORM),y) > +define NCURSES_POST_INSTALL_SYMLINK_FORM > + $(W_LINK) libformw.so $(STAGING_DIR)/usr/lib/libform.so > +endef > +NCURSES_POST_INSTALL_STAGING_HOOKS += NCURSES_POST_INSTALL_SYMLINK_FORM > +endif > + > +ifeq ($(BR2_PACKAGE_NCURSES_TARGET_MENU),y) > +define NCURSES_POST_INSTALL_SYMLINK_MENU > + $(W_LINK) libmenuw.so $(STAGING_DIR)/usr/lib/libmenu.so > +endef > +NCURSES_POST_INSTALL_STAGING_HOOKS += NCURSES_POST_INSTALL_SYMLINK_MENU > +endif Pffiou, that's a lot of things. Maybe we could refactor this a little with the target installation to do something a bit smarter like: NCURSES_LIBS-y += libncurses NCURSES_LIBS-$(BR2_PACKAGE_NCURSES_TARGET_MENU) += libmenu NCURSES_LIBS-$(BR2_PACKAGE_NCURSES_TARGET_PANEL) += libpanel NCURSES_LIBS-$(BR2_PACKAGE_NCURSES_TARGET_FORM) += libform and then use $(NCURSES_LIBS-y) and some loops in target installation and in a staging post installation hook to create the appropriate symbolic links. Thanks! Thomas
Hi Thomas, >> + bool "enable wide char support" >> + depends on BR2_PACKAGE_NCURSES > > dependency not needed since you're inside a if BR2_PACKAGE_NCURSES. > > I believe this option most likely depends on BR2_USE_WCHAR. > > Also, maybe name the option BR2_PACKAGE_NCURSES_WCHAR, to match the > BR2_USE_WCHAR name we're already using in Buildroot to talk about wide > char support. OK, makes sense, fixed. > Pffiou, that's a lot of things. Maybe we could refactor this a little > with the target installation to do something a bit smarter like: > > NCURSES_LIBS-y += libncurses > NCURSES_LIBS-$(BR2_PACKAGE_NCURSES_TARGET_MENU) += libmenu > NCURSES_LIBS-$(BR2_PACKAGE_NCURSES_TARGET_PANEL) += libpanel > NCURSES_LIBS-$(BR2_PACKAGE_NCURSES_TARGET_FORM) += libform > > and then use $(NCURSES_LIBS-y) and some loops in target installation > and in a staging post installation hook to create the appropriate > symbolic links. That looks much better. I'll split this change into two stages: one to implement NCURSES_LIBS-y, and one to add BR2_PACKAGE_NCURSES_WCHAR. Cheers, jeremy
diff --git a/package/ncurses/Config.in b/package/ncurses/Config.in index e8ab7102..337b0160 100644 --- a/package/ncurses/Config.in +++ b/package/ncurses/Config.in @@ -9,6 +9,11 @@ config BR2_PACKAGE_NCURSES http://www.gnu.org/software/ncurses/ if BR2_PACKAGE_NCURSES +config BR2_PACKAGE_NCURSES_WIDEC + bool "enable wide char support" + depends on BR2_PACKAGE_NCURSES + help + Enable wide char & UTF-8 support in ncurses libraries config BR2_PACKAGE_NCURSES_TARGET_PANEL bool "ncurses libpanel in target" diff --git a/package/ncurses/ncurses.mk b/package/ncurses/ncurses.mk index f3319763..ba4cacd1 100644 --- a/package/ncurses/ncurses.mk +++ b/package/ncurses/ncurses.mk @@ -12,7 +12,7 @@ HOST_NCURSES_DEPENDENCIES = NCURSES_PROGS = clear infocmp tabs tic toe tput tset NCURSES_LICENSE = MIT with advertising clause NCURSES_LICENSE_FILES = README -NCURSES_CONFIG_SCRIPTS = ncurses5-config +NCURSES_CONFIG_SCRIPTS = ncurses$(W)5-config NCURSES_CONF_OPT = \ $(if $(BR2_PREFER_STATIC_LIB),--without-shared,--with-shared) \ @@ -36,6 +36,15 @@ ifeq ($(BR2_PACKAGE_BUSYBOX),y) NCURSES_DEPENDENCIES += busybox endif +ifeq ($(BR2_PACKAGE_NCURSES_WIDEC),y) +NCURSES_CONF_OPT += --enable-widec +W=w +W_LINK=ln -sf +else +W= +W_LINK=: +endif + ifneq ($(BR2_ENABLE_DEBUG),y) NCURSES_CONF_OPT += --without-debug endif @@ -48,19 +57,22 @@ ifneq ($(BR2_PREFER_STATIC_LIB),y) ifeq ($(BR2_PACKAGE_NCURSES_TARGET_PANEL),y) define NCURSES_INSTALL_TARGET_PANEL - cp -dpf $(NCURSES_DIR)/lib/libpanel.so* $(TARGET_DIR)/usr/lib/ + cp -dpf $(NCURSES_DIR)/lib/libpanel$(W).so* $(TARGET_DIR)/usr/lib/ + $(W_LINK) libpanelw.so $(TARGET_DIR)/usr/lib/libpanel.so endef endif ifeq ($(BR2_PACKAGE_NCURSES_TARGET_FORM),y) define NCURSES_INSTALL_TARGET_FORM - cp -dpf $(NCURSES_DIR)/lib/libform.so* $(TARGET_DIR)/usr/lib/ + cp -dpf $(NCURSES_DIR)/lib/libform$(W).so* $(TARGET_DIR)/usr/lib/ + $(W_LINK) libformw.so $(TARGET_DIR)/usr/lib/libform.so endef endif ifeq ($(BR2_PACKAGE_NCURSES_TARGET_MENU),y) define NCURSES_INSTALL_TARGET_MENU - cp -dpf $(NCURSES_DIR)/lib/libmenu.so* $(TARGET_DIR)/usr/lib/ + cp -dpf $(NCURSES_DIR)/lib/libmenu$(W).so* $(TARGET_DIR)/usr/lib/ + $(W_LINK) libmenuw.so $(TARGET_DIR)/usr/lib/libmenu.so endef endif @@ -78,7 +90,8 @@ endif define NCURSES_INSTALL_TARGET_CMDS mkdir -p $(TARGET_DIR)/usr/lib - $(if $(BR2_PREFER_STATIC_LIB),,cp -dpf $(NCURSES_DIR)/lib/libncurses.so* $(TARGET_DIR)/usr/lib/) + $(if $(BR2_PREFER_STATIC_LIB),,cp -dpf $(NCURSES_DIR)/lib/libncurses$(W).so* $(TARGET_DIR)/usr/lib/) + $(W_LINK) libncursesw.so $(TARGET_DIR)/usr/lib/libncurses.so $(NCURSES_INSTALL_TARGET_PANEL) $(NCURSES_INSTALL_TARGET_FORM) $(NCURSES_INSTALL_TARGET_MENU) @@ -101,6 +114,33 @@ define NCURSES_INSTALL_TARGET_CMDS cp -dpf $(STAGING_DIR)/usr/share/terminfo/s/screen $(TARGET_DIR)/usr/share/terminfo/s endef # NCURSES_INSTALL_TARGET_CMDS +define NCURSES_POST_INSTALL_SYMLINK + $(W_LINK) libncursesw.so $(STAGING_DIR)/usr/lib/libncurses.so +endef +NCURSES_POST_INSTALL_STAGING_HOOKS += NCURSES_POST_INSTALL_SYMLINK + +ifeq ($(BR2_PACKAGE_NCURSES_TARGET_PANEL),y) +define NCURSES_POST_INSTALL_SYMLINK_PANEL + $(W_LINK) libpanelw.so $(STAGING_DIR)/usr/lib/libpanel.so +endef +NCURSES_POST_INSTALL_STAGING_HOOKS += NCURSES_POST_INSTALL_SYMLINK_PANEL +endif + +ifeq ($(BR2_PACKAGE_NCURSES_TARGET_FORM),y) +define NCURSES_POST_INSTALL_SYMLINK_FORM + $(W_LINK) libformw.so $(STAGING_DIR)/usr/lib/libform.so +endef +NCURSES_POST_INSTALL_STAGING_HOOKS += NCURSES_POST_INSTALL_SYMLINK_FORM +endif + +ifeq ($(BR2_PACKAGE_NCURSES_TARGET_MENU),y) +define NCURSES_POST_INSTALL_SYMLINK_MENU + $(W_LINK) libmenuw.so $(STAGING_DIR)/usr/lib/libmenu.so +endef +NCURSES_POST_INSTALL_STAGING_HOOKS += NCURSES_POST_INSTALL_SYMLINK_MENU +endif + + # # 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
Allow ncurses to be configured with wide char support; this causes the libraries to be built with the 'w' suffix (eg libncursesw.so, libmenuw.so, etc), so we need to create a few symlinks. Signed-off-by: Jeremy Kerr <jk@ozlabs.org> --- package/ncurses/Config.in | 5 +++ package/ncurses/ncurses.mk | 50 +++++++++++++++++++++++++++++++++---- 2 files changed, 50 insertions(+), 5 deletions(-)