mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-02-18 10:57:34 +00:00
*** empty log message ***
This commit is contained in:
parent
92457a0bd8
commit
647847ea57
2 changed files with 251 additions and 3 deletions
|
|
@ -1,3 +1,7 @@
|
|||
2000-02-12 Dave Love <fx@gnu.org>
|
||||
|
||||
* configure.in: Use AC_FUNC_VFORK.
|
||||
|
||||
2000-02-01 Gerd Moellmann <gerd@gnu.org>
|
||||
|
||||
* make-dist: Various fixes for new development tree.
|
||||
|
|
|
|||
250
configure
vendored
250
configure
vendored
|
|
@ -1392,7 +1392,7 @@ case "${canonical}" in
|
|||
# so that, for instance, grepping for `free' in stdlib.h fails and
|
||||
# AC_HEADER_STD_C fails. (MIPSPro 7.2.1.2m compilers, Irix 6.5.3m).
|
||||
NON_GNU_CPP="/lib/cpp -D_LANGUAGE_C"
|
||||
NON_GCC_TEST_OPTIONS="-n32 -G0 -D_LANGUAGE_C"
|
||||
NON_GCC_TEST_OPTIONS="-n32 -D_LANGUAGE_C"
|
||||
;;
|
||||
mips-sgi-irix6* )
|
||||
machine=iris4d opsys=irix6-0
|
||||
|
|
@ -2733,7 +2733,7 @@ else
|
|||
int main() {
|
||||
|
||||
/* Ultrix mips cc rejects this. */
|
||||
typedef int charset[2]; const charset x;
|
||||
typedef int charset[2]; const charset x = {0,0};
|
||||
/* SunOS 4.1.1 cc rejects this. */
|
||||
char const *const *ccp;
|
||||
char **p;
|
||||
|
|
@ -4676,7 +4676,7 @@ else
|
|||
#include "confdefs.h"
|
||||
#include <alloca.h>
|
||||
int main() {
|
||||
char *p = alloca(2 * sizeof(int));
|
||||
void *p = alloca(2 * sizeof(int));
|
||||
; return 0; }
|
||||
EOF
|
||||
if { (eval echo configure:4683: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
||||
|
|
@ -6321,6 +6321,250 @@ else
|
|||
echo "$ac_t""no" 1>&6
|
||||
fi
|
||||
|
||||
echo $ac_n "checking for pid_t""... $ac_c" 1>&6
|
||||
echo "configure:6326: checking for pid_t" >&5
|
||||
if eval "test \"`echo '$''{'ac_cv_type_pid_t'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 6331 "configure"
|
||||
#include "confdefs.h"
|
||||
#include <sys/types.h>
|
||||
#if STDC_HEADERS
|
||||
#include <stdlib.h>
|
||||
#include <stddef.h>
|
||||
#endif
|
||||
EOF
|
||||
if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
|
||||
egrep "(^|[^a-zA-Z_0-9])pid_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then
|
||||
rm -rf conftest*
|
||||
ac_cv_type_pid_t=yes
|
||||
else
|
||||
rm -rf conftest*
|
||||
ac_cv_type_pid_t=no
|
||||
fi
|
||||
rm -f conftest*
|
||||
|
||||
fi
|
||||
echo "$ac_t""$ac_cv_type_pid_t" 1>&6
|
||||
if test $ac_cv_type_pid_t = no; then
|
||||
cat >> confdefs.h <<\EOF
|
||||
#define pid_t int
|
||||
EOF
|
||||
|
||||
fi
|
||||
|
||||
ac_safe=`echo "vfork.h" | sed 'y%./+-%__p_%'`
|
||||
echo $ac_n "checking for vfork.h""... $ac_c" 1>&6
|
||||
echo "configure:6360: checking for vfork.h" >&5
|
||||
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 6365 "configure"
|
||||
#include "confdefs.h"
|
||||
#include <vfork.h>
|
||||
EOF
|
||||
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
|
||||
{ (eval echo configure:6370: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
|
||||
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
|
||||
if test -z "$ac_err"; then
|
||||
rm -rf conftest*
|
||||
eval "ac_cv_header_$ac_safe=yes"
|
||||
else
|
||||
echo "$ac_err" >&5
|
||||
echo "configure: failed program was:" >&5
|
||||
cat conftest.$ac_ext >&5
|
||||
rm -rf conftest*
|
||||
eval "ac_cv_header_$ac_safe=no"
|
||||
fi
|
||||
rm -f conftest*
|
||||
fi
|
||||
if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
|
||||
echo "$ac_t""yes" 1>&6
|
||||
cat >> confdefs.h <<\EOF
|
||||
#define HAVE_VFORK_H 1
|
||||
EOF
|
||||
|
||||
else
|
||||
echo "$ac_t""no" 1>&6
|
||||
fi
|
||||
|
||||
echo $ac_n "checking for working vfork""... $ac_c" 1>&6
|
||||
echo "configure:6395: checking for working vfork" >&5
|
||||
if eval "test \"`echo '$''{'ac_cv_func_vfork_works'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
if test "$cross_compiling" = yes; then
|
||||
echo $ac_n "checking for vfork""... $ac_c" 1>&6
|
||||
echo "configure:6401: checking for vfork" >&5
|
||||
if eval "test \"`echo '$''{'ac_cv_func_vfork'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 6406 "configure"
|
||||
#include "confdefs.h"
|
||||
/* System header to define __stub macros and hopefully few prototypes,
|
||||
which can conflict with char vfork(); below. */
|
||||
#include <assert.h>
|
||||
/* Override any gcc2 internal prototype to avoid an error. */
|
||||
/* We use char because int might match the return type of a gcc2
|
||||
builtin and then its argument prototype would still apply. */
|
||||
char vfork();
|
||||
|
||||
int main() {
|
||||
|
||||
/* The GNU C library defines this for functions which it implements
|
||||
to always fail with ENOSYS. Some functions are actually named
|
||||
something starting with __ and the normal name is an alias. */
|
||||
#if defined (__stub_vfork) || defined (__stub___vfork)
|
||||
choke me
|
||||
#else
|
||||
vfork();
|
||||
#endif
|
||||
|
||||
; return 0; }
|
||||
EOF
|
||||
if { (eval echo configure:6429: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
||||
rm -rf conftest*
|
||||
eval "ac_cv_func_vfork=yes"
|
||||
else
|
||||
echo "configure: failed program was:" >&5
|
||||
cat conftest.$ac_ext >&5
|
||||
rm -rf conftest*
|
||||
eval "ac_cv_func_vfork=no"
|
||||
fi
|
||||
rm -f conftest*
|
||||
fi
|
||||
|
||||
if eval "test \"`echo '$ac_cv_func_'vfork`\" = yes"; then
|
||||
echo "$ac_t""yes" 1>&6
|
||||
:
|
||||
else
|
||||
echo "$ac_t""no" 1>&6
|
||||
fi
|
||||
|
||||
ac_cv_func_vfork_works=$ac_cv_func_vfork
|
||||
else
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 6451 "configure"
|
||||
#include "confdefs.h"
|
||||
/* Thanks to Paul Eggert for this test. */
|
||||
#include <stdio.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#ifdef HAVE_UNISTD_H
|
||||
#include <unistd.h>
|
||||
#endif
|
||||
#ifdef HAVE_VFORK_H
|
||||
#include <vfork.h>
|
||||
#endif
|
||||
/* On some sparc systems, changes by the child to local and incoming
|
||||
argument registers are propagated back to the parent.
|
||||
The compiler is told about this with #include <vfork.h>,
|
||||
but some compilers (e.g. gcc -O) don't grok <vfork.h>.
|
||||
Test for this by using a static variable whose address
|
||||
is put into a register that is clobbered by the vfork. */
|
||||
static
|
||||
#ifdef __cplusplus
|
||||
sparc_address_test (int arg)
|
||||
#else
|
||||
sparc_address_test (arg) int arg;
|
||||
#endif
|
||||
{
|
||||
static pid_t child;
|
||||
if (!child) {
|
||||
child = vfork ();
|
||||
if (child < 0) {
|
||||
perror ("vfork");
|
||||
_exit(2);
|
||||
}
|
||||
if (!child) {
|
||||
arg = getpid();
|
||||
write(-1, "", 0);
|
||||
_exit (arg);
|
||||
}
|
||||
}
|
||||
}
|
||||
main() {
|
||||
pid_t parent = getpid ();
|
||||
pid_t child;
|
||||
|
||||
sparc_address_test ();
|
||||
|
||||
child = vfork ();
|
||||
|
||||
if (child == 0) {
|
||||
/* Here is another test for sparc vfork register problems.
|
||||
This test uses lots of local variables, at least
|
||||
as many local variables as main has allocated so far
|
||||
including compiler temporaries. 4 locals are enough for
|
||||
gcc 1.40.3 on a Solaris 4.1.3 sparc, but we use 8 to be safe.
|
||||
A buggy compiler should reuse the register of parent
|
||||
for one of the local variables, since it will think that
|
||||
parent can't possibly be used any more in this routine.
|
||||
Assigning to the local variable will thus munge parent
|
||||
in the parent process. */
|
||||
pid_t
|
||||
p = getpid(), p1 = getpid(), p2 = getpid(), p3 = getpid(),
|
||||
p4 = getpid(), p5 = getpid(), p6 = getpid(), p7 = getpid();
|
||||
/* Convince the compiler that p..p7 are live; otherwise, it might
|
||||
use the same hardware register for all 8 local variables. */
|
||||
if (p != p1 || p != p2 || p != p3 || p != p4
|
||||
|| p != p5 || p != p6 || p != p7)
|
||||
_exit(1);
|
||||
|
||||
/* On some systems (e.g. IRIX 3.3),
|
||||
vfork doesn't separate parent from child file descriptors.
|
||||
If the child closes a descriptor before it execs or exits,
|
||||
this munges the parent's descriptor as well.
|
||||
Test for this by closing stdout in the child. */
|
||||
_exit(close(fileno(stdout)) != 0);
|
||||
} else {
|
||||
int status;
|
||||
struct stat st;
|
||||
|
||||
while (wait(&status) != child)
|
||||
;
|
||||
exit(
|
||||
/* Was there some problem with vforking? */
|
||||
child < 0
|
||||
|
||||
/* Did the child fail? (This shouldn't happen.) */
|
||||
|| status
|
||||
|
||||
/* Did the vfork/compiler bug occur? */
|
||||
|| parent != getpid()
|
||||
|
||||
/* Did the file descriptor bug occur? */
|
||||
|| fstat(fileno(stdout), &st) != 0
|
||||
);
|
||||
}
|
||||
}
|
||||
EOF
|
||||
if { (eval echo configure:6546: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
|
||||
then
|
||||
ac_cv_func_vfork_works=yes
|
||||
else
|
||||
echo "configure: failed program was:" >&5
|
||||
cat conftest.$ac_ext >&5
|
||||
rm -fr conftest*
|
||||
ac_cv_func_vfork_works=no
|
||||
fi
|
||||
rm -fr conftest*
|
||||
fi
|
||||
|
||||
fi
|
||||
|
||||
echo "$ac_t""$ac_cv_func_vfork_works" 1>&6
|
||||
if test $ac_cv_func_vfork_works = no; then
|
||||
cat >> confdefs.h <<\EOF
|
||||
#define vfork fork
|
||||
EOF
|
||||
|
||||
fi
|
||||
|
||||
|
||||
# Set up the CFLAGS for real compilation, so we can substitute it.
|
||||
CFLAGS="$REAL_CFLAGS"
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue