Beefy Boxes and Bandwidth Generously Provided by pair Networks
We don't bite newbies here... much
 
PerlMonks  

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 ( [id://1208970]=note: print w/replies, xml ) Need Help??


in reply to Re^5: 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

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

Replies are listed 'Best First'.
Re^7: installing WWW::Curl::Easy perl module in OS X 10.12.6
by igods (Novice) on Feb 13, 2018 at 07:48 UTC
    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.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://1208970]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others surveying the Monastery: (3)
As of 2024-04-20 07:45 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found