LLVM 11 libcxxabi has some flags to support usage in the Darwin stdenv,
in particular, `standalone` and `withLibunwind`.
Darwin stdenv needs the `standalone` flag because its `hostPlatform` set
doesn't have `useLLVM` set to true. And it needs `withLibunwind` to
explicitly disable including `libunwind` as a build input.
We also prefix `install_name_tool` in case we're cross-compiling.
LLVM 11 libcxxabi has some flags to support usage in the Darwin stdenv,
in particular, `standalone` and `withLibunwind`.
Darwin stdenv needs the `standalone` flag because its `hostPlatform` set
doesn't have `useLLVM` set to true. And it needs `withLibunwind` to
explicitly disable including `libunwind` as a build input.
We also prefix `install_name_tool` in case we're cross-compiling.
The original problem with the normalization of the filename only
occurred because it was in NFC. However, when trying to fix it by
`mv`ing the file to a normalization-indifferent name, I used the NFD
normalized name from my file system. This means it only works on
normalizing file systems. The filename must be in the original encoding
and will be normalized by normalizing file systems like HFS+.
The original problem with the normalization of the filename only
occurred because it was in NFC. However, when trying to fix it by
`mv`ing the file to a normalization-indifferent name, I used the NFD
normalized name from my file system. This means it only works on
normalizing file systems. The filename must be in the original encoding
and will be normalized by normalizing file systems like HFS+.
The build was falling back on impure paths because pkg-config was
missing. This caused a mismatch between headers picked up at
compile-time and run-time, specifically `ffi.h` from libffi and then one
in `/usr/include/ffi` on macOS.
The hash has changed because of the renamed file but will no longer vary
depending on whether the filesystem where it is calculated is
case-sensitive or not.
The x86_64 and aarch64 SDK attributes are named differently and don't
have the same contents. This was the motivation to try dropping the SDK
dependency altogether, relying only on the Libc and some frameworks.
One file in the testdata has a name with accented unicode characters
that can be encoded differently depending on normalization. This causes
Nix to calculate a different hash for the tarball output depending on
whether or not and which unicode normal form the filesystem uses.
This is worked around by renaming the file to consist of unicode
characters that are unaffected by normalization. The file is renamed and
the test patched in the `extraPostFetch` phase of the the fetcher.
Including `TargetConditionals.h` had knock-on effects, breaking the zlib
build because `TARGET_OS_MAC` gets defined, for instance.
Defining `TARGET_OS_EMBEDDED` to be `0` if it's not defined is simpler
and maintains the default behavior so it shouldn't break any dependents.
Qt Base is built with LLVM 5 on Darwin. LLVM 11 causes problems for
WebEngine because of the "version" includes in libc++abi. LLVM 7 would
work but since parts are built with LLVM 5 anyway it seemed like a more
straightforward option.