Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: NixOS/nixpkgs
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: cf64230d42ba
Choose a base ref
...
head repository: NixOS/nixpkgs
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: 9f5d38e751fa
Choose a head ref
  • 2 commits
  • 1 file changed
  • 2 contributors

Commits on Mar 19, 2020

  1. GCC: fix compilation on MacOS 10.15

    MacOS 10.15 now includes "aligned_alloc".  Disagreement between the
    headers and the binaries about whether aligned_alloc exists leads to
    a compilation failure (see #73319 and the detailed comment in this
    commit).
    Calvin-L committed Mar 19, 2020
    Copy the full SHA
    3a79681 View commit details

Commits on Jul 23, 2020

  1. Merge pull request #82921 from Calvin-L/fix-gcc-on-catalina

    Fix GCC compilation on MacOS 10.15
    Mic92 authored Jul 23, 2020
    Copy the full SHA
    9f5d38e View commit details
Showing with 32 additions and 0 deletions.
  1. +32 −0 pkgs/development/compilers/gcc/common/pre-configure.nix
32 changes: 32 additions & 0 deletions pkgs/development/compilers/gcc/common/pre-configure.nix
Original file line number Diff line number Diff line change
@@ -17,3 +17,35 @@ lib.optionalString (hostPlatform.isSunOS && hostPlatform.is64bit) ''
'' + lib.optionalString langAda ''
export PATH=${gnatboot}/bin:$PATH
''

# NOTE 2020/3/18: This environment variable prevents configure scripts from
# detecting the presence of aligned_alloc on Darwin. There are many facts that
# collectively make this fix necessary:
# - Nix uses a fixed set of standard library headers on all MacOS systems,
# regardless of their actual version. (Nix uses version 10.12 headers.)
# - Nix uses the native standard library binaries for the build system. That
# means the standard library binaries may not exactly match the standard
# library headers.
# - The aligned_alloc procedure is present in MacOS 10.15 (Catalina), but not
# in earlier versions. Therefore on Catalina systems, aligned_alloc is
# linkable (i.e. present in the binary libraries) but not present in the
# headers.
# - Configure scripts detect a procedure's existence by checking whether it is
# linkable. They do not check whether it is present in the headers.
# - GCC throws an error during compilation because aligned_alloc is not
# defined in the headers---even though the linker can see it.
#
# This fix would not be necessary if ANY of the above were false:
# - If Nix used native headers for each different MacOS version, aligned_alloc
# would be in the headers on Catalina.
# - If Nix used the same libary binaries for each MacOS version, aligned_alloc
# would not be in the library binaries.
# - If Catalina did not include aligned_alloc, this wouldn't be a problem.
# - If the configure scripts looked for header presence as well as
# linkability, they would see that aligned_alloc is missing.
# - If GCC allowed implicit declaration of symbols, it would not fail during
# compilation even if the configure scripts did not check header presence.
#
+ lib.optionalString (hostPlatform.isDarwin) ''
export ac_cv_func_aligned_alloc=no
''