# Copyright 1999-2016 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 # $Id$ EAPI="5" inherit eutils flag-o-matic toolchain-funcs multilib-minimal multiprocessing MY_PV=${PV:0:3} PV_SNAP=${PV:4} MY_P=${PN}-${MY_PV} DESCRIPTION="console display library" HOMEPAGE="https://www.gnu.org/software/ncurses/ http://dickey.his.com/ncurses/" SRC_URI="mirror://gnu/ncurses/${MY_P}.tar.gz" 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 !& /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=${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/ } pkg_preinst() { preserve_old_lib /$(get_libdir)/libncurses.so.5 use unicode && preserve_old_lib /$(get_libdir)/libncursesw.so.5 } pkg_postinst() { preserve_old_lib_notify /$(get_libdir)/libncurses.so.5 use unicode && preserve_old_lib_notify /$(get_libdir)/libncursesw.so.5 }