[Buildroot] [PATCH 1/1] package/ecryptfs-utils: Add support without gettext

Vadim Kochan vadim4j at gmail.com
Thu Mar 14 01:10:58 UTC 2019


Hi Yann, All

On Wed, Mar 13, 2019 at 10:28:06PM +0100, Yann E. MORIN wrote:
> Vadim, All,
> 
> On 2019-03-13 21:15 +0200, Vadym Kochan spake thusly:
> > On Wed, Mar 13, 2019 at 07:53:50PM +0100, Yann E. MORIN wrote:
> > > On 2019-03-13 00:20 +0200, Vadim Kochan spake thusly:
> [--SNIP--]
> > > > +gettext() {
> > > > +	if [ -z "${GETTEXT_PROG}" ]; then
> > > > +		GETTEXT_PROG=$(which gettext)
> > > > +		if [ $? != 0 ]; then
> > > 
> > > != is a string comparison. For numbers, you will want to use -ne (or
> > > -eq), see below.
> > > 
> > > > +			GETTEXT_PROG=gettext_echo
> > > > +		fi
> > > > +	fi
> > > > +
> > > > +	${GETTEXT_PROG} "$@"
> > > > +}
> > > 
> > > This means that a script that calls gettext more than once will actually
> > > try to resolve it each time. This is not optimum.
> > 
> > But I check the GETTEXT_PROG variable on the start, if it is not empty then just:
> > 	${GETTEXT_PROG} "$@"
> 
> Hmm... Right, and the resolution is indeed done only once. My bad.
> 
> > > Instead, I think ecryptfs-common should basically look something like:
> > > 
> > >     if ! which gettext >/dev/null 2>&1; then
> > >         gettext() {
> > >             if [ -n "${GETTEXT}" ]; then
> > >                 # Weird construct so that script that are 'set -e'
> > >                 # fail at the call site of gettext and not here.
> > >                 "${GETTEXT}" "${@}" || return $?
> > >                 return 0
> > >             fi
> > >             while [ ${#} -ne 0 ]; do
> > >                 case "${1}" in
> > >                   (-h)              printf "no help\n"; return 0;;
> > >                   (-V)              printf "0.0.0\n"; return 0;;
> > >                   (-d|--domain)     shift 2;;
> > >                   (-d*|--domain=*)  shift 1;;
> > >                   (-e|-E|-n)        shift 1;;
> > >                   (-s)              shift 1;;  # Ignore?
> > >                   (-*)              printf "invalid option '%s'\n" "${1}" >&2; return 1;;
> > >                   (*)               break;;
> > >                 esac
> > >             done
> > >             case ${#} in
> > >               (0)   printf "missing arguments\n" >&2; return 1;;
> > >               (1)   printf "%s" "${1}";;
> > >               (2)   shift; printf "%s" "${2}";;
> > >               (*)   printf "too many arguments\n" >&2; return 1;;
> > >             esac
> > >         }
> > >     fi
> > > 
> > > I.e. if there is no gettext program, you define a function named
> > > gettext.
> 
> The difference then between your code and mine, is that yours is doing a
> lazy resolution (i.e. resolving at first call) while mine is doing an
> early resolution (i.e. resolving when parsing).
> 
> Additionally, since your code is using a two-level function call
> (gettext -> gettext_echo), it's a bit more complex to handle scritps
> that are 'set -e' and ensure they get the error at the call site rather
> than in internal details of the emulating function.
> 
> But my suggestion would be that we just provide a gettext wrapper script
> (not function) when gettext is not installed. This is much simpler
> because there is thus no need to patch upstream.
> 
Right, that would be much better solution than fixing ecryptfs-utils, but
this wrapper should be installed by something like gettext-tiny (this
is still the option if the ecryptfs-utils's solution will fail) for the
target.

> > Thanks for your comments, anyway conceptually this patch is wrong. I
> > tried to do it in the right way - install ecryptfs-common from
> > ecryptfs-utils in src/utils/Makefile.am, but faced with autoreconf issue
> > (autoreconf is required because src/utils/Makefile.am is changed by
> > patch which adds installation of ecryptfs-common), but autoreconf fails
> > to regenerate needed files because it removes aclocal.m4 which has
> > definition of AM_GLIB_GNU_GETTEXT macro (which is not defined by host-gettext
> 
> Dang, indeed it is a big hammer to add a dependency onto host-libglib2
> just for this oe macro, which by the way is deprecated, and that
> upstream suggests to remove in favour of the official gettext one:
> 
>     https://gitlab.gnome.org/GNOME/glib/blob/master/m4macros/glib-gettext.m4#L356
> .to:
>     https://gitlab.gnome.org/GNOME/glib/blob/master/m4macros/glib-gettext.m4#L437
> 
> That's a shame, as ecrypt-utils does noit even have a dependency on
> libglib2 at all, except for this one macro. :-(
> 
> So, that could probably be a hint to fix that upstream in a more
> reasonable fashion anyway?
> 
I am trying to re-do the patch to use AM_GNU_GETTEXT instead of
AM_GLIB_GNU_GETTEXT.

Regards,
Vadim Kochan



More information about the buildroot mailing list