Jumbo Configure update.
Jarkko Hietaniemi [Tue, 19 Jan 1999 12:44:02 +0000 (12:44 +0000)]
* -Uinstallusrbinperl: disable /usr/bin/perl installation
   by installperl
* usethreads.cbu
* use64bits.cbu
* "nosuid"

p4raw-id: //depot/cfgperl@2649

18 files changed:
Configure
config_h.SH
hints/aix.sh
hints/dec_osf.sh
hints/dos_djgpp.sh
hints/freebsd.sh
hints/hpux.sh
hints/irix_4.sh
hints/irix_5.sh
hints/irix_6.sh
hints/irix_6_0.sh
hints/irix_6_1.sh
hints/linux.sh
hints/os2.sh
hints/solaris_2.sh
perl.c
perl.h
pod/perldiag.pod

index 1d99afe..9c16607 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 Sat Jan  9 18:00:39 EET 1999 [metaconfig 3.0 PL70]
+# Generated on Tue Jan 19 14:08:44 EET 1999 [metaconfig 3.0 PL70]
 # (with additional metaconfig patches by jhi@iki.fi)
 
 cat >/tmp/c1$$ <<EOF
@@ -481,6 +481,11 @@ d_sockpair=''
 sockethdr=''
 socketlib=''
 d_statblks=''
+d_fstatfs=''
+d_statfs=''
+d_statfsflags=''
+d_fstatvfs=''
+d_statvfs=''
 d_stdio_cnt_lval=''
 d_stdio_ptr_lval=''
 d_stdiobase=''
@@ -603,12 +608,14 @@ i_bsdioctl=''
 i_sysfilio=''
 i_sysioctl=''
 i_syssockio=''
+i_sysmount=''
 i_sysndir=''
 i_sysparam=''
 i_sysresrc=''
 i_syssecrt=''
 i_sysselct=''
 i_sysstat=''
+i_sysstatvfs=''
 i_systimes=''
 i_systypes=''
 d_iovec_s=''
@@ -629,6 +636,7 @@ i_stdarg=''
 i_varargs=''
 i_varhdr=''
 i_vfork=''
+installusrbinperl=''
 intsize=''
 longsize=''
 shortsize=''
@@ -2476,16 +2484,7 @@ y|Y)    val="$define" ;;
 esac
 set usethreads
 eval $setvar 
-: Look for a hint-file generated 'call-back-unit'.  If the
-: user has specified that a threading perl is to be built,
-: we may need to set or change some other defaults.
-case "$usethreads" in
-$define|true|[yY]*)
-       if $test -f usethreads.cbu; then
-               . ./usethreads.cbu
-       fi
-       ;;
-esac
+
 case "$d_oldpthreads" in
 '')    : Configure tests would be welcome here.  For now, assume undef.
        val="$undef" ;;
@@ -2496,247 +2495,30 @@ eval $setvar
 
 
 case "$usethreads" in
-"$define")
-    case "$osname" in
-    aix)
-        ccflags="$ccflags -DNEED_PTHREAD_INIT"
-        case "$cc" in
-        xlc_r | cc_r) ;;
-        cc) 
-           echo >&4 "Switching cc to xlc_r because of POSIX threads."
-           cc=xlc_r
-            ;;
-        '') 
-           cc=xlc_r
-            ;;
-        *)
-           cat >&4 <<EOM
-For pthreads you should use the AIX C compilers xlc_r or cc_r.
-(now your compiler was '$cc')
-Cannot continue, aborting.
-EOM
-           exit 1
-           ;;
-        esac
-
-        # Add the POSIX threads library and the re-entrant libc.
-
-        lddlflags=`echo $lddlflags | sed 's/ -lc$/ -lpthreads -lc_r -lc/'`
-
-        # Add the c_r library to the list of wanted libraries.
-        # Make sure the c_r library is before the c library or
-        # make will fail.
-        set `echo X "$libswanted "| sed -e 's/ c / c_r c /'`
-        shift
-        libswanted="$*"
-       ;;
-    dec_osf)
-        # Threads interfaces changed with V4.0.
-        case "`uname -r`" in
-        *[123].*)
-           libswanted="$libswanted pthreads mach exc c_r"
-           ccflags="-threads $ccflags"
-           ;;
-        *)
-           libswanted="$libswanted pthread exc"
-           ccflags="-pthread $ccflags"
-           ;;
-        esac
-
-        usemymalloc='n'
-       ;;
-    dos_djgpp)
-        set `echo X "$libswanted "| sed -e 's/ c / gthreads c /'`
-        shift
-        libswanted="$*"
-       ;;
-    freebsd)
-        case "$osvers" in  
-        [34].*) ldflags="-pthread $ldflags"
-              ;;
-        2.2*) if [ ! -r /usr/lib/libc_r ]; then
-              cat <<'EOM' >&4
-POSIX threads are not supported by default on FreeBSD $osvers.  Follow the
-instructions in 'man pthread' to build and install the needed libraries.
-EOM
-                 exit 1
-              fi
-              set `echo X "$libswanted "| sed -e 's/ c / c_r /'`
-              shift
-              libswanted="$*"
-              # Configure will probably pick the wrong libc to use for nm
-              # scan.
-              # The safest quick-fix is just to not use nm at all.
-              usenm=false
-              ;;
-         *)   cat <<'EOM' >&4
-
-It is not known if FreeBSD $osvers supports POSIX threads or not.
-Consider upgrading to the latest STABLE release.
-
-EOM
-              exit 1
-              ;;
-        esac
-       ;;
-    hpux)
-        if [ "$xxOsRevMajor" -lt 10 ]; then
-            cat <<EOM >&4
-HP-UX $xxOsRevMajor cannot support POSIX threads.
-Consider upgrading to at least HP-UX 11.
-Cannot continue, aborting.
-EOM
-            exit 1
-        fi
-        case "$xxOsRevMajor" in
-        10)
-            # Under 10.X, a threaded perl can be built, but it needs
-            # libcma and OLD_PTHREADS_API.  Also <pthread.h> needs to
-            # be #included before any other includes (in perl.h)
-            if [ ! -f /usr/include/pthread.h -o ! -f /usr/lib/libcma.sl ]; then
-                cat <<EOM >&4
-In HP-UX 10.X for POSIX threads you need both of the files
-/usr/include/pthread.h and /usr/lib/libcma.sl.
-Either you must install the CMA package or you must upgrade to HP-UX 11.
-Cannot continue, aborting.
-EOM
-               exit 1
-            fi
-
-            # HP-UX 10.X uses the old pthreads API
-            case "$d_oldpthreads" in
-            '') d_oldpthreads="$define" ;;
-            esac
-
-            # include libcma before all the others
-            libswanted="cma $libswanted"
-
-            # tell perl.h to include <pthread.h> before other include files
-            ccflags="$ccflags -DPTHREAD_H_FIRST"
-
-            # CMA redefines select to cma_select, and cma_select expects int *
-            # instead of fd_set * (just like 9.X)
-            selecttype='int *'
-            ;;
-        11 | 12) # 12 may want upping the _POSIX_C_SOURCE
-            ccflags="$ccflags -D_POSIX_C_SOURCE=199506L"
-            libswanted="$libswanted pthread"
-           ;;
-        esac
-       ;;
-    irix)
-        if test ! -f ${TOOLROOT}/usr/include/pthread.h -o ! -f /usr/lib/libpthread.so; then
-            case "`uname -r`" in
-            [1-5].*|6.[01]|6.[01])
-               cat >&4 <<EOM
-IRIX `uname -r` does not support POSIX threads.
-You should upgrade to at least IRIX 6.2 with pthread patches.
-EOM
-               ;;
-           6.2)
-               cat >&4 <<EOM
-IRIX 6.2 can have the POSIX threads.
-However,the following IRIX patches (or their replacements) MUST be installed:
-        1404 Irix 6.2 Posix 1003.1b man pages
-        1645 IRIX 6.2 & 6.3 POSIX header file updates
-        2000 Irix 6.2 Posix 1003.1b support modules
-        2254 Pthread library fixes
-       2401 6.2 all platform kernel rollup
-IMPORTANT:
-       Without patch 2401, a kernel bug in IRIX 6.2 will
-       cause your machine to panic and crash when running
-       threaded perl. IRIX 6.3 and up should be OK.
-EOM
-               ;;
-           [67].*)
+"$define"|true|[yY]*)
+: Look for a hint-file generated 'call-back-unit'.  If the
+: user has specified that a threading perl is to be built,
+: we may need to set or change some other defaults.
+       if $test -f usethreads.cbu; then
+               . ./usethreads.cbu
+       fi
+       case "$osname" in
+       aix|dec_osf|dos_djgpp|freebsd|hpux|irix|linux|os2|solaris|vmesa)
+               # Known thread-capable platforms.
+               ;;
+       *)
                cat >&4 <<EOM
-IRIX `uname -r` should have the POSIX threads.
-But, somehow, you do not seem to have them installed.
-EOM
-               ;;
-           esac
-            cat >&4 <<EOM
-Cannot continue, aborting.
-EOM
-            exit 1
-        fi
-        set `echo X "$libswanted "| sed -e 's/ c / pthread /'`
-        ld="${cc:-cc}"
-        shift
-        libswanted="$*"
-
-        usemymalloc='n'
-       ;;
-    linux)
-        ccflags="-D_REENTRANT $ccflags"
-
-        set `echo X "$libswanted "| sed -e 's/ c / pthread c /'`
-        shift
-        libswanted="$*"
-       ;;
-    os2)
-       ccflags="-Zmt $ccflags"
-        cppflags="-Zmt $cppflags"  # Do we really need to set this?
-        aout_ccflags="-DUSE_THREADS $aout_ccflags"
-        aout_cppflags="-DUSE_THREADS $aout_cppflags"
-        aout_lddlflags="-Zmt $aout_lddlflags"
-        aout_ldflags="-Zmt $aout_ldflags"
-       ;;
-    solaris)
-        ccflags="-D_REENTRANT $ccflags"
-
-        # sched_yield is in -lposix4
-        set `echo X "$libswanted "| sed -e 's/ c / posix4 pthread c /'`
-        shift
-        libswanted="$*"
-
-        # On Solaris 2.6 x86 there is a bug with sigsetjmp() and siglongjmp()
-        # 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.
-        # 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_sigsetjmp.  Keep the recommended value.  See hints/solaris_2.sh
-for more information.
-
-EOM
-        fi
-       ;;
-    vmesa)
-       ;;
-    *)
-        cat >&4 <<EOM
 $osname is not known to support threads.
 Please let me (jhi@iki.fi) know how to do that.
 
 Cannot continue, aborting.
 EOM
-       exit 1
+               exit 1
        ;;
-    esac # $osname
+       esac # $osname
     ;;
 esac # $usethreads
+
 cat <<EOM
 
 Perl can be built so that multiple Perl interpreters can coexist
@@ -2783,97 +2565,35 @@ esac
 set use64bits
 eval $setvar
 
-archname64=''
+case "$archname64" in
+'') archname64='' ;;   # not a typo
+esac
 
 case "$use64bits" in
-"$define")
+"$define"|true|[yY]*)
+: Look for a hint-file generated 'call-back-unit'.  If the
+: user has specified that a threading perl is to be built,
+: we may need to set or change some other defaults.
+       if $test -f use64bits.cbu; then
+               . ./use64bits.cbu
+       fi
        case "$osname" in
-       dec_osf)
-           # Pretty much everything is 64-bit already.
-           ;;
-       hpux)
-           if [ "$xxOsRevMajor" -lt 11 ]; then
-               cat <<EOM >&4
-64-bit compilation is not supported on HP-UX $xxOsRevMajor.
-You need at least HP-UX 11.0.
-Cannot continue, aborting.
-EOM
-               exit 1
-           fi
-           if [ ! -d /lib/pa20_64 ]; then
-               cat <<EOM >&4
-You do not seem to have the 64-bit libraries, /lib/pa20_64.
-Cannot continue, aborting.
-EOM
-               exit 1
-           fi
-           ccflags="$ccflags +DD64 -D_FILE_OFFSET_BITS=64"
-           ldflags="$ldflags +DD64"
-           ld=/usr/bin/ld
-           set `echo " $libswanted " | sed -e 's@ dl @ @'`
-           libswanted="$*"
-           glibpth="/lib/pa20_64"
-           ;;
-       irix)
-           case "`uname -r`" in
-           [1-5]*|6.[01])
-               cat >&4 <<EOM
-IRIX `uname -r` does not support 64-bit types.
-You should upgrade to at least IRIX 6.2.
-Cannot continue, aborting.
-EOM
-               exit 1
-               ;;
-           esac
-           case "$ccflags" in
-           *-n32*)
-               ccflags="$ccflags -DUSE_LONG_LONG"
-               archname64="-n32"
-               d_open64="$undef"
-               # In -n32 mode (ILP32LL64) we use the standard open().
-               # In -64 we will use the open64().
-               cat << 'EOM' >&2
-
-You will see a *** WHOA THERE!!! ***  message from Configure for
-d_open64.  Keep the recommended value.  See hints/irix6.sh
-for more information.
-
-EOM
-               ;;
-           esac
-           ccflags="$ccflags -DUSE_64_BIT_FILES"
-           ;;
-       solaris)
-           case "`uname -r`" in
-           1.*|2.[1-5])
-               cat >&4 <<EOM
-Solaris `uname -r` does not support 64-bit interfaces.
-You should upgrade to at least Solaris 2.6.
-EOM
-               exit 1
+       dec_osf|hpux|irix|solaris|unicos)
+               # Known 64-bit capable platforms.
                ;;
-           esac
-           ccflags="$ccflags `getconf LFS_CFLAGS` -DUSE_LONG_LONG"
-           ldflags="$ldflags `getconf LFS_LDFLAGS`"
-           libswanted="$libswanted `getconf LFS_LIBS`"
-           # When a 64-bit cc becomes available $archname64
-           # may need setting so that $archname gets it attached.
-           ;;
-       unicos)
-           # Pretty much everything is 64-bit already.
-           ;;
        *)
-           cat >&4 <<EOM
+               cat >&4 <<EOM
 $osname is not known to support 64-bit interfaces.
 Please let me (jhi@iki.fi) know how to do that.
 
 Cannot continue, aborting.
 EOM
-           exit 1
-           ;;
+               exit 1
+               ;;
        esac
        ;;
 esac
+
 : determine the architecture name
 echo " "
 if xxx=`./loc arch blurfl $pth`; $test -f "$xxx"; then
@@ -4797,6 +4517,33 @@ else
        installbin="$binexp"
 fi
 
+: determine whether to install perl also as /usr/bin/perl
+
+echo " "
+case "$installusrbinperl" in
+'') if test -d /usr/bin -a "X$installbin" != X/usr/bin; then
+       $cat <<EOM
+Many scripts expect to perl to be installed as /usr/bin/perl.
+I can install the perl you are about to compile also as /usr/bin/perl
+(in addition to $installbin/perl).
+EOM
+       dflt='y'
+       rp="Do you want to install perl as /usr/bin/perl?"
+       . ./myread
+       case "$ans" in
+       [yY]*)  val="$define";;
+       *)      val="$undef";;
+       esac
+    fi
+    ;;
+esac
+case "$installusrbinperl" in
+"$undef"|[nN]*)        val="$undef";;
+*)             val="$define";;
+esac
+set installusrbinperl
+eval $setvar
+
 : define a shorthand compile call
 compile='
 mc_file=$1;
@@ -8230,6 +7977,33 @@ eval $inlibc
 set fsetpos d_fsetpos
 eval $inlibc
 
+: see if this is a sys/mount.h system
+set sys/mount.h i_sysmount
+eval $inhdr
+
+
+: see if statfs exists
+set statfs d_statfs
+eval $inlibc
+
+: see if fstatfs exists
+set fstatfs d_fstatfs
+eval $inlibc
+
+: see if statfs knows about mount flags
+set d_statfsflags statfs f_flags $i_sysmount sys/mount.h
+eval $hasfield
+
+
+: see if statvfs exists
+set statvfs d_statvfs
+eval $inlibc
+
+: see if fstatvfs exists
+set fstatvfs d_fstatvfs
+eval $inlibc
+
+
 : see if ftello exists
 set ftello d_ftello
 eval $inlibc
@@ -12303,6 +12077,10 @@ eval $inhdr
 set sys/security.h i_syssecrt
 eval $inhdr
 
+: see if this is a sys/statvfs.h system
+set sys/statvfs.h i_sysstatvfs
+eval $inhdr
+
 : see if this is a sys/un.h system
 set sys/un.h i_sysun
 eval $inhdr
@@ -12777,6 +12555,8 @@ d_fseeko='$d_fseeko'
 d_fsetpos64='$d_fsetpos64'
 d_fsetpos='$d_fsetpos'
 d_fstat64='$d_fstat64'
+d_fstatfs='$d_fstatfs'
+d_fstatvfs='$d_fstatvfs'
 d_ftell64='$d_ftell64'
 d_ftello64='$d_ftello64'
 d_ftello='$d_ftello'
@@ -12934,6 +12714,9 @@ d_socket='$d_socket'
 d_sockpair='$d_sockpair'
 d_stat64='$d_stat64'
 d_statblks='$d_statblks'
+d_statfs='$d_statfs'
+d_statfsflags='$d_statfsflags'
+d_statvfs='$d_statvfs'
 d_stdio_cnt_lval='$d_stdio_cnt_lval'
 d_stdio_ptr_lval='$d_stdio_ptr_lval'
 d_stdiobase='$d_stdiobase'
@@ -13055,6 +12838,7 @@ i_sysfile='$i_sysfile'
 i_sysfilio='$i_sysfilio'
 i_sysin='$i_sysin'
 i_sysioctl='$i_sysioctl'
+i_sysmount='$i_sysmount'
 i_sysndir='$i_sysndir'
 i_sysparam='$i_sysparam'
 i_sysresrc='$i_sysresrc'
@@ -13062,6 +12846,7 @@ i_syssecrt='$i_syssecrt'
 i_sysselct='$i_sysselct'
 i_syssockio='$i_syssockio'
 i_sysstat='$i_sysstat'
+i_sysstatvfs='$i_sysstatvfs'
 i_systime='$i_systime'
 i_systimek='$i_systimek'
 i_systimes='$i_systimes'
@@ -13089,6 +12874,7 @@ installprivlib='$installprivlib'
 installscript='$installscript'
 installsitearch='$installsitearch'
 installsitelib='$installsitelib'
+installusrbinperl='$installusrbinperl'
 intsize='$intsize'
 known_extensions='$known_extensions'
 ksh='$ksh'
index d286068..dc17cf6 100644 (file)
@@ -2051,6 +2051,26 @@ sed <<!GROK!THIS! >config.h -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un-
  */
 #$d_sfio       USE_SFIO                /**/
 
+/* HAS_FSTATFS:
+ *     This symbol, if defined, indicates that the fstatfs routine is
+ *     available to do stat filesystems of file descriptors.
+ */
+/* HAS_STRUCT_STATFS_FLAGS:
+ *     This symbol, if defined, indicates that the struct statfs
+ *     does have the f_flags member containing the mount flags of
+ *     the filesystem holding the file.
+ *     This kind of struct statfs is coming from sys/mount.h (BSD)
+ *     and not from sys/statfs.h (SYSV).
+ */
+#$d_fstatfs HAS_FSTATFS                /**/
+#$d_statfsflags HAS_STRUCT_STATFS_FLAGS                /**/
+
+/* HAS_FSTATVFS:
+ *     This symbol, if defined, indicates that the fstatvfs routine is
+ *     available to do stat filesystems of file descriptors.
+ */
+#$d_fstatvfs HAS_FSTATVFS              /**/
+
 /* HAS_WRITEV:
  *     This symbol, if defined, indicates that the writev routine is
  *     available to do scatter writes.
@@ -2130,6 +2150,24 @@ sed <<!GROK!THIS! >config.h -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un-
  */
 #$i_poll       I_POLL          /**/
 
+/* I_SYS_MOUNT:
+ *     This symbol, if defined, indicates that <sys/mount.h> exists and
+ *     should be included.
+ */
+#$i_sysmount   I_SYS_MOUNT             /**/
+
+/* I_SYS_STATVFS:
+ *     This symbol, if defined, indicates that <sys/statvfs.h> exists and
+ *     should be included.
+ */
+#$i_sysstatvfs I_SYS_STATVFS           /**/
+
+/* INSTALL_USR_BIN_PERL:
+ *     This symbol, if defined, indicates that Perl is to be installed
+ *     also as /usr/bin/perl.
+ */
+#$installusrbinperl INSTALL_USR_BIN_PERL       /**/
+
 /* HAS_FSTAT64:
  *     This symbol, if defined, indicates that the fstat64 routine is
  *     available to stat files (fds) larger than 2 gigabytes.
@@ -2308,6 +2346,12 @@ sed <<!GROK!THIS! >config.h -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un-
  */
 #$use64bits    USE_64_BITS             /**/
 
+/* MULTIPLICITY:
+ *     This symbol, if defined, indicates that Perl should
+ *     be built to use multiplicity.
+ */
+#$usemultiplicity      MULTIPLICITY            /**/
+
 /* USE_PERLIO:
  *     This symbol, if defined, indicates that the PerlIO abstraction should
  *     be used throughout.  If not defined, stdio should be
@@ -2397,7 +2441,7 @@ sed <<!GROK!THIS! >config.h -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un-
  *     in joinable (aka undetached) state.  NOTE: not defined
  *     if pthread.h already has defined PTHREAD_CREATE_JOINABLE
  *     (the new version of the constant).
- *     If defined, possible values are PTHREAD_CREATE_UNDETACHED
+ *     If defined, known values are PTHREAD_CREATE_UNDETACHED
  *     and __UNDETACHED.
  */
 #$d_old_pthread_create_joinable OLD_PTHREAD_CREATE_JOINABLE $old_pthread_create_joinable /**/
@@ -2427,12 +2471,6 @@ sed <<!GROK!THIS! >config.h -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un-
  */
 #$i_machcthr   I_MACH_CTHREADS /**/
 
-/* MULTIPLICITY:
- *     This symbol, if defined, indicates that Perl should
- *     be built to use multiplicity.
- */
-#$usemultiplicity      MULTIPLICITY            /**/
-
 /* USE_THREADS:
  *     This symbol, if defined, indicates that Perl should
  *     be built to use threads.
index bbcc522..727cf93 100644 (file)
@@ -74,3 +74,41 @@ case "$osvers" in
     ;;
 esac
 
+# This script UU/usethreads.cbu will get 'called-back' by Configure 
+# after it has prompted the user for whether to use threads.
+cat > UU/usethreads.cbu <<'EOCBU'
+case "$usethreads" in
+$define|true|[yY]*)
+        ccflags="$ccflags -DNEED_PTHREAD_INIT"
+        case "$cc" in
+        xlc_r | cc_r) ;;
+        cc) 
+           echo >&4 "Switching cc to xlc_r because of POSIX threads."
+           cc=xlc_r
+            ;;
+        '') 
+           cc=xlc_r
+            ;;
+        *)
+           cat >&4 <<EOM
+For pthreads you should use the AIX C compilers xlc_r or cc_r.
+(now your compiler was '$cc')
+Cannot continue, aborting.
+EOM
+           exit 1
+           ;;
+        esac
+
+        # Add the POSIX threads library and the re-entrant libc.
+
+        lddlflags=`echo $lddlflags | sed 's/ -lc$/ -lpthreads -lc_r -lc/'`
+
+        # Add the c_r library to the list of wanted libraries.
+        # Make sure the c_r library is before the c library or
+        # make will fail.
+        set `echo X "$libswanted "| sed -e 's/ c / c_r c /'`
+        shift
+        libswanted="$*"
+       ;;
+esac
+EOCBU
index b2a7300..686ae2c 100644 (file)
@@ -191,6 +191,28 @@ esac
 
 pp_sys_cflags='ccflags="$ccflags -DNO_EFF_ONLY_OK"'
 
+# This script UU/usethreads.cbu will get 'called-back' by Configure 
+# after it has prompted the user for whether to use threads.
+cat > UU/usethreads.cbu <<'EOCBU'
+case "$usethreads" in
+$define|true|[yY]*)
+        # Threads interfaces changed with V4.0.
+        case "`uname -r`" in
+        *[123].*)
+           libswanted="$libswanted pthreads mach exc c_r"
+           ccflags="-threads $ccflags"
+           ;;
+        *)
+           libswanted="$libswanted pthread exc"
+           ccflags="-pthread $ccflags"
+           ;;
+        esac
+
+        usemymalloc='n'
+       ;;
+esac
+EOCBU
+
 #
 # Unset temporary variables no more needed.
 #
@@ -326,3 +348,5 @@ unset _DEC_cc_style
 #      * Set -Olimit to 3200 because perl_yylex.c got too big
 #        for the optimizer.
 #
+
+
index 94c09d0..db09cbc 100644 (file)
@@ -52,3 +52,15 @@ sitearch=$sitelib
 eagain='EAGAIN'
 rd_nodata='-1'
 
+# This script UU/usethreads.cbu will get 'called-back' by Configure 
+# after it has prompted the user for whether to use threads.
+cat > UU/usethreads.cbu <<'EOCBU'
+case "$usethreads" in
+$define|true|[yY]*)
+        set `echo X "$libswanted "| sed -e 's/ c / gthreads c /'`
+        shift
+        libswanted="$*"
+       ;;
+esac
+EOCBU
+
index d638462..96df283 100644 (file)
@@ -139,4 +139,39 @@ EOM
 signal_t='void'
 d_voidsig='define'
 
+# This script UU/usethreads.cbu will get 'called-back' by Configure 
+# after it has prompted the user for whether to use threads.
+cat > UU/usethreads.cbu <<'EOCBU'
+case "$usethreads" in
+$define|true|[yY]*)
+        case "$osvers" in  
+        [34].*) ldflags="-pthread $ldflags"
+              ;;
+        2.2*) if [ ! -r /usr/lib/libc_r ]; then
+              cat <<'EOM' >&4
+POSIX threads are not supported by default on FreeBSD $osvers.  Follow the
+instructions in 'man pthread' to build and install the needed libraries.
+EOM
+                 exit 1
+              fi
+              set `echo X "$libswanted "| sed -e 's/ c / c_r /'`
+              shift
+              libswanted="$*"
+              # Configure will probably pick the wrong libc to use for nm
+              # scan.
+              # The safest quick-fix is just to not use nm at all.
+              usenm=false
+              ;;
+         *)   cat <<'EOM' >&4
+
+It is not known if FreeBSD $osvers supports POSIX threads or not.
+Consider upgrading to the latest STABLE release.
+
+EOM
+              exit 1
+              ;;
+        esac
+       ;;
+esac
+EOCBU
 
index ceef5a3..70250b7 100644 (file)
@@ -193,3 +193,84 @@ esac
 #     assembler of the form:
 #          (warning) Use of GR3 when frame >= 8192 may cause conflict.
 #     These warnings are harmless and can be safely ignored.
+
+# This script UU/usethreads.cbu will get 'called-back' by Configure 
+# after it has prompted the user for whether to use threads.
+cat > UU/usethreads.cbu <<'EOCBU'
+case "$usethreads" in
+$define|true|[yY]*)
+        if [ "$xxOsRevMajor" -lt 10 ]; then
+            cat <<EOM >&4
+HP-UX $xxOsRevMajor cannot support POSIX threads.
+Consider upgrading to at least HP-UX 11.
+Cannot continue, aborting.
+EOM
+            exit 1
+        fi
+        case "$xxOsRevMajor" in
+        10)
+            # Under 10.X, a threaded perl can be built, but it needs
+            # libcma and OLD_PTHREADS_API.  Also <pthread.h> needs to
+            # be #included before any other includes (in perl.h)
+            if [ ! -f /usr/include/pthread.h -o ! -f /usr/lib/libcma.sl ]; then
+                cat <<EOM >&4
+In HP-UX 10.X for POSIX threads you need both of the files
+/usr/include/pthread.h and /usr/lib/libcma.sl.
+Either you must install the CMA package or you must upgrade to HP-UX 11.
+Cannot continue, aborting.
+EOM
+               exit 1
+            fi
+
+            # HP-UX 10.X uses the old pthreads API
+            case "$d_oldpthreads" in
+            '') d_oldpthreads="$define" ;;
+            esac
+
+            # include libcma before all the others
+            libswanted="cma $libswanted"
+
+            # tell perl.h to include <pthread.h> before other include files
+            ccflags="$ccflags -DPTHREAD_H_FIRST"
+
+            # CMA redefines select to cma_select, and cma_select expects int *
+            # instead of fd_set * (just like 9.X)
+            selecttype='int *'
+            ;;
+        11 | 12) # 12 may want upping the _POSIX_C_SOURCE
+            ccflags="$ccflags -D_POSIX_C_SOURCE=199506L"
+            libswanted="$libswanted pthread"
+           ;;
+        esac
+       ;;
+esac
+EOCBU
+
+# This script UU/use64bits.cbu will get 'called-back' by Configure 
+# after it has prompted the user for whether to use 64 bits.
+cat > UU/use64bits.cbu <<'EOCBU'
+case "$use64bits" in
+$define|true|[yY]*)
+           if [ "$xxOsRevMajor" -lt 11 ]; then
+               cat <<EOM >&4
+64-bit compilation is not supported on HP-UX $xxOsRevMajor.
+You need at least HP-UX 11.0.
+Cannot continue, aborting.
+EOM
+               exit 1
+           fi
+           if [ ! -d /lib/pa20_64 ]; then
+               cat <<EOM >&4
+You do not seem to have the 64-bit libraries, /lib/pa20_64.
+Cannot continue, aborting.
+EOM
+               exit 1
+           fi
+           ccflags="$ccflags +DD64 -D_FILE_OFFSET_BITS=64"
+           ldflags="$ldflags +DD64"
+           ld=/usr/bin/ld
+           set `echo " $libswanted " | sed -e 's@ dl @ @'`
+           libswanted="$*"
+           glibpth="/lib/pa20_64"
+esac
+EOCBU
index f5883f3..1e90f98 100644 (file)
@@ -22,3 +22,24 @@ If you have problems, you might have try including
        -DSTANDARD_C -cckr 
 in ccflags.
 EOM
+
+case "$usethreads" in
+$define|true|[yY]*)
+        cat >&4 <<EOM
+IRIX `uname -r` does not support POSIX threads.
+You should upgrade to at least IRIX 6.2 with pthread patches.
+EOM
+       exit 1
+       ;;
+esac
+
+case "$use64bits" in
+$define|true|[yY]*)
+       cat >&4 <<EOM
+IRIX `uname -r` does not support 64-bit types.
+You should upgrade to at least IRIX 6.2.
+Cannot continue, aborting.
+EOM
+       exit 1
+esac
+
index 9d6e802..30f11d7 100644 (file)
@@ -32,3 +32,24 @@ libswanted="$*"
 # patchSG0000596.  The patch can be downloaded from Advantage OnLine (SGI's
 # WWW server) or from the Support Advantage 9/95 Patch CDROM.  Thanks to Tom 
 # Christiansen and others who provided assistance.
+
+case "$usethreads" in
+$define|true|[yY]*)
+        cat >&4 <<EOM
+IRIX `uname -r` does not support POSIX threads.
+You should upgrade to at least IRIX 6.2 with pthread patches.
+EOM
+       exit 1
+       ;;
+esac
+
+case "$use64bits" in
+$define|true|[yY]*)
+       cat >&4 <<EOM
+IRIX `uname -r` does not support 64-bit types.
+You should upgrade to at least IRIX 6.2.
+Cannot continue, aborting.
+EOM
+       exit 1
+esac
+
index 8f4dbd6..e6ad096 100644 (file)
@@ -161,3 +161,89 @@ set `echo X "$libswanted "|sed -e 's/ sun / /' -e 's/ crypt / /' -e 's/ bsd / /'
 shift
 libswanted="$*"
 
+# This script UU/usethreads.cbu will get 'called-back' by Configure 
+# after it has prompted the user for whether to use threads.
+cat > UU/usethreads.cbu <<'EOCBU'
+case "$usethreads" in
+$define|true|[yY]*)
+        if test ! -f ${TOOLROOT}/usr/include/pthread.h -o ! -f /usr/lib/libpthread.so; then
+            case "`uname -r`" in
+            [1-5].*|6.[01])
+               cat >&4 <<EOM
+IRIX `uname -r` does not support POSIX threads.
+You should upgrade to at least IRIX 6.2 with pthread patches.
+EOM
+               ;;
+           6.2)
+               cat >&4 <<EOM
+IRIX 6.2 can have the POSIX threads.
+However,the following IRIX patches (or their replacements) MUST be installed:
+        1404 Irix 6.2 Posix 1003.1b man pages
+        1645 IRIX 6.2 & 6.3 POSIX header file updates
+        2000 Irix 6.2 Posix 1003.1b support modules
+        2254 Pthread library fixes
+       2401 6.2 all platform kernel rollup
+IMPORTANT:
+       Without patch 2401, a kernel bug in IRIX 6.2 will
+       cause your machine to panic and crash when running
+       threaded perl. IRIX 6.3 and up should be OK.
+EOM
+               ;;
+           [67].*)
+               cat >&4 <<EOM
+IRIX `uname -r` should have the POSIX threads.
+But, somehow, you do not seem to have them installed.
+EOM
+               ;;
+           esac
+            cat >&4 <<EOM
+Cannot continue, aborting.
+EOM
+            exit 1
+        fi
+        set `echo X "$libswanted "| sed -e 's/ c / pthread /'`
+        ld="${cc:-cc}"
+        shift
+        libswanted="$*"
+
+        usemymalloc='n'
+       ;;
+esac
+EOCBU
+
+# This script UU/use64bits.cbu will get 'called-back' by Configure 
+# after it has prompted the user for whether to use 64 bits.
+cat > UU/use64bits.cbu <<'EOCBU'
+case "$use64bits" in
+$define|true|[yY]*)
+esac
+           case "`uname -r`" in
+           [1-5]*|6.[01])
+               cat >&4 <<EOM
+IRIX `uname -r` does not support 64-bit types.
+You should upgrade to at least IRIX 6.2.
+Cannot continue, aborting.
+EOM
+               exit 1
+               ;;
+           esac
+           case "$ccflags" in
+           *-n32*)
+               ccflags="$ccflags -DUSE_LONG_LONG"
+               archname64="-n32"
+               d_open64="$undef"
+               # In -n32 mode (ILP32LL64) we use the standard open().
+               # In -64 we will use the open64().
+               cat << 'EOM' >&2
+
+You will see a *** WHOA THERE!!! ***  message from Configure for
+d_open64.  Keep the recommended value.  See hints/irix6.sh
+for more information.
+
+EOM
+               ;;
+           esac
+           ccflags="$ccflags -DUSE_64_BIT_FILES"
+           ;;
+esac
+EOCBU
index 38fe27d..b34b3ec 100644 (file)
@@ -41,3 +41,24 @@ libswanted="$*"
 # set `echo X "$libswanted "|sed -e 's/ socket / /' -e 's/ sun / /' -e 's/ crypt / /' -e 's/ nsl / /' -e 's/ dl / /'`
 # shift
 # libswanted="$*"
+
+case "$usethreads" in
+$define|true|[yY]*)
+        cat >&4 <<EOM
+IRIX `uname -r` does not support POSIX threads.
+You should upgrade to at least IRIX 6.2 with pthread patches.
+EOM
+       exit 1
+       ;;
+esac
+
+case "$use64bits" in
+$define|true|[yY]*)
+       cat >&4 <<EOM
+IRIX `uname -r` does not support 64-bit types.
+You should upgrade to at least IRIX 6.2.
+Cannot continue, aborting.
+EOM
+       exit 1
+esac
+
index 38fe27d..3359639 100644 (file)
@@ -41,3 +41,23 @@ libswanted="$*"
 # set `echo X "$libswanted "|sed -e 's/ socket / /' -e 's/ sun / /' -e 's/ crypt / /' -e 's/ nsl / /' -e 's/ dl / /'`
 # shift
 # libswanted="$*"
+
+case "$usethreads" in
+$define|true|[yY]*)
+        cat >&4 <<EOM
+IRIX `uname -r` does not support POSIX threads.
+You should upgrade to at least IRIX 6.2 with pthread patches.
+EOM
+       exit 1
+       ;;
+esac
+
+case "$use64bits" in
+$define|true|[yY]*)
+       cat >&4 <<EOM
+IRIX `uname -r` does not support 64-bit types.
+You should upgrade to at least IRIX 6.2.
+Cannot continue, aborting.
+EOM
+       exit 1
+esac
index 9b69e9b..a49e004 100644 (file)
@@ -216,3 +216,15 @@ fi
 # it should be:
 # ccdlflags='-Wl,-E'
 
+# This script UU/usethreads.cbu will get 'called-back' by Configure 
+# after it has prompted the user for whether to use threads.
+cat > UU/usethreads.cbu <<'EOCBU'
+case "$usethreads" in
+$define|true|[yY]*)
+        ccflags="-D_REENTRANT $ccflags"
+        set `echo X "$libswanted "| sed -e 's/ c / pthread c /'`
+        shift
+        libswanted="$*"
+       ;;
+esac
+EOCBU
index 0560175..1744fa9 100644 (file)
@@ -289,6 +289,20 @@ for xxx in * ; do
        fi
 done
 
+# This script UU/usethreads.cbu will get 'called-back' by Configure 
+# after it has prompted the user for whether to use threads.
+cat > UU/usethreads.cbu <<'EOCBU'
+case "$usethreads" in
+$define|true|[yY]*)
+esac
+       ccflags="-Zmt $ccflags"
+        cppflags="-Zmt $cppflags"  # Do we really need to set this?
+        aout_ccflags="-DUSE_THREADS $aout_ccflags"
+        aout_cppflags="-DUSE_THREADS $aout_cppflags"
+        aout_lddlflags="-Zmt $aout_lddlflags"
+        aout_ldflags="-Zmt $aout_ldflags"
+       ;;
+EOCBU
 
 # Now go back
 cd ../..
index e518540..98230dd 100644 (file)
@@ -261,6 +261,77 @@ rm -f core
 # XXX
 EOSH
 
+# This script UU/usethreads.cbu will get 'called-back' by Configure 
+# after it has prompted the user for whether to use threads.
+cat > UU/usethreads.cbu <<'EOCBU'
+case "$usethreads" in
+$define|true|[yY]*)
+esac
+        ccflags="-D_REENTRANT $ccflags"
+
+        # sched_yield is in -lposix4
+        set `echo X "$libswanted "| sed -e 's/ c / posix4 pthread c /'`
+        shift
+        libswanted="$*"
+
+        # On Solaris 2.6 x86 there is a bug with sigsetjmp() and siglongjmp()
+        # 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.
+        # 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_sigsetjmp.  Keep the recommended value.  See hints/solaris_2.sh
+for more information.
+
+EOM
+        fi
+       ;;
+EOCBU
+
+# This script UU/use64bits.cbu will get 'called-back' by Configure 
+# after it has prompted the user for whether to use 64 bits.
+cat > UU/use64bits.cbu <<'EOCBU'
+case "$use64bits" in
+$define|true|[yY]*)
+           case "`uname -r`" in
+           2.[1-5])
+               cat >&4 <<EOM
+Solaris `uname -r` does not support 64-bit interfaces.
+You should upgrade to at least Solaris 2.6.
+EOM
+               exit 1
+               ;;
+           esac
+           ccflags="$ccflags `getconf LFS_CFLAGS` -DUSE_LONG_LONG"
+           ldflags="$ldflags `getconf LFS_LDFLAGS`"
+           libswanted="$libswanted `getconf LFS_LIBS`"
+           # When a 64-bit cc becomes available $archname64
+           # may need setting so that $archname gets it attached.
+           ;;
+esac
+EOCBU
+
 # This is just a trick to include some useful notes.
 cat > /dev/null <<'End_of_Solaris_Notes'
 
diff --git a/perl.c b/perl.c
index 95cb0d0..8a4fedf 100644 (file)
--- a/perl.c
+++ b/perl.c
@@ -64,6 +64,9 @@ static void my_exit_jump _((void)) __attribute__((noreturn));
 static void nuke_stacks _((void));
 static void open_script _((char *, bool, SV *, int *fd));
 static void usage _((char *));
+#ifdef IAMSUID
+static int  fd_on_nosuid_fs _((int));
+#endif
 static void validate_suid _((char *, char*, int));
 static I32 read_e_script _((int idx, SV *buf_sv, int maxlen));
 #endif
@@ -2110,6 +2113,70 @@ sed %s -e \"/^[^#]/b\" \
     }
 }
 
+#ifdef IAMSUID
+static int
+fd_on_nosuid_fs(int fd)
+{
+    int on_nosuid  = 0;
+    int check_okay = 0;
+/*
+ * Preferred order: fstatvfs(), fstatfs(), getmntent().
+ * fstatvfs() is UNIX98.
+ * fstatfs() is BSD.
+ * getmntent() is O(number-of-mounted-filesystems) and can hang.
+ */
+
+#   ifdef HAS_FSTATVFS
+    struct statvfs stfs;
+    check_okay = fstatvfs(fd, &stfs) == 0;
+    on_nosuid  = check_okay && (stfs.f_flag  & ST_NOSUID);
+#   else
+#       if defined(HAS_FSTATFS) && defined(HAS_STRUCT_STATFS_FLAGS)
+    struct statfs  stfs;
+    check_okay = fstatfs(fd, &stfs)  == 0;
+#           undef PERL_MOUNT_NOSUID
+#           if !defined(PERL_MOUNT_NOSUID) && defined(MNT_NOSUID)
+#              define PERL_MOUNT_NOSUID MNT_NOSUID
+#           endif
+#           if !defined(PERL_MOUNT_NOSUID) && defined(MS_NOSUID)
+#              define PERL_MOUNT_NOSUID MS_NOSUID
+#           endif
+#           if !defined(PERL_MOUNT_NOSUID) && defined(M_NOSUID)
+#              define PERL_MOUNT_NOSUID M_NOSUID
+#           endif
+#           ifdef PERL_MOUNT_NOSUID
+    on_nosuid  = check_okay && (stfs.f_flags & PERL_MOUNT_NOSUID);
+#           endif
+#       else
+#           if defined(HAS_GETMNENT) && defined(HAS_HASMNTOPT) && defined(MNTOPT_NOSUID)
+    FILE               *mtab = fopen("/etc/mtab", "r");
+    struct mntent      *entry;
+    struct stat                stb, fsb;
+
+    if (mtab && (fstat(fd, &stb) == 0)) {
+       while (entry = getmntent(mtab)) {
+           if (stat(entry->mnt_dir, &fsb) == 0
+               && fsb.st_dev == stb.st_dev)
+           {
+               /* found the filesystem */
+               check_okay = 1;
+               if (hasmntopt(entry, MNTOPT_NOSUID))
+                   on_nosuid = 1;
+               break;
+           } /* A single fs may well fail its stat(). */
+       }
+    }
+    if (mtab)
+       fclose(mtab);
+#           endif /* mntent */
+#       endif /* statfs */
+#   endif /* statvfs */
+    if (!check_okay) 
+       croak("Can't check filesystem of script \"%s\"", PL_origfilename);
+    return on_nosuid;
+}
+#endif /* IAMSUID */
+
 STATIC void
 validate_suid(char *validarg, char *scriptname, int fdscript)
 {
@@ -2178,6 +2245,10 @@ validate_suid(char *validarg, char *scriptname, int fdscript)
                croak("Can't swap uid and euid");       /* really paranoid */
            if (PerlLIO_stat(SvPVX(GvSV(PL_curcop->cop_filegv)),&tmpstatbuf) < 0)
                croak("Permission denied");     /* testing full pathname here */
+#ifdef IAMSUID
+           if (fd_on_nosuid_fs(PerlIO_fileno(PL_rsfp)))
+               croak("Permission denied");
+#endif
            if (tmpstatbuf.st_dev != PL_statbuf.st_dev ||
                tmpstatbuf.st_ino != PL_statbuf.st_ino) {
                (void)PerlIO_close(PL_rsfp);
diff --git a/perl.h b/perl.h
index 1546bcd..9dd71e5 100644 (file)
--- a/perl.h
+++ b/perl.h
@@ -2778,4 +2778,22 @@ typedef struct am_table_short AMTS;
 #   endif
 #endif
 
+/* Mention INSTALL_USR_BIN_PERL here so that Configure picks it up. */
+
+#ifdef IAMSUID
+
+#ifdef I_SYS_STATVFS
+#   include <sys/statvfs.h>
+#else
+#   ifdef I_SYS_MOUNT
+#       include <sys/mount.h>
+#   else
+#       ifdef I_MNTENT
+#           include <mntent.h>
+#       endif
+#   endif
+#endif
+
+#endif /* IAMSUID */
+
 #endif /* Include guard */
index 211262c..fc36274 100644 (file)
@@ -517,6 +517,10 @@ Something like this will reproduce the error:
 (F) You called C<perl -x/foo/bar>, but C</foo/bar> is not a directory
 that you can chdir to, possibly because it doesn't exist.
 
+=item Can't check filesystem of script "%s"
+
+(P) For some reason you can't check the filesystem of the script for nosuid.
+
 =item Can't coerce %s to integer in %s
 
 (F) Certain types of SVs, in particular real symbol table entries