# you should use metaconfig. Perl uses a modified version of this
# tool, and this, together with the metaconfig units, are available
# in the git repository:
-# $ git clone https://github.com/perl5-metaconfig/metaconfig metaconfig
+# $ git clone https://github.com/Perl/metaconfig metaconfig
# The original dist package (including metaconfig) is available on github:
# $ git clone https://github.com/rmanfredi/dist.git dist-git
#
# Porting/pumpkin.pod.
# Generated using [metaconfig 3.5 PL0]
-# (with additional metaconfig patches by perlbug@perl.org)
+# with additional metaconfig patches from https://github.com/Perl/metaconfig
cat >c1$$ <<EOF
ARGGGHHHH!!!!!
d_asctime_r=''
d_asinh=''
d_atanh=''
+d_attribute_always_inline=''
d_attribute_deprecated=''
d_attribute_format=''
d_attribute_malloc=''
d_madvise=''
d_malloc_good_size=''
d_malloc_size=''
+d_malloc_usable_size=''
d_mblen=''
d_mbrlen=''
d_mbrtowc=''
d_sin6_scope_id=''
d_sockaddr_in6=''
d_sockaddr_sa_len=''
+d_sockaddr_storage=''
d_socket=''
d_sockpair=''
sockethdr=''
signal_t=''
d_wait4=''
d_waitpid=''
+d_wcrtomb=''
d_wcscmp=''
d_wcstombs=''
d_wcsxfrm=''
usequadmath=''
usesocks=''
d_oldpthreads=''
-use5005threads=''
useithreads=''
usereentrant=''
usethreads=''
$me: Fatal Error: I can't find a Bourne Shell anywhere.
Usually it's in /bin/sh. How did you even get this far?
-Please contact me (Perl Maintainers) at perlbug@perl.org and
-we'll try to straighten this all out.
+Please report this issue at https://github.com/Perl/perl5/issues
+and we'll try to straighten this all out.
EOM
exit 1
;;
You have the option of continuing the configuration process, despite the
distinct possibility that your kit is damaged, by typing 'y'es. If you
do, don't blame me if something goes wrong. I advise you to type 'n'o
-and contact the author (perlbug@perl.org).
+and contact the author (https://github.com/Perl/perl5/issues).
EOM
echo $n "Continue? [n] $c" >&4
Unix system. If despite that it blows up on yours, your best bet is to edit
Configure and run it again. If you can't run Configure for some reason,
you'll have to generate a config.sh file by hand. Whatever problems you
-have, let me (perlbug@perl.org) know how I blew it.
+have, let me (https://github.com/Perl/perl5/issues) know how I blew it.
This installation script affects things in two ways:
(cd $src/hints; ls -C *.sh) | $sed 's/\.sh/ /g' >&4
dflt=''
: Half the following guesses are probably wrong... If you have better
- : tests or hints, please send them to perlbug@perl.org
+ : tests or hints, please send them to https://github.com/Perl/perl5/issues
: The metaconfig authors would also appreciate a copy...
$test -f /irix && osname=irix
$test -f /xenix && osname=sco_xenix
: determine root of directory hierarchy where package will be installed.
case "$prefix" in
-'')
- dflt=`./loc . /usr/local /usr/local /local /opt /usr`
- ;;
-*?/)
- dflt=`echo "$prefix" | sed 's/.$//'`
+'') dflt=`./loc . /usr/local /usr/local /local /opt /usr`
;;
-*)
- dflt="$prefix"
+*) dflt="$prefix"
;;
esac
$cat <<EOM
. ./getfile
oldprefix=''
case "$prefix" in
-'') ;;
-*)
- case "$ans" in
+'') ;;
+*) case "$ans" in
"$prefix") ;;
*) oldprefix="$prefix";;
esac
;;
esac
-prefix="$ans"
-prefixexp="$ansexp"
+
+case "$ans" in
+*?/) prefix=`echo "$ans" | sed 's/.$//'`
+ ;;
+*) prefix="$ans"
+esac
+
+case "$ansexp" in
+*?/) prefixexp=`echo "$ansexp" | sed 's/.$//'`
+ ;;
+*) prefixexp="$ansexp"
+esac
: allow them to override the AFS root
case "$afsroot" in
: Do we want threads support and if so, what type
case "$usethreads" in
$define|true|[yY]*) dflt='y';;
-*) # Catch case where user specified ithreads or 5005threads but
+*) # Catch case where user specified ithreads but
# forgot -Dusethreads (A.D. 4/2002)
- case "$useithreads$use5005threads" in
+ case "$useithreads" in
*$define*) dflt='y';;
*) dflt='n';;
esac
set usethreads
eval $setvar
-if $test $patchlevel -lt 9; then
- case "$usethreads" in
- $define)
- : Default to ithreads unless overridden on command line or with
- : old config.sh
- dflt='y'
- case "$use5005threads" in
- $define|true|[yY]*)
- echo "5.005 threads are no longer supported"
- exit 1
- ;;
- esac
- case "$useithreads" in
- $undef|false|[nN]*) dflt='n';;
- esac
- rp='Use the newer interpreter-based ithreads?'
- . ./myread
- case "$ans" in
- y|Y) val="$define" ;;
- *) val="$undef" ;;
- esac
- set useithreads
- eval $setvar
- : Now set use5005threads to the opposite value.
- case "$useithreads" in
- $define) val="$undef" ;;
- *) val="$define" ;;
- esac
- set use5005threads
- eval $setvar
- ;;
- *)
- useithreads="$undef"
- use5005threads="$undef"
- ;;
- esac
-
- case "$useithreads$use5005threads" in
- "$define$define")
- $cat >&4 <<EOM
-
-You cannot have both the ithreads and the 5.005 threads enabled
-at the same time. Disabling the 5.005 threads since they are
-much less stable than the ithreads.
-
-EOM
- use5005threads="$undef"
- ;;
- esac
-
-else
-: perl-5.9.x and later
-
- if test X"$usethreads" = "X$define"; then
- case "$use5005threads" in
- $define|true|[yY]*)
- $cat >&4 <<EOM
-
-5.005 threads has been removed for 5.10. Perl will be built using ithreads.
-
-EOM
- ;;
- esac
- fi
-
- use5005threads="$undef"
- useithreads="$usethreads"
-fi
+useithreads="$usethreads"
case "$d_oldpthreads" in
'') : Configure tests would be welcome here. For now, assume undef.
fi
$rm -f try try.*
case "$gccversion" in
-1*) cpp=`./loc gcc-cpp $cpp $pth` ;;
+1.*) cpp=`./loc gcc-cpp $cpp $pth` ;;
esac
case "$gccversion" in
'') gccosandvers='' ;;
# gcc 3.* complain about adding -Idirectories that they already know about,
# so we will take those off from locincpth.
case "$gccversion" in
-3*)
+3.*)
echo "main(){}">try.c
for incdir in $locincpth; do
warn=`$cc $ccflags -I$incdir -c try.c 2>&1 | \
case "$hint" in
default|recommended)
case "$gccversion" in
- 1*) dflt="$dflt -fpcc-struct-return" ;;
+ 1.*) dflt="$dflt -fpcc-struct-return" ;;
esac
case "$optimize:$DEBUGGING" in
*-g*:old) dflt="$dflt -DDEBUGGING";;
esac
case "$gccversion" in
- 2*) if $test -d /etc/conf/kconfig.d &&
+ 2.*) if $test -d /etc/conf/kconfig.d &&
$contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1
then
# Interactive Systems (ISC) POSIX mode.
;;
esac
case "$gccversion" in
- 1*) ;;
+ 1.*) ;;
2.[0-8]*) ;;
?*) set strict-aliasing -fno-strict-aliasing
eval $checkccflag
;;
esac
case "$gccversion" in
-1*) cppflags="$cppflags -D__GNUC__"
+1.*) cppflags="$cppflags -D__GNUC__"
esac
case "$mips_type" in
'');;
mc_file=$1;
shift;
case "$usedevel" in $define|true|[yY]*) if $test ! -f "${mc_file}.c"; then
-echo "Internal Configure script bug - compiler test file ${mc_file}.c is missing. Please report this to perlbug@perl.org" >&4;
+echo "Internal Configure script bug - compiler test file ${mc_file}.c is missing. Please report this to https://github.com/Perl/perl5/issues" >&4;
exit 1;
fi;
esac;
none)
eval "tp=\"\$$2\"";
case "$tp" in
- ""|" ") eval "$1=\"\$$2\"";;
+ ""|" "|none) eval "$1=\"\$$2\"";;
*) eval "$1=";;
esac;;
esac;;
: Determine list of previous versions to include in @INC
$cat > getverlist <<EOPL
-#!$perl5 -w
+#!$perl5
+use strict;
+use warnings;
use File::Basename;
-\$api_versionstring = "$api_versionstring";
-\$version = "$version";
-\$stem = "$sitelib_stem";
-\$archname = "$archname";
+my \$api_versionstring = "$api_versionstring";
+my \$version = "$version";
+my \$stem = "$sitelib_stem";
+my \$archname = "$archname";
EOPL
$cat >> getverlist <<'EOPL'
-# The list found is store twice for each entry: the original name, and
-# the binary broken down version as pack "sss", so sorting is easy and
-# unambiguous. This will work for all versions that have a maximum of
-# three digit groups, separate by '.'s or '_'s. Names are extended with
-# ".0.0" to ensure at least three elements for the pack.
-# -- H.Merijn Brand (m)'06 23-10-2006
-
-# Can't have leading @ because metaconfig interprets it as a command!
-;@inc_version_list=();
+# The list found is stored twice for each entry: the original name, and
+# the binary broken down version into pack "s>s>s>", so sorting is easy
+# and unambiguous. This will work for all versions that have a maximum
+# of three digit per group separate by '.'s or '_'s. Names are extended
+# with ".0.0" to ensure at least three elements for the pack.
+# -- H.Merijn Brand (m)'06 23-10-2006
+
+my @inc_version_list;
+my @candidates;
# XXX Redo to do opendir/readdir?
if (-d $stem) {
chdir($stem);
;@candidates = map {
- [ $_, pack "sss", split m/[._]/, "$_.0.0" ] } glob("5.*");
+ [ $_, pack "s>s>s>", split m/[._]/, "$_.0.0" ] } glob("5.*");
;@candidates = sort { $a->[1] cmp $b->[1]} @candidates;
}
else {
;@candidates = ();
}
-($pversion, $aversion, $vsn5005) = map {
- pack "sss", split m/[._]/, "$_.0.0" } $version, $api_versionstring, "5.005";
-foreach $d (@candidates) {
+my ($pversion, $aversion, $vsn5005) = map {
+ pack "s>s>s>", split m/[._]/, "$_.0.0" } $version, $api_versionstring, "5.005";
+foreach my $d (@candidates) {
if ($d->[1] lt $pversion) {
if ($d->[1] ge $aversion) {
unshift(@inc_version_list, grep { -d } $d->[0]."/$archname", $d->[0]);
if $test "X$sysroot" != X; then
case "$gccversion" in
'') ;;
- *) dflt="$dflt --sysroot $sysroot" ;;
+ *) dflt="$dflt --sysroot=$sysroot" ;;
esac
fi
*) $cat >&4 <<EOM
WARNING: Use of the shrpdir variable for the installation location of
the shared $libperl is not supported. It was never documented and
-will not work in this version. Let me (perlbug@perl.org)
+will not work in this version. Let me (https://github.com/Perl/perl5/issues)
know of any problems this may cause.
EOM
set backtrace d_backtrace
eval $inlibc
-: add flags if using c backtrace
+: Check if C backtrace is actually supported.
case "$usecbacktrace" in
"") usecbacktrace=$undef ;;
[yY]*|true|$define)
case "$d_backtrace" in
[yY]*|true|$define)
- case " $ccflags " in
- *" -DUSE_C_BACKTRACE "*) ;; # Already there.
- *) ccflags="$ccflags -DUSE_C_BACKTRACE -g" ;;
- esac
;;
*)
echo "This system does not support backtrace" >&4
$cat >>try.c <<EOP
#ifdef TRY_gconvert
#define Gconvert(x,n,t,b) gconvert((x),(n),(t),(b))
-char *myname = "gconvert";
+const char *myname = "gconvert";
#endif
#ifdef TRY_gcvt
#define Gconvert(x,n,t,b) gcvt((x),(n),(b))
-char *myname = "gcvt";
+const char *myname = "gcvt";
#endif
#ifdef TRY_qgcvt
#define Gconvert(x,n,t,b) qgcvt((x),(n),(b))
-char *myname = "qgcvt";
+const char *myname = "qgcvt";
#define DOUBLETYPE long double
#endif
#ifdef TRY_sprintf
#else
#define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x))
#endif
-char *myname = "sprintf";
+const char *myname = "sprintf";
#endif
#ifndef DOUBLETYPE
#endif
#include <string.h>
-int checkit(char *expect, char *got)
+void checkit(const char *expect, char *got)
{
if (strcmp(expect, got)) {
printf("%s oddity: Expected %s, got %s\n",
fi
else
echo "$xxx_convert NOT found." >&4
+ xxx_convert=''
fi
done
eval $setvar
$rm -f attrib*
+: Look for GCC-style attribute always_inline
+case "$d_attribute_always_inline" in
+'')
+echo " "
+echo "Checking whether your compiler can handle __attribute__((always_inline)) ..." >&4
+$cat >attrib.c <<'EOCP'
+#include <stdio.h>
+static __inline__ __attribute__((always_inline)) int I_will_always_be_inlined(void);
+EOCP
+if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
+ if $contains 'warning' attrib.out >/dev/null 2>&1; then
+ echo "Your C compiler doesn't support __attribute__((always_inline))."
+ val="$undef"
+ else
+ echo "Your C compiler supports __attribute__((always_inline))."
+ val="$define"
+ fi
+else
+ echo "Your C compiler doesn't seem to understand __attribute__ at all."
+ val="$undef"
+fi
+;;
+*) val="$d_attribute_always_inline" ;;
+esac
+set d_attribute_always_inline
+eval $setvar
+$rm -f attrib*
+
: see if getpgrp exists
set getpgrp d_getpgrp
eval $inlibc
echo " "
echo "Checking to see which flavor of getpgrp is in use..."
$cat >try.c <<EOP
+#include <stdio.h>
#$i_unistd I_UNISTD
#include <sys/types.h>
#ifdef I_UNISTD
echo " "
echo "Checking to see which flavor of setpgrp is in use..."
$cat >try.c <<EOP
+#include <stdio.h>
#$i_unistd I_UNISTD
#include <sys/types.h>
#ifdef I_UNISTD
eval $inlibc
-echo " "
echo "Checking the availability sa_len in the sock struct ..." >&4
$cat >try.c <<EOF
#include <sys/types.h>
set d_sockaddr_sa_len; eval $setvar
$rm_try
-echo " "
echo "Checking the availability struct sockaddr_in6 ..." >&4
$cat >try.c <<EOF
#include <sys/types.h>
set d_sockaddr_in6; eval $setvar
$rm_try
-echo " "
+echo "Checking the availability struct sockaddr_storage ..." >&4
+$cat >try.c <<EOF
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+int main() {
+struct sockaddr_storage sastor;
+return (sastor.ss_family);
+}
+EOF
+val="$undef"
+set try; if eval $compile; then
+ val="$define"
+fi
+set d_sockaddr_storage; eval $setvar
+$rm_try
+
echo "Checking the availability sin6_scope_id in struct sockaddr_in6 ..." >&4
$cat >try.c <<EOF
#include <sys/types.h>
set d_sin6_scope_id; eval $setvar
$rm_try
-echo " "
echo "Checking the availability struct ip_mreq ..." >&4
$cat >try.c <<EOF
#include <sys/types.h>
set d_ip_mreq; eval $setvar
$rm_try
-echo " "
echo "Checking the availability struct ip_mreq_source ..." >&4
$cat >try.c <<EOF
#include <sys/types.h>
set d_ip_mreq_source; eval $setvar
$rm_try
-echo " "
echo "Checking the availability struct ipv6_mreq ..." >&4
$cat >try.c <<EOF
#include <sys/types.h>
set d_ipv6_mreq; eval $setvar
$rm_try
-echo " "
echo "Checking the availability struct ipv6_mreq_source ..." >&4
$cat >try.c <<EOF
#include <sys/types.h>
set d_ipv6_mreq_source; eval $setvar
$rm_try
-echo " "
echo "Checking the availability of certain socket constants..." >&4
for ENUM in MSG_CTRUNC MSG_DONTROUTE MSG_OOB MSG_PEEK MSG_PROXY SCM_RIGHTS; do
enum=`$echo $ENUM|./tr '[A-Z]' '[a-z]'`
echo "Checking if you have a working futimes()" >&4
$cat >try.c <<EOCP
#include <stdio.h>
+#include <stdlib.h>
#include <sys/time.h>
#include <errno.h>
#include <fcntl.h>
+#include <stdlib.h>
int main ()
{
echo "Checking to see if you have isless..." >&4
$cat >try.c <<EOCP
#include <math.h>
-int main() { return isless(0.0); }
+int main() { return isless(2.0, 1.0); }
EOCP
set try
if eval $compile; then
: see if lchown exists
echo " "
-$cat > try.c <<'EOCP'
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char lchown(); below. */
-#include <assert.h>
-/* Override any gcc2 internal prototype to avoid an error. */
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char lchown();
-int main() {
- /* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_lchown) || defined (__stub___lchown)
-choke me
-#else
-lchown();
+$cat > try.c <<EOCP
+#include <pwd.h>
+#include <stdio.h>
+#include <stdlib.h>
+#$i_unistd I_UNISTD
+#ifdef I_UNISTD
+# include <unistd.h>
#endif
-; return 0; }
+int main(int argc, char *argv[])
+{
+ if (lchown("./try.c", -1, getgid()) == -1) {
+ exit(EXIT_FAILURE);
+ }
+ exit(EXIT_SUCCESS);
+}
EOCP
set try
-if eval $compile; then
+if eval $compile && ./try; then
$echo "lchown() found." >&4
val="$define"
else
fi
set d_lchown
eval $setvar
+$rm_try
: See if number of significant digits in a double precision number is known
echo " "
set malloc_good_size d_malloc_good_size
eval $inlibc
+: see if malloc_usable_size exists
+set malloc_usable_size d_malloc_usable_size
+eval $inlibc
+
: see if mblen exists
set mblen d_mblen
eval $inlibc
#define strtoll _strtoll
#endif
#include <stdio.h>
-extern long long int strtoll(char *s, char **, int);
+#include <stdlib.h>
static int bad = 0;
-int check(char *s, long long ell, int een) {
+void check(const char *s, long long ell, int een) {
long long gll;
errno = 0;
gll = strtoll(s, 0, 10);
Checking whether your strtoul() works okay...
EOM
$cat >try.c <<'EOCP'
+#include <stdlib.h>
#include <errno.h>
#include <stdio.h>
-extern unsigned long int strtoul(char *s, char **, int);
static int bad = 0;
-void check(char *s, unsigned long eul, int een) {
+void check(const char *s, unsigned long eul, int een) {
unsigned long gul;
errno = 0;
gul = strtoul(s, 0, 10);
Checking whether your strtoull() works okay...
EOM
$cat >try.c <<'EOCP'
+#include <stdlib.h>
#include <errno.h>
#ifdef __hpux
#define strtoull __strtoull
#endif
#include <stdio.h>
-extern unsigned long long int strtoull(char *s, char **, int);
static int bad = 0;
-int check(char *s, long long eull, int een) {
+void check(const char *s, long long eull, int een) {
long long gull;
errno = 0;
gull = strtoull(s, 0, 10);
Checking whether your strtouq() works okay...
EOM
$cat >try.c <<'EOCP'
+#include <stdlib.h>
#include <errno.h>
#include <stdio.h>
-extern unsigned long long int strtouq(char *s, char **, int);
static int bad = 0;
-void check(char *s, unsigned long long eull, int een) {
+void check(const char *s, unsigned long long eull, int een) {
unsigned long long gull;
errno = 0;
gull = strtouq(s, 0, 10);
set waitpid d_waitpid
eval $inlibc
+: see if wcrtomb exists
+set wcrtomb d_wcrtomb
+eval $inlibc
+
: look for wcscmp
echo " "
$cat >try.c <<'EOCP'
: add -D_FORTIFY_SOURCE if feasible and not already there
case "$gccversion" in
-[456789].*) case "$optimize$ccflags" in
+[456789].*|[1-9][0-9]*) case "$optimize$ccflags" in
*-O*) case "$ccflags$cppsymbols" in
*_FORTIFY_SOURCE=*) # Don't add it again.
echo "You seem to have -D_FORTIFY_SOURCE already, not adding it." >&4
;;
esac
;;
- Thread|thread)
- case "$usethreads" in
- true|$define|y)
- case "$use5005threads" in
- $define|true|[yY]*) avail_ext="$avail_ext $xxx" ;;
- esac
- esac
- ;;
threads|threads/shared)
# threads and threads::shared are special cases.
# To stop people from asking "Perl 5.8.0 was supposed
d_atanh='$d_atanh'
d_atolf='$d_atolf'
d_atoll='$d_atoll'
+d_attribute_always_inline='$d_attribute_always_inline'
d_attribute_deprecated='$d_attribute_deprecated'
d_attribute_format='$d_attribute_format'
d_attribute_malloc='$d_attribute_malloc'
d_madvise='$d_madvise'
d_malloc_good_size='$d_malloc_good_size'
d_malloc_size='$d_malloc_size'
+d_malloc_usable_size='$d_malloc_usable_size'
d_mblen='$d_mblen'
d_mbrlen='$d_mbrlen'
d_mbrtowc='$d_mbrtowc'
d_snprintf='$d_snprintf'
d_sockaddr_in6='$d_sockaddr_in6'
d_sockaddr_sa_len='$d_sockaddr_sa_len'
+d_sockaddr_storage='$d_sockaddr_storage'
d_sockatmark='$d_sockatmark'
d_sockatmarkproto='$d_sockatmarkproto'
d_socket='$d_socket'
d_vsnprintf='$d_vsnprintf'
d_wait4='$d_wait4'
d_waitpid='$d_waitpid'
+d_wcrtomb='$d_wcrtomb'
d_wcscmp='$d_wcscmp'
d_wcstombs='$d_wcstombs'
d_wcsxfrm='$d_wcsxfrm'
uname='$uname'
uniq='$uniq'
uquadtype='$uquadtype'
-use5005threads='$use5005threads'
use64bitall='$use64bitall'
use64bitint='$use64bitint'
usecbacktrace='$usecbacktrace'