diff options
author | Jarkko Hietaniemi <jhi@iki.fi> | 1999-01-19 12:44:02 +0000 |
---|---|---|
committer | Jarkko Hietaniemi <jhi@iki.fi> | 1999-01-19 12:44:02 +0000 |
commit | 104d25b722892cb36f4c988c17016ee0180c3b1a (patch) | |
tree | 109792e6430e500a9464f9002871477456f0bed5 | |
parent | b478f28d3c42f92a71da0b37f44cc5e7d70574a6 (diff) | |
download | perl-104d25b722892cb36f4c988c17016ee0180c3b1a.tar.gz |
Jumbo Configure update.
* -Uinstallusrbinperl: disable /usr/bin/perl installation
by installperl
* usethreads.cbu
* use64bits.cbu
* "nosuid"
p4raw-id: //depot/cfgperl@2649
-rwxr-xr-x | Configure | 428 | ||||
-rw-r--r-- | config_h.SH | 52 | ||||
-rw-r--r-- | hints/aix.sh | 38 | ||||
-rw-r--r-- | hints/dec_osf.sh | 24 | ||||
-rw-r--r-- | hints/dos_djgpp.sh | 12 | ||||
-rw-r--r-- | hints/freebsd.sh | 35 | ||||
-rw-r--r-- | hints/hpux.sh | 81 | ||||
-rw-r--r-- | hints/irix_4.sh | 21 | ||||
-rw-r--r-- | hints/irix_5.sh | 21 | ||||
-rw-r--r-- | hints/irix_6.sh | 86 | ||||
-rw-r--r-- | hints/irix_6_0.sh | 21 | ||||
-rw-r--r-- | hints/irix_6_1.sh | 20 | ||||
-rw-r--r-- | hints/linux.sh | 12 | ||||
-rw-r--r-- | hints/os2.sh | 14 | ||||
-rw-r--r-- | hints/solaris_2.sh | 71 | ||||
-rw-r--r-- | perl.c | 71 | ||||
-rw-r--r-- | perl.h | 18 | ||||
-rw-r--r-- | pod/perldiag.pod | 4 |
18 files changed, 701 insertions, 328 deletions
@@ -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' diff --git a/config_h.SH b/config_h.SH index d286068a2c..dc17cf6134 100644 --- a/config_h.SH +++ b/config_h.SH @@ -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. diff --git a/hints/aix.sh b/hints/aix.sh index bbcc52210f..727cf93fd6 100644 --- a/hints/aix.sh +++ b/hints/aix.sh @@ -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 diff --git a/hints/dec_osf.sh b/hints/dec_osf.sh index b2a730004b..686ae2c089 100644 --- a/hints/dec_osf.sh +++ b/hints/dec_osf.sh @@ -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. # + + diff --git a/hints/dos_djgpp.sh b/hints/dos_djgpp.sh index 94c09d0e6a..db09cbc6d9 100644 --- a/hints/dos_djgpp.sh +++ b/hints/dos_djgpp.sh @@ -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 + diff --git a/hints/freebsd.sh b/hints/freebsd.sh index d6384628e7..96df283579 100644 --- a/hints/freebsd.sh +++ b/hints/freebsd.sh @@ -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 diff --git a/hints/hpux.sh b/hints/hpux.sh index ceef5a3a5b..70250b7a75 100644 --- a/hints/hpux.sh +++ b/hints/hpux.sh @@ -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 diff --git a/hints/irix_4.sh b/hints/irix_4.sh index f5883f38cb..1e90f989bd 100644 --- a/hints/irix_4.sh +++ b/hints/irix_4.sh @@ -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 + diff --git a/hints/irix_5.sh b/hints/irix_5.sh index 9d6e80246c..30f11d7676 100644 --- a/hints/irix_5.sh +++ b/hints/irix_5.sh @@ -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 + diff --git a/hints/irix_6.sh b/hints/irix_6.sh index 8f4dbd64af..e6ad0964c5 100644 --- a/hints/irix_6.sh +++ b/hints/irix_6.sh @@ -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 diff --git a/hints/irix_6_0.sh b/hints/irix_6_0.sh index 38fe27d282..b34b3ecaff 100644 --- a/hints/irix_6_0.sh +++ b/hints/irix_6_0.sh @@ -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 + diff --git a/hints/irix_6_1.sh b/hints/irix_6_1.sh index 38fe27d282..3359639818 100644 --- a/hints/irix_6_1.sh +++ b/hints/irix_6_1.sh @@ -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 diff --git a/hints/linux.sh b/hints/linux.sh index 9b69e9b4ac..a49e004bbd 100644 --- a/hints/linux.sh +++ b/hints/linux.sh @@ -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 diff --git a/hints/os2.sh b/hints/os2.sh index 0560175ae1..1744fa96dd 100644 --- a/hints/os2.sh +++ b/hints/os2.sh @@ -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 ../.. diff --git a/hints/solaris_2.sh b/hints/solaris_2.sh index e518540b40..98230dda6b 100644 --- a/hints/solaris_2.sh +++ b/hints/solaris_2.sh @@ -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' @@ -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); @@ -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 */ diff --git a/pod/perldiag.pod b/pod/perldiag.pod index 211262c626..fc36274059 100644 --- a/pod/perldiag.pod +++ b/pod/perldiag.pod @@ -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 |