gettext-tiny icon indicating copy to clipboard operation
gettext-tiny copied to clipboard

`autopoint` doesn't handle unquoted aux dirs correctly

Open awilfox opened this issue 2 years ago • 4 comments

Elizafox/tre-regex-sys#1 has led me to a curious thing:

AC_CONFIG_AUX_DIR(utils)

will break gettext-tiny's autopoint:

awilcox on gwyn ~/Code/contrib/tre-regex-sys/tre % find . -name config.rpath
./AC_CONFIG_AUX_DIR(utils)/config.rpath

because it doesn't have the bracket quotes that autopoint is expecting:

  if [ "${line##*AC_CONFIG_AUX_DIR}" != "$line" ]; then
    dirprefix="${line##*([}"
    dirprefix="${dirprefix%%])*}"
    mkdir -p "${dirprefix}"
  fi

Trying to see if we can find an easy fix.

awilfox avatar Jun 15 '23 05:06 awilfox

If we can do something like dirname $line? But that depends on coreutils.

xhebox avatar Jun 15 '23 05:06 xhebox

If we can do something like dirname $line? But that depends on coreutils.

dirname is POSIX, but:

elizabeth@ember:~ % dirname "AC_CONFIG_AUX_DIR(utils)"
.

That won't work.

The best thing to do imo is use sed:

dirprefix="$(echo "$line" | sed -E 's#\[|\]##g;s#.*\((.*)\)#\1#')"

Example:

elizabeth@ember:~ % echo "AC_CONFIG_AUX_DIR([utils])" | sed -E 's#\[|\]##g;s#.*\((.*)\)#\1#'
utils

The reason for the two regexes is that for some reason I cannot fathom, [^\]\)] does not work in a capturing group, so they have to be stripped first. You could do:

dirprefix="$(echo "$line" | sed -E 's#\[|\]##g)"
dirprefix="${dirprefix##*(}"
dirprefix="${dirprefix%%)*}"

Or some such, but I see little to no benefit.

Elizafox avatar Jun 15 '23 22:06 Elizafox

or pipe through awk, which is probably way less cryptic to the reader. anyone working on a patch ?

rofl0r avatar Jun 16 '23 08:06 rofl0r

awilfox's suggested one-line fix:

The fix is pretty simple: replace AC_CONFIG_AUX_DIR(utils) with AC_CONFIG_AUX_DIR([utils]) in configure.ac.

has been commited to laurikari/tre if you want to use the latest.

trushworth avatar Jun 18 '23 23:06 trushworth