#71152 closed defect (fixed)
perl5.38 @5.38.2 fails to build, actually 'test', on PPC Leopard, Mac OS X 10.5.8, because of ld not being able handle -rpath?
| Reported by: | ballapete (Peter "Pete" Dyballa) | Owned by: | kencu (Ken) |
|---|---|---|---|
| Priority: | Normal | Milestone: | |
| Component: | ports | Version: | 2.10.2 |
| Keywords: | leopard ppc | Cc: | mojca@… |
| Port: | perl5.38 |
Description
make[1]: Entering directory `/opt/local/var/macports/build/_opt_local_var_macports_sources_nue.de.rsync.macports.org_macports_release_tarballs_ports_lang_perl5/perl5.38/work/perl-5.38.2/cpan/DB_File' Running Mkbootstrap for DB_File () chmod 644 "DB_File.bs" /opt/local/var/macports/build/_opt_local_var_macports_sources_nue.de.rsync.macports.org_macports_release_tarballs_ports_lang_perl5/perl5.38/work/perl-5.38.2/cpan/DB_File/../../miniperl "-I../../lib" -MExtUtils::Command::MM -e 'cp_nonempty' -- DB_File.bs ../../lib/auto/DB_File/DB_File.bs 644 /usr/bin/gcc-4.2 -c -I/opt/local/include/db48 -std=gnu99 -fno-common -DPERL_DARWIN -pipe -Os -arch ppc -fno-strict-aliasing -fstack-protector -I/opt/local/include -D_FORTIFY_SOURCE=2 -Wall -Werror=pointer-arith -Wextra -Wno-long-long -Wno-declaration-after-statement -Wc++-compat -Wwrite-strings -O3 -DVERSION=\"1.858\" -DXS_VERSION=\"1.858\" "-I../.." -DmDB_Prefix_t=size_t -DmDB_Hash_t=u_int32_t version.c "../../miniperl" "-I../../lib" "../../lib/ExtUtils/xsubpp" -noprototypes -typemap '/opt/local/var/macports/build/_opt_local_var_macports_sources_nue.de.rsync.macports.org_macports_release_tarballs_ports_lang_perl5/perl5.38/work/perl-5.38.2/cpan/DB_File/../../lib/ExtUtils/typemap' -typemap '/opt/local/var/macports/build/_opt_local_var_macports_sources_nue.de.rsync.macports.org_macports_release_tarballs_ports_lang_perl5/perl5.38/work/perl-5.38.2/cpan/DB_File/typemap' DB_File.xs > DB_File.xsc mv DB_File.xsc DB_File.c /usr/bin/gcc-4.2 -c -I/opt/local/include/db48 -std=gnu99 -fno-common -DPERL_DARWIN -pipe -Os -arch ppc -fno-strict-aliasing -fstack-protector -I/opt/local/include -D_FORTIFY_SOURCE=2 -Wall -Werror=pointer-arith -Wextra -Wno-long-long -Wno-declaration-after-statement -Wc++-compat -Wwrite-strings -O3 -DVERSION=\"1.858\" -DXS_VERSION=\"1.858\" "-I../.." -DmDB_Prefix_t=size_t -DmDB_Hash_t=u_int32_t DB_File.c rm -f ../../lib/auto/DB_File/DB_File.bundle LD_RUN_PATH="/opt/local/lib/db48" env MACOSX_DEPLOYMENT_TARGET=10.3 /usr/bin/gcc-4.2 -Wl,-rpath,"/opt/local/lib/db48" -bundle -undefined dynamic_lookup -L/opt/local/lib -Wl,-headerpad_max_install_names -arch ppc -fstack-protector version.o DB_File.o -o ../../lib/auto/DB_File/DB_File.bundle \ -L/opt/local/lib/db48 -ldb \ ld: -rpath can only be used when targeting Mac OS X 10.5 or later collect2: ld returned 1 exit status make[1]: *** [../../lib/auto/DB_File/DB_File.bundle] Error 1 make[1]: Leaving directory `/opt/local/var/macports/build/_opt_local_var_macports_sources_nue.de.rsync.macports.org_macports_release_tarballs_ports_lang_perl5/perl5.38/work/perl-5.38.2/cpan/DB_File' make[1]: Entering directory `/opt/local/var/macports/build/_opt_local_var_macports_sources_nue.de.rsync.macports.org_macports_release_tarballs_ports_lang_perl5/perl5.38/work/perl-5.38.2/cpan/DB_File' /opt/local/var/macports/build/_opt_local_var_macports_sources_nue.de.rsync.macports.org_macports_release_tarballs_ports_lang_perl5/perl5.38/work/perl-5.38.2/cpan/DB_File/../../miniperl "-I../../lib" -MExtUtils::Command::MM -e 'cp_nonempty' -- DB_File.bs ../../lib/auto/DB_File/DB_File.bs 644 rm -f ../../lib/auto/DB_File/DB_File.bundle LD_RUN_PATH="/opt/local/lib/db48" env MACOSX_DEPLOYMENT_TARGET=10.3 /usr/bin/gcc-4.2 -Wl,-rpath,"/opt/local/lib/db48" -bundle -undefined dynamic_lookup -L/opt/local/lib -Wl,-headerpad_max_install_names -arch ppc -fstack-protector version.o DB_File.o -o ../../lib/auto/DB_File/DB_File.bundle \ -L/opt/local/lib/db48 -ldb \ ld: -rpath can only be used when targeting Mac OS X 10.5 or later collect2: ld returned 1 exit status make[1]: *** [../../lib/auto/DB_File/DB_File.bundle] Error 1 make[1]: Leaving directory `/opt/local/var/macports/build/_opt_local_var_macports_sources_nue.de.rsync.macports.org_macports_release_tarballs_ports_lang_perl5/perl5.38/work/perl-5.38.2/cpan/DB_File' Unsuccessful make(cpan/DB_File): code=512 at make_ext.pl line 584. make: *** [lib/auto/DB_File/DB_File.bundle] Error 25 make: Leaving directory `/opt/local/var/macports/build/_opt_local_var_macports_sources_nue.de.rsync.macports.org_macports_release_tarballs_ports_lang_perl5/perl5.38/work/perl-5.38.2' Command failed: cd "/opt/local/var/macports/build/_opt_local_var_macports_sources_nue.de.rsync.macports.org_macports_release_tarballs_ports_lang_perl5/perl5.38/work/perl-5.38.2" && /usr/bin/make -w all Exit code: 2 Error: Failed to build perl5.38: command execution failed
Attachments (1)
Change History (12)
Changed 23 months ago by ballapete (Peter "Pete" Dyballa)
comment:1 Changed 23 months ago by ryandesign (Ryan Carsten Schmidt)
As the message says, -rpath works when targeting 10.5 or later.
The bug is that perl is overriding MacPorts' request to target 10.5:
:debug:configure MACOSX_DEPLOYMENT_TARGET='10.5'
and is instead targeting 10.3:
:info:configure What command should be used to create dynamic libraries? [env MACOSX_DEPLOYMENT_TARGET=10.3 /usr/bin/gcc-4.2]
comment:2 Changed 23 months ago by ryandesign (Ryan Carsten Schmidt)
This happens in hints/darwin.sh only on Mac OS X 10.3 thru 10.5:
[7-9].*) # OS X 10.3.x - 10.5.x lddlflags="${ldflags} -bundle -undefined dynamic_lookup" case "$ld" in *MACOSX_DEPLOYMENT_TARGET*) ;; *) ld="env MACOSX_DEPLOYMENT_TARGET=10.3 ${ld}" ;; esac ;;
comment:3 follow-up: 7 Changed 23 months ago by ballapete (Peter "Pete" Dyballa)
There is a patch file, /opt/local/var/macports/sources/nue.de.rsync.macports.org/macports/release/tarballs/ports/lang/perl5/files/5.38/avoid-no-cpp-precomp-PR38913.patch:
1 --- hints/darwin.sh.orig
2 +++ hints/darwin.sh
3 @@ -130,7 +130,7 @@ esac
4
5 # Avoid Apple's cpp precompiler, better for extensions
6 if [ "X`echo | ${cc} -no-cpp-precomp -E - 2>&1 >/dev/null`" = "X" ]; then
7 - cppflags="${cppflags} -no-cpp-precomp"
8 +
9
10 # This is necessary because perl's build system doesn't
11 # apply cppflags to cc compile lines as it should.
So it would need an enhancement?
comment:4 Changed 22 months ago by kencu (Ken)
comment:5 Changed 22 months ago by kencu (Ken)
see also #71142 which barks up the rpath tree part of this issue
comment:6 follow-up: 9 Changed 22 months ago by ballapete (Peter "Pete" Dyballa)
These two blocks mentioned above do not change from Perl 5.34 to 5.36 to 5.38 on Tiger. I'll try the patch here, on Tiger, and see whether 5.34 and 5.38, that built here but failed to test, would perform better.
comment:7 Changed 22 months ago by ballapete (Peter "Pete" Dyballa)
Replying to ballapete:
There is a
patch file, /opt/local/var/macports/sources/nue.de.rsync.macports.org/macports/release/tarballs/ports/lang/perl5/files/5.38/avoid-no-cpp-precomp-PR38913.patch:
This patch already exists since years:
root 239 /\ l /opt/local/var/macports/sources/nue.de.rsync.macports.org/macports/release/tarballs/ports/lang/perl5/files/5.*/avoid-no-cpp-precomp-PR38913.patch -rw-r--r-- 1 polkitus x11 368 17 Nov 2020 /opt/local/var/macports/sources/nue.de.rsync.macports.org/macports/release/tarballs/ports/lang/perl5/files/5.16/avoid-no-cpp-precomp-PR38913.patch -rw-r--r-- 1 polkitus x11 368 17 Nov 2020 /opt/local/var/macports/sources/nue.de.rsync.macports.org/macports/release/tarballs/ports/lang/perl5/files/5.18/avoid-no-cpp-precomp-PR38913.patch -rw-r--r-- 1 polkitus x11 368 17 Nov 2020 /opt/local/var/macports/sources/nue.de.rsync.macports.org/macports/release/tarballs/ports/lang/perl5/files/5.20/avoid-no-cpp-precomp-PR38913.patch -rw-r--r-- 1 polkitus x11 368 17 Nov 2020 /opt/local/var/macports/sources/nue.de.rsync.macports.org/macports/release/tarballs/ports/lang/perl5/files/5.22/avoid-no-cpp-precomp-PR38913.patch -rw-r--r-- 1 polkitus x11 368 17 Nov 2020 /opt/local/var/macports/sources/nue.de.rsync.macports.org/macports/release/tarballs/ports/lang/perl5/files/5.24/avoid-no-cpp-precomp-PR38913.patch -rw-r--r-- 1 polkitus x11 368 17 Nov 2020 /opt/local/var/macports/sources/nue.de.rsync.macports.org/macports/release/tarballs/ports/lang/perl5/files/5.26/avoid-no-cpp-precomp-PR38913.patch -rw-r--r-- 1 polkitus x11 368 17 Nov 2020 /opt/local/var/macports/sources/nue.de.rsync.macports.org/macports/release/tarballs/ports/lang/perl5/files/5.28/avoid-no-cpp-precomp-PR38913.patch -rw-r--r-- 1 polkitus x11 368 17 Nov 2020 /opt/local/var/macports/sources/nue.de.rsync.macports.org/macports/release/tarballs/ports/lang/perl5/files/5.30/avoid-no-cpp-precomp-PR38913.patch -rw-r--r-- 1 polkitus x11 368 6 Dez 2020 /opt/local/var/macports/sources/nue.de.rsync.macports.org/macports/release/tarballs/ports/lang/perl5/files/5.32/avoid-no-cpp-precomp-PR38913.patch -rw-r--r-- 1 polkitus x11 368 1 Jul 2021 /opt/local/var/macports/sources/nue.de.rsync.macports.org/macports/release/tarballs/ports/lang/perl5/files/5.34/avoid-no-cpp-precomp-PR38913.patch -rw-r--r-- 1 polkitus x11 368 11 Jul 2022 /opt/local/var/macports/sources/nue.de.rsync.macports.org/macports/release/tarballs/ports/lang/perl5/files/5.36/avoid-no-cpp-precomp-PR38913.patch -rw-r--r-- 1 polkitus x11 368 22 Mai 14:38 /opt/local/var/macports/sources/nue.de.rsync.macports.org/macports/release/tarballs/ports/lang/perl5/files/5.38/avoid-no-cpp-precomp-PR38913.patch
And it gets used:
root 241 /\ ggrep -n PR38913 /opt/local/var/macports/logs/_opt_local_var_macports_sources_nue.de.rsync.macports.org_macports_release_tarballs_ports_lang_perl5/*/main.log ..._ports_lang_perl5/perl5.34/main.log:342::info:patch ---> Applying avoid-no-cpp-precomp-PR38913.patch ..._ports_lang_perl5/perl5.34/main.log:351::info:patch Executing: cd "..._perl5/perl5.34/work/perl-5.34.3" && /usr/bin/patch -t -N -p0 < '.../ports/lang/perl5/files/5.34/avoid-no-cpp-precomp-PR38913.patch' ..._ports_lang_perl5/perl5.34/main.log:352::debug:patch system: cd "..._perl5/perl5.34/work/perl-5.34.3" && /usr/bin/patch -t -N -p0 < '.../ports/lang/perl5/files/5.34/avoid-no-cpp-precomp-PR38913.patch' ..._ports_lang_perl5/perl5.36/main.log:360::info:patch ---> Applying avoid-no-cpp-precomp-PR38913.patch ..._ports_lang_perl5/perl5.36/main.log:369::info:patch Executing: cd "..._perl5/perl5.36/work/perl-5.36.3" && /usr/bin/patch -t -N -p0 < '.../ports/lang/perl5/files/5.36/avoid-no-cpp-precomp-PR38913.patch' ..._ports_lang_perl5/perl5.36/main.log:370::debug:patch system: cd "..._perl5/perl5.36/work/perl-5.36.3" && /usr/bin/patch -t -N -p0 < '.../ports/lang/perl5/files/5.36/avoid-no-cpp-precomp-PR38913.patch' ..._ports_lang_perl5/perl5.38/main.log:344::info:patch ---> Applying avoid-no-cpp-precomp-PR38913.patch ..._ports_lang_perl5/perl5.38/main.log:353::info:patch Executing: cd "..._perl5/perl5.38/work/perl-5.38.2" && /usr/bin/patch -t -N -p0 < '.../ports/lang/perl5/files/5.38/avoid-no-cpp-precomp-PR38913.patch' ..._ports_lang_perl5/perl5.38/main.log:354::debug:patch system: cd "..._perl5/perl5.38/work/perl-5.38.2" && /usr/bin/patch -t -N -p0 < '.../ports/lang/perl5/files/5.38/avoid-no-cpp-precomp-PR38913.patch'
Re-applying would produce a build failure only…
comment:8 Changed 22 months ago by ballapete (Peter "Pete" Dyballa)
And similarly on Leopard:
root 244 /\ ggrep -n PR38913 /Volumes/Leopard/opt/local/var/macports/logs/_opt_local_var_macports_sources_nue.de.rsync.macports.org_macports_release_tarballs_ports_lang_perl5/*/main.log /Volumes/Leopard/..._ports_lang_perl5/perl5.34/main.log:217::info:patch ---> Applying avoid-no-cpp-precomp-PR38913.patch /Volumes/Leopard/..._ports_lang_perl5/perl5.34/main.log:226::info:patch Executing: cd "..._perl5/perl5.34/work/perl-5.34.3" && /usr/bin/patch -t -N -p0 < '.../ports/lang/perl5/files/5.34/avoid-no-cpp-precomp-PR38913.patch' /Volumes/Leopard/..._ports_lang_perl5/perl5.34/main.log:227::debug:patch system: cd "..._perl5/perl5.34/work/perl-5.34.3" && /usr/bin/patch -t -N -p0 < '.../ports/lang/perl5/files/5.34/avoid-no-cpp-precomp-PR38913.patch' /Volumes/Leopard/..._ports_lang_perl5/perl5.38/main.log:688::info:patch ---> Applying avoid-no-cpp-precomp-PR38913.patch /Volumes/Leopard/..._ports_lang_perl5/perl5.38/main.log:697::info:patch Executing: cd "..._perl5/perl5.38/work/perl-5.38.2" && /usr/bin/patch -t -N -p0 < '.../ports/lang/perl5/files/5.38/avoid-no-cpp-precomp-PR38913.patch' /Volumes/Leopard/..._ports_lang_perl5/perl5.38/main.log:698::debug:patch system: cd "..._perl5/perl5.38/work/perl-5.38.2" && /usr/bin/patch -t -N -p0 < '.../ports/lang/perl5/files/5.38/avoid-no-cpp-precomp-PR38913.patch'
comment:9 Changed 22 months ago by ryandesign (Ryan Carsten Schmidt)
Replying to ballapete:
These two blocks mentioned above do not change from Perl 5.34 to 5.36 to 5.38 on Tiger.
We know this. It is the combination of two issues -- erroneously using -rpath and erroneously setting the deployment target -- that cause the build failure on Tiger. Fixing either issue will fix the build failure but both issues should be fixed in all of the perl versions affected by each issue.
Replying to ballapete:
Replying to ballapete:
There is a
patch file, /opt/local/var/macports/sources/nue.de.rsync.macports.org/macports/release/tarballs/ports/lang/perl5/files/5.38/avoid-no-cpp-precomp-PR38913.patch:This patch already exists since years:
And as you can see by looking at its contents it has nothing to do with the issue being discussed here. Yes, it patches the file hints/darwin.sh, but to fix an unrelated problem.
comment:10 Changed 22 months ago by kencu (Ken)
| Owner: | set to kencu |
|---|---|
| Resolution: | → fixed |
| Status: | new → closed |
comment:11 Changed 22 months ago by ryandesign (Ryan Carsten Schmidt)
In the PR Ken said:
it would be nice to know for sure why perl overrode the deployment tatget on these older systems in the first place.
It was added to perl in 2003 to support Mac OS X 10.3 Panther. When available, they wanted to use the two-level namespace with dynamic lookup of undefined symbols; they added the -undefined dynamic_lookup flags in the same commit. Although the two-level namespace had been introduced in Mac OS X 10.2 Jaguar, dynamic lookup of undefined symbols was a new feature of the two-level namespace in 10.3. You had to use the 10.3 or later deployment target to have access to that feature. Recall that on Mac OS X 10.1 through 10.4 inclusive on PowerPC systems, the default deployment target is 10.1. (On PowerPC systems running 10.5 and later and on all Intel and Apple Silicon systems, the default deployment target is the major OS version.)
Upstream "fixed" it differently, by only forcing the deployment target to 10.3 when building on 10.3 and 10.4 and no longer doing so on 10.5. The fix we used is better for us; we don't want the deployment target MacPorts sets to be subverted on any OS version.
We still need to apply the fix to the perl ports other than perl5.36 and perl5.38.

Main.log from PPC Leopard, Mac OS X 10.5.8