in reply to Re^4: installing WWW::Curl::Easy perl module in OS X 10.12.6
in thread installing WWW::Curl::Easy perl module in OS X 10.12.6

Thank you, Rob, I almost missed the one issue that got fixed: I no longer get:
./curlopt-constants.c:19:58: error: non-void function 'constant' shoul +d return a value [-Wreturn-type] if (strEQ(name, "DID_MEMORY_FUNC_TYPEDEFS")) return CURL_D +ID_MEMORY_FUNC_TYPEDEFS;
I applied this patch to Makefile.PL:

ref: https://rt.cpan.org/Public/Bug/Display.html?id=117793
ref: https://github.com/NixOS/nixpkgs/blob/master/pkgs/development/perl-modules/WWW-Curl-4.17-Skip-preprocessor-symbol-only-CURL_STRICTER.patch
CPAN RT#117793 Signed-off-by: Petr Písa&#345; <ppisar@redhat.com> --- Makefile.PL | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile.PL b/Makefile.PL index f9170bb..ad2bd3d 100644 --- a/Makefile.PL +++ b/Makefile.PL @@ -127,7 +127,7 @@ if (!defined($curl_h)) { close H; for my $e (sort @syms) { - if($e =~ /(OBSOLETE|^CURL_EXTERN|_LAST\z|_LASTENTRY\z)/) { + if($e =~ /(OBSOLETE|^CURL_EXTERN|^CURL_STRICTER\z|_LAST\z|_LAS +TENTRY\z)/) { next; } my ($group) = $e =~ m/^([^_]+_)/; -- 2.7.4
That got me past an error free make and make install, yay! (Oddly, implementing the patch by hand did not work, but I wanted to learn how to automatically apply them, so I researched that.) When I patched the code with:
patch -b < WWW-Curl-4.17-RT117793.patch
... I was able to successfully make install the code.

I *am* still getting 4 warnings during my make (make test), I am not sure if those are of concern or not:
[ns3:~/src/WWW-Curl-4.17] administrator% sudo make Skip blib/lib/WWW/Curl.pm (unchanged) Skip blib/lib/WWW/Curl/Form.pm (unchanged) Skip blib/lib/WWW/Curl/Share.pm (unchanged) Skip blib/lib/WWW/Curl/Multi.pm (unchanged) Skip blib/lib/WWW/Curl/Easy.pm (unchanged) Running Mkbootstrap for WWW::Curl () chmod 644 "Curl.bs" "/Users/administrator/perl5/perlbrew/perls/perl-5.24.0/bin/perl" "-Iin +c" "/Users/administrator/perl5/perlbrew/perls/perl-5.24.0/lib/5.24.0/ +ExtUtils/xsubpp" -typemap "/Users/administrator/perl5/perlbrew/perls +/perl-5.24.0/lib/5.24.0/ExtUtils/typemap" -typemap "typemap" Curl.xs + > Curl.xsc && mv Curl.xsc Curl.c cc -c -I/usr/local/Cellar/curl/7.58.0/include -fno-common -DPERL_DARW +IN -fno-strict-aliasing -pipe -fstack-protector-strong -I/usr/local/i +nclude -DPERL_USE_SAFE_PUTENV -O3 -DVERSION=\"4.17\" -DXS_VERSION=\ +"4.17\" "-I/Users/administrator/perl5/perlbrew/perls/perl-5.24.0/lib +/5.24.0/darwin-2level/CORE" Curl.c In file included from Curl.xs:574: ./curlopt-constants.c:176:56: warning: implicit conversion from 'size_ +t' (aka 'unsigned long') to 'int' changes value from 1844674407370955 +1615 to -1 [-Wconstant-conversion] if (strEQ(name, "ZERO_TERMINATED")) return CURL_ZERO_TERMI +NATED; ~~~~~~ ^~~~~~~~~~~~~~~ +~~~~~ /usr/local/Cellar/curl/7.58.0/include/curl/curl.h:1969:31: note: expan +ded from macro 'CURL_ZERO_TERMINATED' #define CURL_ZERO_TERMINATED ((size_t) -1) ^~~~~~~~~~~ In file included from Curl.xs:574: ./curlopt-constants.c:2142:44: warning: implicit conversion from 'unsi +gned long' to 'int' changes value from 18446744073709551599 to -17 [- +Wconstant-conversion] if (strEQ(name, "ANY")) return CURLAUTH_ANY; ~~~~~~ ^~~~~~~~~~~~ /usr/local/Cellar/curl/7.58.0/include/curl/curl.h:708:32: note: expand +ed from macro 'CURLAUTH_ANY' #define CURLAUTH_ANY (~CURLAUTH_DIGEST_IE) ^~~~~~~~~~~~~~~~~~~ In file included from Curl.xs:574: ./curlopt-constants.c:2143:48: warning: implicit conversion from 'unsi +gned long' to 'int' changes value from 18446744073709551598 to -18 [- +Wconstant-conversion] if (strEQ(name, "ANYSAFE")) return CURLAUTH_ANYSAFE; ~~~~~~ ^~~~~~~~~~~~~~~~ /usr/local/Cellar/curl/7.58.0/include/curl/curl.h:709:32: note: expand +ed from macro 'CURLAUTH_ANYSAFE' #define CURLAUTH_ANYSAFE (~(CURLAUTH_BASIC|CURLAUTH_DIGEST_IE)) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Curl.xs:1100:26: warning: implicit conversion from enumeration type 'C +URLINFO' to different enumeration type 'CURLoption' [-Wenum-conversio +n] curl_easy_setopt(easy, CURLINFO_PRIVATE, NULL); ~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~ /usr/local/Cellar/curl/7.58.0/include/curl/curl.h:2744:68: note: expan +ded from macro 'curl_easy_setopt' #define curl_easy_setopt(handle,opt,param) curl_easy_setopt(handle,opt +,param) ~~~~~~~~~~~~~~~~ ^~~ 4 warnings generated. rm -f blib/arch/auto/WWW/Curl/Curl.bundle LD_RUN_PATH="/usr/local/Cellar/curl/7.58.0/lib:/usr/lib" env MACOSX_DE +PLOYMENT_TARGET=10.3 cc -bundle -undefined dynamic_lookup -L/usr/loc +al/lib -fstack-protector-strong Curl.o -o blib/arch/auto/WWW/Curl/Cu +rl.bundle \ -L/usr/local/Cellar/curl/7.58.0/lib -lcurl -lldap -lz \ ld: warning: object file (Curl.o) was built for newer OSX version (10. +12) than being linked (10.4) chmod 755 blib/arch/auto/WWW/Curl/Curl.bundle "/Users/administrator/perl5/perlbrew/perls/perl-5.24.0/bin/perl" "-Iin +c" -MExtUtils::Command::MM -e 'cp_nonempty' -- Curl.bs blib/arch/auto +/WWW/Curl/Curl.bs 644 Manifying 1 pod document [ns3:~/src/WWW-Curl-4.17] administrator% sudo make install Running Mkbootstrap for WWW::Curl () chmod 644 "Curl.bs" Manifying 1 pod document Files found in blib/arch: installing files in blib/lib into architectu +re dependent library tree Appending installation info to /Users/administrator/perl5/perlbrew/per +ls/perl-5.24.0/lib/5.24.0/darwin-2level/perllocal.pod [ns3:~/src/WWW-Curl-4.17] administrator%
(note: I reversed your earlier recommendation for the Curl.xs change, and am still able to compile without the CURL_DID_MEMORY_FUNC_TYPEDEFS error.)

Unfortunately as you can see, an old glitch in Makefile.PL seems to have come back to haunt me... I am getting a linking error in the make install that the Curl.o object file was built for a newer OS (10.12, the server OS) than being linked (10.4, which I guess is the lowest common denominator selected, or it could be due to my perl version, see below).
LD_RUN_PATH="/usr/local/Cellar/curl/7.58.0/lib:/usr/lib" env MACOSX_DE +PLOYMENT_TARGET=10.3 cc -bundle -undefined dynamic_lookup -L/usr/loc +al/lib -fstack-protector-strong Curl.o -o blib/arch/auto/WWW/Curl/Cu +rl.bundle \ -L/usr/local/Cellar/curl/7.58.0/lib -lcurl -lldap -lz \ ld: warning: object file (Curl.o) was built for newer OSX version (10. +12) than being linked (10.4)
I believe this results from when I tripped over the error: unterminated conditional directive during my initial perl Makerfile.PL call:
/usr/include/AvailabilityInternal.h:22938:10: error: unterminated cond +itional directive #if __MAC_OS_X_VERSION_MIN_REQUIRED >= __MAC_10_12 ^ /usr/include/AvailabilityInternal.h:22867:10: error: unterminated cond +itional directive #if __MAC_OS_X_VERSION_MIN_REQUIRED >= __MAC_10_11_4 ^ /usr/include/AvailabilityInternal.h:22800:10: error: unterminated cond +itional directive #if __MAC_OS_X_VERSION_MIN_REQUIRED >= __MAC_10_11_3 ^
I guess I cannot ignore those error after all. From what I researched, the preprocessor is tripping over indented conditional if/ifndef/etc directives, likely due to its duties testing off-side languages like Python. I hear that using gcc instead can fix the problem, but I have no idea how to encourage Perl Makefile.PL to use gcc instead (which I do have installed).

I thought I might experiment by removing all the leading whitespace on each line of /usr/include/AvailabilityInternal.h , but boy, the OS will NOT let me change that file in any way. Not even via su or sudo.

Even the binary that I did manage to make install has problems running:
#! /usr/bin/perl # linkrabbit.pl use strict; use warnings; # use lib "/Users/administrator/perl5/perlbrew/perls/perl-5.24.0/lib/s +ite_perl/5.24.0/darwin-2level/"; use lib "/Users/administrator/src/WWW-Curl-4.17/lib/"; use Time::Local; use Time::HiRes; use Getopt::Long; use IO::Handle; use HTML::TokeParser; use XML::LibXML; use WWW::RobotRules; use LWP::Simple qw(get); use URI; use Switch; use WWW::Curl::Easy; [ns3:~/linkrabbit] administrator% ./linkrabbit.pl -s iq Can't find 'boot_WWW__Curl' symbol in /usr/lib/libCurl.dylib at /Users/administrator/src/WWW-Curl-4.17/lib/WWW/Curl/Easy.pm line 9 +. Compilation failed in require at /Users/administrator/src/WWW-Curl-4.1 +7/lib/WWW/Curl/Easy.pm line 9. BEGIN failed--compilation aborted at /Users/administrator/src/WWW-Curl +-4.17/lib/WWW/Curl/Easy.pm line 9. Compilation failed in require at ./linkrabbit.pl line 38. BEGIN failed--compilation aborted at ./linkrabbit.pl line 38. Undefined subroutine &WWW::Curl::_global_cleanup called at /Users/admi +nistrator/src/WWW-Curl-4.17/lib/WWW/Curl.pm line 11. END failed--call queue aborted at ./linkrabbit.pl line 38. [ns3:~/linkrabbit] administrator%
These exciting new errors definitely show progress... I am thinking it might be related to ancient 10.4 code running on 10.12. I am thinking I need to fix those OS X version tests in Makefile.PL.

I was able to eliminate the 2nd error (Undefined subroutine &WWW::Curl::_global_cleanup) simply by deleting the reference in Curl.pm, as I read it was not needed, but still cannot eliminate (or even find reference to) Can't find 'boot_WWW__Curl' symbol in /usr/lib/libCurl.dylib

FYI, I located the new code path, and forced it via the use lib directive above. The make install did not include it in per @inc (I should probably install it elsewhere, but where...? There seem to be multiple choices, will the real @INC please stand up):
[ns3:~] administrator% locate WWW/Curl/Easy <snip> /Users/administrator/perl5/perlbrew/perls/perl-5.24.0/lib/site_perl/5. +24.0/darwin-2level/WWW/Curl/Easy.pm /Users/administrator/src/WWW-Curl-4.17/blib/lib/WWW/Curl/Easy.pm /Users/administrator/src/WWW-Curl-4.17/lib/WWW/Curl/Easy.pm [ns3:~] administrator% perl -e 'print join "\n", @INC, ""' /Users/administrator/perl5/perlbrew/perls/perl-5.24.0/lib/site_perl/5. +24.0/darwin-2level /Users/administrator/perl5/perlbrew/perls/perl-5.24.0/lib/site_perl/5. +24.0 /Users/administrator/perl5/perlbrew/perls/perl-5.24.0/lib/5.24.0/darwi +n-2level /Users/administrator/perl5/perlbrew/perls/perl-5.24.0/lib/5.24.0 . [ns3:~] administrator%
I am confused why the 2 Easy.pm files (in /Users/administrator/src/WWW-Curl-4.17) are more up to date than the file supposedly installed with my make install (Users/administrator/perl5/perlbrew/perls/perl-5.24.0/lib/site_perl/5.24.0/darwin-2level/WWW/Curl.pm):
[ns3:~/src/WWW-Curl-4.17] administrator% sudo make install Skip blib/lib/WWW/Curl/Easy.pm (unchanged) cp lib/WWW/Curl.pm blib/lib/WWW/Curl.pm Skip blib/lib/WWW/Curl/Share.pm (unchanged) Skip blib/lib/WWW/Curl/Multi.pm (unchanged) Skip blib/lib/WWW/Curl/Form.pm (unchanged) Manifying 1 pod document Files found in blib/arch: installing files in blib/lib into architectu +re dependent library tree Installing /Users/administrator/perl5/perlbrew/perls/perl-5.24.0/lib/s +ite_perl/5.24.0/darwin-2level/WWW/Curl.pm Installing /Users/administrator/perl5/perlbrew/perls/perl-5.24.0/man/m +an3/WWW::Curl.3 Appending installation info to /Users/administrator/perl5/perlbrew/per +ls/perl-5.24.0/lib/5.24.0/darwin-2level/perllocal.pod [ns3:~/src/WWW-Curl-4.17] administrator% [ns3:~/linkrabbit] administrator% ls /Users/administrator/perl5/perlbr +ew/perls/perl-5.24.0/lib/site_perl/5.24.0/darwin-2level/WWW/Curl/Easy +.pm /Users/administrator/src/WWW-Curl-4.17/blib/lib/WWW/Curl/Easy.pm +/Users/administrator/src/WWW-Curl-4.17/lib/WWW/Curl/Easy.pm -r--r--r-- 1 root staff 18K 11 Feb 10:21 /Users/administ +rator/perl5/perlbrew/perls/perl-5.24.0/lib/site_perl/5.24.0/darwin-2l +evel/WWW/Curl/Easy.pm -r--r--r-- 1 administrator staff 18K 11 Feb 12:06 /Users/administ +rator/src/WWW-Curl-4.17/blib/lib/WWW/Curl/Easy.pm -rw-r--r-- 1 administrator staff 18K 11 Feb 12:06 /Users/administ +rator/src/WWW-Curl-4.17/lib/WWW/Curl/Easy.pm
My linkrabbit.pl code fails even worse if I point the use lib to /Users/administrator/perl5/perlbrew/perls/perl-5.24.0/lib/site_perl/5.24.0/darwin-2level/

Maybe I am chasing wild geese. Perhaps the problem is with my perl itself? I checked to see that I am using my perlbrew instance:
[ns3:~/src/WWW-Curl-4.17] administrator% which perl /Users/administrator/perl5/perlbrew/perls/perl-5.24.0/bin/perl
The linker and libraries did not seem encouraging: ld='env MACOSX_DEPLOYMENT_TARGET=10.3 cc'
[ns3:~/src/WWW-Curl-4.17] administrator% perl -V Summary of my perl5 (revision 5 version 24 subversion 0) configuration +: Platform: osname=darwin, osvers=14.5.0, archname=darwin-2level uname='darwin ns3.igods.com 14.5.0 darwin kernel version 14.5.0: s +un sep 25 22:07:15 pdt 2016; root:xnu-2782.50.9~1release_x86_64 x86_6 +4 ' config_args='-de -Dprefix=/Users/administrator/perl5/perlbrew/perl +s/perl-5.24.0 -Aeval:scriptdir=/Users/administrator/perl5/perlbrew/pe +rls/perl-5.24.0/bin' hint=recommended, useposix=true, d_sigaction=define useithreads=undef, usemultiplicity=undef use64bitint=define, use64bitall=define, uselongdouble=undef usemymalloc=n, bincompat5005=undef Compiler: cc='cc', ccflags ='-fno-common -DPERL_DARWIN -fno-strict-aliasing +-pipe -fstack-protector-strong -I/usr/local/include -DPERL_USE_SAFE_P +UTENV', optimize='-O3', cppflags='-fno-common -DPERL_DARWIN -fno-strict-aliasing -pipe -fs +tack-protector-strong -I/usr/local/include' ccversion='', gccversion='4.2.1 Compatible Apple LLVM 7.0.2 (clang +-700.1.81)', gccosandvers='' intsize=4, longsize=8, ptrsize=8, doublesize=8, byteorder=12345678 +, doublekind=3 d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=1 +6, longdblkind=3 ivtype='long', ivsize=8, nvtype='double', nvsize=8, Off_t='off_t', + lseeksize=8 alignbytes=8, prototype=define Linker and Libraries: ld='env MACOSX_DEPLOYMENT_TARGET=10.3 cc', ldflags =' -fstack-prot +ector-strong -L/usr/local/lib' libpth=/Applications/Xcode.app/Contents/Developer/Toolchains/Xcode +Default.xctoolchain/usr/bin/../lib/clang/7.0.2/lib /Applications/Xcod +e.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib +/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/ +Developer/SDKs/MacOSX10.11.sdk/usr/lib /usr/local/lib /usr/lib libs=-lpthread -ldbm -ldl -lm -lutil -lc perllibs=-lpthread -ldl -lm -lutil -lc libc=, so=dylib, useshrplib=false, libperl=libperl.a gnulibc_version='' Dynamic Linking: dlsrc=dl_dlopen.xs, dlext=bundle, d_dlsymun=undef, ccdlflags=' ' cccdlflags=' ', lddlflags=' -bundle -undefined dynamic_lookup -L/u +sr/local/lib -fstack-protector-strong' Characteristics of this binary (from libperl): Compile-time options: HAS_TIMES PERLIO_LAYERS PERL_COPY_ON_WRITE PERL_DONT_CREATE_GVSV PERL_HASH_FUNC_ONE_AT_A_TIME_HARD PERL_MALLOC_ +WRAP PERL_PRESERVE_IVUV PERL_USE_SAFE_PUTENV USE_64_BIT_ALL USE_64_BIT_INT USE_LARGE_FILES USE_LOCALE USE_LOCALE_COLLATE USE_LOCALE_CTYPE USE_LOCALE_NUMERIC USE_LOCALE_TIME USE_PERLIO USE_PERL_ATOF Locally applied patches: Devel::PatchPerl 1.38 Built under darwin Compiled at Dec 19 2016 14:26:21 %ENV: PERLBREW_HOME="/Users/administrator/.perlbrew" PERLBREW_MANPATH="/Users/administrator/perl5/perlbrew/perls/perl-5 +.24.0/man" PERLBREW_PATH="/Users/administrator/perl5/perlbrew/bin:/Users/admi +nistrator/perl5/perlbrew/perls/perl-5.24.0/bin" PERLBREW_PERL="perl-5.24.0" PERLBREW_ROOT="/Users/administrator/perl5/perlbrew" PERLBREW_SHELLRC_VERSION="0.82" PERLBREW_VERSION="0.82" @INC: /Users/administrator/perl5/perlbrew/perls/perl-5.24.0/lib/site_per +l/5.24.0/darwin-2level /Users/administrator/perl5/perlbrew/perls/perl-5.24.0/lib/site_per +l/5.24.0 /Users/administrator/perl5/perlbrew/perls/perl-5.24.0/lib/5.24.0/d +arwin-2level /Users/administrator/perl5/perlbrew/perls/perl-5.24.0/lib/5.24.0 . [ns3:~/src/WWW-Curl-4.17] administrator%
I installed the latest perl 5.24.3:
sudo perlbrew install perl-5.24.3
but see the same MACOSX_DEPLOYMENT_TARGET=10.3 cc:
[ns3:~/src/WWW-Curl-4.17] root# perlbrew list * perl-5.24.3 (installed on Sun Feb 11 +13:34:22 2018) perl-5.24.0 (installed on Mon Dec 19 +15:15:33 2016) system (5.18.2) (installed on Tue Feb 6 +12:07:11 2018) [ns3:~/src/WWW-Curl-4.17] root# perl -V Summary of my perl5 (revision 5 version 24 subversion 3) configuration +: Platform: osname=darwin, osvers=16.7.0, archname=darwin-thread-multi-2level uname='darwin ns3.igods.com 16.7.0 darwin kernel version 16.7.0: t +hu jan 11 22:59:40 pst 2018; root:xnu-3789.73.8~1release_x86_64 x86_6 +4 ' config_args='-de -Dprefix=/Users/administrator/perl5/perlbrew/perl +s/perl-5.24.3 -Dusethreads -Aeval:scriptdir=/Users/administrator/perl +5/perlbrew/perls/perl-5.24.3/bin' hint=recommended, useposix=true, d_sigaction=define useithreads=define, usemultiplicity=define use64bitint=define, use64bitall=define, uselongdouble=undef usemymalloc=n, bincompat5005=undef Compiler: cc='cc', ccflags ='-fno-common -DPERL_DARWIN -fno-strict-aliasing +-pipe -fstack-protector-strong -I/usr/local/include', optimize='-O3', cppflags='-fno-common -DPERL_DARWIN -fno-strict-aliasing -pipe -fs +tack-protector-strong -I/usr/local/include' ccversion='', gccversion='4.2.1 Compatible Apple LLVM 9.0.0 (clang +-900.0.39.2)', gccosandvers='' intsize=4, longsize=8, ptrsize=8, doublesize=8, byteorder=12345678 +, doublekind=3 d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=1 +6, longdblkind=3 ivtype='long', ivsize=8, nvtype='double', nvsize=8, Off_t='off_t', + lseeksize=8 alignbytes=8, prototype=define Linker and Libraries: ld='env MACOSX_DEPLOYMENT_TARGET=10.3 cc', ldflags =' -fstack-prot +ector-strong -L/usr/local/lib' libpth=/usr/local/lib /Applications/Xcode.app/Contents/Developer/T +oolchains/XcodeDefault.xctoolchain/usr/lib/clang/9.0.0/lib /Applicati +ons/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/ +usr/lib /usr/lib libs=-lpthread -ldbm -ldl -lm -lutil -lc perllibs=-lpthread -ldl -lm -lutil -lc libc=, so=dylib, useshrplib=false, libperl=libperl.a gnulibc_version='' Dynamic Linking: dlsrc=dl_dlopen.xs, dlext=bundle, d_dlsymun=undef, ccdlflags=' ' cccdlflags=' ', lddlflags=' -bundle -undefined dynamic_lookup -L/u +sr/local/lib -fstack-protector-strong' Characteristics of this binary (from libperl): Compile-time options: 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_PRESERVE_IVUV USE_64_BIT_ALL USE_64_BIT_I +NT 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_REENTRANT_API Locally applied patches: Devel::PatchPerl 1.38 Built under darwin Compiled at Feb 11 2018 13:17:46 %ENV: PERL5LIB="" PERLBREW_LIB="" PERLBREW_MANPATH="/Users/administrator/perl5/perlbrew/perls/perl-5 +.24.3/man" PERLBREW_PATH="/Users/administrator/perl5/perlbrew/bin:/Users/admi +nistrator/perl5/perlbrew/perls/perl-5.24.3/bin" PERLBREW_PERL="perl-5.24.3" PERLBREW_ROOT="/Users/administrator/perl5/perlbrew" PERLBREW_SKIP_INIT="1" PERLBREW_VERSION="0.78" PERL_LOCAL_LIB_ROOT="" @INC: /Users/administrator/perl5/perlbrew/perls/perl-5.24.3/lib/site_per +l/5.24.3/darwin-thread-multi-2level /Users/administrator/perl5/perlbrew/perls/perl-5.24.3/lib/site_per +l/5.24.3 /Users/administrator/perl5/perlbrew/perls/perl-5.24.3/lib/5.24.3/d +arwin-thread-multi-2level /Users/administrator/perl5/perlbrew/perls/perl-5.24.3/lib/5.24.3 . [ns3:~/src/WWW-Curl-4.17] root#
I do not seem to be able to permanently switch my system over to 5.24.3 either, oddly... perlbrew switch runs exactly the same as perlbrew use, even when I sudo the command. That is an issue down the line, once I can get past my error: Can't find 'boot_WWW__Curl' symbol in /usr/lib/libCurl.dylib
[ns3:~/linkrabbit] root# ./linkrabbit.pl -s iq Can't find 'boot_WWW__Curl' symbol in /usr/lib/libCurl.dylib at /Users/administrator/src/WWW-Curl-4.17/lib/WWW/Curl/Easy.pm line 9 +. Compilation failed in require at /Users/administrator/src/WWW-Curl-4.1 +7/lib/WWW/Curl/Easy.pm line 9. BEGIN failed--compilation aborted at /Users/administrator/src/WWW-Curl +-4.17/lib/WWW/Curl/Easy.pm line 9. Compilation failed in require at ./linkrabbit.pl line 38. BEGIN failed--compilation aborted at ./linkrabbit.pl line 38. [ns3:~/linkrabbit] root#
Running perl 5.24.0, I see WWW::Curl installed, but not WWW::Curl::Easy:
[ns3:~] administrator% perlbrew list-modules Algorithm::Diff App::cpanminus CPAN Config::Perl::V File::HomeDir File::Which Mac::SystemDirectory Perl Spiffy Test::Base Test::Deep Test::NoWarnings Test::YAML Text::Diff WWW::Curl YAML install [ns3:~] administrator%
Switching (only temporarily!!) to perl 5.24.3, I see no perl modules installed (as I would expect, since this install is so fresh and new):
[ns3:~] administrator% perlbrew switch perl-5.24.3 A sub-shell is launched with perl-5.24.3 as the activated perl. Run 'e +xit' to finish it. bash-3.2$ perlbrew list-modules Perl bash-3.2$
Yet, when I run my perl program, I get the same error:
bash-3.2$ ./linkrabbit.pl -s iq Can't find 'boot_WWW__Curl' symbol in /usr/lib/libCurl.dylib at /Users/administrator/src/WWW-Curl-4.17/lib/WWW/Curl/Easy.pm line 9 +. Compilation failed in require at /Users/administrator/src/WWW-Curl-4.1 +7/lib/WWW/Curl/Easy.pm line 9. BEGIN failed--compilation aborted at /Users/administrator/src/WWW-Curl +-4.17/lib/WWW/Curl/Easy.pm line 9. Compilation failed in require at ./linkrabbit.pl line 38. BEGIN failed--compilation aborted at ./linkrabbit.pl line 38.
This leads me to conclude that even though I did a make install, the module is not accessible perl. I only know how to do install modules via cpan (which failed, forcing me into this manual install). Am I missing something fundamental here?

This is one deep rabbit hole.

Replies are listed 'Best First'.
Re^6: installing WWW::Curl::Easy perl module in OS X 10.12.6
by syphilis (Archbishop) on Feb 11, 2018 at 23:49 UTC
    I guess I cannot ignore those error after all. From what I researched, the preprocessor is tripping over indented conditional if/ifndef/etc directives

    Yes, my take on the stackoverflow post that I linked to earlier is that /usr/bin/cpp is doing the preprocessing, not gcc -E

    I have no idea how to encourage Perl Makefile.PL to use gcc instead (which I do have installed)

    Two ways that I know of:
    1) for a manual build, perl Makefile.PL CC=gcc
    2) with cpanm, cpanm WWW::Curl --configure-args="CC=gcc"
    I haven't actually used the second method to pass CC=gcc to the build process, but I have used that to successfully pass other arguments.

    However, I think you might strike issues with using gcc here, unless perl itself is built using gcc.

    Can't find 'boot_WWW__Curl' symbol in /usr/lib/libCurl.dylib

    This error is coming from perl. Doing a perlmonks supersearch for boot_ will throw up lots of posts, some of which should provide the solution (or at least an explanation).
    Yell out if you need more help with any of that - though you seem to be making pretty good progress, anyway.

    Cheers,
    Rob
      re: precompile warnings: unterminated conditional directive __MAC_OS_X_VERSION_MIN_REQUIRED

      I get the same warnings when running perl Makefile.PL CC=gcc. I get the same warnings when regardless if I am using perl version 5.24.0, 5.24.3, or the system perl (5.18.2).

      Oddly, I cannot seem to switch my perl version permanently... sudo perlbrew switch works just like sudo perlbrew use, they launch a subshell with the requested perl, but do not persist that perl version upon exit or relogin.
      [ns3:~/src/WWW-Curl-4.17] root# sudo perlbrew switch system A sub-shell is launched with system as the activated perl. Run 'exit' +to finish it. sh-3.2#

      re: Can't find 'boot_WWW__Curl

      Rob, great heads up on this issue, I was being too literal when looking for boot_WWW__Curl, I should have slackened up and tried boot_WWW and boot_.

      I see in my Curl.xs file, the Module definitions look good:
      MODULE = WWW::Curl PACKAGE = WWW::Curl::Easy PREFIX = curl_easy_
      I did notice, however, that the file being referenced by the error (/usr/lib/libCurl.dylib):
      [ns3:~/linkrabbit] administrator% ./linkrabbit.pl -s iq Can't find 'boot_WWW__Curl' symbol in /usr/lib/libCurl.dylib at /Users/administrator/src/WWW-Curl-4.17/lib/WWW/Curl/Easy.pm line 9 +.
      ... is part of the system curl library, not the latest curl 7.58.0 version that I installed with brew:
      [ns3:~/linkrabbit] administrator% ls -alG /usr/lib/libCurl.dylib lrwxr-xr-x 1 root wheel 15B 27 Sep 22:44 /usr/lib/libCurl.dylib - +> libcurl.4.dylib [ns3:/usr/lib] administrator% sudo locate libcurl.4.dylib /usr/lib/libcurl.4.dylib /usr/local/Cellar/curl/7.51.0/lib/libcurl.4.dylib /usr/local/Cellar/curl/7.56.1/lib/libcurl.4.dylib /usr/local/Cellar/curl/7.58.0/lib/libcurl.4.dylib [ns3:/usr/lib] administrator%
      I tried changing the symlink to point to my brewed libcurl 7.58.0 version, but the OS would not let me (not even as SU or SUDO), which is for the best and kept me from messing things up entirely. I wondered how I might tell my perl program to use the version 7.58.0 specific libCurl.dylib file, without changing the exiting symlink. I then Googled across this epic Mac OS X perl tidbit from PerlMonks:

      Title: Solving XS and dyld issues on Perl Mac OS X: Solving XS and dyld issues on Perl Mac OS X

      > Thats why it's important to use the newer tendency in shebang lines:
      > #!/usr/bin/env perl
      >
      > Instead of the retrogade:
      > #!/usr/bin/perl
      >
      > In fact in Mac OS X this is very important because it is expected that system Perl is /usr/bin/perl !

      Changing my hash-bang line #1 to the recommended line gets me past the Can't find 'boot_WWW__Curl problem, yay!, confirmed by my perl Makefile.pl:
      [ns3:~/src/WWW-Curl-4.17] administrator% perl Makefile.PL The version is libcurl 7.58.0 Found curl.h in /usr/local/Cellar/curl/7.58.0/include/curl/curl.h

      I still get the same unterminated conditional directive errors during the perl Makefile.PL, though. I do not feel that I am running the latest OS X 10.12 optimized version of this software, relegated instead to the OS X 10.4 version. Much exploration to be done here, pending.

      Adding in a couple more of the outstanding perl modules used via cpan, and I start getting confident. Then, wham! I get a version problem compiling XML::LibXML (The installed version of libxml2 VERSION 2.9.4 is not compatible with XML::LibXML):
      [ns3:~/linkrabbit] administrator% sudo cpan install XML::LibXML Loading internal null logger. Install Log::Log4perl for logging messag +es CPAN: Storable loaded ok (v2.56) Reading '/Users/administrator/.cpan/Metadata' Database was generated on Sun, 11 Feb 2018 22:17:03 GMT Running install for module 'XML::LibXML' CPAN: Digest::SHA loaded ok (v5.95) CPAN: Compress::Zlib loaded ok (v2.069) Checksum for /Users/administrator/.cpan/sources/authors/id/S/SH/SHLOMI +F/XML-LibXML-2.0132.tar.gz ok CPAN: YAML loaded ok (v1.24) CPAN: CPAN::Meta::Requirements loaded ok (v2.140) CPAN: Parse::CPAN::Meta loaded ok (v1.4417) CPAN: CPAN::Meta loaded ok (v2.150005) CPAN: Module::CoreList loaded ok (v5.20160506) Configuring S/SH/SHLOMIF/XML-LibXML-2.0132.tar.gz with Makefile.PL enable native perl UTF8 running xml2-config...failed The installed version of libxml2 VERSION 2.9.4 is not compatible with XML::LibXML (and probably buggy)!
      I did a force install, and noticed more OS version warnings. At the end of the XML::LibXML force compile, I end up with 4 warnings and 2 errors, e.g.:
      [ns3:~/src/WWW-Curl-4.17] administrator% sudo cpan --force install XML +::LibXML <snip> ld: warning: ld: warning: object file (IO.o) was built for newer OSX v +ersion (10.12) than being linked (10.4)object file (poll.o) was built + for newer OSX version (10.12) than being linked (10.4) <snip> In file included from Curl.xs:574: ./curlopt-constants.c:19:58: error: non-void function 'constant' shoul +d return a value [-Wreturn-type] if (strEQ(name, "DID_MEMORY_FUNC_TYPEDEFS")) return CURL_D +ID_MEMORY_FUNC_TYPEDEFS; ^ ./curlopt-constants.c:136:49: error: use of undeclared identifier 'CUR +L_STRICTER' if (strEQ(name, "STRICTER")) return CURL_STRICTER; <snip> 4 warnings and 2 errors generated. make: *** [Curl.o] Error 1 SZBALINT/WWW-Curl-4.17.tar.gz /usr/bin/make -- NOT OK [ns3:~/src/WWW-Curl-4.17] administrator%
      What the heck? Did I not just solve these problems when I installed WWW-Curl-4.17 in the first place?... have they come back to haunt me?

      I try compiling the code manually, and see the same version errors immediately:
      [ns3:~/src/XML-LibXML-2.0132] administrator% perl Makefile.PL DEBUG=1 enable native perl UTF8 running xml2-config...xml2-config --version xml2-config --libs xml2-config --cflags failed The installed version of libxml2 VERSION 2.9.4 is not compatible with XML::LibXML (and probably buggy)! You may continue at your own risk using 'perl Makefile.PL FORCE=1', bu +t:
      I checked my versions of libcurl, etc:
      [ns3:~/linkrabbit] administrator% ls -l /usr/lib/libxml* -rwxr-xr-x 1 root wheel 2.2M 18 Jan 21:35 /usr/lib/libxml2.2.dylib lrwxr-xr-x 1 root wheel 15B 27 Sep 22:44 /usr/lib/libxml2.dylib - +> libxml2.2.dylib [ns3:~/linkrabbit] administrator% grep LIBXML_DOTTED_VERSION < /usr/in +clude/libxml2/libxml/xmlversion.h * LIBXML_DOTTED_VERSION: #define LIBXML_DOTTED_VERSION "2.9.4" [ns3:~/linkrabbit] administrator% xmllint --version xmllint: using libxml version 20904 compiled with: Threads Tree Output Push Reader Patterns Writer SAXv +1 FTP HTTP DTDValid HTML Legacy C14N Catalog XPath XPointer XInclude +ICU ISO8859X Unicode Regexps Automata Expr Schemas Schematron Modules + Debug Zlib [ns3:~/linkrabbit] administrator% xsltproc --version Using libxml 20904, libxslt 10129 and libexslt 817 xsltproc was compiled against libxml 20904, libxslt 10129 and libexslt + 817 libxslt 10129 was compiled against libxml 20904 libexslt 817 was compiled against libxml 20904 [ns3:~/linkrabbit] administrator%
      I decided to try installing the latest libxml2 stable 2.9.7, and Include its path in the perl call:
      [ns3:~/linkrabbit] administrator% brew install libxml2 <snip> ==> Downloading https://homebrew.bintray.com/bottles/libxml2-2.9.7.sie +rra.bottle.tar.gz ###################################################################### +## 100.0% ==> Pouring libxml2-2.9.7.sierra.bottle.tar.gz ==> Caveats This formula is keg-only, which means it was not symlinked into /usr/l +ocal, because macOS already provides this software and installing another ve +rsion in parallel can cause all kinds of trouble. If you need to have this software first in your PATH run: echo 'export PATH="/usr/local/opt/libxml2/bin:$PATH"' >> ~/.bash_pro +file For compilers to find this software you may need to set: LDFLAGS: -L/usr/local/opt/libxml2/lib CPPFLAGS: -I/usr/local/opt/libxml2/include For pkg-config to find this software you may need to set: PKG_CONFIG_PATH: /usr/local/opt/libxml2/lib/pkgconfig If you need Python to find bindings for this keg-only formula, run: echo /usr/local/opt/libxml2/lib/python2.7/site-packages >> /usr/loca +l/lib/python2.7/site-packages/libxml2.pth mkdir -p /Users/administrator/Library/Python/2.7/lib/python/site-pac +kages echo 'import site; site.addsitedir("/usr/local/lib/python2.7/site-pa +ckages")' >> /Users/administrator/Library/Python/2.7/lib/python/site- +packages/homebrew.pth ==> Summary &#127866; /usr/local/Cellar/libxml2/2.9.7: 281 files, 10.4MB [ns3:~/linkrabbit] administrator% echo 'export PATH="/usr/local/opt/li +bxml2/bin:$PATH"' >> ~/.bash_profile <logout/login> [ns3:~] administrator% cd ~/src/XML-LibXML-2.0132 [ns3:~/src/XML-LibXML-2.0132] administrator% perl Makefile.PL -I/usr/l +ocal/opt/libxml2/include enable native perl UTF8 running xml2-config...failed The installed version of libxml2 VERSION 2.9.4 is not compatible with XML::LibXML (and probably buggy)!
      OK, so I am not convincing perl to use the newly installed. Light bulb goes off, the newly exported path from my .bash_profile does get inherited by my favoured tcsh shell. At least for now I can compile under bash (let us ensure to add the new paths to tcsh as well):
      ns3:XML-LibXML-2.0132 administrator$ cd ~/src/XML-LibXML-2.0132 ns3:XML-LibXML-2.0132 administrator$ perl Makefile.PL -I/usr/local/opt +/libxml2/include enable native perl UTF8 running xml2-config...untested Note: libxml2 2.9.7 was not tested with this XML::LibXML version. Checking for ability to link against xml2...yes Checking if your kit is complete... Looks good Warning: prerequisite XML::NamespaceSupport 1.07 not found. Warning: prerequisite XML::SAX 0.11 not found. Warning: prerequisite XML::SAX::Base 0 not found. Warning: prerequisite XML::SAX::Exception 0 not found. Generating a Unix-style Makefile Writing Makefile for XML::LibXML Writing MYMETA.yml and MYMETA.json ns3:XML-LibXML-2.0132 administrator$
      More dependencies, argh! :) Back to cpanm (under bash), and I manage to install XML-LibXML-2.0132:
      ns3:XML-LibXML-2.0132 administrator$ sudo cpanm XML::LibXML --> Working on XML::LibXML Fetching http://www.cpan.org/authors/id/S/SH/SHLOMIF/XML-LibXML-2.0132 +.tar.gz ... OK Configuring XML-LibXML-2.0132 ... OK ==> Found dependencies: XML::SAX::Base, XML::SAX::Exception, XML::SAX, + XML::NamespaceSupport --> Working on XML::SAX::Base Fetching http://www.cpan.org/authors/id/G/GR/GRANTM/XML-SAX-Base-1.09. +tar.gz ... OK Configuring XML-SAX-Base-1.09 ... OK Building and testing XML-SAX-Base-1.09 ... OK Successfully installed XML-SAX-Base-1.09 --> Working on XML::SAX Fetching http://www.cpan.org/authors/id/G/GR/GRANTM/XML-SAX-0.99.tar.g +z ... OK Configuring XML-SAX-0.99 ... OK ==> Found dependencies: XML::NamespaceSupport --> Working on XML::NamespaceSupport Fetching http://www.cpan.org/authors/id/P/PE/PERIGRIN/XML-NamespaceSup +port-1.12.tar.gz ... OK Configuring XML-NamespaceSupport-1.12 ... OK Building and testing XML-NamespaceSupport-1.12 ... OK Successfully installed XML-NamespaceSupport-1.12 Building and testing XML-SAX-0.99 ... OK Successfully installed XML-SAX-0.99 Building and testing XML-LibXML-2.0132 ... OK Successfully installed XML-LibXML-2.0132 4 distributions installed ns3:XML-LibXML-2.0132 administrator$
      Note to self, always try to compile under bash if it does not work under tsch, or be seriously sure about adding the new paths added by installers to my .tsch profile... unless I am missing something that would make this automatic?

      Installed a dozen more dependent modules via cpanm (I may actually be getting the hang of this), then try to run my perl program again... tons of warnings... disable warnings (do not hate me)... SUCCESS!!! (I know this perl app and its expected output extremely well, so I can confirm its results are as expected.

      A few more tests, to be confident... ok, some sites that did not work before work now (holy smokes win!), yet some sites that used to run now do not (holy smokes, STILL a MAJOR win!). I have some debugging to do at the perl level (now installing Komodo), but this is a major win!

      I have to thank syphilis for getting me through this. I will write up a summary of the solution and post it as a reply to the original thread (unless there is a preferred way?).

      We go to sleep tonight wiser than we were.