Opened 7 years ago

Closed 6 years ago

#54364 closed defect (worksforme)

p5.24-io-socket-ssl: failed to build on Snow Leopard (with libc++)

Reported by: rlhamil Owned by:
Priority: Normal Milestone:
Component: ports Version:
Keywords: snowleopard LibcxxOnOlderSystems Cc: rlhamil, dbevans (David B. Evans), mojca (Mojca Miklavec), ballapete (Peter "Pete" Dyballa)
Port: p5.24-io-socket-ssl

Description (last modified by mojca (Mojca Miklavec))

:info:configure dyld: Symbol not found: _perl_tsa_mutex_lock
:info:configure   Referenced from: /opt/local/lib/perl5/vendor_perl/5.24/darwin-thread-multi-2level/auto/Net/SSLeay/SSLeay.bundle
:info:configure   Expected in: flat namespace
:info:configure sh: line 1: 68230 Trace/BPT trap          
/opt/local/bin/perl5.24 Makefile.PL INSTALLDIRS=vendor CC="/opt/local/bin/clang-mp-3.7" LD="/opt/local/bin/clang-mp-3.7"

Workaround: re-install perl5.24 with +universal, works then. When built correctly, symbol is defined in /opt/local/lib/perl5/5.24/darwin-thread-multi-2level/CORE/libperl.dylib

Attachments (2)

main.log-p5.24-io-socket-ssl.txt (86.5 KB) - added by rlhamil 7 years ago.
main.log (7.4 KB) - added by ballapete (Peter "Pete" Dyballa) 7 years ago.
main.log with Clang 3.9

Download all attachments as: .zip

Change History (12)

Changed 7 years ago by rlhamil

comment:1 Changed 7 years ago by rlhamil

Cc: rlhamil added

comment:2 Changed 7 years ago by mojca (Mojca Miklavec)

Cc: dbevans mojca added
Description: modified (diff)
Keywords: snowleopard LibcxxOnOlderSystems added
Summary: p5.24-io-socket-ssl failed to build on Snow Leopardp5.24-io-socket-ssl: failed to build on Snow Leopard (with libc++)
Version: 2.4.1

I'm not sure if my theory is correct, but I strongly suspect there's a problem in (lack of) flags to set the stdlib.

Perl devs pointed me to:

try https://metacpan.org/pod/ExtUtils::MakeMaker#PERL_MM_OPT for EUMM installers and https://metacpan.org/pod/Module::Build#PERL_MB_OPT for M::B installers the latter is also honored by Module::Build::Tiny https://metacpan.org/pod/Module::Build::Tiny#CONFIG-FILE-AND-ENVIRONMENT

Maybe the perl PortGroup could always set the stdlib in the PERL_MM_OPT and PERL_MB_OPT environmental variables. Untested theory.

I fail to understand why exactly the universal build would fix the issue, but it could be that one module is not installed as i386 and then the package being built would link against perl5.24 rather than against another existing p5.24-* module and this would work (since perl was built with the right flags).

The mutex keyword smells like C++11 in any case.

comment:3 Changed 7 years ago by ballapete (Peter "Pete" Dyballa)

Cc: ballapete added

comment:4 Changed 7 years ago by ballapete (Peter "Pete" Dyballa)

With Clang 3.9 the same result:

DEBUG: Environment: 
CC='/opt/local/bin/clang-mp-3.9'
CC_PRINT_OPTIONS='YES'
CC_PRINT_OPTIONS_FILE='/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_macports_release_tarballs_ports_perl_p5-io-socket-ssl/p5.24-io-socket-ssl/work/.CC_PRINT_OPTIONS'
CFLAGS='-pipe -Os'
CPATH='/opt/local/include'
CPPFLAGS='-I/opt/local/include'
CXX='/opt/local/bin/clang++-mp-3.9'
CXXFLAGS='-pipe -Os -stdlib=libc++'
F90FLAGS='-pipe -Os'
FCFLAGS='-pipe -Os'
FFLAGS='-pipe -Os'
INSTALL='/usr/bin/install -c'
LDFLAGS='-L/opt/local/lib -Wl,-headerpad_max_install_names'
LIBRARY_PATH='/opt/local/lib'
MACOSX_DEPLOYMENT_TARGET='10.6'
OBJC='/opt/local/bin/clang-mp-3.9'
OBJCFLAGS='-pipe -Os'
OBJCXX='/opt/local/bin/clang++-mp-3.9'
OBJCXXFLAGS='-pipe -Os -stdlib=libc++'
PERL_AUTOINSTALL='--skipdeps'
Executing:  cd "/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_macports_release_tarballs_ports_perl_p5-io-socket-ssl/p5.24-io-socket-ssl/work/IO-Socket-SSL-2.049" && /opt/local/bin/perl5.24 Makefile.PL INSTALLDIRS=vendor CC="/opt/local/bin/clang-mp-3.9" LD="/opt/local/bin/clang-mp-3.9" 
DEBUG: system:  cd "/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_macports_release_tarballs_ports_perl_p5-io-socket-ssl/p5.24-io-socket-ssl/work/IO-Socket-SSL-2.049" && /opt/local/bin/perl5.24 Makefile.PL INSTALLDIRS=vendor CC="/opt/local/bin/clang-mp-3.9" LD="/opt/local/bin/clang-mp-3.9" 
dyld: lazy symbol binding failed: Symbol not found: _perl_tsa_mutex_lock
  Referenced from: /opt/local/lib/perl5/vendor_perl/5.24/darwin-thread-multi-2level/auto/Net/SSLeay/SSLeay.bundle
  Expected in: flat namespace

dyld: Symbol not found: _perl_tsa_mutex_lock
  Referenced from: /opt/local/lib/perl5/vendor_perl/5.24/darwin-thread-multi-2level/auto/Net/SSLeay/SSLeay.bundle
  Expected in: flat namespace

sh: line 1: 85937 Trace/BPT trap          /opt/local/bin/perl5.24 Makefile.PL INSTALLDIRS=vendor CC="/opt/local/bin/clang-mp-3.9" LD="/opt/local/bin/clang-mp-3.9"
Command failed:  cd "/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_macports_release_tarballs_ports_perl_p5-io-socket-ssl/p5.24-io-socket-ssl/work/IO-Socket-SSL-2.049" && /opt/local/bin/perl5.24 Makefile.PL INSTALLDIRS=vendor CC="/opt/local/bin/clang-mp-3.9" LD="/opt/local/bin/clang-mp-3.9" 
Exit code: 133

Changed 7 years ago by ballapete (Peter "Pete" Dyballa)

Attachment: main.log added

main.log with Clang 3.9

comment:5 Changed 7 years ago by kencu (Ken)

This feels like an archicture mismatch, perhaps where the module is being installed as +universal (maybe specified in variants.conf) or at least with the opposite architecture whereas pearl was not originally installed as universal.

comment:6 in reply to:  5 Changed 7 years ago by ballapete (Peter "Pete" Dyballa)

Replying to kencu:

This feels like an archicture mismatch, perhaps where the module is being installed as +universal (maybe specified in variants.conf) or at least with the opposite architecture whereas pearl was not originally installed as universal.

My /opt/local/etc/macports/variants.conf has only these not out commented lines:

 14 -llvm34
 16 +llvm39
 17 -ld64_97
 18 -ld64_127
 19 -ld64_236

Perl is kind of "natural" here, a digital native:

pete 270 /\ port installed | grep 5.24
  p5.24-capture-tiny @0.460.0_0 (active)
  p5.24-cpan-meta-requirements @2.140.0_0 (active)
  p5.24-devel-checkbin @0.40.0_0 (active)
  p5.24-encode-locale @1.50.0_0 (active)
  p5.24-extutils-makemaker @7.300.0_0 (active)
  p5.24-extutils-manifest @1.700.0_0 (active)
  p5.24-file-listing @6.40.0_1 (active)
  p5.24-getopt-long @2.500.0_0 (active)
  p5.24-html-form @6.30.0_1 (active)
  p5.24-html-parser @3.720.0_0 (active)
  p5.24-html-tagset @3.200.0_4 (active)
  p5.24-http-cookies @6.30.0_0 (active)
  p5.24-http-daemon @6.10.0_1 (active)
  p5.24-http-date @6.20.0_1 (active)
  p5.24-http-message @6.130.0_0 (active)
  p5.24-http-negotiate @6.10.0_1 (active)
  p5.24-io @1.250.0_4 (active)
  p5.24-io-html @1.1.0_0 (active)
  p5.24-io-socket-inet6 @2.720.0_0 (active)
  p5.24-io-socket-ip @0.390.0_0 (active)
  p5.24-locale-gettext @1.70.0_0 (active)
  p5.24-lwp-mediatypes @6.20.0_1 (active)
  p5.24-mime-base64 @3.150.0_0 (active)
  p5.24-mozilla-ca @20160104_0 (active)
  p5.24-net-libidn @0.120.0_4 (active)
  p5.24-net-ssleay @1.810.0_0 (active)
  p5.24-pathtools @3.620.0_0 (active)
  p5.24-scalar-list-utils @1.480.0_0 (active)
  p5.24-socket @2.24.0_0 (active)
  p5.24-socket6 @0.280.0_0 (active)
  p5.24-sub-name @0.210.0_0 (active)
  p5.24-sub-uplevel @0.280.0_0 (active)
  p5.24-test-exception @0.430.0_0 (active)
  p5.24-test-nowarnings @1.40.0_1 (active)
  p5.24-test-warn @0.320.0_0 (active)
  p5.24-try-tiny @0.280.0_0 (active)
  p5.24-uri @1.710.0_0 (active)
  perl5 @5.24.1_0+perl5_24 (active)
  perl5.24 @5.24.1_0 (active)

OTOH, p5.24-net-ssleay does not seem to have the required object:

nm -p /opt/local/lib/perl5/vendor_perl/5.24/darwin-thread-multi-2level/auto/Net/SSLeay/SSLeay.bundle | grep mutex
00000000000692b0 b _GLOBAL_openssl_mutex
00000000000692c0 b _LIB_init_mutex
                 U _perl_tsa_mutex_lock
                 U _perl_tsa_mutex_unlock
                 U _pthread_mutex_destroy
                 U _pthread_mutex_init

comment:7 Changed 7 years ago by kencu (Ken)

Here's what I have -- somewhere along the way it was installed as universal, perhaps as part of wine? At any rate, this works:

p5.24-io-socket-ssl @2.49.0_0 (active) platform='darwin 10' archs='noarch' date='2017-06-21T10:47:05-0700'
p5.24-net-smtp-ssl @1.40.0_0 (active) platform='darwin 10' archs='noarch' date='2016-10-28T11:12:00-0700'
p5.24-net-ssleay @1.810.0_0+universal (active) platform='darwin 10' archs='i386 x86_64' date='2017-03-29T10:30:31-0700'
perl5.24 @5.24.1_0+universal (active) platform='darwin 10' archs='i386 x86_64' date='2017-02-02T18:56:38-0800'

comment:8 in reply to:  7 Changed 7 years ago by ballapete (Peter "Pete" Dyballa)

Replying to kencu:

Here's what I have -- somewhere along the way it was installed as universal, perhaps as part of wine? At any rate, this works:

perl5.24 @5.24.1_0+universal (active) platform='darwin 10' archs='i386 x86_64' date='2017-02-02T18:56:38-0800'

I have:

  perl5 @5.24.1_0+perl5_24 (active) platform='darwin 10' archs='noarch' date='2017-06-29T22:58:06+0200'

comment:9 Changed 7 years ago by ballapete (Peter "Pete" Dyballa)

Building

  perl5.24 @5.24.1_0+universal (active) platform='darwin 10' archs='i386 x86_64' date='2017-06-30T21:54:29+0200'

solves indeed the problem, although /opt/local/lib/perl5/vendor_perl/5.24/darwin-thread-multi-2level/auto/Net/SSLeay/SSLeay.bundle is unchanged…

comment:10 Changed 6 years ago by dbevans (David B. Evans)

Resolution: worksforme
Status: newclosed
Note: See TracTickets for help on using tickets.