[Bug 208120] devel/cmake: Strips necessary rpath when installing any GNU compiler from ports

bugzilla-noreply at freebsd.org bugzilla-noreply at freebsd.org
Sun May 12 20:17:24 BST 2019


https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=208120

--- Comment #34 from commit-hook at freebsd.org ---
A commit references this bug:

Author: gerald
Date: Sun May 12 19:17:10 UTC 2019
New revision: 501438
URL: https://svnweb.freebsd.org/changeset/ports/501438

Log:
  Forward port r499061 | gerald | 2019-04-15 from lang/gcc8 and gcc8-devel:

    GCC has two runtime libraries:  The static library libgcc.a (-lgcc) and
    the shared library libgcc_s.so (-lgcc_s).  Both implement many of the
    same functions but they also each have their unique functions.  When
    GCC links programs and libraries there are three possibilities:

    1. gcc -static-libgcc or gcc -static: -lgcc
       => Just use libgcc.a.

    2. gcc -shared-libgcc: -lgcc_s -lgcc
       => Link with libgcc_s first, so libgcc.a is only used for its unique
          functions.

    3. gcc: -lgcc -Wl,--as-needed -lgcc_s -Wl,--no-as-needed
       => Link with libgcc.a first so libgcc_s is only used for its unique
          functions (_Unwind_* functions).

    Approach 3 is the default for gcc and it's also what clang and clang++ use;
    approach 2 is the default for gfortran, g++ and probably other front ends.

    This patch makes 3 the default for gfortran.  It significantly reduces
    the use of libgcc_s.  The _Unwind_* functions are also available in the
    old base system libgcc_s which means this reduces the need for
    -rpath /usr/local/lib/gccN in ports that depend on libraries built with
    gfortran.  Consider a dependency tree like this:

      prog -> libA -> libgcc_s (old base system libgcc_s is fine)
           -> libB -> libgcc_s (libB built with gfortran, needs new libgcc_s)

    Here prog needs to be linked with -rpath /usr/local/lib/gccN even if it's
    a normal C program compiled with clang.  Without -rpath it will fail to
    start because it loads old libgcc_s first as a dependency of libA and then
    it fails to load libB.  With this patch libB works with old base system
    libgcc_s or may not need libgcc_s at all, so prog does not need to be
    linked with -rpath.

  Do not bump PORTREVISION, since we'll shortly update to a newer snapshot,
  just need a consistent baseline when branching the new lang/gcc9 now that
  GCC 9.1 has been released.

  PR:           208120
  Submitted by: tijl

Changes:
  head/lang/gcc9-devel/files/patch-gfortran-libgcc

-- 
You are receiving this mail because:
You are the assignee for the bug.


More information about the kde-freebsd mailing list