summary refs log tree commit diff
path: root/pkgs/os-specific
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/os-specific')
-rw-r--r--pkgs/os-specific/darwin/cctools-port/default.nix64
-rw-r--r--pkgs/os-specific/darwin/cctools-port/ld-ignore-rpath-link.patch16
-rw-r--r--pkgs/os-specific/darwin/cctools-port/ld-rpath-nonfinal.patch31
-rw-r--r--pkgs/os-specific/darwin/maloader/default.nix36
-rw-r--r--pkgs/os-specific/darwin/opencflite/default.nix21
-rw-r--r--pkgs/os-specific/darwin/xcode/default.nix52
-rw-r--r--pkgs/os-specific/darwin/xcode/gcc-fix-enum-attributes.patch13
-rw-r--r--pkgs/os-specific/windows/mingw-w64/default.nix28
8 files changed, 247 insertions, 14 deletions
diff --git a/pkgs/os-specific/darwin/cctools-port/default.nix b/pkgs/os-specific/darwin/cctools-port/default.nix
new file mode 100644
index 000000000000..cdc259c1e2a0
--- /dev/null
+++ b/pkgs/os-specific/darwin/cctools-port/default.nix
@@ -0,0 +1,64 @@
+{ stdenv, cross, fetchurl, autoconf, automake, libtool
+, libcxx, llvm, clang, openssl, libuuid
+, maloader, makeWrapper, xctoolchain
+}:
+
+stdenv.mkDerivation rec {
+  name = "cctools-port-${version}";
+  version = "845";
+
+  src = fetchurl {
+    url = "https://github.com/tpoechtrager/cctools-port/archive/"
+        + "cctools-${version}-ld64-136-1.tar.gz";
+    sha256 = "06pg6h1g8avgx4j6cfykdpggf490li796gzhhyqn27jsagli307i";
+  };
+
+  buildInputs = [
+    autoconf automake libtool libcxx llvm clang openssl libuuid makeWrapper
+  ];
+
+  patches = [ ./ld-rpath-nonfinal.patch ./ld-ignore-rpath-link.patch ];
+
+  enableParallelBuilding = true;
+
+  postPatch = ''
+    patchShebangs tools
+    sed -i -e 's/which/type -P/' tools/*.sh
+    sed -i -e 's|clang++|& -I${libcxx}/include/c++/v1|' cctools/autogen.sh
+
+    # Workaround for https://www.sourceware.org/bugzilla/show_bug.cgi?id=11157
+    cat > cctools/include/unistd.h <<EOF
+    #ifdef __block
+    #  undef __block
+    #  include_next "unistd.h"
+    #  define __block __attribute__((__blocks__(byref)))
+    #else
+    #  include_next "unistd.h"
+    #endif
+    EOF
+  '';
+
+  preConfigure = ''
+    cd cctools
+    sh autogen.sh
+  '';
+
+  configureFlags = [
+    "CXXFLAGS=-I${libcxx}/include/c++/v1"
+    "--target=${cross.config}"
+  ];
+
+  postInstall = ''
+    for tool in dyldinfo dwarfdump dsymutil; do
+      makeWrapper "${maloader}/bin/ld-mac" "$out/bin/${cross.config}-$tool" \
+        --add-flags "${xctoolchain}/bin/$tool"
+      ln -s "$out/bin/${cross.config}-$tool" "$out/bin/$tool"
+    done
+  '';
+
+  meta = {
+    homepage = "http://www.opensource.apple.com/source/cctools/";
+    description = "Mac OS X Compiler Tools (cross-platform port)";
+    license = stdenv.lib.licenses.apsl20;
+  };
+}
diff --git a/pkgs/os-specific/darwin/cctools-port/ld-ignore-rpath-link.patch b/pkgs/os-specific/darwin/cctools-port/ld-ignore-rpath-link.patch
new file mode 100644
index 000000000000..fc87f69ac32d
--- /dev/null
+++ b/pkgs/os-specific/darwin/cctools-port/ld-ignore-rpath-link.patch
@@ -0,0 +1,16 @@
+diff --git a/cctools/ld64/src/ld/Options.cpp b/cctools/ld64/src/ld/Options.cpp
+index 2565518..9250016 100644
+--- a/cctools/ld64/src/ld/Options.cpp
++++ b/cctools/ld64/src/ld/Options.cpp
+@@ -2522,6 +2522,11 @@ void Options::parse(int argc, const char* argv[])
+ 					throw "missing argument to -rpath";
+ 				fRPaths.push_back(path);
+ 			}
++			else if ( strcmp(arg, "-rpath-link") == 0 ) {
++				const char* path = argv[++i];
++				if ( path == NULL )
++					throw "missing argument to -rpath-link";
++			}
+ 			else if ( strcmp(arg, "-read_only_stubs") == 0 ) {
+ 				fReadOnlyx86Stubs = true;
+ 			}
diff --git a/pkgs/os-specific/darwin/cctools-port/ld-rpath-nonfinal.patch b/pkgs/os-specific/darwin/cctools-port/ld-rpath-nonfinal.patch
new file mode 100644
index 000000000000..265d0d304771
--- /dev/null
+++ b/pkgs/os-specific/darwin/cctools-port/ld-rpath-nonfinal.patch
@@ -0,0 +1,31 @@
+diff --git a/cctools/ld64/src/ld/Options.cpp b/cctools/ld64/src/ld/Options.cpp
+index 9250016..91d54ec 100644
+--- a/cctools/ld64/src/ld/Options.cpp
++++ b/cctools/ld64/src/ld/Options.cpp
+@@ -4175,23 +4175,9 @@ void Options::checkIllegalOptionCombinations()
+ 		throw "-r and -dead_strip cannot be used together";
+ 
+ 	// can't use -rpath unless targeting 10.5 or later
+-	if ( fRPaths.size() > 0 ) {
+-		if ( !minOS(ld::mac10_5, ld::iOS_2_0) )
+-			throw "-rpath can only be used when targeting Mac OS X 10.5 or later";
+-		switch ( fOutputKind ) {
+-			case Options::kDynamicExecutable:
+-			case Options::kDynamicLibrary:
+-			case Options::kDynamicBundle:
+-				break;
+-			case Options::kStaticExecutable:
+-			case Options::kObjectFile:
+-			case Options::kDyld:
+-			case Options::kPreload:
+-			case Options::kKextBundle:
+-				throw "-rpath can only be used when creating a dynamic final linked image";
+-		}
+-	}
+-	
++	if ( fRPaths.size() > 0 && !minOS(ld::mac10_5, ld::iOS_2_0) )
++		throw "-rpath can only be used when targeting Mac OS X 10.5 or later";
++
+ 	if ( fPositionIndependentExecutable ) {
+ 		switch ( fOutputKind ) {
+ 			case Options::kDynamicExecutable:
diff --git a/pkgs/os-specific/darwin/maloader/default.nix b/pkgs/os-specific/darwin/maloader/default.nix
new file mode 100644
index 000000000000..f5bfe890735c
--- /dev/null
+++ b/pkgs/os-specific/darwin/maloader/default.nix
@@ -0,0 +1,36 @@
+{ stdenv, fetchgit, opencflite, clang, libcxx }:
+
+stdenv.mkDerivation {
+  name = "maloader-0git";
+
+  src = fetchgit {
+    url = "git://github.com/shinh/maloader.git";
+    rev = "5f220393e0b7b9ad0cf1aba0e89df2b42a1f0442";
+    sha256 = "07j9b7n0grrbxxyn2h8pnk6pa8b370wq5z5zwbds8dlhi7q37rhn";
+  };
+
+  postPatch = ''
+    sed -i \
+      -e '/if.*loadLibMac.*mypath/s|mypath|"'"$out/lib/"'"|' \
+      -e 's|libCoreFoundation\.so|${opencflite}/lib/&|' \
+      ld-mac.cc
+  '';
+
+  NIX_CFLAGS_COMPILE = "-I${libcxx}/include/c++/v1";
+  buildInputs = [ clang libcxx ];
+  buildFlags = [ "USE_LIBCXX=1" "release" ];
+
+  installPhase = ''
+    install -vD libmac.so "$out/lib/libmac.so"
+
+    for bin in extract macho2elf ld-mac; do
+      install -vD "$bin" "$out/bin/$bin"
+    done
+  '';
+
+  meta = {
+    description = "Mach-O loader for Linux";
+    homepage = "https://github.com/shinh/maloader";
+    license = stdenv.lib.licenses.bsd2;
+  };
+}
diff --git a/pkgs/os-specific/darwin/opencflite/default.nix b/pkgs/os-specific/darwin/opencflite/default.nix
new file mode 100644
index 000000000000..a2408bfc5c8a
--- /dev/null
+++ b/pkgs/os-specific/darwin/opencflite/default.nix
@@ -0,0 +1,21 @@
+{ stdenv, fetchurl, icu, libuuid, tzdata }:
+
+stdenv.mkDerivation rec {
+  name = "opencflite-${version}";
+  version = "476.19.0";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/opencflite/${name}.tar.gz";
+    sha256 = "0jgmzs0ycl930hmzcvx0ykryik56704yw62w394q1q3xw5kkjn9v";
+  };
+
+  configureFlags = [ "--with-uuid=${libuuid}" ];
+  buildInputs = [ icu tzdata.lib ];
+  enableParallelBuilding = true;
+
+  meta = {
+    description = "Cross platform port of the OS X CoreFoundation";
+    homepage = "http://sourceforge.net/projects/opencflite/";
+    license = stdenv.lib.licenses.apsl20;
+  };
+}
diff --git a/pkgs/os-specific/darwin/xcode/default.nix b/pkgs/os-specific/darwin/xcode/default.nix
new file mode 100644
index 000000000000..b80682b7550f
--- /dev/null
+++ b/pkgs/os-specific/darwin/xcode/default.nix
@@ -0,0 +1,52 @@
+{ stdenv, requireFile, xpwn }:
+
+with stdenv.lib;
+
+let
+  osxVersion = "10.9";
+in stdenv.mkDerivation rec {
+  name = "xcode-${version}";
+  version = "5.1";
+
+  src = requireFile {
+    name = "xcode_${version}.dmg";
+    url = meta.homepage;
+    sha256 = "0zkggbmsfc5w53j1ncbpayvnn1vzpyzyjjjzhawq1jjfq465bfvh";
+  };
+
+  phases = [ "unpackPhase" "patchPhase" "installPhase" "fixupPhase" ];
+  outputs = [ "out" "toolchain" ];
+
+
+  unpackCmd = let
+    basePath = "Xcode.app/Contents/Developer/Platforms/MacOSX.platform";
+    sdkPath = "${basePath}/Developer/SDKs";
+  in ''
+    ${xpwn}/bin/dmg extract "$curSrc" main.hfs > /dev/null
+    ${xpwn}/bin/hfsplus main.hfs extractall "${sdkPath}" > /dev/null
+  '';
+
+  setSourceRoot = "sourceRoot=MacOSX${osxVersion}.sdk";
+
+  patches = optional (osxVersion == "10.9") ./gcc-fix-enum-attributes.patch;
+
+  installPhase = ''
+    ensureDir "$out/share/sysroot"
+    cp -a * "$out/share/sysroot/"
+    ln -s "$out/share/sysroot/usr/lib" "$out/lib"
+    ln -s "$out/share/sysroot/usr/include" "$out/include"
+
+    ensureDir "$toolchain"
+    pushd "$toolchain"
+    ${xpwn}/bin/hfsplus "$(dirs +1)/../main.hfs" extractall \
+      Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr \
+      > /dev/null
+    popd
+  '';
+
+  meta = {
+    homepage = "https://developer.apple.com/downloads/";
+    description = "Apple's XCode SDK";
+    license = stdenv.lib.licenses.unfree;
+  };
+}
diff --git a/pkgs/os-specific/darwin/xcode/gcc-fix-enum-attributes.patch b/pkgs/os-specific/darwin/xcode/gcc-fix-enum-attributes.patch
new file mode 100644
index 000000000000..1e1895c28945
--- /dev/null
+++ b/pkgs/os-specific/darwin/xcode/gcc-fix-enum-attributes.patch
@@ -0,0 +1,13 @@
+diff --git a/System/Library/Frameworks/Foundation.framework/Headers/NSUserNotification.h b/System/Library/Frameworks/Foundation.framework/Headers/NSUserNotification.h
+index fa0c290..7da7e0c 100644
+--- a/System/Library/Frameworks/Foundation.framework/Headers/NSUserNotification.h
++++ b/System/Library/Frameworks/Foundation.framework/Headers/NSUserNotification.h
+@@ -13,7 +13,7 @@ typedef NS_ENUM(NSInteger, NSUserNotificationActivationType) {
+     NSUserNotificationActivationTypeNone = 0,
+     NSUserNotificationActivationTypeContentsClicked = 1,
+     NSUserNotificationActivationTypeActionButtonClicked = 2,
+-    NSUserNotificationActivationTypeReplied NS_AVAILABLE(10_9, NA) = 3
++    NSUserNotificationActivationTypeReplied = 3
+ } NS_ENUM_AVAILABLE(10_8, NA);
+ 
+ NS_CLASS_AVAILABLE(10_8, NA)
diff --git a/pkgs/os-specific/windows/mingw-w64/default.nix b/pkgs/os-specific/windows/mingw-w64/default.nix
index c358565c4551..bf15b208e1a7 100644
--- a/pkgs/os-specific/windows/mingw-w64/default.nix
+++ b/pkgs/os-specific/windows/mingw-w64/default.nix
@@ -1,30 +1,30 @@
-{stdenv, fetchurl, binutilsCross ? null, gccCross ? null, onlyHeaders ? false}:
+{ stdenv, fetchurl, binutilsCross ? null, gccCross ? null
+, onlyHeaders ? false
+, onlyPthreads ? false
+}:
 
 let
-  name = "mingw-w64-2.0.3";
+  name = "mingw-w64-3.1.0";
 in
 stdenv.mkDerivation (rec {
   inherit name;
 
   src = fetchurl {
-    url = "mirror://sourceforge/mingw-w64/mingw-w64-v2.0.3.tar.gz";
-    sha256 = "043jk6z90f9pxs9kfn6ckh2vlnbgcv6yfbp5ybahrj3z58dcijp5";
+    url = "mirror://sourceforge/mingw-w64/mingw-w64-v3.1.0.tar.bz2";
+    sha256 = "1lhpw381gc59w8b1r9zzdwa9cdi2wx6qx7s6rvajapmbw7ksgrzc";
   };
-
-  # I don't know what's that $host directory about, I put the
-  # files inside include as usual.
-  postInstall = ''
-    rmdir $out/include
-    mv $out/x86_64-w64-mingw32/* $out
-    rm -R $out/x86_64-w64-mingw32
-  '';
 } //
 (if onlyHeaders then {
   name = name + "-headers";
-  preConfingure = ''
+  preConfigure = ''
     cd mingw-w64-headers
   '';
-  configureFlags = "--without-crt --host=x86_64-w64-mingw32";
+  configureFlags = "--without-crt";
+} else if onlyPthreads then {
+  name = name + "-pthreads";
+  preConfigure = ''
+    cd mingw-w64-libraries/winpthreads
+  '';
 } else {
   buildInputs = [ gccCross binutilsCross ];