diff options
author | Michał Górny <mgorny@gentoo.org> | 2017-03-17 17:53:38 +0100 |
---|---|---|
committer | Michał Górny <mgorny@gentoo.org> | 2017-03-24 17:32:29 +0100 |
commit | f1c4804b6007f512fb5de7cc1ec14696b7737e46 (patch) | |
tree | 4c3d9c3a8501e4d7afb6f9646559cb6874a2c3e0 /eclass/epunt-cxx.eclass | |
parent | net-misc/tigervnc-1.7.1-r2: ia64 stable, bug 612632 (diff) | |
download | gentoo-f1c4804b6007f512fb5de7cc1ec14696b7737e46.tar.gz gentoo-f1c4804b6007f512fb5de7cc1ec14696b7737e46.tar.bz2 gentoo-f1c4804b6007f512fb5de7cc1ec14696b7737e46.zip |
epunt-cxx.eclass: Split C++ check punting code out of eutils
Split the epunt_cxx (plus internal code) to a dedicated eclass. This is
rarely needed, usually indicates a dead upstream and requires
the ELT-patches framework. The patches are going to be split to
a separate package, and the new eclass will therefore need to DEPEND
on it. We do not want the dependency to apply to all eutils users
though.
Diffstat (limited to 'eclass/epunt-cxx.eclass')
-rw-r--r-- | eclass/epunt-cxx.eclass | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/eclass/epunt-cxx.eclass b/eclass/epunt-cxx.eclass new file mode 100644 index 000000000000..660b1d138fac --- /dev/null +++ b/eclass/epunt-cxx.eclass @@ -0,0 +1,65 @@ +# Copyright 1999-2017 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +# @ECLASS: epunt-cxx.eclass +# @MAINTAINER: +# base-system@gentoo.org +# @BLURB: A function to punt C++ compiler checks from autoconf +# @DESCRIPTION: +# Support for punting C++ compiler checks from autoconf (based +# on ELT-patches). + +if [[ -z ${_EPUNT_CXX_ECLASS} ]]; then + +# TODO: replace this with 'inherit eutils' once eutils stops inheriting +# us +if ! declare -F eqawarn >/dev/null ; then + eqawarn() { + has qa ${PORTAGE_ELOG_CLASSES} && ewarn "$@" + : + } +fi + +# If an overlay has eclass overrides, but doesn't actually override the +# libtool.eclass, we'll have ECLASSDIR pointing to the active overlay's +# eclass/ dir, but libtool.eclass is still in the main Gentoo tree. So +# add a check to locate the ELT-patches/ regardless of what's going on. +# Note: Duplicated in libtool.eclass. +_EUTILS_ECLASSDIR_LOCAL=${BASH_SOURCE[0]%/*} +eutils_elt_patch_dir() { + local d="${ECLASSDIR}/ELT-patches" + if [[ ! -d ${d} ]] ; then + d="${_EUTILS_ECLASSDIR_LOCAL}/ELT-patches" + fi + echo "${d}" +} + +# @FUNCTION: epunt_cxx +# @USAGE: [dir to scan] +# @DESCRIPTION: +# Many configure scripts wrongly bail when a C++ compiler could not be +# detected. If dir is not specified, then it defaults to ${S}. +# +# https://bugs.gentoo.org/73450 +epunt_cxx() { + local dir=$1 + [[ -z ${dir} ]] && dir=${S} + ebegin "Removing useless C++ checks" + local f p any_found + while IFS= read -r -d '' f; do + for p in "$(eutils_elt_patch_dir)"/nocxx/*.patch ; do + if patch --no-backup-if-mismatch -p1 "${f}" "${p}" >/dev/null ; then + any_found=1 + break + fi + done + done < <(find "${dir}" -name configure -print0) + + if [[ -z ${any_found} ]]; then + eqawarn "epunt_cxx called unnecessarily (no C++ checks to punt)." + fi + eend 0 +} + +_EPUNT_CXX_ECLASS=1 +fi #_EPUNT_CXX_ECLASS |