From bd4aeefe33e63f613512604e47bfca7b2187697d Mon Sep 17 00:00:00 2001 From: V3n3RiX Date: Sun, 3 Nov 2019 16:06:58 +0000 Subject: gentoo resync : 03.11.2019 --- eclass/Manifest.gz | Bin 37634 -> 37628 bytes eclass/ada.eclass | 7 +- eclass/bzr.eclass | 6 +- eclass/distutils-r1.eclass | 2 + eclass/font.eclass | 116 +++++++++---------- eclass/java-ant-2.eclass | 15 ++- eclass/java-utils-2.eclass | 9 +- eclass/kde5-functions.eclass | 53 +-------- eclass/kde5.eclass | 33 ++---- eclass/llvm.org.eclass | 198 ++++++++++++++++++++++++++++++++ eclass/myspell.eclass | 256 ------------------------------------------ eclass/nvidia-driver.eclass | 1 + eclass/perl-app.eclass | 9 ++ eclass/perl-module.eclass | 15 ++- eclass/python-utils-r1.eclass | 2 +- eclass/qt5-build.eclass | 2 +- eclass/tests/toolchain.sh | 1 - eclass/texlive-module.eclass | 8 ++ eclass/toolchain-glibc.eclass | 12 -- eclass/toolchain.eclass | 183 +++++++++++++++--------------- 20 files changed, 417 insertions(+), 511 deletions(-) create mode 100644 eclass/llvm.org.eclass delete mode 100644 eclass/myspell.eclass (limited to 'eclass') diff --git a/eclass/Manifest.gz b/eclass/Manifest.gz index 3231925b1992..593e355d8ccb 100644 Binary files a/eclass/Manifest.gz and b/eclass/Manifest.gz differ diff --git a/eclass/ada.eclass b/eclass/ada.eclass index dad3d9acce85..361ffb65cd10 100644 --- a/eclass/ada.eclass +++ b/eclass/ada.eclass @@ -355,7 +355,7 @@ ada_wrapper_setup() { mkdir -p "${workdir}"/bin || die local GCC GNATMAKE GNATLS GNATBIND GNATCHOP GNATPREP - ada_export "${impl}" GCC GNATMAKE GNATLS GNATCHOP GNATBIND GNATPREP + ada_export "${impl}" GCC GNAT GNATMAKE GNATLS GNATCHOP GNATBIND GNATPREP # Ada compiler cat > "${workdir}/bin/gcc" <<-_EOF_ || die @@ -388,6 +388,11 @@ ada_wrapper_setup() { exec "${GNATPREP}" "\${@}" _EOF_ chmod a+x "${workdir}/bin/gnatprep" || die + cat > "${workdir}/bin/gnat" <<-_EOF_ || die + #!/bin/sh + exec "${GNAT}" "\${@}" + _EOF_ + chmod a+x "${workdir}/bin/gnat" || die fi # Now, set the environment. diff --git a/eclass/bzr.eclass b/eclass/bzr.eclass index 598a0f87fe6d..fc1de9dc9ccc 100644 --- a/eclass/bzr.eclass +++ b/eclass/bzr.eclass @@ -1,6 +1,6 @@ # Copyright 1999-2019 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 -# + # @ECLASS: bzr.eclass # @MAINTAINER: # Ulrich Müller @@ -197,7 +197,7 @@ bzr_update() { || die "${EBZR}: can't chdir to ${branch_dir}" ${EBZR_UPDATE_CMD} ${EBZR_OPTIONS} "${repo_uri}" \ || die "${EBZR}: can't pull from ${repo_uri}" - popd > /dev/null + popd > /dev/null || die "${EBZR}: popd failed" fi } @@ -278,7 +278,7 @@ bzr_fetch() { einfo \ "revision ${EBZR_REVISION:-${EBZR_REVNO}} is now in ${EBZR_UNPACK_DIR}" - popd > /dev/null + popd > /dev/null || die "${EBZR}: popd failed" } # @FUNCTION: bzr_src_unpack diff --git a/eclass/distutils-r1.eclass b/eclass/distutils-r1.eclass index 7c56a0c8a136..d3eb8f22ead2 100644 --- a/eclass/distutils-r1.eclass +++ b/eclass/distutils-r1.eclass @@ -547,6 +547,8 @@ distutils-r1_python_install() { # failures if some packages haven't compiled their modules yet. addpredict "${EPREFIX}/usr/lib/${EPYTHON}" addpredict "${EPREFIX}/usr/$(get_libdir)/${EPYTHON}" + addpredict /usr/lib/pypy2.7 + addpredict /usr/lib/pypy3.6 addpredict /usr/lib/portage/pym addpredict /usr/local # bug 498232 diff --git a/eclass/font.eclass b/eclass/font.eclass index 1570bf3f6e19..76c20549ea64 100644 --- a/eclass/font.eclass +++ b/eclass/font.eclass @@ -4,16 +4,15 @@ # @ECLASS: font.eclass # @MAINTAINER: # fonts@gentoo.org -# @SUPPORTED_EAPIS: 0 1 2 3 4 5 6 +# @SUPPORTED_EAPIS: 0 1 2 3 4 5 6 7 # @BLURB: Eclass to make font installation uniform case ${EAPI:-0} in - 0|1|2|3|4|5|6) ;; - *) die "EAPI ${EAPI} is not supported by font.eclass." ;; + 0|1|2|3|4|5|6) inherit eutils ;; + 7) ;; + *) die "EAPI ${EAPI} is not supported by font.eclass." ;; esac -inherit eutils - EXPORT_FUNCTIONS pkg_setup src_install pkg_postinst pkg_postrm # @ECLASS-VARIABLE: FONT_SUFFIX @@ -67,18 +66,18 @@ fi # Generate Xorg font files (mkfontscale/mkfontdir). font_xfont_config() { local dir_name - if has X ${IUSE//+} && use X ; then + if in_iuse X && use X ; then dir_name="${1:-${FONT_PN}}" - ebegin "Creating fonts.scale & fonts.dir in ${dir_name##*/}" - rm -f "${ED}${FONTDIR}/${1//${S}/}"/{fonts.{dir,scale},encodings.dir} - mkfontscale "${ED}${FONTDIR}/${1//${S}/}" + rm -f "${ED%/}/${FONTDIR}/${1//${S}/}"/{fonts.{dir,scale},encodings.dir} \ + || die "failed to prepare ${FONTDIR}/${1//${S}/}" + einfo "Creating fonts.scale & fonts.dir in ${dir_name##*/}" + mkfontscale "${ED%/}/${FONTDIR}/${1//${S}/}" || eerror "failed to create fonts.scale" mkfontdir \ -e ${EPREFIX}/usr/share/fonts/encodings \ -e ${EPREFIX}/usr/share/fonts/encodings/large \ - "${ED}${FONTDIR}/${1//${S}/}" - eend $? - if [[ -e fonts.alias ]] ; then - doins fonts.alias + "${ED%/}/${FONTDIR}/${1//${S}/}" || eerror "failed to create fonts.dir" + if [[ -e fonts.alias ]]; then + doins fonts.alias || die "failed to install fonts.alias" # TODO old EAPI cleanup fi fi } @@ -91,7 +90,9 @@ font_fontconfig() { if [[ -n ${FONT_CONF[@]} ]]; then insinto /etc/fonts/conf.avail/ for conffile in "${FONT_CONF[@]}"; do - [[ -e ${conffile} ]] && doins ${conffile} + if [[ -e ${conffile} ]]; then + doins ${conffile} || die "failed to install conf file" # TODO old EAPI cleanup + fi done fi } @@ -105,20 +106,18 @@ font_cleanup_dirs() { local d f g generated candidate otherfile ebegin "Cleaning up font directories" - find -L "${EROOT}"usr/share/fonts/ -type d -print0 | while read -d $'\0' d; do + while read -d $'\0' -r; do candidate=false otherfile=false for f in "${d}"/*; do generated=false # make sure this is a file and not a subdir [[ -e ${f} || -L ${f} ]] || continue - for g in ${genfiles}; do - if [[ ${f##*/} == ${g} ]]; then - # this is a generated file - generated=true - break - fi - done + if has ${f##*/} ${genfiles}; then + # this is a generated file + generated=true + break + fi # if the file is a generated file then we know this is a font dir (as # opposed to something like encodings or util) and a candidate for # removal. if it's not generated then it's an "otherfile". @@ -133,13 +132,14 @@ font_cleanup_dirs() { # media-fonts/font-alias. any other fonts.alias files will have # already been unmerged with their packages. for g in ${genfiles}; do - [[ ${g} != fonts.alias && ( -e ${d}/${g} || -L ${d}/${g} ) ]] \ - && rm "${d}"/${g} + if [[ ${g} != fonts.alias && ( -e ${d}/${g} || -L ${d}/${g} ) ]] ; then + rm "${d}"/${g} || eerror "failed to remove ${d}/${g}" + fi done # if there's nothing left remove the directory - find "${d}" -maxdepth 0 -type d -empty -exec rmdir '{}' \; + find "${d}" -maxdepth 0 -type d -empty -delete || eerror "failed to purge ${d}" fi - done + done < <(find -L "${EROOT%/}"/usr/share/fonts/ -type d -print0) eend 0 } @@ -162,7 +162,9 @@ font_pkg_setup() { # make sure we get no collisions # setup is not the nicest place, but preinst doesn't cut it - [[ -e "${EROOT}/${FONTDIR}/fonts.cache-1" ]] && rm -f "${EROOT}/${FONTDIR}/fonts.cache-1" + if [[ -e "${EROOT%/}/${FONTDIR}/fonts.cache-1" ]] ; then + rm "${EROOT%/}/${FONTDIR}/fonts.cache-1" || die "failed to remove fonts.cache-1" + fi } # @FUNCTION: font_src_install @@ -179,7 +181,7 @@ font_src_install() { pushd "${dir}" > /dev/null insinto "${FONTDIR}/${dir//${S}/}" for suffix in ${FONT_SUFFIX}; do - doins *.${suffix} + doins *.${suffix} || die "font installation failed" # TODO old EAPI cleanup done font_xfont_config "${dir}" popd > /dev/null @@ -188,7 +190,7 @@ font_src_install() { pushd "${FONT_S}" > /dev/null insinto "${FONTDIR}" for suffix in ${FONT_SUFFIX}; do - doins *.${suffix} + doins *.${suffix} || die "font installation failed" # TODO old EAPI cleanup done font_xfont_config popd > /dev/null @@ -196,7 +198,7 @@ font_src_install() { font_fontconfig - [[ -n ${DOCS} ]] && { dodoc ${DOCS} || die "docs installation failed" ; } + [[ -n ${DOCS} ]] && { dodoc ${DOCS} || die "docs installation failed" ; } # TODO old EAPI cleanup # install common docs for commondoc in COPYRIGHT README{,.md,.txt} NEWS AUTHORS BUGS ChangeLog FONTLOG.txt; do @@ -204,36 +206,47 @@ font_src_install() { done } +# @FUNCTION: _update_fontcache +# @DESCRIPTION: +# Updates fontcache if !prefix and media-libs/fontconfig installed +_update_fontcache() { + # unreadable font files = fontconfig segfaults + find "${EROOT%/}"/usr/share/fonts/ -type f '!' -perm 0644 \ + -exec chmod -v 0644 2>/dev/null {} + || die "failed to fix font files perms" + + if [[ -z ${ROOT%/} ]] ; then + if has_version media-libs/fontconfig ; then + ebegin "Updating global fontcache" + fc-cache -fs + if ! eend $? ; then + die "failed to update global fontcache" + fi + else + einfo "Skipping fontcache update (media-libs/fontconfig not installed)" + fi + else + einfo "Skipping fontcache update (ROOT != /)" + fi +} + # @FUNCTION: font_pkg_postinst # @DESCRIPTION: # The font pkg_postinst function. font_pkg_postinst() { - # unreadable font files = fontconfig segfaults - find "${EROOT}"usr/share/fonts/ -type f '!' -perm 0644 -print0 \ - | xargs -0 chmod -v 0644 2>/dev/null - if [[ -n ${FONT_CONF[@]} ]]; then local conffile - echo elog "The following fontconfig configuration files have been installed:" elog for conffile in "${FONT_CONF[@]}"; do - if [[ -e ${EROOT}etc/fonts/conf.avail/$(basename ${conffile}) ]]; then - elog " $(basename ${conffile})" + if [[ -e "${EROOT%/}"/etc/fonts/conf.avail/${conffile##*/} ]]; then + elog " ${conffile##*/}" fi done elog elog "Use \`eselect fontconfig\` to enable/disable them." - echo fi - if has_version media-libs/fontconfig && [[ ${ROOT} == / ]]; then - ebegin "Updating global fontcache" - fc-cache -fs - eend $? - else - einfo "Skipping fontcache update (media-libs/fontconfig is not installed or ROOT != /)" - fi + _update_fontcache } # @FUNCTION: font_pkg_postrm @@ -241,16 +254,5 @@ font_pkg_postinst() { # The font pkg_postrm function. font_pkg_postrm() { font_cleanup_dirs - - # unreadable font files = fontconfig segfaults - find "${EROOT}"usr/share/fonts/ -type f '!' -perm 0644 -print0 \ - | xargs -0 chmod -v 0644 2>/dev/null - - if has_version media-libs/fontconfig && [[ ${ROOT} == / ]]; then - ebegin "Updating global fontcache" - fc-cache -fs - eend $? - else - einfo "Skipping fontcache update (media-libs/fontconfig is not installed or ROOT != /)" - fi + _update_fontcache } diff --git a/eclass/java-ant-2.eclass b/eclass/java-ant-2.eclass index 1fd4feb39134..5be76953edd6 100644 --- a/eclass/java-ant-2.eclass +++ b/eclass/java-ant-2.eclass @@ -224,8 +224,13 @@ java-ant_bsfix_files() { files+=( -f "${file}" ) done - local rewriter3="${EPREFIX}/usr/$(get_libdir)/javatoolkit/bin/xml-rewrite-3.py" - local rewriter4="${EPREFIX}/usr/$(get_libdir)/javatoolkit/bin/build-xml-rewrite" + if [ -e "${EPREFIX}/usr/libexec/javatoolkit" ]; then + local rewriter3="${EPREFIX}/usr/libexec/javatoolkit/xml-rewrite-3.py" + local rewriter4="${EPREFIX}/usr/libexec/javatoolkit/build-xml-rewrite" + else + local rewriter3="${EPREFIX}/usr/$(get_libdir)/javatoolkit/bin/xml-rewrite-3.py" + local rewriter4="${EPREFIX}/usr/$(get_libdir)/javatoolkit/bin/build-xml-rewrite" + fi if [[ -x ${rewriter4} && ${JAVA_ANT_ENCODING} ]]; then [[ ${JAVA_ANT_REWRITE_CLASSPATH} ]] && local gcp="-g" @@ -375,11 +380,11 @@ java-ant_ignore-system-classes() { # @DESCRIPTION: # Run the right xml-rewrite binary with the given arguments java-ant_xml-rewrite() { - local gen2="${EPREFIX}/usr/bin/xml-rewrite-2.py" local gen2_1="${EPREFIX}/usr/$(get_libdir)/javatoolkit/bin/xml-rewrite-2.py" + local gen2_2="${EPREFIX}/usr/libexec/javatoolkit/xml-rewrite-2.py" # gen1 is deprecated - if [[ -x "${gen2}" ]]; then - ${gen2} "${@}" || die "${gen2} failed" + if [[ -x "${gen2_2}" ]]; then + ${gen2_2} "${@}" || die "${gen2_2} failed" elif [[ -x "${gen2_1}" ]]; then ${gen2_1} "${@}" || die "${gen2_1} failed" else diff --git a/eclass/java-utils-2.eclass b/eclass/java-utils-2.eclass index 4f7eb0356fc9..e32cb572f147 100644 --- a/eclass/java-utils-2.eclass +++ b/eclass/java-utils-2.eclass @@ -2729,10 +2729,13 @@ java-pkg_jar-list() { java-pkg_verify-classes() { #$(find ${D} -type f -name '*.jar' -o -name '*.class') - local version_verify="/usr/bin/class-version-verify.py" + local version_verify_1="${EPREFIX}/usr/$(get_libdir)/javatoolkit/bin/class-version-verify.py" + local version_verify_2="${EPREFIX}/usr/libexec/javatoolkit/class-version-verify.py" - if [[ ! -x "${version_verify}" ]]; then - version_verify="/usr/$(get_libdir)/javatoolkit/bin/class-version-verify.py" + if [[ -x "${version_verify_1}" ]]; then + local version_verify=${version_verify_1} + else + local version_verify=${version_verify_2} fi if [[ ! -x "${version_verify}" ]]; then diff --git a/eclass/kde5-functions.eclass b/eclass/kde5-functions.eclass index 377f741cb28f..652ed06b7be5 100644 --- a/eclass/kde5-functions.eclass +++ b/eclass/kde5-functions.eclass @@ -4,7 +4,7 @@ # @ECLASS: kde5-functions.eclass # @MAINTAINER: # kde@gentoo.org -# @SUPPORTED_EAPIS: 6 7 +# @SUPPORTED_EAPIS: 7 # @BLURB: Common ebuild functions for packages based on KDE Frameworks 5. # @DESCRIPTION: # This eclass contains functions shared by the other KDE eclasses and forms @@ -19,7 +19,6 @@ inherit toolchain-funcs case ${EAPI} in 7) ;; - 6) inherit eapi7-ver ;; *) die "EAPI=${EAPI:-0} is not supported" ;; esac @@ -38,10 +37,7 @@ case ${CATEGORY} in [[ ${KDE_BUILD_TYPE} = live ]] && : ${FRAMEWORKS_MINIMAL:=9999} ;; kde-plasma) - if [[ ${PV} = 5.15.5 ]]; then - : ${FRAMEWORKS_MINIMAL:=5.57.0} - : ${QT_MINIMAL:=5.11.1} - fi + [[ ${PV} = 5.17* ]] && : ${FRAMEWORKS_MINIMAL:=5.63.0} [[ ${KDE_BUILD_TYPE} = live ]] && : ${FRAMEWORKS_MINIMAL:=9999} ;; esac @@ -252,10 +248,6 @@ add_qt_dep() { if [[ -z ${version} ]]; then version=${QT_MINIMAL} - if [[ ${1} = qtwebkit ]]; then - version=5.9.1 - [[ ${EAPI} != 6 ]] && die "${FUNCNAME} is disallowed for 'qtwebkit' in EAPI 7 and later" - fi fi if [[ -z ${slot} ]]; then slot="5" @@ -264,47 +256,6 @@ add_qt_dep() { _add_category_dep dev-qt "${1}" "${2}" "${version}" "${slot}" } -# @FUNCTION: get_kde_version [version] -# @DESCRIPTION: -# Translates an ebuild version into a major.minor KDE release version, taking -# into account KDE's prerelease versioning scheme. -# For example, get_kde_version 17.07.80 will return "17.08". -# If the version equals 9999, "live" is returned. -# If no version is specified, ${PV} is used. -get_kde_version() { - [[ ${EAPI} != 6 ]] && die "${FUNCNAME} is banned in EAPI 7 and later" - local ver=${1:-${PV}} - local major=$(ver_cut 1 ${ver}) - local minor=$(ver_cut 2 ${ver}) - local micro=$(ver_cut 3 ${ver}) - if [[ ${ver} == 9999 ]]; then - echo live - else - (( micro < 50 )) && echo ${major}.${minor} || echo ${major}.$((minor + 1)) - fi -} - -# @FUNCTION: kde_l10n2lingua -# @USAGE: ... -# @INTERNAL -# @DESCRIPTION: -# Output KDE lingua flag name(s) (without prefix(es)) appropriate for -# given l10n(s). -kde_l10n2lingua() { - [[ ${EAPI} != 6 ]] && die "${FUNCNAME} is banned in EAPI 7 and later" - local l - for l; do - case ${l} in - ca-valencia) echo ca@valencia;; - sr-ijekavsk) echo sr@ijekavian;; - sr-Latn-ijekavsk) echo sr@ijekavianlatin;; - sr-Latn) echo sr@latin;; - uz-Cyrl) echo uz@cyrillic;; - *) echo "${l/-/_}";; - esac - done -} - # @FUNCTION: punt_bogus_dep # @USAGE: # @DESCRIPTION: diff --git a/eclass/kde5.eclass b/eclass/kde5.eclass index db9fc4427c71..ee1d3b35aa8c 100644 --- a/eclass/kde5.eclass +++ b/eclass/kde5.eclass @@ -4,7 +4,7 @@ # @ECLASS: kde5.eclass # @MAINTAINER: # kde@gentoo.org -# @SUPPORTED_EAPIS: 6 7 +# @SUPPORTED_EAPIS: 7 # @BLURB: Support eclass for packages that follow KDE packaging conventions. # @DESCRIPTION: # This eclass is intended to streamline the creation of ebuilds for packages @@ -34,10 +34,6 @@ _KDE5_ECLASS=1 inherit cmake-utils flag-o-matic kde5-functions virtualx xdg -case ${EAPI} in - 6) inherit eapi7-ver eutils gnome2-utils ;; -esac - if [[ ${KDE_BUILD_TYPE} = live ]]; then inherit git-r3 fi @@ -207,10 +203,10 @@ case ${KDE_DESIGNERPLUGIN} in false) ;; *) IUSE+=" designer" - if [[ ${CATEGORY} = kde-frameworks ]]; then - BDEPEND+=" designer? ( $(add_qt_dep designer) )" - else + if [[ ${CATEGORY} = kde-apps && ${PV} = 19.0[48]* ]]; then BDEPEND+=" designer? ( $(add_frameworks_dep kdesignerplugin) )" + else + BDEPEND+=" designer? ( $(add_qt_dep designer) )" fi esac @@ -257,10 +253,6 @@ case ${KDE_SELINUX_MODULE} in ;; esac -case ${EAPI} in - 6) DEPEND+=" ${BDEPEND}" ;; -esac - DEPEND+=" ${COMMONDEPEND}" RDEPEND+=" ${COMMONDEPEND}" unset COMMONDEPEND @@ -619,9 +611,9 @@ kde5_src_configure() { cmakeargs+=( # install mkspecs in the same directory as qt stuff -DKDE_INSTALL_USE_QT_SYS_PATHS=ON + # move handbook outside of doc dir, bug 667138 + -DKDE_INSTALL_DOCBUNDLEDIR="${EPREFIX}/usr/share/help" ) - # move handbook outside of doc dir for at least two QA warnings, bug 667138 - [[ ${EAPI} != 6 ]] && cmakeargs+=( -DKDE_INSTALL_DOCBUNDLEDIR="${EPREFIX}/usr/share/help" ) fi # allow the ebuild to override what we set here @@ -674,22 +666,11 @@ kde5_src_test() { # @FUNCTION: kde5_src_install # @DESCRIPTION: -# Wrapper for cmake-utils_src_install with extra logic to avoid compressing -# certain types of files. For example, khelpcenter is not able to read -# compressed handbooks. +# Wrapper for cmake-utils_src_install. Currently doesn't do anything extra. kde5_src_install() { debug-print-function ${FUNCNAME} "$@" cmake-utils_src_install - - if [[ ${EAPI} = 6 ]]; then - # We don't want /usr/share/doc/HTML to be compressed, - # because then khelpcenter can't find the docs - #todo: clean up trailing slash check when EAPI <7 is removed - if [[ -d ${ED%/}/usr/share/doc/HTML ]]; then - docompress -x /usr/share/doc/HTML - fi - fi } # @FUNCTION: kde5_pkg_preinst diff --git a/eclass/llvm.org.eclass b/eclass/llvm.org.eclass new file mode 100644 index 000000000000..5a704c1d9805 --- /dev/null +++ b/eclass/llvm.org.eclass @@ -0,0 +1,198 @@ +# Copyright 2019 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +# @ECLASS: llvm.org.eclass +# @MAINTAINER: +# Michał Górny +# @AUTHOR: +# Michał Górny +# @BLURB: Common bits for fetching & unpacking llvm.org projects +# @DESCRIPTION: +# The llvm.org eclass provides common code to fetch and unpack parts +# of the llvm.org project tree. It takes care of handling both git +# checkouts and source tarballs, making it possible to unify the code +# of live and release ebuilds and effectively reduce the work needed +# to package new releases/RCs/branches. +# +# In order to use this eclass, the ebuild needs to declare +# LLVM_COMPONENTS and then call llvm.org_set_globals. If tests require +# additional components, they need to be listed in LLVM_TEST_COMPONENTS. +# The eclass exports an implementation of src_unpack() phase. +# +# Example: +# @CODE +# inherit llvm.org +# +# LLVM_COMPONENTS=( lld ) +# LLVM_TEST_COMPONENTS=( llvm/utils/lit ) +# llvm.org_set_globals +# @CODE + +case "${EAPI:-0}" in + 7) + ;; + *) + die "Unsupported EAPI=${EAPI} for ${ECLASS}" + ;; +esac + + +# == internal control bits == + +# @ECLASS-VARIABLE: _LLVM_MASTER_MAJOR +# @INTERNAL +# @DESCRIPTION: +# The major version of current LLVM trunk. Used to determine +# the correct branch to use. +_LLVM_MASTER_MAJOR=10 + +# @ECLASS-VARIABLE: _LLVM_SOURCE_TYPE +# @INTERNAL +# @DESCRIPTION: +# Source type to use: 'git' or 'tar'. +if [[ -z ${_LLVM_SOURCE_TYPE+1} ]]; then + if [[ ${PV} == *.9999 ]]; then + _LLVM_SOURCE_TYPE=git + else + _LLVM_SOURCE_TYPE=tar + fi +fi + +[[ ${_LLVM_SOURCE_TYPE} == git ]] && inherit git-r3 + +[[ ${PV} == ${_LLVM_MASTER_MAJOR}.* && ${_LLVM_SOURCE_TYPE} == tar ]] && + die "${ECLASS}: Release ebuild for master branch?!" + + +# == control variables == + +# @ECLASS-VARIABLE: LLVM_COMPONENTS +# @REQUIRED +# @DESCRIPTION: +# List of components needed unconditionally. Specified as bash array +# with paths relative to llvm-project git. Automatically translated +# for tarball releases. +# +# The first path specified is used to construct default S. + +# @ECLASS-VARIABLE: LLVM_TEST_COMPONENTS +# @DEFAULT_UNSET +# @DESCRIPTION: +# List of additional components needed for tests. + + +# == global scope logic == + +# @FUNCTION: _llvm.org_get_archives +# @USAGE: +# @INTERNAL +# @DESCRIPTION: +# Set 'archives' array to list of unique archive filenames +# for components passed as parameters. +_llvm.org_get_archives() { + local c + archives=() + + for c; do + local cn=${c%%/*} + case ${cn} in + clang) cn=cfe;; + esac + + local a=${cn}-${PV}.src.tar.xz + has "${a}" "${archives[@]}" || archives+=( "${a}" ) + done +} + +# @FUNCTION: llvm.org_set_globals +# @DESCRIPTION: +# Set global variables. This must be called after setting LLVM_* +# variables used by the eclass. +llvm.org_set_globals() { + if [[ $(declare -p LLVM_COMPONENTS) != "declare -a"* ]]; then + die 'LLVM_COMPONENTS must be an array.' + fi + if declare -p LLVM_TEST_COMPONENTS &>/dev/null; then + if [[ $(declare -p LLVM_TEST_COMPONENTS) != "declare -a"* ]]; then + die 'LLVM_TEST_COMPONENTS must be an array.' + fi + fi + + if [[ ${_LLVM_SOURCE_TYPE} == git ]]; then + EGIT_REPO_URI="https://github.com/llvm/llvm-project.git" + + [[ ${PV} != ${_LLVM_MASTER_MAJOR}.* ]] && + EGIT_BRANCH="release/${PV%%.*}.x" + elif [[ ${_LLVM_SOURCE_TYPE} == tar ]]; then + local a archives=() + _llvm.org_get_archives "${LLVM_COMPONENTS[@]}" + for a in "${archives[@]}"; do + SRC_URI+=" + https://releases.llvm.org/${PV}/${a}" + done + else + die "Invalid _LLVM_SOURCE_TYPE: ${LLVM_SOURCE_TYPE}" + fi + + S=${WORKDIR}/${LLVM_COMPONENTS[0]} + + if [[ -n ${LLVM_TEST_COMPONENTS+1} ]]; then + IUSE+=" test" + RESTRICT+=" !test? ( test )" + + if [[ ${_LLVM_SOURCE_TYPE} == tar ]]; then + SRC_URI+=" + test? (" + + _llvm.org_get_archives "${LLVM_TEST_COMPONENTS[@]}" + for a in "${archives[@]}"; do + SRC_URI+=" + https://releases.llvm.org/${PV}/${a}" + done + + SRC_URI+=" + )" + fi + fi + + _LLVM_ORG_SET_GLOBALS_CALLED=1 +} + + +# == phase functions == + +EXPORT_FUNCTIONS src_unpack + +# @FUNCTION: llvm.org_src_unpack +# @DESCRIPTION: +# Unpack or checkout requested LLVM components. +llvm.org_src_unpack() { + if [[ ! ${_LLVM_ORG_SET_GLOBALS_CALLED} ]]; then + die "llvm.org_set_globals must be called in global scope" + fi + + local components=( "${LLVM_COMPONENTS[@]}" ) + if [[ ${LLVM_TEST_COMPONENTS+1} ]] && use test; then + components+=( "${LLVM_TEST_COMPONENTS[@]}" ) + fi + + if [[ ${_LLVM_SOURCE_TYPE} == git ]]; then + git-r3_fetch + git-r3_checkout '' . '' "${components[@]}" + else + local c archives + # TODO: optimize this + for c in "${components[@]}"; do + local top_dir=${c%%/*} + _llvm.org_get_archives "${c}" + local sub_path=${archives[0]%.tar.xz} + [[ ${c} == */* ]] && sub_path+=/${c#*/} + + ebegin "Unpacking ${sub_path} from ${archives[0]}" + mkdir -p "${top_dir}" || die + tar -C "${top_dir}" -x -J -o --strip-components 1 \ + -f "${DISTDIR}/${archives[0]}" "${sub_path}" || die + eend + done + fi +} diff --git a/eclass/myspell.eclass b/eclass/myspell.eclass deleted file mode 100644 index 528384212996..000000000000 --- a/eclass/myspell.eclass +++ /dev/null @@ -1,256 +0,0 @@ -# Copyright 1999-2015 Gentoo Foundation -# Distributed under the terms of the GNU General Public License v2 - -# Author: Kevin F. Quinn -# Packages: app-dicts/myspell-* -# Maintainer: maintainer-needed@gentoo.org - -inherit multilib - -EXPORT_FUNCTIONS src_install pkg_preinst pkg_postinst - -IUSE="" - -SLOT="0" - -# tar, gzip, bzip2 are included in the base profile, but not unzip -DEPEND="app-arch/unzip" - -# Dictionaries don't have any runtime dependencies -# Myspell dictionaries can be used by hunspell, openoffice and others -RDEPEND="" - -# The destination directory for myspell dictionaries -MYSPELL_DICTBASE="/usr/share/myspell" - -# Legacy variable for dictionaries installed before eselect-oodict existed -# so has to remain for binpkg support. This variable is unmaintained - -# if you have a problem with it, emerge app-eselect/eselect-oodict. -# The location for openoffice softlinks -MYSPELL_OOOBASE="/usr/lib/openoffice/share/dict/ooo" - - -# set array "fields" to the elements of $1, separated by $2. -# This saves having to muck about with IFS all over the place. -set_fields() { - local old_IFS - old_IFS="${IFS}" - IFS=$2 - fields=($1) - IFS="${old_IFS}" -} - -# language is the second element of the ebuild name -# myspell-- -get_myspell_lang() { - local fields - set_fields "${P}" "-" - echo ${fields[1]} -} - -get_myspell_suffixes() { - case $1 in - DICT) echo ".aff .dic" ;; - HYPH) echo ".dic" ;; - THES) echo ".dat .idx" ;; - esac -} - -# OOo dictionary files are held on the mirrors, rather than -# being fetched direct from the OOo site as upstream doesn't -# change the name when they rebuild the dictionaries. -# -.zip becomes myspell---version.zip -get_myspell_ooo_uri() { - local files fields newfile filestem srcfile dict uris - files=() - uris="" - for dict in \ - "${MYSPELL_SPELLING_DICTIONARIES[@]}" \ - "${MYSPELL_HYPHENATION_DICTIONARIES[@]}" \ - "${MYSPELL_THESAURUS_DICTIONARIES[@]}"; do - set_fields "${dict}" "," - newfile=${fields[4]// } - for file in "${files[@]}"; do - [[ ${file} == ${newfile} ]] && continue 2 - done - filestem=${newfile/.zip} - files=("${files[@]}" "${newfile}") - srcfile="myspell-${filestem}-${PV}.zip" - [[ -z ${uris} ]] && - uris="mirror://gentoo/${srcfile}" || - uris="${uris} mirror://gentoo/${srcfile}" - done - echo "${uris}" -} - - -[[ -z ${SRC_URI} ]] && SRC_URI=$(get_myspell_ooo_uri) - -# Format of dictionary.lst files (from OOo standard -# dictionary.lst file): -# -# List of All Dictionaries to be Loaded by OpenOffice -# --------------------------------------------------- -# Each Entry in the list have the following space delimited fields -# -# Field 0: Entry Type "DICT" - spellchecking dictionary -# "HYPH" - hyphenation dictionary -# "THES" - thesaurus files -# -# Field 1: Language code from Locale "en" or "de" or "pt" ... -# -# Field 2: Country Code from Locale "US" or "GB" or "PT" -# -# Field 3: Root name of file(s) "en_US" or "hyph_de" or "th_en_US" -# (do not add extensions to the name) - -# Format of MYSPELL_[SPELLING|HYPHENATION|THESAURUS]_DICTIONARIES: -# -# Field 0: Language code -# Field 1: Country code -# Field 2: Root name of dictionary files -# Field 3: Description -# Field 4: Archive filename -# -# This format is from the available.lst, hyphavail.lst and -# thesavail.lst files on the openoffice.org repository. - -myspell_src_install() { - local filen fields entry dictlst - cd "${WORKDIR}" - # Install the dictionary, hyphenation and thesaurus files. - # Create dictionary.lst. file containing the parts of - # OOo's dictionary.lst file for this language, indicating - # which dictionaries are relevant for each country variant - # of the language. - insinto ${MYSPELL_DICTBASE} - dictlst="dictionary.lst.$(get_myspell_lang)" - echo "# Autogenerated by ${CATEGORY}/${P}" > ${dictlst} - for entry in "${MYSPELL_SPELLING_DICTIONARIES[@]}"; do - set_fields "${entry}" "," - echo "DICT ${fields[0]} ${fields[1]} ${fields[2]}" >> ${dictlst} - doins ${fields[2]}.aff || die "Missing ${fields[2]}.aff" - doins ${fields[2]}.dic || die "Missing ${fields[2]}.dic" - done - for entry in "${MYSPELL_HYPHENATION_DICTIONARIES[@]}"; do - set_fields "${entry}" "," - echo "HYPH ${fields[0]} ${fields[1]} ${fields[2]}" >> ${dictlst} - doins ${fields[2]}.dic || die "Missing ${fields[2]}.dic" - done - for entry in "${MYSPELL_THESAURUS_DICTIONARIES[@]}"; do - set_fields "${entry}" "," - echo "THES ${fields[0]} ${fields[1]} ${fields[2]}" >> ${dictlst} - doins ${fields[2]}.dat || die "Missing ${fields[2]}.dat" - doins ${fields[2]}.idx || die "Missing ${fields[2]}.idx" - done - doins ${dictlst} || die "Failed to install ${dictlst}" - # Install any txt files (usually README.txt) as documentation - for filen in *.txt; do - [[ -s ${filen} ]] && dodoc ${filen} - done -} - - -# Add entries in dictionary.lst. to OOo dictionary.lst -# and create softlinks indicated by dictionary.lst. -myspell_pkg_postinst() { - # Update for known applications - if has_version ">=app-eselect/eselect-oodict-20060706"; then - if has_version app-office/openoffice; then - eselect oodict set myspell-$(get_myspell_lang) - fi - if has_version app-office/openoffice-bin; then - # On AMD64, openoffice-bin is 32-bit so force ABI - has_multilib_profile && ABI=x86 - eselect oodict set myspell-$(get_myspell_lang) --libdir $(get_libdir) - fi - return - fi - if has_version app-eselect/eselect-oodict; then - eselect oodict set myspell-$(get_myspell_lang) - return - fi - - # Legacy code for dictionaries installed before eselect-oodict existed - # so has to remain for binpkg support. This code is unmaintained - - # if you have a problem with it, emerge app-eselect/eselect-oodict. - [[ -d ${MYSPELL_OOOBASE} ]] || return - # This stuff is here, not in src_install, as the softlinks are - # deliberately _not_ listed in the package database. - local dictlst entry fields prefix suffix suffixes filen - # Note; can only reach this point if ${MYSPELL_DICTBASE}/${dictlst} - # was successfully installed - dictlst="dictionary.lst.$(get_myspell_lang)" - while read entry; do - fields=(${entry}) - [[ ${fields[0]:0:1} == "#" ]] && continue - [[ -f ${MYSPELL_OOOBASE}/dictionary.lst ]] || \ - touch ${MYSPELL_OOOBASE}/dictionary.lst - grep "^${fields[0]} ${fields[1]} ${fields[2]} " \ - ${MYSPELL_OOOBASE}/dictionary.lst > /dev/null 2>&1 || - echo "${entry}" >> ${MYSPELL_OOOBASE}/dictionary.lst - for suffix in $(get_myspell_suffixes ${fields[0]}); do - filen="${fields[3]}${suffix}" - [[ -h ${MYSPELL_OOOBASE}/${filen} ]] && - rm -f ${MYSPELL_OOOBASE}/${filen} - [[ ! -f ${MYSPELL_OOOBASE}/${filen} ]] && - ln -s ${MYSPELL_DICTBASE}/${filen} \ - ${MYSPELL_OOOBASE}/${filen} - done - done < ${MYSPELL_DICTBASE}/${dictlst} -} - - -# Remove softlinks and entries in dictionary.lst - uses -# dictionary..lst from /usr/share/myspell -# Done in preinst (prerm happens after postinst, which overwrites -# the dictionary..lst file) -myspell_pkg_preinst() { - # Update for known applications - if has_version ">=app-eselect/eselect-oodict-20060706"; then - if has_version app-office/openoffice; then - # When building from source, the default library path is correct - eselect oodict unset myspell-$(get_myspell_lang) - fi - if has_version app-office/openoffice-bin; then - # On AMD64, openoffice-bin is 32-bit, so get 32-bit library directory - has_multilib_profile && ABI=x86 - eselect oodict unset myspell-$(get_myspell_lang) --libdir $(get_libdir) - fi - eselect oodict unset myspell-$(get_myspell_lang) --libdir $(get_libdir) - return - fi - # Previous versions of eselect-oodict didn't cater for -bin on amd64 - if has_version app-eselect/eselect-oodict; then - eselect oodict unset myspell-$(get_myspell_lang) - return - fi - - # Legacy code for dictionaries installed before eselect-oodict existed - # Don't delete this; needed for uninstalls and binpkg support. - # This code is unmaintained - if you have a problem with it, - # emerge app-eselect/eselect-oodict. - local filen dictlst entry fields removeentry suffix - dictlst="dictionary.lst.$(get_myspell_lang)" - [[ -d ${MYSPELL_OOOBASE} ]] || return - [[ -f ${MYSPELL_DICTBASE}/${dictlst} ]] || return - while read entry; do - fields=(${entry}) - [[ ${fields[0]:0:1} == "#" ]] && continue - [[ ${fields[3]} == "" ]] && continue - # Remove entry from dictionary.lst - sed -i -e "/^${fields[0]} ${fields[1]} ${fields[2]} ${fields[3]}$/ { d }" \ - ${MYSPELL_OOOBASE}/dictionary.lst - # See if any other entries in dictionary.lst match the current - # dictionary type and filename - grep "^${fields[0]} .* ${fields[3]}$" ${MYSPELL_OOOBASE}/dictionary.lst \ - 2>&1 > /dev/null && continue - # If no other entries match, remove relevant symlinks - for suffix in $(get_myspell_suffixes ${fields[0]}); do - filen="${fields[3]}${suffix}" - ewarn "Removing entry ${MYSPELL_OOOBASE}/${filen}" - [[ -h ${MYSPELL_OOOBASE}/${filen} ]] && - rm -f ${MYSPELL_OOOBASE}/${filen} - done - done < ${MYSPELL_DICTBASE}/${dictlst} -} diff --git a/eclass/nvidia-driver.eclass b/eclass/nvidia-driver.eclass index 482c62c012ff..a8631947748a 100644 --- a/eclass/nvidia-driver.eclass +++ b/eclass/nvidia-driver.eclass @@ -14,6 +14,7 @@ inherit readme.gentoo-r1 versionator DEPEND="sys-apps/pciutils" +RESTRICT="bindist mirror test" # Variables for readme.gentoo.eclass: DISABLE_AUTOFORMATTING="yes" diff --git a/eclass/perl-app.eclass b/eclass/perl-app.eclass index 074902294e59..3fb897917c69 100644 --- a/eclass/perl-app.eclass +++ b/eclass/perl-app.eclass @@ -1,6 +1,15 @@ # Copyright 1999-2014 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 +# @DEAD +# This eclass is dead and all its consumers have been removed from +# the tree. +# Please use perl-module.eclass if you need phase functions, and +# perl-functions.eclass if you don't. +# In overlays, perl-app.eclass usage can be replaced by +# perl-module.eclass without further changes. +# Bug 637836. Removal in 14 days. + # Author: Michael Cummings # Maintained by the Perl herd # @SUPPORTED_EAPIS: 5 diff --git a/eclass/perl-module.eclass b/eclass/perl-module.eclass index e1fb97df3260..7a839bc7288c 100644 --- a/eclass/perl-module.eclass +++ b/eclass/perl-module.eclass @@ -134,25 +134,29 @@ esac LICENSE="${LICENSE:-|| ( Artistic GPL-1+ )}" # @ECLASS-VARIABLE: DIST_NAME +# @DEFAULT_UNSET # @DESCRIPTION: # (EAPI=6 and later) This variable provides a way to override PN for the calculation of S, -# SRC_URI, and HOMEPAGE. Defaults to PN. +# SRC_URI, and HOMEPAGE. If unset, defaults to PN. # @ECLASS-VARIABLE: DIST_VERSION +# @DEFAULT_UNSET # @DESCRIPTION: # (EAPI=6 and later) This variable provides a way to override PV for the calculation of S and SRC_URI. -# Use it to provide the non-normalized, upstream version number. Defaults to PV. +# Use it to provide the non-normalized, upstream version number. If unset, defaults to PV. # Named MODULE_VERSION in EAPI=5. # @ECLASS-VARIABLE: DIST_A_EXT +# @DEFAULT_UNSET # @DESCRIPTION: # (EAPI=6 and later) This variable provides a way to override the distfile extension for the calculation of -# SRC_URI. Defaults to tar.gz. Named MODULE_A_EXT in EAPI=5. +# SRC_URI. If unset, defaults to tar.gz. Named MODULE_A_EXT in EAPI=5. # @ECLASS-VARIABLE: DIST_A +# @DEFAULT_UNSET # @DESCRIPTION: # (EAPI=6 and later) This variable provides a way to override the distfile name for the calculation of -# SRC_URI. Defaults to ${DIST_NAME}-${DIST_VERSION}.${DIST_A_EXT} Named MODULE_A in EAPI=5. +# SRC_URI. If unset, defaults to ${DIST_NAME}-${DIST_VERSION}.${DIST_A_EXT} Named MODULE_A in EAPI=5. # @ECLASS-VARIABLE: DIST_AUTHOR # @DEFAULT_UNSET @@ -340,9 +344,10 @@ perl-module_src_compile() { } # @ECLASS-VARIABLE: DIST_TEST +# @DEFAULT_UNSET # @DESCRIPTION: # (EAPI=6 and later) Variable that controls if tests are run in the test phase -# at all, and if yes under which conditions. Defaults to "do parallel" +# at all, and if yes under which conditions. If unset, defaults to "do parallel" # If neither "do" nor "parallel" is recognized, tests are skipped. # (In EAPI=5 the variable is called SRC_TEST, defaults to "skip", and # recognizes fewer options.) diff --git a/eclass/python-utils-r1.eclass b/eclass/python-utils-r1.eclass index f8f51ecb694a..549dd5f2e56e 100644 --- a/eclass/python-utils-r1.eclass +++ b/eclass/python-utils-r1.eclass @@ -692,7 +692,7 @@ python_optimize() { if [[ ${f} == /* && -d ${D%/}${f} ]]; then set -- "${D%/}${f}" "${@}" fi - done < <("${PYTHON}" -c 'import sys; print("\0".join(sys.path))' || die) + done < <("${PYTHON}" -c 'import sys; print("".join(x + "\0" for x in sys.path))' || die) debug-print "${FUNCNAME}: using sys.path: ${*/%/;}" fi diff --git a/eclass/qt5-build.eclass b/eclass/qt5-build.eclass index 2e5a15d930ab..2bee3a3fae47 100644 --- a/eclass/qt5-build.eclass +++ b/eclass/qt5-build.eclass @@ -816,7 +816,7 @@ qt5_regenerate_global_configs() { -execdir cat '{}' + | sort -u > "${T}"/gentoo-qconfig.h [[ -s ${T}/gentoo-qconfig.h ]] || ewarn "Generated gentoo-qconfig.h is empty" - mv -f "${T}"/gentoo-qconfig.h "${ROOT%/}${QT5_HEADERDIR}"/Gentoo/gentoo-qconfig.h \ + cp "${T}"/gentoo-qconfig.h "${ROOT%/}${QT5_HEADERDIR}"/Gentoo/gentoo-qconfig.h \ || eerror "Failed to install new gentoo-qconfig.h" einfo "Updating QT_CONFIG in qconfig.pri" diff --git a/eclass/tests/toolchain.sh b/eclass/tests/toolchain.sh index ec2253568569..2c09f2238d74 100755 --- a/eclass/tests/toolchain.sh +++ b/eclass/tests/toolchain.sh @@ -168,7 +168,6 @@ test_var_assert GCC_BRANCH_VER 7.3 test_var_assert GCCMAJOR 7 test_var_assert GCCMINOR 3 test_var_assert GCCMICRO 0 -test_var_assert BRANCH_UPDATE '' test_var_assert GCC_CONFIG_VER 7.3.0 test_var_assert PREFIX /usr diff --git a/eclass/texlive-module.eclass b/eclass/texlive-module.eclass index c9faf39debd3..bd338ee625c3 100644 --- a/eclass/texlive-module.eclass +++ b/eclass/texlive-module.eclass @@ -24,39 +24,46 @@ # bash array. # @ECLASS-VARIABLE: TEXLIVE_MODULE_CONTENTS +# @REQUIRED # @DESCRIPTION: # The list of packages that will be installed. This variable will be expanded to # SRC_URI: # foo -> texlive-module-foo-${PV}.tar.xz # @ECLASS-VARIABLE: TEXLIVE_MODULE_DOC_CONTENTS +# @REQUIRED # @DESCRIPTION: # The list of packages that will be installed if the doc useflag is enabled. # Expansion to SRC_URI is the same as for TEXLIVE_MODULE_CONTENTS. # @ECLASS-VARIABLE: TEXLIVE_MODULE_SRC_CONTENTS +# @REQUIRED # @DESCRIPTION: # The list of packages that will be installed if the source useflag is enabled. # Expansion to SRC_URI is the same as for TEXLIVE_MODULE_CONTENTS. # @ECLASS-VARIABLE: TEXLIVE_MODULE_BINSCRIPTS +# @DEFAULT_UNSET # @DESCRIPTION: # A space separated list of files that are in fact scripts installed in the # texmf tree and that we want to be available directly. They will be installed in # /usr/bin. # @ECLASS-VARIABLE: TEXLIVE_MODULE_BINLINKS +# @DEFAULT_UNSET # @DESCRIPTION: # A space separated list of links to add for BINSCRIPTS. # The systax is: foo:bar to create a symlink bar -> foo. # @ECLASS-VARIABLE: TL_PV +# @INTERNAL # @DESCRIPTION: # Normally the module's PV reflects the TeXLive release it belongs to. # If this is not the case, TL_PV takes the version number for the # needed app-text/texlive-core. # @ECLASS-VARIABLE: TL_MODULE_INFORMATION +# @DEFAULT_UNSET # @DESCRIPTION: # Information to display about the package. # e.g. for enabling/disabling a feature @@ -124,6 +131,7 @@ RDEPEND="${COMMON_DEPEND}" IUSE="${IUSE} doc" # @ECLASS-VARIABLE: TEXLIVE_MODULE_OPTIONAL_ENGINE +# @DEFAULT_UNSET # @DESCRIPTION: # A space separated list of Tex engines that can be made optional. # e.g. "luatex luajittex" diff --git a/eclass/toolchain-glibc.eclass b/eclass/toolchain-glibc.eclass index 30781fed7775..87704c5bb5a9 100644 --- a/eclass/toolchain-glibc.eclass +++ b/eclass/toolchain-glibc.eclass @@ -416,7 +416,6 @@ just_headers() { glibc_banner() { local b="Gentoo ${PVR}" [[ -n ${SNAP_VER} ]] && b+=" snapshot ${SNAP_VER}" - [[ -n ${BRANCH_UPDATE} ]] && b+=" branch ${BRANCH_UPDATE}" [[ -n ${PATCH_VER} ]] && ! use vanilla && b+=" p${PATCH_VER}" echo "${b}" } @@ -740,17 +739,6 @@ toolchain-glibc_src_unpack() { } toolchain-glibc_src_prepare() { - # XXX: We should do the branchupdate, before extracting the manpages and - # infopages else it does not help much (mtimes change if there is a change - # to them with branchupdate) - if [[ -n ${BRANCH_UPDATE} ]] ; then - epatch "${DISTDIR}"/glibc-${RELEASE_VER}-branch-update-${BRANCH_UPDATE}.patch.bz2 - - # Snapshot date patch - einfo "Patching version to display snapshot date ..." - sed -i -e "s:\(#define RELEASE\).*:\1 \"${BRANCH_UPDATE}\":" version.h - fi - # tag, glibc is it if ! version_is_at_least 2.17 ; then [[ -e csu/Banner ]] && die "need new banner location" diff --git a/eclass/toolchain.eclass b/eclass/toolchain.eclass index bc7d7b1c2609..d2bfa6ab2f1d 100644 --- a/eclass/toolchain.eclass +++ b/eclass/toolchain.eclass @@ -2,24 +2,23 @@ # Distributed under the terms of the GNU General Public License v2 # Maintainer: Toolchain Ninjas -# @SUPPORTED_EAPIS: 5 6 +# @SUPPORTED_EAPIS: 5 6 7 DESCRIPTION="The GNU Compiler Collection" HOMEPAGE="https://gcc.gnu.org/" -RESTRICT="strip" # cross-compilers need controlled stripping inherit eutils fixheadtails flag-o-matic gnuconfig libtool multilib pax-utils toolchain-funcs prefix -if [[ ${PV} == *_pre9999* ]] ; then +if [[ ${PV} == *9999* ]] ; then EGIT_REPO_URI="git://gcc.gnu.org/git/gcc.git" # naming style: - # gcc-4.7.1_pre9999 -> gcc-4_7-branch + # gcc-10.1.0_pre9999 -> gcc-10-branch # Note that the micro version is required or lots of stuff will break. # To checkout master set gcc_LIVE_BRANCH="master" in the ebuild before # inheriting this eclass. - EGIT_BRANCH="${PN}-${PV%.?_pre9999}-branch" + EGIT_BRANCH="${PN}-${PV%.?.?_pre9999}-branch" EGIT_BRANCH=${EGIT_BRANCH//./_} - inherit git-2 + inherit git-r3 fi FEATURES=${FEATURES/multilib-strict/} @@ -27,8 +26,20 @@ FEATURES=${FEATURES/multilib-strict/} case ${EAPI:-0} in 0|1|2|3|4*) die "Need to upgrade to at least EAPI=5" ;; 5*|6) inherit eapi7-ver ;; + 7) ;; *) die "I don't speak EAPI ${EAPI}." ;; esac + +tc_supports_dostrip() { + case ${EAPI:-0} in + 5*|6) return 1 ;; + 7) return 0 ;; + *) die "Update apply_patches() for ${EAPI}." ;; + esac +} + +tc_supports_dostrip || RESTRICT="strip" # cross-compilers need controlled stripping + EXPORT_FUNCTIONS pkg_pretend pkg_setup src_unpack src_prepare src_configure \ src_compile src_test src_install pkg_postinst pkg_postrm @@ -67,8 +78,6 @@ GCC_BRANCH_VER=$(ver_cut 1-2 ${GCC_PV}) GCCMAJOR=$(ver_cut 1 ${GCC_PV}) GCCMINOR=$(ver_cut 2 ${GCC_PV}) GCCMICRO=$(ver_cut 3 ${GCC_PV}) -[[ ${BRANCH_UPDATE-notset} == "notset" ]] && \ - BRANCH_UPDATE=$(ver_cut 4 ${GCC_PV}) # According to gcc/c-cppbuiltin.c, GCC_CONFIG_VER MUST match this regex. # ([^0-9]*-)?[0-9]+[.][0-9]+([.][0-9]+)?([- ].*)? @@ -177,7 +186,13 @@ if [[ ${PN} != "kgcc64" && ${PN} != gcc-* ]] ; then tc_version_is_at_least 9.1 && IUSE+=" lto" fi -SLOT="${GCC_CONFIG_VER}" +if tc_version_is_at_least 10; then + # Note: currently we pull in prereleases, snapshots and + # git versions into the same SLOT. + SLOT="${GCCMAJOR}" +else + SLOT="${GCC_CONFIG_VER}" +fi #---->> DEPEND <<---- @@ -251,7 +266,9 @@ PDEPEND=">=sys-devel/gcc-config-1.7" # Set the source directory depending on whether we're using # a prerelease, snapshot, or release tarball. S=$( - if [[ -n ${PRERELEASE} ]] ; then + if [[ ${PV} == *9999* ]]; then + echo ${EGIT_CHECKOUT_DIR} + elif [[ -n ${PRERELEASE} ]] ; then echo ${WORKDIR}/gcc-${PRERELEASE} elif [[ -n ${SNAPSHOT} ]] ; then echo ${WORKDIR}/gcc-${SNAPSHOT} @@ -282,14 +299,6 @@ gentoo_urls() { # the ebuild has a _pre suffix, this variable is ignored and the # prerelease tarball is used instead. # -# BRANCH_UPDATE -# If set, this variable signals that we should be using the main -# release tarball (determined by ebuild version) and applying a -# CVS branch update patch against it. The location of this branch -# update patch is assumed to be in ${GENTOO_TOOLCHAIN_BASE_URI}. -# Just like with SNAPSHOT, this variable is ignored if the ebuild -# has a _pre suffix. -# # PATCH_VER # PATCH_GCC_VER # This should be set to the version of the gentoo patch tarball. @@ -360,9 +369,6 @@ get_gcc_src_uri() { else GCC_SRC_URI="mirror://gnu/gcc/gcc-${GCC_PV}/gcc-${GCC_RELEASE_VER}.tar.bz2" fi - # we want all branch updates to be against the main release - [[ -n ${BRANCH_UPDATE} ]] && \ - GCC_SRC_URI+=" $(gentoo_urls gcc-${GCC_RELEASE_VER}-branch-update-${BRANCH_UPDATE}.patch.bz2)" fi [[ -n ${UCLIBC_VER} ]] && \ @@ -370,7 +376,6 @@ get_gcc_src_uri() { [[ -n ${PATCH_VER} ]] && \ GCC_SRC_URI+=" $(gentoo_urls gcc-${PATCH_GCC_VER}-patches-${PATCH_VER}.tar.bz2)" - # strawberry pie, Cappuccino and a Gauloises (it's a good thing) [[ -n ${PIE_VER} ]] && \ PIE_CORE=${PIE_CORE:-gcc-${PIE_GCC_VER}-piepatches-v${PIE_VER}.tar.bz2} && \ GCC_SRC_URI+=" $(gentoo_urls ${PIE_CORE})" @@ -440,7 +445,7 @@ toolchain_pkg_setup() { toolchain_src_unpack() { if [[ ${PV} == *9999* ]]; then - git-2_src_unpack + git-r3_src_unpack else gcc_quick_unpack fi @@ -454,6 +459,8 @@ gcc_quick_unpack() { export HTB_GCC_VER=${HTB_GCC_VER:-${GCC_RELEASE_VER}} export SPECS_GCC_VER=${SPECS_GCC_VER:-${GCC_RELEASE_VER}} + # Injection point for more tarballs. dev-lang/gnat-gpl uses + # 'GCC_A_FAKEIT' to specify it's own source and binary tarballs. if [[ -n ${GCC_A_FAKEIT} ]] ; then unpack ${GCC_A_FAKEIT} elif [[ -n ${PRERELEASE} ]] ; then @@ -470,12 +477,6 @@ gcc_quick_unpack() { else unpack gcc-${GCC_RELEASE_VER}.tar.bz2 fi - # We want branch updates to be against a release tarball - if [[ -n ${BRANCH_UPDATE} ]] ; then - pushd "${S}" > /dev/null - epatch "${DISTDIR}"/gcc-${GCC_RELEASE_VER}-branch-update-${BRANCH_UPDATE}.patch.bz2 - popd > /dev/null - fi fi if [[ -n ${D_VER} ]] && use d ; then @@ -518,30 +519,34 @@ gcc_quick_unpack() { #---->> src_prepare <<---- +# 'epatch' is not available in EAPI=7. Abstract away patchset application +# until we eventually get all gcc ebuilds on EAPI=7 or later. +tc_apply_patches() { + [[ ${#@} -lt 2 ]] && die "usage: tc_apply_patches " + + einfo "$1"; shift + + case ${EAPI:-0} in + # Note: even for EAPI=6 we used 'epatch' semantics. To avoid + # breaking existing ebuilds use 'eapply' only in EAPI=7 or later. + 5*|6) epatch "$@" ;; + 7) eapply "$@" ;; + *) die "Update apply_patches() for ${EAPI}." ;; + esac +} + toolchain_src_prepare() { export BRANDING_GCC_PKGVERSION="Gentoo ${GCC_PVR}" cd "${S}" - if ! use vanilla ; then - if [[ -n ${PATCH_VER} ]] ; then - guess_patch_type_in_dir "${WORKDIR}"/patch - EPATCH_MULTI_MSG="Applying Gentoo patches ..." \ - epatch "${WORKDIR}"/patch - BRANDING_GCC_PKGVERSION="${BRANDING_GCC_PKGVERSION} p${PATCH_VER}" - fi - if [[ -n ${UCLIBC_VER} ]] ; then - guess_patch_type_in_dir "${WORKDIR}"/uclibc - EPATCH_MULTI_MSG="Applying uClibc patches ..." \ - epatch "${WORKDIR}"/uclibc - fi - fi + do_gcc_gentoo_patches do_gcc_HTB_patches do_gcc_PIE_patches do_gcc_CYGWINPORTS_patches case ${EAPI:-0} in 5*) epatch_user;; - 6) eapply_user ;; + 6|7) eapply_user ;; *) die "Update toolchain_src_prepare() for ${EAPI}." ;; esac @@ -633,8 +638,11 @@ toolchain_src_prepare() { sed -i 's|A-Za-z0-9|[:alnum:]|g' "${S}"/gcc/*.awk #215828 # Prevent new texinfo from breaking old versions (see #198182, #464008) - tc_version_is_at_least 4.1 && epatch "${FILESDIR}"/gcc-configure-texinfo.patch + if tc_version_is_at_least 4.1; then + tc_apply_patches "Remove texinfo (bug #198182, bug ##464008)" "${FILESDIR}"/gcc-configure-texinfo.patch + fi + # >=gcc-4 if [[ -x contrib/gcc_update ]] ; then einfo "Touching generated files" ./contrib/gcc_update --touch | \ @@ -644,17 +652,23 @@ toolchain_src_prepare() { fi } -guess_patch_type_in_dir() { - [[ -n $(ls "$1"/*.bz2 2>/dev/null) ]] \ - && EPATCH_SUFFIX="patch.bz2" \ - || EPATCH_SUFFIX="patch" +do_gcc_gentoo_patches() { + if ! use vanilla ; then + if [[ -n ${PATCH_VER} ]] ; then + tc_apply_patches "Applying Gentoo patches ..." "${WORKDIR}"/patch/*.patch + BRANDING_GCC_PKGVERSION="${BRANDING_GCC_PKGVERSION} p${PATCH_VER}" + fi + if [[ -n ${UCLIBC_VER} ]] ; then + tc_apply_patches "Applying uClibc patches ..." "${WORKDIR}"/uclibc/*.patch + fi + fi } do_gcc_HTB_patches() { use_if_iuse boundschecking || return 0 # modify the bounds checking patch with a regression patch - epatch "${WORKDIR}/bounds-checking-gcc-${HTB_GCC_VER}-${HTB_VER}.patch" + tc_apply_patches "Bounds checking patch" "${WORKDIR}/bounds-checking-gcc-${HTB_GCC_VER}-${HTB_VER}.patch" BRANDING_GCC_PKGVERSION="${BRANDING_GCC_PKGVERSION}, HTB-${HTB_GCC_VER}-${HTB_VER}" } @@ -662,23 +676,7 @@ do_gcc_PIE_patches() { want_pie || return 0 use vanilla && return 0 - if tc_version_is_at_least 4.3.2 ; then - guess_patch_type_in_dir "${WORKDIR}"/piepatch/ - EPATCH_MULTI_MSG="Applying pie patches ..." \ - epatch "${WORKDIR}"/piepatch/ - else - guess_patch_type_in_dir "${WORKDIR}"/piepatch/upstream - - # corrects startfile/endfile selection and shared/static/pie flag usage - EPATCH_MULTI_MSG="Applying upstream pie patches ..." \ - epatch "${WORKDIR}"/piepatch/upstream - # adds non-default pie support (rs6000) - EPATCH_MULTI_MSG="Applying non-default pie patches ..." \ - epatch "${WORKDIR}"/piepatch/nondef - # adds default pie support (rs6000 too) if DEFAULT_PIE[_SSP] is defined - EPATCH_MULTI_MSG="Applying default pie patches ..." \ - epatch "${WORKDIR}"/piepatch/def - fi + tc_apply_patches "Applying pie patches ..." "${WORKDIR}"/piepatch/*.patch BRANDING_GCC_PKGVERSION="${BRANDING_GCC_PKGVERSION}, pie-${PIE_VER}" } @@ -690,18 +688,15 @@ do_gcc_CYGWINPORTS_patches() { local p d="${WORKDIR}/gcc-${CYGWINPORTS_GITREV}" # readarray -t is available since bash-4.4 only, #690686 local patches=( $(sed -e '1,/PATCH_URI="/d;/"/,$d' < "${d}"/gcc.cygport) ) - for p in ${patches[*]}; do - epatch "${d}/${p}" - done + tc_apply_patches "Applying cygwin port patches ..." ${patches[*]} } # configure to build with the hardened GCC specs as the default make_gcc_hard() { - local gcc_hard_flags="" # If we use gcc-6 or newer with pie enable to compile older gcc we need to pass -no-pie - # to stage1; bug 618908 + # to stage1; bug #618908 if ! tc_version_is_at_least 6.0 && [[ $(gcc-major-version) -ge 6 ]] ; then einfo "Disabling PIE in stage1 (only) ..." sed -i -e "/^STAGE1_LDFLAGS/ s/$/ -no-pie/" "${S}"/Makefile.in || die @@ -716,7 +711,10 @@ make_gcc_hard() { einfo "Updating gcc to use automatic SSP building ..." fi if use_if_iuse hardened ; then - # Will add some optimatizion as default. + # Will add some hardened options as default, like: + # -fstack-clash-protection + # -z now + # see *_all_extra-options.patch gcc patches. gcc_hard_flags+=" -DEXTRA_OPTIONS" # rebrand to make bug reports easier BRANDING_GCC_PKGVERSION=${BRANDING_GCC_PKGVERSION/Gentoo/Gentoo Hardened} @@ -820,7 +818,6 @@ gcc_version_patch() { tc_version_is_at_least 4.3 && return 0 local version_string=${GCC_CONFIG_VER} - [[ -n ${BRANCH_UPDATE} ]] && version_string+=" ${BRANCH_UPDATE}" einfo "patching gcc version: ${version_string} (${BRANDING_GCC_PKGVERSION})" @@ -969,9 +966,9 @@ toolchain_src_configure() { tc_version_is_at_least 3.4 || confgcc+=( --disable-libunwind-exceptions ) # Use the default ("release") checking because upstream usually neglects - # to test "disabled" so it has a history of breaking. #317217 + # to test "disabled" so it has a history of breaking. bug #317217 if tc_version_is_at_least 3.4 && in_iuse debug ; then - # The "release" keyword is new to 4.0. #551636 + # The "release" keyword is new to 4.0. bug #551636 local off=$(tc_version_is_at_least 4.0 && echo release || echo no) confgcc+=( --enable-checking="${GCC_CHECKS_LIST:-$(usex debug yes ${off})}" ) fi @@ -989,12 +986,12 @@ toolchain_src_configure() { # allow gcc to search for clock funcs in the main C lib. # if it can't find them, then tough cookies -- we aren't - # going to link in -lrt to all C++ apps. #411681 + # going to link in -lrt to all C++ apps. bug #411681 if tc_version_is_at_least 4.4 && is_cxx ; then confgcc+=( --enable-libstdcxx-time ) fi - # Build compiler using LTO + # Build compiler itself using LTO if tc_version_is_at_least 9.1 && use_if_iuse lto ; then confgcc+=( --with-build-config=bootstrap-lto ) fi @@ -1007,7 +1004,9 @@ toolchain_src_configure() { # The jit language requires this. is_jit && confgcc+=( --enable-host-shared ) - # # Turn on the -Wl,--build-id flag by default for ELF targets. #525942 + # build-id was disabled for file collisions: bug #526144 + # + # # Turn on the -Wl,--build-id flag by default for ELF targets. bug #525942 # # This helps with locating debug files. # case ${CTARGET} in # *-linux-*|*-elf|*-eabi) @@ -1033,7 +1032,7 @@ toolchain_src_configure() { # disable a bunch of features or gcc goes boom local needed_libc="" case ${CTARGET} in - *-linux) needed_libc=no-fucking-clue;; + *-linux) needed_libc=error-unknown-libc;; *-dietlibc) needed_libc=dietlibc;; *-elf|*-eabi) needed_libc=newlib @@ -1048,10 +1047,12 @@ toolchain_src_configure() { *-klibc) needed_libc=klibc;; *-musl*) needed_libc=musl;; *-uclibc*) + # Enable shared library support only on targets + # that support it: bug #291870 if ! echo '#include ' | \ $(tc-getCPP ${CTARGET}) -E -dD - 2>/dev/null | \ grep -q __HAVE_SHARED__ - then #291870 + then confgcc+=( --disable-shared ) fi needed_libc=uclibc-ng @@ -1059,7 +1060,6 @@ toolchain_src_configure() { *-cygwin) needed_libc=cygwin;; x86_64-*-mingw*|\ *-w64-mingw*) needed_libc=mingw64-runtime;; - mingw*|*-mingw*) needed_libc=mingw-runtime;; avr) confgcc+=( --enable-shared --disable-threads );; esac if [[ -n ${needed_libc} ]] ; then @@ -1553,6 +1553,13 @@ gcc_do_filter_flags() { filter-flags -Wstack-protector fi + if tc_version_is_between 6 8 ; then + # -mstackrealign triggers crashes in exception throwing + # at least on ada: bug #688580 + # The reason is unknown. Drop the flag for now. + filter-flags -mstackrealign + fi + if tc_version_is_at_least 3.4 ; then case $(tc-arch) in amd64|x86) @@ -1774,7 +1781,7 @@ toolchain_src_test() { toolchain_src_install() { cd "${WORKDIR}"/build - # Do allow symlinks in private gcc include dir as this can break the build + # Don't allow symlinks in private gcc include dir as this can break the build find gcc/include*/ -type l -delete # Copy over the info pages. We disabled their generation earlier, but the @@ -1870,15 +1877,17 @@ toolchain_src_install() { fi fi - # TODO: implement stripping (we use RESTRICT=strip) - # As gcc installs object files both build against ${CHOST} and ${CTARGET} - # we will ned to run stripping using different tools: + # As gcc installs object files built against bost ${CHOST} and ${CTARGET} + # ideally we will need to strip them using different tools: # Using ${CHOST} tools: # - "${D}${BINPATH}" # - (for is_crosscompile) "${D}${HOSTLIBPATH}" # - "${D}${PREFIX}/libexec/gcc/${CTARGET}/${GCC_CONFIG_VER}" # Using ${CTARGET} tools: # - "${D}${LIBPATH}" + # As dostrip does not specify host to override ${CHOST} tools just skip + # non-native binary stripping. + is_crosscompile && tc_supports_dostrip && dostrip -x "${LIBPATH}" cd "${S}" if is_crosscompile; then @@ -2284,10 +2293,6 @@ toolchain_pkg_postrm() { if [[ ! -e ${LIBPATH}/libstdc++.so ]] ; then einfo "Running 'fix_libtool_files.sh ${GCC_RELEASE_VER}'" fix_libtool_files.sh ${GCC_RELEASE_VER} - if [[ -n ${BRANCH_UPDATE} ]] ; then - einfo "Running 'fix_libtool_files.sh ${GCC_RELEASE_VER}-${BRANCH_UPDATE}'" - fix_libtool_files.sh ${GCC_RELEASE_VER}-${BRANCH_UPDATE} - fi fi return 0 -- cgit v1.2.3