summaryrefslogtreecommitdiff
path: root/eclass
diff options
context:
space:
mode:
Diffstat (limited to 'eclass')
-rw-r--r--eclass/Manifest.gzbin36955 -> 36791 bytes
-rw-r--r--eclass/bazel.eclass2
-rw-r--r--eclass/flag-o-matic.eclass4
-rw-r--r--eclass/ghc-package.eclass10
-rw-r--r--eclass/go-module.eclass2
-rw-r--r--eclass/kernel-install.eclass8
-rw-r--r--eclass/llvm.eclass2
-rw-r--r--eclass/rust-toolchain.eclass6
-rwxr-xr-xeclass/tests/flag-o-matic.sh6
-rw-r--r--eclass/toolchain-binutils.eclass505
-rw-r--r--eclass/toolchain.eclass141
11 files changed, 101 insertions, 585 deletions
diff --git a/eclass/Manifest.gz b/eclass/Manifest.gz
index d64335b0c74c..f09bce481c81 100644
--- a/eclass/Manifest.gz
+++ b/eclass/Manifest.gz
Binary files differ
diff --git a/eclass/bazel.eclass b/eclass/bazel.eclass
index 7c5f92977ba5..016041b8f9f3 100644
--- a/eclass/bazel.eclass
+++ b/eclass/bazel.eclass
@@ -1,4 +1,4 @@
-# Copyright 1999-2019 Jason Zaman
+# Copyright 1999-2019 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
# @ECLASS: bazel.eclass
diff --git a/eclass/flag-o-matic.eclass b/eclass/flag-o-matic.eclass
index 0aec22c83f2c..b1b5c866a002 100644
--- a/eclass/flag-o-matic.eclass
+++ b/eclass/flag-o-matic.eclass
@@ -474,8 +474,8 @@ test-flag-PROG() {
cmdline_extra+=(-xc)
;;
esac
- local test_in=${T}/test-flag-${comp}.${lang}
- local test_out=${T}/test-flag-${comp}.exe
+ local test_in=${T}/test-flag.${in_ext}
+ local test_out=${T}/test-flag.exe
printf "%s\n" "${in_src}" > "${test_in}" || return 1
diff --git a/eclass/ghc-package.eclass b/eclass/ghc-package.eclass
index 27fafff5a21b..dbe7dc2a5acd 100644
--- a/eclass/ghc-package.eclass
+++ b/eclass/ghc-package.eclass
@@ -22,14 +22,20 @@ esac
# @DESCRIPTION:
# returns the name of the ghc executable
ghc-getghc() {
- type -P ${HC:-ghc}
+ if ! type -P ${HC:-ghc}; then
+ ewarn "ghc not found"
+ type -P false
+ fi
}
# @FUNCTION: ghc-getghcpkg
# @DESCRIPTION:
# Internal function determines returns the name of the ghc-pkg executable
ghc-getghcpkg() {
- type -P ${HC_PKG:-ghc-pkg}
+ if ! type -P ${HC_PKG:-ghc-pkg}; then
+ ewarn "ghc-pkg not found"
+ type -P false
+ fi
}
# @FUNCTION: ghc-getghcpkgbin
diff --git a/eclass/go-module.eclass b/eclass/go-module.eclass
index 89b32ed1201b..d5de5f60ccdf 100644
--- a/eclass/go-module.eclass
+++ b/eclass/go-module.eclass
@@ -1,4 +1,4 @@
-# Copyright 2019 Gentoo authors
+# Copyright 2019 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
# @ECLASS: go-module.eclass
diff --git a/eclass/kernel-install.eclass b/eclass/kernel-install.eclass
index 7e64f44c8c33..1fdeb1bf4dc7 100644
--- a/eclass/kernel-install.eclass
+++ b/eclass/kernel-install.eclass
@@ -302,7 +302,13 @@ kernel-install_pkg_prerm() {
kernel-install_pkg_postrm() {
debug-print-function ${FUNCNAME} "${@}"
- # (no-op at the moment)
+ if [[ -z ${ROOT} ]] && use initramfs; then
+ local image_path=$(kernel-install_get_image_path)
+ ebegin "Removing initramfs"
+ rm -f "${EROOT}/usr/src/linux-${PV}/${image_path%/*}/initrd" &&
+ find "${EROOT}/usr/src/linux-${PV}" -depth -type d -empty -delete
+ eend ${?}
+ fi
}
_KERNEL_INSTALL_ECLASS=1
diff --git a/eclass/llvm.eclass b/eclass/llvm.eclass
index eed3fe0014cc..5477b9d25edd 100644
--- a/eclass/llvm.eclass
+++ b/eclass/llvm.eclass
@@ -81,7 +81,7 @@ if [[ ! ${_LLVM_ECLASS} ]]; then
# @INTERNAL
# @DESCRIPTION:
# Correct values of LLVM slots, newest first.
-declare -g -r _LLVM_KNOWN_SLOTS=( 10 9 8 7 6 5 4 )
+declare -g -r _LLVM_KNOWN_SLOTS=( 11 10 9 8 7 6 5 4 )
# @FUNCTION: get_llvm_prefix
# @USAGE: [-b|-d] [<max_slot>]
diff --git a/eclass/rust-toolchain.eclass b/eclass/rust-toolchain.eclass
index 304ee9052457..5126fb96a89d 100644
--- a/eclass/rust-toolchain.eclass
+++ b/eclass/rust-toolchain.eclass
@@ -39,7 +39,8 @@ rust_abi() {
mips64*) echo mips64-unknown-linux-gnuabi64;;
powerpc64le*) echo powerpc64le-unknown-linux-gnu;;
powerpc64*) echo powerpc64-unknown-linux-gnu;;
- x86_64*) echo x86_64-unknown-linux-gnu;;
+ x86_64*gnu) echo x86_64-unknown-linux-gnu;;
+ x86_64*musl) echo x86_64-unknown-linux-musl;;
armv6j*s*) echo arm-unknown-linux-gnueabi;;
armv6j*h*) echo arm-unknown-linux-gnueabihf;;
armv7a*h*) echo armv7-unknown-linux-gnueabihf;;
@@ -103,7 +104,8 @@ rust_arch_uri() {
rust_all_arch_uris()
{
local uris=""
- uris+="amd64? ( $(rust_arch_uri x86_64-unknown-linux-gnu "$@") ) "
+ uris+="amd64? ( elibc_glibc? ( $(rust_arch_uri x86_64-unknown-linux-gnu "$@") )
+ elibc_musl? ( $(rust_arch_uri x86_64-unknown-linux-musl "$@") ) ) "
uris+="arm? ( $(rust_arch_uri arm-unknown-linux-gnueabi "$@")
$(rust_arch_uri arm-unknown-linux-gnueabihf "$@")
$(rust_arch_uri armv7-unknown-linux-gnueabihf "$@") ) "
diff --git a/eclass/tests/flag-o-matic.sh b/eclass/tests/flag-o-matic.sh
index 90eaf3a6ffb0..229dff52af94 100755
--- a/eclass/tests/flag-o-matic.sh
+++ b/eclass/tests/flag-o-matic.sh
@@ -139,6 +139,12 @@ out=$(test-flags-CC -O3)
[[ $? -eq 0 && ${out} == "-O3" ]]
ftend
+tbegin "test-flags-CC (valid flags, absolute path)"
+absolute_CC=$(type -P $(tc-getCC))
+out=$(CC=${absolute_CC} test-flags-CC -O3)
+[[ $? -eq 0 && ${out} == "-O3" ]]
+ftend
+
tbegin "test-flags-CC (invalid flags)"
out=$(test-flags-CC -finvalid-flag)
[[ $? -ne 0 && -z ${out} ]]
diff --git a/eclass/toolchain-binutils.eclass b/eclass/toolchain-binutils.eclass
deleted file mode 100644
index 303eeb4092fd..000000000000
--- a/eclass/toolchain-binutils.eclass
+++ /dev/null
@@ -1,505 +0,0 @@
-# Copyright 1999-2015 Gentoo Foundation
-# Distributed under the terms of the GNU General Public License v2
-#
-# Maintainer: Toolchain Ninjas <toolchain@gentoo.org>
-# @SUPPORTED_EAPIS: 0 1 2 3 4 5
-#
-# We install binutils into CTARGET-VERSION specific directories. This lets
-# us easily merge multiple versions for multiple targets (if we wish) and
-# then switch the versions on the fly (with `binutils-config`).
-#
-# binutils-9999 -> live git
-# binutils-9999_preYYMMDD -> nightly snapshot date YYMMDD
-# binutils-# -> normal release
-
-if [[ -n ${BINUTILS_TYPE} ]] ; then
- BTYPE=${BINUTILS_TYPE}
-else
- case ${PV} in
- 9999_pre*) BTYPE="snap";;
- *.*.90) BTYPE="snap";;
- *.*.*.*.*) BTYPE="hjlu";;
- *) BTYPE="rel";;
- esac
-fi
-
-case ${BTYPE} in
-snap)
- BVER=${PV/9999_pre}
- ;;
-*)
- BVER=${BINUTILS_VER:-${PV}}
- ;;
-esac
-
-inherit eutils libtool flag-o-matic gnuconfig multilib versionator unpacker
-case ${EAPI:-0} in
-0|1)
- EXPORT_FUNCTIONS src_unpack src_compile src_test src_install pkg_postinst pkg_postrm ;;
-2|3|4|5)
- EXPORT_FUNCTIONS src_unpack src_prepare src_configure src_compile src_test src_install pkg_postinst pkg_postrm ;;
-*) die "unsupported EAPI ${EAPI}" ;;
-esac
-
-export CTARGET=${CTARGET:-${CHOST}}
-if [[ ${CTARGET} == ${CHOST} ]] ; then
- if [[ ${CATEGORY} == cross-* ]] ; then
- export CTARGET=${CATEGORY#cross-}
- fi
-fi
-is_cross() { [[ ${CHOST} != ${CTARGET} ]] ; }
-
-DESCRIPTION="Tools necessary to build programs"
-HOMEPAGE="https://sourceware.org/binutils/"
-
-case ${BTYPE} in
- snap)
- SRC_URI="ftp://gcc.gnu.org/pub/binutils/snapshots/binutils-${BVER}.tar.bz2
- ftp://sourceware.org/pub/binutils/snapshots/binutils-${BVER}.tar.bz2" ;;
- hjlu)
- SRC_URI="https://www.kernel.org/pub/linux/devel/binutils/binutils-${BVER}.tar."
- version_is_at_least 2.21.51.0.5 && SRC_URI+="xz" || SRC_URI+="bz2" ;;
- rel) SRC_URI="mirror://gnu/binutils/binutils-${BVER}.tar.bz2" ;;
-esac
-add_src_uri() {
- [[ -z $2 ]] && return
- local a=$1
- if version_is_at_least 2.22.52.0.2 ; then
- a+=".xz"
- else
- a+=".bz2"
- fi
- set -- mirror://gentoo https://dev.gentoo.org/~vapier/dist https://dev.gentoo.org/~tamiko/distfiles https://dev.gentoo.org/~dilfridge/distfiles
- SRC_URI="${SRC_URI} ${@/%//${a}}"
-}
-PATCH_BINUTILS_VER=${PATCH_BINUTILS_VER:-${BVER}}
-add_src_uri binutils-${PATCH_BINUTILS_VER}-patches-${PATCHVER}.tar ${PATCHVER}
-add_src_uri binutils-${PATCH_BINUTILS_VER}-uclibc-patches-${UCLIBC_PATCHVER}.tar ${UCLIBC_PATCHVER}
-add_src_uri elf2flt-${ELF2FLT_VER}.tar ${ELF2FLT_VER}
-
-if version_is_at_least 2.18 ; then
- LICENSE="|| ( GPL-3 LGPL-3 )"
-else
- LICENSE="|| ( GPL-2 LGPL-2 )"
-fi
-IUSE="cxx multitarget nls static-libs test vanilla"
-if version_is_at_least 2.19 && ! version_is_at_least 2.26 ; then
- IUSE+=" zlib"
-fi
-SLOT="${BVER}"
-
-RDEPEND=">=sys-devel/binutils-config-3"
-if in_iuse zlib ; then
- RDEPEND+=" zlib? ( sys-libs/zlib )"
-elif version_is_at_least 2.26 ; then
- RDEPEND+=" sys-libs/zlib"
-fi
-DEPEND="${RDEPEND}
- test? ( dev-util/dejagnu )
- nls? ( sys-devel/gettext )
- sys-devel/flex
- virtual/yacc"
-
-RESTRICT="!test? ( test )"
-
-if is_cross ; then
- # The build assumes the host has libiberty and such when cross-compiling
- # its build tools. We should probably make binutils itself build a local
- # copy to use, but until then, be lazy.
- DEPEND+=" >=sys-libs/binutils-libs-${PV}"
-fi
-
-S=${WORKDIR}/binutils-${BVER}
-
-LIBPATH=/usr/$(get_libdir)/binutils/${CTARGET}/${BVER}
-INCPATH=${LIBPATH}/include
-DATAPATH=/usr/share/binutils-data/${CTARGET}/${BVER}
-MY_BUILDDIR=${WORKDIR}/build
-if is_cross ; then
- BINPATH=/usr/${CHOST}/${CTARGET}/binutils-bin/${BVER}
-else
- BINPATH=/usr/${CTARGET}/binutils-bin/${BVER}
-fi
-
-tc-binutils_unpack() {
- unpacker ${A}
- mkdir -p "${MY_BUILDDIR}"
- [[ -d ${WORKDIR}/patch ]] && mkdir "${WORKDIR}"/patch/skip
-}
-
-# In case the ebuild wants to add a few of their own.
-PATCHES=()
-
-tc-binutils_apply_patches() {
- cd "${S}"
-
- if ! use vanilla ; then
- if [[ -n ${PATCHVER} ]] ; then
- EPATCH_SOURCE=${WORKDIR}/patch
- if [[ ${CTARGET} == mips* ]] ; then
- # remove gnu-hash for mips (bug #233233)
- EPATCH_EXCLUDE+=" 77_all_generate-gnu-hash.patch"
- fi
- [[ -n $(ls "${EPATCH_SOURCE}"/*.bz2 2>/dev/null) ]] \
- && EPATCH_SUFFIX="patch.bz2" \
- || EPATCH_SUFFIX="patch"
- epatch
- fi
- if [[ -n ${UCLIBC_PATCHVER} ]] ; then
- EPATCH_SOURCE=${WORKDIR}/uclibc-patches
- [[ -n $(ls "${EPATCH_SOURCE}"/*.bz2 2>/dev/null) ]] \
- && EPATCH_SUFFIX="patch.bz2" \
- || EPATCH_SUFFIX="patch"
- EPATCH_MULTI_MSG="Applying uClibc fixes ..." \
- epatch
- elif [[ ${CTARGET} == *-uclibc* ]] ; then
- # starting with binutils-2.17.50.0.17, we no longer need
- # uClibc patchsets :D
- if grep -qs 'linux-gnu' "${S}"/ltconfig ; then
- die "sorry, but this binutils doesn't yet support uClibc :("
- fi
- fi
- [[ ${#PATCHES[@]} -gt 0 ]] && epatch "${PATCHES[@]}"
-
- # Make sure our explicit libdir paths don't get clobbered. #562460
- sed -i \
- -e 's:@bfdlibdir@:@libdir@:g' \
- -e 's:@bfdincludedir@:@includedir@:g' \
- {bfd,opcodes}/Makefile.in || die
-
- epatch_user
- fi
-
- # fix locale issues if possible #122216
- if [[ -e ${FILESDIR}/binutils-configure-LANG.patch ]] ; then
- einfo "Fixing misc issues in configure files"
- for f in $(find "${S}" -name configure -exec grep -l 'autoconf version 2.13' {} +) ; do
- ebegin " Updating ${f/${S}\/}"
- patch "${f}" "${FILESDIR}"/binutils-configure-LANG.patch >& "${T}"/configure-patch.log \
- || eerror "Please file a bug about this"
- eend $?
- done
- fi
- # fix conflicts with newer glibc #272594
- if [[ -e libiberty/testsuite/test-demangle.c ]] ; then
- sed -i 's:\<getline\>:get_line:g' libiberty/testsuite/test-demangle.c
- fi
-
- # Fix po Makefile generators
- sed -i \
- -e '/^datadir = /s:$(prefix)/@DATADIRNAME@:@datadir@:' \
- -e '/^gnulocaledir = /s:$(prefix)/share:$(datadir):' \
- */po/Make-in || die "sed po's failed"
-
- # Run misc portage update scripts
- gnuconfig_update
- elibtoolize --portage --no-uclibc
-}
-
-toolchain-binutils_src_unpack() {
- tc-binutils_unpack
- case ${EAPI:-0} in
- 0|1) toolchain-binutils_src_prepare ;;
- esac
-}
-
-toolchain-binutils_src_prepare() {
- tc-binutils_apply_patches
-}
-
-_eprefix_init() {
- has "${EAPI:-0}" 0 1 2 && ED=${D} EPREFIX= EROOT=${ROOT}
-}
-
-# Intended for ebuilds to override to set their own versioning information.
-toolchain-binutils_bugurl() {
- printf "https://bugs.gentoo.org/"
-}
-toolchain-binutils_pkgversion() {
- printf "Gentoo ${BVER}"
- [[ -n ${PATCHVER} ]] && printf " p${PATCHVER}"
-}
-
-toolchain-binutils_src_configure() {
- _eprefix_init
-
- # make sure we filter $LINGUAS so that only ones that
- # actually work make it through #42033
- strip-linguas -u */po
-
- # keep things sane
- strip-flags
-
- local x
- echo
- for x in CATEGORY CBUILD CHOST CTARGET CFLAGS LDFLAGS ; do
- einfo "$(printf '%10s' ${x}:) ${!x}"
- done
- echo
-
- cd "${MY_BUILDDIR}"
- local myconf=()
-
- # enable gold if available (installed as ld.gold)
- if use cxx ; then
- if grep -q 'enable-gold=default' "${S}"/configure ; then
- myconf+=( --enable-gold )
- # old ways - remove when 2.21 is stable
- elif grep -q 'enable-gold=both/ld' "${S}"/configure ; then
- myconf+=( --enable-gold=both/ld )
- elif grep -q 'enable-gold=both/bfd' "${S}"/configure ; then
- myconf+=( --enable-gold=both/bfd )
- fi
- if grep -q -e '--enable-plugins' "${S}"/ld/configure ; then
- myconf+=( --enable-plugins )
- fi
- fi
-
- use nls \
- && myconf+=( --without-included-gettext ) \
- || myconf+=( --disable-nls )
-
- if in_iuse zlib ; then
- # older versions did not have an explicit configure flag
- export ac_cv_search_zlibVersion=$(usex zlib -lz no)
- myconf+=( $(use_with zlib) )
- elif version_is_at_least 2.26 ; then
- myconf+=( --with-system-zlib )
- fi
-
- # For bi-arch systems, enable a 64bit bfd. This matches
- # the bi-arch logic in toolchain.eclass. #446946
- # We used to do it for everyone, but it's slow on 32bit arches. #438522
- case $(tc-arch) in
- ppc|sparc|x86) myconf+=( --enable-64-bit-bfd ) ;;
- esac
-
- use multitarget && myconf+=( --enable-targets=all --enable-64-bit-bfd )
- [[ -n ${CBUILD} ]] && myconf+=( --build=${CBUILD} )
- is_cross && myconf+=(
- --with-sysroot="${EPREFIX}"/usr/${CTARGET}
- --enable-poison-system-directories
- )
-
- # glibc-2.3.6 lacks support for this ... so rather than force glibc-2.5+
- # on everyone in alpha (for now), we'll just enable it when possible
- has_version ">=${CATEGORY}/glibc-2.5" && myconf+=( --enable-secureplt )
- has_version ">=sys-libs/glibc-2.5" && myconf+=( --enable-secureplt )
-
- myconf+=(
- --prefix="${EPREFIX}"/usr
- --host=${CHOST}
- --target=${CTARGET}
- --datadir="${EPREFIX}"${DATAPATH}
- --infodir="${EPREFIX}"${DATAPATH}/info
- --mandir="${EPREFIX}"${DATAPATH}/man
- --bindir="${EPREFIX}"${BINPATH}
- --libdir="${EPREFIX}"${LIBPATH}
- --libexecdir="${EPREFIX}"${LIBPATH}
- --includedir="${EPREFIX}"${INCPATH}
- --enable-obsolete
- --enable-shared
- --enable-threads
- # Newer versions (>=2.27) offer a configure flag now.
- --enable-relro
- # Newer versions (>=2.24) make this an explicit option. #497268
- --enable-install-libiberty
- --disable-werror
- --with-bugurl="$(toolchain-binutils_bugurl)"
- --with-pkgversion="$(toolchain-binutils_pkgversion)"
- $(use_enable static-libs static)
- ${EXTRA_ECONF}
- # Disable modules that are in a combined binutils/gdb tree. #490566
- --disable-{gdb,libdecnumber,readline,sim}
- # Strip out broken static link flags.
- # https://gcc.gnu.org/PR56750
- --without-stage1-ldflags
- )
- echo ./configure "${myconf[@]}"
- "${S}"/configure "${myconf[@]}" || die
-
- # Prevent makeinfo from running in releases. It may not always be
- # installed, and older binutils may fail with newer texinfo.
- # Besides, we never patch the doc files anyways, so regenerating
- # in the first place is useless. #193364
- # For older versions, it means we don't get any info pages at all.
- # Oh well, tough luck. #294617
- if [[ -e ${S}/gas/doc/as.info ]] || ! version_is_at_least 2.24 ; then
- sed -i \
- -e '/^MAKEINFO/s:=.*:= true:' \
- Makefile || die
- fi
-}
-
-toolchain-binutils_src_compile() {
- _eprefix_init
- case ${EAPI:-0} in
- 0|1) toolchain-binutils_src_configure ;;
- esac
-
- cd "${MY_BUILDDIR}"
- emake all || die "emake failed"
-
- # only build info pages if we user wants them, and if
- # we have makeinfo (may not exist when we bootstrap)
- if type -p makeinfo > /dev/null ; then
- emake info || die "make info failed"
- fi
- # we nuke the manpages when we're left with junk
- # (like when we bootstrap, no perl -> no manpages)
- find . -name '*.1' -a -size 0 -delete
-
- # elf2flt only works on some arches / targets
- if [[ -n ${ELF2FLT_VER} ]] && [[ ${CTARGET} == *linux* || ${CTARGET} == *-elf* ]] ; then
- cd "${WORKDIR}"/elf2flt-${ELF2FLT_VER}
-
- local x supported_arches=$(sed -n '/defined(TARGET_/{s:^.*TARGET_::;s:)::;p}' elf2flt.c | sort -u)
- for x in ${supported_arches} UNSUPPORTED ; do
- [[ ${CTARGET} == ${x}* ]] && break
- done
-
- if [[ ${x} != "UNSUPPORTED" ]] ; then
- append-flags -I"${S}"/include
- myconf+=(
- --with-bfd-include-dir=${MY_BUILDDIR}/bfd
- --with-libbfd=${MY_BUILDDIR}/bfd/libbfd.a
- --with-libiberty=${MY_BUILDDIR}/libiberty/libiberty.a
- --with-binutils-ldscript-dir="${EPREFIX}"${LIBPATH}/ldscripts
- )
- echo ./configure "${myconf[@]}"
- ./configure "${myconf[@]}" || die
- emake || die "make elf2flt failed"
- fi
- fi
-}
-
-toolchain-binutils_src_test() {
- cd "${MY_BUILDDIR}"
- emake -k check || die "check failed :("
-}
-
-toolchain-binutils_src_install() {
- _eprefix_init
- local x d
-
- cd "${MY_BUILDDIR}"
- emake DESTDIR="${D}" tooldir="${EPREFIX}${LIBPATH}" install || die
- rm -rf "${ED}"/${LIBPATH}/bin
- use static-libs || find "${ED}" -name '*.la' -delete
-
- # Newer versions of binutils get fancy with ${LIBPATH} #171905
- cd "${ED}"/${LIBPATH}
- for d in ../* ; do
- [[ ${d} == ../${BVER} ]] && continue
- mv ${d}/* . || die
- rmdir ${d} || die
- done
-
- # Now we collect everything intp the proper SLOT-ed dirs
- # When something is built to cross-compile, it installs into
- # /usr/$CHOST/ by default ... we have to 'fix' that :)
- if is_cross ; then
- cd "${ED}"/${BINPATH}
- for x in * ; do
- mv ${x} ${x/${CTARGET}-}
- done
-
- if [[ -d ${ED}/usr/${CHOST}/${CTARGET} ]] ; then
- mv "${ED}"/usr/${CHOST}/${CTARGET}/include "${ED}"/${INCPATH}
- mv "${ED}"/usr/${CHOST}/${CTARGET}/lib/* "${ED}"/${LIBPATH}/
- rm -r "${ED}"/usr/${CHOST}/{include,lib}
- fi
- fi
- insinto ${INCPATH}
- local libiberty_headers=(
- # Not all the libiberty headers. See libiberty/Makefile.in:install_to_libdir.
- demangle.h
- dyn-string.h
- fibheap.h
- hashtab.h
- libiberty.h
- objalloc.h
- splay-tree.h
- )
- doins "${libiberty_headers[@]/#/${S}/include/}" || die
- if [[ -d ${ED}/${LIBPATH}/lib ]] ; then
- mv "${ED}"/${LIBPATH}/lib/* "${ED}"/${LIBPATH}/
- rm -r "${ED}"/${LIBPATH}/lib
- fi
-
- # Insert elf2flt where appropriate
- if [[ -x ${WORKDIR}/elf2flt-${ELF2FLT_VER}/elf2flt ]] ; then
- cd "${WORKDIR}"/elf2flt-${ELF2FLT_VER}
- insinto ${LIBPATH}/ldscripts
- doins elf2flt.ld || die "doins elf2flt.ld failed"
- exeinto ${BINPATH}
- doexe elf2flt flthdr || die "doexe elf2flt flthdr failed"
- mv "${ED}"/${BINPATH}/{ld,ld.real} || die
- newexe ld-elf2flt ld || die "doexe ld-elf2flt failed"
- newdoc README README.elf2flt
- fi
-
- # Generate an env.d entry for this binutils
- insinto /etc/env.d/binutils
- cat <<-EOF > "${T}"/env.d
- TARGET="${CTARGET}"
- VER="${BVER}"
- LIBPATH="${EPREFIX}${LIBPATH}"
- EOF
- newins "${T}"/env.d ${CTARGET}-${BVER}
-
- # Handle documentation
- if ! is_cross ; then
- cd "${S}"
- dodoc README
- docinto bfd
- dodoc bfd/ChangeLog* bfd/README bfd/PORTING bfd/TODO
- docinto binutils
- dodoc binutils/ChangeLog binutils/NEWS binutils/README
- docinto gas
- dodoc gas/ChangeLog* gas/CONTRIBUTORS gas/NEWS gas/README*
- docinto gprof
- dodoc gprof/ChangeLog* gprof/TEST gprof/TODO gprof/bbconv.pl
- docinto ld
- dodoc ld/ChangeLog* ld/README ld/NEWS ld/TODO
- docinto libiberty
- dodoc libiberty/ChangeLog* libiberty/README
- docinto opcodes
- dodoc opcodes/ChangeLog*
- fi
- # Remove shared info pages
- rm -f "${ED}"/${DATAPATH}/info/{dir,configure.info,standards.info}
- # Trim all empty dirs
- find "${ED}" -depth -type d -exec rmdir {} + 2>/dev/null
-}
-
-toolchain-binutils_pkg_postinst() {
- _eprefix_init
- # Make sure this ${CTARGET} has a binutils version selected
- [[ -e ${EROOT}/etc/env.d/binutils/config-${CTARGET} ]] && return 0
- binutils-config ${CTARGET}-${BVER}
-}
-
-toolchain-binutils_pkg_postrm() {
- _eprefix_init
- local current_profile=$(binutils-config -c ${CTARGET})
-
- # If no other versions exist, then uninstall for this
- # target ... otherwise, switch to the newest version
- # Note: only do this if this version is unmerged. We
- # rerun binutils-config if this is a remerge, as
- # we want the mtimes on the symlinks updated (if
- # it is the same as the current selected profile)
- if [[ ! -e ${EPREFIX}${BINPATH}/ld ]] && [[ ${current_profile} == ${CTARGET}-${BVER} ]] ; then
- local choice=$(binutils-config -l | grep ${CTARGET} | awk '{print $2}')
- choice=${choice//$'\n'/ }
- choice=${choice/* }
- if [[ -z ${choice} ]] ; then
- binutils-config -u ${CTARGET}
- else
- binutils-config ${choice}
- fi
- elif [[ $(CHOST=${CTARGET} binutils-config -c) == ${CTARGET}-${BVER} ]] ; then
- binutils-config ${CTARGET}-${BVER}
- fi
-}
diff --git a/eclass/toolchain.eclass b/eclass/toolchain.eclass
index 5acaa2ffc688..03e335dac5c5 100644
--- a/eclass/toolchain.eclass
+++ b/eclass/toolchain.eclass
@@ -9,7 +9,11 @@ HOMEPAGE="https://gcc.gnu.org/"
inherit eutils fixheadtails flag-o-matic gnuconfig libtool multilib pax-utils toolchain-funcs prefix
-if [[ ${PV} == *9999* ]] ; then
+tc_is_live() {
+ [[ ${PV} == *9999* ]]
+}
+
+if tc_is_live ; then
EGIT_REPO_URI="git://gcc.gnu.org/git/gcc.git"
# naming style:
# gcc-10.1.0_pre9999 -> gcc-10-branch
@@ -69,26 +73,25 @@ GCCMAJOR=$(ver_cut 1 ${GCC_PV})
GCCMINOR=$(ver_cut 2 ${GCC_PV})
GCCMICRO=$(ver_cut 3 ${GCC_PV})
-# According to gcc/c-cppbuiltin.c, GCC_CONFIG_VER MUST match this regex.
-# ([^0-9]*-)?[0-9]+[.][0-9]+([.][0-9]+)?([- ].*)?
-GCC_CONFIG_VER=${GCC_CONFIG_VER:-$(ver_rs 3 '-' ${GCC_PV})}
-
-# Pre-release support
-if [[ ${GCC_PV} == *_pre* ]] ; then
- PRERELEASE=${GCC_PV/_pre/-}
-elif [[ ${GCC_PV} == *_alpha* ]] ; then
- SNAPSHOT=${GCC_BRANCH_VER}-${GCC_PV##*_alpha}
-elif [[ ${GCC_PV} == *_beta* ]] ; then
- SNAPSHOT=${GCC_BRANCH_VER}-${GCC_PV##*_beta}
+# gcc hardcodes it's internal version into gcc/BASE-VER
+# and assumes various directories and tools to have the
+# same name.
+# TODO: once ada ebuilds are fixed turn it to
+# GCC_CONFIG_VER=${GCC_RELEASE_VER}
+GCC_CONFIG_VER=${GCC_CONFIG_VER:-${GCC_RELEASE_VER}}
+
+# Pre-release support. Versioning schema:
+# 1.0.0_pre9999: live ebuild
+# 1.2.3_alphaYYYYMMDD: weekly snapshots
+# 1.2.3_rcYYYYMMDD: release candidates
+if [[ ${GCC_PV} == *_alpha* ]] ; then
+ # weekly snapshots
+ SNAPSHOT=${GCCMAJOR}-${GCC_PV##*_alpha}
elif [[ ${GCC_PV} == *_rc* ]] ; then
+ # release candidates
SNAPSHOT=${GCC_PV%_rc*}-RC-${GCC_PV##*_rc}
fi
-if [[ ${SNAPSHOT} == [56789].0-* ]] ; then
- # The gcc-5+ releases have dropped the .0 for some reason.
- SNAPSHOT=${SNAPSHOT/.0}
-fi
-
PREFIX=${TOOLCHAIN_PREFIX:-${EPREFIX}/usr}
if tc_version_is_at_least 3.4.0 ; then
@@ -187,7 +190,7 @@ if [[ ${PN} != "kgcc64" && ${PN} != gcc-* ]] ; then
fi
if tc_version_is_at_least 10; then
- # Note: currently we pull in prereleases, snapshots and
+ # Note: currently we pull in releases, snapshots and
# git versions into the same SLOT.
SLOT="${GCCMAJOR}"
else
@@ -256,12 +259,10 @@ PDEPEND=">=sys-devel/gcc-config-1.7"
#---->> S + SRC_URI essentials <<----
# Set the source directory depending on whether we're using
-# a prerelease, snapshot, or release tarball.
+# a live git tree, snapshot, or release tarball.
S=$(
- if [[ ${PV} == *9999* ]]; then
+ if tc_is_live ; then
echo ${EGIT_CHECKOUT_DIR}
- elif [[ -n ${PRERELEASE} ]] ; then
- echo ${WORKDIR}/gcc-${PRERELEASE}
elif [[ -n ${SNAPSHOT} ]] ; then
echo ${WORKDIR}/gcc-${SNAPSHOT}
else
@@ -285,6 +286,10 @@ gentoo_urls() {
# Other than the variables normally set by portage, this function's behavior
# can be altered by setting the following:
#
+# GCC_TARBALL_SRC_URI
+# Override link to main tarball into SRC_URI. Used by dev-lang/gnat-gpl
+# to provide gcc tarball snapshots. Patches are usually reused as-is.
+#
# SNAPSHOT
# If set, this variable signals that we should be using a snapshot of
# gcc. It is expected to be in the format "YYYY-MM-DD". Note that if
@@ -343,18 +348,14 @@ get_gcc_src_uri() {
export SPECS_GCC_VER=${SPECS_GCC_VER:-${GCC_RELEASE_VER}}
# Set where to download gcc itself depending on whether we're using a
- # prerelease, snapshot, or release tarball.
- if [[ ${PV} == *9999* ]] ; then
- # Nothing to do w/git snapshots.
- :
- elif [[ -n ${PRERELEASE} ]] ; then
- GCC_SRC_URI="ftp://gcc.gnu.org/pub/gcc/prerelease-${PRERELEASE}/gcc-${PRERELEASE}.tar.bz2"
+ # live git tree, snapshot, or release tarball.
+ if tc_is_live ; then
+ : # Nothing to do w/git snapshots.
+ elif [[ -n ${GCC_TARBALL_SRC_URI} ]] ; then
+ # pull gcc tarball from another location. Frequently used by gnat-gpl.
+ GCC_SRC_URI="${GCC_TARBALL_SRC_URI}"
elif [[ -n ${SNAPSHOT} ]] ; then
- if tc_version_is_between 5.5 6 || tc_version_is_between 6.4 7 || tc_version_is_at_least 7.2 ; then
- GCC_SRC_URI="ftp://gcc.gnu.org/pub/gcc/snapshots/${SNAPSHOT}/gcc-${SNAPSHOT}.tar.xz"
- else
- GCC_SRC_URI="ftp://gcc.gnu.org/pub/gcc/snapshots/${SNAPSHOT}/gcc-${SNAPSHOT}.tar.bz2"
- fi
+ GCC_SRC_URI="ftp://gcc.gnu.org/pub/gcc/snapshots/${SNAPSHOT}/gcc-${SNAPSHOT}.tar.xz"
else
if tc_version_is_between 5.5 6 || tc_version_is_between 6.4 7 || tc_version_is_at_least 7.2 ; then
GCC_SRC_URI="mirror://gnu/gcc/gcc-${GCC_PV}/gcc-${GCC_RELEASE_VER}.tar.xz"
@@ -409,8 +410,12 @@ SRC_URI=$(get_gcc_src_uri)
#---->> pkg_pretend <<----
+toolchain_is_unsupported() {
+ [[ -n ${SNAPSHOT} ]] || tc_is_live
+}
+
toolchain_pkg_pretend() {
- if [[ -n ${PRERELEASE}${SNAPSHOT} || ${PV} == *9999* ]] &&
+ if toolchain_is_unsupported &&
[[ -z ${I_PROMISE_TO_SUPPLY_PATCHES_WITH_BUGS} ]] ; then
die "Please \`export I_PROMISE_TO_SUPPLY_PATCHES_WITH_BUGS=1\` or define it" \
"in your make.conf if you want to use this version."
@@ -436,11 +441,17 @@ toolchain_pkg_setup() {
#---->> src_unpack <<----
toolchain_src_unpack() {
- if [[ ${PV} == *9999* ]]; then
+ if tc_is_live ; then
git-r3_src_unpack
fi
- gcc_quick_unpack
+ if [[ -n ${GCC_A_FAKEIT} ]] ; then
+ eerror "Please migrate from 'GCC_A_FAKEIT' to 'default_src_unpack()'"
+ gcc_quick_unpack
+ else
+ # Just unpack every tarball from SRC_URI
+ default_src_unpack
+ fi
}
gcc_quick_unpack() {
@@ -455,17 +466,11 @@ gcc_quick_unpack() {
# 'GCC_A_FAKEIT' to specify it's own source and binary tarballs.
if [[ -n ${GCC_A_FAKEIT} ]] ; then
unpack ${GCC_A_FAKEIT}
- elif [[ ${PV} == *9999* ]]; then
+ elif tc_is_live ; then
: # sources comes from git, not tarball
- elif [[ -n ${PRERELEASE} ]] ; then
- unpack gcc-${PRERELEASE}.tar.bz2
elif [[ -n ${SNAPSHOT} ]] ; then
- if tc_version_is_between 5.5 6 || tc_version_is_between 6.4 7 || tc_version_is_at_least 7.2 ; then
- unpack gcc-${SNAPSHOT}.tar.xz
- else
- unpack gcc-${SNAPSHOT}.tar.bz2
- fi
- elif [[ ${PV} != *9999* ]] ; then
+ unpack gcc-${SNAPSHOT}.tar.xz
+ else
if tc_version_is_between 5.5 6 || tc_version_is_between 6.4 7 || tc_version_is_at_least 7.2 ; then
unpack gcc-${GCC_RELEASE_VER}.tar.xz
else
@@ -473,21 +478,6 @@ gcc_quick_unpack() {
fi
fi
- if [[ -n ${D_VER} ]] && use d ; then
- pushd "${S}"/gcc > /dev/null
- unpack gdc-${D_VER}-src.tar.bz2
- cd ..
- ebegin "Adding support for the D language"
- ./gcc/d/setup-gcc.sh >& "${T}"/dgcc.log
- if ! eend $? ; then
- eerror "The D GCC package failed to apply"
- eerror "Please include this log file when posting a bug report:"
- eerror " ${T}/dgcc.log"
- die "failed to include the D language"
- fi
- popd > /dev/null
- fi
-
[[ -n ${PATCH_VER} ]] && \
unpack gcc-${PATCH_GCC_VER}-patches-${PATCH_VER}.tar.bz2
@@ -533,12 +523,24 @@ toolchain_src_prepare() {
export BRANDING_GCC_PKGVERSION="Gentoo ${GCC_PVR}"
cd "${S}"
+ if [[ -n ${D_VER} ]] && use d ; then
+ mv "${WORKDIR}"/d gcc/d || die
+ ebegin "Adding support for the D language"
+ ./gcc/d/setup-gcc.sh >& "${T}"/dgcc.log
+ if ! eend $? ; then
+ eerror "The D GCC package failed to apply"
+ eerror "Please include this log file when posting a bug report:"
+ eerror " ${T}/dgcc.log"
+ die "failed to include the D language"
+ fi
+ fi
+
do_gcc_gentoo_patches
do_gcc_HTB_patches
do_gcc_PIE_patches
do_gcc_CYGWINPORTS_patches
- if [[ ${PV} == *9999* ]] ; then
+ if tc_is_live ; then
BRANDING_GCC_PKGVERSION="${BRANDING_GCC_PKGVERSION}, commit ${EGIT_VERSION}"
fi
@@ -579,13 +581,12 @@ toolchain_src_prepare() {
gcc_version_patch
if tc_version_is_at_least 4.1 ; then
- if [[ -n ${SNAPSHOT} || -n ${PRERELEASE} ]] ; then
- # BASE-VER must be a three-digit version number
- # followed by an optional -pre string
- # eg. 4.5.1, 4.6.2-pre20120213, 4.7.0-pre9999
- # If BASE-VER differs from ${PV/_/-} then libraries get installed in
- # the wrong directory.
- echo ${PV/_/-} > "${S}"/gcc/BASE-VER
+ local actual_version=$(< "${S}"/gcc/BASE-VER)
+ if [[ "${GCC_RELEASE_VER}" != "${actual_version}" ]] ; then
+ eerror "'${S}/gcc/BASE-VER' contains '${actual_version}', expected '${GCC_RELEASE_VER}'"
+ # TODO: once ada ebuilds are fixed turn it to 'die'
+ eerror "Please set GCC_RELEASE_VER to '${actual_version}'"
+ echo "${GCC_CONFIG_VER}" > "${S}"/gcc/BASE-VER
fi
fi
@@ -815,7 +816,7 @@ gcc_version_patch() {
# gcc-4.3+ has configure flags (whoo!)
tc_version_is_at_least 4.3 && return 0
- local version_string=${GCC_CONFIG_VER}
+ local version_string=${GCC_RELEASE_VER}
einfo "patching gcc version: ${version_string} (${BRANDING_GCC_PKGVERSION})"
@@ -2255,7 +2256,7 @@ toolchain_pkg_postinst() {
cp "${ROOT%/}${DATAPATH}"/c{89,99} "${EROOT%/}"/usr/bin/ 2>/dev/null
fi
- if [[ -n ${PRERELEASE}${SNAPSHOT} ]] ; then
+ if toolchain_is_unsupported ; then
einfo "This GCC ebuild is provided for your convenience, and the use"
einfo "of this compiler is not supported by the Gentoo Developers."
einfo "Please report bugs to upstream at http://gcc.gnu.org/bugzilla/"