Merge pull request #54 from adisbladis/cgo-enabled-go-version

Factor out Go version / no default for CGO_ENABLED
This commit is contained in:
adisbladis 2022-06-13 20:58:46 +08:00 committed by GitHub
commit 96e8b390aa
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -86,6 +86,20 @@ let
'' ''
); );
# Select Go attribute based on version specified in go.mod
selectGo = attrs: goMod: attrs.go or (if goMod == null then pkgs.go else
(
let
goVersion = goMod.go;
goAttr = "go_" + (lib.replaceStrings [ "." ] [ "_" ] goVersion);
in
(
if builtins.hasAttr goAttr pkgs then pkgs.${goAttr}
else builtins.trace "go.mod specified Go version ${goVersion} but doesn't exist. Falling back to ${pkgs.go.version}." pkgs.go
)
));
mkGoEnv = mkGoEnv =
{ pwd { pwd
}@attrs: }@attrs:
@ -93,16 +107,7 @@ let
goMod = parseGoMod (builtins.readFile "${builtins.toString pwd}/go.mod"); goMod = parseGoMod (builtins.readFile "${builtins.toString pwd}/go.mod");
modulesStruct = builtins.fromTOML (builtins.readFile "${builtins.toString pwd}/gomod2nix.toml"); modulesStruct = builtins.fromTOML (builtins.readFile "${builtins.toString pwd}/gomod2nix.toml");
go = attrs.go or ( go = selectGo attrs goMod;
let
goVersion = goMod.go;
goAttr = "go_" + (lib.replaceStrings [ "." ] [ "_" ] goVersion);
in
(
if builtins.hasAttr goAttr pkgs then pkgs.${goAttr}
else builtins.trace "go.mod specified Go version ${goVersion} but doesn't exist. Falling back to ${pkgs.go.version}." pkgs.go
)
);
vendorEnv = mkVendorEnv { vendorEnv = mkVendorEnv {
inherit go modulesStruct; inherit go modulesStruct;
@ -147,10 +152,8 @@ let
buildGoApplication = buildGoApplication =
{ modules { modules
, go ? pkgs.go
, src , src
, pwd ? null , pwd ? null
, CGO_ENABLED ? "0"
, nativeBuildInputs ? [ ] , nativeBuildInputs ? [ ]
, allowGoReference ? false , allowGoReference ? false
, meta ? { } , meta ? { }
@ -160,7 +163,10 @@ let
let let
modulesStruct = builtins.fromTOML (builtins.readFile modules); modulesStruct = builtins.fromTOML (builtins.readFile modules);
goMod = parseGoMod (builtins.readFile "${builtins.toString pwd}/go.mod"); goMod =
if pwd != null
then parseGoMod (builtins.readFile "${builtins.toString pwd}/go.mod")
else null;
localReplaceCommands = localReplaceCommands =
let let
localReplaceAttrs = lib.filterAttrs (n: v: lib.hasAttr "path" v) goMod.replace; localReplaceAttrs = lib.filterAttrs (n: v: lib.hasAttr "path" v) goMod.replace;
@ -176,6 +182,8 @@ let
in in
if pwd != null then commands else [ ]; if pwd != null then commands else [ ];
go = selectGo attrs goMod;
removeReferences = [ ] ++ lib.optional (!allowGoReference) go; removeReferences = [ ] ++ lib.optional (!allowGoReference) go;
vendorEnv = mkVendorEnv { vendorEnv = mkVendorEnv {
@ -186,7 +194,6 @@ let
nativeBuildInputs = [ removeReferencesTo go ] ++ nativeBuildInputs; nativeBuildInputs = [ removeReferencesTo go ] ++ nativeBuildInputs;
inherit (go) GOOS GOARCH; inherit (go) GOOS GOARCH;
inherit CGO_ENABLED;
GO_NO_VENDOR_CHECKS = "1"; GO_NO_VENDOR_CHECKS = "1";