Gentoo Logo
Gentoo Spaceship




Note: Due to technical difficulties, the Archives are currently not up to date. GMANE provides an alternative service for most mailing lists.
c.f. bug 424647
List Archive: gentoo-dev
Navigation:
Lists: gentoo-dev: < Prev By Thread Next > < Prev By Date Next >
Headers:
To: gentoo-dev@g.o
From: Michał Górny <mgorny@g.o>
Subject: Re: [RFC] check-reqs.eclass.patch
Date: Tue, 30 Aug 2011 09:35:09 +0200
On Tue, 30 Aug 2011 09:11:40 +0200
Tomáš Chvátal <scarabeus@g.o> wrote:

> @@ -66,80 +52,234 @@
>  
>  # @ECLASS-VARIABLE: CHECKREQS_MEMORY
>  # @DESCRIPTION:
> -# How much RAM is needed in MB?
> +# @DEAULT_UNSET
> +# How much RAM is needed?

Typo. Also, shouldn't defaults go before @DESCRIPTION: ?

>  # @ECLASS-VARIABLE:  CHECKREQS_DISK_BUILD
>  # @DESCRIPTION:
> -# How much diskspace is needed to build the package? In MB
> +# @DEAULT_UNSET
> +# How much diskspace is needed to build the package?

Ditto.

>  # @ECLASS-VARIABLE: CHECKREQS_DISK_USR
>  # @DESCRIPTION:
> -# How much space in /usr is needed to install the package? In MB
> +# @DEAULT_UNSET
> +# How much space in /usr is needed to install the package?

Ditto.

>  # @ECLASS-VARIABLE: CHECKREQS_DISK_VAR
>  # @DESCRIPTION:
> -# How much space is needed in /var? In MB
> +# @DEAULT_UNSET
> +# How much space is needed in /var?

Ditto.

> +CHECKREQS_EXPORTED_FUNCTIONS="pkg_setup"
> +case "${EAPI:-0}" in
> +	0|1|2|3) ;;
> +	4) CHECKREQS_EXPORTED_FUNCTIONS="${EXPORTED_FUNCTIONS}
> pkg_pretend" ;;

Not the same var.

> +	*) die "EAPI=${EAPI} is not supported" ;;
> +esac

CHECKREQS_EXPORTED_FUNCTIONS is not used anywhere.

>  # @FUNCTION: check_reqs
>  # @DESCRIPTION:
> -# Checks the requirements given in the specific variables. If not
> reached, -# either prints a warning or dies.
> +# Obsolete function executing all the checks and priting out results
>  check_reqs() {
> -	[[ -n "${1}" ]] && die "Usage: check_reqs"
> +	debug-print-function ${FUNCNAME} "$@"
> +
> +	echo
> +	ewarn "QA: Package calling old ${FUNCNAME} function."
> +	ewarn "QA: Please file a bug against the package."
> +	ewarn "QA: It should call check-reqs_pkg_pretend and
> check-reqs_pkg_setup"
> +	ewarn "QA: and possibly use EAPI=4 or later."
> +	echo
> +
> +	check-reqs_pkg_setup "$@"
> +}
>  
> -	export CHECKREQS_NEED_SLEEP="" CHECKREQS_NEED_DIE=""
> -	if [[ "$CHECKREQS_ACTION" != "ignore" ]] ; then
> -		[[ -n "$CHECKREQS_MEMORY" ]] && check_build_memory
> -		[[ -n "$CHECKREQS_DISK_BUILD" ]] && check_build_disk
> \
> -			"${T}" "${CHECKREQS_DISK_BUILD}"
> -		[[ -n "$CHECKREQS_DISK_USR" ]] && check_build_disk \
> -			"${ROOT}/usr" "${CHECKREQS_DISK_USR}"
> -		[[ -n "$CHECKREQS_DISK_VAR" ]] && check_build_disk \
> -			"${ROOT}/var" "${CHECKREQS_DISK_VAR}"
> +# @FUNCTION: check-reqs_pkg_setup
> +# @DESCRIPTION:
> +# Exported function running the resources checks in pkg_setup phase.
> +# It should be run in both phases to ensure condition changes between
> +# pkg_pretend and pkg_setup won't affect the build.
> +check-reqs_pkg_setup() {
> +	debug-print-function ${FUNCNAME} "$@"
> +
> +	check-reqs_prepare
> +	check-reqs_run
> +	check-reqs_output
> +}
> +
> +# @FUNCTION: check-reqs_pkg_pretend
> +# @DESCRIPTION:
> +# Exported function running the resources checks in pkg_pretend
> phase. +check-reqs_pkg_pretend() {
> +	debug-print-function ${FUNCNAME} "$@"
> +
> +	check-reqs_pkg_setup "$@"
> +}
> +
> +# @FUNCTION: check-reqs_prepare
> +# @DESCRIPTION:
> +# Internal function that checks the variables that should be defined.
> +check-reqs_prepare() {
> +	debug-print-function ${FUNCNAME} "$@"
> +
> +	if [[ -z ${CHECKREQS_MEMORY} &&
> +			-z ${CHECKREQS_DISK_BUILD} &&
> +			-z ${CHECKREQS_DISK_USR} &&
> +			-z ${CHECKREQS_DISK_VAR} ]]; then
> +		eerror "Set some check-reqs eclass variables if you
> want to use it."
> +		eerror "If you are user and see this message fill a
> bug against the package."
> +		die "${FUNCNAME}: check-reqs eclass called but not
> actualy used!" fi
> +}
>  
> -	if [[ -n "${CHECKREQS_NEED_SLEEP}" ]] ; then
> -		echo
> -		ewarn "Bad things may happen! You may abort the
> build by pressing ctrl+c in"
> -		ewarn "the next 15 seconds."
> -		ewarn " "
> -		einfo "To make this kind of warning a fatal error,
> add a line to /etc/make.conf"
> -		einfo "setting CHECKREQS_ACTION=\"error\". To skip
> build requirements checking,"
> -		einfo "set CHECKREQS_ACTION=\"ignore\"."
> -		epause 15
> +# @FUNCTION: check-reqs_run
> +# @DESCRIPTION:
> +# Internal function that runs the check based on variable settings.
> +check-reqs_run() {
> +	debug-print-function ${FUNCNAME} "$@"
> +
> +	# some people are *censored*
> +	unset CHECKREQS_FAILED
> +
> +	[[ -n ${CHECKREQS_MEMORY} ]] && \
> +		check-reqs_memory \
> +			${CHECKREQS_MEMORY}
> +
> +	[[ -n ${CHECKREQS_DISK_BUILD} ]] && \
> +		check-reqs_disk \
> +			"${T}" \
> +			"${CHECKREQS_DISK_BUILD}"

Why not WORKDIR?

> +
> +	[[ -n ${CHECKREQS_DISK_USR} ]] && \
> +		check-reqs_disk \
> +			"${EROOT}/usr" \
> +			"${CHECKREQS_DISK_USR}"
> +
> +	[[ -n ${CHECKREQS_DISK_VAR} ]] && \
> +		check-reqs_disk \
> +			"${EROOT}/var" \
> +			"${CHECKREQS_DISK_VAR}"
> +}

Also, it may be a good idea to add some kind of generic var for this.
Like:

CHECKREQS_DISK_INSTALLED=( /usr 1234M /var 2345M )

> +# @FUNCTION: check-reqs_get_mesg

Typo.

> +# @DESCRIPTION:
> +# Internal function that returns number in megabites.
> +# Converts from 1G=1024 or 1T=1048576
> +check-reqs_get_megs() {
> +	debug-print-function ${FUNCNAME} "$@"
> +
> +	[[ -z ${1} ]] && die "Usage: ${FUNCNAME} [size]"
> +
> +	local unit=${1//[[:digit:]]/}
> +	local size=${1//[[:alpha:]]/}

Seems hacky and poor. What if one uses '1G234'? :P

> +
> +	if [[ ${unit//[[:alpha:]]/} != "" ]]; then
> +		die "${FUNCNAME}: Failed to determine units, garbage
> in variables"

Would that catch anything beside symbols? I guess it would catch '.' as
well.

> +	else
> +		# temporary workaround for empty units
> +		unit="M"
> +	fi
> +
> +	case ${unit} in
> +		[gG]) echo $((1024 * ${size})) ;;
> +		[mM]) echo ${size} ;;
> +		[tT]) echo $((1024 * 1024 * ${size})) ;;
> +		*)
> +			die "${FUNCNAME}: Unknown unit size: ${unit}"

size unit.

> +		;;
> +	esac
> +}
> +
> +# @FUNCTION: check-reqs_get_numbers

Why the plural?

> +# @DESCRIPTION:
> +# Internal function that returns number without the unit.
> +# Converts from 1G=1 or 150T=150.
> +check-reqs_get_numbers() {
> +	debug-print-function ${FUNCNAME} "$@"
> +
> +	[[ -z ${1} ]] && die "Usage: ${FUNCNAME} [size]"
> +
> +	local size=${1//[[:alpha:]]/}
> +
> +	# warn about un-united variables
> +	if [[ ${size} == ${1//[[:alpha:]]/} ]]; then
> +		ewarn "QA: Package does not specify unit for the
> size check"
> +		ewarn "QA: Assuming Megabytes."
> +		ewarn "QA: File bug against the package. It should
> specify it." fi
>  
> -	if [[ -n "${CHECKREQS_NEED_DIE}" ]] ; then
> -		eerror "Bailing out as specified by CHECKREQS_ACTION"
> -		die "Build requirements not met"
> +	if [[ ${size//[[:digit:]]/} == "" ]]; then
> +		echo ${size}
> +	else
> +		die "${FUNCNAME}: Failed to determine size, garbage
> in variables." fi
>  }

And at this point, I can't stand it anymore. Man, you've transformed
a bad eclass into almost-python.eclass. You should not post diffs when
they don't help with anything; and you should not rewrite eclasses like
that.

Start from scratch, write check-reqs-r1, make it SIMPLE.

-- 
Best regards,
Michał Górny
Attachment:
signature.asc (PGP signature)
Replies:
Re: [RFC] check-reqs.eclass.patch
-- Tomáš Chvátal
References:
[RFC] check-reqs.eclass.patch
-- Tomáš Chvátal
Navigation:
Lists: gentoo-dev: < Prev By Thread Next > < Prev By Date Next >
Previous by thread:
[RFC] check-reqs.eclass.patch
Next by thread:
Re: [RFC] check-reqs.eclass.patch
Previous by date:
Re: [RFC] office-ext.eclass
Next by date:
Re: [RFC] office-ext.eclass


Updated Jun 29, 2012

Summary: Archive of the gentoo-dev mailing list.

Donate to support our development efforts.

Copyright 2001-2013 Gentoo Foundation, Inc. Questions, Comments? Contact us.