From 889d6d11a3d93b920ea9ed63844d45f44f9f43e5 Mon Sep 17 00:00:00 2001 From: Anthony Cowley Date: Sun, 13 Mar 2016 04:18:16 -0400 Subject: [PATCH] julia: darwin compatibility Along with PR #13879, these patches let julia build and run on darwin. Using an llvm with shared library support is an idea adopted from a @pikajude comment here https://github.com/NixOS/nixpkgs/issues/10864 The libgit2 change is mechanical to pull in iconv on darwin. The frameworks are referenced by julia's build system. --- pkgs/development/compilers/julia/default.nix | 12 ++++++++++-- pkgs/development/libraries/git2/default.nix | 9 ++++++--- pkgs/top-level/all-packages.nix | 7 ++++++- 3 files changed, 22 insertions(+), 6 deletions(-) diff --git a/pkgs/development/compilers/julia/default.nix b/pkgs/development/compilers/julia/default.nix index 0eddde15a58..0c0520533bc 100644 --- a/pkgs/development/compilers/julia/default.nix +++ b/pkgs/development/compilers/julia/default.nix @@ -7,6 +7,8 @@ , curl, fftwSinglePrec, fftw, gmp, libgit2, mpfr, openlibm, openspecfun, pcre2 # linear algebra , openblas, arpack, suitesparse +# Darwin frameworks +, CoreServices, ApplicationServices }: with stdenv.lib; @@ -19,6 +21,9 @@ in let arpack = arpack_.override { inherit openblas; }; suitesparse = suitesparse_.override { inherit openblas; }; + llvmShared = if stdenv.isDarwin + then llvm.override { enableSharedLibraries = true; } + else llvm; in let @@ -68,10 +73,11 @@ stdenv.mkDerivation rec { ''; buildInputs = [ - arpack fftw fftwSinglePrec gmp libgit2 libunwind llvm mpfr + arpack fftw fftwSinglePrec gmp libgit2 libunwind llvmShared mpfr pcre2 openblas openlibm openspecfun readline suitesparse utf8proc zlib - ]; + ] ++ + stdenv.lib.optionals stdenv.isDarwin [CoreServices ApplicationServices] ; nativeBuildInputs = [ curl gfortran m4 makeWrapper patchelf perl python2 which ]; @@ -127,6 +133,8 @@ stdenv.mkDerivation rec { openspecfun pcre2 suitesparse ]; + NIX_LDFLAGS = optionalString stdenv.isDarwin "-rpath ${llvmShared}/lib"; + dontStrip = true; dontPatchELF = true; diff --git a/pkgs/development/libraries/git2/default.nix b/pkgs/development/libraries/git2/default.nix index 3c433511fc1..fb380d60cf9 100644 --- a/pkgs/development/libraries/git2/default.nix +++ b/pkgs/development/libraries/git2/default.nix @@ -1,6 +1,6 @@ -{stdenv, fetchurl, pkgconfig, cmake, zlib, python, libssh2, openssl, http-parser}: +{stdenv, fetchurl, pkgconfig, cmake, zlib, python, libssh2, openssl, http-parser, libiconv}: -stdenv.mkDerivation rec { +stdenv.mkDerivation (rec { version = "0.23.2"; name = "libgit2-${version}"; @@ -21,4 +21,7 @@ stdenv.mkDerivation rec { license = stdenv.lib.licenses.gpl2; platforms = with stdenv.lib.platforms; all; }; -} +} // stdenv.lib.optionalAttrs (!stdenv.isLinux) { + NIX_LDFLAGS = "-liconv"; + propagatedBuildInputs = [ libiconv ]; +}) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 2e86b3b5894..7efa8d25850 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -4546,6 +4546,7 @@ let julia = callPackage ../development/compilers/julia { gmp = gmp6; openblas = openblasCompat; + inherit (darwin.apple_sdk.frameworks) CoreServices ApplicationServices; }; julia-git = lowPrio (callPackage ../development/compilers/julia/git.nix { @@ -6850,7 +6851,11 @@ let gio-sharp = callPackage ../development/libraries/gio-sharp { }; - libgit2 = callPackage ../development/libraries/git2 { }; + libgit2 = callPackage ../development/libraries/git2 ( + stdenv.lib.optionalAttrs stdenv.isDarwin { + inherit (darwin) libiconv; + } + ); libgit2_0_21 = callPackage ../development/libraries/git2/0.21.nix { };