diff options
Diffstat (limited to 'nixpkgs/pkgs/development/beam-modules')
14 files changed, 879 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/development/beam-modules/build-erlang-mk.nix b/nixpkgs/pkgs/development/beam-modules/build-erlang-mk.nix new file mode 100644 index 000000000000..c2d1ebabae27 --- /dev/null +++ b/nixpkgs/pkgs/development/beam-modules/build-erlang-mk.nix @@ -0,0 +1,102 @@ +{ stdenv, writeText, erlang, perl, which, gitMinimal, wget, lib }: + +{ name, version +, src +, setupHook ? null +, buildInputs ? [] +, beamDeps ? [] +, postPatch ? "" +, compilePorts ? false +, installPhase ? null +, buildPhase ? null +, configurePhase ? null +, meta ? {} +, enableDebugInfo ? false +, buildFlags ? [] +, ... }@attrs: + +with stdenv.lib; + +let + debugInfoFlag = lib.optionalString (enableDebugInfo || erlang.debugInfo) "+debug_info"; + + shell = drv: stdenv.mkDerivation { + name = "interactive-shell-${drv.name}"; + buildInputs = [ drv ]; + }; + + pkg = self: stdenv.mkDerivation ( attrs // { + app_name = name; + name = "${name}-${version}"; + inherit version; + + dontStrip = true; + + inherit src; + + setupHook = if setupHook == null + then writeText "setupHook.sh" '' + addToSearchPath ERL_LIBS "$1/lib/erlang/lib" + '' + else setupHook; + + buildInputs = buildInputs ++ [ erlang perl which gitMinimal wget ]; + propagatedBuildInputs = beamDeps; + + buildFlags = [ "SKIP_DEPS=1" ] + ++ lib.optional (enableDebugInfo || erlang.debugInfo) ''ERL_OPTS="$ERL_OPTS +debug_info"'' + ++ buildFlags; + + configurePhase = if configurePhase == null + then '' + runHook preConfigure + + # We shouldnt need to do this, but it seems at times there is a *.app in + # the repo/package. This ensures we start from a clean slate + make SKIP_DEPS=1 clean + + runHook postConfigure + '' + else configurePhase; + + buildPhase = if buildPhase == null + then '' + runHook preBuild + + make $buildFlags "''${buildFlagsArray[@]}" + + runHook postBuild + '' + else buildPhase; + + installPhase = if installPhase == null + then '' + runHook preInstall + + mkdir -p $out/lib/erlang/lib/${name} + cp -r ebin $out/lib/erlang/lib/${name}/ + cp -r src $out/lib/erlang/lib/${name}/ + + if [ -d include ]; then + cp -r include $out/lib/erlang/lib/${name}/ + fi + + if [ -d priv ]; then + cp -r priv $out/lib/erlang/lib/${name}/ + fi + + if [ -d doc ]; then + cp -r doc $out/lib/erlang/lib/${name}/ + fi + + runHook postInstall + '' + else installPhase; + + passthru = { + packageName = name; + env = shell self; + inherit beamDeps; + }; +}); +in fix pkg diff --git a/nixpkgs/pkgs/development/beam-modules/build-hex.nix b/nixpkgs/pkgs/development/beam-modules/build-hex.nix new file mode 100644 index 000000000000..27ce64582f34 --- /dev/null +++ b/nixpkgs/pkgs/development/beam-modules/build-hex.nix @@ -0,0 +1,20 @@ +{ stdenv, buildRebar3, fetchHex }: + +{ name, version, sha256 +, builder ? buildRebar3 +, hexPkg ? name +, ... }@attrs: + +with stdenv.lib; + +let + pkg = self: builder (attrs // { + + src = fetchHex { + pkg = hexPkg; + inherit version; + inherit sha256; + }; + }); +in + fix pkg diff --git a/nixpkgs/pkgs/development/beam-modules/build-mix.nix b/nixpkgs/pkgs/development/beam-modules/build-mix.nix new file mode 100644 index 000000000000..9aebad2dabf7 --- /dev/null +++ b/nixpkgs/pkgs/development/beam-modules/build-mix.nix @@ -0,0 +1,100 @@ +{ stdenv, writeText, elixir, erlang, hex, lib }: + +{ name +, version +, src +, setupHook ? null +, buildInputs ? [] +, beamDeps ? [] +, postPatch ? "" +, compilePorts ? false +, installPhase ? null +, 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 ]; + }; + + bootstrapper = ./mix-bootstrap; + + pkg = self: stdenv.mkDerivation ( attrs // { + name = "${name}-${version}"; + inherit version; + + dontStrip = true; + + inherit src; + + setupHook = if setupHook == null + then writeText "setupHook.sh" '' + addToSearchPath ERL_LIBS "$1/lib/erlang/lib" + '' + else setupHook; + + inherit buildInputs; + propagatedBuildInputs = [ hex elixir ] ++ beamDeps; + + configurePhase = if configurePhase == null + then '' + runHook preConfigure + ${erlang}/bin/escript ${bootstrapper} + runHook postConfigure + '' + else configurePhase ; + + + buildPhase = if buildPhase == null + then '' + runHook preBuild + + export HEX_OFFLINE=1 + export HEX_HOME=`pwd` + export MIX_ENV=prod + export MIX_NO_DEPS=1 + + mix compile ${debugInfoFlag} --no-deps-check + + runHook postBuild + '' + else buildPhase; + + installPhase = if installPhase == null + then '' + runHook preInstall + + MIXENV=prod + + if [ -d "_build/shared" ]; then + MIXENV=shared + fi + + mkdir -p "$out/lib/erlang/lib/${name}-${version}" + for reldir in src ebin priv include; do + fd="_build/$MIXENV/lib/${name}/$reldir" + [ -d "$fd" ] || continue + cp -Hrt "$out/lib/erlang/lib/${name}-${version}" "$fd" + success=1 + done + + runHook postInstall + '' + else installPhase; + + passthru = { + packageName = name; + env = shell self; + inherit beamDeps; + }; +}); +in fix pkg diff --git a/nixpkgs/pkgs/development/beam-modules/build-rebar3.nix b/nixpkgs/pkgs/development/beam-modules/build-rebar3.nix new file mode 100644 index 000000000000..224d111026af --- /dev/null +++ b/nixpkgs/pkgs/development/beam-modules/build-rebar3.nix @@ -0,0 +1,94 @@ +{ stdenv, writeText, erlang, rebar3, openssl, libyaml, + pc, lib }: + +{ name, version +, src +, setupHook ? null +, buildInputs ? [], beamDeps ? [], buildPlugins ? [] +, postPatch ? "" +, compilePorts ? false +, installPhase ? null +, 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 { + name = "interactive-shell-${drv.name}"; + buildInputs = [ drv ]; + }; + + customPhases = filterAttrs + (_: v: v != null) + { inherit setupHook configurePhase buildPhase installPhase; }; + + pkg = self: stdenv.mkDerivation (attrs // { + + name = "${name}-${version}"; + inherit version; + + buildInputs = buildInputs ++ [ erlang rebar3 openssl libyaml ]; + propagatedBuildInputs = unique (beamDeps ++ ownPlugins); + + dontStrip = true; + # The following are used by rebar3-nix-bootstrap + inherit compilePorts; + buildPlugins = ownPlugins; + + inherit src; + + setupHook = writeText "setupHook.sh" '' + addToSearchPath ERL_LIBS "$1/lib/erlang/lib/" + ''; + + postPatch = '' + rm -f rebar rebar3 + '' + postPatch; + + configurePhase = '' + runHook preConfigure + ${erlang}/bin/escript ${rebar3.bootstrapper} ${debugInfoFlag} + runHook postConfigure + ''; + + buildPhase = '' + runHook preBuild + HOME=. rebar3 compile + ${if compilePorts then '' + HOME=. rebar3 pc compile + '' else ''''} + runHook postBuild + ''; + + installPhase = '' + runHook preInstall + mkdir -p "$out/lib/erlang/lib/${name}-${version}" + for reldir in src ebin priv include; do + fd="_build/default/lib/${name}/$reldir" + [ -d "$fd" ] || continue + cp -Hrt "$out/lib/erlang/lib/${name}-${version}" "$fd" + success=1 + done + runHook postInstall + ''; + + meta = { + inherit (erlang.meta) platforms; + } // meta; + + passthru = { + packageName = name; + env = shell self; + inherit beamDeps; + }; + } // customPhases); +in + fix pkg diff --git a/nixpkgs/pkgs/development/beam-modules/default.nix b/nixpkgs/pkgs/development/beam-modules/default.nix new file mode 100644 index 000000000000..a5de4dfb3bba --- /dev/null +++ b/nixpkgs/pkgs/development/beam-modules/default.nix @@ -0,0 +1,82 @@ +{ stdenv, pkgs, erlang }: + +let + inherit (stdenv.lib) makeExtensible; + + lib = pkgs.callPackage ./lib.nix {}; + + # FIXME: add support for overrideScope + callPackageWithScope = scope: drv: args: stdenv.lib.callPackageWith scope drv args; + mkScope = scope: pkgs // scope; + + packages = self: + let + defaultScope = mkScope self; + callPackage = drv: args: callPackageWithScope defaultScope drv args; + in + rec { + inherit callPackage erlang; + beamPackages = self; + + rebar = callPackage ../tools/build-managers/rebar { }; + rebar3 = callPackage ../tools/build-managers/rebar3 { }; + + # rebar3 port compiler plugin is required by buildRebar3 + pc_1_6_0 = callPackage ./pc {}; + pc = pc_1_6_0; + + fetchHex = callPackage ./fetch-hex.nix { }; + + fetchRebar3Deps = callPackage ./fetch-rebar-deps.nix { }; + rebar3Relx = callPackage ./rebar3-release.nix { }; + + buildRebar3 = callPackage ./build-rebar3.nix {}; + buildHex = callPackage ./build-hex.nix {}; + buildErlangMk = callPackage ./build-erlang-mk.nix {}; + buildMix = callPackage ./build-mix.nix {}; + + # BEAM-based languages. + elixir = elixir_1_11; + + elixir_1_11 = lib.callElixir ../interpreters/elixir/1.11.nix { + inherit erlang; + debugInfo = true; + }; + + elixir_1_10 = lib.callElixir ../interpreters/elixir/1.10.nix { + inherit erlang; + debugInfo = true; + }; + + elixir_1_9 = lib.callElixir ../interpreters/elixir/1.9.nix { + inherit erlang; + debugInfo = true; + }; + + elixir_1_8 = lib.callElixir ../interpreters/elixir/1.8.nix { + inherit erlang; + debugInfo = true; + }; + + elixir_1_7 = lib.callElixir ../interpreters/elixir/1.7.nix { + inherit erlang; + debugInfo = true; + }; + + # Remove old versions of elixir, when the supports fades out: + # https://hexdocs.pm/elixir/compatibility-and-deprecations.html + + lfe = lfe_1_3; + lfe_1_2 = lib.callLFE ../interpreters/lfe/1.2.nix { inherit erlang buildRebar3 buildHex; }; + lfe_1_3 = lib.callLFE ../interpreters/lfe/1.3.nix { inherit erlang buildRebar3 buildHex; }; + + # Non hex packages. Examples how to build Rebar/Mix packages with and + # without helper functions buildRebar3 and buildMix. + hex = callPackage ./hex {}; + webdriver = callPackage ./webdriver {}; + relxExe = callPackage ../tools/erlang/relx-exe {}; + + # An example of Erlang/C++ package. + cuter = callPackage ../tools/erlang/cuter {}; + }; +in makeExtensible packages diff --git a/nixpkgs/pkgs/development/beam-modules/fetch-hex.nix b/nixpkgs/pkgs/development/beam-modules/fetch-hex.nix new file mode 100644 index 000000000000..c55a7a80ff39 --- /dev/null +++ b/nixpkgs/pkgs/development/beam-modules/fetch-hex.nix @@ -0,0 +1,34 @@ +{ stdenv, fetchurl }: + +{ pkg, version, sha256 +, meta ? {} +}: + +with stdenv.lib; + +stdenv.mkDerivation ({ + name = "hex-source-${pkg}-${version}"; + + src = fetchurl { + url = "https://repo.hex.pm/tarballs/${pkg}-${version}.tar"; + inherit sha256; + }; + + phases = [ "unpackPhase" "installPhase" ]; + + unpackCmd = '' + tar -xf $curSrc contents.tar.gz + mkdir contents + tar -C contents -xzf contents.tar.gz + ''; + + installPhase = '' + runHook preInstall + mkdir "$out" + cp -Hrt "$out" . + success=1 + runHook postInstall + ''; + + inherit meta; +}) diff --git a/nixpkgs/pkgs/development/beam-modules/fetch-rebar-deps.nix b/nixpkgs/pkgs/development/beam-modules/fetch-rebar-deps.nix new file mode 100644 index 000000000000..389e07beca6c --- /dev/null +++ b/nixpkgs/pkgs/development/beam-modules/fetch-rebar-deps.nix @@ -0,0 +1,33 @@ +{ stdenv, rebar3 }: + +{ name, version, sha256, src +, meta ? {} +}: + +with stdenv.lib; + +stdenv.mkDerivation ({ + name = "rebar-deps-${name}-${version}"; + + phases = [ "downloadPhase" "installPhase" ]; + + downloadPhase = '' + cp ${src} . + HOME='.' DEBUG=1 ${rebar3}/bin/rebar3 get-deps + ''; + + installPhase = '' + mkdir -p "$out/_checkouts" + for i in ./_build/default/lib/* ; do + echo "$i" + cp -R "$i" "$out/_checkouts" + done + ''; + + outputHashAlgo = "sha256"; + outputHashMode = "recursive"; + outputHash = sha256; + + impureEnvVars = stdenv.lib.fetchers.proxyImpureEnvVars; + inherit meta; +}) diff --git a/nixpkgs/pkgs/development/beam-modules/hex/default.nix b/nixpkgs/pkgs/development/beam-modules/hex/default.nix new file mode 100644 index 000000000000..26070ce73bfa --- /dev/null +++ b/nixpkgs/pkgs/development/beam-modules/hex/default.nix @@ -0,0 +1,57 @@ +{ stdenv, fetchFromGitHub, writeText, elixir }: + +let + shell = drv: stdenv.mkDerivation { + name = "interactive-shell-${drv.name}"; + buildInputs = [ drv ]; + }; + + pkg = self: stdenv.mkDerivation rec { + pname = "hex"; + version = "0.20.5"; + + src = fetchFromGitHub { + owner = "hexpm"; + repo = "hex"; + rev = "v${version}"; + sha256 = "1wz6n4qrmsb4kkww6lrdbs99xzwp4dyjjmr8m4drcwn3sd2k9ba6"; + }; + + setupHook = writeText "setupHook.sh" '' + addToSearchPath ERL_LIBS "$1/lib/erlang/lib/" + ''; + + dontStrip = true; + + buildInputs = [ elixir ]; + + buildPhase = '' + runHook preBuild + export HEX_OFFLINE=1 + export HEX_HOME=./ + export MIX_ENV=prod + mix compile + runHook postBuild + ''; + + installPhase = '' + runHook preInstall + + mkdir -p $out/lib/erlang/lib + cp -r ./_build/prod/lib/hex $out/lib/erlang/lib/ + + runHook postInstall + ''; + + meta = { + description = "Package manager for the Erlang VM https://hex.pm"; + license = stdenv.lib.licenses.mit; + homepage = "https://github.com/hexpm/hex"; + maintainers = with stdenv.lib.maintainers; [ ericbmerritt ]; + }; + + passthru = { + env = shell self; + }; +}; +in stdenv.lib.fix pkg diff --git a/nixpkgs/pkgs/development/beam-modules/lib.nix b/nixpkgs/pkgs/development/beam-modules/lib.nix new file mode 100644 index 000000000000..db40c47794fa --- /dev/null +++ b/nixpkgs/pkgs/development/beam-modules/lib.nix @@ -0,0 +1,79 @@ +{ pkgs, stdenv }: + +rec { + + /* Similar to callPackageWith/callPackage, but without makeOverridable + */ + callPackageWith = autoArgs: fn: args: + let + f = if pkgs.lib.isFunction fn then fn else import fn; + auto = builtins.intersectAttrs (stdenv.lib.functionArgs f) autoArgs; + in f (auto // args); + + callPackage = callPackageWith pkgs; + + /* Uses generic-builder to evaluate provided drv containing OTP-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, used to + enable/disable high-level OTP features, like ODBC or WX support; + + Please note that "mkDerivation" defined here is the one called from R16.nix + and similar files. + */ + callErlang = drv: args: + let + builder = callPackage ../../development/interpreters/erlang/generic-builder.nix args; + in + callPackage drv { + 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 + builder = callPackage ../interpreters/elixir/generic-builder.nix args; + in + callPackage drv { + 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 + builder = callPackage ../interpreters/lfe/generic-builder.nix args; + in + callPackage drv { + mkDerivation = pkgs.makeOverridable builder; + }; + +} diff --git a/nixpkgs/pkgs/development/beam-modules/mix-bootstrap b/nixpkgs/pkgs/development/beam-modules/mix-bootstrap new file mode 100755 index 000000000000..7e31def71fa8 --- /dev/null +++ b/nixpkgs/pkgs/development/beam-modules/mix-bootstrap @@ -0,0 +1,108 @@ +#!/usr/bin/env escript +%% -*- erlang-indent-level: 4;indent-tabs-mode: nil -*- +%%! -smp enable +%%% --------------------------------------------------------------------------- +%%% @doc +%%% The purpose of this command is to prepare a mix project so that mix +%%% understands that the dependencies are all already installed. If you want a +%%% hygienic build on nix then you must run this command before running mix. I +%%% suggest that you add a `Makefile` to your project and have the bootstrap +%%% command be a dependency of the build commands. See the nix documentation for +%%% more information. +%%% +%%% This command designed to have as few dependencies as possible so that it can +%%% be a dependency of root level packages like mix. To that end it does many +%%% things in a fairly simplistic way. That is by design. +%%% +%%% ### Assumptions +%%% +%%% This command makes the following assumptions: +%%% +%%% * It is run in a nix-shell or nix-build environment +%%% * that all dependencies have been added to the ERL_LIBS +%%% Environment Variable + +-record(data, {version + , erl_libs + , root + , name}). +-define(LOCAL_HEX_REGISTRY, "registry.ets"). + +main(Args) -> + {ok, RequiredData} = gather_required_data_from_the_environment(Args), + ok = bootstrap_libs(RequiredData). + +%% @doc +%% This takes an app name in the standard OTP <name>-<version> format +%% and returns just the app name. Why? Because rebar doesn't +%% respect OTP conventions in some cases. +-spec fixup_app_name(file:name()) -> string(). +fixup_app_name(Path) -> + BaseName = filename:basename(Path), + case string:split(BaseName, "-") of + [Name, _Version] -> Name; + Name -> Name + end. + + +-spec gather_required_data_from_the_environment([string()]) -> {ok, #data{}}. +gather_required_data_from_the_environment(_) -> + {ok, #data{ version = guard_env("version") + , erl_libs = os:getenv("ERL_LIBS", []) + , root = code:root_dir() + , name = guard_env("name")}}. + +-spec guard_env(string()) -> string(). +guard_env(Name) -> + case os:getenv(Name) of + false -> + stderr("Expected Environment variable ~s! Are you sure you are " + "running in a Nix environment? Either a nix-build, " + "nix-shell, etc?~n", [Name]), + erlang:halt(1); + Variable -> + Variable + end. + +-spec bootstrap_libs(#data{}) -> ok. +bootstrap_libs(#data{erl_libs = ErlLibs}) -> + io:format("Bootstrapping dependent libraries~n"), + Target = "_build/prod/lib/", + Paths = string:tokens(ErlLibs, ":"), + CopiableFiles = + lists:foldl(fun(Path, Acc) -> + gather_directory_contents(Path) ++ Acc + end, [], Paths), + lists:foreach(fun (Path) -> + ok = link_app(Path, Target) + end, CopiableFiles). + +-spec gather_directory_contents(string()) -> [{string(), string()}]. +gather_directory_contents(Path) -> + {ok, Names} = file:list_dir(Path), + lists:map(fun(AppName) -> + {filename:join(Path, AppName), fixup_app_name(AppName)} + end, Names). + +%% @doc +%% Makes a symlink from the directory pointed at by Path to a +%% directory of the same name in Target. So if we had a Path of +%% {`foo/bar/baz/bash`, `baz`} and a Target of `faz/foo/foos`, the symlink +%% would be `faz/foo/foos/baz`. +-spec link_app({string(), string()}, string()) -> ok. +link_app({Path, TargetFile}, TargetDir) -> + Target = filename:join(TargetDir, TargetFile), + ok = make_symlink(Path, Target). + +-spec make_symlink(string(), string()) -> ok. +make_symlink(Path, TargetFile) -> + file:delete(TargetFile), + ok = filelib:ensure_dir(TargetFile), + io:format("Making symlink from ~s to ~s~n", [Path, TargetFile]), + ok = file:make_symlink(Path, TargetFile). + +%% @doc +%% Write the result of the format string out to stderr. +-spec stderr(string(), [term()]) -> ok. +stderr(FormatStr, Args) -> + io:put_chars(standard_error, io_lib:format(FormatStr, Args)). diff --git a/nixpkgs/pkgs/development/beam-modules/pc/default.nix b/nixpkgs/pkgs/development/beam-modules/pc/default.nix new file mode 100644 index 000000000000..d30b0fbdbd28 --- /dev/null +++ b/nixpkgs/pkgs/development/beam-modules/pc/default.nix @@ -0,0 +1,13 @@ +{ stdenv, buildHex }: + +buildHex { + name = "pc"; + version = "1.6.0"; + sha256 = "0xq411ig5ny3iilkkkqa4vm3w3dgjc9cfzkqwk8pm13dw9mcm8h0"; + + meta = { + description = ''a rebar3 port compiler for native code''; + license = stdenv.lib.licenses.mit; + homepage = "https://github.com/blt/port_compiler"; + }; +} diff --git a/nixpkgs/pkgs/development/beam-modules/pgsql/default.nix b/nixpkgs/pkgs/development/beam-modules/pgsql/default.nix new file mode 100644 index 000000000000..c7e7aee10019 --- /dev/null +++ b/nixpkgs/pkgs/development/beam-modules/pgsql/default.nix @@ -0,0 +1,34 @@ +{stdenv, fetchFromGitHub, buildRebar3 }: + +let + shell = drv: stdenv.mkDerivation { + name = "interactive-shell-${drv.name}"; + buildInputs = [ drv ]; + }; + + pkg = self: buildRebar3 { + name = "pgsql"; + version = "25+beta.2"; + + src = fetchFromGitHub { + owner = "semiocast"; + repo = "pgsql"; + rev = "14f632bc89e464d82ce3ef12a67ed8c2adb5b60c"; + sha256 = "17dcahiwlw61zhy8aq9rn46lwb35fb9q3372s4wmz01czm8c348w"; + }; + + dontStrip = true; + + meta = { + description = "Erlang PostgreSQL Driver"; + license = stdenv.lib.licenses.mit; + homepage = "https://github.com/semiocast/pgsql"; + maintainers = with stdenv.lib.maintainers; [ ericbmerritt ]; + }; + + passthru = { + env = shell self; + }; + +}; +in stdenv.lib.fix pkg diff --git a/nixpkgs/pkgs/development/beam-modules/rebar3-release.nix b/nixpkgs/pkgs/development/beam-modules/rebar3-release.nix new file mode 100644 index 000000000000..1ec9f244d6c1 --- /dev/null +++ b/nixpkgs/pkgs/development/beam-modules/rebar3-release.nix @@ -0,0 +1,83 @@ +{ stdenv, writeText, erlang, rebar3, openssl, + lib }: + +{ name, version +, src +, checkouts ? null +, releaseType +, buildInputs ? [] +, setupHook ? null +, profile ? "default" +, installPhase ? null +, buildPhase ? null +, configurePhase ? null +, meta ? {} +, enableDebugInfo ? false +, ... }@attrs: + +with stdenv.lib; + +let + shell = drv: stdenv.mkDerivation { + name = "interactive-shell-${drv.name}"; + buildInputs = [ drv ]; + }; + + customPhases = filterAttrs + (_: v: v != null) + { inherit setupHook configurePhase buildPhase installPhase; }; + + pkg = self: stdenv.mkDerivation (attrs // { + + name = "${name}-${version}"; + inherit version; + + buildInputs = buildInputs ++ [ erlang rebar3 openssl ]; + propagatedBuildInputs = [checkouts]; + + dontStrip = true; + + inherit src; + + setupHook = writeText "setupHook.sh" '' + addToSearchPath ERL_LIBS "$1/lib/erlang/lib/" + ''; + + configurePhase = '' + runHook preConfigure + ${if checkouts != null then + ''cp --no-preserve=all -R ${checkouts}/_checkouts .'' + else + ''''} + runHook postConfigure + ''; + + buildPhase = '' + runHook preBuild + HOME=. DEBUG=1 rebar3 as ${profile} ${if releaseType == "escript" + then '' escriptize'' + else '' release''} + runHook postBuild + ''; + + installPhase = '' + runHook preInstall + dir=${if releaseType == "escript" + then ''bin'' + else ''rel''} + mkdir -p "$out/$dir" + cp -R --preserve=mode "_build/${profile}/$dir" "$out" + runHook postInstall + ''; + + meta = { + inherit (erlang.meta) platforms; + } // meta; + + passthru = { + packageName = name; + env = shell self; + }; + } // customPhases); +in + fix pkg diff --git a/nixpkgs/pkgs/development/beam-modules/webdriver/default.nix b/nixpkgs/pkgs/development/beam-modules/webdriver/default.nix new file mode 100644 index 000000000000..8f06f8ed7a85 --- /dev/null +++ b/nixpkgs/pkgs/development/beam-modules/webdriver/default.nix @@ -0,0 +1,40 @@ +{stdenv, fetchFromGitHub, writeText, erlang }: + +let + shell = drv: stdenv.mkDerivation { + name = "interactive-shell-${drv.name}"; + buildInputs = [ drv ]; + }; + + pkg = self: stdenv.mkDerivation { + name = "webdriver"; + version = "0.0.0+build.18.7ceaf1f"; + + src = fetchFromGitHub { + owner = "Quviq"; + repo = "webdrv"; + rev = "7ceaf1f67d834e841ca0133b4bf899a9fa2db6bb"; + sha256 = "1pq6pmlr6xb4hv2fvmlrvzd8c70kdcidlgjv4p8n9pwvkif0cb87"; + }; + + setupHook = writeText "setupHook.sh" '' + addToSearchPath ERL_LIBS "$1/lib/erlang/lib/" + ''; + + buildInputs = [ erlang ]; + + installFlags = [ "PREFIX=$(out)/lib/erlang/lib" ]; + + meta = { + description = "WebDriver implementation in Erlang"; + license = stdenv.lib.licenses.mit; + homepage = "https://github.com/Quviq/webdrv"; + maintainers = with stdenv.lib.maintainers; [ ericbmerritt ]; + }; + + passthru = { + env = shell self; + }; + +}; +in stdenv.lib.fix pkg |