Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!

Bug 642256

Summary: sys-libs/ncurses: add development snapshots
Product: Gentoo Linux Reporter: blopsalot
Component: Current packagesAssignee: Gentoo's Team for Core System packages <base-system>
Status: RESOLVED WONTFIX    
Severity: normal CC: blopsalot, julien.sanchez, pacho, sam
Priority: Normal    
Version: unspecified   
Hardware: All   
OS: Linux   
Whiteboard:
Package list:
Runtime testing required: ---
Attachments: patched ebuild
Updated to EAPI 6 and removed repoman offending lib preserve stuff
ebuild
patches unified and updated
ncurses-9999.ebuild.patch
rebased changes
more proper ncurses5 compat
version bump

Description blopsalot 2017-12-26 07:24:23 UTC
Created attachment 511626 [details]
patched ebuild

I am oblivious to the political side of things and I am by no means knocking GNU, but they have been slow and disorganized lately with ncurses. Considering Thomas Dickey's long history, involvement, and knowledge of ncurses and curses libraries in general, IMHO it would be wise to switch to his development cycle. cdk ebuild in portage already follows this scheme. I believe being closer to an active upstream, Gentoo will improve both in stability and security.

I am no expert in portage but I am using this ebuild, its mostly original with only change being sourcing. It is stable for my use case. glibc ~amd64


http://invisible-island.net/ncurses/NEWS.html
https://invisible-mirror.net/archives/ncurses/current/
Comment 1 charles17 2017-12-26 09:29:13 UTC
Just tested your ebuild:

repoman -dx full

RepoMan scours the neighborhood...
  KEYWORDS.stable [fatal]       1
   sys-libs/ncurses/ncurses-6.0.20171216.ebuild added with stable keywords: alpha amd64 arm arm64 hppa ia64 m68k ppc ppc64 s390 sh sparc x86
  ebuild.minorsyn               8
   sys-libs/ncurses/ncurses-6.0-r1.ebuild: Ebuild calls deprecated preserve_old_lib on line: 282
   sys-libs/ncurses/ncurses-6.0-r1.ebuild: Ebuild calls deprecated preserve_old_lib on line: 283
   sys-libs/ncurses/ncurses-6.0-r1.ebuild: Ebuild calls deprecated preserve_old_lib on line: 287
   sys-libs/ncurses/ncurses-6.0-r1.ebuild: Ebuild calls deprecated preserve_old_lib on line: 288
   sys-libs/ncurses/ncurses-6.0.20171216.ebuild: Ebuild calls deprecated preserve_old_lib on line: 280
   sys-libs/ncurses/ncurses-6.0.20171216.ebuild: Ebuild calls deprecated preserve_old_lib on line: 281
   sys-libs/ncurses/ncurses-6.0.20171216.ebuild: Ebuild calls deprecated preserve_old_lib on line: 285
   sys-libs/ncurses/ncurses-6.0.20171216.ebuild: Ebuild calls deprecated preserve_old_lib on line: 286
Please fix these important QA issues first.
RepoMan sez: "Make your QA payment on time and you'll never see the likes of me."
Comment 2 blopsalot 2017-12-26 09:35:33 UTC
yeah that's why I said I'm not expert in portage, the ebuild is broken by Gentoo standards, I am simply proposing a idea. I do not propose my ebuild is used. It's just to more clearly convey the idea. Ncurses is a touch package to deal with, it touches alot of things.
Comment 3 blopsalot 2017-12-26 09:47:17 UTC
Created attachment 511628 [details]
Updated to EAPI 6 and removed repoman offending lib preserve stuff
Comment 4 blopsalot 2017-12-26 09:56:49 UTC
looks like repoman complains about that with portage ebuild as well, so maybe repoman false alarm.
Comment 5 charles17 2017-12-26 12:43:07 UTC
(In reply to blopsalot from comment #3)
> Created attachment 511628 [details]
> Updated to EAPI 6 and removed repoman offending lib preserve stuff

Why not add it to the https://github.com/gentoo/gentoo/pulls ?
See https://wiki.gentoo.org/wiki/Github_Pull_Requests
and https://wiki.gentoo.org/wiki/Gentoo_GitHub

But you would need to change keywords to unstable (amd64 => ~amd64).
Comment 6 blopsalot 2017-12-27 12:34:41 UTC
Comment on attachment 511628 [details]
Updated to EAPI 6 and removed repoman offending lib preserve stuff

># Copyright 1999-2017 Gentoo Foundation
># Distributed under the terms of the GNU General Public License v2
>
>EAPI="5"
>
>inherit eutils flag-o-matic toolchain-funcs multilib-minimal multiprocessing versionator
>
>MY_P="${PN}-$(replace_version_separator 2 -)"
>DESCRIPTION="console display library"
>HOMEPAGE="https://www.gnu.org/software/ncurses/ http://dickey.his.com/ncurses/"
>SRC_URI="https://invisible-mirror.net/archives/ncurses/current/${MY_P}.tgz"
>
>LICENSE="MIT"
># The subslot reflects the SONAME.
>SLOT="0/6"
>KEYWORDS="alpha amd64 arm arm64 hppa ia64 m68k ~mips ppc ppc64 s390 sh sparc x86 ~amd64-fbsd ~sparc-fbsd ~x86-fbsd"
>IUSE="ada +cxx debug doc gpm minimal profile static-libs test threads tinfo trace unicode"
>
>DEPEND="gpm? ( sys-libs/gpm[${MULTILIB_USEDEP}] )"
>#	berkdb? ( sys-libs/db )"
># Block the older ncurses that installed all files w/SLOT=5. #557472
>RDEPEND="${DEPEND}
>	!<=sys-libs/ncurses-5.9-r4:5
>	!<x11-terms/rxvt-unicode-9.06-r3
>	!<x11-terms/st-0.6-r1
>	!app-emulation/emul-linux-x86-baselibs"
>
>S=${WORKDIR}/${MY_P}
>
>PATCHES=(
>	"${FILESDIR}/${PN}-6.0-gfbsd.patch"
>	"${FILESDIR}/${PN}-5.7-nongnu.patch"
>	"${FILESDIR}/${PN}-6.0-rxvt-unicode-9.15.patch" #192083 #383871
>	"${FILESDIR}/${PN}-6.0-pkg-config.patch"
>	"${FILESDIR}/${PN}-5.9-gcc-5.patch" #545114
>	"${FILESDIR}/${PN}-6.0-ticlib.patch" #557360
>	"${FILESDIR}/${PN}-6.0-cppflags-cross.patch" #601426
>)
>
>src_prepare() {
>	[[ -n ${PV_SNAP} ]] && epatch "${WORKDIR}"/${MY_P}-${PV_SNAP}-patch.sh
>	epatch "${PATCHES[@]}"
>}
>
>src_configure() {
>	unset TERMINFO #115036
>	tc-export_build_env BUILD_{CC,CPP}
>	BUILD_CPPFLAGS+=" -D_GNU_SOURCE" #214642
>
>	# Build the various variants of ncurses -- narrow, wide, and threaded. #510440
>	# Order matters here -- we want unicode/thread versions to come last so that the
>	# binaries in /usr/bin support both wide and narrow.
>	# The naming is also important as we use these directly with filenames and when
>	# checking configure flags.
>	NCURSES_TARGETS=(
>		ncurses
>		$(usex unicode 'ncursesw' '')
>		$(usex threads 'ncursest' '')
>		$(use unicode && usex threads 'ncursestw' '')
>	)
>
>	multijob_init
>
>	# When installing ncurses, we have to use a compatible version of tic.
>	# This comes up when cross-compiling, doing multilib builds, upgrading,
>	# or installing for the first time.  Build a local copy of tic whenever
>	# the host version isn't available. #249363 #557598
>	if ! ROOT=/ has_version "~sys-libs/${P}:0" ; then
>		local lbuildflags="-static"
>
>		# some toolchains don't quite support static linking
>		local dbuildflags="-Wl,-rpath,${WORKDIR}/lib"
>		case ${CHOST} in
>			*-darwin*)  dbuildflags=     ;;
>			*-aix*)     dbuildflags=     ;;
>		esac
>		echo "int main() {}" | \
>			$(tc-getCC) -o x -x c - ${lbuildflags} -pipe >& /dev/null \
>			|| lbuildflags="${dbuildflags}"
>
>		# We can't re-use the multilib BUILD_DIR because we run outside of it.
>		BUILD_DIR="${WORKDIR}" \
>		CHOST=${CBUILD} \
>		CFLAGS=${BUILD_CFLAGS} \
>		CXXFLAGS=${BUILD_CXXFLAGS} \
>		CPPFLAGS=${BUILD_CPPFLAGS} \
>		LDFLAGS="${BUILD_LDFLAGS} ${lbuildflags}" \
>		multijob_child_init do_configure cross --without-shared --with-normal
>	fi
>	multilib-minimal_src_configure
>	multijob_finish
>}
>
>multilib_src_configure() {
>	local t
>	for t in "${NCURSES_TARGETS[@]}" ; do
>		multijob_child_init do_configure "${t}"
>	done
>}
>
>do_configure() {
>	local target=$1
>	shift
>
>	mkdir "${BUILD_DIR}/${target}"
>	cd "${BUILD_DIR}/${target}" || die
>
>	local conf=(
>		# We need the basic terminfo files in /etc, bug #37026.  We will
>		# add '--with-terminfo-dirs' and then populate /etc/terminfo in
>		# src_install() ...
>		--with-terminfo-dirs="${EPREFIX}/etc/terminfo:${EPREFIX}/usr/share/terminfo"
>
>		# Disabled until #245417 is sorted out.
>		#$(use_with berkdb hashed-db)
>
>		# ncurses is dumb and doesn't install .pc files unless pkg-config
>		# is also installed.  Force the tests to go our way.  Note that it
>		# doesn't actually use pkg-config ... it just looks for set vars.
>		--enable-pc-files
>		--with-pkg-config="$(tc-getPKG_CONFIG)"
>		# This path is used to control where the .pc files are installed.
>		--with-pkg-config-libdir="${EPREFIX}/usr/$(get_libdir)/pkgconfig"
>
>		# Now the rest of the various standard flags.
>		--with-shared
>		--without-hashed-db
>		$(use_with ada)
>		$(use_with cxx)
>		$(use_with cxx cxx-binding)
>		--with-cxx-shared
>		$(use_with debug)
>		$(use_with profile)
>		# The configure script uses ldd to parse the linked output which
>		# is flaky for cross-compiling/multilib/ldd versions/etc...
>		$(use_with gpm gpm libgpm.so.1)
>		--disable-termcap
>		--enable-symlinks
>		--with-rcs-ids
>		--with-manpage-format=normal
>		--enable-const
>		--enable-colorfgbg
>		--enable-hard-tabs
>		--enable-echo
>		$(use_enable !ada warnings)
>		$(use_with debug assertions)
>		$(use_enable !debug leaks)
>		$(use_with debug expanded)
>		$(use_with !debug macros)
>		$(multilib_native_with progs)
>		$(use_with test tests)
>		$(use_with trace)
>		$(use_with tinfo termlib)
>	)
>
>	if [[ ${target} == ncurses*w ]] ; then
>		conf+=( --enable-widec )
>	else
>		conf+=( --disable-widec )
>	fi
>	if [[ ${target} == ncursest* ]] ; then
>		conf+=( --with-{pthread,reentrant} )
>	else
>		conf+=( --without-{pthread,reentrant} )
>	fi
>	# Make sure each variant goes in a unique location.
>	if [[ ${target} == "ncurses" ]] ; then
>		# "ncurses" variant goes into "${EPREFIX}"/usr/include
>		# It is needed on Prefix because the configure script appends
>		# "ncurses" to "${prefix}/include" if "${prefix}" is not /usr.
>		conf+=( --enable-overwrite )
>	else
>		conf+=( --includedir="${EPREFIX}"/usr/include/${target} )
>	fi
>	# See comments in src_configure.
>	if [[ ${target} != "cross" ]] ; then
>		local cross_path="${WORKDIR}/cross"
>		[[ -d ${cross_path} ]] && export TIC_PATH="${cross_path}/progs/tic"
>	fi
>
>	# Force bash until upstream rebuilds the configure script with a newer
>	# version of autotools. #545532
>	CONFIG_SHELL=${EPREFIX}/bin/bash \
>	ECONF_SOURCE=${S} \
>	econf "${conf[@]}" "$@"
>}
>
>src_compile() {
>	# See comments in src_configure.
>	if ! ROOT=/ has_version "~sys-libs/${P}:0" ; then
>		BUILD_DIR="${WORKDIR}" \
>		do_compile cross -C progs tic
>	fi
>
>	multilib-minimal_src_compile
>}
>
>multilib_src_compile() {
>	local t
>	for t in "${NCURSES_TARGETS[@]}" ; do
>		do_compile "${t}"
>	done
>}
>
>do_compile() {
>	local target=$1
>	shift
>
>	cd "${BUILD_DIR}/${target}" || die
>
>	# A little hack to fix parallel builds ... they break when
>	# generating sources so if we generate the sources first (in
>	# non-parallel), we can then build the rest of the package
>	# in parallel.  This is not really a perf hit since the source
>	# generation is quite small.
>	emake -j1 sources
>	# For some reason, sources depends on pc-files which depends on
>	# compiled libraries which depends on sources which ...
>	# Manually delete the pc-files file so the install step will
>	# create the .pc files we want.
>	rm -f misc/pc-files
>	emake "$@"
>}
>
>multilib_src_install() {
>	local target
>	for target in "${NCURSES_TARGETS[@]}" ; do
>		emake -C "${BUILD_DIR}/${target}" DESTDIR="${D}" install
>	done
>
>	# Move main libraries into /.
>	if multilib_is_native_abi ; then
>		gen_usr_ldscript -a \
>			"${NCURSES_TARGETS[@]}" \
>			$(use tinfo && usex unicode 'tinfow' '') \
>			$(usev tinfo)
>	fi
>	if ! tc-is-static-only ; then
>		# Provide a link for -lcurses.
>		ln -sf libncurses$(get_libname) "${ED}"/usr/$(get_libdir)/libcurses$(get_libname) || die
>	fi
>	use static-libs || find "${ED}"/usr/ -name '*.a' -delete
>
>	# Build fails to create this ...
>	dosym ../share/terminfo /usr/$(get_libdir)/terminfo
>}
>
>multilib_src_install_all() {
>#	if ! use berkdb ; then
>		# We need the basic terminfo files in /etc, bug #37026
>		einfo "Installing basic terminfo files in /etc..."
>		for x in ansi console dumb linux rxvt rxvt-unicode screen sun vt{52,100,102,200,220} \
>				 xterm xterm-color xterm-xfree86
>		do
>			local termfile=$(find "${ED}"/usr/share/terminfo/ -name "${x}" 2>/dev/null)
>			local basedir=$(basename $(dirname "${termfile}"))
>
>			if [[ -n ${termfile} ]] ; then
>				dodir /etc/terminfo/${basedir}
>				mv ${termfile} "${ED}"/etc/terminfo/${basedir}/
>				dosym ../../../../etc/terminfo/${basedir}/${x} \
>					/usr/share/terminfo/${basedir}/${x}
>			fi
>		done
>#	fi
>
>	echo "CONFIG_PROTECT_MASK=\"/etc/terminfo\"" > "${T}"/50ncurses
>	doenvd "${T}"/50ncurses
>
>	use minimal && rm -r "${ED}"/usr/share/terminfo*
>	# Because ncurses5-config --terminfo returns the directory we keep it
>	keepdir /usr/share/terminfo #245374
>
>	cd "${S}"
>	dodoc ANNOUNCE MANIFEST NEWS README* TO-DO doc/*.doc
>	use doc && dohtml -r doc/html/
>}
Comment 7 blopsalot 2017-12-27 12:49:21 UTC
that can be deleted, i guess you cannot mark attachments obsolete anymore? here's ebuild i'm using: https://github.com/blopsalot/blop-overlay/tree/master/sys-libs/ncurses
Comment 8 blopsalot 2017-12-31 01:48:31 UTC
Created attachment 512134 [details]
ebuild
Comment 9 blopsalot 2017-12-31 01:51:23 UTC
Created attachment 512136 [details, diff]
patches unified and updated
Comment 10 blopsalot 2017-12-31 02:16:06 UTC
Created attachment 512138 [details, diff]
ncurses-9999.ebuild.patch
Comment 11 charles17 2017-12-31 07:11:34 UTC
(In reply to blopsalot from comment #10)
> Created attachment 512138 [details, diff] [details, diff]
> ncurses-9999.ebuild.patch

EAPI=6 does not allow old epatch:

+	epatch "${FILESDIR}/${PN}-6.0-unified.patch"

You'd better add it into the PATCHES array.
Comment 12 blopsalot 2017-12-31 11:42:28 UTC
(In reply to charles17 from comment #11)
> (In reply to blopsalot from comment #10)
> > Created attachment 512138 [details, diff] [details, diff] [details, diff]
> > ncurses-9999.ebuild.patch
> 
> EAPI=6 does not allow old epatch:
> 
> +	epatch "${FILESDIR}/${PN}-6.0-unified.patch"
> 
> You'd better add it into the PATCHES array.

I have it changed to eapply on git. Not sure I noted it, I obviously removed the ncurses-5 stuff, but ncurses-6.0-gfbsd.patch was also withheld because upstream appeared patched.
Comment 13 blopsalot 2018-01-03 19:18:43 UTC
Created attachment 513122 [details]
rebased changes

diffs against GNU release are there too, i guess that's the preferred route. looks like ncurses-6.0-20170930.patch.gz is considered a stable release. ftp://ftp.invisible-island.net/ncurses/6.0/
Comment 14 blopsalot 2018-01-08 15:25:01 UTC
AM I missing something??

bug 636932
bug 639706
bug 625830
bug 624644
bug 629276
bug 572898 
.....
Comment 15 blopsalot 2018-01-08 16:12:23 UTC
Like I said, I'm oblivious to the politics. I have mostly just been a lurker for a very long time. It seems to me that GNU treats ncurses like a red headed step child because Thomas Dickey will not GPL his code instead of MIT. Is there a ncurses git on savannah? IS there a GNU directory collecting patches? I am pretty sure ever other distro follows TD's release and versioning. 

Why is this being ignored? Keep it broken because there seems to be an ego problem in Gentoo middle management?
Comment 16 blopsalot 2018-02-09 17:36:06 UTC
Created attachment 518750 [details]
more proper ncurses5 compat

I only broke slotting out of laziness. Disabled wide for my own use. new sources and --with-abi-version=5 is all I'm pointing out.
Comment 17 blopsalot 2018-02-09 17:39:06 UTC
Created attachment 518752 [details]
version bump

here's more info about symbol versioning
https://invisible-island.net/ncurses/ncurses-mapsyms.html
Comment 18 SpanKY gentoo-dev 2018-06-25 21:50:23 UTC
it's really hard to tell what it is you're proposing.  please attach ebuild diffs, not entire files, as it's practically impossible to reasonably review entire files.

i think what you're suggesting is switching from the periodic versioned releases (e.g. 5.9, 6.0, 6.1, etc...) to the date snapshots Thomas puts out (e.g. 6.1.20180623).  that has nothing to do with GNU or politics or "ego" anything else you seem to have just randomly imagined/made up ... that's simply Thomas throwing out his current development status because he doesn't use git to manage the source.

so ignoring all that noise, we're not going to switch to the snapshots.  they're called "development snapshots" for a reason ... things randomly break/change in there and doing an upgrade every week is only going to make things very unstable.  especially when many low level tools link against ncurses and breakage in the package can break the ability for a system to even boot.

if you have some other suggestion buried in here (unrelated to "lets use the datestamped snapshots"), feel free to highlight it specifically.
Comment 19 Sam James archtester Gentoo Infrastructure gentoo-dev Security 2023-02-24 12:34:30 UTC
The ebuild currently contains:
"""
        # Sometimes, after releases, there's no megapatch available yet.
        #
        # From upstream README at e.g. https://invisible-island.net/archives/ncurses/6.3/:
        #
        #       "At times (generally to mark a relatively stable point), I create a rollup
        #       patch, which consists of all changes from the release through the current date."
        #
        # Also, from https://lists.gnu.org/archive/html/bug-ncurses/2019-08/msg00039.html,
        # the patches are considered to be acceptable to use after some testing. They
        # are both for development but also bug fixes.
"""

We try to use new ncurses snapshots when they're suitable after some testing, but we don't aggressively add every single one either. We also try to keep the last release in tree.