Hi, I've been experimenting with modules that have files in subdirectories of lib/. gnulib-tool didn't handle this. With this patch, it nearly works - modulo an automake bug.
2006-11-05 Bruno Haible <[EMAIL PROTECTED]> * gnulib-tool (func_import, func_create_testdir): Create directories also for files in subdirectories of lib/. *** gnulib-20061026-modified/gnulib-tool 2006-10-27 00:15:23.000000000 +0200 --- gnulib-20061026/gnulib-tool 2006-11-05 23:16:01.000000000 +0100 *************** *** 1614,1665 **** func_append old_files " m4/gnulib-tool.m4" fi # Create directories. ! if test ! -d "$destdir/$sourcebase"; then ! if $doit; then ! echo "Creating directory $destdir/$sourcebase" ! mkdir "$destdir/$sourcebase" || func_fatal_error "failed" ! else ! echo "Create directory $destdir/$sourcebase" ! fi ! fi ! if test ! -d "$destdir/$m4base"; then ! if $doit; then ! echo "Creating directory $destdir/$m4base" ! mkdir "$destdir/$m4base" || func_fatal_error "failed" ! else ! echo "Create directory $destdir/$m4base" ! fi ! fi ! docfiles=`echo "$files" | sed -n -e 's,^doc/,,p'` ! if test -n "$docfiles"; then ! if test ! -d "$destdir/$docbase"; then ! if $doit; then ! echo "Creating directory $destdir/$docbase" ! mkdir "$destdir/$docbase" || func_fatal_error "failed" ! else ! echo "Create directory $destdir/$docbase" ! fi ! fi ! fi ! if test -n "$inctests"; then ! if test ! -d "$destdir/$testsbase"; then ! if $doit; then ! echo "Creating directory $destdir/$testsbase" ! mkdir "$destdir/$testsbase" || func_fatal_error "failed" ! else ! echo "Create directory $destdir/$testsbase" fi ! fi ! fi ! if test ! -d "$destdir/$auxdir"; then ! if $doit; then ! echo "Creating directory $destdir/$auxdir" ! mkdir "$destdir/$auxdir" || func_fatal_error "failed" ! else ! echo "Create directory $destdir/$auxdir" ! fi ! fi # func_dest_tmpfilename file # determines the name of a temporary file (file is relative to destdir). --- 1614,1663 ---- 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/," + sed_rewrite_new_files="\ + s,^build-aux/,$auxdir/, + s,^doc/,$docbase/, + s,^lib/,$sourcebase/, + s,^m4/,$m4base/, + s,^tests/,$testsbase/," + # Create directories. ! { echo "$sourcebase" ! echo "$m4base" ! docfiles=`echo "$files" | sed -n -e 's,^doc/,,p'` ! if test -n "$docfiles"; then ! echo "$docbase" ! fi ! if test -n "$inctests"; then ! echo "$testsbase" ! fi ! echo "$auxdir" ! for f in $files; do echo $f; done \ ! | sed -e "$sed_rewrite_new_files" \ ! | sed -n -e 's,^\(.*\)/[^/]*,\1,p' \ ! | LC_ALL=C sort -u ! } > "$tmp"/dirs ! { # Rearrange file descriptors. Needed because "while ... done < ..." ! # constructs are executed in a subshell e.g. by Solaris 10 /bin/sh. ! exec 5<&0 < "$tmp"/dirs ! while read d; do ! if test ! -d "$destdir/$d"; then ! if $doit; then ! echo "Creating directory $destdir/$d" ! mkdir -p "$destdir/$d" || func_fatal_error "failed" ! else ! echo "Create directory $destdir/$d" ! fi fi ! done ! exec 0<&5 5<&- ! } # func_dest_tmpfilename file # determines the name of a temporary file (file is relative to destdir). *************** *** 1680,1697 **** # Copy files or make symbolic links. Remove obsolete files. delimiter=' ' - sed_rewrite_old_files="\ - s,^build-aux/,$auxdir/, - s,^doc/,$cached_docbase/, - s,^lib/,$cached_sourcebase/, - s,^m4/,$cached_m4base/, - s,^tests/,$cached_testsbase/," - sed_rewrite_new_files="\ - s,^build-aux/,$auxdir/, - s,^doc/,$docbase/, - s,^lib/,$sourcebase/, - s,^m4/,$m4base/, - s,^tests/,$testsbase/," # Construct a table with 2 columns: rewritten-file-name original-file-name, # representing the files according to the last gnulib-tool invocation. for f in $old_files; do echo $f; done \ --- 1678,1683 ---- *************** *** 2185,2210 **** echo "File list:" echo "$files" | sed -e 's/^/ /' - # Create directories. - for d in `echo "$files" | sed -n -e 's,^\(.*\)/[^/]*,\1,p'`; do - case "$d" in - build-aux) mkdir -p "$testdir/$auxdir" ;; - doc) mkdir -p "$testdir/$docbase" ;; - lib) mkdir -p "$testdir/$sourcebase" ;; - m4) mkdir -p "$testdir/$m4base" ;; - tests) mkdir -p "$testdir/$testsbase" ;; - *) mkdir -p "$testdir/$d" ;; - esac - done - - # Copy files or make symbolic links. - delimiter=' ' sed_rewrite_files="\ s,^build-aux/,$auxdir/, s,^doc/,$docbase/, s,^lib/,$sourcebase/, s,^m4/,$m4base/, s,^tests/,$testsbase/," for f in $files; do echo $f; done \ | sed -e "s,^.*\$,&$delimiter&," -e "$sed_rewrite_files" \ | LC_ALL=C sort \ --- 2185,2214 ---- echo "File list:" echo "$files" | sed -e 's/^/ /' sed_rewrite_files="\ s,^build-aux/,$auxdir/, s,^doc/,$docbase/, s,^lib/,$sourcebase/, s,^m4/,$m4base/, s,^tests/,$testsbase/," + + # Create directories. + for f in $files; do echo $f; done \ + | sed -e "$sed_rewrite_files" \ + | sed -n -e 's,^\(.*\)/[^/]*,\1,p' \ + | LC_ALL=C sort -u \ + > "$tmp"/dirs + { # Rearrange file descriptors. Needed because "while ... done < ..." + # constructs are executed in a subshell e.g. by Solaris 10 /bin/sh. + exec 5<&0 < "$tmp"/dirs + while read d; do + mkdir -p "$testdir/$d" + done + exec 0<&5 5<&- + } + + # Copy files or make symbolic links. + delimiter=' ' for f in $files; do echo $f; done \ | sed -e "s,^.*\$,&$delimiter&," -e "$sed_rewrite_files" \ | LC_ALL=C sort \