public inbox for gentoo-dev@lists.gentoo.org
 help / color / mirror / Atom feed
* [gentoo-dev] [PATCH v2 1/3] autotools.eclass: eclassdoc, cosmetic changes, drop old EAPIs, configure.ac rename
@ 2021-04-05 14:06 Sam James
  2021-04-05 14:06 ` [gentoo-dev] [PATCH v2 2/3] gnuconfig.eclass: provide basic @ECLASS block, docs Sam James
  2021-04-05 14:06 ` [gentoo-dev] [PATCH v2 3/3] gnuconfig.eclass: use BDEPEND, BROOT where available (drop support for EAPI <4) Sam James
  0 siblings, 2 replies; 13+ messages in thread
From: Sam James @ 2021-04-05 14:06 UTC (permalink / raw
  To: gentoo-dev; +Cc: Sam James

(Relatively) significant changes:
* inherit eutils for < EAPI 7 for eqawarn
* rename configure.in -> configure.ac in >= EAPI 8 (to avoid retroactive breakage)
* convert phase test to EBUILD_PHASE_FUNC
* use gnuconfig.eclass for finding gnuconfig logic for consistency and
avoiding duplication
* add explicit GNU awk BDEPEND as we use it in the eclass
* drop support for < EAPI 5 officially
[Needed for the EBUILD_PHASE_FUNC change.
< EAPI 5 is no longer in ::gentoo (since December).

Note that we were using ${EPREFIX} which isn't defined
< EAPI 3 so we were wrong about which EAPIs we supported
anyway.]

eclassdoc fixes:
* explicitly blank and mark variables as @DEFAULT_UNSET
* add @DESCRIPTION for _at_uses_pkg
* document AUTOTOOLS_DEPEND

Cosmetic changes:
* minor cosmetic changes to various elogs
* fix whitespace/phrasing in comment
* convert ewarn to eqawarn
* consistent 'case' style
* consistent variable references
* consistent references to bugs in comments
* consistent use of ${ECLASS}, not "autotools.eclass"
* use same ${WANT_AUTOCONF} comparison test throughout

Bug: https://bugs.gentoo.org/426262
Closes: https://bugs.gentoo.org/584254
Signed-off-by: Sam James <sam@gentoo.org>
---
 eclass/autotools.eclass | 118 ++++++++++++++++++++++------------------
 1 file changed, 65 insertions(+), 53 deletions(-)

diff --git a/eclass/autotools.eclass b/eclass/autotools.eclass
index 3e6906cb469..455fe38f466 100644
--- a/eclass/autotools.eclass
+++ b/eclass/autotools.eclass
@@ -4,7 +4,7 @@
 # @ECLASS: autotools.eclass
 # @MAINTAINER:
 # base-system@gentoo.org
-# @SUPPORTED_EAPIS: 0 1 2 3 4 5 6 7
+# @SUPPORTED_EAPIS: 5 6 7
 # @BLURB: Regenerates auto* build scripts
 # @DESCRIPTION:
 # This eclass is for safely handling autotooled software packages that need to
@@ -19,19 +19,23 @@ if [[ ${__AUTOTOOLS_AUTO_DEPEND+set} == "set" ]] ; then
 	# eclass at that point, but that adds overhead, and it's trivial
 	# to re-order inherit in eclasses/ebuilds instead.  #409611
 	if [[ ${__AUTOTOOLS_AUTO_DEPEND} != ${AUTOTOOLS_AUTO_DEPEND} ]] ; then
-		die "AUTOTOOLS_AUTO_DEPEND changed value between inherits; please inherit autotools.eclass first! ${__AUTOTOOLS_AUTO_DEPEND} -> ${AUTOTOOLS_AUTO_DEPEND}"
+		die "AUTOTOOLS_AUTO_DEPEND changed value between inherits; please inherit ${ECLASS} first! ${__AUTOTOOLS_AUTO_DEPEND} -> ${AUTOTOOLS_AUTO_DEPEND}"
 	fi
 fi
 
-if [[ -z ${_AUTOTOOLS_ECLASS} ]]; then
+if [[ -z ${_AUTOTOOLS_ECLASS} ]] ; then
 _AUTOTOOLS_ECLASS=1
 
 case ${EAPI:-0} in
-	0|1|2|3|4|5|6|7) ;;
+	5|6)
+		# Needed for eqawarn
+		inherit eutils
+		;;
+	7) ;;
 	*) die "${ECLASS}: EAPI ${EAPI} not supported" ;;
 esac
 
-inherit libtool
+inherit gnuconfig libtool
 
 # @ECLASS-VARIABLE: WANT_AUTOCONF
 # @PRE_INHERIT
@@ -74,21 +78,14 @@ _LATEST_AUTOMAKE=( 1.16.2-r1:1.16 )
 
 _automake_atom="sys-devel/automake"
 _autoconf_atom="sys-devel/autoconf"
-if [[ -n ${WANT_AUTOMAKE} ]]; then
+if [[ -n ${WANT_AUTOMAKE} ]] ; then
 	case ${WANT_AUTOMAKE} in
 		# Even if the package doesn't use automake, we still need to depend
 		# on it because we run aclocal to process m4 macros.  This matches
 		# the autoreconf tool, so this requirement is correct, bug #401605.
 		none) ;;
-		latest)
-			# Use SLOT deps if we can.  For EAPI=0, we get pretty close.
-			if [[ ${EAPI:-0} != 0 ]] ; then
-				_automake_atom="|| ( `printf '>=sys-devel/automake-%s:%s ' ${_LATEST_AUTOMAKE[@]/:/ }` )"
-			else
-				_automake_atom="|| ( `printf '>=sys-devel/automake-%s ' ${_LATEST_AUTOMAKE[@]/%:*}` )"
-			fi
-			;;
-		*)      _automake_atom="=sys-devel/automake-${WANT_AUTOMAKE}*" ;;
+		latest) _automake_atom="|| ( `printf '>=sys-devel/automake-%s:%s ' ${_LATEST_AUTOMAKE[@]/:/ }` )" ;;
+		*) _automake_atom="=sys-devel/automake-${WANT_AUTOMAKE}*" ;;
 	esac
 	export WANT_AUTOMAKE
 fi
@@ -114,9 +111,16 @@ if [[ -n ${WANT_LIBTOOL} ]] ; then
 	export WANT_LIBTOOL
 fi
 
+# @ECLASS-VARIABLE: AUTOTOOLS_DEPEND
+# @INTERNAL
+# @DESCRIPTION:
+# Contains the combination of requested automake/autoconf/libtool
+# versions in *DEPEND format.
 AUTOTOOLS_DEPEND="${_automake_atom}
 	${_autoconf_atom}
-	${_libtool_atom}"
+	${_libtool_atom}
+	sys-apps/gawk
+"
 RDEPEND=""
 
 # @ECLASS-VARIABLE: AUTOTOOLS_AUTO_DEPEND
@@ -128,7 +132,7 @@ RDEPEND=""
 : ${AUTOTOOLS_AUTO_DEPEND:=yes}
 if [[ ${AUTOTOOLS_AUTO_DEPEND} != "no" ]] ; then
 	case ${EAPI:-0} in
-		0|1|2|3|4|5|6) DEPEND=${AUTOTOOLS_DEPEND} ;;
+		4|5|6) DEPEND=${AUTOTOOLS_DEPEND} ;;
 		7) BDEPEND=${AUTOTOOLS_DEPEND} ;;
 	esac
 fi
@@ -141,12 +145,14 @@ unset _automake_atom _autoconf_atom
 # @DESCRIPTION:
 # Additional options to pass to automake during
 # eautoreconf call.
+: ${AM_OPTS:=}
 
 # @ECLASS-VARIABLE: AT_NOEAUTOHEADER
 # @DEFAULT_UNSET
 # @DESCRIPTION:
 # Don't run eautoheader command if set to 'yes'; only used to work around
 # packages that don't want their headers being modified.
+: ${AT_NOEAUTOHEADER:=}
 
 # @ECLASS-VARIABLE: AT_NOEAUTOMAKE
 # @DEFAULT_UNSET
@@ -154,6 +160,7 @@ unset _automake_atom _autoconf_atom
 # Don't run eautomake command if set to 'yes'; only used to workaround
 # broken packages.  Generally you should, instead, fix the package to
 # not call AM_INIT_AUTOMAKE if it doesn't actually use automake.
+: ${AT_NOEAUTOMAKE:=}
 
 # @ECLASS-VARIABLE: AT_NOELIBTOOLIZE
 # @DEFAULT_UNSET
@@ -161,6 +168,7 @@ unset _automake_atom _autoconf_atom
 # Don't run elibtoolize command if set to 'yes',
 # useful when elibtoolize needs to be ran with
 # particular options
+: ${AT_NOELIBTOOLIZE:=}
 
 # @ECLASS-VARIABLE: AT_M4DIR
 # @DEFAULT_UNSET
@@ -245,7 +253,7 @@ eautoreconf() {
 	done
 	${rerun_aclocal} && eaclocal
 
-	if [[ ${WANT_AUTOCONF} = 2.1 ]] ; then
+	if [[ ${WANT_AUTOCONF} == "2.1" ]] ; then
 		eautoconf
 	else
 		eautoconf --force
@@ -265,6 +273,7 @@ eautoreconf() {
 # @FUNCTION: _at_uses_pkg
 # @USAGE: <macros>
 # @INTERNAL
+# @DESCRIPTION:
 # See if the specified macros are enabled.
 _at_uses_pkg() {
 	if [[ -n $(autotools_check_macro "$@") ]] ; then
@@ -337,7 +346,7 @@ eaclocal() {
 _elibtoolize() {
 	local LIBTOOLIZE=${LIBTOOLIZE:-$(type -P glibtoolize > /dev/null && echo glibtoolize || echo libtoolize)}
 
-	if [[ $1 == "--auto-ltdl" ]] ; then
+	if [[ ${1} == "--auto-ltdl" ]] ; then
 		shift
 		_at_uses_libltdl && set -- "$@" --ltdl
 	fi
@@ -365,23 +374,26 @@ eautoconf() {
 		echo
 		die "No configure.{ac,in} present!"
 	fi
+
 	if [[ ${WANT_AUTOCONF} != "2.1" && -e configure.in ]] ; then
-		eqawarn "This package has a configure.in file which has long been deprecated.  Please"
-		eqawarn "update it to use configure.ac instead as newer versions of autotools will die"
-		eqawarn "when it finds this file.  See https://bugs.gentoo.org/426262 for details."
+		case ${EAPI:-0} in
+			5|6|7)
+				eqawarn "This package has a configure.in file which has long been deprecated.  Please"
+				eqawarn "update it to use configure.ac instead as newer versions of autotools will die"
+				eqawarn "when it finds this file.  See https://bugs.gentoo.org/426262 for details."
+				;;
+			*)
+				# Move configure file to the new location only on newer EAPIs to ensure
+				# checks are done rather than retroactively breaking ebuilds.
+				einfo "Moving configure.in to configure.ac (bug #426262)"
+				mv configure.{in,ac} || die
+				;;
+		esac
 	fi
 
 	# Install config.guess and config.sub which are required by many macros
 	# in autoconf >=2.70.
-	local _gnuconfig
-	case ${EAPI:-0} in
-		0|1|2|3|4|5|6)
-			_gnuconfig="${EPREFIX}/usr/share/gnuconfig"
-		;;
-		*)
-			_gnuconfig="${BROOT}/usr/share/gnuconfig"
-		;;
-	esac
+	local _gnuconfig=$(gnuconfig_findnewest)
 	cp "${_gnuconfig}"/config.{guess,sub} . || die
 
 	autotools_run_tool --at-m4flags autoconf "$@"
@@ -409,7 +421,7 @@ eautomake() {
 	if [[ -z ${makefile_name} ]] ; then
 		_at_uses_automake || return 0
 
-	elif [[ -z ${FROM_EAUTORECONF} && -f ${makefile_name%.am}.in ]]; then
+	elif [[ -z ${FROM_EAUTORECONF} && -f ${makefile_name%.am}.in ]] ; then
 		local used_automake
 		local installed_automake
 
@@ -417,7 +429,7 @@ eautomake() {
 		used_automake=$(head -n 1 < ${makefile_name%.am}.in | \
 			sed -e 's:.*by automake \(.*\) from .*:\1:')
 
-		if [[ ${installed_automake} != ${used_automake} ]]; then
+		if [[ ${installed_automake} != ${used_automake} ]] ; then
 			ewarn "Automake used for the package (${used_automake}) differs from" \
 				"the installed version (${installed_automake})."
 			ewarn "Forcing a full rebuild of the autotools to workaround."
@@ -432,8 +444,8 @@ eautomake() {
 	# Older versions of automake do not support --force-missing.  But we want
 	# to use this whenever possible to update random bundled files, bug #133489.
 	case $(_automake_version) in
-	1.4|1.4[.-]*) ;;
-	*) extra_opts+=( --force-missing ) ;;
+		1.4|1.4[.-]*) ;;
+		*) extra_opts+=( --force-missing ) ;;
 	esac
 
 	autotools_run_tool automake --add-missing --copy "${extra_opts[@]}" "$@"
@@ -456,7 +468,7 @@ config_rpath_update() {
 	local dst src
 
 	case ${EAPI:-0} in
-		0|1|2|3|4|5|6)
+		4|5|6)
 			src="${EPREFIX}/usr/share/gettext/config.rpath"
 			;;
 		*)
@@ -481,7 +493,7 @@ config_rpath_update() {
 autotools_env_setup() {
 	# We do the "latest" → version switch here because it solves
 	# possible order problems, see bug #270010 as an example.
-	if [[ ${WANT_AUTOMAKE} == "latest" ]]; then
+	if [[ ${WANT_AUTOMAKE} == "latest" ]] ; then
 		local pv
 		for pv in ${_LATEST_AUTOMAKE[@]/#*:} ; do
 			# Break on first hit to respect _LATEST_AUTOMAKE order.
@@ -511,24 +523,24 @@ autotools_env_setup() {
 autotools_run_tool() {
 	# Process our own internal flags first
 	local autofail=true m4flags=false missing_ok=false return_output=false
-	while [[ -n $1 ]] ; do
-		case $1 in
-		--at-no-fail) autofail=false;;
-		--at-m4flags) m4flags=true;;
-		--at-missing) missing_ok=true;;
-		--at-output)  return_output=true;;
-		# whatever is left goes to the actual tool
-		*) break;;
+	while [[ -n ${1} ]] ; do
+		case ${1} in
+			--at-no-fail) autofail=false ;;
+			--at-m4flags) m4flags=true ;;
+			--at-missing) missing_ok=true ;;
+			--at-output)  return_output=true ;;
+			# whatever is left goes to the actual tool
+			*) break ;;
 		esac
 		shift
 	done
 
-	if [[ ${EBUILD_PHASE} != "unpack" && ${EBUILD_PHASE} != "prepare" ]]; then
-		ewarn "QA Warning: running '$1' in ${EBUILD_PHASE} phase"
+	if [[ ${EBUILD_PHASE_FUNC} != "src_unpack" && ${EBUILD_PHASE_FUNC} != "src_prepare" ]] ; then
+		eqawarn "Running '${1}' in ${EBUILD_PHASE_FUNC} phase"
 	fi
 
 	if ${missing_ok} && ! type -P ${1} >/dev/null ; then
-		einfo "Skipping '$*' because '$1' not installed"
+		einfo "Skipping '$*' because '${1}' not installed"
 		return 0
 	fi
 
@@ -557,19 +569,19 @@ autotools_run_tool() {
 		return
 	fi
 
-	printf "***** $1 *****\n***** PWD: ${PWD}\n***** $*\n\n" > "${STDERR_TARGET}"
+	printf "***** ${1} *****\n***** PWD: ${PWD}\n***** $*\n\n" > "${STDERR_TARGET}"
 
-	ebegin "Running $@"
+	ebegin "Running '$@'"
 	"$@" >> "${STDERR_TARGET}" 2>&1
 	if ! eend $? && ${autofail} ; then
 		echo
-		eerror "Failed running '$1'!"
+		eerror "Failed running '${1}'!"
 		eerror
 		eerror "Include in your bug report the contents of:"
 		eerror
 		eerror "  ${STDERR_TARGET}"
 		echo
-		die "Failed running '$1'!"
+		die "Failed running '${1}'!"
 	fi
 }
 
@@ -642,7 +654,7 @@ _autotools_m4dir_include() {
 			# We handle it below
 			-${flag}) ;;
 			*)
-				[[ ! -d ${x} ]] && ewarn "autotools.eclass: '${x}' does not exist"
+				[[ ! -d ${x} ]] && ewarn "${ECLASS}: '${x}' does not exist"
 				include_opts+=" -${flag} ${x}"
 				;;
 		esac
-- 
2.31.1



^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [gentoo-dev] [PATCH v2 2/3] gnuconfig.eclass: provide basic @ECLASS block, docs
  2021-04-05 14:06 [gentoo-dev] [PATCH v2 1/3] autotools.eclass: eclassdoc, cosmetic changes, drop old EAPIs, configure.ac rename Sam James
@ 2021-04-05 14:06 ` Sam James
  2021-04-05 14:06 ` [gentoo-dev] [PATCH v2 3/3] gnuconfig.eclass: use BDEPEND, BROOT where available (drop support for EAPI <4) Sam James
  1 sibling, 0 replies; 13+ messages in thread
From: Sam James @ 2021-04-05 14:06 UTC (permalink / raw
  To: gentoo-dev; +Cc: Sam James

Signed-off-by: Sam James <sam@gentoo.org>
---
 eclass/gnuconfig.eclass | 33 +++++++++++++++++++++++----------
 1 file changed, 23 insertions(+), 10 deletions(-)

diff --git a/eclass/gnuconfig.eclass b/eclass/gnuconfig.eclass
index 3433837787c..f679441445f 100644
--- a/eclass/gnuconfig.eclass
+++ b/eclass/gnuconfig.eclass
@@ -1,25 +1,32 @@
-# Copyright 1999-2020 Gentoo Authors
+# Copyright 1999-2021 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
-#
-# Author: Will Woods <wwoods@gentoo.org>
-#
+
+# @ECLASS: gnuconfig.eclass
+# @MAINTAINER:
+# maintainer-needed@gentoo.org
+# @AUTHOR:
+# Will Woods <wwoods@gentoo.org>
+# @BLURB: Eclass to make PCF font generator from BDF uniform and optimal
+# @DESCRIPTION:
 # 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 ...]
+
+DEPEND="sys-devel/gnuconfig"
+
+# @FUNCTION: gnuconfig_update
+# @USAGE: [file1 file2 ...]
+# @DESCRIPTION:
 # 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.
@@ -42,6 +49,9 @@ gnuconfig_update() {
 	return $?
 }
 
+# @FUNCTION: gnuconfig_do_update
+# @INTERNAL
+# @DESCRIPTION:
 # 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
 #
@@ -75,7 +85,10 @@ gnuconfig_do_update() {
 	return 0
 }
 
-# this searches the standard locations for the newest config.{sub|guess}, and
+# @FUNCTION: gnuconfig_findnewest
+# @INTERNAL
+# @DESCRIPTION:
+# This searches the standard locations for the newest config.{sub|guess}, and
 # returns the directory where they can be found.
 gnuconfig_findnewest() {
 	local locations=(
-- 
2.31.1



^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [gentoo-dev] [PATCH v2 3/3] gnuconfig.eclass: use BDEPEND, BROOT where available (drop support for EAPI <4)
  2021-04-05 14:06 [gentoo-dev] [PATCH v2 1/3] autotools.eclass: eclassdoc, cosmetic changes, drop old EAPIs, configure.ac rename Sam James
  2021-04-05 14:06 ` [gentoo-dev] [PATCH v2 2/3] gnuconfig.eclass: provide basic @ECLASS block, docs Sam James
@ 2021-04-05 14:06 ` Sam James
  2021-04-05 16:24   ` Ulrich Mueller
  1 sibling, 1 reply; 13+ messages in thread
From: Sam James @ 2021-04-05 14:06 UTC (permalink / raw
  To: gentoo-dev; +Cc: Sam James

EPREFIX is only available in > EAPI 2 but let's take the opportuinty
to clean up in general. We don't want to keep worrying about
*very* old EAPI cases, especially given other eclasses
either barely - or don't - support it.

Signed-off-by: Sam James <sam@gentoo.org>
---
 eclass/gnuconfig.eclass | 41 +++++++++++++++++++++++++++++++++++------
 1 file changed, 35 insertions(+), 6 deletions(-)

diff --git a/eclass/gnuconfig.eclass b/eclass/gnuconfig.eclass
index f679441445f..865bc9fcb70 100644
--- a/eclass/gnuconfig.eclass
+++ b/eclass/gnuconfig.eclass
@@ -15,7 +15,23 @@
 # other files that come with automake, e.g. depcomp, mkinstalldirs, etc.
 #
 
-DEPEND="sys-devel/gnuconfig"
+case ${EAPI:-0} in
+	4|5|6)
+		DEPEND="
+			sys-apps/grep
+			sys-devel/gnuconfig
+		"
+		;;
+	7)
+		BDEPEND="
+			sys-apps/grep
+			sys-devel/gnuconfig
+		"
+		;;
+	*)
+		die "EAPI ${EAPI} is unsupported!"
+		;;
+esac
 
 # @FUNCTION: gnuconfig_update
 # @USAGE: [file1 file2 ...]
@@ -91,12 +107,25 @@ gnuconfig_do_update() {
 # 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
+	local locations=()
+	local prefix
+
+	case ${EAPI:-0} in
+		4|5|6)
+			prefix="${EPREFIX}"
+			;;
+		*)
+			prefix="${BROOT}"
+			;;
+	esac
+
+	locations+=(
+		"${prefix}"/usr/share/misc/config.sub
+		"${prefix}"/usr/share/gnuconfig/config.sub
+		"${prefix}"/usr/share/automake*/config.sub
+		"${prefix}"/usr/share/libtool/config.sub
 	)
+
 	grep -s '^timestamp' "${locations[@]}" | \
 		sort -r -n -t\' -k2 | \
 		sed -n '1{s,/config.sub:.*$,,;p;q}'
-- 
2.31.1



^ permalink raw reply related	[flat|nested] 13+ messages in thread

* Re: [gentoo-dev] [PATCH v2 3/3] gnuconfig.eclass: use BDEPEND, BROOT where available (drop support for EAPI <4)
  2021-04-05 14:06 ` [gentoo-dev] [PATCH v2 3/3] gnuconfig.eclass: use BDEPEND, BROOT where available (drop support for EAPI <4) Sam James
@ 2021-04-05 16:24   ` Ulrich Mueller
  2021-04-06 19:32     ` Sam James
  0 siblings, 1 reply; 13+ messages in thread
From: Ulrich Mueller @ 2021-04-05 16:24 UTC (permalink / raw
  To: Sam James; +Cc: gentoo-dev

[-- Attachment #1: Type: text/plain, Size: 248 bytes --]

>>>>> On Mon, 05 Apr 2021, Sam James wrote:
 
> +	4|5|6)
> +		DEPEND="
> +			sys-apps/grep
> +			sys-devel/gnuconfig
> +		"
> +		;;
> +	7)
> +		BDEPEND="
> +			sys-apps/grep

We usually don't add basic tools like grep to dependencies.

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 507 bytes --]

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [gentoo-dev] [PATCH v2 3/3] gnuconfig.eclass: use BDEPEND, BROOT where available (drop support for EAPI <4)
  2021-04-05 16:24   ` Ulrich Mueller
@ 2021-04-06 19:32     ` Sam James
  2021-04-07 11:06       ` Ulrich Mueller
  2021-04-07 11:18       ` Michael Orlitzky
  0 siblings, 2 replies; 13+ messages in thread
From: Sam James @ 2021-04-06 19:32 UTC (permalink / raw
  To: gentoo-dev

[-- Attachment #1: Type: text/plain, Size: 979 bytes --]



> On 5 Apr 2021, at 17:24, Ulrich Mueller <ulm@gentoo.org> wrote:
> 
>>>>>> On Mon, 05 Apr 2021, Sam James wrote:
> 
>> +	4|5|6)
>> +		DEPEND="
>> +			sys-apps/grep
>> +			sys-devel/gnuconfig
>> +		"
>> +		;;
>> +	7)
>> +		BDEPEND="
>> +			sys-apps/grep
> 
> We usually don't add basic tools like grep to dependencies.

Few points:

1) @system varies between profiles anyway which makes it hard to fully
rely on;

2) As a few of us have discussed in #gentoo-portage in the past, continuing
this trend of not explicitly stating dependencies makes parallelism in Portage
difficult. You can try this with —implicit-system-deps=n, but we really need
to be stating what we use explicitly.

The benefit is enhanced parallelism and the downside is being _slightly_ more
verbose in some ebuilds;

3) Implicit dependencies make it hard for us to ever actually swap implementations;

4) This helps when creating minimal systems without Portage in it.

[-- Attachment #2: Message signed with OpenPGP --]
[-- Type: application/pgp-signature, Size: 618 bytes --]

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [gentoo-dev] [PATCH v2 3/3] gnuconfig.eclass: use BDEPEND, BROOT where available (drop support for EAPI <4)
  2021-04-06 19:32     ` Sam James
@ 2021-04-07 11:06       ` Ulrich Mueller
  2021-04-09 23:30         ` Sam James
  2021-04-07 11:18       ` Michael Orlitzky
  1 sibling, 1 reply; 13+ messages in thread
From: Ulrich Mueller @ 2021-04-07 11:06 UTC (permalink / raw
  To: Sam James; +Cc: gentoo-dev

[-- Attachment #1: Type: text/plain, Size: 1931 bytes --]

>>>>> On Tue, 06 Apr 2021, Sam James wrote:

> 1) @system varies between profiles anyway which makes it hard to fully
> rely on;

That's exactly the reason why you _don't_* add GNU grep as a dependency,
because e.g. on Prefix grep may be provided by another package.

grep is a POSIX tool and a bootstrap package, so we can be certain that
will be available everywhere. (And the single grep instance in the
eclass doesn't use any GNUisms.)

> 2) As a few of us have discussed in #gentoo-portage in the past,
> continuing this trend of not explicitly stating dependencies makes
> parallelism in Portage difficult. You can try this with
> —implicit-system-deps=n, but we really need to be stating what we use
> explicitly.

This would mean that we'd end up with lots of system dependencies in
every ebuild. The current policy is in place for good reasons.

You may have a point for adding library dependencies explicitly, but
certainly not for common build tools (aka bootstrap packages). They will
be available from the very beginning of the bootstrap process.

> The benefit is enhanced parallelism and the downside is being
> _slightly_ more verbose in some ebuilds;

s/slightly/much/;s/some/all/

We'd end up having a significant subset of profiles/base/packages in
_every_ ebuild. Or even worse, a bunch of any-of-many dependencies or
virtuals, in order to account for different systems. Personally, I
wouldn't be willing to maintain such dependencies for my ebuilds.

More importantly, if you want such a policy change, then you should
discuss it first and have it approved. Until then, the current policy
[1] applies.

> 3) Implicit dependencies make it hard for us to ever actually swap
> implementations;

> 4) This helps when creating minimal systems without Portage in it.

[1] https://devmanual.gentoo.org/general-concepts/dependencies/index.html#implicit-system-dependency

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 507 bytes --]

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [gentoo-dev] [PATCH v2 3/3] gnuconfig.eclass: use BDEPEND, BROOT where available (drop support for EAPI <4)
  2021-04-06 19:32     ` Sam James
  2021-04-07 11:06       ` Ulrich Mueller
@ 2021-04-07 11:18       ` Michael Orlitzky
  2021-04-07 11:30         ` Ulrich Mueller
  2021-04-09 23:32         ` Sam James
  1 sibling, 2 replies; 13+ messages in thread
From: Michael Orlitzky @ 2021-04-07 11:18 UTC (permalink / raw
  To: gentoo-dev

On Tue, 2021-04-06 at 20:32 +0100, Sam James wrote:
> 
> > 
> > We usually don't add basic tools like grep to dependencies.
> 
> Few points:
> 
> ...

5) There are no clear rules about what @system packages can be left out
of *DEPEND and when, so their presence is wildly inconsistent.




^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [gentoo-dev] [PATCH v2 3/3] gnuconfig.eclass: use BDEPEND, BROOT where available (drop support for EAPI <4)
  2021-04-07 11:18       ` Michael Orlitzky
@ 2021-04-07 11:30         ` Ulrich Mueller
  2021-04-09 23:32         ` Sam James
  1 sibling, 0 replies; 13+ messages in thread
From: Ulrich Mueller @ 2021-04-07 11:30 UTC (permalink / raw
  To: Michael Orlitzky; +Cc: gentoo-dev

[-- Attachment #1: Type: text/plain, Size: 295 bytes --]

>>>>> On Wed, 07 Apr 2021, Michael Orlitzky wrote:

> 5) There are no clear rules about what @system packages can be left
> out of *DEPEND and when, so their presence is wildly inconsistent.

The rules are pretty clear for BDEPEND and bootstrap packages, which is
what we're talking about here.

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 507 bytes --]

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [gentoo-dev] [PATCH v2 3/3] gnuconfig.eclass: use BDEPEND, BROOT where available (drop support for EAPI <4)
  2021-04-07 11:06       ` Ulrich Mueller
@ 2021-04-09 23:30         ` Sam James
  0 siblings, 0 replies; 13+ messages in thread
From: Sam James @ 2021-04-09 23:30 UTC (permalink / raw
  To: gentoo-dev

[-- Attachment #1: Type: text/plain, Size: 2723 bytes --]



> On 7 Apr 2021, at 12:06, Ulrich Mueller <ulm@gentoo.org> wrote:
> 
>>>>>> On Tue, 06 Apr 2021, Sam James wrote:
> 
>> 1) @system varies between profiles anyway which makes it hard to fully
>> rely on;
> 
> That's exactly the reason why you _don't_* add GNU grep as a dependency,
> because e.g. on Prefix grep may be provided by another package.
> 
> grep is a POSIX tool and a bootstrap package, so we can be certain that
> will be available everywhere. (And the single grep instance in the
> eclass doesn't use any GNUisms.)
> 

Yeah, bootstrap package was the key distinction I was missing.

>> 2) As a few of us have discussed in #gentoo-portage in the past,
>> continuing this trend of not explicitly stating dependencies makes
>> parallelism in Portage difficult. You can try this with
>> —implicit-system-deps=n, but we really need to be stating what we use
>> explicitly.
> 
> This would mean that we'd end up with lots of system dependencies in
> every ebuild. The current policy is in place for good reasons.
> 

Yes, although as I’ll say below, I’m not sure it’s as clear as it could be.

> You may have a point for adding library dependencies explicitly, but
> certainly not for common build tools (aka bootstrap packages). They will
> be available from the very beginning of the bootstrap process.

Indeed.

>> The benefit is enhanced parallelism and the downside is being
>> _slightly_ more verbose in some ebuilds;
> 
> s/slightly/much/;s/some/all/
> 
> We'd end up having a significant subset of profiles/base/packages in
> _every_ ebuild. Or even worse, a bunch of any-of-many dependencies or
> virtuals, in order to account for different systems. Personally, I
> wouldn't be willing to maintain such dependencies for my ebuilds.
> 

I’m not sure this would be a significant subset, but I agree, this
approach is really only applicable to non-bootstrap dependencies.

What we do need likely need is to document this specific part better.

> More importantly, if you want such a policy change, then you should
> discuss it first and have it approved. Until then, the current policy
> [1] applies.

Sure. It should probably be in the QA policy document though, given
the devmanual is not always explicitly policy, as we’ve
discussed.

TL;DR: Agreed, I’ll drop this part from the changes, and we
may revisit the issue through e.g. documentation.

> 
>> 3) Implicit dependencies make it hard for us to ever actually swap
>> implementations;
> 
>> 4) This helps when creating minimal systems without Portage in it.
> 
> [1] https://devmanual.gentoo.org/general-concepts/dependencies/index.html#implicit-system-dependency


[-- Attachment #2: Message signed with OpenPGP --]
[-- Type: application/pgp-signature, Size: 618 bytes --]

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [gentoo-dev] [PATCH v2 3/3] gnuconfig.eclass: use BDEPEND, BROOT where available (drop support for EAPI <4)
  2021-04-07 11:18       ` Michael Orlitzky
  2021-04-07 11:30         ` Ulrich Mueller
@ 2021-04-09 23:32         ` Sam James
  2021-04-10  0:13           ` Michael Orlitzky
  1 sibling, 1 reply; 13+ messages in thread
From: Sam James @ 2021-04-09 23:32 UTC (permalink / raw
  To: gentoo-dev

[-- Attachment #1: Type: text/plain, Size: 659 bytes --]



> On 7 Apr 2021, at 12:18, Michael Orlitzky <mjo@gentoo.org> wrote:
> 
> On Tue, 2021-04-06 at 20:32 +0100, Sam James wrote:
>> 
>>> 
>>> We usually don't add basic tools like grep to dependencies.
>> 
>> Few points:
>> 
>> ...
> 
> 5) There are no clear rules about what @system packages can be left out
> of *DEPEND and when, so their presence is wildly inconsistent.

Yes, this is the part I find difficult too. The important
distinction here was *bootstrapping* (which I missed)
but I think at least we should make a list of packages generally considered
critical for bootstrap.

The Prefix documentation and scripts as well as Catalyst
will help here.

[-- Attachment #2: Message signed with OpenPGP --]
[-- Type: application/pgp-signature, Size: 618 bytes --]

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [gentoo-dev] [PATCH v2 3/3] gnuconfig.eclass: use BDEPEND, BROOT where available (drop support for EAPI <4)
  2021-04-09 23:32         ` Sam James
@ 2021-04-10  0:13           ` Michael Orlitzky
  2021-04-10  0:19             ` Sam James
  0 siblings, 1 reply; 13+ messages in thread
From: Michael Orlitzky @ 2021-04-10  0:13 UTC (permalink / raw
  To: gentoo-dev

On Sat, 2021-04-10 at 00:32 +0100, Sam James wrote:
> 
> 
> Yes, this is the part I find difficult too. The important
> distinction here was *bootstrapping* (which I missed)
> but I think at least we should make a list of packages generally considered
> critical for bootstrap.
> 

What is a bootstrap package?

There is some chicken-and-egg problem to be solved, but I don't think
that we should be assuming that e.g. GNU grep is always present just
because, during the base case of some recursive process, POSIX grep
must be available temporarily.

Anyway, https://bugs.gentoo.org/485356 awaits reopening if you make any
progress on this.




^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [gentoo-dev] [PATCH v2 3/3] gnuconfig.eclass: use BDEPEND, BROOT where available (drop support for EAPI <4)
  2021-04-10  0:13           ` Michael Orlitzky
@ 2021-04-10  0:19             ` Sam James
  2021-04-10  3:54               ` Alec Warner
  0 siblings, 1 reply; 13+ messages in thread
From: Sam James @ 2021-04-10  0:19 UTC (permalink / raw
  To: gentoo-dev

[-- Attachment #1: Type: text/plain, Size: 1037 bytes --]



> On 10 Apr 2021, at 01:13, Michael Orlitzky <mjo@gentoo.org> wrote:
> 
> On Sat, 2021-04-10 at 00:32 +0100, Sam James wrote:
>> 
>> 
>> Yes, this is the part I find difficult too. The important
>> distinction here was *bootstrapping* (which I missed)
>> but I think at least we should make a list of packages generally considered
>> critical for bootstrap.
>> 
> 
> What is a bootstrap package?
> 
> There is some chicken-and-egg problem to be solved, but I don't think
> that we should be assuming that e.g. GNU grep is always present just
> because, during the base case of some recursive process, POSIX grep
> must be available temporarily.
> 
> Anyway, https://bugs.gentoo.org/485356 awaits reopening if you make any
> progress on this.
> 

Oh, I agree completely. CCed myself on the bug and added to the list
to think about/work on.

I’m pleased a bug existed in the past! I don’t agree with it being closed though:
documentation issues can exist without a patch existing to fix them yet, right?

[-- Attachment #2: Message signed with OpenPGP --]
[-- Type: application/pgp-signature, Size: 618 bytes --]

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [gentoo-dev] [PATCH v2 3/3] gnuconfig.eclass: use BDEPEND, BROOT where available (drop support for EAPI <4)
  2021-04-10  0:19             ` Sam James
@ 2021-04-10  3:54               ` Alec Warner
  0 siblings, 0 replies; 13+ messages in thread
From: Alec Warner @ 2021-04-10  3:54 UTC (permalink / raw
  To: Gentoo Dev

On Fri, Apr 9, 2021 at 5:19 PM Sam James <sam@gentoo.org> wrote:
>
>
>
> > On 10 Apr 2021, at 01:13, Michael Orlitzky <mjo@gentoo.org> wrote:
> >
> > On Sat, 2021-04-10 at 00:32 +0100, Sam James wrote:
> >>
> >>
> >> Yes, this is the part I find difficult too. The important
> >> distinction here was *bootstrapping* (which I missed)
> >> but I think at least we should make a list of packages generally considered
> >> critical for bootstrap.
> >>
> >
> > What is a bootstrap package?
> >
> > There is some chicken-and-egg problem to be solved, but I don't think
> > that we should be assuming that e.g. GNU grep is always present just
> > because, during the base case of some recursive process, POSIX grep
> > must be available temporarily.
> >
> > Anyway, https://bugs.gentoo.org/485356 awaits reopening if you make any
> > progress on this.
> >
>
> Oh, I agree completely. CCed myself on the bug and added to the list
> to think about/work on.
>
> I’m pleased a bug existed in the past! I don’t agree with it being closed though:
> documentation issues can exist without a patch existing to fix them yet, right?

I worry a lot about more complex dependencies trees (imagine all of
the exciting cycles in the currently excluded @system depgraph.)
Remember that while in theory it would be great if portage knew about
all of them; computing these nodes and edges isn't free. I question
what we are really buying with the extra complexity.

-A


^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2021-04-10  3:54 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-04-05 14:06 [gentoo-dev] [PATCH v2 1/3] autotools.eclass: eclassdoc, cosmetic changes, drop old EAPIs, configure.ac rename Sam James
2021-04-05 14:06 ` [gentoo-dev] [PATCH v2 2/3] gnuconfig.eclass: provide basic @ECLASS block, docs Sam James
2021-04-05 14:06 ` [gentoo-dev] [PATCH v2 3/3] gnuconfig.eclass: use BDEPEND, BROOT where available (drop support for EAPI <4) Sam James
2021-04-05 16:24   ` Ulrich Mueller
2021-04-06 19:32     ` Sam James
2021-04-07 11:06       ` Ulrich Mueller
2021-04-09 23:30         ` Sam James
2021-04-07 11:18       ` Michael Orlitzky
2021-04-07 11:30         ` Ulrich Mueller
2021-04-09 23:32         ` Sam James
2021-04-10  0:13           ` Michael Orlitzky
2021-04-10  0:19             ` Sam James
2021-04-10  3:54               ` Alec Warner

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox