From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thomas Petazzoni Date: Thu, 30 Jan 2014 20:44:03 +0100 Subject: [Buildroot] [RFC, PATCH 3/8] package/ncurses: Allow building wide char support In-Reply-To: <1389862338.918565.412332853863.3.gpush@pablo> References: <1389862338.917573.283530987294.0.gpush@pablo> <1389862338.918565.412332853863.3.gpush@pablo> Message-ID: <20140130204403.5935a48b@skate> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: buildroot@busybox.net 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 -- Thomas Petazzoni, CTO, Free Electrons Embedded Linux, Kernel and Android engineering http://free-electrons.com