summary refs log tree commit diff
path: root/pkgs/os-specific/darwin/security-tool/default.nix
blob: f161a7a88e175a20a611785de7ba65f22fb8c612 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
{ Foundation, PCSC, Security, GSS, Kerberos, makeWrapper, apple_sdk,
fetchurl, gnustep, libobjc, libsecurity_apple_csp, libsecurity_apple_cspdl,
libsecurity_apple_file_dl, libsecurity_apple_x509_cl, libsecurity_apple_x509_tp,
libsecurity_asn1, libsecurity_cdsa_client, libsecurity_cdsa_plugin,
libsecurity_cdsa_utilities, libsecurity_cdsa_utils, libsecurity_cssm, libsecurity_filedb,
libsecurity_keychain, libsecurity_mds, libsecurity_pkcs12, libsecurity_sd_cspdl,
libsecurity_utilities, libsecurityd, osx_private_sdk, Security-framework, stdenv }:

stdenv.mkDerivation rec {
  version = "55115";
  name = "SecurityTool-${version}";

  src = fetchurl {
    url = "http://opensource.apple.com/tarballs/SecurityTool/SecurityTool-${version}.tar.gz";
    sha256 = "0apcz4vy2z5645jhrs60wj3w27mncjjqv42h5lln36g6qs2n9113";
  };

  disallowedRequisites = [ apple_sdk.sdk  ];

  patchPhase = ''
    # copied from libsecurity_generic
    cp -R ${osx_private_sdk}/include/SecurityPrivateHeaders Security

    substituteInPlace cmsutil.c --replace \
      '<CoreServices/../Frameworks/CarbonCore.framework/Headers/MacErrors.h>' \
      '"${apple_sdk.sdk.out}/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/CarbonCore.framework/Versions/A/Headers/MacErrors.h"'
    substituteInPlace createFVMaster.c --replace \
      '<CoreServices/../Frameworks/CarbonCore.framework/Headers/MacErrors.h>' \
      '"${apple_sdk.sdk.out}/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/CarbonCore.framework/Versions/A/Headers/MacErrors.h"'
  '';

  postUnpack = ''
    unpackFile ${Security.src}
    cp Security-*/utilities/src/fileIo.c SecurityTool*
    cp Security-*/utilities/src/fileIo.h SecurityTool*
  '';

  preBuild = ''
    makeFlagsArray=(-j$NIX_BUILD_CORES)
  '';

  NIX_LDFLAGS = "-no_dtrace_dof";

  makeFlags = [
    "-f ${./GNUmakefile}"
    "MAKEFILE_NAME=${./GNUmakefile}"
    "GNUSTEP_MAKEFILES=${gnustep.make}/share/GNUstep/Makefiles"
  ];

  installFlags = [
    "security_INSTALL_DIR=\$(out)/bin"
  ];

  propagatedBuildInputs = [ GSS Kerberos Security-framework PCSC Foundation ];

  __propagatedImpureHostDeps = [ "/System/Library/Keychains" ];

  buildInputs = [
    gnustep.make
    libsecurity_asn1
    libsecurity_utilities
    libsecurity_cdsa_utilities
    libobjc
    libsecurity_cdsa_client
    libsecurity_keychain
    libsecurity_cssm
    libsecurity_cdsa_utils
    libsecurity_mds
    libsecurity_cdsa_plugin
    libsecurity_apple_csp
    libsecurity_apple_cspdl
    libsecurity_apple_file_dl
    libsecurity_apple_x509_cl
    libsecurity_apple_x509_tp
    libsecurity_pkcs12
    libsecurity_sd_cspdl
    libsecurity_filedb
    libsecurityd
    makeWrapper
  ];

  NIX_CFLAGS_COMPILE = [
    "-F${Security}/Library/Frameworks"
    "-F${PCSC}/Library/Frameworks"
    "-Wno-deprecated-declarations"
  ];

  postInstall = ''
    wrapProgram $out/bin/security --set DYLD_INSERT_LIBRARIES /usr/lib/libsqlite3.dylib
  '';

  meta = with stdenv.lib; {
    description = "Command line interface to macOS keychains and Security framework";
    maintainers = with maintainers; [
      copumpkin
      joelteon
    ];
    platforms = platforms.darwin;
    license = licenses.apsl20;
  };
}