# $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
sockethdr=''
socketlib=''
d_statblks=''
+d_fstatfs=''
+d_statfs=''
+d_statfsflags=''
+d_fstatvfs=''
+d_statvfs=''
d_stdio_cnt_lval=''
d_stdio_ptr_lval=''
d_stdiobase=''
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=''
i_varargs=''
i_varhdr=''
i_vfork=''
+installusrbinperl=''
intsize=''
longsize=''
shortsize=''
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" ;;
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
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
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;
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
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
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'
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'
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'
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'
installscript='$installscript'
installsitearch='$installsitearch'
installsitelib='$installsitelib'
+installusrbinperl='$installusrbinperl'
intsize='$intsize'
known_extensions='$known_extensions'
ksh='$ksh'
*/
#$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.
*/
#$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.
*/
#$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
* 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 /**/
*/
#$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.
;;
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
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.
#
# * Set -Olimit to 3200 because perl_yylex.c got too big
# for the optimizer.
#
+
+
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
+
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
# 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
-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
+
# 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
+
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
# 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
+
# 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
# 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
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 ../..
# 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'
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
}
}
+#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)
{
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);
# 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 */
(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