59 lines
1.1 KiB
Nix
59 lines
1.1 KiB
Nix
{ pkgs, go }:
|
|
let
|
|
go-wrapper = pkgs.writeShellApplication {
|
|
name = "go";
|
|
text = ''
|
|
args=("$@")
|
|
new_args=()
|
|
has_test=false
|
|
found_race=false
|
|
|
|
for arg in "''${args[@]}"; do
|
|
if [[ "$arg" == "test" ]]; then
|
|
has_test=true
|
|
fi
|
|
done
|
|
|
|
if [[ "$has_test" == "true" ]]; then
|
|
for arg in "''${args[@]}"; do
|
|
if [[ "$arg" != "-race" ]]; then
|
|
new_args+=("$arg")
|
|
else
|
|
found_race=true
|
|
fi
|
|
done
|
|
|
|
if [[ "$found_race" == "true" ]]; then
|
|
exec "$REAL_GO" "''${new_args[@]}"
|
|
fi
|
|
fi
|
|
|
|
exec "$REAL_GO" "$@"
|
|
'';
|
|
};
|
|
|
|
preservedAttrs = pkgs.lib.attrsets.getAttrs [
|
|
"CGO_ENABLED"
|
|
"GOARCH"
|
|
"GOOS"
|
|
"meta"
|
|
] go;
|
|
in
|
|
pkgs.symlinkJoin (
|
|
{
|
|
name = "go-raceless";
|
|
paths = [ go ];
|
|
nativeBuildInputs = [ pkgs.makeWrapper ];
|
|
postBuild = ''
|
|
rm $out/bin/go
|
|
|
|
makeWrapper ${go-wrapper}/bin/go $out/bin/go \
|
|
--set REAL_GO ${go}/bin/go
|
|
'';
|
|
}
|
|
// preservedAttrs
|
|
// {
|
|
passthru = go.passthru or { };
|
|
}
|
|
)
|