mirror of
git://git.sv.gnu.org/autoconf
synced 2025-02-17 14:01:27 +08:00
Diagnose write errors in config.status instantiations.
* lib/autoconf/status.m4 (_AC_OUTPUT_FILE) (_AC_OUTPUT_HEADER, _AC_OUTPUT_MAIN_LOOP): Bail out on write errors. * tests/torture.at (AC_CONFIG_FILES, HEADERS, LINKS and COMMANDS): Extend test to also check for some write error failures, using... <AT_CHECK_CONFIG_CREATION_NOWRITE>: ...this new macro. Report by Bruno Haible.
This commit is contained in:
parent
c19717746b
commit
22000bf9f8
@ -1,5 +1,14 @@
|
||||
2007-11-16 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
|
||||
|
||||
Diagnose write errors in config.status instantiations.
|
||||
* lib/autoconf/status.m4 (_AC_OUTPUT_FILE)
|
||||
(_AC_OUTPUT_HEADER, _AC_OUTPUT_MAIN_LOOP): Bail out
|
||||
on write errors.
|
||||
* tests/torture.at (AC_CONFIG_FILES, HEADERS, LINKS and COMMANDS):
|
||||
Extend test to also check for some write error failures, using...
|
||||
<AT_CHECK_CONFIG_CREATION_NOWRITE>: ...this new macro.
|
||||
Report by Bruno Haible.
|
||||
|
||||
Indentation fixups.
|
||||
* lib/autotest/general.m4 (AT_INIT) <at_func_log_failure>: Fix
|
||||
indentation.
|
||||
|
@ -636,7 +636,8 @@ m4_foreach([_AC_Var], [srcdir, abs_srcdir, top_srcdir, abs_top_srcdir,
|
||||
])dnl
|
||||
m4_ifndef([AC_DATAROOTDIR_CHECKED], [$ac_datarootdir_hack
|
||||
])dnl
|
||||
" $ac_file_inputs m4_defn([_AC_SUBST_CMDS]) >$tmp/out
|
||||
" $ac_file_inputs m4_defn([_AC_SUBST_CMDS]) >$tmp/out \
|
||||
|| AC_MSG_ERROR([could not create $ac_file])
|
||||
|
||||
m4_ifndef([AC_DATAROOTDIR_CHECKED],
|
||||
[test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
|
||||
@ -648,9 +649,10 @@ which seems to be undefined. Please make sure it is defined.])
|
||||
|
||||
rm -f "$tmp/stdin"
|
||||
case $ac_file in
|
||||
-) cat "$tmp/out"; rm -f "$tmp/out";;
|
||||
*) rm -f "$ac_file"; mv "$tmp/out" $ac_file;;
|
||||
esac
|
||||
-) cat "$tmp/out" && rm -f "$tmp/out";;
|
||||
*) rm -f "$ac_file" && mv "$tmp/out" $ac_file;;
|
||||
esac \
|
||||
|| AC_MSG_ERROR([could not create $ac_file])
|
||||
dnl This would break Makefile dependencies:
|
||||
dnl if diff $ac_file "$tmp/out" >/dev/null 2>&1; then
|
||||
dnl echo "$ac_file is unchanged"
|
||||
@ -838,17 +840,22 @@ m4_define([_AC_OUTPUT_HEADER],
|
||||
# CONFIG_HEADER
|
||||
#
|
||||
if test x"$ac_file" != x-; then
|
||||
AS_ECHO(["/* $configure_input */"]) >"$tmp/config.h"
|
||||
$AWK -f "$tmp/defines.awk" $ac_file_inputs >>"$tmp/config.h"
|
||||
{
|
||||
AS_ECHO(["/* $configure_input */"]) \
|
||||
&& $AWK -f "$tmp/defines.awk" $ac_file_inputs
|
||||
} >"$tmp/config.h" \
|
||||
|| AC_MSG_ERROR([could not create $ac_file])
|
||||
if diff $ac_file "$tmp/config.h" >/dev/null 2>&1; then
|
||||
AC_MSG_NOTICE([$ac_file is unchanged])
|
||||
else
|
||||
rm -f $ac_file
|
||||
mv "$tmp/config.h" $ac_file
|
||||
mv "$tmp/config.h" $ac_file \
|
||||
|| AC_MSG_ERROR([could not create $ac_file])
|
||||
fi
|
||||
else
|
||||
AS_ECHO(["/* $configure_input */"])
|
||||
$AWK -f "$tmp/defines.awk" $ac_file_inputs
|
||||
AS_ECHO(["/* $configure_input */"]) \
|
||||
&& $AWK -f "$tmp/defines.awk" $ac_file_inputs \
|
||||
|| AC_MSG_ERROR([could not create -])
|
||||
fi
|
||||
dnl If running for Automake, be ready to perform additional
|
||||
dnl commands to set up the timestamp files.
|
||||
@ -1617,7 +1624,8 @@ do
|
||||
fi
|
||||
|
||||
case $ac_tag in
|
||||
*:-:* | *:-) cat >"$tmp/stdin";;
|
||||
*:-:* | *:-) cat >"$tmp/stdin" \
|
||||
|| AC_MSG_ERROR([could not create $ac_file]) ;;
|
||||
esac
|
||||
;;
|
||||
esac
|
||||
|
@ -193,6 +193,29 @@ AT_CHECK([grep OK var-$1], [], [OK
|
||||
])# AT_CHECK_CONFIG_CREATION
|
||||
|
||||
|
||||
# AT_CHECK_CONFIG_CREATION_NOWRITE(THING = (header | link | file | command))
|
||||
# ------------------------------------------------------------------
|
||||
# Check that THING and var-THING (which uses variables in AC_CONFIG_THING)
|
||||
# are properly created, with the right content.
|
||||
# Use `grep OK' instead of a simple `cat' to avoid banners such as in
|
||||
# AC_CONFIG_HEADERS.
|
||||
m4_define([AT_CHECK_CONFIG_CREATION_NOWRITE],
|
||||
[AT_CHECK_CONFIGURE([what_to_test=$1])
|
||||
AT_CHECK([ls header var-header file var-file command var-command link var-link 2>/dev/null],
|
||||
[ignore], [$1
|
||||
])
|
||||
AT_CHECK([grep OK $1], [], [OK
|
||||
])
|
||||
|
||||
AT_CHECK_CONFIGURE([what_to_test=var-$1 --no-create])
|
||||
# config.status might be stupidly expecting data on stdin, if it's
|
||||
# really broken...
|
||||
chmod a-w .
|
||||
AT_CHECK([./config.status var-$1 </dev/null], [1], [ignore], [ignore])
|
||||
chmod u+w .
|
||||
])# AT_CHECK_CONFIG_CREATION_NOWRITE
|
||||
|
||||
|
||||
# Create a file
|
||||
AT_CHECK_CONFIG_CREATION(file)
|
||||
|
||||
@ -205,6 +228,24 @@ AT_CHECK_CONFIG_CREATION(command)
|
||||
# Create a link
|
||||
AT_CHECK_CONFIG_CREATION(link)
|
||||
|
||||
# Now check for write errors
|
||||
|
||||
# Create a file
|
||||
AT_CHECK_CONFIG_CREATION_NOWRITE(file)
|
||||
AT_CHECK([./config.status --file=-:input </dev/null >/dev/full],
|
||||
[1], [ignore], [ignore])
|
||||
|
||||
# Create a header
|
||||
AT_CHECK_CONFIG_CREATION_NOWRITE(header)
|
||||
AT_CHECK([./config.status --header=-:input </dev/null >/dev/full],
|
||||
[1], [ignore], [ignore])
|
||||
|
||||
# Execute a command
|
||||
AT_CHECK_CONFIG_CREATION_NOWRITE(command)
|
||||
|
||||
# Create a link
|
||||
AT_CHECK_CONFIG_CREATION_NOWRITE(link)
|
||||
|
||||
AT_CLEANUP
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user