diff options
author | Daiderd Jordan <daiderd@gmail.com> | 2017-07-09 10:50:24 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-07-09 10:50:24 +0200 |
commit | 5ba05aaab9adfe2cd1f701c52e85f78c471cd9b6 (patch) | |
tree | e383499c98d0ddb859fb1a08482816f98d5eb9f0 | |
parent | ad358f76513c1d9abedfaa8dc5e0d991a419fe70 (diff) | |
parent | 6db77ccef456fd2d7426fa77390f2c05ac412143 (diff) | |
download | nixlib-5ba05aaab9adfe2cd1f701c52e85f78c471cd9b6.tar nixlib-5ba05aaab9adfe2cd1f701c52e85f78c471cd9b6.tar.gz nixlib-5ba05aaab9adfe2cd1f701c52e85f78c471cd9b6.tar.bz2 nixlib-5ba05aaab9adfe2cd1f701c52e85f78c471cd9b6.tar.lz nixlib-5ba05aaab9adfe2cd1f701c52e85f78c471cd9b6.tar.xz nixlib-5ba05aaab9adfe2cd1f701c52e85f78c471cd9b6.tar.zst nixlib-5ba05aaab9adfe2cd1f701c52e85f78c471cd9b6.zip |
Merge pull request #26716 from ankhers/generalize-elixir
Generalize building of Elixir interpreter
-rw-r--r-- | lib/maintainers.nix | 1 | ||||
-rw-r--r-- | pkgs/development/beam-modules/default.nix | 22 | ||||
-rw-r--r-- | pkgs/development/beam-modules/lib.nix | 31 | ||||
-rw-r--r-- | pkgs/development/interpreters/elixir/1.3.nix | 7 | ||||
-rw-r--r-- | pkgs/development/interpreters/elixir/1.4.nix | 7 | ||||
-rw-r--r-- | pkgs/development/interpreters/elixir/1.5.nix | 7 | ||||
-rw-r--r-- | pkgs/development/interpreters/elixir/default.nix | 71 | ||||
-rw-r--r-- | pkgs/development/interpreters/elixir/generic-builder.nix | 77 | ||||
-rw-r--r-- | pkgs/top-level/all-packages.nix | 10 | ||||
-rw-r--r-- | pkgs/top-level/beam-packages.nix | 3 |
10 files changed, 149 insertions, 87 deletions
diff --git a/lib/maintainers.nix b/lib/maintainers.nix index 60f62d1a84e7..0cd4084bc27a 100644 --- a/lib/maintainers.nix +++ b/lib/maintainers.nix @@ -43,6 +43,7 @@ andrewrk = "Andrew Kelley <superjoe30@gmail.com>"; andsild = "Anders Sildnes <andsild@gmail.com>"; aneeshusa = "Aneesh Agrawal <aneeshusa@gmail.com>"; + ankhers = "Justin Wood <justin.k.wood@gmail.com>"; antono = "Antono Vasiljev <self@antono.info>"; apeschar = "Albert Peschar <albert@peschar.net>"; apeyroux = "Alexandre Peyroux <alex@px.io>"; diff --git a/pkgs/development/beam-modules/default.nix b/pkgs/development/beam-modules/default.nix index d1a2a785a9c9..f0a049bb4b23 100644 --- a/pkgs/development/beam-modules/default.nix +++ b/pkgs/development/beam-modules/default.nix @@ -16,7 +16,7 @@ let in import ./hex-packages.nix { inherit pkgs stdenv callPackage; - } // { + } // rec { inherit callPackage erlang; beamPackages = self; @@ -37,9 +37,23 @@ let buildMix = callPackage ./build-mix.nix {}; # BEAM-based languages. - elixir = if versionAtLeast (lib.getVersion erlang) "18" - then callPackage ../interpreters/elixir { debugInfo = true; } - else throw "Elixir requires at least Erlang/OTP R18."; + elixir = elixir_1_4; + + elixir_1_5_rc = lib.callElixir ../interpreters/elixir/1.5.nix { + inherit rebar erlang; + debugInfo = true; + }; + + elixir_1_4 = lib.callElixir ../interpreters/elixir/1.4.nix { + inherit rebar erlang; + debugInfo = true; + }; + + elixir_1_3 = lib.callElixir ../interpreters/elixir/1.3.nix { + inherit rebar erlang; + debugInfo = true; + }; + lfe = callPackage ../interpreters/lfe { }; # Non hex packages diff --git a/pkgs/development/beam-modules/lib.nix b/pkgs/development/beam-modules/lib.nix index 009bfb4975b6..dd4ed5e1bbf8 100644 --- a/pkgs/development/beam-modules/lib.nix +++ b/pkgs/development/beam-modules/lib.nix @@ -12,15 +12,6 @@ rec { callPackage = callPackageWith pkgs; - /* Erlang/OTP-specific version retrieval, returns 19 for OTP R19 */ - getVersion = x: - let - parse = drv: (builtins.parseDrvName drv).version; - in builtins.replaceStrings ["B" "-"] ["." "."] ( - if builtins.isString x - then parse x - else x.version or (parse x.name)); - /* Uses generic-builder to evaluate provided drv containing OTP-version specific data. @@ -43,4 +34,26 @@ rec { mkDerivation = pkgs.makeOverridable builder; }; + /* Uses generic-builder to evaluate provided drv containing Elixir version + specific data. + + drv: package containing version-specific args; + builder: generic builder for all Erlang versions; + args: arguments merged into version-specific args, used mostly to customize + dependencies; + + Arguments passed to the generic-builder are overridable. + + Please note that "mkDerivation" defined here is the one called from 1.4.nix + and similar files. + */ + callElixir = drv: args: + let + inherit (stdenv.lib) versionAtLeast; + builder = callPackage ../interpreters/elixir/generic-builder.nix args; + in + callPackage drv { + mkDerivation = pkgs.makeOverridable builder; + }; + } diff --git a/pkgs/development/interpreters/elixir/1.3.nix b/pkgs/development/interpreters/elixir/1.3.nix new file mode 100644 index 000000000000..43d48e2cf7cd --- /dev/null +++ b/pkgs/development/interpreters/elixir/1.3.nix @@ -0,0 +1,7 @@ +{ mkDerivation }: + +mkDerivation rec { + version = "1.3.4"; + sha256 = "01qqv1ghvfadcwcr5p88w8j217cgaf094pmpqllij3l0q1yg104l"; + minimumOTPVersion = "18"; +} diff --git a/pkgs/development/interpreters/elixir/1.4.nix b/pkgs/development/interpreters/elixir/1.4.nix new file mode 100644 index 000000000000..9ddd9062acd9 --- /dev/null +++ b/pkgs/development/interpreters/elixir/1.4.nix @@ -0,0 +1,7 @@ +{ mkDerivation }: + +mkDerivation rec { + version = "1.4.5"; + sha256 = "18ivcxmh5bak13k3rjy7jjzin57rgb2nffhwnqb2wl7bpi8mrarw"; + minimumOTPVersion = "18"; +} diff --git a/pkgs/development/interpreters/elixir/1.5.nix b/pkgs/development/interpreters/elixir/1.5.nix new file mode 100644 index 000000000000..d9e2e9c16c62 --- /dev/null +++ b/pkgs/development/interpreters/elixir/1.5.nix @@ -0,0 +1,7 @@ +{ mkDerivation }: + +mkDerivation rec { + version = "1.5.0-rc.0"; + sha256 = "1p0sawz86w9na56c42ivdacqxzldjb9s9cvl2isj3sy4nwsa0l0j"; + minimumOTPVersion = "18"; +} diff --git a/pkgs/development/interpreters/elixir/default.nix b/pkgs/development/interpreters/elixir/default.nix deleted file mode 100644 index 0e77b2af2524..000000000000 --- a/pkgs/development/interpreters/elixir/default.nix +++ /dev/null @@ -1,71 +0,0 @@ -{ stdenv, fetchFromGitHub, erlang, rebar, makeWrapper, coreutils, curl, bash, - debugInfo ? false }: - -stdenv.mkDerivation rec { - name = "elixir-${version}"; - version = "1.4.4"; - - src = fetchFromGitHub { - owner = "elixir-lang"; - repo = "elixir"; - rev = "v${version}"; - sha256 = "0m51cirkv1dahw4z2jlmz58cwmpy0dya88myx4wykq0v5bh1xbq8"; - }; - - buildInputs = [ erlang rebar makeWrapper ]; - - # Elixir expects that UTF-8 locale to be set (see https://github.com/elixir-lang/elixir/issues/3548). - # In other cases there is warnings during compilation. - LANG = "en_US.UTF-8"; - LC_TYPE = "en_US.UTF-8"; - - setupHook = ./setup-hook.sh; - - inherit debugInfo; - - buildFlags = if debugInfo - then "ERL_COMPILER_OPTIONS=debug_info" - else ""; - - preBuild = '' - # The build process uses ./rebar. Link it to the nixpkgs rebar - rm -v rebar - ln -s ${rebar}/bin/rebar rebar - - substituteInPlace Makefile \ - --replace "/usr/local" $out - ''; - - postFixup = '' - # Elixir binaries are shell scripts which run erl. Add some stuff - # to PATH so the scripts can run without problems. - - for f in $out/bin/*; do - b=$(basename $f) - if [ $b == "mix" ]; then continue; fi - wrapProgram $f \ - --prefix PATH ":" "${stdenv.lib.makeBinPath [ erlang coreutils curl bash ]}" \ - --set CURL_CA_BUNDLE /etc/ssl/certs/ca-certificates.crt - done - - substituteInPlace $out/bin/mix \ - --replace "/usr/bin/env elixir" "${coreutils}/bin/env elixir" - ''; - - meta = with stdenv.lib; { - homepage = "http://elixir-lang.org/"; - description = "A functional, meta-programming aware language built on top of the Erlang VM"; - - longDescription = '' - Elixir is a functional, meta-programming aware language built on - top of the Erlang VM. It is a dynamic language with flexible - syntax and macro support that leverages Erlang's abilities to - build concurrent, distributed and fault-tolerant applications - with hot code upgrades. - ''; - - license = licenses.epl10; - platforms = platforms.unix; - maintainers = with maintainers; [ the-kenny havvy couchemar ]; - }; -} diff --git a/pkgs/development/interpreters/elixir/generic-builder.nix b/pkgs/development/interpreters/elixir/generic-builder.nix new file mode 100644 index 000000000000..ff63406aea36 --- /dev/null +++ b/pkgs/development/interpreters/elixir/generic-builder.nix @@ -0,0 +1,77 @@ +{ pkgs, stdenv, fetchFromGitHub, erlang, rebar, makeWrapper, + coreutils, curl, bash, debugInfo ? false }: + +{ baseName ? "elixir" +, version +, minimumOTPVersion +, sha256 ? null +, rev ? "v${version}" +, src ? fetchFromGitHub { inherit rev sha256; owner = "elixir-lang"; repo = "elixir"; } +}: + +let + inherit (stdenv.lib) getVersion versionAtLeast; + +in + assert versionAtLeast (getVersion erlang) minimumOTPVersion; + + stdenv.mkDerivation ({ + name = "${baseName}-${version}"; + + inherit src version; + + buildInputs = [ erlang rebar makeWrapper ]; + + LANG = "en_US.UTF-8"; + LC_TYPE = "en_US.UTF-8"; + + setupHook = ./setup-hook.sh; + + inherit debugInfo; + + buildFlags = if debugInfo + then "ERL_COMPILER_OPTIONS=debug_info" + else ""; + + preBuild = '' + # The build process uses ./rebar. Link it to the nixpkgs rebar + rm -v rebar + ln -s ${rebar}/bin/rebar rebar + + substituteInPlace Makefile \ + --replace "/usr/local" $out + ''; + + postFixup = '' + # Elixir binaries are shell scripts which run erl. Add some stuff + # to PATH so the scripts can run without problems. + + for f in $out/bin/*; do + b=$(basename $f) + if [ "$b" = mix ]; then continue; fi + wrapProgram $f \ + --prefix PATH ":" "${stdenv.lib.makeBinPath [ erlang coreutils curl bash ]}" \ + --set CURL_CA_BUNDLE /etc/ssl/certs/ca-certificates.crt + done + + substituteInPlace $out/bin/mix \ + --replace "/usr/bin/env elixir" "${coreutils}/bin/env elixir" + ''; + + meta = with stdenv.lib; { + homepage = "http://elixir-lang.org/"; + description = "A functional, meta-programming aware language built on top of the Erlang VM"; + + longDescription = '' + Elixir is a functional, meta-programming aware language built on + top of the Erlang VM. It is a dynamic language with flexible + syntax and macro support that leverages Erlang's abilities to + build concurrent, distributed and fault-tolerant applications + with hot code upgrades. + ''; + + license = licenses.epl10; + platforms = platforms.unix; + maintainers = with maintainers; [ the-kenny havvy couchemar ankhers ]; + }; + }) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 9a3373a84d2b..deaaf4b2f2c1 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -6040,8 +6040,14 @@ with pkgs; inherit (beam.interpreters) erlang erlang_odbc erlang_javac erlang_odbc_javac - erlangR17 erlangR18 erlangR19 erlangR20 - erlang_basho_R16B02 elixir lfe; + elixir elixir_1_5_rc elixir_1_4 elixir_1_3 + lfe + erlangR16 erlangR16_odbc + erlang_basho_R16B02 erlang_basho_R16B02_odbc + erlangR17 erlangR17_odbc erlangR17_javac erlangR17_odbc_javac + erlangR18 erlangR18_odbc erlangR18_javac erlangR18_odbc_javac + erlangR19 erlangR19_odbc erlangR19_javac erlangR19_odbc_javac + erlangR20 erlangR20_odbc erlangR20_javac erlangR20_odbc_javac; inherit (beam.packages.erlang) rebar rebar3-open rebar3 diff --git a/pkgs/top-level/beam-packages.nix b/pkgs/top-level/beam-packages.nix index acdbea673328..8d01ad36139d 100644 --- a/pkgs/top-level/beam-packages.nix +++ b/pkgs/top-level/beam-packages.nix @@ -56,7 +56,8 @@ rec { # Other Beam languages. These are built with `beam.interpreters.erlang`. To # access for example elixir built with different version of Erlang, use # `beam.packages.erlangR19.elixir`. - elixir = packages.erlang.elixir; + inherit (packages.erlang) elixir elixir_1_5_rc elixir_1_4 elixir_1_3; + lfe = packages.erlang.lfe; }; |