summary refs log tree commit diff
path: root/pkgs
diff options
context:
space:
mode:
authorEric Merritt <eric@sunlightpayments.com>2016-06-15 07:15:06 -0700
committerEric Merritt <eric@merritt.tech>2016-06-15 07:20:01 -0700
commitb1cd08246fa51d3b018ae92f1e58a79844e44859 (patch)
tree27b0d7aab28a687d0f0d81c32204e454bc09707e /pkgs
parentde4013367349b38ca44ea59805640b76a2f01102 (diff)
downloadnixlib-b1cd08246fa51d3b018ae92f1e58a79844e44859.tar
nixlib-b1cd08246fa51d3b018ae92f1e58a79844e44859.tar.gz
nixlib-b1cd08246fa51d3b018ae92f1e58a79844e44859.tar.bz2
nixlib-b1cd08246fa51d3b018ae92f1e58a79844e44859.tar.lz
nixlib-b1cd08246fa51d3b018ae92f1e58a79844e44859.tar.xz
nixlib-b1cd08246fa51d3b018ae92f1e58a79844e44859.tar.zst
nixlib-b1cd08246fa51d3b018ae92f1e58a79844e44859.zip
beamPackages: turn on debug_info for beam packages
This allows you to turn on debug infor for all the beam packages in the
system with a single change at the top level. This is required for
debugging and dialyzer work. It also allows you to switch it on on a
package by package basis.
Diffstat (limited to 'pkgs')
-rw-r--r--pkgs/development/beam-modules/build-erlang-mk.nix7
-rw-r--r--pkgs/development/beam-modules/build-mix.nix8
-rw-r--r--pkgs/development/beam-modules/build-rebar3.nix7
-rw-r--r--pkgs/development/interpreters/elixir/default.nix2
-rw-r--r--pkgs/development/interpreters/erlang/R16.nix5
-rw-r--r--pkgs/development/interpreters/erlang/R17.nix3
-rw-r--r--pkgs/development/interpreters/erlang/R18.nix3
-rwxr-xr-xpkgs/development/tools/build-managers/rebar3/rebar3-nix-bootstrap56
8 files changed, 74 insertions, 17 deletions
diff --git a/pkgs/development/beam-modules/build-erlang-mk.nix b/pkgs/development/beam-modules/build-erlang-mk.nix
index ef966ebd04f7..110c06e6f8ad 100644
--- a/pkgs/development/beam-modules/build-erlang-mk.nix
+++ b/pkgs/development/beam-modules/build-erlang-mk.nix
@@ -1,4 +1,4 @@
-{ stdenv, writeText, erlang, perl, which, gitMinimal, wget }:
+{ stdenv, writeText, erlang, perl, which, gitMinimal, wget, lib }:
 
 { name, version
 , src
@@ -11,11 +11,14 @@
 , buildPhase ? null
 , configurePhase ? null
 , meta ? {}
+, enableDebugInfo ? false
 , ... }@attrs:
 
 with stdenv.lib;
 
 let
+  debugInfoFlag = lib.optionalString (enableDebugInfo || erlang.debugInfo) "+debug_info";
+
   shell = drv: stdenv.mkDerivation {
           name = "interactive-shell-${drv.name}";
           buildInputs = [ drv ];
@@ -55,7 +58,7 @@ let
     then ''
         runHook preBuild
 
-        make SKIP_DEPS=1
+        make SKIP_DEPS=1 ERL_OPTS="$ERL_OPTS ${debugInfoFlag}"
 
         runHook postBuild
     ''
diff --git a/pkgs/development/beam-modules/build-mix.nix b/pkgs/development/beam-modules/build-mix.nix
index 3af7ff6f92c7..9e160acf2d40 100644
--- a/pkgs/development/beam-modules/build-mix.nix
+++ b/pkgs/development/beam-modules/build-mix.nix
@@ -1,4 +1,4 @@
-{ stdenv, writeText, elixir, erlang, hexRegistrySnapshot, hex }:
+{ stdenv, writeText, elixir, erlang, hexRegistrySnapshot, hex, lib }:
 
 { name
 , version
@@ -12,11 +12,15 @@
 , buildPhase ? null
 , configurePhase ? null
 , meta ? {}
+, enableDebugInfo ? false
 , ... }@attrs:
 
 with stdenv.lib;
 
 let
+
+  debugInfoFlag = lib.optionalString (enableDebugInfo || elixir.debugInfo) "--debug-info";
+
   shell = drv: stdenv.mkDerivation {
           name = "interactive-shell-${drv.name}";
           buildInputs = [ drv ];
@@ -58,7 +62,7 @@ let
         export HEX_HOME=`pwd`
         export MIX_ENV=prod
 
-        MIX_ENV=prod mix compile --debug-info --no-deps-check
+        MIX_ENV=prod mix compile ${debugInfoFlag} --no-deps-check
 
         runHook postBuild
     ''
diff --git a/pkgs/development/beam-modules/build-rebar3.nix b/pkgs/development/beam-modules/build-rebar3.nix
index abf2d1188ddc..ac40b76a78af 100644
--- a/pkgs/development/beam-modules/build-rebar3.nix
+++ b/pkgs/development/beam-modules/build-rebar3.nix
@@ -1,5 +1,5 @@
 { stdenv, writeText, erlang, rebar3, openssl, libyaml,
-  pc, buildEnv }:
+  pc, buildEnv, lib }:
 
 { name, version
 , src
@@ -11,11 +11,14 @@
 , buildPhase ? null
 , configurePhase ? null
 , meta ? {}
+, enableDebugInfo ? false
 , ... }@attrs:
 
 with stdenv.lib;
 
 let
+  debugInfoFlag = lib.optionalString (enableDebugInfo || erlang.debugInfo) "debug-info";
+
   ownPlugins = buildPlugins ++ (if compilePorts then [pc] else []);
 
   shell = drv: stdenv.mkDerivation {
@@ -51,7 +54,7 @@ let
     configurePhase = if configurePhase == null
     then ''
       runHook preConfigure
-      ${erlang}/bin/escript ${rebar3.bootstrapper}
+      ${erlang}/bin/escript ${rebar3.bootstrapper} ${debugInfoFlag}
       runHook postConfigure
     ''
     else configurePhase;
diff --git a/pkgs/development/interpreters/elixir/default.nix b/pkgs/development/interpreters/elixir/default.nix
index b72b6e360197..5d977ea799ac 100644
--- a/pkgs/development/interpreters/elixir/default.nix
+++ b/pkgs/development/interpreters/elixir/default.nix
@@ -21,6 +21,8 @@ stdenv.mkDerivation rec {
 
   setupHook = ./setup-hook.sh;
 
+  inherit debugInfo;
+
   buildFlags = if debugInfo
    then "ERL_COMPILER_OPTIONS=debug_info"
    else "";
diff --git a/pkgs/development/interpreters/erlang/R16.nix b/pkgs/development/interpreters/erlang/R16.nix
index 6eb89bbf89be..7323fafaf97a 100644
--- a/pkgs/development/interpreters/erlang/R16.nix
+++ b/pkgs/development/interpreters/erlang/R16.nix
@@ -1,7 +1,8 @@
 { stdenv, fetchurl, perl, gnum4, ncurses, openssl
 , gnused, gawk, makeWrapper
 , odbcSupport ? false, unixODBC ? null
-, wxSupport ? false, mesa ? null, wxGTK ? null, xorg ? null }:
+, wxSupport ? false, mesa ? null, wxGTK ? null, xorg ? null
+, enableDebugInfo ? false }:
 
 assert wxSupport -> mesa != null && wxGTK != null && xorg != null;
 assert odbcSupport -> unixODBC != null;
@@ -17,6 +18,8 @@ stdenv.mkDerivation rec {
     sha256 = "1rvyfh22g1fir1i4xn7v2md868wcmhajwhfsq97v7kn5kd2m7khp";
   };
 
+  debugInfo = enableDebugInfo;
+
   buildInputs =
     [ perl gnum4 ncurses openssl makeWrapper
     ] ++ optional wxSupport [ mesa wxGTK xorg.libX11 ]
diff --git a/pkgs/development/interpreters/erlang/R17.nix b/pkgs/development/interpreters/erlang/R17.nix
index c597a44a890e..cb29341689de 100644
--- a/pkgs/development/interpreters/erlang/R17.nix
+++ b/pkgs/development/interpreters/erlang/R17.nix
@@ -5,6 +5,7 @@
 , wxSupport ? true, mesa ? null, wxGTK ? null, xorg ? null, wxmac ? null
 , javacSupport ? false, openjdk ? null
 , enableHipe ? true
+, enableDebugInfo ? false
 }:
 
 assert wxSupport -> (if stdenv.isDarwin
@@ -35,6 +36,8 @@ stdenv.mkDerivation rec {
 
   patchPhase = '' sed -i "s@/bin/rm@rm@" lib/odbc/configure erts/configure '';
 
+  debugInfo = enableDebugInfo;
+
   preConfigure = ''
     export HOME=$PWD/../
     sed -e s@/bin/pwd@pwd@g -i otp_build
diff --git a/pkgs/development/interpreters/erlang/R18.nix b/pkgs/development/interpreters/erlang/R18.nix
index 42289d2467b1..0929495ee1be 100644
--- a/pkgs/development/interpreters/erlang/R18.nix
+++ b/pkgs/development/interpreters/erlang/R18.nix
@@ -5,6 +5,7 @@
 , wxSupport ? true, mesa ? null, wxGTK ? null, xorg ? null, wxmac ? null
 , javacSupport ? false, openjdk ? null
 , enableHipe ? true
+, enableDebugInfo ? false
 }:
 
 assert wxSupport -> (if stdenv.isDarwin
@@ -33,6 +34,8 @@ stdenv.mkDerivation rec {
       ++ optional javacSupport openjdk
       ++ stdenv.lib.optionals stdenv.isDarwin [ Carbon Cocoa ];
 
+  debugInfo = enableDebugInfo;
+
   patchPhase = '' sed -i "s@/bin/rm@rm@" lib/odbc/configure erts/configure '';
 
   preConfigure = ''
diff --git a/pkgs/development/tools/build-managers/rebar3/rebar3-nix-bootstrap b/pkgs/development/tools/build-managers/rebar3/rebar3-nix-bootstrap
index 4784f2224cc9..30ff235d12cf 100755
--- a/pkgs/development/tools/build-managers/rebar3/rebar3-nix-bootstrap
+++ b/pkgs/development/tools/build-managers/rebar3/rebar3-nix-bootstrap
@@ -26,6 +26,7 @@
 
 -record(data, {version
               , registry_only = false
+              , debug_info = false
               , compile_ports
               , erl_libs
               , plugins
@@ -54,21 +55,29 @@ do_the_bootstrap(RequiredData) ->
 %% @doc
 %% Argument parsing is super simple only because we want to keep the
 %% dependencies minimal. For now there can be two entries on the
-%% command line, "registery-only"
+%% command line, "registery-only" and "debug-info"
 -spec parse_args([string()]) -> #data{}.
-parse_args(["registry-only"]) ->
-    {ok, #data{registry_only = true}};
-parse_args([]) ->
-    {ok, #data{registry_only = false}};
-parse_args(Args) ->
-    io:format("Unexpected command line arguments passed in: ~p~n", [Args]),
-    erlang:halt(120).
+parse_args(Args0) ->
+    PossibleArgs = sets:from_list(["registry-only", "debug-info"]),
+    Args1 = sets:from_list(Args0),
+    Result = sets:subtract(Args1, PossibleArgs),
+    case sets:to_list(Result) of
+        [] ->
+            {ok, #data{registry_only = sets:is_element("registry-only", Args1),
+                       debug_info = sets:is_element("debug-info", Args1)}};
+        UnknownArgs ->
+            io:format("Unexpected command line arguments passed in: ~p~n",
+                      [UnknownArgs]),
+            erlang:halt(120)
+    end.
+
 
 -spec bootstrap_configs(#data{}) -> ok.
 bootstrap_configs(RequiredData)->
     io:format("Boostrapping app and rebar configurations~n"),
     ok = if_single_app_project_update_app_src_version(RequiredData),
-    ok = if_compile_ports_add_pc_plugin(RequiredData).
+    ok = if_compile_ports_add_pc_plugin(RequiredData),
+    ok = if_debug_info_add(RequiredData).
 
 -spec bootstrap_plugins(#data{}) -> ok.
 bootstrap_plugins(#data{plugins = Plugins}) ->
@@ -199,6 +208,33 @@ guard_env(Name) ->
     end.
 
 %% @doc
+%% If debug info is set we need to add debug info to the list of compile options
+%%
+-spec if_debug_info_add(#data{}) -> ok.
+if_debug_info_add(#data{debug_info = true}) ->
+    ConfigTerms = add_debug_info(read_rebar_config()),
+    Text = lists:map(fun(Term) -> io_lib:format("~tp.~n", [Term]) end,
+                     ConfigTerms),
+    file:write_file("rebar.config", Text);
+if_debug_info_add(_) ->
+    ok.
+
+-spec add_debug_info([term()]) -> [term()].
+add_debug_info(Config) ->
+    ExistingOpts = case lists:keysearch(erl_opts, 1, Config) of
+                       {value, {erl_opts, ExistingOptsList}} -> ExistingOptsList;
+                       _ -> []
+                   end,
+    case lists:member(debug_info, ExistingOpts) of
+        true ->
+            Config;
+        false ->
+            lists:keystore(erl_opts, 1, Config,
+                           {erl_opts, [debug_info | ExistingOpts]})
+    end.
+
+
+%% @doc
 %% If the compile ports flag is set, rewrite the rebar config to
 %% include the 'pc' plugin.
 -spec if_compile_ports_add_pc_plugin(#data{}) -> ok.
@@ -213,7 +249,7 @@ if_compile_ports_add_pc_plugin(_) ->
 -spec add_pc_to_plugins([term()]) -> [term()].
 add_pc_to_plugins(Config) ->
     PluginList = case lists:keysearch(plugins, 1, Config) of
-                     {ok, {plugins, ExistingPluginList}} -> ExistingPluginList;
+                     {value, {plugins, ExistingPluginList}} -> ExistingPluginList;
                      _ -> []
                  end,
     lists:keystore(plugins, 1, Config, {plugins, [pc | PluginList]}).