summary refs log tree commit diff
path: root/pkgs/os-specific/darwin/apple-source-releases/CF/default.nix
blob: 3d4ac89e0a7e27107394a08307356cf35129208f (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
{ stdenv, appleDerivation, icu, dyld, libdispatch, launchd, libclosure }:

appleDerivation {
  buildInputs = [ dyld icu libdispatch launchd libclosure ];

  patches = [ ./add-cf-initialize.patch ./add-cfmachport.patch ];

  preBuild = ''
    substituteInPlace Makefile \
      --replace "/usr/bin/clang" "clang" \
      --replace "-arch i386 " "" \
      --replace "/usr/bin/" "" \
      --replace "/usr/sbin/" "" \
      --replace "/bin/" "" \
      --replace "INSTALLNAME=/System" "INSTALLNAME=$out" \
      --replace "install_name_tool -id /System" "install_name_tool -id $out" \
      --replace "-licucore.A" "-licui18n -licuuc" \
      --replace 'chown -RH -f root:wheel $(DSTBASE)/CoreFoundation.framework' "" \
      --replace 'chmod -RH' 'chmod -R'

    replacement=''$'#define __PTK_FRAMEWORK_COREFOUNDATION_KEY5 55\n#define _pthread_getspecific_direct(key) pthread_getspecific((key))\n#define _pthread_setspecific_direct(key, val) pthread_setspecific((key), (val))'

    substituteInPlace CFPlatform.c --replace "#include <pthread/tsd_private.h>" "$replacement"

    substituteInPlace CFRunLoop.c --replace "#include <pthread/private.h>" ""

    substituteInPlace CFURLPriv.h \
      --replace "#include <CoreFoundation/CFFileSecurity.h>" "" \
      --replace "#include <CoreFoundation/CFURLEnumerator.h>" "" \
      --replace "CFFileSecurityRef" "void *" \
      --replace "CFURLEnumeratorResult" "void *" \
      --replace "CFURLEnumeratorRef" "void *"

    export DSTROOT=$out
  '';

  postInstall = ''
    mv $out/System/* $out
    rmdir $out/System
  '';
}