#
# Note: this Configure script was generated automatically by the tool
# called "metaconfig". Rather than working with this copy of Configure,
-# you may wish to get metaconfig. Perl uses a modified version of this
-# tool, available in the "dist" folder in the checkout of the git repo
-# $ git clone git://perl5.git.perl.org/metaconfig.git metaconfig
-# The original dist package (including metaconfig) is available via SVN:
-# $ svn co https://svn.code.sf.net/p/dist/code/trunk/dist
+# 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
+# The original dist package (including metaconfig) is available on github:
+# $ git clone https://github.com/rmanfredi/dist.git dist-git
#
# Though this script was generated by metaconfig from metaunits, it is
-# OK to send patches against Configure itself. It's up to the Configure
-# pumpkin to backport the patch to the metaunits if it is accepted.
-# For more information on patching Configure, see pod/perlhack.pod
-#
-# The metaunits are also available from the public git repository:
-# http://perl5.git.perl.org/metaconfig.git/ or
-# $ git clone git://perl5.git.perl.org/metaconfig.git metaconfig
-#
-# See Porting/pumpkin.pod for more information on metaconfig.
+# OK to send patches against Configure itself (but not to commit them
+# to blead). It's up to
+# the Configure maintainers to backport the patch to the metaunits if it
+# is accepted. Exceptions to this rule, and more information, is in
+# Porting/pumpkin.pod.
# Generated using [metaconfig 3.5 PL0]
# (with additional metaconfig patches by perlbug@perl.org)
d_attribute_warn_unused_result=''
d_printf_format_null=''
d_backtrace=''
-d_bcmp=''
-d_bcopy=''
d_builtin_choose_expr=''
d_builtin_expect=''
-d_bzero=''
+d_builtin_add_overflow=''
+d_builtin_mul_overflow=''
+d_builtin_sub_overflow=''
d_c99_variadic_macros=''
d_casti32=''
castflags=''
d_fpos64_t=''
d_frexpl=''
d_fs_data_s=''
+d_fchmodat=''
+d_linkat=''
+d_openat=''
+d_renameat=''
+d_unlinkat=''
d_fseeko=''
d_fsetpos=''
d_fstatfs=''
d_llrintl=''
d_llround=''
d_llroundl=''
+d_localeconv_l=''
d_localtime_r=''
d_localtime_r_needs_tzset=''
localtime_r_proto=''
d_malloc_good_size=''
d_malloc_size=''
d_mblen=''
+d_mbrlen=''
+d_mbrtowc=''
d_mbstowcs=''
d_mbtowc=''
-d_memchr=''
-d_memcmp=''
-d_memcpy=''
d_memmem=''
-d_memmove=''
-d_memset=''
+d_memrchr=''
d_mkdir=''
d_mkdtemp=''
d_mkfifo=''
d_msync=''
d_munmap=''
d_nan=''
+d_nanosleep=''
d_nearbyint=''
d_duplocale=''
d_freelocale=''
d_nexttoward=''
d_nice=''
d_nl_langinfo=''
+d_thread_safe_nl_langinfo_l=''
d_off64_t=''
d_open3=''
d_fpathconf=''
d_rint=''
d_rmdir=''
d_round=''
-d_safebcpy=''
-d_safemcpy=''
-d_sanemcmp=''
d_sbrkproto=''
d_scalbn=''
d_scalbnl=''
d_sigprocmask=''
d_sigsetjmp=''
usesitecustomize=''
-d_snprintf=''
-d_vsnprintf=''
d_sockatmark=''
d_sockatmarkproto=''
d_ip_mreq=''
d_index=''
d_strchr=''
d_strcoll=''
-d_strctcpy=''
d_strerrm=''
d_strerror=''
d_sysernlst=''
d_strftime=''
d_strlcat=''
d_strlcpy=''
+d_strnlen=''
d_strtod=''
d_strtol=''
d_strtold=''
+d_strtold_l=''
d_strtoll=''
d_strtoq=''
d_strtoul=''
usevfork=''
d_voidsig=''
signal_t=''
-d_volatile=''
d_charvspr=''
d_vprintf=''
d_wait4=''
d_wcsxfrm=''
d_wctomb=''
d_writev=''
+default_inc_excludes_dot=''
dlext=''
bin_ELF=''
cccdlflags=''
usedl=''
doublesize=''
dtraceobject=''
+dtracexnolibs=''
ebcdic=''
fflushNULL=''
fflushall=''
i_varargs=''
i_varhdr=''
i_vfork=''
+i_wchar=''
d_inc_version_list=''
inc_version_list=''
inc_version_list_init=''
*) echo "No symbolic links, so not testing for their testing..." >&4
;;
esac
-echo " "
: Make symlinks util
case "$mksymlinks" in
eval $setvar
$rm -f attrib*
-: see if bcmp exists
-set bcmp d_bcmp
-eval $inlibc
-
-: see if bcopy exists
-set bcopy d_bcopy
-eval $inlibc
-
: see if getpgrp exists
set getpgrp d_getpgrp
eval $inlibc
eval $setvar
$rm_try
+: Look for GCC-style __builtin_add_overflow
+case "$d_builtin_add_overflow" in
+'')
+ echo " "
+ echo "Checking whether your compiler can handle __builtin_add_overflow ..." >&4
+ $cat >try.c <<'EOCP'
+int main(void) {
+ const unsigned int uint_max = ~0u;
+ int target_int = 0;
+ if (__builtin_add_overflow(1, 2, &target_int) || target_int != 3) {
+ return 1;
+ }
+ if (!__builtin_add_overflow((int)(uint_max >> 1), 1, &target_int)) {
+ return 1;
+ }
+ if (!__builtin_add_overflow(uint_max, -1, &target_int)) {
+ return 1;
+ }
+ return 0;
+}
+EOCP
+ set try
+ if eval $compile && $run ./try; then
+ echo "Your C compiler supports __builtin_add_overflow."
+ val="$define"
+ else
+ echo "Your C compiler doesn't seem to understand __builtin_add_overflow."
+ val="$undef"
+ fi
+ ;;
+*) val="$d_builtin_add_overflow" ;;
+esac
+
+set d_builtin_add_overflow
+eval $setvar
+$rm_try
+
+: Look for GCC-style __builtin_sub_overflow
+case "$d_builtin_sub_overflow" in
+'')
+ echo " "
+ echo "Checking whether your compiler can handle __builtin_sub_overflow ..." >&4
+ $cat >try.c <<'EOCP'
+int main(void) {
+ const unsigned int uint_max = ~0u;
+ int target_int = 0;
+ if (__builtin_sub_overflow(1, -2, &target_int) || target_int != 3) {
+ return 1;
+ }
+ if (!__builtin_sub_overflow(-(int)(uint_max >> 1), 2, &target_int)) {
+ return 1;
+ }
+ if (!__builtin_sub_overflow(uint_max, 1, &target_int)) {
+ return 1;
+ }
+ return 0;
+}
+EOCP
+ set try
+ if eval $compile && $run ./try; then
+ echo "Your C compiler supports __builtin_sub_overflow."
+ val="$define"
+ else
+ echo "Your C compiler doesn't seem to understand __builtin_sub_overflow."
+ val="$undef"
+ fi
+ ;;
+*) val="$d_builtin_sub_overflow" ;;
+esac
+
+set d_builtin_sub_overflow
+eval $setvar
+$rm_try
+
+: Look for GCC-style __builtin_mul_overflow
+case "$d_builtin_mul_overflow" in
+'')
+ echo " "
+ echo "Checking whether your compiler can handle __builtin_mul_overflow ..." >&4
+ $cat >try.c <<'EOCP'
+int main(void) {
+ const unsigned int uint_max = ~0u;
+ int target_int = 0;
+ if (__builtin_mul_overflow(2, 3, &target_int) || target_int != 6) {
+ return 1;
+ }
+ if (!__builtin_mul_overflow((int)(uint_max >> 1), 2, &target_int)) {
+ return 1;
+ }
+ if (!__builtin_mul_overflow(uint_max, 1, &target_int)) {
+ return 1;
+ }
+ return 0;
+}
+EOCP
+ set try
+ if eval $compile && $run ./try; then
+ echo "Your C compiler supports __builtin_mul_overflow."
+ val="$define"
+ else
+ echo "Your C compiler doesn't seem to understand __builtin_mul_overflow."
+ val="$undef"
+ fi
+ ;;
+*) val="$d_builtin_mul_overflow" ;;
+esac
+
+set d_builtin_mul_overflow
+eval $setvar
+$rm_try
+
: Look for GCC-style __builtin_choose_expr
case "$d_builtin_choose_expr" in
'')
eval $setvar
$rm_try
-: see if bzero exists
-set bzero d_bzero
-eval $inlibc
-
-: see if stdarg is available
-echo " "
-if $test `./findhdr stdarg.h`; then
- echo "<stdarg.h> found." >&4
- valstd="$define"
-else
- echo "<stdarg.h> NOT found." >&4
- valstd="$undef"
-fi
-
-: see if varargs is available
-echo " "
-if $test `./findhdr varargs.h`; then
- echo "<varargs.h> found." >&4
-else
- echo "<varargs.h> NOT found, but that's ok (I hope)." >&4
-fi
-
-: set up the varargs testing programs
-$cat > varargs.c <<EOP
-#ifdef I_STDARG
-#include <stdarg.h>
-#endif
-#ifdef I_VARARGS
-#include <varargs.h>
-#endif
-
-#ifdef I_STDARG
-int f(char *p, ...)
-#else
-int f(va_alist)
-va_dcl
-#endif
-{
- va_list ap;
-#ifndef I_STDARG
- char *p;
-#endif
-#ifdef I_STDARG
- va_start(ap,p);
-#else
- va_start(ap);
- p = va_arg(ap, char *);
-#endif
- va_end(ap);
- return 0;
-}
-EOP
-$cat > varargs <<EOP
-$startsh
-if $cc -c $ccflags -D\$1 varargs.c >/dev/null 2>&1; then
- echo "true"
-else
- echo "false"
-fi
-$rm -f varargs$_o
-EOP
-chmod +x varargs
-
-: now check which varargs header should be included
-echo " "
-i_varhdr=''
-val=''
-case "$valstd" in
-"$define")
- if `./varargs I_STDARG`; then
- val='stdarg.h'
- elif `./varargs I_VARARGS`; then
- val='varargs.h'
- fi
- ;;
-*)
- if `./varargs I_VARARGS`; then
- val='varargs.h'
- fi
- ;;
-esac
-case "$val" in
-'')
- echo " "
- echo "*** WHOA THERE!!! ***" >&4
- echo " Your C compiler \"$cc\" doesn't seem to support stdarg or varargs!" >&4
- case "$knowitall" in
- '')
- echo " I'm giving up; maybe you can try again with a different compiler?" >&4
- exit 1
- ;;
- esac
-echo "I could not find the definition for va_dcl... You have problems..." >&4
- val="$undef"; set i_stdarg; eval $setvar
- val="$undef"; set i_varargs; eval $setvar
- ;;
-*)
- set i_varhdr
- eval $setvar
- case "$i_varhdr" in
- stdarg.h)
- val="$define"; set i_stdarg; eval $setvar
- val="$undef"; set i_varargs; eval $setvar
- ;;
- varargs.h)
- val="$undef"; set i_stdarg; eval $setvar
- val="$define"; set i_varargs; eval $setvar
- ;;
- esac
- echo "We'll include <$i_varhdr> to get va_dcl definition." >&4;;
-esac
-$rm -f varargs*
-
: see if the Compiler supports C99 variadic macros
-case "$i_stdarg$i_stdlib" in
- "$define$define")
- echo "You have <stdarg.h> and <stdlib.h>, so checking for C99 variadic macros." >&4
- $cat >try.c <<EOCP
+echo "Checking for C99 variadic macros." >&4
+$cat >try.c <<EOCP
#include <stdio.h>
#include <stdarg.h>
return 0;
}
EOCP
- set try
- if eval $compile && $run ./try 2>&1 >/dev/null; then
- case "`$run ./try`" in
- "123 456 789")
- echo "You have C99 variadic macros." >&4
- d_c99_variadic_macros="$define"
- ;;
- *)
- echo "You don't have functional C99 variadic macros." >&4
- d_c99_variadic_macros="$undef"
- ;;
- esac
- else
- echo "I couldn't compile and run the test program, so I assume that you don't have functional C99 variadic macros." >&4
+set try
+if eval $compile && $run ./try 2>&1 >/dev/null; then
+ case "`$run ./try`" in
+ "123 456 789")
+ echo "You have C99 variadic macros." >&4
+ d_c99_variadic_macros="$define"
+ ;;
+ *)
+ echo "You don't have functional C99 variadic macros." >&4
d_c99_variadic_macros="$undef"
- fi
- $rm_try
- ;;
- *)
- echo "You don't have <stdarg.h> and <stdlib.h>, so not checking for C99 variadic macros." >&4
+ ;;
+ esac
+else
+ echo "I couldn't compile and run the test program, so I assume that you don't have functional C99 variadic macros." >&4
d_c99_variadic_macros="$undef"
- ;;
-esac
+fi
+$rm_try
: see if signal is declared as pointer to function returning int or void
echo " "
set cbrt d_cbrt
eval $inlibc
-: see if vprintf exists
+: see if stdarg is available
echo " "
-if set vprintf val -f d_vprintf; eval $csym; $val; then
- echo 'vprintf() found.' >&4
- val="$define"
- $cat >try.c <<EOF
-#$i_stdarg I_STDARG /* Only one of these can be defined by i_varhrd */
-#$i_varargs I_VARARGS
+if $test `./findhdr stdarg.h`; then
+ echo "<stdarg.h> found." >&4
+ valstd="$define"
+else
+ echo "<stdarg.h> NOT found." >&4
+ valstd="$undef"
+fi
-#$i_stdlib I_STDLIB
-#$i_unistd I_UNISTD
+: see if varargs is available
+echo " "
+if $test `./findhdr varargs.h`; then
+ echo "<varargs.h> found." >&4
+else
+ echo "<varargs.h> NOT found, but that's ok (I hope)." >&4
+fi
+: set up the varargs testing programs
+$cat > varargs.c <<EOP
#ifdef I_STDARG
-# include <stdarg.h>
-#else /* I_VARARGS */
-# include <varargs.h>
-#endif
-
-#ifdef I_UNISTD
-# include <unistd.h>
+#include <stdarg.h>
#endif
-
-#ifdef I_STDLIB
-# include <stdlib.h>
+#ifdef I_VARARGS
+#include <varargs.h>
#endif
-#include <stdio.h> /* vsprintf prototype */
-
#ifdef I_STDARG
-void xxx(int n, ...)
+int f(char *p, ...)
+#else
+int f(va_alist)
+va_dcl
+#endif
{
- va_list args;
- char buf[10];
+ va_list ap;
+#ifndef I_STDARG
+ char *p;
+#endif
+#ifdef I_STDARG
+ va_start(ap,p);
+#else
+ va_start(ap);
+ p = va_arg(ap, char *);
+#endif
+ va_end(ap);
+ return 0;
+}
+EOP
+$cat > varargs <<EOP
+$startsh
+if $cc -c $ccflags -D\$1 varargs.c >/dev/null 2>&1; then
+ echo "true"
+else
+ echo "false"
+fi
+$rm -f varargs$_o
+EOP
+chmod +x varargs
+
+: now check which varargs header should be included
+echo " "
+i_varhdr=''
+val=''
+case "$valstd" in
+"$define")
+ if `./varargs I_STDARG`; then
+ val='stdarg.h'
+ elif `./varargs I_VARARGS`; then
+ val='varargs.h'
+ fi
+ ;;
+*)
+ if `./varargs I_VARARGS`; then
+ val='varargs.h'
+ fi
+ ;;
+esac
+case "$val" in
+'')
+ echo " "
+ echo "*** WHOA THERE!!! ***" >&4
+ echo " Your C compiler \"$cc\" doesn't seem to support stdarg or varargs!" >&4
+ case "$knowitall" in
+ '')
+ echo " I'm giving up; maybe you can try again with a different compiler?" >&4
+ exit 1
+ ;;
+ esac
+echo "I could not find the definition for va_dcl... You have problems..." >&4
+ val="$undef"; set i_stdarg; eval $setvar
+ val="$undef"; set i_varargs; eval $setvar
+ ;;
+*)
+ set i_varhdr
+ eval $setvar
+ case "$i_varhdr" in
+ stdarg.h)
+ val="$define"; set i_stdarg; eval $setvar
+ val="$undef"; set i_varargs; eval $setvar
+ ;;
+ varargs.h)
+ val="$undef"; set i_stdarg; eval $setvar
+ val="$define"; set i_varargs; eval $setvar
+ ;;
+ esac
+ echo "We'll include <$i_varhdr> to get va_dcl definition." >&4;;
+esac
+$rm -f varargs*
+
+: see if vprintf exists
+echo " "
+if set vprintf val -f d_vprintf; eval $csym; $val; then
+ echo 'vprintf() found.' >&4
+ val="$define"
+ $cat >try.c <<EOF
+#$i_stdarg I_STDARG /* Only one of these can be defined by i_varhrd */
+#$i_varargs I_VARARGS
+
+#$i_stdlib I_STDLIB
+#$i_unistd I_UNISTD
+
+#ifdef I_STDARG
+# include <stdarg.h>
+#else /* I_VARARGS */
+# include <varargs.h>
+#endif
+
+#ifdef I_UNISTD
+# include <unistd.h>
+#endif
+
+#ifdef I_STDLIB
+# include <stdlib.h>
+#endif
+
+#include <stdio.h> /* vsprintf prototype */
+
+#ifdef I_STDARG
+void xxx(int n, ...)
+{
+ va_list args;
+ char buf[10];
va_start(args, n);
exit((unsigned long)vsprintf(buf,"%s",args) > 10L);
}
set fchmod d_fchmod
eval $inlibc
+: check for openat, unlinkat, renameat, linkat, fchmodat
+set openat d_openat
+eval $inlibc
+
+set unlinkat d_unlinkat
+eval $inlibc
+
+set renameat d_renameat
+eval $inlibc
+
+set linkat d_linkat
+eval $inlibc
+
+set fchmodat d_fchmodat
+eval $inlibc
+
: see if fchown exists
set fchown d_fchown
eval $inlibc
set llroundl d_llroundl
eval $inlibc
+: see if localeconv_l exists
+set localeconv_l d_localeconv_l
+eval $inlibc
+
: see if localtime_r exists
set localtime_r d_localtime_r
eval $inlibc
set mblen d_mblen
eval $inlibc
-: see if mbstowcs exists
-set mbstowcs d_mbstowcs
+: see if mbrlen exists
+set mbrlen d_mbrlen
eval $inlibc
-: see if mbtowc exists
-set mbtowc d_mbtowc
+: see if mbrtowc exists
+set mbrtowc d_mbrtowc
eval $inlibc
-: see if memchr exists
-set memchr d_memchr
-eval $inlibc
-
-: see if memcmp exists
-set memcmp d_memcmp
+: see if mbstowcs exists
+set mbstowcs d_mbstowcs
eval $inlibc
-: see if memcpy exists
-set memcpy d_memcpy
+: see if mbtowc exists
+set mbtowc d_mbtowc
eval $inlibc
: see if memmem exists
set memmem d_memmem
eval $inlibc
-: see if memmove exists
-set memmove d_memmove
-eval $inlibc
-
-: see if memset exists
-set memset d_memset
+: see if memrchr exists
+set memrchr d_memrchr
eval $inlibc
: see if mkdir exists
set nan d_nan
eval $inlibc
+: see if nanosleep exists
+set nanosleep d_nanosleep
+eval $inlibc
+
: see if nearbyint exists
set nearbyint d_nearbyint
eval $inlibc
set quadmath.h i_quadmath
eval $inhdr
-: check for volatile keyword
-echo " "
-echo 'Checking to see if your C compiler knows about "volatile"...' >&4
-$cat >try.c <<'EOCP'
-int main()
-{
- typedef struct _goo_struct goo_struct;
- goo_struct * volatile goo = ((goo_struct *)0);
- struct _goo_struct {
- long long_int;
- int reg_int;
- char char_var;
- };
- typedef unsigned short foo_t;
- char *volatile foo;
- volatile int bar;
- volatile foo_t blech;
- foo = foo;
-}
-EOCP
-if $cc -c $ccflags try.c >/dev/null 2>&1 ; then
- val="$define"
- echo "Yup, it does."
-else
- val="$undef"
- echo "Nope, it doesn't."
-fi
-set d_volatile
-eval $setvar
-$rm_try
-
: Check basic sizes
echo " "
$echo "Choosing the C types to be used for Perl's internal types..." >&4
esac
$echo "Checking how many bits of your UVs your NVs can preserve..." >&4
-: volatile so that the compiler has to store it out to memory.
-if test X"$d_volatile" = X"$define"; then
- volatile=volatile
-fi
$cat <<EOP >try.c
#include <stdio.h>
#$i_stdlib I_STDLIB
#include <sys/types.h>
#include <signal.h>
#ifdef SIGFPE
-$volatile int bletched = 0;
+/* volatile so that the compiler has to store it out to memory */
+volatile int bletched = 0;
$signal_t blech(int s) { bletched = 1; }
#endif
int main() {
$rm_try
$echo "Checking to find the largest integer value your NVs can hold..." >&4
-: volatile so that the compiler has to store it out to memory.
-if test X"$d_volatile" = X"$define"; then
- volatile=volatile
-fi
$cat <<EOP >try.c
#include <stdio.h>
int count = 1;
while(count < 256) {
- $volatile NV up = value + 1.0;
- $volatile NV negated = -value;
- $volatile NV down = negated - 1.0;
- $volatile NV got_up = up - value;
+ /* volatile so that the compiler has to store it out to memory */
+ volatile NV up = value + 1.0;
+ volatile NV negated = -value;
+ volatile NV down = negated - 1.0;
+ volatile NV got_up = up - value;
int up_good = got_up == 1.0;
int got_down = down - negated;
int down_good = got_down == -1.0;
$rm_try
$echo "Checking whether NV 0.0 is all bits zero in memory..." >&4
-: volatile so that the compiler has to store it out to memory.
-if test X"$d_volatile" = X"$define"; then
- volatile=volatile
-fi
$cat <<EOP >try.c
#include <stdio.h>
#$i_stdlib I_STDLIB
#include <sys/types.h>
#include <signal.h>
#ifdef SIGFPE
-$volatile int bletched = 0;
+/* volatile so that the compiler has to store it out to memory */
+volatile int bletched = 0;
$signal_t blech(int s) { bletched = 1; }
#endif
-int checkit($nvtype d, char *where) {
- unsigned char *p = (char *)&d;
+int checkit($nvtype d, const char *where) {
+ void *v = &d;
+ unsigned char *p = (unsigned char *)v;
unsigned char *end = p + sizeof(d);
int fail = 0;
if (!fail)
return 0;
- p = (char *)&d;
+ p = (unsigned char *)v;
printf("No - %s: 0x", where);
while (p < end)
printf ("%02X", *p++);
set round d_round
eval $inlibc
-: see if memory.h is available.
-val=''
-set memory.h val
-eval $inhdr
-
-: See if it conflicts with string.h
-case "$val" in
-$define)
- case "$strings" in
- '') ;;
- *)
- $cppstdin $cppflags $cppminus < $strings > mem.h
- if $contains 'memcpy' mem.h >/dev/null 2>&1; then
- echo " "
- echo "We won't be including <memory.h>."
- val="$undef"
- fi
- $rm -f mem.h
- ;;
- esac
-esac
-set i_memory
-eval $setvar
-
-: can bcopy handle overlapping blocks?
-echo " "
-val="$undef"
-case "$d_memmove" in
-"$define") echo "I'll use memmove() instead of bcopy() for overlapping copies." ;;
-*) case "$d_bcopy" in
- "$define")
- echo "Checking to see if bcopy() can do overlapping copies..." >&4
- $cat >try.c <<EOCP
-#$i_memory I_MEMORY
-#$i_stdlib I_STDLIB
-#$i_string I_STRING
-#$i_unistd I_UNISTD
-EOCP
- $cat >>try.c <<'EOCP'
-#include <stdio.h>
-#ifdef I_MEMORY
-# include <memory.h>
-#endif
-#ifdef I_STDLIB
-# include <stdlib.h>
-#endif
-#ifdef I_STRING
-# include <string.h>
-#else
-# include <strings.h>
-#endif
-#ifdef I_UNISTD
-# include <unistd.h> /* Needed for NetBSD */
-#endif
-int main()
-{
-char buf[128], abc[128];
-char *b;
-int len;
-int off;
-int align;
-
-/* Copy "abcde..." string to char abc[] so that gcc doesn't
- try to store the string in read-only memory. */
-bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
-
-for (align = 7; align >= 0; align--) {
- for (len = 36; len; len--) {
- b = buf+align;
- bcopy(abc, b, len);
- for (off = 1; off <= len; off++) {
- bcopy(b, b+off, len);
- bcopy(b+off, b, len);
- if (bcmp(b, abc, len))
- exit(1);
- }
- }
-}
-exit(0);
-}
-EOCP
- set try
- if eval $compile_ok; then
- if $run ./try 2>/dev/null; then
- echo "Yes, it can."
- val="$define"
- else
- echo "It can't, sorry."
- fi
- else
- echo "(I can't compile the test program, so we'll assume not...)"
- fi
- ;;
- esac
- $rm_try
- ;;
-esac
-set d_safebcpy
-eval $setvar
-
-: can memcpy handle overlapping blocks?
-echo " "
-val="$undef"
-case "$d_memmove" in
-"$define") echo "I'll use memmove() instead of memcpy() for overlapping copies." ;;
-*) case "$d_memcpy" in
- "$define")
- echo "Checking to see if memcpy() can do overlapping copies..." >&4
- $cat >try.c <<EOCP
-#$i_memory I_MEMORY
-#$i_stdlib I_STDLIB
-#$i_string I_STRING
-#$i_unistd I_UNISTD
-EOCP
- $cat >>try.c <<'EOCP'
-#include <stdio.h>
-#ifdef I_MEMORY
-# include <memory.h>
-#endif
-#ifdef I_STDLIB
-# include <stdlib.h>
-#endif
-#ifdef I_STRING
-# include <string.h>
-#else
-# include <strings.h>
-#endif
-#ifdef I_UNISTD
-# include <unistd.h> /* Needed for NetBSD */
-#endif
-int main()
-{
-char buf[128], abc[128];
-char *b;
-int len;
-int off;
-int align;
-
-/* Copy "abcde..." string to char abc[] so that gcc doesn't
- try to store the string in read-only memory. */
-memcpy(abc, "abcdefghijklmnopqrstuvwxyz0123456789", 36);
-
-for (align = 7; align >= 0; align--) {
- for (len = 36; len; len--) {
- b = buf+align;
- memcpy(b, abc, len);
- for (off = 1; off <= len; off++) {
- memcpy(b+off, b, len);
- memcpy(b, b+off, len);
- if (memcmp(b, abc, len))
- exit(1);
- }
- }
-}
-exit(0);
-}
-EOCP
- set try
- if eval $compile_ok; then
- if $run ./try 2>/dev/null; then
- echo "Yes, it can."
- val="$define"
- else
- echo "It can't, sorry."
- fi
- else
- echo "(I can't compile the test program, so we'll assume not...)"
- fi
- ;;
- esac
- $rm_try
- ;;
-esac
-set d_safemcpy
-eval $setvar
-
-: can memcmp be trusted to compare relative magnitude?
-val="$undef"
-case "$d_memcmp" in
-"$define")
- echo " "
- echo "Checking if your memcmp() can compare relative magnitude..." >&4
- $cat >try.c <<EOCP
-#$i_memory I_MEMORY
-#$i_stdlib I_STDLIB
-#$i_string I_STRING
-#$i_unistd I_UNISTD
-EOCP
- $cat >>try.c <<'EOCP'
-#include <stdio.h>
-#ifdef I_MEMORY
-# include <memory.h>
-#endif
-#ifdef I_STDLIB
-# include <stdlib.h>
-#endif
-#ifdef I_STRING
-# include <string.h>
-#else
-# include <strings.h>
-#endif
-#ifdef I_UNISTD
-# include <unistd.h> /* Needed for NetBSD */
-#endif
-int main()
-{
-char a = -1;
-char b = 0;
-if ((a < b) && memcmp(&a, &b, 1) < 0)
- exit(1);
-exit(0);
-}
-EOCP
- set try
- if eval $compile_ok; then
- if $run ./try 2>/dev/null; then
- echo "Yes, it can."
- val="$define"
- else
- echo "No, it can't (it uses signed chars)."
- fi
- else
- echo "(I can't compile the test program, so we'll assume not...)"
- fi
- ;;
-esac
-$rm_try
-set d_sanemcmp
-eval $setvar
-
: see if prototype for sbrk is available
echo " "
set d_sbrkproto sbrk $i_unistd unistd.h
eval $setvar
$rm_try
-: see if snprintf exists
-set snprintf d_snprintf
-eval $inlibc
-
-: see if vsnprintf exists
-set vsnprintf d_vsnprintf
-eval $inlibc
-
-case "$d_snprintf-$d_vsnprintf" in
-"$define-$define")
- $cat <<EOM
-Checking whether your snprintf() and vsnprintf() work okay...
-EOM
- $cat >try.c <<'EOCP'
-/* v?snprintf testing logic courtesy of Russ Allbery.
- * According to C99:
- * - if the buffer is too short it still must be \0-terminated
- * - if the buffer is too short the potentially required length
- * must be returned and not -1
- * - if the buffer is NULL the potentially required length
- * must be returned and not -1 or core dump
- */
-#include <stdio.h>
-#include <stdarg.h>
-
-char buf[2];
-
-int test (char *format, ...)
-{
- va_list args;
- int count;
-
- va_start (args, format);
- count = vsnprintf (buf, sizeof buf, format, args);
- va_end (args);
- return count;
-}
-
-int main ()
-{
- return ((test ("%s", "abcd") == 4 && buf[0] == 'a' && buf[1] == '\0'
- && snprintf (NULL, 0, "%s", "abcd") == 4) ? 0 : 1);
-}
-EOCP
- set try
- if eval $compile; then
- `$run ./try`
- case "$?" in
- 0) echo "Your snprintf() and vsnprintf() seem to be working okay." ;;
- *) cat <<EOM >&4
-Your snprintf() and snprintf() don't seem to be working okay.
-EOM
- d_snprintf="$undef"
- d_vsnprintf="$undef"
- ;;
- esac
- else
- echo "(I can't seem to compile the test program--assuming they don't)"
- d_snprintf="$undef"
- d_vsnprintf="$undef"
- fi
- $rm_try
- ;;
-esac
-
: see if sockatmark exists
set sockatmark d_sockatmark
eval $inlibc
set strcoll d_strcoll
eval $inlibc
-: check for structure copying
-echo " "
-echo "Checking to see if your C compiler can copy structs..." >&4
-$cat >try.c <<'EOCP'
-int main()
-{
- struct blurfl {
- int dyick;
- } foo, bar;
-
- foo = bar;
-}
-EOCP
-if $cc -c try.c >/dev/null 2>&1 ; then
- val="$define"
- echo "Yup, it can."
-else
- val="$undef"
- echo "Nope, it can't."
-fi
-set d_strctcpy
-eval $setvar
-$rm_try
-
: see if strerror and/or sys_errlist[] exist
echo " "
if test "X$d_strerror" = X -o "X$d_syserrlst" = X; then
set strlcpy d_strlcpy
eval $inlibc
+: see if strnlen exists
+set strnlen d_strnlen
+eval $inlibc
+
: see if strtod exists
set strtod d_strtod
eval $inlibc
set strtold d_strtold
eval $inlibc
+: see if strtold_l exists
+set strtold_l d_strtold_l
+eval $inlibc
+
: see if strtoll exists
set strtoll d_strtoll
eval $inlibc
set tgamma d_tgamma
eval $inlibc
+: check for thread_safe_nl_langinfo_l item
+$cat <<EOM
+
+Checking to see if you have nl_langinfo_l() and that it is thread-safe
+EOM
+$cat >try.c <<EOCP
+#$i_stdlib I_STDLIB
+#ifdef I_STDLIB
+# include <stdlib.h>
+#endif
+#$i_string I_STRING
+#ifdef I_STRING
+# include <string.h>
+#endif
+#$i_langinfo I_LANGINFO
+#ifdef I_LANGINFO
+# include <langinfo.h>
+#endif
+#$i_pthread I_PTHREAD
+#ifdef I_PTHREAD
+# include <pthread.h>
+#endif
+#$i_locale I_LOCALE
+#ifdef I_LOCALE
+# include <locale.h>
+#endif
+
+void *
+thread_start(void * arg)
+{
+ nl_langinfo(RADIXCHAR);
+}
+
+int main() {
+ char * main_buffer;
+ char save_main_buffer[1000];
+ pthread_t subthread;
+ pthread_attr_t attr;
+
+ main_buffer = nl_langinfo_l(CODESET, newlocale(LC_ALL_MASK, "C", 0));
+
+ /* If too large for our generous allowance, just assume we don't have
+ * it. */
+ if (strlen(main_buffer) >= sizeof(save_main_buffer)) {
+ exit(1);
+ }
+
+ strcpy(save_main_buffer, main_buffer);
+
+ if (pthread_attr_init(&attr) != 0) {
+ exit(1);
+ }
+
+ if (pthread_create(&subthread, &attr, thread_start, NULL) != 0) {
+ exit(1);
+ }
+
+ if (pthread_join(subthread, NULL) != 0) {
+ exit(1);
+ }
+
+ exit(! (strcmp(main_buffer, save_main_buffer) == 0));
+}
+EOCP
+case "$usethreads" in
+ define)
+ set try
+ if eval $compile; then
+ echo "Your system has nl_langinfo_l()..." >&4
+ if $run ./try; then
+ echo "and it is thread-safe (just as I'd hoped)." >&4
+ d_thread_safe_nl_langinfo_l="$define"
+ echo "$d_thread_safe_nl_langinfo_l" >&4
+ else
+ echo "but it isn't thread-safe, so we won't use it." >&4
+ fi
+ else
+ echo "your system does not have nl_langinfo_l()" >&4
+ fi
+ ;;
+ *) echo "Since threads aren't selected, we won't bother looking for nl_langinfo_l()" >&4
+esac
+if test X"$d_thread_safe_nl_langinfo_l" = X; then
+ d_thread_safe_nl_langinfo_l="$undef"
+fi
+$rm_try
+
: see if time exists
echo " "
if test "X$d_time" = X -o X"$timetype" = X; then
;;
esac
+: Include . in @INC
+$cat <<EOM
+
+Historically Perl has provided a final fallback of the current working
+directory '.' when searching for a library. This, however, can lead to
+problems when a Perl program which loads optional modules is called from
+a shared directory. This can lead to executing unexpected code.
+
+EOM
+
+# When changing to exclude by default:
+case "$default_inc_excludes_dot" in
+ $undef|false|[nN]*) dflt="n" ;;
+ *) dflt="y" ;;
+esac
+# To turn exclude off by default:
+#case "$default_inc_excludes_dot" in
+# $define|true|[yY]*) dflt="y" ;;
+# *) dflt="n" ;;
+#esac
+
+rp='Exclude '.' from @INC by default? '
+. ./myread
+case "$ans" in
+ [nN]|undef) default_inc_excludes_dot="$undef" ;;
+ *) default_inc_excludes_dot="$define" ;;
+esac
+
: Check what kind of inf/nan your system has
$echo "Checking the kind of infinities and nans you have..." >&4
$echo "(The following tests may crash. That's okay.)" >&4
#define DOUBLESIZE $doublesize
#$d_longdbl HAS_LONG_DOUBLE
#ifdef HAS_LONG_DOUBLE
-#define LONGDBLSIZE $longdblsize
-#define LONGDBLKIND $longdblkind
+#define LONG_DOUBLESIZE $longdblsize
+#define LONG_DOUBLEKIND $longdblkind
#endif
#$i_math I_MATH
+#$i_string I_STRING
#ifdef I_MATH
#include <math.h>
#endif
+#ifdef I_STRING
+# include <string.h>
+#endif
#include <stdio.h>
/* Note that whether the sign bit is on or off
* for NaN depends on the CPU/FPU, and possibly
* to even mention, causing immediate SIGFPE or equivalent: this is
* the case with VAX floating point, for example.
*/
-static void bytes(unsigned char *p, unsigned int n) {
+static void bytes(void *v, unsigned int n) {
+ unsigned char *p = (unsigned char *)v;
int i;
for (i = 0; i < n; i++) {
printf("0x%02x%s", p[i], i < n - 1 ? ", " : "\n");
#ifdef HAS_LONG_DOUBLE
long double ldinf = (long double)exp(1e9);
long double ldnan = (long double)sqrt(-1.0);
-#endif
- if (argc == 2) {
- switch (argv[1][0]) {
- case '1': bytes(&dinf, sizeof(dinf)); break;
- case '2': bytes(&dnan, sizeof(dnan)); break;
-#ifdef HAS_LONG_DOUBLE
# if LONG_DOUBLEKIND == 3 || LONG_DOUBLEKIND == 4
/* the 80-bit long doubles might have garbage in their excess bytes */
memset((char *)&ldinf + 10, '\0', LONG_DOUBLESIZE - 10);
+ memset((char *)&ldnan + 10, '\0', LONG_DOUBLESIZE - 10);
# endif
+ if (argc == 2) {
+ switch (argv[1][0]) {
+ case '1': bytes(&dinf, sizeof(dinf)); break;
+ case '2': bytes(&dnan, sizeof(dnan)); break;
case '3': bytes(&ldinf, sizeof(ldinf)); break;
case '4': bytes(&ldnan, sizeof(ldnan)); break;
#endif
: object file that uses at least one of the probes defined in the .d file
case "$usedtrace" in
$define)
+ case "$dtracexnolibs" in
+ $define|true|[yY]*)
+ dtracexnolibs=$define
+ $dtrace -h -xnolibs -s ../perldtrace.d -o perldtrace.h
+ ;;
+ ' '|'')
+ if $dtrace -h -xnolibs -s ../perldtrace.d -o perldtrace.h 2>&1 ; then
+ dtracexnolibs=$define
+ echo "Your dtrace accepts -xnolibs"
+ elif $dtrace -h -s ../perldtrace.d -o perldtrace.h 2>&1 ; then
+ dtracexnolibs=$undef
+ echo "Your dtrace doesn't accept -xnolibs"
+ else
+ echo "Your dtrace doesn't work at all, try building without dtrace support" >&4
+ exit 1
+ fi
+ ;;
+ *)
+ dtracexnolibs=$undef
+ $dtrace -h -s ../perldtrace.d -o perldtrace.h
+ ;;
+ esac
+ case $dtracexnolibs in
+ $define) xnolibs=-xnolibs ;;
+ *) xnolibs= ;;
+ esac
+
case "$dtraceobject" in
$define|true|[yY]*)
dtraceobject=$define
;;
' '|'')
- $dtrace -h -s ../perldtrace.d -o perldtrace.h
$cat >try.c <<EOM
#include "perldtrace.h"
int main(void) {
EOM
dtraceobject=$undef
if $cc -c -o try.o $optimize $ccflags try.c \
- && $dtrace -G -s ../perldtrace.d try.o >/dev/null 2>&1; then
+ && $dtrace -G $xnolibs -s ../perldtrace.d try.o >/dev/null 2>&1; then
dtraceobject=$define
echo "Your dtrace builds an object file"
fi
- $rm -f try.c try.o perldtrace.o
;;
*) dtraceobject=$undef ;;
esac
+ $rm_try perldtrace.o perldtrace.h
esac
: Determine if this is an EBCDIC system
return 4;
}
- buffer = malloc(size);
+ buffer = (char *)malloc(size);
if (!buffer) {
perror("malloc");
return 5;
return 2;
}
- buffer = malloc(size);
+ buffer = (char *)malloc(size);
if (!buffer) {
perror("malloc");
return 3;
i_machcthr="$undef"
fi
+: see if memory.h is available.
+val=''
+set memory.h val
+eval $inhdr
+
+: See if it conflicts with string.h
+case "$val" in
+$define)
+ case "$strings" in
+ '') ;;
+ *)
+ $cppstdin $cppflags $cppminus < $strings > mem.h
+ if $contains 'memcpy' mem.h >/dev/null 2>&1; then
+ echo " "
+ echo "We won't be including <memory.h>."
+ val="$undef"
+ fi
+ $rm -f mem.h
+ ;;
+ esac
+esac
+set i_memory
+eval $setvar
+
: see if this is a mntent.h system
set mntent.h i_mntent
eval $inhdr
: add -D_FORTIFY_SOURCE if feasible and not already there
case "$gccversion" in
-[45].*) case "$optimize$ccflags" in
+[4567].*) 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
+: see if wchar.h is present
+set wchar.h i_wchar
+eval $inhdr
+
: Check extensions
echo " "
echo "Looking for extensions..." >&4
d_attribute_unused='$d_attribute_unused'
d_attribute_warn_unused_result='$d_attribute_warn_unused_result'
d_backtrace='$d_backtrace'
-d_bcmp='$d_bcmp'
-d_bcopy='$d_bcopy'
d_bsd='$d_bsd'
d_bsdgetpgrp='$d_bsdgetpgrp'
d_bsdsetpgrp='$d_bsdsetpgrp'
+d_builtin_add_overflow='$d_builtin_add_overflow'
d_builtin_choose_expr='$d_builtin_choose_expr'
d_builtin_expect='$d_builtin_expect'
-d_bzero='$d_bzero'
+d_builtin_mul_overflow='$d_builtin_mul_overflow'
+d_builtin_sub_overflow='$d_builtin_sub_overflow'
d_c99_variadic_macros='$d_c99_variadic_macros'
d_casti32='$d_casti32'
d_castneg='$d_castneg'
d_faststdio='$d_faststdio'
d_fchdir='$d_fchdir'
d_fchmod='$d_fchmod'
+d_fchmodat='$d_fchmodat'
d_fchown='$d_fchown'
d_fcntl='$d_fcntl'
d_fcntl_can_lock='$d_fcntl_can_lock'
d_libm_lib_version='$d_libm_lib_version'
d_libname_unique='$d_libname_unique'
d_link='$d_link'
+d_linkat='$d_linkat'
d_llrint='$d_llrint'
d_llrintl='$d_llrintl'
d_llround='$d_llround'
d_llroundl='$d_llroundl'
+d_localeconv_l='$d_localeconv_l'
d_localtime64='$d_localtime64'
d_localtime_r='$d_localtime_r'
d_localtime_r_needs_tzset='$d_localtime_r_needs_tzset'
d_malloc_good_size='$d_malloc_good_size'
d_malloc_size='$d_malloc_size'
d_mblen='$d_mblen'
+d_mbrlen='$d_mbrlen'
+d_mbrtowc='$d_mbrtowc'
d_mbstowcs='$d_mbstowcs'
d_mbtowc='$d_mbtowc'
-d_memchr='$d_memchr'
-d_memcmp='$d_memcmp'
-d_memcpy='$d_memcpy'
d_memmem='$d_memmem'
-d_memmove='$d_memmove'
-d_memset='$d_memset'
+d_memrchr='$d_memrchr'
d_mkdir='$d_mkdir'
d_mkdtemp='$d_mkdtemp'
d_mkfifo='$d_mkfifo'
d_munmap='$d_munmap'
d_mymalloc='$d_mymalloc'
d_nan='$d_nan'
+d_nanosleep='$d_nanosleep'
d_ndbm='$d_ndbm'
d_ndbm_h_uses_prototypes='$d_ndbm_h_uses_prototypes'
d_nearbyint='$d_nearbyint'
d_oldpthreads='$d_oldpthreads'
d_oldsock='$d_oldsock'
d_open3='$d_open3'
+d_openat='$d_openat'
d_pathconf='$d_pathconf'
d_pause='$d_pause'
d_perl_otherlibdirs='$d_perl_otherlibdirs'
d_remainder='$d_remainder'
d_remquo='$d_remquo'
d_rename='$d_rename'
+d_renameat='$d_renameat'
d_rewinddir='$d_rewinddir'
d_rint='$d_rint'
d_rmdir='$d_rmdir'
d_round='$d_round'
-d_safebcpy='$d_safebcpy'
-d_safemcpy='$d_safemcpy'
-d_sanemcmp='$d_sanemcmp'
d_sbrkproto='$d_sbrkproto'
d_scalbn='$d_scalbn'
d_scalbnl='$d_scalbnl'
d_sigsetjmp='$d_sigsetjmp'
d_sin6_scope_id='$d_sin6_scope_id'
d_sitearch='$d_sitearch'
-d_snprintf='$d_snprintf'
d_sockaddr_in6='$d_sockaddr_in6'
d_sockaddr_sa_len='$d_sockaddr_sa_len'
d_sockatmark='$d_sockatmark'
d_stdstdio='$d_stdstdio'
d_strchr='$d_strchr'
d_strcoll='$d_strcoll'
-d_strctcpy='$d_strctcpy'
d_strerrm='$d_strerrm'
d_strerror='$d_strerror'
d_strerror_l='$d_strerror_l'
d_strftime='$d_strftime'
d_strlcat='$d_strlcat'
d_strlcpy='$d_strlcpy'
+d_strnlen='$d_strnlen'
d_strtod='$d_strtod'
d_strtol='$d_strtol'
d_strtold='$d_strtold'
+d_strtold_l='$d_strtold_l'
d_strtoll='$d_strtoll'
d_strtoq='$d_strtoq'
d_strtoul='$d_strtoul'
d_telldir='$d_telldir'
d_telldirproto='$d_telldirproto'
d_tgamma='$d_tgamma'
+d_thread_safe_nl_langinfo_l='$d_thread_safe_nl_langinfo_l'
d_time='$d_time'
d_timegm='$d_timegm'
d_times='$d_times'
d_umask='$d_umask'
d_uname='$d_uname'
d_union_semun='$d_union_semun'
+d_unlinkat='$d_unlinkat'
d_unordered='$d_unordered'
d_unsetenv='$d_unsetenv'
d_uselocale='$d_uselocale'
d_void_closedir='$d_void_closedir'
d_voidsig='$d_voidsig'
d_voidtty='$d_voidtty'
-d_volatile='$d_volatile'
d_vprintf='$d_vprintf'
-d_vsnprintf='$d_vsnprintf'
d_wait4='$d_wait4'
d_waitpid='$d_waitpid'
d_wcscmp='$d_wcscmp'
db_version_major='$db_version_major'
db_version_minor='$db_version_minor'
db_version_patch='$db_version_patch'
+default_inc_excludes_dot='$default_inc_excludes_dot'
direntrytype='$direntrytype'
dlext='$dlext'
dlsrc='$dlsrc'
drand48_r_proto='$drand48_r_proto'
dtrace='$dtrace'
dtraceobject='$dtraceobject'
+dtracexnolibs='$dtracexnolibs'
dynamic_ext='$dynamic_ext'
eagain='$eagain'
ebcdic='$ebcdic'
i_varargs='$i_varargs'
i_varhdr='$i_varhdr'
i_vfork='$i_vfork'
+i_wchar='$i_wchar'
i_xlocale='$i_xlocale'
ignore_versioned_solibs='$ignore_versioned_solibs'
inc_version_list='$inc_version_list'