This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
metaconfig-ify the test for broken fflush(NULL)
authorJarkko Hietaniemi <jhi@iki.fi>
Sat, 11 Mar 2000 18:27:54 +0000 (18:27 +0000)
committerJarkko Hietaniemi <jhi@iki.fi>
Sat, 11 Mar 2000 18:27:54 +0000 (18:27 +0000)
(which ails e.g. Solaris), from Ulrich Pfeifer.

p4raw-id: //depot/cfgperl@5659

Configure
hints/solaris_2.sh

index d9681ef..40a6169 100755 (executable)
--- a/Configure
+++ b/Configure
@@ -20,7 +20,7 @@
 
 # $Id: Head.U,v 3.0.1.9 1997/02/28 15:02:09 ram Exp $
 #
-# Generated on Fri Mar 10 03:07:09 EET 2000 [metaconfig 3.0 PL70]
+# Generated on Sat Mar 11 20:26:09 EET 2000 [metaconfig 3.0 PL70]
 # (with additional metaconfig patches by perlbug@perl.com)
 
 cat >/tmp/c1$$ <<EOF
@@ -12554,9 +12554,52 @@ EOM
        $rm -f core try.core core.try.*
        case "$fflushNULL" in
        x)      $cat >&4 <<EOM
-Your fflush(NULL) works okay.
+Your fflush(NULL) works okay for output streams.
+Let's see if it clobbers input pipes...
 EOM
-               fflushNULL="$define"
+# As of mid-March 2000 all versions of Solaris appear to have a stdio
+# bug that improperly flushes the input end of pipes.  So we avoid the
+# autoflush on fork/system/exec support for now. :-(
+$cat >tryp.c <<EOCP
+#include <stdio.h>
+int
+main(int argc, char **argv)
+{
+    char buf[1024];
+    int i;
+    char *bp = buf;
+    while (1) {
+        while ((i = getc(stdin)) != -1
+               && (*bp++ = i) != '\n'
+               && bp < &buf[1024])
+       /* DO NOTHING */ ;
+        *bp = '\0';
+        fprintf(stdout, "%s", buf);
+        fflush(NULL);
+        if (i == -1)
+       return 0;
+        bp = buf;
+    }
+}
+EOCP
+                fflushNULL="$define"
+                set tryp
+                if eval $compile; then
+                    $rm -f tryp.out
+                    $cat tryp.c | ./tryp$exe_ext 2>/dev/null > tryp.out
+                    if cmp tryp.c tryp.out >/dev/null 2>&1; then
+                       $cat >&4 <<EOM
+fflush(NULL) seems to behave okay with input streams.
+EOM
+                       fflushNULL="$define"
+                    else
+                       $cat >&4 <<EOM
+Ouch, fflush(NULL) clobbers input pipes!  We will not use it.
+EOM
+                        fflushNULL="$undef"
+                    fi
+                fi
+               $rm -f core tryp.core core.tryp.*
                ;;
        '')     $cat >&4 <<EOM
 Your fflush(NULL) isn't working (contrary to ANSI C).
index 65f8158..5a8cbfa 100644 (file)
@@ -479,29 +479,6 @@ case "$uselongdouble" in
        ;;
 esac
 
-case "$fflushNULL" in
-"$define"|true|[yY]*)
-       # allow them to force it the other way
-       ;;
-*)
-       # All versions of Solaris appear to have a stdio bug that improperly
-       # flushes the input end of pipes.  So we avoid the autoflush on
-       # fork/system/exec support for now. :-(  See the test case in:
-       #   http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2000-03/msg00373.html
-       # XXX this needs a Configure test so that more such platforms can be
-       # caught automatically.
-       fflushNULL=undef
-       fflushall=undef
-       cat >&4 <<EOM
-
-*** Solaris has a bug that affects input pipes, and so I have disabled
-*** support for automatic flushing on fork/system/exec.  If you want
-*** automatic flushing anyway, rerun Configure again with -DfflushNULL.
-
-EOM
-       ;;
-esac
-
 rm -f try.c try.o try
 # keep that leading tab
        ccisworkshop=''