fill gaps in sig_* entries in win32/config.?c
[p5sagit/p5-mst-13.2.git] / hints / solaris_2.sh
index 9a1ccb9..856f801 100644 (file)
@@ -173,10 +173,28 @@ END
 
        # See if ld(1) is GNU ld(1).  GNU ld(1) won't work for this job.
        # Recompute $verbose since we may have just changed $cc.
-       verbose=`${cc:-cc} -v -o try try.c 2>&1`
+       verbose=`${cc:-cc} -v -o try try.c 2>&1 | grep ld 2>&1`
        if echo "$verbose" | grep ' /usr/ccs/bin/ld ' >/dev/null 2>&1; then
            :
        else
+        # It's not /usr/ccs/bin/ld - but it might be egcs's ld wrapper,
+        # which calls /usr/ccs/bin/ld in turn. Passing -V to it will
+        # make it show its true colors.
+
+           myld=`echo $verbose| grep ld | awk '/\/ld/ {print $1}'`
+            # This assumes that gcc's output will not change, and that
+            # /full/path/to/ld will be the first word of the output.
+
+            # all Solaris versions of ld I've seen contain the magic
+            # string used in the grep below.
+            if $myld -V 2>&1 | grep "ld: Software Generation Utilities" >/dev/null 2>&1; then
+                cat <<END >&2
+
+Aha. You're using egcs and /usr/ccs/bin/ld.
+
+END
+
+            else
            cat <<END >&2
 
 NOTE: You are using GNU ld(1).  GNU ld(1) will not build Perl.
@@ -185,6 +203,7 @@ in your ${cc:-cc} command.  (Note that the trailing "/" is required.)
 
 END
            cc="${cc:-cc} -B/usr/ccs/bin/"
+            fi
        fi
 
 else
@@ -257,12 +276,30 @@ if [ "X$usethreads" = "X$define" ]; then
     # when linked with the threads library, such that whatever positive value
     # you pass to siglongjmp(), sigsetjmp() returns 1.
     # Thanks to Simon Parsons <S.Parsons@ftel.co.uk> for this report.
-    if test "`arch`" = i86pc -a "$osvers" = 2.6; then
-       d_sigaction=$undef
+    # Sun BugID is 4117946, "sigsetjmp always returns 1 when called by
+    # siglongjmp in a MT program". As of 19980622, there is no patch
+    # available.
+    cat >try.c <<'EOM'
+       /* Test for sig(set|long)jmp bug. */
+       #include <setjmp.h>
+        
+       main()
+       {
+           sigjmp_buf env;
+           int ret;
+       
+           ret = sigsetjmp(env, 1);
+           if (ret) { return ret == 2; }
+           siglongjmp(env, 2);
+       }
+EOM
+    if test "`arch`" = i86pc -a "$osvers" = 2.6 \
+    && ${cc:-cc} try.c -lpthread >/dev/null 2>&1 && ./a.out; then
+       d_sigsetjmp=$undef
        cat << 'EOM' >&2
 
 You will see a *** WHOA THERE!!! ***  message from Configure for
-d_sigaction.  Keep the recommended value.  See hints/solaris_2.sh
+d_sigsetjmp.  Keep the recommended value.  See hints/solaris_2.sh
 for more information.
 
 EOM