[MacPorts] #58646: libgcc @2.0_1: should not be noarch for dependents architecture compatibility checking (was: gcc8 @8.3.0_4 +universal: does not build/install universal libraries)

MacPorts noreply at macports.org
Mon Jul 22 10:07:53 UTC 2019


#58646: libgcc @2.0_1: should not be noarch for dependents architecture
compatibility checking
---------------------+--------------------
  Reporter:  Ionic   |      Owner:  (none)
      Type:  defect  |     Status:  new
  Priority:  Normal  |  Milestone:
 Component:  ports   |    Version:
Resolution:          |   Keywords:
      Port:  libgcc  |
---------------------+--------------------
Changes (by Ionic):

 * cc: MarcusCalhoun-Lopez, ken-cunningham-webuse (removed)
 * port:  gcc8 gcc9 => libgcc


Old description:

> `OpenBLAS @0.6.3_1 +universal` fails to build due to this:
> {{{
> [...]
> /opt/local/bin/gfortran-mp-8 -O3 -m128bit-long-double -Wall -frecursive
> -m32   -o sblat1 sblat1.o ../libopenblas-r1.a -lpthread -lgfortran
> -lpthread -lgfortran
> /opt/local/bin/gfortran-mp-8 -O3 -m128bit-long-double -Wall -frecursive
> -m32   -o dblat1 dblat1.o ../libopenblas-r1.a -lpthread -lgfortran
> -lpthread -lgfortran
> ld: warning: ignoring fileld : warning: ignoring file
> /opt/local/lib/gcc8//opt/local/lib/gcc8/i386i386/libgfortran.dylib, file
> was /builtlibgfortran.dylib,  filefor x86_64 which is  notwas  the built
> for x86_64 which architecture being is not linked (i386):
> /opt/local/lib/gcc8/i386/libgfortran.dylib
> ld: warning: ignoring file /opt/local/lib/gcc8/libgcc_ext.10.5.dylib,
> missing required architecture i386 in file
> /opt/local/lib/gcc8/libgcc_ext.10.5.dylib (1 slices)
> ld: warning: ignoring file /opt/local/lib/gcc8/i386/libquadmath.dylib,
> file was built for x86_64 which is not thethe architecture being linked
> (i386): /opt/local/lib/gcc8/i386/libgfortran.dylib
> ld: warning: ignoring file /opt/local/lib/gcc8/libgcc_ext.10.5.dylib,
> missing required architecture i386 in file
> /opt/local/lib/gcc8/libgcc_ext.10.5.dylib (1 slices)
> ld: warning: ignoring file /opt/local/lib/gcc8/i386/libquadmath.dylib,
> file was built for x86_64 which is not the architecture being linked
> (i386): /opt/local/lib/gcc8/i386 /libquadmath.dylib
> Undefined symbols for architecture i386:
>   "__gfortran_internal_pack", referenced from:
>       architecture being linked (i386):
> /opt/local/lib/gcc8/i386/libquadmath.dylib
> Undefined symbols for architecture i386:
>   "__gfortran_set_args", referenced from:
> [...]
> }}}
>
> The output is mangled which is probably a side-effect of `-j2`. That's
> not something that should concern us a lot.
>
> What does concern me is that linking against `libgfortran.dylib`,
> `libgcc_ext.dylib` et al fails in i386 mode, because the libraries do not
> contain the needed architecture.
>
> {{{
> $ lipo -info /opt/local/lib/gcc8/i386/libgfortran.dylib
> /opt/local/lib/gcc8/libgcc_ext.10.5.dylib
> /opt/local/lib/gcc8/i386/libquadmath.dylib
> Architectures in the fat file: /opt/local/lib/gcc8/libgcc_ext.10.5.dylib
> are: x86_64
> Non-fat file: /opt/local/lib/gcc8/i386/libgfortran.dylib is architecture:
> x86_64
> Non-fat file: /opt/local/lib/gcc8/i386/libquadmath.dylib is architecture:
> x86_64
> }}}
>
> I'm CCing the last few people to update the port because it's
> nomaintainer. Not creating a ticket against OpenBLAS, because OpenBLAS
> doesn't seem to at fault here.
>
> `gcc9` seems also to be affected:
>
> {{{
> $ lipo -info /opt/local/lib/gcc9/i386/libgfortran.dylib
> /opt/local/lib/gcc9/libgcc_ext.10.5.dylib
> /opt/local/lib/gcc9/i386/libquadmath.dylib
> Architectures in the fat file: /opt/local/lib/gcc9/libgcc_ext.10.5.dylib
> are: x86_64
> Non-fat file: /opt/local/lib/gcc9/i386/libgfortran.dylib is architecture:
> x86_64
> Non-fat file: /opt/local/lib/gcc9/i386/libquadmath.dylib is architecture:
> x86_64
> }}}
>
> I don't have gcc7 installed +universal, so can't say whether this version
> is affected.
>
> The only older GCC version that I do have installed +universal is 4.9...
> and this one is interesting:
>
> {{{
> #  lipo -info /opt/local/lib/gcc49/i386/libgfortran.dylib
> /opt/local/lib/gcc49/libgcc_ext.10.5.dylib
> /opt/local/lib/gcc49/i386/libquadmath.dylib
> Architectures in the fat file:
> /opt/local/lib/gcc49/i386/libgfortran.dylib are: x86_64 i386
> Architectures in the fat file: /opt/local/lib/gcc49/libgcc_ext.10.5.dylib
> are: x86_64
> Non-fat file: /opt/local/lib/gcc49/i386/libquadmath.dylib is
> architecture: x86_64
> }}}
>
> That doesn't look right either, but at least better regarding
> `libgfortran.dylib`.
>
> I'll attach OpenBLAS's log file just in case it might be helpful.

New description:

 `OpenBLAS @0.6.3_1 +universal` fails to build due to this:
 {{{
 [...]
 /opt/local/bin/gfortran-mp-8 -O3 -m128bit-long-double -Wall -frecursive
 -m32   -o sblat1 sblat1.o ../libopenblas-r1.a -lpthread -lgfortran
 -lpthread -lgfortran
 /opt/local/bin/gfortran-mp-8 -O3 -m128bit-long-double -Wall -frecursive
 -m32   -o dblat1 dblat1.o ../libopenblas-r1.a -lpthread -lgfortran
 -lpthread -lgfortran
 ld: warning: ignoring fileld : warning: ignoring file
 /opt/local/lib/gcc8//opt/local/lib/gcc8/i386i386/libgfortran.dylib, file
 was /builtlibgfortran.dylib,  filefor x86_64 which is  notwas  the built
 for x86_64 which architecture being is not linked (i386):
 /opt/local/lib/gcc8/i386/libgfortran.dylib
 ld: warning: ignoring file /opt/local/lib/gcc8/libgcc_ext.10.5.dylib,
 missing required architecture i386 in file
 /opt/local/lib/gcc8/libgcc_ext.10.5.dylib (1 slices)
 ld: warning: ignoring file /opt/local/lib/gcc8/i386/libquadmath.dylib,
 file was built for x86_64 which is not thethe architecture being linked
 (i386): /opt/local/lib/gcc8/i386/libgfortran.dylib
 ld: warning: ignoring file /opt/local/lib/gcc8/libgcc_ext.10.5.dylib,
 missing required architecture i386 in file
 /opt/local/lib/gcc8/libgcc_ext.10.5.dylib (1 slices)
 ld: warning: ignoring file /opt/local/lib/gcc8/i386/libquadmath.dylib,
 file was built for x86_64 which is not the architecture being linked
 (i386): /opt/local/lib/gcc8/i386 /libquadmath.dylib
 Undefined symbols for architecture i386:
   "__gfortran_internal_pack", referenced from:
       architecture being linked (i386):
 /opt/local/lib/gcc8/i386/libquadmath.dylib
 Undefined symbols for architecture i386:
   "__gfortran_set_args", referenced from:
 [...]
 }}}

 The output is mangled which is probably a side-effect of `-j2`. That's not
 something that should concern us a lot.

 What does concern me is that linking against `libgfortran.dylib`,
 `libgcc_ext.dylib` et al fails in i386 mode, because the libraries do not
 contain the needed architecture.

 {{{
 $ lipo -info /opt/local/lib/gcc8/i386/libgfortran.dylib
 /opt/local/lib/gcc8/libgcc_ext.10.5.dylib
 /opt/local/lib/gcc8/i386/libquadmath.dylib
 Architectures in the fat file: /opt/local/lib/gcc8/libgcc_ext.10.5.dylib
 are: x86_64
 Non-fat file: /opt/local/lib/gcc8/i386/libgfortran.dylib is architecture:
 x86_64
 Non-fat file: /opt/local/lib/gcc8/i386/libquadmath.dylib is architecture:
 x86_64
 }}}

 I'm CCing the last few people to update the port because it's
 nomaintainer. Not creating a ticket against OpenBLAS, because OpenBLAS
 doesn't seem to at fault here.

 As pointed out in the comments, these files are just symlinks to libraries
 installed by the `libgccX` ports. Since the `libgcc` port is noarch,
 architecture checking is disabled for it and its dependencies, which means
 that the required `libgccX` port will not be rebuilt for other arches,
 even when `OpenBLAS` would require that.

--

Comment:

 Updating original description, removing CC'd devs that haven't touched
 libgcc.


 I guess I'll push the change to libgcc soon since it's nomaintainer...
 unless Chris doesn't want to, since he essentially created the port?

-- 
Ticket URL: <https://trac.macports.org/ticket/58646#comment:27>
MacPorts <https://www.macports.org/>
Ports system for macOS


More information about the macports-tickets mailing list