Opened 23 months ago

Closed 22 months ago

Last modified 22 months ago

#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)

main.log (191.1 KB) - added by ballapete (Peter "Pete" Dyballa) 23 months ago.
Main.log from PPC Leopard, Mac OS X 10.5.8

Download all attachments as: .zip

Change History (12)

Changed 23 months ago by ballapete (Peter "Pete" Dyballa)

Attachment: main.log added

Main.log from PPC Leopard, Mac OS X 10.5.8

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] 
Last edited 23 months ago by ryandesign (Ryan Carsten Schmidt) (previous) (diff)

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 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:5 Changed 22 months ago by kencu (Ken)

see also #71142 which barks up the rpath tree part of this issue

Last edited 22 months ago by kencu (Ken) (previous) (diff)

comment:6 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 in reply to:  3 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 in reply to:  6 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: newclosed

In e95c7254566b39c01a13a852b4aca5e64906033c/macports-ports (master):

perl5.36/perl5.38: don't override deployment target
closes: #71152
see: #71142

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.

Note: See TracTickets for help on using tickets.