sabotage-linux / gettext-tiny

stub and/or lightweight replacements of the gnu gettext suite; because the GNU one takes ages to compile
http://ftp.barfooze.de/pub/sabotage/tarballs/
Other
63 stars 15 forks source link

`autopoint` doesn't handle unquoted aux dirs correctly #61

Open awilfox opened 1 year ago

awilfox commented 1 year ago

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.

xhebox commented 1 year ago

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

Elizafox commented 1 year ago

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.

rofl0r commented 1 year ago

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

trushworth commented 1 year ago

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.