Files
gentoo/eclass/gnuconfig.eclass
T
Michał Górny 2f653f03c3 eclass: [QA] Revert multiple meaningless doc changes
Revert multiple meaningless eclass documentation changes, notably adding
a lot of placeholders and documenting implementation details.  These
changes were aimed at silencing (valid) documentation warnings without
actually providing valuable documentation to the end users.  While some
of these changes were beneficial, it would take a lot of effort to
review them all and the author is unwilling to fix his mistakes.

Signed-off-by: Michał Górny <mgorny@gentoo.org>
2020-12-28 10:31:30 +01:00

91 lines
2.8 KiB
Bash

# Copyright 1999-2020 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
#
# Author: Will Woods <wwoods@gentoo.org>
#
# This eclass is used to automatically update files that typically come with
# automake to the newest version available on the system. The most common use
# of this is to update config.guess and config.sub when configure dies from
# misguessing your canonical system name (CHOST). It can also be used to update
# other files that come with automake, e.g. depcomp, mkinstalldirs, etc.
#
# usage: gnuconfig_update [file1 file2 ...]
# if called without arguments, config.guess and config.sub will be updated.
# All files in the source tree ($S) with the given name(s) will be replaced
# with the newest available versions chosen from the list of locations in
# gnuconfig_findnewest(), below.
#
# gnuconfig_update should generally be called from src_unpack()
DEPEND="sys-devel/gnuconfig"
# Wrapper function for gnuconfig_do_update. If no arguments are given, update
# config.sub and config.guess (old default behavior), otherwise update the
# named files.
gnuconfig_update() {
local startdir # declared here ... used in gnuconfig_do_update
if [[ $1 == /* ]] ; then
startdir=$1
shift
else
startdir=${S}
fi
if [[ $# -gt 0 ]] ; then
gnuconfig_do_update "$@"
else
gnuconfig_do_update config.sub config.guess
fi
return $?
}
# Copy the newest available version of specified files over any old ones in the
# source dir. This function shouldn't be called directly - use gnuconfig_update
#
# Note that since bash using dynamic scoping, startdir is available here from
# the gnuconfig_update function
gnuconfig_do_update() {
local configsubs_dir target targetlist file
[[ $# -eq 0 ]] && die "do not call gnuconfig_do_update; use gnuconfig_update"
configsubs_dir=$(gnuconfig_findnewest)
einfo "Using GNU config files from ${configsubs_dir}"
for file in "$@" ; do
if [[ ! -r ${configsubs_dir}/${file} ]] ; then
eerror "Can't read ${configsubs_dir}/${file}, skipping.."
continue
fi
targetlist=$(find "${startdir}" -name "${file}")
if [[ -n ${targetlist} ]] ; then
for target in ${targetlist} ; do
[[ -L ${target} ]] && rm -f "${target}"
einfo " Updating ${target/$startdir\//}"
cp -f "${configsubs_dir}/${file}" "${target}"
eend $?
done
else
ewarn " No ${file} found in ${startdir}, skipping ..."
fi
done
return 0
}
# this searches the standard locations for the newest config.{sub|guess}, and
# returns the directory where they can be found.
gnuconfig_findnewest() {
local locations=(
"${EPREFIX}"/usr/share/misc/config.sub
"${EPREFIX}"/usr/share/gnuconfig/config.sub
"${EPREFIX}"/usr/share/automake*/config.sub
"${EPREFIX}"/usr/share/libtool/config.sub
)
grep -s '^timestamp' "${locations[@]}" | \
sort -r -n -t\' -k2 | \
sed -n '1{s,/config.sub:.*$,,;p;q}'
}