Eric Blake wrote: > According to Jim Meyering on 1/14/2010 1:08 AM: >> Think of a set-up function that (when $EXEEXT is nonempty) >> iterates through the *.$EXEEXT executables in a specified directory... >> >> create_exe_shim_functions () >> { >> case $EXEEXT in >> '') return 0 ;; >> .exe) ;; >> *) echo "$0: unexpected value of $EXEEXT" 1>&2; return 1 ;; >> esac > > So we still have to pass EXEEXT through TESTS_ENVIRONMENT in > modules/*-tests for any test that uses a .sh file. But other than that, > all of our tests-*.sh no longer need to worry about EXEEXT, once they've > been converted to use init.sh. I like it. > > Or go one step further, do the search for *.exe without regards to > $EXEEXT, skipping this case block, and simplifying modules/*-tests.
I like the idea of not having to modify all modules/*-tests, but have two reservations: - I like having no shim-eval overhead when $EXEEXT is empty. - What if a script were to run something named foo.exe _in unix land_? Then if there is also a "foo" executable in that directory, it would mistakenly run "foo" via our shim that creates a foo.exe *function*. An alternative would be to make gnulib-tool always add EXEEXT. >> # Remove the .$EXEEXT suffix. >> base=${file%.$EXEEXT} > > This is not portable to Solaris /bin/sh. Unless we take the same measures > as coreutils to ensure a (mostly) POSIX-compliant shell, I think we are > better off using only features supported by common /bin/sh. Good point. Not worth it. base=$(echo "$file" | sed "s/$EXEEXT//")