autoconf-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: _AC_PROG_CXX_EXIT_DECLARATION incomplete for Microsoft tools


From: Paul Eggert
Subject: Re: _AC_PROG_CXX_EXIT_DECLARATION incomplete for Microsoft tools
Date: Sun, 02 Apr 2006 20:21:20 -0700
User-agent: Gnus/5.1007 (Gnus v5.10.7) Emacs/21.4 (gnu/linux)

Manish Singh <address@hidden> writes:

>     'extern "C" __declspec(noreturn) void __cdecl exit (int);'
>
> I'm attaching a patch that attempts to cover possible variants that one

That way lies madness.  I don't want Autoconf to track every
nonstandard feature of Microsoft's compilers.

Instead, let's rework the code so that it doesn't need to declare
'exit' at all.  I installed this patch.

2006-04-02  Paul Eggert  <address@hidden>

        * NEWS: AC_PROG_CC and AC_PROG_CXX no longer declare 'exit'.
        * doc/autoconf.texi (Function Portability): Mention that C++
        has trouble with 'exit'.
        (Guidelines): Test programs shouldn't use 'exit'.
        * lib/autoconf/c.m4 (_AC_PROG_CXX_EXIT_DECLARATION):
        Remove; all uses removed.
        (AC_LANG_INT_SAVE(C), AC_C_BIGENDIAN):
        Return from 'main' instead of calling 'exit'.
        * lib/autoconf/functions.m4 (_AC_LIBOBJ_ALLOCA, AC_FUNC_CLOSEDIR_VOID):
        (_AC_FUNC_FNMATCH_IF, AC_FUNC_GETGROUPS):
        (AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK, _AC_FUNC_MALLOC_IF):
        (AC_FUNC_MEMCMP, AC_FUNC_MKTIME, AC_FUNC_MMAP, _AC_FUNC_REALLOC_IF):
        (AC_FUNC_SETPGRP, _AC_FUNC_STAT, AC_FUNC_STRTOD, AC_FUNC_STRERROR_R):
        (AC_FUNC_STRNLEN, AC_FUNC_SETVBUF_REVERSED, AC_FUNC_UTIME_NULL):
        (_AC_FUNC_FORK, _AC_FUNC_VFORK, AC_FUNC_WAIT3): Likewise.
        * lib/autoconf/headers.m4 (AC_HEADER_STDC): Likewise.
        * lib/autoconf/specific.m4 (AC_SYS_RESTARTABLE_SYSCALLS): Likewise.
        * lib/autoconf/types.m4 (AC_TYPE_GETGROUPS): Likewise.
        * tests/compile.at: Likewsie.

Index: NEWS
===================================================================
RCS file: /cvsroot/autoconf/autoconf/NEWS,v
retrieving revision 1.354
diff -p -u -r1.354 NEWS
--- NEWS        20 Mar 2006 20:28:56 -0000      1.354
+++ NEWS        3 Apr 2006 03:18:00 -0000
@@ -39,6 +39,13 @@
   Now checks for X11/Xlib.h and XrmInitialize (X proper) rather than
   X11/Intrinsic.h and XtMalloc (Xt).
 
+** AC_PROG_CC, AC_PROG_CXX
+  No longer automatically arrange to declare the 'exit' function of C,
+  when a C++ compiler is used.  Standard Autoconf macros no longer use
+  'exit', so this is no longer an issue for them.  If you use C++, and
+  want to call 'exit', you'll have to arrange for its declaration
+  yourself.  But we now suggest you return from 'main' instead.
+
 ** AC_PROG_CC_C89, AC_PROG_CC_C99
   New macros for ISO C99 support.  AC_PROG_CC_C89 and AC_PROG_CC_C99
   check for ANSI C89 and ISO C99 support respectively.
Index: doc/autoconf.texi
===================================================================
RCS file: /cvsroot/autoconf/autoconf/doc/autoconf.texi,v
retrieving revision 1.980
diff -p -u -r1.980 autoconf.texi
--- doc/autoconf.texi   2 Apr 2006 15:00:41 -0000       1.980
+++ doc/autoconf.texi   3 Apr 2006 03:18:01 -0000
@@ -3838,10 +3838,15 @@ additions.  Please help us keeping it as
 @item @code{exit}
 @c @fuindex exit
 @prindex @code{exit}
-Did you know that, on some older hosts, @code{exit} returns @code{int}?
+On ancient hosts, @code{exit} returned @code{int}.
 This is because @code{exit} predates @code{void}, and there was a long
 tradition of it returning @code{int}.
 
+On more-modern hosts, the problem more likely is that @code{exit} is not
+declared, due to C++ problems of some sort or another.  For this reason
+we suggest that test programs not invoke @code{exit}, but return from
address@hidden instead.
+
 @item @code{free}
 @c @fuindex free
 @prindex @code{free}
@@ -6599,7 +6604,7 @@ environment variable) on a trivial @file
 will disable this method.
 
 If this method fails to find the X Window System, @command{configure}
-will look for the files in several directories where they often reside. 
+will look for the files in several directories where they often reside.
 If either method is successful, set the shell variables
 @code{x_includes} and @code{x_libraries} to their locations, unless they
 are in directories the compiler searches by default.
@@ -7002,9 +7007,9 @@ Test programs should not write anything 
 should return 0 if the test succeeds, nonzero otherwise, so that success
 can be distinguished easily from a core dump or other failure;
 segmentation violations and other failures produce a nonzero exit
-status.  Test programs should @code{exit}, not @code{return}, from
address@hidden, because on some systems (old Suns, at least) the argument
-to @code{return} in @code{main} is ignored.
+status.  Test programs should @code{return}, not @code{exit}, from
address@hidden, because on some systems (notably C++ compilers masquerading
+as C compilers) @code{exit} is not declared.
 
 Test programs can use @code{#if} or @code{#ifdef} to check the values of
 preprocessor macros defined by tests that have already run.  For
Index: lib/autoconf/c.m4
===================================================================
RCS file: /cvsroot/autoconf/autoconf/lib/autoconf/c.m4,v
retrieving revision 1.216
diff -p -u -r1.216 c.m4
--- lib/autoconf/c.m4   2 Apr 2006 16:38:54 -0000       1.216
+++ lib/autoconf/c.m4   3 Apr 2006 03:18:01 -0000
@@ -278,22 +278,22 @@ static unsigned long int ulongval () { r
 [
   FILE *f = fopen ("conftest.val", "w");
   if (! f)
-    exit (1);
+    return 1;
   if (($2) < 0)
     {
       long int i = longval ();
       if (i != ($2))
-       exit (1);
+       return 1;
       fprintf (f, "%ld\n", i);
     }
   else
     {
       unsigned long int i = ulongval ();
       if (i != ($2))
-       exit (1);
+       return 1;
       fprintf (f, "%lu\n", i);
     }
-  exit (ferror (f) || fclose (f) != 0);
+  return ferror (f) || fclose (f) != 0;
 ])])
 
 
@@ -552,14 +552,6 @@ _AC_LANG_COMPILER_GNU
 GCC=`test $ac_compiler_gnu = yes && echo yes`
 _AC_PROG_CC_G
 _AC_PROG_CC_C89
-# Some people use a C++ compiler to compile C.  Since we use `exit',
-# in C++ we need to declare it.  In case someone uses the same compiler
-# for both compiling C and C++ we need to have the C++ compiler decide
-# the declaration of exit, since it's the most demanding environment.
-_AC_COMPILE_IFELSE(address@hidden:@ifndef __cplusplus
-  choke me
address@hidden:@endif],
-                  [_AC_PROG_CXX_EXIT_DECLARATION])
 AC_LANG_POP(C)dnl
 ])# AC_PROG_CC
 
@@ -786,7 +778,6 @@ _AC_COMPILER_EXEEXT
 _AC_LANG_COMPILER_GNU
 GXX=`test $ac_compiler_gnu = yes && echo yes`
 _AC_PROG_CXX_G
-_AC_PROG_CXX_EXIT_DECLARATION
 AC_LANG_POP(C++)dnl
 ])# AC_PROG_CXX
 
@@ -833,43 +824,6 @@ fi[]dnl
 ])# _AC_PROG_CXX_G
 
 
-# _AC_PROG_CXX_EXIT_DECLARATION
-# -----------------------------
-# If <stdlib.h> doesn't already provide a valid prototype for exit,
-# determine the appropriate prototype and put it in confdefs.h.
-# This macro is run only when testing a C++ compiler, but it generates
-# a prototype that is also appropriate for C compilers in order to
-# support a mixed C/C++ configuration environment.
-# We don't need to worry about this for C, since we include <stdlib.h>
-# if it is available, and that method works for all C compilers.
-m4_define([_AC_PROG_CXX_EXIT_DECLARATION],
-[for ac_declaration in \
-   '' \
-   'extern "C" void std::exit (int) throw (); using std::exit;' \
-   'extern "C" void std::exit (int); using std::exit;' \
-   'extern "C" void exit (int) throw ();' \
-   'extern "C" void exit (int);' \
-   'extern "C" __declspec(dllimport) void exit (int);' \
-   'void exit (int);'
-do
-  _AC_COMPILE_IFELSE([AC_LANG_PROGRAM([$ac_declaration
address@hidden:@include <stdlib.h>],
-                                     [exit (42);])],
-                    [],
-                    [continue])
-  _AC_COMPILE_IFELSE([AC_LANG_PROGRAM([$ac_declaration],
-                                     [exit (42);])],
-                    [break])
-done
-rm -f conftest*
-if test -n "$ac_declaration"; then
-  echo '#ifdef __cplusplus' >>confdefs.h
-  echo $ac_declaration      >>confdefs.h
-  echo '#endif'             >>confdefs.h
-fi
-])# _AC_PROG_CXX_EXIT_DECLARATION
-
-
 # ------------------------------ #
 # 3d. The Objective C compiler.  #
 # ------------------------------ #
@@ -1381,7 +1335,7 @@ AC_RUN_IFELSE(
     char c[sizeof (long int)];
   } u;
   u.l = 1;
-  exit (u.c[sizeof (long int) - 1] == 1);
+  return u.c[sizeof (long int) - 1] == 1;
 ]])],
              [ac_cv_c_bigendian=no],
              [ac_cv_c_bigendian=yes],
Index: lib/autoconf/functions.m4
===================================================================
RCS file: /cvsroot/autoconf/autoconf/lib/autoconf/functions.m4,v
retrieving revision 1.96
diff -p -u -r1.96 functions.m4
--- lib/autoconf/functions.m4   3 Mar 2006 20:41:40 -0000       1.96
+++ lib/autoconf/functions.m4   3 Apr 2006 03:18:01 -0000
@@ -298,7 +298,7 @@ find_stack_direction ()
 int
 main ()
 {
-  exit (find_stack_direction () < 0);
+  return find_stack_direction () < 0;
 }])],
               [ac_cv_c_stack_direction=1],
               [ac_cv_c_stack_direction=-1],
@@ -389,15 +389,14 @@ AC_CACHE_CHECK([for working chown], ac_c
   struct stat before, after;
 
   if (creat (f, 0600) < 0)
-    exit (1);
+    return 1;
   if (stat (f, &before) < 0)
-    exit (1);
+    return 1;
   if (chown (f, (uid_t) -1, (gid_t) -1) == -1)
-    exit (1);
+    return 1;
   if (stat (f, &after) < 0)
-    exit (1);
-  exit ((before.st_uid == after.st_uid
-        && before.st_gid == after.st_gid) ? 0 : 1);
+    return 1;
+  return ! (before.st_uid == after.st_uid && before.st_gid == after.st_gid);
 ]])],
               [ac_cv_func_chown_works=yes],
               [ac_cv_func_chown_works=no],
@@ -426,7 +425,7 @@ AC_CACHE_CHECK([whether closedir returns
 int closedir ();
 #endif
 ],
-                               [[exit (closedir (opendir (".")) != 0);]])],
+                               [[return closedir (opendir (".")) != 0;]])],
               [ac_cv_func_closedir_void=no],
               [ac_cv_func_closedir_void=yes],
               [ac_cv_func_closedir_void=yes])])
@@ -478,7 +477,7 @@ AC_DEFUN([_AC_FUNC_FNMATCH_IF],
 #         define y(a, b, c) (fnmatch (a, b, c) == 0)
 #         define n(a, b, c) (fnmatch (a, b, c) == FNM_NOMATCH)
         ],
-        [exit
+        [return
           (!(y ("a*", "abc", 0)
              && n ("d*/*1", "d/s/1", FNM_PATHNAME)
              && y ("a\\\\bc", "abc", 0)
@@ -602,7 +601,7 @@ if test $ac_cv_func_getgroups = yes; the
   AC_CACHE_CHECK([for working getgroups], ac_cv_func_getgroups_works,
    [AC_RUN_IFELSE([AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT],
       [[/* On Ultrix 4.3, getgroups (0, 0) always fails.  */
-       exit (getgroups (0, 0) == -1 ? 1 : 0);]])],
+       return getgroups (0, 0) == -1;]])],
                  [ac_cv_func_getgroups_works=yes],
                  [ac_cv_func_getgroups_works=no],
                  [ac_cv_func_getgroups_works=no])
@@ -815,7 +814,7 @@ if test "$as_ln_s" = "ln -s" && ln -s co
      /* Linux will dereference the symlink and fail.
        That is better in the sense that it means we will not
        have to compile and use the lstat wrapper.  */
-     exit (lstat ("conftest.sym/", &sbuf) ? 0 : 1);])],
+     return lstat ("conftest.sym/", &sbuf) != 0;])],
                [ac_cv_func_lstat_dereferences_slashed_symlink=yes],
                [ac_cv_func_lstat_dereferences_slashed_symlink=no],
                [ac_cv_func_lstat_dereferences_slashed_symlink=no])
@@ -853,7 +852,7 @@ AC_CACHE_CHECK([for GNU libc compatible 
 char *malloc ();
 #endif
 ]],
-                [exit (malloc (0) ? 0 : 1);])],
+                [return ! malloc (0);])],
               [ac_cv_func_malloc_0_nonnull=yes],
               [ac_cv_func_malloc_0_nonnull=no],
               [ac_cv_func_malloc_0_nonnull=no])])
@@ -911,7 +910,7 @@ AC_DEFUN([AC_FUNC_MEMCMP],
   /* Some versions of memcmp are not 8-bit clean.  */
   char c0 = '\100', c1 = '\200', c2 = '\201';
   if (memcmp(&c0, &c2, 1) >= 0 || memcmp(&c1, &c2, 1) >= 0)
-    exit (1);
+    return 1;
 
   /* The Next x86 OpenStep bug shows up only when comparing 16 bytes
      or more and with at least one buffer not starting on a 4-byte boundary.
@@ -927,9 +926,9 @@ AC_DEFUN([AC_FUNC_MEMCMP],
        strcpy (a, "--------01111111");
        strcpy (b, "--------10000000");
        if (memcmp (a, b, 16) >= 0)
-         exit (1);
+         return 1;
       }
-    exit (0);
+    return 0;
   }
 ]])],
               [ac_cv_func_memcmp_working=yes],
@@ -985,9 +984,9 @@ static char *tz_strings[] = {
 };
 #define N_STRINGS (sizeof (tz_strings) / sizeof (tz_strings[0]))
 
-/* Fail if mktime fails to convert a date in the spring-forward gap.
+/* Return 0 if mktime fails to convert a date in the spring-forward gap.
    Based on a problem report from Andreas Jaeger.  */
-static void
+static int
 spring_forward_gap ()
 {
   /* glibc (up to about 1998-10-07) failed this test. */
@@ -1006,29 +1005,27 @@ spring_forward_gap ()
   tm.tm_min = 0;
   tm.tm_sec = 0;
   tm.tm_isdst = -1;
-  if (mktime (&tm) == (time_t)-1)
-    exit (1);
+  return mktime (&tm) != (time_t) -1;
 }
 
-static void
+static int
 mktime_test1 (now)
      time_t now;
 {
   struct tm *lt;
-  if ((lt = localtime (&now)) && mktime (lt) != now)
-    exit (1);
+  return ! (lt = localtime (&now)) || mktime (lt) == now;
 }
 
-static void
+static int
 mktime_test (now)
      time_t now;
 {
-  mktime_test1 (now);
-  mktime_test1 ((time_t) (time_t_max - now));
-  mktime_test1 ((time_t) (time_t_min + now));
+  return (mktime_test1 (now)
+         && mktime_test1 ((time_t) (time_t_max - now))
+         && mktime_test1 ((time_t) (time_t_min + now)));
 }
 
-static void
+static int
 irix_6_4_bug ()
 {
   /* Based on code from Ariel Faigon.  */
@@ -1041,11 +1038,10 @@ irix_6_4_bug ()
   tm.tm_sec = 0;
   tm.tm_isdst = -1;
   mktime (&tm);
-  if (tm.tm_mon != 2 || tm.tm_mday != 31)
-    exit (1);
+  return tm.tm_mon == 2 && tm.tm_mday == 31;
 }
 
-static void
+static int
 bigtime_test (j)
      int j;
 {
@@ -1067,8 +1063,9 @@ bigtime_test (j)
             && lt->tm_wday == tm.tm_wday
             && ((lt->tm_isdst < 0 ? -1 : 0 < lt->tm_isdst)
                  == (tm.tm_isdst < 0 ? -1 : 0 < tm.tm_isdst))))
-       exit (1);
+       return 0;
     }
+  return 1;
 }
 
 int
@@ -1095,18 +1092,20 @@ main ()
        putenv (tz_strings[i]);
 
       for (t = 0; t <= time_t_max - delta; t += delta)
-       mktime_test (t);
-      mktime_test ((time_t) 1);
-      mktime_test ((time_t) (60 * 60));
-      mktime_test ((time_t) (60 * 60 * 24));
+       if (! mktime_test (t))
+         return 1;
+      if (! (mktime_test ((time_t) 1)
+            && mktime_test ((time_t) (60 * 60))
+            && mktime_test ((time_t) (60 * 60 * 24))))
+       return 1;
 
       for (j = 1; 0 < j; j *= 2)
-       bigtime_test (j);
-      bigtime_test (j - 1);
+       if (! bigtime_test (j))
+         return 1;
+      if (! bigtime_test (j - 1))
+       return 1;
     }
-  irix_6_4_bug ();
-  spring_forward_gap ();
-  exit (0);
+  return ! (irix_6_4_bug () && spring_forward_gap ());
 }]])],
               [ac_cv_func_working_mktime=yes],
               [ac_cv_func_working_mktime=no],
@@ -1211,15 +1210,15 @@ main ()
   /* First, make a file with some known garbage in it. */
   data = (char *) malloc (pagesize);
   if (!data)
-    exit (1);
+    return 1;
   for (i = 0; i < pagesize; ++i)
     *(data + i) = rand ();
   umask (0);
   fd = creat ("conftest.mmap", 0600);
   if (fd < 0)
-    exit (1);
+    return 1;
   if (write (fd, data, pagesize) != pagesize)
-    exit (1);
+    return 1;
   close (fd);
 
   /* Next, try to mmap the file at a fixed address which already has
@@ -1227,17 +1226,17 @@ main ()
      we see the same garbage.  */
   fd = open ("conftest.mmap", O_RDWR);
   if (fd < 0)
-    exit (1);
+    return 1;
   data2 = (char *) malloc (2 * pagesize);
   if (!data2)
-    exit (1);
+    return 1;
   data2 += (pagesize - ((long int) data2 & (pagesize - 1))) & (pagesize - 1);
   if (data2 != mmap (data2, pagesize, PROT_READ | PROT_WRITE,
                     MAP_PRIVATE | MAP_FIXED, fd, 0L))
-    exit (1);
+    return 1;
   for (i = 0; i < pagesize; ++i)
     if (*(data + i) != *(data2 + i))
-      exit (1);
+      return 1;
 
   /* Finally, make sure that changes to the mapped area do not
      percolate back to the file as seen by read().  (This is a bug on
@@ -1246,14 +1245,14 @@ main ()
     *(data2 + i) = *(data2 + i) + 1;
   data3 = (char *) malloc (pagesize);
   if (!data3)
-    exit (1);
+    return 1;
   if (read (fd, data3, pagesize) != pagesize)
-    exit (1);
+    return 1;
   for (i = 0; i < pagesize; ++i)
     if (*(data + i) != *(data3 + i))
-      exit (1);
+      return 1;
   close (fd);
-  exit (0);
+  return 0;
 }]])],
               [ac_cv_func_mmap_fixed_mapped=yes],
               [ac_cv_func_mmap_fixed_mapped=no],
@@ -1313,7 +1312,7 @@ AC_CACHE_CHECK([for GNU libc compatible 
 char *realloc ();
 #endif
 ]],
-                [exit (realloc (0, 0) ? 0 : 1);])],
+                [return ! realloc (0, 0);])],
               [ac_cv_func_realloc_0_nonnull=yes],
               [ac_cv_func_realloc_0_nonnull=no],
               [ac_cv_func_realloc_0_nonnull=no])])
@@ -1395,7 +1394,7 @@ AC_DEFUN([AC_FUNC_SETPGRP],
 [/* If this system has a BSD-style setpgrp which takes arguments,
   setpgrp(1, 1) will fail with ESRCH and return -1, in that case
   exit successfully. */
-  exit (setpgrp (1,1) == -1 ? 0 : 1);])],
+  return setpgrp (1,1) != -1;])],
               [ac_cv_func_setpgrp_void=no],
               [ac_cv_func_setpgrp_void=yes],
               [AC_MSG_ERROR([cannot check setpgrp when cross compiling])])])
@@ -1421,9 +1420,9 @@ AC_CACHE_CHECK([whether $1 accepts an em
               [ac_cv_func_$1_empty_string_bug],
 [AC_RUN_IFELSE([AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT],
 [[struct stat sbuf;
-  exit ($1 ("", &sbuf) ? 1 : 0);]])],
-           [ac_cv_func_$1_empty_string_bug=yes],
+  return $1 ("", &sbuf) == 0;]])],
            [ac_cv_func_$1_empty_string_bug=no],
+           [ac_cv_func_$1_empty_string_bug=yes],
            [ac_cv_func_$1_empty_string_bug=yes])])
 if test $ac_cv_func_$1_empty_string_bug = yes; then
   AC_LIBOBJ([$1])
@@ -1476,7 +1475,7 @@ main()
     double value;
     value = strtod (string, &term);
     if (value != 69 || term != (string + 4))
-      exit (1);
+      return 1;
   }
 
   {
@@ -1486,9 +1485,9 @@ main()
     char *term;
     strtod (string, &term);
     if (term != string && *(term - 1) == 0)
-      exit (1);
+      return 1;
   }
-  exit (0);
+  return 0;
 }
 ]])],
               ac_cv_func_strtod=yes,
@@ -1535,7 +1534,7 @@ AC_CACHE_CHECK([whether strerror_r retur
        extern char *strerror_r ();],
        [[char buf[100];
          char x = *strerror_r (0, buf, sizeof buf);
-         exit (!isalpha (x));]])],
+         return ! isalpha (x);]])],
                    ac_cv_func_strerror_r_char_p=yes, , :)
     fi
   ])
@@ -1575,9 +1574,9 @@ AC_DEFUN([AC_FUNC_STRNLEN],
     {
       int expected = i <= S_LEN ? i : S_LEN;
       if (strnlen (S, i) != expected)
-       exit (1);
+       return 1;
     }
-  exit (0);
+  return 0;
 ]])],
               [ac_cv_func_strnlen_working=yes],
               [ac_cv_func_strnlen_working=no],
@@ -1619,9 +1618,9 @@ AC_CACHE_CHECK(whether setvbuf arguments
                   is not _IOLBF, _IONBF, or _IOFBF, and return nonzero.  */
                char buf;
                if (setvbuf (stdout, _IOLBF, &buf, 1) != 0)
-                 exit (1);
+                 return 1;
                putchar ('\r');
-               exit (0); /* Non-reversed systems SEGV here.  */]])],
+               return 0; /* Non-reversed systems SEGV here.  */]])],
           [ac_cv_func_setvbuf_reversed=yes],
           [],
           [[: # Assume setvbuf is not reversed when cross-compiling.]])]
@@ -1646,7 +1645,7 @@ AN_FUNCTION([strcoll], [AC_FUNC_STRCOLL]
 AC_DEFUN([AC_FUNC_STRCOLL],
 [AC_CACHE_CHECK(for working strcoll, ac_cv_func_strcoll_works,
 [AC_RUN_IFELSE([AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT],
-  [[exit (strcoll ("abc", "def") >= 0 ||
+  [[return (strcoll ("abc", "def") >= 0 ||
         strcoll ("ABC", "DEF") >= 0 ||
         strcoll ("123", "456") >= 0)]])],
               ac_cv_func_strcoll_works=yes,
@@ -1674,11 +1673,11 @@ AC_DEFUN([AC_FUNC_UTIME_NULL],
 # Sequent interprets utime(file, 0) to mean use start of epoch.  Wrong.
 AC_RUN_IFELSE([AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT],
 [[struct stat s, t;
-  exit (!(stat ("conftest.data", &s) == 0
-         && utime ("conftest.data", 0) == 0
-         && stat ("conftest.data", &t) == 0
-         && t.st_mtime >= s.st_mtime
-         && t.st_mtime - s.st_mtime < 120));]])],
+  return ! (stat ("conftest.data", &s) == 0
+           && utime ("conftest.data", 0) == 0
+           && stat ("conftest.data", &t) == 0
+           && t.st_mtime >= s.st_mtime
+           && t.st_mtime - s.st_mtime < 120);]])],
              ac_cv_func_utime_null=yes,
              ac_cv_func_utime_null=no,
              ac_cv_func_utime_null=no)])
@@ -1749,9 +1748,7 @@ AC_DEFUN([_AC_FUNC_FORK],
       [AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT],
        [
          /* By Ruediger Kuhlmann. */
-         if (fork() < 0)
-           exit (1);
-         exit (0);
+         return fork () < 0;
        ])],
       [ac_cv_func_fork_works=yes],
       [ac_cv_func_fork_works=no],
@@ -1837,7 +1834,7 @@ main ()
 
     while (wait(&status) != child)
       ;
-    exit(
+    return (
         /* Was there some problem with vforking?  */
         child < 0
 
@@ -1932,8 +1929,8 @@ main ()
       wait3(&i, 0, &r);
       /* Avoid "text file busy" from rm on fast HP-UX machines.  */
       sleep(2);
-      exit (r.ru_nvcsw == 0 && r.ru_majflt == 0 && r.ru_minflt == 0
-           && r.ru_stime.tv_sec == 0 && r.ru_stime.tv_usec == 0);
+      return (r.ru_nvcsw == 0 && r.ru_majflt == 0 && r.ru_minflt == 0
+             && r.ru_stime.tv_sec == 0 && r.ru_stime.tv_usec == 0);
     }
 }]])],
               [ac_cv_func_wait3_rusage=yes],
Index: lib/autoconf/headers.m4
===================================================================
RCS file: /cvsroot/autoconf/autoconf/lib/autoconf/headers.m4,v
retrieving revision 1.45
diff -p -u -r1.45 headers.m4
--- lib/autoconf/headers.m4     24 Jan 2006 00:20:15 -0000      1.45
+++ lib/autoconf/headers.m4     3 Apr 2006 03:18:01 -0000
@@ -643,8 +643,8 @@ main ()
   for (i = 0; i < 256; i++)
     if (XOR (islower (i), ISLOWER (i))
        || toupper (i) != TOUPPER (i))
-      exit (2);
-  exit (0);
+      return 2;
+  return 0;
 }]])], , ac_cv_header_stdc=no, :)
 fi])
 if test $ac_cv_header_stdc = yes; then
Index: lib/autoconf/specific.m4
===================================================================
RCS file: /cvsroot/autoconf/autoconf/lib/autoconf/specific.m4,v
retrieving revision 1.363
diff -p -u -r1.363 specific.m4
--- lib/autoconf/specific.m4    24 Jan 2006 00:20:15 -0000      1.363
+++ lib/autoconf/specific.m4    3 Apr 2006 03:18:01 -0000
@@ -280,7 +280,7 @@ main ()
       sleep (3);
       kill (getppid (), SIGINT);
       sleep (3);
-      exit (0);
+      return 0;
     }
 
   signal (SIGINT, ucatch);
@@ -289,7 +289,7 @@ main ()
   if (status == -1)
     wait (&i);
 
-  exit (status == -1);
+  return status == -1;
 }])],
               [ac_cv_sys_restartable_syscalls=yes],
               [ac_cv_sys_restartable_syscalls=no])])
Index: lib/autoconf/types.m4
===================================================================
RCS file: /cvsroot/autoconf/autoconf/lib/autoconf/types.m4,v
retrieving revision 1.34
diff -p -u -r1.34 types.m4
--- lib/autoconf/types.m4       11 Mar 2006 13:22:42 -0000      1.34
+++ lib/autoconf/types.m4       3 Apr 2006 03:18:01 -0000
@@ -139,7 +139,7 @@
 # (not necessarily size_t etc.).  Equally, instead of defining an unused
 # variable, we just use a cast to avoid warnings from the compiler.
 # Suggested by Paul Eggert.
-# 
+#
 # Now, the next issue is that C++ disallows defining types inside casts
 # and inside `sizeof()', but we would like to allow unnamed structs, for
 # use inside AC_CHECK_SIZEOF, for example.  So we create a typedef of the
@@ -280,7 +280,7 @@ main ()
   /* Exit non-zero if getgroups seems to require an array of ints.  This
      happens when gid_t is short int but getgroups modifies an array
      of ints.  */
-  exit ((n > 0 && gidset[n] != val.gval) ? 1 : 0);
+  return n > 0 && gidset[n] != val.gval;
 }]])],
               [ac_cv_type_getgroups=gid_t],
               [ac_cv_type_getgroups=int],
Index: tests/compile.at
===================================================================
RCS file: /cvsroot/autoconf/autoconf/tests/compile.at,v
retrieving revision 1.29
diff -p -u -r1.29 compile.at
--- tests/compile.at    14 May 2005 07:00:40 -0000      1.29
+++ tests/compile.at    3 Apr 2006 03:18:01 -0000
@@ -2,7 +2,7 @@
 
 AT_BANNER([Low level compiling/preprocessing macros.])
 
-# Copyright (C) 2000, 2001, 2003, 2005 Free Software Foundation, Inc.
+# Copyright (C) 2000, 2001, 2003, 2005, 2006 Free Software Foundation, Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -116,19 +116,19 @@ AT_SETUP([AC_RUN_IFELSE])
 AT_DATA([configure.ac],
 [[AC_INIT
 
-AC_RUN_IFELSE([AC_LANG_PROGRAM([], [exit (0)])],
+AC_RUN_IFELSE([AC_LANG_PROGRAM([], [return 0])],
              [],
-             [AC_MSG_ERROR([saw `exit 0' as a failure])])
+             [AC_MSG_ERROR([saw `return 0' as a failure])])
 
-AC_RUN_IFELSE([AC_LANG_PROGRAM([], [exit (2)])],
-             [AC_MSG_ERROR([saw `exit 2' as a success])],
+AC_RUN_IFELSE([AC_LANG_PROGRAM([], [return 2])],
+             [AC_MSG_ERROR([saw `return 2' as a success])],
              [status=$?
 test $status != 2 &&
   AC_MSG_ERROR([did not get as 2 exit status: $status])])
 
 # The old stinky one.
-AC_TRY_RUN([int main () { exit (3); }],
-          [AC_MSG_ERROR([saw `exit 3' as a success])],
+AC_TRY_RUN([int main () { return 3; }],
+          [AC_MSG_ERROR([saw `return 3' as a success])],
           [status=$?
 test $status != 3 &&
   AC_MSG_ERROR([did not get 3 as exit status: $status])])




reply via email to

[Prev in Thread] Current Thread [Next in Thread]