2009-09-15 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+ Work around DJGPP shell function return bug with command substitutions.
+ DJGPP bash 2.04 has a bug in that `return $ac_retval' done in a
+ shell function which also contains a command substitution causes
+ the shell to barf. For more details and a fix see:
+ <http://www.delorie.com/djgpp/mail-archives/browse.cgi?p=djgpp-workers/2009/09/09/03:35:08>
+ Possible workaround include putting the `return' in a subshell
+ or calling another function to set the status.
+ * lib/autoconf/general.m4 (_AC_PREPROC_IFELSE_BODY)
+ (_AC_COMPILE_IFELSE_BODY, _AC_LINK_IFELSE_BODY)
+ (_AC_RUN_IFELSE_BODY, _AC_COMPUTE_INT_BODY): Use AS_SET_STATUS
+ instead of `return'.
+ * doc/autoconf.texi (Common Shell Constructs, Shell Functions):
+ Document the issue.
+ * THANKS: Update.
+ Report by Rugxulo and Reuben Thomas.
+
DJGPP fix: Do not redirect standard input in configure scripts.
* lib/autoconf/general.m4 (_AC_INIT_DEFAULTS): If $DJGPP is
nonempty, do not dup fd 0 to AS_ORIGINAL_STDIN_FD, do not close
Rolf Vandevaart Rolf.Vandevaart@sun.com
Romain Lenglet romain.lenglet@laposte.net
Ruediger Kuhlmann info@ruediger-kuhlmann.de
+Rugxulo rugxulo@gmail.com
Ruslan Babayev ruslan@babayev.com
Russ Allbery rra@stanford.edu
Russ Boylan ross@biostat.ucsf.edu
Emit shell code to set the value of @samp{$?} to @var{status}, as
efficiently as possible. However, this is not guaranteed to abort a
shell running with @code{set -e} (@pxref{set, , Limitations of Shell
-Builtins}).
+Builtins}). This should also be used at the end of a complex shell
+function instead of @samp{return} (@pxref{Shell Functions}) to avoid
+a @acronym{DJGPP} shell bug.
@end defmac
@defmac AS_TR_CPP (@var{expression})
2
@end example
+@acronym{DJGPP} bash 2.04 has a bug in that @command{return} from a
+shell function which also used a command substitution causes a
+segmentation fault. To work around the issue, you can use
+@command{return} from a subshell, or @samp{AS_SET_STATUS} as last command
+in the execution flow of the function (@pxref{Common Shell Constructs}).
+
Not all shells treat shell functions as simple commands impacted by
@samp{set -e}, for example with Solaris 10 @command{bin/sh}:
[_AC_MSG_LOG_CONFTEST
ac_retval=1])
AS_LINENO_POP
- return $ac_retval
+ AS_SET_STATUS([$ac_retval])
])# _AC_PREPROC_IFELSE_BODY
[_AC_MSG_LOG_CONFTEST
ac_retval=1])
AS_LINENO_POP
- return $ac_retval
+ AS_SET_STATUS([$ac_retval])
])# _AC_COMPILE_IFELSE_BODY
# left behind by Apple's compiler. We do this before executing the actions.
rm -rf conftest.dSYM conftest_ipa8_conftest.oo
AS_LINENO_POP
- return $ac_retval
+ AS_SET_STATUS([$ac_retval])
])# _AC_LINK_IFELSE_BODY
ac_retval=$ac_status])
rm -rf conftest.dSYM conftest_ipa8_conftest.oo
AS_LINENO_POP
- return $ac_retval
+ AS_SET_STATUS([$ac_retval])
])# _AC_RUN_IFELSE_BODY
[ac_retval=0], [ac_retval=1])
fi
AS_LINENO_POP
- return $ac_retval
+ AS_SET_STATUS([$ac_retval])
])# _AC_COMPUTE_INT_BODY
# AC_COMPUTE_INT(VARIABLE, EXPRESSION, PROLOGUE, [IF-FAILS])