From c87d4d4a19eda532fbb4a294257f124556539ebc Mon Sep 17 00:00:00 2001 From: Justin Wood Date: Mon, 10 Jul 2017 20:25:12 -0400 Subject: [PATCH 1/4] Generalize building of LFE --- pkgs/development/beam-modules/default.nix | 3 +- pkgs/development/beam-modules/lib.nix | 22 +++++++++++ pkgs/development/interpreters/lfe/1.2.nix | 6 +++ .../lfe/{default.nix => generic-builder.nix} | 39 +++++++------------ pkgs/top-level/beam-packages.nix | 2 +- 5 files changed, 44 insertions(+), 28 deletions(-) create mode 100644 pkgs/development/interpreters/lfe/1.2.nix rename pkgs/development/interpreters/lfe/{default.nix => generic-builder.nix} (68%) diff --git a/pkgs/development/beam-modules/default.nix b/pkgs/development/beam-modules/default.nix index f0a049bb4b2..b48abb34611 100644 --- a/pkgs/development/beam-modules/default.nix +++ b/pkgs/development/beam-modules/default.nix @@ -54,7 +54,8 @@ let debugInfo = true; }; - lfe = callPackage ../interpreters/lfe { }; + lfe = lfe_1_2; + lfe_1_2 = lib.callLFE ../interpreters/lfe/1.2.nix { inherit erlang buildRebar3; }; # Non hex packages hex = callPackage ./hex {}; diff --git a/pkgs/development/beam-modules/lib.nix b/pkgs/development/beam-modules/lib.nix index dd4ed5e1bbf..26d868a8e7c 100644 --- a/pkgs/development/beam-modules/lib.nix +++ b/pkgs/development/beam-modules/lib.nix @@ -56,4 +56,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.2.nix + and similar files. + */ + callLFE = drv: args: + let + inherit (stdenv.lib) versionAtLeast; + builder = callPackage ../interpreters/lfe/generic-builder.nix args; + in + callPackage drv { + mkDerivation = pkgs.makeOverridable builder; + }; + } diff --git a/pkgs/development/interpreters/lfe/1.2.nix b/pkgs/development/interpreters/lfe/1.2.nix new file mode 100644 index 00000000000..2bd1df41fb6 --- /dev/null +++ b/pkgs/development/interpreters/lfe/1.2.nix @@ -0,0 +1,6 @@ +{ mkDerivation }: + +mkDerivation { + version = "1.2.1"; + sha256 = "0j5gjlsk92y14kxgvd80q9vwyhmjkphpzadcswyjxikgahwg1avz"; +} diff --git a/pkgs/development/interpreters/lfe/default.nix b/pkgs/development/interpreters/lfe/generic-builder.nix similarity index 68% rename from pkgs/development/interpreters/lfe/default.nix rename to pkgs/development/interpreters/lfe/generic-builder.nix index cafcc4c28ee..c55872afbfb 100644 --- a/pkgs/development/interpreters/lfe/default.nix +++ b/pkgs/development/interpreters/lfe/generic-builder.nix @@ -1,33 +1,19 @@ -{ stdenv, fetchFromGitHub, erlang, makeWrapper, coreutils, bash, beamPackages }: +{ stdenv, fetchFromGitHub, erlang, makeWrapper, coreutils, bash, buildRebar3 }: -let - inherit (beamPackages) buildRebar3 buildHex; - proper = buildHex rec { - name = "proper"; - version = "1.1.1-beta"; - sha256 = "0hnkhs761yjynw9382w8wm4j3x0r7lllzavaq2kh9n7qy3zc1rdx"; +{ baseName ? "lfe" +, version +, sha256 ? null +, rev ? version +, src ? fetchFromGitHub { inherit rev sha256; owner = "rvirding"; repo = "lfe"; } +}: - configurePhase = '' - ${erlang}/bin/escript write_compile_flags include/compile_flags.hrl - ''; - }; -in -buildRebar3 rec { - name = "lfe"; - version = "1.2.1"; +buildRebar3 { + name = "${baseName}"; - src = fetchFromGitHub { - owner = "rvirding"; - repo = name; - rev = version; - sha256 = "0j5gjlsk92y14kxgvd80q9vwyhmjkphpzadcswyjxikgahwg1avz"; - }; + inherit src version; - buildInputs = [ makeWrapper ]; - beamDeps = [ proper ]; + buildInputs = [ erlang makeWrapper ]; patches = [ ./no-test-deps.patch ]; - doCheck = true; - checkTarget = "travis"; # These installPhase tricks are based on Elixir's Makefile. # TODO: Make, upload, and apply a patch. @@ -41,6 +27,7 @@ buildRebar3 rec { install -m644 _build/default/lib/lfe/ebin/* $ebindir install -m755 -d $bindir + for bin in bin/lfe{,c,doc,script}; do install -m755 $bin $bindir; done install -m755 -d $out/bin @@ -70,7 +57,7 @@ buildRebar3 rec { downloadPage = "https://github.com/rvirding/lfe/releases"; license = licenses.asl20; - maintainers = with maintainers; [ yurrriq ]; + maintainers = with maintainers; [ yurrriq ankhers ]; platforms = platforms.unix; }; } diff --git a/pkgs/top-level/beam-packages.nix b/pkgs/top-level/beam-packages.nix index 8d01ad36139..62ffaec26f3 100644 --- a/pkgs/top-level/beam-packages.nix +++ b/pkgs/top-level/beam-packages.nix @@ -58,7 +58,7 @@ rec { # `beam.packages.erlangR19.elixir`. inherit (packages.erlang) elixir elixir_1_5_rc elixir_1_4 elixir_1_3; - lfe = packages.erlang.lfe; + inherit (packages.erlang) lfe lfe_1_2; }; # Helper function to generate package set with a specific Erlang version. From cb105d35a95f0667930782d2d377418671c12331 Mon Sep 17 00:00:00 2001 From: Justin Wood Date: Tue, 11 Jul 2017 08:56:23 -0400 Subject: [PATCH 2/4] Ensure lfe 1.2 is exported at the top level --- pkgs/top-level/all-packages.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 2a91cfa3207..5726b02f448 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -6049,7 +6049,7 @@ with pkgs; inherit (beam.interpreters) erlang erlang_odbc erlang_javac erlang_odbc_javac elixir elixir_1_5_rc elixir_1_4 elixir_1_3 - lfe + lfe lfe_1_2 erlangR16 erlangR16_odbc erlang_basho_R16B02 erlang_basho_R16B02_odbc erlangR17 erlangR17_odbc erlangR17_javac erlangR17_odbc_javac From 0573610a5fbc82d54114f367bbf41b43798a1c0e Mon Sep 17 00:00:00 2001 From: Justin Wood Date: Tue, 11 Jul 2017 14:16:48 -0400 Subject: [PATCH 3/4] Make sure the LFE test suite is being run --- pkgs/development/beam-modules/default.nix | 2 +- .../interpreters/lfe/generic-builder.nix | 21 +++++++++++++++++-- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/pkgs/development/beam-modules/default.nix b/pkgs/development/beam-modules/default.nix index b48abb34611..fa748da0031 100644 --- a/pkgs/development/beam-modules/default.nix +++ b/pkgs/development/beam-modules/default.nix @@ -55,7 +55,7 @@ let }; lfe = lfe_1_2; - lfe_1_2 = lib.callLFE ../interpreters/lfe/1.2.nix { inherit erlang buildRebar3; }; + lfe_1_2 = lib.callLFE ../interpreters/lfe/1.2.nix { inherit erlang buildRebar3 buildHex; }; # Non hex packages hex = callPackage ./hex {}; diff --git a/pkgs/development/interpreters/lfe/generic-builder.nix b/pkgs/development/interpreters/lfe/generic-builder.nix index c55872afbfb..9595337bd56 100644 --- a/pkgs/development/interpreters/lfe/generic-builder.nix +++ b/pkgs/development/interpreters/lfe/generic-builder.nix @@ -1,4 +1,4 @@ -{ stdenv, fetchFromGitHub, erlang, makeWrapper, coreutils, bash, buildRebar3 }: +{ stdenv, fetchFromGitHub, erlang, makeWrapper, coreutils, bash, buildRebar3, buildHex }: { baseName ? "lfe" , version @@ -7,13 +7,30 @@ , src ? fetchFromGitHub { inherit rev sha256; owner = "rvirding"; repo = "lfe"; } }: +let + proper = buildHex { + name = "proper"; + version = "1.1.1-beta"; + + sha256 = "0hnkhs761yjynw9382w8wm4j3x0r7lllzavaq2kh9n7qy3zc1rdx"; + + configurePhase = '' + ${erlang}/bin/escript write_compile_flags include/compile_flags.hrl + ''; + }; + +in + buildRebar3 { - name = "${baseName}"; + name = baseName; inherit src version; buildInputs = [ erlang makeWrapper ]; + beamDeps = [ proper ]; patches = [ ./no-test-deps.patch ]; + doCheck = true; + checkTarget = "travis"; # These installPhase tricks are based on Elixir's Makefile. # TODO: Make, upload, and apply a patch. From 8dc7d34942bfe6a6631967284596a3990451fbcb Mon Sep 17 00:00:00 2001 From: Justin Wood Date: Wed, 12 Jul 2017 10:01:40 -0400 Subject: [PATCH 4/4] LFE 1.2 does not support OTP 20 --- pkgs/development/interpreters/lfe/1.2.nix | 1 + pkgs/development/interpreters/lfe/generic-builder.nix | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/pkgs/development/interpreters/lfe/1.2.nix b/pkgs/development/interpreters/lfe/1.2.nix index 2bd1df41fb6..b81acdaa499 100644 --- a/pkgs/development/interpreters/lfe/1.2.nix +++ b/pkgs/development/interpreters/lfe/1.2.nix @@ -3,4 +3,5 @@ mkDerivation { version = "1.2.1"; sha256 = "0j5gjlsk92y14kxgvd80q9vwyhmjkphpzadcswyjxikgahwg1avz"; + maximumOTPVersion = "19"; } diff --git a/pkgs/development/interpreters/lfe/generic-builder.nix b/pkgs/development/interpreters/lfe/generic-builder.nix index 9595337bd56..fb034a471e7 100644 --- a/pkgs/development/interpreters/lfe/generic-builder.nix +++ b/pkgs/development/interpreters/lfe/generic-builder.nix @@ -2,12 +2,17 @@ { baseName ? "lfe" , version +, maximumOTPVersion , sha256 ? null , rev ? version , src ? fetchFromGitHub { inherit rev sha256; owner = "rvirding"; repo = "lfe"; } }: let + inherit (stdenv.lib) getVersion versionAtLeast splitString head; + + mainVersion = head (splitString "." (getVersion erlang)); + proper = buildHex { name = "proper"; version = "1.1.1-beta"; @@ -20,6 +25,7 @@ let }; in +assert versionAtLeast maximumOTPVersion mainVersion; buildRebar3 { name = baseName;