Unverified Commit ec40b045 authored by Randy Eckenrode's avatar Randy Eckenrode
Browse files

darwin.libunwind: improve compatibility with libunwind

Darwin uses the system unwinder, which is based on the LLVM unwinder.
While it’s mostly API-compatible with libunwind, some packages expect to
find it using `pkg-config`. This package provides a compatible file to
allow those packages to use the system unwinder on Darwin.
parent 7b23be1a
Loading
Loading
Loading
Loading
+28 −0
Original line number Diff line number Diff line
{
  lib,
  apple-sdk,
  stdenvNoCC,
}:

stdenvNoCC.mkDerivation (finalAttrs: {
  pname = "libunwind";
  inherit (apple-sdk) version;

  # No `-lunwind` is provided becuase you get it automatically from linking with libSystem.
  # It’s also not possible to link libunwind directly, otherwise. Darwin requires going through libSystem.
  buildCommand = ''
    mkdir -p "$out/lib/pkgconfig"
    cat <<EOF > "$out/lib/pkgconfig/libunwind.pc"
    Name: libunwind
    Description: An implementation of the HP libunwind interface
    Version: ${finalAttrs.version}
    EOF
  '';

  meta = {
    description = "Compatibility package for libunwind on Darwin";
    maintainers = lib.teams.darwin.members;
    platforms = lib.platforms.darwin;
    pkgConfigModules = [ "libunwind" ];
  };
})
+2 −0
Original line number Diff line number Diff line
@@ -169,6 +169,8 @@ impure-cmds // appleSourcePackages // stubs // {
    propagatedBuildInputs = [ pkgs.darwin.print-reexports ];
  } ../os-specific/darwin/print-reexports/setup-hook.sh;

  libunwind = callPackage ../os-specific/darwin/libunwind { };

  sigtool = callPackage ../os-specific/darwin/sigtool { };

  signingUtils = callPackage ../os-specific/darwin/signing-utils { };