Skip Menu |

This queue is for tickets about the PAR-Packer CPAN distribution.

Report information
The Basics
Id: 113618
Status: resolved
Priority: 0/
Queue: PAR-Packer

People
Owner: Nobody in particular
Requestors: philkime [...] kime.org.uk
Cc:
AdminCc:

Bug Information
Severity: Important
Broken in: 1.030
Fixed in: (no value)



Subject: Strange issue with not packing libperl.dylib
Date: Fri, 8 Apr 2016 15:43:06 +0200
To: bug-PAR-Packer [...] rt.cpan.org
From: Kime Philip <philkime [...] kime.org.uk>
With 1.30, I just had a bug report that the packed binary top level script is looking for libperl.dylib in the place where the build machine expects it. I verified this by renaming /opt/local/lib/perl5/5.22/darwin-thread-multi-2level/CORE/libperl.dylib and then the packed version fails with: dyld: Library not loaded: /opt/local/lib/perl5/5.22/darwin-thread-multi-2level/CORE/libperl.dylib Referenced from: /var/folders/g0/t3rtgwks57366nz5dvxkrv_m0000gn/T//par-7068696c6b696d65/cache-a06ceeaebd8c05e62e25f7d6b91364d7adb646b8/biber Reason: image not found Trace/BPT trap: 5 I’m sure this never used to happen. Do I now need to pack libperl.dylib explicitly on OSX?
I tried packing libperl.dylib explicitly but this makes no difference - the packed version still refers to the perl install tree path of libperl.dylib and fails if it's not there ...
On 2016-04-08 10:01:00, PHILKIME wrote: Show quoted text
> I tried packing libperl.dylib explicitly but this makes no difference
That's never going to work, libperl (and any non-system libraries it is linked with) are _not_ packed in the zip part of the executable. Please attach a full build log of PAR::Packer. Also, what's the version of OS X on the machine where the packed executable fails? Cheers, Roderich
Build is on 10.6 and fails with same error on 10.8 and 10.11. I also tried to build on 10.11 with same issue. Log is attached.
Subject: log.txt

Message body is not shown because it is too large.

On 2016-04-08 11:07:18, PHILKIME wrote: Show quoted text
> Log is attached.
Sorry for not making myself more clear, I need the full log of how you built PAR::Packer (i.e. "perl Makefile.PL", "make"...) , not the log of running pp. Cheers, Roderich
Ah, sorry, here it is:
Subject: buildlog.txt
[grass][~] > sudo perl -MCPAN -e shell cpan shell -- CPAN exploration and modules installation (v2.11) Enter 'h' for help. cpan> install PAR::Packer Fetching with LWP: http://cpan.strawberryperl.com/authors/01mailrc.txt.gz Fetching with LWP: http://cpan.strawberryperl.com/modules/02packages.details.txt.gz Fetching with LWP: http://cpan.strawberryperl.com/modules/03modlist.data.gz Database was generated on Tue, 05 Apr 2016 14:18:12 GMT Updating database file ... Done! Running install for module 'PAR::Packer' Fetching with LWP: http://cpan.strawberryperl.com/authors/id/R/RS/RSCHUPP/PAR-Packer-1.030.tar.gz Fetching with LWP: http://cpan.strawberryperl.com/authors/id/R/RS/RSCHUPP/CHECKSUMS Checksum for /var/root/.cpan/sources/authors/id/R/RS/RSCHUPP/PAR-Packer-1.030.tar.gz ok Scanning cache /var/root/.cpan/build for sizes ................................................----------------------------DONE Configuring R/RS/RSCHUPP/PAR-Packer-1.030.tar.gz with Makefile.PL *** You have extra Perl library paths set in your environment. Please note that these paths (set with PERL5LIB or PERLLIB) are not honored by perl when running under taint mode, which may lead to problems. This is a limitation (by design) of Perl, not of PAR::Packer; but some of the problems may manifest here during installation. Checking if your kit is complete... Looks good Prototype mismatch: sub main::prompt: none vs ($;$) at /opt/local/lib/perl5/5.22/ExtUtils/MakeMaker.pm line 228. Generating a Unix-style Makefile Writing Makefile for myldr Writing MYMETA.yml and MYMETA.json Generating a Unix-style Makefile Writing Makefile for PAR::Packer Writing MYMETA.yml and MYMETA.json RSCHUPP/PAR-Packer-1.030.tar.gz /opt/local/bin/perl5.22 Makefile.PL -- OK Running make for R/RS/RSCHUPP/PAR-Packer-1.030.tar.gz cp script/tkpp blib/script/tkpp cp script/par.pl blib/script/par.pl "/opt/local/bin/perl5.22" "-Iinc" -MExtUtils::MY -e 'MY->fixin(shift)' -- blib/script/tkpp "/opt/local/bin/perl5.22" "-Iinc" -MExtUtils::MY -e 'MY->fixin(shift)' -- blib/script/par.pl cp lib/PAR/Filter/Bytecode.pm blib/lib/PAR/Filter/Bytecode.pm cp lib/PAR/Packer.pm blib/lib/PAR/Packer.pm cp lib/PAR/Filter/Obfuscate.pm blib/lib/PAR/Filter/Obfuscate.pm cp lib/PAR/Filter/PodStrip.pm blib/lib/PAR/Filter/PodStrip.pm cp lib/PAR/StrippedPARL/Base.pm blib/lib/PAR/StrippedPARL/Base.pm cp lib/pp.pm blib/lib/pp.pm cp lib/App/Packer/PAR.pm blib/lib/App/Packer/PAR.pm cp lib/PAR/Filter/Bleach.pm blib/lib/PAR/Filter/Bleach.pm cp lib/PAR/Filter/PatchContent.pm blib/lib/PAR/Filter/PatchContent.pm cp lib/PAR/Filter.pm blib/lib/PAR/Filter.pm cp script/pp blib/script/pp "/opt/local/bin/perl5.22" "-Iinc" -MExtUtils::MY -e 'MY->fixin(shift)' -- blib/script/pp make[1]: Entering directory '/private/var/root/.cpan/build/PAR-Packer-1.030-wQDuDt/myldr' Makefile:755: warning: overriding recipe for target '.c.o' Makefile:337: warning: ignoring old recipe for target '.c.o' "/opt/local/bin/perl5.22" par_pl2c.pl my_par_pl < ../script/par.pl > my_par_pl.c "/opt/local/bin/perl5.22" sha1.c.PL /usr/bin/clang -c -pipe -Os -fno-common -DPERL_DARWIN -I/opt/local/include -fno-strict-aliasing -fstack-protector-strong -I/opt/local/include -I/opt/local/lib/perl5/5.22/darwin-thread-multi-2level/CORE -DPARL_EXE=\"parl\" -O3 main.c In file included from main.c:52: In file included from ./mktmpdir.c:1: In file included from ./mktmpdir.h:84: In file included from ./utils.c:25: ./env.c:105:27: warning: passing 'unsigned int *' to parameter of type 'int *' converts between pointers to integer types with different sign [-Wpointer-sign] if ((c = __findenv(name, &offset))) { /* find if already exists */ ^~~~~~~ In file included from main.c:52: ./mktmpdir.c:63:23: warning: using the result of an assignment as a condition without parentheses [-Wparentheses] for ( i = 0 ; key = ld_path_keys[i]; i++ ) { ~~~~^~~~~~~~~~~~~~~~~ ./mktmpdir.c:63:23: note: place parentheses around the assignment to silence this warning for ( i = 0 ; key = ld_path_keys[i]; i++ ) { ^ ( ) ./mktmpdir.c:63:23: note: use '==' to turn this assignment into an equality comparison for ( i = 0 ; key = ld_path_keys[i]; i++ ) { ^ == ./mktmpdir.c:65:29: warning: passing 'const char *' to parameter of type 'char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] par_setenv(key, stmpdir); ^~~~~~~ main.c:121:23: warning: assigning to 'char *' from 'const char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] fakeargv[argno++] = my_par_pl; ^ ~~~~~~~~~ 4 warnings generated. env MACOSX_DEPLOYMENT_TARGET=10.11 /usr/bin/clang main.o -L/opt/local/lib -Wl,-headerpad_max_install_names -fstack-protector-strong -L/opt/local/lib/perl5/5.22/darwin-thread-multi-2level/CORE -lperl -lpthread -ldl -lm -lutil -lc -o ./par true "/opt/local/bin/perl5.22" encode_append.pl Dynamic.in ./par Dynamic.pm "/opt/local/bin/perl5.22" embed_files.pl -c 32768 ./par > boot_embedded_files.c "/opt/local/bin/perl5.22" -Mblib=.. run_with_inc.pl ./par -q -B -Oparldyn otool(1): Apple Inc. version cctools-870 disassmbler: LLVM version 7.3.0 # using "otool -L" to find shared libraries needed by ./par # embedding "./par" as "par" # embedding "/opt/local/lib/perl5/5.22/darwin-thread-multi-2level/CORE/libperl.dylib" as "libperl.dylib" cp parldyn ../blib/script/parldyn true ../blib/script/parldyn /usr/bin/clang -c -pipe -Os -fno-common -DPERL_DARWIN -I/opt/local/include -fno-strict-aliasing -fstack-protector-strong -I/opt/local/include -I/opt/local/lib/perl5/5.22/darwin-thread-multi-2level/CORE -DPARL_EXE=\"parl\" -O3 boot.c In file included from boot.c:10: In file included from ./mktmpdir.c:1: In file included from ./mktmpdir.h:84: In file included from ./utils.c:25: ./env.c:105:27: warning: passing 'unsigned int *' to parameter of type 'int *' converts between pointers to integer types with different sign [-Wpointer-sign] if ((c = __findenv(name, &offset))) { /* find if already exists */ ^~~~~~~ In file included from boot.c:10: ./mktmpdir.c:63:23: warning: using the result of an assignment as a condition without parentheses [-Wparentheses] for ( i = 0 ; key = ld_path_keys[i]; i++ ) { ~~~~^~~~~~~~~~~~~~~~~ ./mktmpdir.c:63:23: note: place parentheses around the assignment to silence this warning for ( i = 0 ; key = ld_path_keys[i]; i++ ) { ^ ( ) ./mktmpdir.c:63:23: note: use '==' to turn this assignment into an equality comparison for ( i = 0 ; key = ld_path_keys[i]; i++ ) { ^ == ./mktmpdir.c:65:29: warning: passing 'const char *' to parameter of type 'char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] par_setenv(key, stmpdir); ^~~~~~~ 3 warnings generated. env MACOSX_DEPLOYMENT_TARGET=10.11 /usr/bin/clang boot.o -o ./boot true "/opt/local/bin/perl5.22" encode_append.pl Static.in ./boot Static.pm "/opt/local/bin/perl5.22" -Mblib=.. run_with_inc.pl ./boot -q -B -Oparl cp Static.pm ../blib/lib/PAR/StrippedPARL/Static.pm cp Dynamic.pm ../blib/lib/PAR/StrippedPARL/Dynamic.pm cp parl ../blib/script/parl true ../blib/script/parl Manifying 2 pod documents make[1]: Leaving directory '/private/var/root/.cpan/build/PAR-Packer-1.030-wQDuDt/myldr' Manifying 4 pod documents Manifying 10 pod documents RSCHUPP/PAR-Packer-1.030.tar.gz /opt/local/bin/gmake -j3 -j3 -- OK Running make test make[1]: Entering directory '/private/var/root/.cpan/build/PAR-Packer-1.030-wQDuDt/myldr' Makefile:755: warning: overriding recipe for target '.c.o' Makefile:337: warning: ignoring old recipe for target '.c.o' Manifying 2 pod documents make[1]: Leaving directory '/private/var/root/.cpan/build/PAR-Packer-1.030-wQDuDt/myldr' PERL_DL_NONLAZY=1 "/opt/local/bin/perl5.22" "-MExtUtils::Command::MM" "-MTest::Harness" "-e" "undef *Test::Harness::Switches; test_harness(0, 'inc', 'blib/lib', 'blib/arch')" t/00-pod.t t/10-parl-generation.t t/20-pp.t t/30-current_exec.t t/40-packer_cd_option.t t/80-doublecolon.t t/90-rt101800.t t/90-rt103861.t t/90-rt104560.t t/90-rt104635.t t/90-rt59710.t t/00-pod.t ............... skipped: Set environment variable PERL_TEST_POD=1 to test POD t/10-parl-generation.t ... ok t/20-pp.t ................ 13/34 /tmp/POSWEpmVkJ syntax OK t/20-pp.t ................ ok t/30-current_exec.t ...... # Please wait t/30-current_exec.t ...... ok t/40-packer_cd_option.t .. ok t/80-doublecolon.t ....... ok t/90-rt101800.t .......... 1/18 # PAR_TEMP = /tmp/zbUMhHNu87/par-726f6f74/cache-b708d6bb8cc3c9af4eea9c2a82444e244f45206b t/90-rt101800.t .......... ok t/90-rt103861.t .......... ok t/90-rt104560.t .......... ok t/90-rt104635.t .......... ok t/90-rt59710.t ........... ok All tests successful. Files=11, Tests=107, 76 wallclock secs ( 0.07 usr 0.02 sys + 54.73 cusr 11.03 csys = 65.85 CPU) Result: PASS make[1]: Entering directory '/private/var/root/.cpan/build/PAR-Packer-1.030-wQDuDt/myldr' Makefile:755: warning: overriding recipe for target '.c.o' Makefile:337: warning: ignoring old recipe for target '.c.o' make[1]: Nothing to be done for 'test'. make[1]: Leaving directory '/private/var/root/.cpan/build/PAR-Packer-1.030-wQDuDt/myldr' RSCHUPP/PAR-Packer-1.030.tar.gz /opt/local/bin/gmake test -- OK Running make install make[1]: Entering directory '/private/var/root/.cpan/build/PAR-Packer-1.030-wQDuDt/myldr' Makefile:755: warning: overriding recipe for target '.c.o' Makefile:337: warning: ignoring old recipe for target '.c.o' Manifying 2 pod documents make[1]: Leaving directory '/private/var/root/.cpan/build/PAR-Packer-1.030-wQDuDt/myldr' Manifying 4 pod documents Manifying 10 pod documents Appending installation info to /opt/local/lib/perl5/5.22/darwin-thread-multi-2level/perllocal.pod Installing /opt/local/lib/perl5/site_perl/5.22/PAR/Packer.pm Installing /opt/local/share/perl5.22/siteman/man3/Dynamic.3pm Installing /opt/local/share/perl5.22/siteman/man3/PAR::Packer.3pm Installing /opt/local/share/perl5.22/siteman/man3/Static.3pm RSCHUPP/PAR-Packer-1.030.tar.gz /usr/bin/make install -j3 -- OK cpan> quit
On 2016-04-08 14:28:31, PHILKIME wrote: Show quoted text
> Ah, sorry, here it is: > > "/opt/local/bin/perl5.22" embed_files.pl -c 32768 ./par > boot_embedded_files.c > # using "otool -L" to find shared libraries needed by ./par > # embedding "./par" as "par" > # embedding "/opt/local/lib/perl5/5.22/darwin-thread-multi-2level/CORE/libperl.dylib" as "libperl.dylib"
As expected... I tried this on OSX 10.11, both with the perl 5.18 that came with it and also with a freshly perlbrew'ed 5.22.1 and can't reproduce the problem: - build log shows that libperl.dylib gets embedded (see above) - running a packed executable shows an unpacked libperl.dylib in the top level of the cache directory - renaming the installed version of libperl.dylib and running the executable in the cache directory (with the same name as the packed executable, though it's just par in disguise) with DYLD_LIBRARY_PATH=<cache directory> works fine (note: this will draw an error message from the executable, but the point is that it runs at all) Cheers, Roderich
So is there something I'm doing wrong? I've never seen this before 1.30 ...
When I run otool -L on the packed binary in the cache folder: Show quoted text
> otool -L /var/folders/g0/t3rtgwks57366nz5dvxkrv_m0000gn/T/par-7068696c6b696d65/cache-3ce6949415c8a684cec51d84d1f897600bd5b03e/biber-darwin_x86_64
/var/folders/g0/t3rtgwks57366nz5dvxkrv_m0000gn/T/par-7068696c6b696d65/cache-3ce6949415c8a684cec51d84d1f897600bd5b03e/biber-darwin_x86_64: /opt/local/lib/perl5/5.22/darwin-thread-multi-2level/CORE/libperl.dylib (compatibility version 5.22.0, current version 5.22.1) /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1226.10.1) /usr/lib/libutil.dylib (compatibility version 1.0.0, current version 1.0.0) It's looking for libperl.dylib in the wrong place ...
On 2016-04-10 09:09:07, PHILKIME wrote: Show quoted text
> When I run otool -L on the packed binary in the cache folder: >
> > otool -L /var/folders/g0/t3rtgwks57366nz5dvxkrv_m0000gn/T/par- > > 7068696c6b696d65/cache- > > 3ce6949415c8a684cec51d84d1f897600bd5b03e/biber-darwin_x86_64
> /var/folders/g0/t3rtgwks57366nz5dvxkrv_m0000gn/T/par- > 7068696c6b696d65/cache-3ce6949415c8a684cec51d84d1f897600bd5b03e/biber- > darwin_x86_64: > /opt/local/lib/perl5/5.22/darwin-thread-multi- > 2level/CORE/libperl.dylib (compatibility version 5.22.0, current > version 5.22.1) > /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, > current version 1226.10.1) > /usr/lib/libutil.dylib (compatibility version 1.0.0, current > version 1.0.0) > > It's looking for libperl.dylib in the wrong place ...
That's expected: OSX always burns absolute paths to shared libraries into executables. Can you try the following: pp -o foo.exe -E 'say "DYLD_LIBRARY_PATH=$ENV{DYLD_LIBRARY_PATH}";' ./foo.exe This should tell you the DYLD_LIBRARY_PATH seen by the unpacked executable (should be the cache directory). Look in this directory: there should be an executable foo.exe and also libperl.dylib. Cheers, Roderich
Thanks for the reply - that's all true: DYLD_LIBRARY_PATH=/var/folders/g0/t3rtgwks57366nz5dvxkrv_m0000gn/T//par-7068696c6b696d65/cache-2a87b1d6222c0a4dfff86a3067e459abc842a0ff and the lib/exe is in there. But I can't work out what changed from 1.29? I remember there was some older OS related ticket which you merged for 1.30 to fix not following symlink names for libs (which seems to be fixed) - anything to do with it or do I need to explicitly set DYLD_LIBRARY_PATH in the exe now?
On 2016-04-10 09:26:46, PHILKIME wrote: Show quoted text
> Thanks for the reply - that's all true: > > DYLD_LIBRARY_PATH=/var/folders/g0/t3rtgwks57366nz5dvxkrv_m0000gn/T//par- > 7068696c6b696d65/cache-2a87b1d6222c0a4dfff86a3067e459abc842a0ff > > and the lib/exe is in there.
Puzzling... Show quoted text
> But I can't work out what changed from 1.29?
I fixed this "unpack a directory and a file both called 'version'" problem and rewrote some of the embedding stuff. But it's working as expected. Show quoted text
> I remember there was some older OS related ticket which you > merged for 1.30 to fix not following symlink names for libs (which > seems to be fixed) - anything to do with it
No, this was for "pp --link LIB" - though both deal with shared libraries, this doesn't have any implications here. Show quoted text
> or do I need to explicitly > set DYLD_LIBRARY_PATH in the exe now?
You can't because it needs to be set _before_ you can run the exe. Also the test confirmed that the packed executable "sees" the correct setting. If /your/dyld/path is what the test reported, try DYLD_LIBRARY_PATH=/your/dyld/path DYLD_PRINT_LIBRARIES=1 /your/dyld/path/foo.exe It should tell you _which_ libperl.dylib is used. Cheers, Roderich
Strange, it looks ok and when I just tried the same thing, renaming the /opt/local ... libperl.dylib, it now works. I don't understand this since it was reported by someone else and I replicated it. So, just to check, I downloaded the one they reported it on: https://sourceforge.net/projects/biblatex-biber/files/biblatex-biber/development/binaries/OSX_Intel/biber-darwin_x86_64.tar.gz ran this and this works ok too now. Perhaps you can download the above and just do: biber --cache which prints the PAR:Packer cache? This failed before with the error I noted if /opt/local/lib/perl5/5.22/darwin-thread-multi-2level/CORE/libperl.dylib was missing.
Subject: out.txt
dyld: loaded: /var/folders/g0/t3rtgwks57366nz5dvxkrv_m0000gn/T/par-7068696c6b696d65/cache-671ac266ecef6ef66c1cc9249960e158b875f3e6/biber-darwin_x86_64 dyld: loaded: /var/folders/g0/t3rtgwks57366nz5dvxkrv_m0000gn/T/par-7068696c6b696d65/cache-671ac266ecef6ef66c1cc9249960e158b875f3e6/libperl.dylib dyld: loaded: /usr/lib/libSystem.B.dylib dyld: loaded: /usr/lib/libutil.dylib dyld: loaded: /usr/lib/system/libcache.dylib dyld: loaded: /usr/lib/system/libcommonCrypto.dylib dyld: loaded: /usr/lib/system/libcompiler_rt.dylib dyld: loaded: /usr/lib/system/libcopyfile.dylib dyld: loaded: /usr/lib/system/libcorecrypto.dylib dyld: loaded: /usr/lib/system/libdispatch.dylib dyld: loaded: /usr/lib/system/libdyld.dylib dyld: loaded: /usr/lib/system/libkeymgr.dylib dyld: loaded: /usr/lib/system/liblaunch.dylib dyld: loaded: /usr/lib/system/libmacho.dylib dyld: loaded: /usr/lib/system/libquarantine.dylib dyld: loaded: /usr/lib/system/libremovefile.dylib dyld: loaded: /usr/lib/system/libsystem_asl.dylib dyld: loaded: /usr/lib/system/libsystem_blocks.dylib dyld: loaded: /usr/lib/system/libsystem_c.dylib dyld: loaded: /usr/lib/system/libsystem_configuration.dylib dyld: loaded: /usr/lib/system/libsystem_coreservices.dylib dyld: loaded: /usr/lib/system/libsystem_coretls.dylib dyld: loaded: /usr/lib/system/libsystem_dnssd.dylib dyld: loaded: /usr/lib/system/libsystem_info.dylib dyld: loaded: /usr/lib/system/libsystem_kernel.dylib dyld: loaded: /usr/lib/system/libsystem_m.dylib dyld: loaded: /usr/lib/system/libsystem_malloc.dylib dyld: loaded: /usr/lib/system/libsystem_network.dylib dyld: loaded: /usr/lib/system/libsystem_networkextension.dylib dyld: loaded: /usr/lib/system/libsystem_notify.dylib dyld: loaded: /usr/lib/system/libsystem_platform.dylib dyld: loaded: /usr/lib/system/libsystem_pthread.dylib dyld: loaded: /usr/lib/system/libsystem_sandbox.dylib dyld: loaded: /usr/lib/system/libsystem_secinit.dylib dyld: loaded: /usr/lib/system/libsystem_trace.dylib dyld: loaded: /usr/lib/system/libunc.dylib dyld: loaded: /usr/lib/system/libunwind.dylib dyld: loaded: /usr/lib/system/libxpc.dylib dyld: loaded: /usr/lib/libobjc.A.dylib dyld: loaded: /usr/lib/libauto.dylib dyld: loaded: /usr/lib/libc++abi.dylib dyld: loaded: /usr/lib/libc++.1.dylib dyld: loaded: /usr/lib/libDiagnosticMessagesClient.dylib dyld: loaded: /var/folders/g0/t3rtgwks57366nz5dvxkrv_m0000gn/T/par-7068696c6b696d65/cache-671ac266ecef6ef66c1cc9249960e158b875f3e6/biber-darwin_x86_64 dyld: loaded: /var/folders/g0/t3rtgwks57366nz5dvxkrv_m0000gn/T/par-7068696c6b696d65/cache-671ac266ecef6ef66c1cc9249960e158b875f3e6/libperl.dylib dyld: loaded: /usr/lib/libSystem.B.dylib dyld: loaded: /usr/lib/libutil.dylib dyld: loaded: /usr/lib/system/libcache.dylib dyld: loaded: /usr/lib/system/libcommonCrypto.dylib dyld: loaded: /usr/lib/system/libcompiler_rt.dylib dyld: loaded: /usr/lib/system/libcopyfile.dylib dyld: loaded: /usr/lib/system/libcorecrypto.dylib dyld: loaded: /usr/lib/system/libdispatch.dylib dyld: loaded: /usr/lib/system/libdyld.dylib dyld: loaded: /usr/lib/system/libkeymgr.dylib dyld: loaded: /usr/lib/system/liblaunch.dylib dyld: loaded: /usr/lib/system/libmacho.dylib dyld: loaded: /usr/lib/system/libquarantine.dylib dyld: loaded: /usr/lib/system/libremovefile.dylib dyld: loaded: /usr/lib/system/libsystem_asl.dylib dyld: loaded: /usr/lib/system/libsystem_blocks.dylib dyld: loaded: /usr/lib/system/libsystem_c.dylib dyld: loaded: /usr/lib/system/libsystem_configuration.dylib dyld: loaded: /usr/lib/system/libsystem_coreservices.dylib dyld: loaded: /usr/lib/system/libsystem_coretls.dylib dyld: loaded: /usr/lib/system/libsystem_dnssd.dylib dyld: loaded: /usr/lib/system/libsystem_info.dylib dyld: loaded: /usr/lib/system/libsystem_kernel.dylib dyld: loaded: /usr/lib/system/libsystem_m.dylib dyld: loaded: /usr/lib/system/libsystem_malloc.dylib dyld: loaded: /usr/lib/system/libsystem_network.dylib dyld: loaded: /usr/lib/system/libsystem_networkextension.dylib dyld: loaded: /usr/lib/system/libsystem_notify.dylib dyld: loaded: /usr/lib/system/libsystem_platform.dylib dyld: loaded: /usr/lib/system/libsystem_pthread.dylib dyld: loaded: /usr/lib/system/libsystem_sandbox.dylib dyld: loaded: /usr/lib/system/libsystem_secinit.dylib dyld: loaded: /usr/lib/system/libsystem_trace.dylib dyld: loaded: /usr/lib/system/libunc.dylib dyld: loaded: /usr/lib/system/libunwind.dylib dyld: loaded: /usr/lib/system/libxpc.dylib dyld: loaded: /usr/lib/libobjc.A.dylib dyld: loaded: /usr/lib/libauto.dylib dyld: loaded: /usr/lib/libc++abi.dylib dyld: loaded: /usr/lib/libc++.1.dylib dyld: loaded: /usr/lib/libDiagnosticMessagesClient.dylib Usage: /var/folders/g0/t3rtgwks57366nz5dvxkrv_m0000gn/T/par-7068696c6b696d65/cache-671ac266ecef6ef66c1cc9249960e158b875f3e6/biber-darwin_x86_64 [ -Alib.par ] [ -Idir ] [ -Mmodule ] [ src.par ] [ program.pl ] /var/folders/g0/t3rtgwks57366nz5dvxkrv_m0000gn/T/par-7068696c6b696d65/cache-671ac266ecef6ef66c1cc9249960e158b875f3e6/biber-darwin_x86_64 [ -B|-b ] [-Ooutfile] src.par
Very odd, the user who reported this still has the issue with that version I mentioned - just verified five mins ago. I wonder if it is the same for you?
On 2016-04-10 10:28:20, PHILKIME wrote: Show quoted text
> Very odd, the user who reported this still has the issue with that > version I mentioned - just verified five mins ago. I wonder if it is > the same for you?
Me too. But looking into the cache directory I see only a file called "biber" there, no libperl.dylib. If I look at the real biber (i.e. the packed exeutable), it should consist of the following parts, concatenated in order: [1] an executable (myldr/boot) which is really small except for some large byte arrays consisting of myldr/par and libperl.dylib (not compressed) [2] several core perl modules each starting with the string "FILE" (also uncompressed) [3] a zip containing the bulk of your application [4] a small trailer with some meta data, e.g. the basename of the cache directory and the position where part [2] starts Examining biber's [4] shows that [2] starts around 90k. That's way too small to contain libperl.dylib. So something went wrong, apparently already with your build of PAR::Packer as part [1] is generated when PAR::Packer is build. In fact, [1] is the contents of PAR::StrippedPARL::Static (uuendoded) and not influenced by any packing you do. Err... except when you packed with "pp -d", then you would get PAR::StrippedPARL::Dynamic instead which lacks libperl.dylib ... Cheers, Roderich
Hmm, ok. I need to check the build machine then. I wonder if you get the same problem with the i386 version: http://downloads.sourceforge.net/project/biblatex-biber/biblatex-biber/development/binaries/OSX_Intel/biber-darwin_x86_i386.tar.gz
Maybe a clue. Here is the PAR::Packer build log from the actual build machine. Perhaps there is an otool difference on later OSX builds? I build on 10.6 as the earliest viable 64-bit platform - that otool error is new as of 1.30 bbf-osx106:PAR-Packer-1.030-cHZXau root# /opt/local/bin/perl Makefile.PL Checking if your kit is complete... Looks good Prototype mismatch: sub main::prompt: none vs ($;$) at /opt/local/lib/perl5/site_perl/5.22/ExtUtils/MakeMaker.pm line 228. Generating a Unix-style Makefile Writing Makefile for myldr Writing MYMETA.yml and MYMETA.json Generating a Unix-style Makefile Writing Makefile for PAR::Packer Writing MYMETA.yml and MYMETA.json bbf-osx106:PAR-Packer-1.030-cHZXau root# make cp lib/PAR/Filter.pm blib/lib/PAR/Filter.pm cp lib/PAR/Filter/PatchContent.pm blib/lib/PAR/Filter/PatchContent.pm cp lib/PAR/Filter/Obfuscate.pm blib/lib/PAR/Filter/Obfuscate.pm cp lib/App/Packer/PAR.pm blib/lib/App/Packer/PAR.pm cp lib/PAR/Filter/Bytecode.pm blib/lib/PAR/Filter/Bytecode.pm cp lib/PAR/StrippedPARL/Base.pm blib/lib/PAR/StrippedPARL/Base.pm cp lib/PAR/Filter/Bleach.pm blib/lib/PAR/Filter/Bleach.pm cp lib/PAR/Packer.pm blib/lib/PAR/Packer.pm cp lib/PAR/Filter/PodStrip.pm blib/lib/PAR/Filter/PodStrip.pm cp lib/pp.pm blib/lib/pp.pm Makefile:755: warning: overriding commands for target `.c.o' Makefile:337: warning: ignoring old commands for target `.c.o' "/opt/local/bin/perl5.22" par_pl2c.pl my_par_pl < ../script/par.pl > my_par_pl.c "/opt/local/bin/perl5.22" sha1.c.PL /usr/bin/gcc-4.2 -c -pipe -Os -fno-common -DPERL_DARWIN -I/opt/local/include -fno-strict-aliasing -fstack-protector -I/opt/local/include -I/opt/local/lib/perl5/5.22/darwin-thread-multi-2level/CORE -DPARL_EXE=\"parl\" -O3 main.c main.c: In function 'main': main.c:121: warning: assignment discards qualifiers from pointer target type env MACOSX_DEPLOYMENT_TARGET=10.6 /usr/bin/gcc-4.2 main.o -L/opt/local/lib -Wl,-headerpad_max_install_names -fstack-protector -L/opt/local/lib/perl5/5.22/darwin-thread-multi-2level/CORE -lperl -lpthread -ldl -lm -lutil -lc -o ./par true "/opt/local/bin/perl5.22" encode_append.pl Dynamic.in ./par Dynamic.pm "/opt/local/bin/perl5.22" embed_files.pl -c 32768 ./par > boot_embedded_files.c otool: unknown char `-' in flag --version Usage: otool [-fahlLDtdorSTMRIHvVcXm] <object file> ... -f print the fat headers -a print the archive header -h print the mach header -l print the load commands -L print shared libraries used -D print shared library id name -t print the text section (disassemble with -v) -p <routine name> start dissassemble from routine name -s <segname> <sectname> print contents of section -d print the data section -o print the Objective-C segment -r print the relocation entries -S print the table of contents of a library -T print the table of contents of a dynamic shared library -M print the module table of a dynamic shared library -R print the reference table of a dynamic shared library -I print the indirect symbol table -H print the two-level hints table -v print verbosely (symbolically) when possible -V print disassembled operands symbolically -c print argument strings of a core file -X print no leading addresses or headers -m don't use archive(member) syntax -B force Thumb disassembly (ARM objects only) # fall back to guessing what DLLs are needed by ./par # embedding "./par" as "par" /usr/bin/gcc-4.2 -c -pipe -Os -fno-common -DPERL_DARWIN -I/opt/local/include -fno-strict-aliasing -fstack-protector -I/opt/local/include -I/opt/local/lib/perl5/5.22/darwin-thread-multi-2level/CORE -DPARL_EXE=\"parl\" -O3 boot.c env MACOSX_DEPLOYMENT_TARGET=10.6 /usr/bin/gcc-4.2 boot.o -o ./boot true "/opt/local/bin/perl5.22" encode_append.pl Static.in ./boot Static.pm cp Static.pm ../blib/lib/PAR/StrippedPARL/Static.pm cp Dynamic.pm ../blib/lib/PAR/StrippedPARL/Dynamic.pm "/opt/local/bin/perl5.22" -Mblib=.. run_with_inc.pl ./par -q -B -Oparldyn cp parldyn ../blib/script/parldyn true ../blib/script/parldyn "/opt/local/bin/perl5.22" -Mblib=.. run_with_inc.pl ./boot -q -B -Oparl cp parl ../blib/script/parl true ../blib/script/parl Manifying 2 pod documents cp script/tkpp blib/script/tkpp "/opt/local/bin/perl5.22" "-Iinc" -MExtUtils::MY -e 'MY->fixin(shift)' -- blib/script/tkpp cp script/par.pl blib/script/par.pl "/opt/local/bin/perl5.22" "-Iinc" -MExtUtils::MY -e 'MY->fixin(shift)' -- blib/script/par.pl cp script/pp blib/script/pp "/opt/local/bin/perl5.22" "-Iinc" -MExtUtils::MY -e 'MY->fixin(shift)' -- blib/script/pp Manifying 4 pod documents Manifying 10 pod documents bbf-osx106:PAR-Packer-1.030-cHZXau root#
On 2016-04-10 11:29:56, PHILKIME wrote: Show quoted text
> Hmm, ok. I need to check the build machine then. I wonder if you get > the same problem with the i386 version: > > http://downloads.sourceforge.net/project/biblatex-biber/biblatex- > biber/development/binaries/OSX_Intel/biber-darwin_x86_i386.tar.gz
Yes, complains about libperl.dylib, part [2] starts at around 83k. Cheers, Roderich
This must be the issue - otool on 10.6 and 10.5 (which is what my build machines are) doesn't have a "--version" option so it doesn't use otool to get dependencies which is why it's not finding libperl.dylib
I think this is resolved - attached is a patch to embed_files.pl which fixes this for me. It uses a more generic test for otool presence which works on any OSX version.
Subject: embed_files.pl.patch
--- PAR-Packer-1.030/myldr/embed_files.pl 2016-03-29 09:11:23.000000000 +0200 +++ embed_files.pl 2016-04-10 17:50:43.000000000 +0200 @@ -43,7 +43,7 @@ } # Max OS X: use "otool -L" - if (/darwin/i && (qx(otool --version), $? == 0)) + if (/darwin/i && (qx(which otool), $? == 0)) { print STDERR qq[# using "otool -L" to find shared libraries needed by $par\n]; *is_system_lib = sub { shift =~ m{^/usr/lib|^/System/Library/} }; @@ -55,7 +55,7 @@ # Windows with Mingw toolchain: use "objdump" recursively if (/mswin32/i && (qx(objdump --version), $? == 0)) { - print STDERR qq[# using "objdump" recusrively to find DLLs needed by $par\n]; + print STDERR qq[# using "objdump" recursively to find DLLs needed by $par\n]; my $system_root = realpath($ENV{SystemRoot}); *is_system_lib = sub { realpath(shift) =~ m{^\Q$system_root\E/}i };
On 2016-04-10 11:45:04, PHILKIME wrote: Show quoted text
> This must be the issue - otool on 10.6 and 10.5 (which is what my > build machines are) doesn't have a "--version" option so it doesn't > use otool to get dependencies which is why it's not finding > libperl.dylib
The use of otool is completely new in PAR::Packer 1.30 - before it used to guess (and often got it wrong). But if otool doesn't seem to be available (tested with "otool --version"), it should fall back to the previous method. OK, there are two issues here: detection of otool failed on your build machine (easily fixed) and the fallback method isn't complete (needs some thinking). Cheers, Roderich
Why not just mandate the install of the command-line dev tools for OSX? Anyone building PAR things is likely to have it anyway and it is a sensible requirement, that way, the otool is fine.
On 2016-04-10 12:06:54, PHILKIME wrote: Show quoted text
> Why not just mandate the install of the command-line dev tools for > OSX? Anyone building PAR things is likely to have it anyway and it is > a sensible requirement, that way, the otool is fine.
Sure. The problem is more apparent on platforms where I don't have anything like otool (OSX) or ldd (Linux, *BSD, Solaris) at all - I totally bungled the fallback method. But apparently nobody noticed yet:) OK, I just uploaded PAR::Packer 1.031 to CPAN. Thanks for your patience while investigating this. Cheers, Roderich
Many thanks for your patience too - I know these things are a pain - I just received four bug reports today for biblatex ...
Fixed in 1.031