Merge remote-tracking branch 'origin/master' into staging-next
Conflicts: pkgs/applications/graphics/emulsion/default.nix pkgs/development/tools/misc/texlab/default.nix pkgs/development/tools/rust/bindgen/default.nix pkgs/development/tools/rust/cargo-udeps/default.nix pkgs/misc/emulators/ruffle/default.nix pkgs/tools/misc/code-minimap/default.nix
This commit is contained in:
@@ -1,85 +1,22 @@
|
||||
{ buildBazelPackage
|
||||
, cacert
|
||||
{ buildGoModule
|
||||
, fetchFromGitHub
|
||||
, git
|
||||
, go
|
||||
, lib
|
||||
, stdenv
|
||||
}:
|
||||
|
||||
buildBazelPackage rec {
|
||||
buildGoModule rec {
|
||||
pname = "bazel-remote";
|
||||
version = "1.0.0";
|
||||
version = "2.0.1";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "buchgr";
|
||||
repo = "bazel-remote";
|
||||
repo = pname;
|
||||
rev = "v${version}";
|
||||
sha256 = "1fpdw139d5q1377qnqbgkahmdr4mdaa17d2m10wkyvyvijwm4r2m";
|
||||
sha256 = "193amcx4nk7mr51jcawym46gizqmfkvksjxm64pf7s3wraf00v01";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ go git ];
|
||||
vendorSha256 = "1sxv9mya8plkn3hpjgfpzgwlh4m3cbhpywqv86brj2h9i4ad0gl5";
|
||||
|
||||
bazelTarget = "//:bazel-remote";
|
||||
|
||||
removeRulesCC = false;
|
||||
|
||||
# this is to work around `test -f` failing when called by gazelle
|
||||
# https://github.com/bazelbuild/bazel-gazelle/blob/v0.19.1/internal/go_repository.bzl#L135
|
||||
patches = [ ./disable_build_file_generation.patch ];
|
||||
|
||||
fetchAttrs = {
|
||||
preBuild = ''
|
||||
patchShebangs .
|
||||
|
||||
# tell rules_go to use the Go binary found in the PATH
|
||||
sed -e 's:go_register_toolchains():go_register_toolchains(go_version = "host"):g' -i WORKSPACE
|
||||
|
||||
# tell rules_go to invoke GIT with custom CAINFO path
|
||||
export GIT_SSL_CAINFO="${cacert}/etc/ssl/certs/ca-bundle.crt"
|
||||
|
||||
# force gazelle to use the nix go cache rather than its own
|
||||
# export GO_REPOSITORY_USE_HOST_CACHE=1
|
||||
'';
|
||||
|
||||
preInstall = ''
|
||||
# Remove the go_sdk (it's just a copy of the go derivation) and all
|
||||
# references to it from the marker files. Bazel does not need to download
|
||||
# this sdk because we have patched the WORKSPACE file to point to the one
|
||||
# currently present in PATH. Without removing the go_sdk from the marker
|
||||
# file, the hash of it will change anytime the Go derivation changes and
|
||||
# that would lead to impurities in the marker files which would result in
|
||||
# a different sha256 for the fetch phase.
|
||||
rm -rf $bazelOut/external/{go_sdk,\@go_sdk.marker}
|
||||
sed -e '/^FILE:@go_sdk.*/d' -i $bazelOut/external/\@*.marker
|
||||
|
||||
# Remove the gazelle repository cache as it contains built binaries
|
||||
chmod -R u+w $bazelOut/external/bazel_gazelle_go_repository_cache
|
||||
rm -rf $bazelOut/external/{bazel_gazelle_go_repository_cache,\@bazel_gazelle_go_repository_cache.marker}
|
||||
sed -e '/^FILE:@bazel_gazelle_go_repository_cache.*/d' -i $bazelOut/external/\@*.marker
|
||||
|
||||
# Remove the gazelle tools, they contain go binaries that are built
|
||||
# non-deterministically. As long as the gazelle version matches the tools
|
||||
# should be equivalent.
|
||||
rm -rf $bazelOut/external/{bazel_gazelle_go_repository_tools,\@bazel_gazelle_go_repository_tools.marker}
|
||||
sed -e '/^FILE:@bazel_gazelle_go_repository_tools.*/d' -i $bazelOut/external/\@*.marker
|
||||
'';
|
||||
|
||||
sha256 = "1vijh3nl30n8k6xlx6in92pzs70x15akbqiqalk8apgvphvdz8vy";
|
||||
};
|
||||
|
||||
buildAttrs = {
|
||||
preBuild = ''
|
||||
patchShebangs .
|
||||
|
||||
# tell rules_go to use the Go binary found in the PATH
|
||||
sed -e 's:go_register_toolchains():go_register_toolchains(go_version = "host"):g' -i WORKSPACE
|
||||
'';
|
||||
|
||||
installPhase = ''
|
||||
install -Dm755 bazel-bin/*_pure_stripped/bazel-remote $out/bin/bazel-remote
|
||||
'';
|
||||
};
|
||||
doCheck = false;
|
||||
|
||||
meta = with lib; {
|
||||
homepage = "https://github.com/buchgr/bazel-remote";
|
||||
@@ -87,6 +24,5 @@ buildBazelPackage rec {
|
||||
license = licenses.asl20;
|
||||
maintainers = [ maintainers.uri-canva ];
|
||||
platforms = platforms.darwin ++ platforms.linux;
|
||||
broken = stdenv.isDarwin;
|
||||
};
|
||||
}
|
||||
|
||||
@@ -3,17 +3,17 @@
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "leiningen";
|
||||
version = "2.9.5";
|
||||
version = "2.9.6";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://raw.github.com/technomancy/leiningen/${version}/bin/lein-pkg";
|
||||
sha256 = "12kv3286a2vkm3qpm2msiks87mkspxddgl7bwiacdias9dfda09n";
|
||||
sha256 = "0a8lq0yalar8szw155cxa8kywnk6yvakwi3xmxm1ahivn7i5hjq9";
|
||||
};
|
||||
|
||||
jarsrc = fetchurl {
|
||||
# NOTE: This is actually a .jar, Github has issues
|
||||
url = "https://github.com/technomancy/leiningen/releases/download/${version}/${pname}-${version}-standalone.zip";
|
||||
sha256 = "1shyvg1471sc3bv4h3ax51626xw8a8w05f43bny6gmp8pyc0qjfz";
|
||||
sha256 = "1f3hb57rqp9qkh5n2wf65dvxraf21y15s3g643f2fhzc7vvl7ia1";
|
||||
};
|
||||
|
||||
JARNAME = "${pname}-${version}-standalone.jar";
|
||||
|
||||
@@ -19,8 +19,6 @@ let
|
||||
sha256 = "1pcy5m79g0l9l3d8lkbx6cq1w87z1g3sa6wwvgbgraj2v3wkyy5g";
|
||||
};
|
||||
|
||||
bootstrapper = ./rebar3-nix-bootstrap;
|
||||
|
||||
buildInputs = [ erlang ];
|
||||
|
||||
postPatch = ''
|
||||
@@ -106,7 +104,7 @@ let
|
||||
}));
|
||||
in stdenv.mkDerivation {
|
||||
pname = "rebar3-with-plugins";
|
||||
inherit (rebar3) version bootstrapper;
|
||||
inherit (rebar3) version;
|
||||
nativeBuildInputs = [ erlang makeWrapper ];
|
||||
unpackPhase = "true";
|
||||
|
||||
|
||||
@@ -1,228 +0,0 @@
|
||||
#!/usr/bin/env escript
|
||||
%% -*- erlang-indent-level: 4;indent-tabs-mode: nil -*-
|
||||
%%! -smp enable
|
||||
%%% ---------------------------------------------------------------------------
|
||||
%%% @doc
|
||||
%%% The purpose of this command is to prepare a rebar3 project so that
|
||||
%%% rebar3 understands that the dependencies are all already
|
||||
%%% installed. If you want a hygienic build on nix then you must run
|
||||
%%% this command before running rebar3. 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 rebar3. 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
|
||||
, debug_info = false
|
||||
, erl_libs
|
||||
, root
|
||||
, name}).
|
||||
|
||||
-define(HEX_REGISTRY_PATH, ".cache/rebar3/hex/default/registry").
|
||||
|
||||
main(Args) ->
|
||||
{ok, ArgData} = parse_args(Args),
|
||||
{ok, RequiredData} = gather_required_data_from_the_environment(ArgData),
|
||||
do_the_bootstrap(RequiredData).
|
||||
|
||||
-spec do_the_bootstrap(#data{}) -> ok.
|
||||
do_the_bootstrap(RequiredData) ->
|
||||
ok = bootstrap_configs(RequiredData),
|
||||
ok = bootstrap_libs(RequiredData).
|
||||
|
||||
%% @doc
|
||||
%% Argument parsing is super simple only because we want to keep the
|
||||
%% dependencies minimal. For now there can be one entry on the
|
||||
%% command line: "debug-info"
|
||||
-spec parse_args([string()]) -> #data{}.
|
||||
parse_args(Args0) ->
|
||||
PossibleArgs = sets:from_list(["debug-info"]),
|
||||
Args1 = sets:from_list(Args0),
|
||||
Result = sets:subtract(Args1, PossibleArgs),
|
||||
case sets:to_list(Result) of
|
||||
[] ->
|
||||
{ok, #data{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_debug_info_add(RequiredData).
|
||||
|
||||
-spec bootstrap_libs(#data{}) -> ok.
|
||||
bootstrap_libs(#data{erl_libs = ErlLibs}) ->
|
||||
io:format("Bootstrapping dependent libraries~n"),
|
||||
Target = "_build/default/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_dependency(string()) -> [{string(), string()}].
|
||||
gather_dependency(Path) ->
|
||||
FullLibrary = filename:join(Path, "lib/erlang/lib/"),
|
||||
case filelib:is_dir(FullLibrary) of
|
||||
true ->
|
||||
gather_directory_contents(FullLibrary);
|
||||
false ->
|
||||
[raw_hex(Path)]
|
||||
end.
|
||||
|
||||
-spec raw_hex(string()) -> {string(), string()}.
|
||||
raw_hex(Path) ->
|
||||
[_, Name] = re:split(Path, "-hex-source-"),
|
||||
{Path, erlang:binary_to_list(Name)}.
|
||||
|
||||
-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),
|
||||
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
|
||||
%% 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(string()) -> string().
|
||||
fixup_app_name(FileName) ->
|
||||
case string:tokens(FileName, "-") of
|
||||
[Name] -> Name;
|
||||
[Name, _Version] -> Name;
|
||||
[Name, _Version, _Tag] -> Name
|
||||
end.
|
||||
|
||||
-spec gather_required_data_from_the_environment(#data{}) -> {ok, #data{}}.
|
||||
gather_required_data_from_the_environment(ArgData) ->
|
||||
{ok, ArgData#data{ version = guard_env("version")
|
||||
, erl_libs = get_env("ERL_LIBS", [])
|
||||
, root = code:root_dir()
|
||||
, name = guard_env("name")
|
||||
}}.
|
||||
|
||||
-spec nix2bool(any()) -> boolean().
|
||||
nix2bool("1") ->
|
||||
true;
|
||||
nix2bool("") ->
|
||||
false.
|
||||
|
||||
get_env(Name) ->
|
||||
os:getenv(Name).
|
||||
get_env(Name, Def) ->
|
||||
case get_env(Name) of
|
||||
false -> Def;
|
||||
Val -> Val
|
||||
end.
|
||||
|
||||
-spec guard_env(string()) -> string().
|
||||
guard_env(Name) ->
|
||||
case get_env(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.
|
||||
|
||||
%% @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.
|
||||
|
||||
-spec read_rebar_config() -> [term()].
|
||||
read_rebar_config() ->
|
||||
case file:consult("rebar.config") of
|
||||
{ok, Terms} ->
|
||||
Terms;
|
||||
_ ->
|
||||
stderr("Unable to read rebar config!", []),
|
||||
erlang:halt(1)
|
||||
end.
|
||||
|
||||
|
||||
-spec if_single_app_project_update_app_src_version(#data{}) -> ok.
|
||||
if_single_app_project_update_app_src_version(#data{name = Name,
|
||||
version = Version}) ->
|
||||
SrcFile = filename:join("src",
|
||||
lists:concat([Name, ".app.src"])),
|
||||
|
||||
case filelib:is_file(SrcFile) of
|
||||
true ->
|
||||
update_app_src_with_version(SrcFile, Version);
|
||||
false ->
|
||||
ok
|
||||
end.
|
||||
|
||||
-spec update_app_src_with_version(string(), string()) -> ok.
|
||||
update_app_src_with_version(SrcFile, Version) ->
|
||||
{ok, [{application, Name, Details}]} = file:consult(SrcFile),
|
||||
NewDetails = lists:keyreplace(vsn, 1, Details, {vsn, Version}),
|
||||
ok = file:write_file(SrcFile, io_lib:fwrite("~p.\n", [{application, Name, NewDetails}])).
|
||||
|
||||
%% @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)).
|
||||
@@ -4,37 +4,41 @@ let
|
||||
fuse = if stdenv.isDarwin then macfuse-stubs else fuse3;
|
||||
in stdenv.mkDerivation rec {
|
||||
pname = "tup";
|
||||
version = "0.7.10";
|
||||
version = "0.7.11";
|
||||
outputs = [ "bin" "man" "out" ];
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "gittup";
|
||||
repo = "tup";
|
||||
rev = "v${version}";
|
||||
sha256 = "1qd07h4wi0743l7z2vybfvhwp61g2p2pc5qhl40672ryl24nvd1d";
|
||||
hash = "sha256-Q2Y5ErcfhLChi9Wezn8+7eNXYX2UXW1fBOqEclmgzOo=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ pkg-config ];
|
||||
buildInputs = [ fuse pcre ];
|
||||
|
||||
configurePhase = ''
|
||||
sed -i 's/`git describe`/v${version}/g' src/tup/link.sh
|
||||
sed -i 's/pcre-confg/pkg-config pcre/g' Tupfile Tuprules.tup
|
||||
substituteInPlace src/tup/link.sh --replace '`git describe' '`echo ${version}'
|
||||
substituteInPlace Tuprules.tup --replace 'pcre-config' 'pkg-config libpcre'
|
||||
'';
|
||||
|
||||
# Regular tup builds require fusermount to have suid, which nix cannot
|
||||
# currently provide in a build environment, so we bootstrap and use 'tup
|
||||
# generate' instead
|
||||
buildPhase = ''
|
||||
runHook preBuild
|
||||
./build.sh
|
||||
./build/tup init
|
||||
./build/tup generate script.sh
|
||||
./script.sh
|
||||
runHook postBuild
|
||||
'';
|
||||
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
install -D tup -t $bin/bin/
|
||||
install -D tup.1 -t $man/share/man/man1/
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
setupHook = ./setup-hook.sh;
|
||||
|
||||
Reference in New Issue
Block a user