Ralf Wildenhues wrote: > > > sed_rewrite_old_files="\ > > > + s,^lib/,$cached_sourcebase/, > > > s,^build-aux/,$auxdir/, > > > s,^doc/,$cached_docbase/, > > > - s,^lib/,$cached_sourcebase/, > > > s,^m4/,$cached_m4base/, > > > s,^tests/,$cached_testsbase/, > > > s,^tests=lib/,$cached_testsbase/, > > > s,^top/,," > > > > This patch looks like a nop. ... > > I think Simon meant that if, say, $auxdir matches "^lib/", then the > order of the substitutions is relevant.
Ah! Thanks for explaining again. Simon, sorry for not understanding immediately. > One way to avoid potential ordering issues is to use a construct like this: > t clear > :clear > s,^build-aux/,quuxl$auxdir/, > s,^lib/,quuxl$cached_sourcebase/, > ... > t fixup > b > :fixup > s,^quuxl,, The same thing will also work without the conditional branches. I'm applying this: 2009-05-10 Bruno Haible <br...@clisp.org> * gnulib-tool (func_import, func_create_testdir, copy-file): Change sed_rewrite_old_files, sed_rewrite_new_files, sed_rewrite_files so that it rewrites every file name only once. Reported by Simon Josefsson. Helped by Ralf Wildenhues. *** gnulib-tool.orig 2009-05-10 15:20:20.000000000 +0200 --- gnulib-tool 2009-05-10 15:18:41.000000000 +0200 *************** *** 2917,2938 **** func_append old_files " m4/gnulib-tool.m4" fi sed_rewrite_old_files="\ ! s,^build-aux/,$auxdir/, ! s,^doc/,$cached_docbase/, ! s,^lib/,$cached_sourcebase/, ! s,^m4/,$cached_m4base/, ! s,^tests/,$cached_testsbase/, ! s,^tests=lib/,$cached_testsbase/, ! s,^top/,," sed_rewrite_new_files="\ ! s,^build-aux/,$auxdir/, ! s,^doc/,$docbase/, ! s,^lib/,$sourcebase/, ! s,^m4/,$m4base/, ! s,^tests/,$testsbase/, ! s,^tests=lib/,$testsbase/, ! s,^top/,," # Create directories. { echo "$sourcebase" --- 2917,2941 ---- func_append old_files " m4/gnulib-tool.m4" fi + rewritten='%REWRITTEN%' sed_rewrite_old_files="\ ! s,^build-aux/,$rewritten$auxdir/, ! s,^doc/,$rewritten$cached_docbase/, ! s,^lib/,$rewritten$cached_sourcebase/, ! s,^m4/,$rewritten$cached_m4base/, ! s,^tests/,$rewritten$cached_testsbase/, ! s,^tests=lib/,$rewritten$cached_testsbase/, ! s,^top/,$rewritten, ! s,^$rewritten,," sed_rewrite_new_files="\ ! s,^build-aux/,$rewritten$auxdir/, ! s,^doc/,$rewritten$docbase/, ! s,^lib/,$rewritten$sourcebase/, ! s,^m4/,$rewritten$m4base/, ! s,^tests/,$rewritten$testsbase/, ! s,^tests=lib/,$rewritten$testsbase/, ! s,^top/,$rewritten, ! s,^$rewritten,," # Create directories. { echo "$sourcebase" *************** *** 3883,3895 **** echo "$files" | sed -e 's/^/ /' fi sed_rewrite_files="\ ! s,^build-aux/,$auxdir/, ! s,^doc/,$docbase/, ! s,^lib/,$sourcebase/, ! s,^m4/,$m4base/, ! s,^tests/,$testsbase/, ! s,^top/,," # Create directories. for f in $files; do echo $f; done \ --- 3886,3900 ---- echo "$files" | sed -e 's/^/ /' fi + rewritten='%REWRITTEN%' sed_rewrite_files="\ ! s,^build-aux/,$rewritten$auxdir/, ! s,^doc/,$rewritten$docbase/, ! s,^lib/,$rewritten$sourcebase/, ! s,^m4/,$rewritten$m4base/, ! s,^tests/,$rewritten$testsbase/, ! s,^top/,$rewritten, ! s,^$rewritten,," # Create directories. for f in $files; do echo $f; done \ *************** *** 4715,4727 **** test -n "$docbase" || docbase="doc" test -n "$testsbase" || testsbase="tests" test -n "$auxdir" || auxdir="build-aux" sed_rewrite_files="\ ! s,^build-aux/,$auxdir/, ! s,^doc/,$docbase/, ! s,^lib/,$sourcebase/, ! s,^m4/,$m4base/, ! s,^tests/,$testsbase/, ! s,^top/,," if test -d "$dest"; then destdir="$dest" g=`echo "$f" | sed -e "$sed_rewrite_files"` --- 4720,4734 ---- test -n "$docbase" || docbase="doc" test -n "$testsbase" || testsbase="tests" test -n "$auxdir" || auxdir="build-aux" + rewritten='%REWRITTEN%' sed_rewrite_files="\ ! s,^build-aux/,$rewritten$auxdir/, ! s,^doc/,$rewritten$docbase/, ! s,^lib/,$rewritten$sourcebase/, ! s,^m4/,$rewritten$m4base/, ! s,^tests/,$rewritten$testsbase/, ! s,^top/,$rewritten, ! s,^$rewritten,," if test -d "$dest"; then destdir="$dest" g=`echo "$f" | sed -e "$sed_rewrite_files"`