Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Quadmath builds fail on Cygwin in ext/POSIX #15443

Open
p5pRT opened this issue Jul 15, 2016 · 14 comments
Open

Quadmath builds fail on Cygwin in ext/POSIX #15443

p5pRT opened this issue Jul 15, 2016 · 14 comments

Comments

@p5pRT
Copy link

p5pRT commented Jul 15, 2016

Migrated from rt.perl.org#128627 (status was 'open')

Searchable as RT128627$

@p5pRT
Copy link
Author

p5pRT commented Jul 15, 2016

From @dcollinsn

Hello,

Builds on Cygwin configured with​:

./Configure -Dusedevel -des '-Doptimize=-O3 -g' -DDEBUGGING -Dusethreads -Dusequadmath

Fail in the stage of compiling ext/POSIX. The first failing command is the following​:

g++ --shared -Wl,--enable-auto-import -Wl,--export-all-symbols -Wl,--enable-auto-image-base -L/usr/local/lib -fstack-protector-strong -o ../../lib/auto/POSIX/POSIX.dll POSIX.o ../../cygperl5_25_3.dll -lm

Which fails to link against the quadmath symbols. Appending -lquadmath to the command causes it to work. Notably, all the other compilation steps do have correct libraries set. For example, miniperl is successfully linked with​:

gcc -Wl,--enable-auto-import -Wl,--export-all-symbols -Wl,--enable-auto-image-base -fstack-protector-strong -L/usr/local/lib -o miniperl.exe opmini.o perlmini.o gv.o toke.o perly.o pad.o regcomp.o dump.o util.o mg.o reentr.o mro_core.o keywords.o hv.o av.o run.o pp_hot.o sv.o pp.o scope.o pp_ctl.o pp_sys.o doop.o doio.o regexec.o utf8.o taint.o deb.o universal.o globals.o perlio.o perlapi.o numeric.o mathoms.o locale.o pp_pack.o pp_sort.o caretx.o dquote.o time64.o cygwin.o miniperlmain.o -lpthread -ldl -lquadmath

Build log attached. After manually fixing that one command and running `make` again, I got the following perl -V​:

$ ./perl -Ilib -V
Summary of my perl5 (revision 5 version 25 subversion 3) configuration​:
  Local Commit​: e948807
  Ancestor​: 6baaafe
  Platform​:
  osname=cygwin
  osvers=2.5.2(0.29753)
  archname=cygwin-thread-multi-quadmath
  uname='cygwin_nt-10.0 desktop-duoi7f4 2.5.2(0.29753) 2016-06-23 14​:29 x86_64 cygwin '
  config_args='-Dusedevel -des -Doptimize=-O3 -g -DDEBUGGING -Dusethreads -Dusequadmath'
  hint=recommended
  useposix=true
  d_sigaction=define
  useithreads=define
  usemultiplicity=define
  use64bitint=define
  use64bitall=define
  uselongdouble=undef
  usemymalloc=n
  bincompat5005=undef
  Compiler​:
  cc='gcc'
  ccflags ='-DPERL_USE_SAFE_PUTENV -U__STRICT_ANSI__ -fwrapv -DDEBUGGING -fno-strict-aliasing -pipe -fstack-protector-strong -D_FORTIFY_SOURCE=2'
  optimize='-O3 -g'
  cppflags='-DPERL_USE_SAFE_PUTENV -U__STRICT_ANSI__ -fwrapv -DDEBUGGING -fno-strict-aliasing -pipe -fstack-protector-strong'
  ccversion=''
  gccversion='5.4.0'
  gccosandvers=''
  intsize=4
  longsize=8
  ptrsize=8
  doublesize=8
  byteorder=12345678
  doublekind=3
  d_longlong=define
  longlongsize=8
  d_longdbl=define
  longdblsize=16
  longdblkind=3
  ivtype='long'
  ivsize=8
  nvtype='__float128'
  nvsize=16
  Off_t='off_t'
  lseeksize=8
  alignbytes=16
  prototype=define
  Linker and Libraries​:
  ld='g++'
  ldflags =' -Wl,--enable-auto-import -Wl,--export-all-symbols -Wl,--enable-auto-image-base -fstack-protector-strong -L/usr/local/lib'
  libpth=/usr/lib /usr/lib/gcc/x86_64-pc-cygwin/5.4.0/../../../../lib/../include/w32api /usr/local/lib /lib
  libs=-lpthread -ldl -lquadmath
  perllibs=-lpthread -ldl -lquadmath
  libc=/usr/lib/libc.a
  so=dll
  useshrplib=true
  libperl=cygperl5_25_3.dll
  gnulibc_version=''
  Dynamic Linking​:
  dlsrc=dl_dlopen.xs
  dlext=dll
  d_dlsymun=undef
  ccdlflags=' '
  cccdlflags=' '
  lddlflags=' --shared -Wl,--enable-auto-import -Wl,--export-all-symbols -Wl,--enable-auto-image-base -L/usr/local/lib -fstack-protector-strong'

Characteristics of this binary (from libperl)​:
  Compile-time options​:
  DEBUGGING
  HAS_TIMES
  MULTIPLICITY
  PERLIO_LAYERS
  PERL_COPY_ON_WRITE
  PERL_DONT_CREATE_GVSV
  PERL_HASH_FUNC_ONE_AT_A_TIME_HARD
  PERL_IMPLICIT_CONTEXT
  PERL_MALLOC_WRAP
  PERL_OP_PARENT
  PERL_PRESERVE_IVUV
  PERL_TRACK_MEMPOOL
  PERL_USE_DEVEL
  PERL_USE_SAFE_PUTENV
  USE_64_BIT_ALL
  USE_64_BIT_INT
  USE_ITHREADS
  USE_LARGE_FILES
  USE_LOCALE
  USE_LOCALE_COLLATE
  USE_LOCALE_CTYPE
  USE_LOCALE_NUMERIC
  USE_LOCALE_TIME
  USE_PERLIO
  USE_PERL_ATOF
  USE_QUADMATH
  USE_REENTRANT_API
  Locally applied patches​:
  6605cde
  e948807
  Built under cygwin
  Compiled at Jul 15 2016 08​:54​:47
  @​INC​:
  lib
  /usr/local/lib/perl5/site_perl/5.25.3/cygwin-thread-multi-quadmath
  /usr/local/lib/perl5/site_perl/5.25.3
  /usr/local/lib/perl5/5.25.3/cygwin-thread-multi-quadmath
  /usr/local/lib/perl5/5.25.3
  .

--
Respectfully,
Dan Collins

@p5pRT
Copy link
Author

p5pRT commented Jul 15, 2016

From @dcollinsn

./Configure -Dusedevel -des '-Doptimize=-O3 -g' -DDEBUGGING -Dusethreads -Dusequadmath
in dir /home/dcollins/buildbot/cygwin1/cygquad/build (timeout 1200 secs)
watching logfiles {}
argv​: ['./Configure', '-Dusedevel', '-des', '-Doptimize=-O3 -g', '-DDEBUGGING', '-Dusethreads', '-Dusequadmath']
environment​:
  !​::=​::\
  ALLUSERSPROFILE=C​:\ProgramData
  APPDATA=C​:\Users\dcollins\AppData\Roaming
  COMMONPROGRAMFILES=C​:\Program Files\Common Files
  COMPUTERNAME=DESKTOP-DUOI7F4
  COMSPEC=C​:\Windows\system32\cmd.exe
  CommonProgramFiles(x86)=C​:\Program Files (x86)\Common Files
  CommonProgramW6432=C​:\Program Files\Common Files
  EXECIGNORE=*.dll
  HOME=/home/dcollins
  HOMEDRIVE=C​:
  HOMEPATH=\Users\dcollins
  HOSTNAME=DESKTOP-DUOI7F4
  INFOPATH=/usr/local/info​:/usr/share/info​:/usr/info
  LANG=en_US.UTF-8
  LOCALAPPDATA=C​:\Users\dcollins\AppData\Local
  LOGONSERVER=\\DESKTOP-DUOI7F4
  NUMBER_OF_PROCESSORS=8
  OLDPWD=/home/dcollins/perl
  ORIGINAL_PATH=/cygdrive/c/Perl64/site/bin​:/cygdrive/c/Perl64/bin​:/cygdrive/c/ProgramData/Oracle/Java/javapath​:/cygdrive/c/Windows/system32​:/cygdrive/c/Windows​:/cygdrive/c/Windows/System32/Wbem​:/cygdrive/c/Windows/System32/WindowsPowerShell/v1.0​:/cygdrive/c/Program Files (x86)/NVIDIA Corporation/PhysX/Common​:/cygdrive/c/Users/dcollins/AppData/Local/Programs/MiKTeX 2.9/miktex/bin
  OS=Windows_NT
  PATH=/usr/local/bin​:/usr/bin​:/cygdrive/c/Perl64/site/bin​:/cygdrive/c/Perl64/bin​:/cygdrive/c/ProgramData/Oracle/Java/javapath​:/cygdrive/c/Windows/system32​:/cygdrive/c/Windows​:/cygdrive/c/Windows/System32/Wbem​:/cygdrive/c/Windows/System32/WindowsPowerShell/v1.0​:/cygdrive/c/Program Files (x86)/NVIDIA Corporation/PhysX/Common​:/cygdrive/c/Users/dcollins/AppData/Local/Programs/MiKTeX 2.9/miktex/bin
  PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
  PRINTER=Brother HL-2270DW series Printer
  PROCESSOR_ARCHITECTURE=AMD64
  PROCESSOR_IDENTIFIER=Intel64 Family 6 Model 94 Stepping 3, GenuineIntel
  PROCESSOR_LEVEL=6
  PROCESSOR_REVISION=5e03
  PROFILEREAD=true
  PROGRAMFILES=C​:\Program Files
  PS1=\[\e]0;\w\a\]\n\[\e[32m\]\u@​\h \[\e[33m\]\w\[\e[0m\]\n\$
  PSModulePath=C​:\Program Files\WindowsPowerShell\Modules;C​:\Windows\system32\WindowsPowerShell\v1.0\Modules
  PUBLIC=C​:\Users\Public
  PWD=/home/dcollins/buildbot/cygwin1/cygquad/build
  ProgramData=C​:\ProgramData
  ProgramFiles(x86)=C​:\Program Files (x86)
  ProgramW6432=C​:\Program Files
  SESSIONNAME=Console
  SHELL=/bin/bash
  SHLVL=1
  SYSTEMDRIVE=C​:
  SYSTEMROOT=C​:\Windows
  TEMP=/tmp
  TERM=xterm
  TMP=/tmp
  TZ=America/New_York
  USER=dcollins
  USERDOMAIN=DESKTOP-DUOI7F4
  USERDOMAIN_ROAMINGPROFILE=DESKTOP-DUOI7F4
  USERNAME=dcollins
  USERPROFILE=C​:\Users\dcollins
  VBOX_MSI_INSTALL_PATH=C​:\Program Files\Oracle\VirtualBox\
  WINDIR=C​:\Windows
  _=/usr/bin/buildslave
  asl.log=Destination=file
using PTY​: False
First let's make sure your kit is complete. Checking...
Locating common programs...
Checking compatibility between /usr/bin/echo.exe and builtin echo (if any)...
Symbolic links are supported.
Checking how to test for symbolic links...
You can test for symbolic links with 'test -h'.
Checking for cross-compile
No targethost for running compiler tests against defined, running locally
Good, your tr supports [​:lower​:] and [​:upper​:] to convert case.
Using [​:upper​:] and [​:lower​:] to convert case.
aix dragonfly irix_4 nonstopux stellar
aix_3 dynix irix_5 openbsd sunos_4_0
aix_4 dynixptx irix_6 opus sunos_4_1
altos486 epix irix_6_0 os2 super-ux
amigaos esix4 irix_6_1 os390 svr4
atheos fps isc os400 svr5
aux_3 freebsd isc_2 posix-bc ti1500
bitrig freemint linux powerux ultrix_4
bsdos genix linux-android qnx umips
catamount gnu lynxos riscos unicos
convexos gnukfreebsd midnightbsd sco unicosmk
cxux gnuknetbsd mips sco_2_3_0 unisysdynix
cygwin greenhills mirbsd sco_2_3_1 utekv
darwin haiku mpc sco_2_3_2 uwin
dcosx hpux ncr_tower sco_2_3_3 vos
dec_osf i386 netbsd sco_2_3_4
dos_djgpp interix newsos4 solaris_2
Which of these apply, if any? [cygwin]
Operating system name? [cygwin]
Operating system version? [2.5.2(0.29753)]
Installation prefix to use? (~name ok) [/usr/local]
AFS does not seem to be running...
What installation prefix should I use for installing files? (~name ok)
[/usr/local]
Getting the current patchlevel...
Build a threading Perl? [y]
Use which C compiler? [gcc]
Checking for GNU cc in disguise and/or its version number...
Now, how can we feed standard input to your C preprocessor...
Directories to use for library searches?
[/usr/lib /usr/lib/gcc/x86_64-pc-cygwin/5.4.0/../../../../lib/../include/w32api /usr/local/lib /lib]
What is the file extension used for shared libraries? [dll]
Make shared library basenames unique? [n]
Build Perl for SOCKS? [n]
Try to use long doubles if available? [n]
Checking for optional libraries...
What libraries to use? [-lpthread -ldl -lquadmath]
What optimizer/debugger flag should be used? [-O3 -g]
Any additional cc flags?
[-DPERL_USE_SAFE_PUTENV -U__STRICT_ANSI__ -fwrapv -DDEBUGGING -fno-strict-aliasing -pipe -fstack-protector-strong]
Let me guess what the preprocessor flags are...
Any additional ld flags (NOT including libraries)?
[ -Wl,--enable-auto-import -Wl,--export-all-symbols -Wl,--enable-auto-image-base -fstack-protector-strong -L/usr/local/lib]
Checking your choice of C compiler and flags for coherency...
Computing filename position in cpp output for #include directives...
<stdlib.h> found.
Checking to see how big your integers are...
Checking to see if you have long long...
Checking to see how big your long longs are...
<inttypes.h> found.
Checking to see if you have int64_t...
Checking which 64-bit integer type we could use...
We could use 'long' for 64-bit integers.
Try to use maximal 64-bit support, if available? [y]
Checking if your C library has broken 64-bit functions...
Checking for GNU C Library...
Shall I use /usr/bin/nm to extract C symbols from the libraries? [y]
Where is your C library? [/usr/lib/libc.a]
Extracting names from the following files for later perusal​:
  /usr/lib/libc.a
  /usr/lib/libdl.a
  /usr/lib/libpthread.a
  /usr/lib/libquadmath.dll.a
This may take a while....done.
Checking for C++...
Checking to see how big your double precision numbers are...
<float.h> found.
Checking to see if you have long double...
ldexpl() NOT found.
Checking to see how big your long doubles are...
Checking the kind of long doubles you have...
You have x86 80-bit little endian long doubles.
What is your architecture name [cygwin]
Add the Perl API version to your archname? [n]
Threads selected.
...setting architecture name to cygwin-thread.
Multiplicity selected.
...setting architecture name to cygwin-thread-multi.
This architecture is naturally 64-bit, not changing architecture name.
quadmath selected.
...setting architecture name to cygwin-thread-multi-quadmath.
Pathname where the public executables will reside? (~name ok)
[/usr/local/bin]
Use relocatable @​INC? [n]
Pathname where the private library files will reside? (~name ok)
[/usr/local/lib/perl5/5.25.3]
Where do you want to put the public architecture-dependent libraries? (~name ok)
[/usr/local/lib/perl5/5.25.3/cygwin-thread-multi-quadmath]
Other username to test security of setuid scripts with? [none]
I'll assume setuid scripts are *not* secure.
Does your kernel have *secure* setuid scripts? [n]
Installation prefix to use for add-on modules and utilities? (~name ok)
[/usr/local]
Pathname for the site-specific library files? (~name ok)
[/usr/local/lib/perl5/site_perl/5.25.3]
List of earlier versions to include in @​INC? [none]
<malloc/malloc.h> NOT found.
<malloc.h> found.
Checking to see how big your pointers are...
Do you wish to wrap malloc calls to protect against potential overflows? [y]
Do you wish to attempt to use the malloc that comes with perl5? [n]
Your system wants malloc to return 'void *', it would seem.
Your system uses void free(), it would seem.
Pathname for the site-specific architecture-dependent library files? (~name ok)
[/usr/local/lib/perl5/site_perl/5.25.3/cygwin-thread-multi-quadmath]
Do you want to configure vendor-specific add-on directories? [n]
Colon-separated list of additional directories for perl to search? [none]
Checking out function prototypes...
Support DTrace if available? [n]
Install any extra modules (y or n)? [n]
Directory for the main Perl5 html pages? (~name ok) [none]
Directory for the Perl5 module html pages? (~name ok) [none]
Do you want to install perl as /usr/bin/perl? [n]
dlopen() found.
<unistd.h> found.
Do you wish to use dynamic loading? [y]
Source file to use for dynamic loading [ext/DynaLoader/dl_dlopen.xs]
Any special flags to pass to gcc -c to compile shared library modules?
[none]
What command should be used to create dynamic libraries? [g++]
Any special flags to pass to g++ to create a dynamically loaded library?
[ --shared -Wl,--enable-auto-import -Wl,--export-all-symbols -Wl,--enable-auto-image-base -L/usr/local/lib -fstack-protector-strong]
Any special flags to pass to gcc to use dynamic linking? [none]
Build a shared libperl.dll (y/n) [y]
What name do you want to give to the shared libperl? [cygperl5_25_3.dll]
System manual is in /usr/share/man/man1.
Where do the main Perl5 manual pages (source) go? (~name ok)
[/usr/local/man/man1]
What suffix should be used for the main Perl5 man pages? [1]
You can have filenames longer than 14 characters.
Where do the perl5 library man pages (source) go? (~name ok)
[/usr/local/man/man3]
What suffix should be used for the perl5 library man pages? [3pm]
Figuring out host name...
Your host name appears to be "DESKTOP-DUOI7F4". Right? [y]
What is your domain name? [.nonet]
What is your e-mail address? [dcollins@​desktop-duoi7f4.nonet]
Perl administrator e-mail address [dcollins@​desktop-duoi7f4.nonet]
Do you want to use a version number suffix for installed binaries? [y]
What shall I put after the #! to start up perl ("none" to not use #!)?
[/usr/local/bin/perl5.25.3]
Where do you keep publicly executable scripts? (~name ok) [/usr/local/bin]
Pathname where the add-on public executables should be installed? (~name ok)
[/usr/local/bin]
Pathname where the site-specific html pages should be installed? (~name ok)
[none]
Pathname where the site-specific library html pages should be installed? (~name ok)
[none]
Pathname where the site-specific manual pages should be installed? (~name ok)
[/usr/local/man/man1]
Pathname where the site-specific library manual pages should be installed? (~name ok)
[/usr/local/man/man3]
Pathname where add-on public executable scripts should be installed? (~name ok)
[/usr/local/bin]
backtrace() NOT found.
Use the "fast stdio" if available? [n]
off_t found.
Checking to see how big your file offsets are...
fpos_t found.
Checking the size of fpos_t...
Using <string.h> instead of <strings.h>.
qgcvt() NOT found.
Checking the kind of doubles you have...
You have IEEE 754 64-bit little endian doubles.
Checking how to print long doubles...
gconvert NOT found.
gcvt() found.
sprintf() found.
I'll use sprintf to convert floats into a string.
fwalk() NOT found.
access() found.
<unistd.h> defines the *_OK access constants.
accessx() NOT found.
acosh() NOT found.
aintl() NOT found.
alarm() found.
ctime64() NOT found.
localtime64() NOT found.
gmtime64() NOT found.
mktime64() NOT found.
difftime64() NOT found.
asctime64() NOT found.
<pthread.h> found.
<sys/types.h> found.
<sys/select.h> found.
Testing to see if we should include <time.h>, <sys/time.h> or both.
We'll include <sys/time.h>.
Checking to see if your struct tm has tm_zone field...
Checking to see if your struct tm has tm_gmtoff field...
asctime_r() found.
asinh() NOT found.
atanh() NOT found.
atolf() NOT found.
atoll() found.
Checking whether your compiler can handle __attribute__((format)) ...
Checking whether your compiler allows __printf__ format to be null ...
Checking whether your compiler can handle __attribute__((malloc)) ...
Checking whether your compiler can handle __attribute__((nonnull(1))) ...
Checking whether your compiler can handle __attribute__((noreturn)) ...
Checking whether your compiler can handle __attribute__((pure)) ...
Checking whether your compiler can handle __attribute__((unused)) ...
Checking whether your compiler can handle __attribute__((deprecated)) ...
Checking whether your compiler can handle __attribute__((warn_unused_result)) ...
bcmp() found.
bcopy() found.
getpgrp() found.
You have to use getpgrp() instead of getpgrp(pid).
setpgrp() found.
You have to use setpgrp() instead of setpgrp(pid,pgrp).
Checking whether your compiler can handle __builtin_choose_expr ...
Checking whether your compiler can handle __builtin_expect ...
bzero() found.
<stdarg.h> found.
<varargs.h> found.
We'll include <stdarg.h> to get va_dcl definition.
You have <stdarg.h> and <stdlib.h>, so checking for C99 variadic macros.
You have C99 variadic macros.
You have void (*signal())().
Checking whether your C compiler can cast large floats to int32.
Checking whether your C compiler can cast negative float to unsigned.
cbrt() NOT found.
vprintf() found.
Your vsprintf() returns (int).
chown() found.
chroot() found.
chsize() NOT found.
class() NOT found.
clearenv() NOT found.
Hmm... Looks like you have Berkeley networking support.
socketpair() found.
Checking the availability sa_len in the sock struct ...
Checking the availability struct sockaddr_in6 ...
Checking the availability sin6_scope_id in struct sockaddr_in6 ...
Checking the availability struct ip_mreq ...
Checking the availability struct ip_mreq_source ...
Checking the availability struct ipv6_mreq ...
Checking the availability struct ipv6_mreq_source ...
Checking the availability of certain socket constants...
<sys/uio.h> found.
Checking to see if your system supports struct cmsghdr...
Checking to see if your C compiler knows about "const"...
copysign() NOT found.
copysignl() NOT found.
crypt() NOT found.
crypt() NOT found.
<crypt.h> NOT found.
crypt_r() NOT found.
ctermid() found.
ctermid_r() NOT found.
ctime_r() found.
cuserid() found.
<limits.h> found.
DBL_DIG found.
dbmclose() NOT found.
difftime() found.
<dirent.h> found.
Your directory entries are struct dirent.
Your directory entry does not know about the d_namlen field.
Checking to see if DIR has a dd_fd member variable
<sys/dir.h> found.
<sys/ndir.h> NOT found.
dirfd() found.
dladdr() NOT found.
dlerror() found.
<dlfcn.h> found.
What is the extension of dynamically loaded modules [dll]
Checking whether your dlsym() needs a leading underscore ...
dlsym doesn't need a leading underscore.
drand48_r() NOT found.
dup2() found.
eaccess() found.
endgrent() found.
<grp.h> found.
endgrent_r() NOT found.
endhostent() found.
<netdb.h> found.
endhostent_r() NOT found.
endnetent() NOT found.
endnetent_r() NOT found.
endprotoent() found.
endprotoent_r() NOT found.
endpwent() found.
<pwd.h> found.
endpwent_r() NOT found.
endservent() found.
endservent_r() NOT found.
<sys/file.h> defines the O_* constants...
and you have the 3 argument form of open().
<sys/file.h> found.
We'll be including <sys/file.h>.
<fcntl.h> found.
We don't need to include <fcntl.h> if we include <sys/file.h>.
fork() found.
pipe() found.
Figuring out the flag used by open() for non-blocking I/O...
Let's see what value errno gets from read() on a O_NONBLOCK file...
erf() NOT found.
erfc() NOT found.
exp2() NOT found.
expm1() NOT found.
Checking how std your stdio is...
Checking to see what happens if we set the stdio ptr...
Increasing ptr in your stdio leaves cnt unchanged. Good.
You seem to have 'fast stdio' to directly manipulate the stdio buffers.
fchdir() found.
fchmod() found.
fchown() found.
fcntl() found.
Well, your system knows about the normal fd_set typedef...
and you have the normal fd_set macros (just as I'd expect).
fdclose() NOT found.
fdim() NOT found.
fegetround() found.
fgetpos() found.
finite() NOT found.
finitel() NOT found.
flock() found.
fma() NOT found.
fmax() NOT found.
fmin() NOT found.
fp_class() NOT found.
<math.h> found.
Checking to see if you have fpclassify...
fp_classify() NOT found.
fp_classl() NOT found.
pathconf() found.
fpathconf() found.
fpclass() NOT found.
fpclassl() NOT found.
fpgetround() NOT found.
Checking to see if you have fpos64_t...
<xlocale.h> NOT found.
newlocale() NOT found.
freelocale() NOT found.
uselocale() NOT found.
duplocale() NOT found.
querylocale() NOT found.
frexpl() NOT found.
<sys/param.h> found.
<sys/mount.h> found.
Checking to see if your system supports struct fs_data...
fseeko() found.
fsetpos() found.
fstatfs() found.
statvfs() found.
fstatvfs() found.
fsync() found.
ftello() found.
Checking if you have a working futimes()
Yes, you have
<ndbm.h> NOT found.
<gdbm/ndbm.h> NOT found.
<gdbm-ndbm.h> NOT found.
getaddrinfo() found.
getcwd() found.
getespwnam() NOT found.
getfsstat() NOT found.
getgrent() found.
getgrent_r() NOT found.
getgrgid_r() found.
getgrnam_r() found.
gethostbyaddr() found.
gethostbyname() found.
gethostent() NOT found.
gethostname() found.
uname() found.
Shall I ignore gethostname() from now on? [n]
gethostbyaddr_r() NOT found.
gethostbyname_r() NOT found.
gethostent_r() NOT found.
getitimer() found.
getlogin() found.
getlogin_r() found.
getmnt() NOT found.
getmntent() found.
getnameinfo() found.
getnetbyaddr() NOT found.
getnetbyname() NOT found.
getnetent() NOT found.
getnetbyaddr_r() NOT found.
getnetbyname_r() NOT found.
getnetent_r() NOT found.
getpagesize() found.
getprotobyname() found.
getprotobynumber() found.
getprotoent() found.
getpgid() found.
getpgrp2() NOT found.
getppid() found.
getpriority() found.
getprotobyname_r() NOT found.
getprotobynumber_r() NOT found.
getprotoent_r() NOT found.
getprpwnam() NOT found.
getpwent() found.
getpwent_r() NOT found.
getpwnam_r() found.
getpwuid_r() found.
getservbyname() found.
getservbyport() found.
getservent() found.
getservbyname_r() NOT found.
getservbyport_r() NOT found.
getservent_r() NOT found.
getspnam() NOT found.
<shadow.h> NOT found.
getspnam_r() NOT found.
gettimeofday() found.
gmtime_r() found.
hasmntopt() NOT found.
<netinet/in.h> found.
<arpa/inet.h> found.
htonl() found.
hypot() NOT found.
ilogb() NOT found.
ilogbl() NOT found.
strchr() found.
inet_aton() found.
inet_ntop() found.
inet_pton() found.
isascii() found.
isblank() found.
Checking to see if you have isfinite...
isfinitel() NOT found.
Checking to see if you have isinf...
isinfl() NOT found.
Checking to see if you have isless...
Checking to see if you have isnan...
isnanl() NOT found.
Checking to see if you have isnormal...
j0() NOT found.
j0l() NOT found.
killpg() found.
localeconv() found.
lchown() found.
LDBL_DIG found.
lgamma() NOT found.
lgamma_r() NOT found.
Checking to see if your libm supports _LIB_VERSION...
No, it does not (probably harmless)
link() found.
llrint() NOT found.
llrintl() NOT found.
llround() NOT found.
llroundl() NOT found.
localtime_r() found.
lockf() found.
log1p() NOT found.
log2() NOT found.
logb() NOT found.
lrint() NOT found.
lrintl() NOT found.
lround() NOT found.
lroundl() NOT found.
lstat() found.
madvise() found.
malloc_size() NOT found.
malloc_good_size() NOT found.
mblen() found.
mbstowcs() found.
mbtowc() found.
memchr() found.
memcmp() found.
memcpy() found.
memmem() found.
memmove() found.
memset() found.
mkdir() found.
mkdtemp() found.
mkfifo() found.
mkstemp() found.
mkstemps() found.
mktime() found.
<sys/mman.h> found.
mmap() found.
and it returns (void *).
sqrtl() NOT found.
scalbnl() NOT found.
truncl() NOT found.
modfl() NOT found.
mprotect() found.
msgctl() found.
msgget() found.
msgsnd() found.
msgrcv() found.
You have the full msg*(2) library.
Checking to see if your system supports struct msghdr...
msync() found.
munmap() found.
nan() NOT found.
nearbyint() NOT found.
nextafter() NOT found.
nexttoward() NOT found.
nice() found.
<langinfo.h> found.
nl_langinfo() found.
<quadmath.h> found.
Checking to see if your C compiler knows about "volatile"...
Choosing the C types to be used for Perl's internal types...
Checking how many bits of your UVs your NVs can preserve...
Checking to find the largest integer value your NVs can hold...
The largest integer your NVs can preserve is equal to 256.0*256.0*256.0*256.0*256.0*256.0*256.0*256.0*256.0*256.0*256.0*256.0*256.0*256.0*2.0
Checking whether NV 0.0 is all bits zero in memory...
0.0 is represented as all bits zero in memory
Checking to see if you have off64_t...
Checking what constant to use for creating joinable pthreads...
You seem to use PTHREAD_CREATE_JOINABLE.
pause() found.
poll() found.
prctl() NOT found.
readlink() found.
vfork() found.
Do you still want to use vfork()? [n]
pthread_atfork found.
pthread_attr_setscope() found.
sched_yield() found.
pthread_yield() found.
Checking to see if you have ptrdiff_t...
random_r() NOT found.
readdir() found.
seekdir() found.
telldir() found.
rewinddir() found.
readdir64_r() NOT found.
readdir_r() found.
readv() found.
recvmsg() found.
regcomp() found.
remainder() NOT found.
remquo() NOT found.
rename() found.
rint() NOT found.
rmdir() found.
round() NOT found.
<memory.h> found.
Checking if your memcmp() can compare relative magnitude...
scalbn() NOT found.
select() found.
semctl() found.
semget() found.
semop() found.
You have the full sem*(2) library.
You do not have union semun in <sys/sem.h>.
You can use union semun for semctl IPC_STAT.
You can also use struct semid_ds* for semctl IPC_STAT.
sendmsg() found.
setegid() found.
seteuid() found.
setgrent() found.
setgrent_r() NOT found.
sethostent() found.
sethostent_r() NOT found.
setitimer() found.
setlinebuf() found.
setlocale() found.
<locale.h> found.
setlocale_r() NOT found.
setnetent() NOT found.
setnetent_r() NOT found.
setprotoent() found.
setpgid() found.
setpgrp2() NOT found.
setpriority() found.
setproctitle() NOT found.
setprotoent_r() NOT found.
setpwent() found.
setpwent_r() NOT found.
setregid() found.
setresgid() NOT found.
setreuid() found.
setresuid() NOT found.
setrgid() NOT found.
setruid() NOT found.
setservent() found.
setservent_r() NOT found.
setsid() found.
setvbuf() found.
shmctl() found.
shmget() found.
shmat() found.
and it returns (void *).
shmdt() found.
You have the full shm*(2) library.
sigaction() found.
pid_t found.
Checking if your siginfo_t has si_errno field...
Checking if your siginfo_t has si_pid field...
Checking if your siginfo_t has si_uid field...
Checking if your siginfo_t has si_addr field...
Checking if your siginfo_t has si_status field...
Checking if your siginfo_t has si_band field...
Checking if your siginfo_t has si_value field...
Checking if your siginfo_t has si_fd field...
<sunmath.h> NOT found.
Checking to see if you have signbit() available to work on __float128... Yes.
sigprocmask() found.
POSIX sigsetjmp found.
snprintf() found.
vsnprintf() found.
sockatmark() found.
socks5_init() NOT found.
Checking whether sprintf returns the length of the string...
sprintf returns the length of the string (as ANSI says it should)
srand48_r() NOT found.
srandom_r() NOT found.
stat() found.
<sys/stat.h> found.
Checking to see if your struct stat has st_blocks field...
<sys/vfs.h> found.
<sys/statfs.h> found.
Checking to see if your system supports struct statfs...
Checking to see if your struct statfs has f_flags field...
Your compiler supports static __inline__.
Checking how to access stdio streams by file descriptor number...
I can't figure out how to access stdio streams by file descriptor number.
strcoll() found.
Checking to see if your C compiler can copy structs...
strerror() found.
strerror_l() NOT found.
strerror_r() found.
strftime() found.
strlcat() found.
strlcpy() found.
strtod() found.
strtol() found.
strtold() found.
strtoll() found.
strtoq() NOT found.
strtoul() found.
strtoull() found.
strtouq() NOT found.
strxfrm() found.
symlink() found.
syscall() NOT found.
sysconf() found.
system() found.
tcgetpgrp() found.
tcsetpgrp() found.
tgamma() NOT found.
time() found.
time_t found.
timegm() found.
<sys/times.h> found.
times() found.
clock_t found.
tmpnam_r() NOT found.
trunc() NOT found.
truncate() found.
ttyname_r() found.
tzname[] NOT found.
(Testing for character data alignment may crash the test. That's okay.)
It seems that you must access character data in an aligned manner.
ualarm() found.
umask() found.
unordered() NOT found.
unsetenv() found.
usleep() found.
ustat() NOT found.
closedir() found.
Checking whether closedir() returns a status...
wait4() found.
waitpid() found.
A working wcscmp() found.
wcstombs() found.
A working wcsxfrm() found.
wctomb() found.
writev() found.
Checking alignment constraints...
Doubles must be aligned on a how-many-byte boundary? [16]
Checking how long a character is (in bits)...
What is the length of a character (in bits)? [8]
Checking to see how your cpp does stuff like concatenate tokens...
Oh! Smells like ANSI's been here.
<db.h> NOT found.
Checking the kind of infinities and nans you have...
Checking how many mantissa bits your doubles have...
Checking how many mantissa bits your long doubles have...
Checking how many mantissa bits your NVs have...
Using our internal random number implementation...
Determining whether or not we are on an EBCDIC system...
Nope, no EBCDIC, probably ASCII or some ISO Latin. Or UTF-8.
Checking how to flush all pending stdio output...
Your fflush(NULL) works okay for output streams.
Let's see if it clobbers input pipes...
fflush(NULL) seems to behave okay with input streams.
Checking the size of gid_t...
Checking the sign of gid_t...
Checking how to print 64-bit integers...
Checking the format strings to be used for Perl's internal types...
Checking the format string to be used for gids...
getgroups() found.
setgroups() found.
What type pointer is the second argument to getgroups() and setgroups()?
[gid_t]
Checking if your /usr/bin/make program sets $(MAKE)...
mode_t found.
It seems that you don't need va_copy().
size_t found.
What pager is used on your system? [/usr/bin/less.exe -R]
Checking how to generate random libraries on your machine...
<values.h> NOT found.
Your select() operates on 64 bits at a time.
Generating a list of signal names and numbers...
Checking the size of size_t...
Checking to see if you have socklen_t...
<socks.h> NOT found.
I'll be using ssize_t for functions returning a byte count.
Checking the size of st_ino...
Checking the sign of st_ino...
Your stdio uses signed chars.
Checking the size of uid_t...
Checking the sign of uid_t...
Checking the format string to be used for uids...
Determining whether we can use sysctl with KERN_PROC_PATHNAME to find executing program...
I'm unable to compile the test program.
I'll assume no sysctl with KERN_PROC_PATHNAME here.
Determining whether we can use _NSGetExecutablePath to find executing program...
I'm unable to compile the test program.
I'll assume no _NSGetExecutablePath here.
It appears we'll be able to prototype varargs functions.
Which compiler compiler (yacc) shall I use? [yacc]
<assert.h> found.
<bfd.h> found.
<execinfo.h> NOT found.
<fenv.h> found.
<fp.h> NOT found.
<fp_class.h> NOT found.
<gdbm.h> NOT found.
<ieeefp.h> found.
<libutil.h> NOT found.
<mach/cthreads.h> NOT found.
<mntent.h> found.
<net/errno.h> NOT found.
<netinet/tcp.h> found.
<poll.h> found.
<prot.h> NOT found.
Guessing which symbols your C compiler and preprocessor define...
Adding -D_FORTIFY_SOURCE=2 to ccflags...
tcsetattr() found.
You have POSIX termios.h... good!
<stdbool.h> found.
<stddef.h> found.
<stdint.h> found.
<sys/access.h> NOT found.
<sys/filio.h> NOT found.
<sys/ioctl.h> found.
<syslog.h> found.
<sys/mode.h> NOT found.
<sys/poll.h> found.
<sys/resource.h> found.
<sys/security.h> NOT found.
<sys/statvfs.h> found.
<sys/un.h> found.
<sys/utsname.h> found.
<sys/wait.h> found.
<ustat.h> NOT found.
<utime.h> found.
Looking for extensions...
What extensions do you wish to load dynamically?
[arybase attributes B Compress/Raw/Bzip2 Compress/Raw/Zlib Cwd Data/Dumper Devel/Peek Devel/PPPort Digest/MD5 Digest/SHA Encode Fcntl File/DosGlob File/Glob Filter/Util/Call Hash/Util Hash/Util/FieldHash I18N/Langinfo IO IPC/SysV List/Util Math/BigInt/FastCalc MIME/Base64 mro Opcode PerlIO/encoding PerlIO/mmap PerlIO/scalar PerlIO/via POSIX re SDBM_File Socket Storable Sys/Hostname Sys/Syslog threads threads/shared Tie/Hash/NamedCapture Time/HiRes Time/Piece Unicode/Collate Unicode/Normalize Win32 Win32API/File XS/APItest XS/Typemap]
What extensions do you wish to load statically? [Win32CORE]
Stripping down executable paths...
Creating config.sh...
Doing variable substitutions on .SH files...
Extracting config.h (with variable substitutions)
cflags.SH​: Adding -Werror=declaration-after-statement.
cflags.SH​: Adding -Wextra.
cflags.SH​: Adding -Wc++-compat.
cflags.SH​: Adding -Wwrite-strings.
cflags.SH​: Adding -Wno-format because of usequadmath.
cflags.SH​: cc = gcc
cflags.SH​: ccflags = -DPERL_USE_SAFE_PUTENV -U__STRICT_ANSI__ -fwrapv -DDEBUGGING -fno-strict-aliasing -pipe -fstack-protector-strong -D_FORTIFY_SOURCE=2
cflags.SH​: stdflags =
cflags.SH​: optimize = -O3 -g
cflags.SH​: warn = -Wall -Werror=declaration-after-statement -Wextra -Wc++-compat -Wwrite-strings -Wno-format
Extracting cflags (with variable substitutions)
Not re-extracting config.h
Extracting makedepend (with variable substitutions)
Extracting Makefile (with variable substitutions)
Extracting myconfig (with variable substitutions)
Extracting pod/Makefile (with variable substitutions)
Extracting Policy.sh (with variable substitutions)
Extracting runtests (with variable substitutions)
Run make depend now? [y]
gcc -c -DPERL_CORE -DPERL_USE_SAFE_PUTENV -U__STRICT_ANSI__ -fwrapv -DDEBUGGING -fno-strict-aliasing -pipe -fstack-protector-strong -D_FORTIFY_SOURCE=2 -O3 -g -Wall -Werror=declaration-after-statement -Wextra -Wc++-compat -Wwrite-strings -Wno-format generate_uudmap.c
gcc -o generate_uudmap.exe -Wl,--enable-auto-import -Wl,--export-all-symbols -Wl,--enable-auto-image-base -fstack-protector-strong -L/usr/local/lib generate_uudmap.o -lpthread -ldl -lquadmath
./generate_uudmap.exe uudmap.h bitcount.h mg_data.h
sh ./makedepend MAKE="make" cflags
make[1]​: Entering directory '/home/dcollins/buildbot/cygwin1/cygquad/build'
rm -f opmini.c
/usr/bin/ln.exe -s op.c opmini.c
rm -f perlmini.c
/usr/bin/ln.exe -s perl.c perlmini.c
echo av.c scope.c op.c doop.c doio.c dump.c gv.c hv.c mg.c reentr.c mro_core.c perl.c perly.c pp.c pp_hot.c pp_ctl.c pp_sys.c regcomp.c regexec.c utf8.c sv.c taint.c toke.c util.c deb.c run.c universal.c pad.c globals.c keywords.c perlio.c perlapi.c numeric.c mathoms.c locale.c pp_pack.c pp_sort.c caretx.c dquote.c time64.c miniperlmain.c opmini.c perlmini.c | tr ' ' '\n' >.clist
make[1]​: Leaving directory '/home/dcollins/buildbot/cygwin1/cygquad/build'
Finding dependencies for av.o.
Finding dependencies for scope.o.
Finding dependencies for op.o.
Finding dependencies for doop.o.
Finding dependencies for doio.o.
Finding dependencies for dump.o.
Finding dependencies for gv.o.
Finding dependencies for hv.o.
Finding dependencies for mg.o.
Finding dependencies for reentr.o.
Finding dependencies for mro_core.o.
Finding dependencies for perl.o.
Finding dependencies for perly.o.
Finding dependencies for pp.o.
Finding dependencies for pp_hot.o.
Finding dependencies for pp_ctl.o.
Finding dependencies for pp_sys.o.
Finding dependencies for regcomp.o.
Finding dependencies for regexec.o.
Finding dependencies for utf8.o.
Finding dependencies for sv.o.
Finding dependencies for taint.o.
Finding dependencies for toke.o.
Finding dependencies for util.o.
Finding dependencies for deb.o.
Finding dependencies for run.o.
Finding dependencies for universal.o.
Finding dependencies for pad.o.
Finding dependencies for globals.o.
Finding dependencies for keywords.o.
Finding dependencies for perlio.o.
Finding dependencies for perlapi.o.
Finding dependencies for numeric.o.
Finding dependencies for mathoms.o.
Finding dependencies for locale.o.
Finding dependencies for pp_pack.o.
Finding dependencies for pp_sort.o.
Finding dependencies for caretx.o.
Finding dependencies for dquote.o.
Finding dependencies for time64.o.
Finding dependencies for miniperlmain.o.
Finding dependencies for opmini.o.
Finding dependencies for perlmini.o.
Updating GNUmakefile...
Now you must run 'make'.

If you compile perl5 on a different machine or from a different object
directory, copy the Policy.sh file from this object directory to the
new one before you run Configure -- this will help you with most of
the policy defaults.

program finished with exit code 0
elapsedTime=117.495738

@p5pRT
Copy link
Author

p5pRT commented Jul 15, 2016

From @dcollinsn

make.stdio.txt

@p5pRT
Copy link
Author

p5pRT commented Dec 15, 2017

From @pjacklam

I have attached a patch that fixes this. With the patch I am able to build Perl with quadmath support on Cygwin. Woohoo!

@p5pRT
Copy link
Author

p5pRT commented Dec 15, 2017

From @pjacklam

perl-5.27.6.patch
diff -c -r perl-5.27.6/ext/POSIX/Makefile.PL perl-5.27.6-patched/ext/POSIX/Makefile.PL
*** perl-5.27.6/ext/POSIX/Makefile.PL	2017-10-27 03:58:42.000000000 +0200
--- perl-5.27.6-patched/ext/POSIX/Makefile.PL	2017-12-15 11:27:45.658871300 +0100
***************
*** 20,25 ****
--- 20,28 ----
  if ($^O eq 'aix' && $Config{uselongdouble}) {
      push @libs, qw(c128);
  }
+ if ($^O eq 'cygwin' && $Config{usequadmath}) {
+     push @libs, qw(quadmath);
+ }
  WriteMakefile(
      NAME	=> 'POSIX',
      @libs ? ( 'LIBS' => [ join(" ", map { "-l$_" } @libs) ] ) : (),

@p5pRT
Copy link
Author

p5pRT commented Dec 15, 2017

The RT System itself - Status changed from 'new' to 'open'

@p5pRT
Copy link
Author

p5pRT commented Jan 7, 2018

From @pjacklam

With the patch I included above, I was able to build Perl versions 5.24.3, 5.26.1, 5.27.3, 5.27.4, 5.27.5, 5.27.6, and 5.27.7 on both i686 (32-bit Cygwin) and x86_64 (64-bit Cygwin). All of them were built using GCC version 7.2.0.

I also tried GCC versions 4.9.4, 5.5.0, and 6.4.0 – although not every combination of Perl and GCC – but those tried worked successfully.

@p5pRT
Copy link
Author

p5pRT commented Jan 7, 2018

From @jkeenan

On Sun, 07 Jan 2018 12​:45​:07 GMT, pjacklam wrote​:

With the patch I included above, I was able to build Perl versions
5.24.3, 5.26.1, 5.27.3, 5.27.4, 5.27.5, 5.27.6, and 5.27.7 on both
i686 (32-bit Cygwin) and x86_64 (64-bit Cygwin). All of them were
built using GCC version 7.2.0.

I also tried GCC versions 4.9.4, 5.5.0, and 6.4.0 – although not every
combination of Perl and GCC – but those tried worked successfully.

Thanks for the patch. Applied to blead in commit 291c057. I'll close the ticket within 7 days unless there are complaints.

--
James E Keenan (jkeenan@​cpan.org)

@p5pRT
Copy link
Author

p5pRT commented Jan 7, 2018

From @Leont

On Fri, Dec 15, 2017 at 12​:42 PM, (Peter J. Acklam) via RT
<perlbug-followup@​perl.org> wrote​:

I have attached a patch that fixes this. With the patch I am able to build Perl with quadmath support on Cygwin. Woohoo!

---
via perlbug​: queue​: perl5 status​: new
https://rt-archive.perl.org/perl5/Ticket/Display.html?id=128627

diff -c -r perl-5.27.6/ext/POSIX/Makefile.PL perl-5.27.6-patched/ext/POSIX/Makefile.PL
*** perl-5.27.6/ext/POSIX/Makefile.PL 2017-10-27 03​:58​:42.000000000 +0200
--- perl-5.27.6-patched/ext/POSIX/Makefile.PL 2017-12-15 11​:27​:45.658871300 +0100
***************
*** 20,25 ****
--- 20,28 ----
if ($^O eq 'aix' && $Config{uselongdouble}) {
push @​libs, qw(c128);
}
+ if ($^O eq 'cygwin' && $Config{usequadmath}) {
+ push @​libs, qw(quadmath);
+ }
WriteMakefile(
NAME => 'POSIX',
@​libs ? ( 'LIBS' => [ join(" ", map { "-l$_" } @​libs) ] ) : (),

This rather feels like wallpaper covering a hole in the wall.
-lquadmath is in perllibs/libs so this should have been added by
MakeMaker already. My best guess is that quadmath.dll isn't in a
location that is found by LibList, and hence it's omitted.

Could you look up where the quadmath.dll is for your compiler, and if
it is in any of the paths in libpth (perl -V​:libpth)?

Leon

@p5pRT
Copy link
Author

p5pRT commented Jan 8, 2018

From @pjacklam

Sun, 07 Jan 2018 05​:51​:12 -0800 skrev LeonT​:

Could you look up where the quadmath.dll is for your compiler, and if
it is in any of the paths in libpth (perl -V​:libpth)?

I don't know whether this is a Cygwin problem or a Perl problem, or
both, so here is an explanation of what I did, including the information
you requested regardding libpth​:

First attempt at building Perl

I installed Cygwin's gcc (version 6.4.0) and libquadmath packages. Then
I unpacked the Perl distribution, and ran Configure with

  export PATH=/usr/bin​:/bin
  sh ../perl-5.27.7/Configure -de -Dmksymlinks -Uinstallusrbinperl \
  -Dcc=gcc -Dld=g++ -Dusethreads -Dusemultiplicity -Duse64bitall \
  -Dusequadmath -Dusedevel -Dprefix=/usr/site/perl-5.27.7

but that failed with the following output

  (...)
  <quadmath.h> found.

  Choosing the C types to be used for Perl's internal types...

  *** You requested the use of the quadmath library, but you
  *** do not seem to have the quadmath library installed.
  *** Cannot continue, aborting.

Here is where the "quadmath"-related stuff is located​:

  $ find /usr | egrep -i quadmath
  /usr/bin/cygquadmath-0.dll
  /usr/lib/gcc/x86_64-pc-cygwin/6.4.0/include/quadmath.h
  /usr/lib/gcc/x86_64-pc-cygwin/6.4.0/include/quadmath_weak.h
  /usr/lib/gcc/x86_64-pc-cygwin/6.4.0/libquadmath.a
  /usr/lib/gcc/x86_64-pc-cygwin/6.4.0/libquadmath.dll.a
  /usr/share/info/libquadmath.info.gz

Second attempt at building Perl

I decided to build the same version of gcc (version 6.4.0) from source
into /usr/site/gcc-6.4.0. That worked fine. Then I ran Perl's Configure
again with the same options as last time, but now with "my" newly built
compiler prepended to PATH​:

  export PATH=/usr/site/gcc-6.4.0/bin​:/usr/bin​:/bin sh
  ../perl-5.27.7/Configure (...)

That succeeded​:

  (...)
  Finding dependencies for perlmini.o
  Updating GNUmakefile...
  Now you must run 'make'.

  If you compile perl5 on a different machine or from a different object
  directory, copy the Policy.sh file from this object directory to the
  new one before you run Configure -- this will help you with most of
  the policy defaults.

Here is where the "quadmath"-related stuff is located​:

  $ find /usr/site/gcc-6.4.0/ | egrep -i quadmath
  /usr/site/gcc-6.4.0/bin/cygquadmath-0.dll
  /usr/site/gcc-6.4.0/lib/gcc/x86_64-pc-cygwin/6.4.0/include/quadmath.h
  /usr/site/gcc-6.4.0/lib/gcc/x86_64-pc-cygwin/6.4.0/include/quadmath_weak.h
  /usr/site/gcc-6.4.0/lib/libquadmath.a
  /usr/site/gcc-6.4.0/lib/libquadmath.dll.a
  /usr/site/gcc-6.4.0/lib/libquadmath.la
  /usr/site/gcc-6.4.0/share/info/libquadmath.info

As you can see, the location of the quadmath-related files, relative to
/usr and /usr/site/gcc-6.4.0, are somewhat different in the two cases.
The compiler I build myself also has libquadmath.la, which the Cygwin
package seems to be missing.

Anyway, Configure succeede, so then I ran make, but it fails with the
error that is mentioned at the top of this ticket.

If I include the patch I suggested above, I am finally able to build
Perl with quadmath support.

As for the the paths in libpth. For perl that is installed with Cygwin,
I get

  $ perl -V​:libpth
  libpth='/usr/lib';

for the perl I compiled myself (with quadmath support), I get

  $ /usr/site/perl-5.27.7/bin/perl -V​:libpth
  libpth='/usr/site/gcc-7.2.0/lib /usr/site/gcc-7.2.0/lib/gcc/x86_64-unknown-cygwin/7.2.0/include-fixed /usr/lib /usr/lib/../lib/../include/w32api /usr/local/lib /lib';

@p5pRT
Copy link
Author

p5pRT commented Feb 1, 2018

From @Leont

On Mon, Jan 8, 2018 at 3​:49 PM, (Peter J. Acklam) via RT
<perlbug-followup@​perl.org> wrote​:

As for the the paths in libpth. For perl that is installed with Cygwin,
I get

$ perl \-V&#8203;:libpth
libpth='/usr/lib';

That's clearly not going to work

for the perl I compiled myself (with quadmath support), I get

$ /usr/site/perl\-5\.27\.7/bin/perl \-V&#8203;:libpth
libpth='/usr/site/gcc\-7\.2\.0/lib /usr/site/gcc\-7\.2\.0/lib/gcc/x86\_64\-unknown\-cygwin/7\.2\.0/include\-fixed /usr/lib /usr/lib/\.\./lib/\.\./include/w32api /usr/local/lib /lib';

That should work iff you use exactly the same compiler, the one you
listed above doesn't match.

Leon

@p5pRT
Copy link
Author

p5pRT commented Apr 4, 2018

From @pjacklam

Sorry for creating any confusion by using two different compilers.

It seems clear that the problem is that the "quadmath" library isn't loaded. The problem is not that the "quadmath" isn't found. It will be found, when requested.

Alas, I don't know where in the build process I need to add that when Perl is built with the -Dusequadmath option, the "quadmath" library should be loaded.

@khwilliamson
Copy link
Contributor

@pjacklam What's the status of this ticket?

@pjacklam
Copy link
Contributor

The patch fixed the problem in the sense that perl with quadmath enabled now builds just fine on Cygwin. The most recent version I have built is 5.31.6. @Leont pointed out that this might be like using wallpaper to fix a hole in the wall, but I don't know enough about libraries and linking to create a better fix.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

5 participants