Files
Gleb Pesin f5474890d2 ncurses: suppress line markers in generated macro wrappers
With ccache enabled, MKlib_gen.sh treats ccache as the compiler when
probing its version. It therefore misses GCC's required -P workaround
for line markers introduced while expanding macros. The generated
lib_gen.c then fails to compile with GCC 14.4.0, reporting:

  "_Bool" after # is not a positive integer

Pass -P explicitly to the make-time preprocessor used by the ncurses
source generators. This fixes the apm821xx/nand and qoriq/generic
external-toolchain CI failures without changing compiler detection
or the source library API. Increment the package release.

Build-tested complete static/shared ncurses, menu, form and panel
libraries with ccache and the failing PowerPC GCC 14.4.0 toolchains.
The same build also passes with MIPS32 GCC 16.2.0. The original
make-time CPP command reproduces both PowerPC failures.

Signed-off-by: Gleb Pesin <dormancygrace@gmail.com>
Assisted-by: Codex (OpenAI GPT-6)
Link: https://github.com/openwrt/openwrt/pull/25538
Signed-off-by: Robert Marko <robimarko@gmail.com>
2026-10-03 11:41:51 +02:00

207 lines
4.9 KiB
Makefile

#
# Copyright (C) 2006-2026 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#
include $(TOPDIR)/rules.mk
PKG_NAME:=ncurses
PKG_CPE_ID:=cpe:/a:gnu:ncurses
PKG_VERSION_MAJOR:=6.6
PKG_SNAPSHOT_DATE:=20260801
PKG_VERSION:=$(PKG_VERSION_MAJOR)$(if $(PKG_SNAPSHOT_DATE),.$(PKG_SNAPSHOT_DATE),)
PKG_RELEASE:=2
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://github.com/ThomasDickey/ncurses-snapshots.git
PKG_SOURCE_VERSION:=v$(subst .,_,$(PKG_VERSION))
PKG_MIRROR_HASH:=a64061953353818a511e2ec7a284e10e89ac5ec62f3cdccc1ab549eb5f2d9c84
PKG_LICENSE:=MIT
PKG_LICENSE_FILES:=README
PKG_INSTALL:=1
PKG_BUILD_PARALLEL:=1
PKG_BUILD_DEPENDS:=ncurses/host
include $(INCLUDE_DIR)/package.mk
include $(INCLUDE_DIR)/host-build.mk
define Package/terminfo
SECTION:=libs
CATEGORY:=Libraries
TITLE:=Terminal Info Database (ncurses)
URL:=https://www.gnu.org/software/ncurses/
endef
define Package/libncurses
SECTION:=libs
CATEGORY:=Libraries
TITLE:=Terminal handling library (Unicode)
URL:=https://www.gnu.org/software/ncurses/
PROVIDES:=libncursesw
DEPENDS:= +terminfo
ABI_VERSION:=6
endef
define Package/libncurses-dev
SECTION:=devel
CATEGORY:=Development
SUBMENU:=Libraries
DEPENDS:=zlib
TITLE:=Development files for the ncurses library
endef
define Package/libncurses/config
source "$(SOURCE)/Config.in"
endef
TARGET_CFLAGS += $(FPIC) -std=gnu17
CONFIGURE_ARGS += \
--enable-echo \
--enable-const \
--enable-overwrite \
--enable-pc-files \
--disable-rpath \
--without-ada \
--without-debug \
--without-manpages \
--without-profile \
--without-progs \
--without-tests \
--disable-big-core \
--disable-home-terminfo \
--with-normal \
--with-shared \
--with-terminfo-dirs=/usr/share/terminfo \
--with-default-terminfo-dir=/usr/share/terminfo \
--with-pkg-config-libdir=/usr/lib/pkgconfig \
--enable-widec \
--with-build-cppflags=-D_GNU_SOURCE
CONFIGURE_VARS += \
cf_try_fPIC=no
HOST_CFLAGS += $(HOST_FPIC)
HOST_CONFIGURE_ARGS += \
--enable-pc-files \
--without-cxx \
--without-cxx-binding \
--without-ada \
--without-debug \
--without-manpages \
--without-profile \
--without-tests \
--without-curses-h \
--disable-db-install
ifeq ($(HOST_OS),FreeBSD)
CONFIGURE_ARGS +=
--with-terminfo=/usr/share/terminfo.db
endif
MAKE_FLAGS += \
CPP="$(TARGET_CC) -E -P" \
BUILD_CC="$(HOSTCC)" \
HOSTCC="$(HOSTCC)" \
HOSTCCFLAGS="" \
PKG_CONFIG_LIBDIR=/usr/lib/pkgconfig \
libs
define Build/Install/Default
$(MAKE_VARS) \
$(MAKE) -C $(PKG_BUILD_DIR)/$(MAKE_PATH) \
$(MAKE_INSTALL_FLAGS) \
$(1) install.libs install.data;
endef
define Package/terminfo/install
echo ""
ifneq ($(HOST_OS),FreeBSD)
$(INSTALL_DIR) $(1)/usr/share/terminfo
(cd $(PKG_INSTALL_DIR)/usr/share/terminfo; \
for dir in ??; do \
[ -d "$$$$dir" ] || continue; \
mv $$$$dir $$$$(echo -ne "\x$$$$dir"); \
done \
)
for file in \
a/ansi \
a/alacritty \
d/dumb \
f/foot \
l/linux \
r/rxvt \
r/rxvt-unicode \
s/screen \
s/screen-256color \
t/tmux \
t/tmux-256color \
v/vt100 \
v/vt102 \
x/xterm \
x/xterm-color \
x/xterm-256color \
$(call qstrip,$(CONFIG_LIBNCURSES_TERMINFO)); do \
$(INSTALL_DIR) $(1)/usr/share/terminfo/`dirname $$$$file`; \
$(CP) $(PKG_INSTALL_DIR)/usr/share/terminfo/$$$$file \
$(1)/usr/share/terminfo/$$$$file; \
done
endif
endef
define Package/libncurses/install
$(INSTALL_DIR) $(1)/usr/lib
for lib in ncurses panel menu form; do \
$(CP) $(PKG_INSTALL_DIR)/usr/lib/lib$$$${lib}w.so.* $(1)/usr/lib/; \
for so in $(1)/usr/lib/lib$$$${lib}w.so.*; do \
ln -s $$$${so##*/} $$$${so%w.so*}.so$$$${so##*w.so}; \
done; \
done
endef
define Package/libncurses-dev/install
$(INSTALL_DIR) $(1)/usr/bin
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/* $(1)/usr/bin/
$(INSTALL_DIR) $(1)/usr/include
$(CP) $(PKG_INSTALL_DIR)/usr/include/*.h $(1)/usr/include/
$(INSTALL_DIR) $(1)/usr/lib
$(CP) $(PKG_INSTALL_DIR)/usr/lib/*.a $(1)/usr/lib/
$(INSTALL_DIR) $(1)/usr/lib/pkgconfig
$(CP) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/*.pc $(1)/usr/lib/pkgconfig/
endef
define Build/InstallDev
$(CP) $(PKG_INSTALL_DIR)/* $(1)
for lib in ncurses panel menu form; do \
for so in $(1)/usr/lib/lib$$$${lib}w.so*; do \
ln -s $$$${so##*/} $$$${so%w.so*}.so$$$${so##*w.so}; \
done; \
done
ln -s . $(1)/usr/include/ncursesw
$(TARGET_CROSS)ar rc $(1)/usr/lib/libtinfo.a
$(INSTALL_DIR) $(2)/bin
$(CP) $(PKG_INSTALL_DIR)/usr/bin/ncursesw6-config $(2)/bin/
$(SED) 's,^\(prefix\|exec_prefix\)=.*,\1=$(STAGING_DIR)/usr,g' -e 's/$$$$INCS //g' \
$(2)/bin/ncursesw6-config
ln -sf $(STAGING_DIR)/host/bin/ncursesw6-config $(1)/usr/bin/ncursesw6-config
$(SED) 's,$(TOOLCHAIN_DIR),$(STAGING_DIR),g' \
$(1)/usr/lib/pkgconfig/ncursesw.pc
endef
define Host/Compile
$(MAKE) -C $(HOST_BUILD_DIR) libs
$(MAKE) -C $(HOST_BUILD_DIR)/progs tic
endef
$(eval $(call HostBuild))
$(eval $(call BuildPackage,terminfo))
$(eval $(call BuildPackage,libncurses))
$(eval $(call BuildPackage,libncurses-dev))