Opened 6 months ago

Last modified 6 months ago

#54364 new defect

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 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 6 months ago.
main.log (7.4 KB) - added by ballapete (Peter Dyballa) 6 months ago.
main.log with Clang 3.9

Download all attachments as: .zip

Change History (11)

Changed 6 months ago by rlhamil

comment:1 Changed 6 months ago by rlhamil

  • Cc rlhamil added

comment:2 Changed 6 months ago by mojca (Mojca Miklavec)

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

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 6 months ago by ballapete (Peter Dyballa)

  • Cc ballapete added

comment:4 Changed 6 months ago by ballapete (Peter 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 6 months ago by ballapete (Peter Dyballa)

main.log with Clang 3.9

comment:5 follow-up: Changed 6 months 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 6 months ago by ballapete (Peter 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 follow-up: Changed 6 months 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 6 months ago by ballapete (Peter 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 6 months ago by ballapete (Peter 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…

Note: See TracTickets for help on using tickets.