From d5972ed69f2ee7600fa53422b34bfb6a5c2fd65a Mon Sep 17 00:00:00 2001 From: Audrey Dutcher Date: Thu, 2 May 2024 09:00:36 -0700 Subject: [PATCH] freebsd: Only export a limited number of attributes to top-level --- .../bsd/freebsd/default-branch.nix | 39 --------- pkgs/os-specific/bsd/freebsd/default.nix | 87 +++++++++++++++++++ pkgs/os-specific/bsd/freebsd/versions.nix | 46 ---------- pkgs/top-level/all-packages.nix | 14 +-- 4 files changed, 91 insertions(+), 95 deletions(-) create mode 100644 pkgs/os-specific/bsd/freebsd/default.nix delete mode 100644 pkgs/os-specific/bsd/freebsd/versions.nix diff --git a/pkgs/os-specific/bsd/freebsd/default-branch.nix b/pkgs/os-specific/bsd/freebsd/default-branch.nix index df13357aca41..e69de29bb2d1 100644 --- a/pkgs/os-specific/bsd/freebsd/default-branch.nix +++ b/pkgs/os-specific/bsd/freebsd/default-branch.nix @@ -1,39 +0,0 @@ -{ - lib, - config, - freebsdBranches, - freebsdBranchesCross, -}: - -let - branch = - let - fallbackBranch = "release/13.1.0"; - envBranch = builtins.getEnv "NIXPKGS_FREEBSD_BRANCH"; - selectedBranch = - if config.freebsdBranch != null then - config.freebsdBranch - else if envBranch != "" then - envBranch - else - null; - chosenBranch = if selectedBranch != null then selectedBranch else fallbackBranch; - in - if freebsdBranches ? ${chosenBranch} then - chosenBranch - else - throw '' - Unknown FreeBSD branch ${chosenBranch}! - FreeBSD branches normally look like one of: - * `release/..0` for tagged releases without security updates - * `releng/.` for release update branches with security updates - * `stable/` for stable versions working towards the next minor release - * `main` for the latest development version - - Set one with the NIXPKGS_FREEBSD_BRANCH environment variable or by setting `nixpkgs.config.freebsdBranch`. - ''; -in -{ - freebsd = freebsdBranches.${branch}; - freebsdCross = freebsdBranchesCross.${branch}; -} diff --git a/pkgs/os-specific/bsd/freebsd/default.nix b/pkgs/os-specific/bsd/freebsd/default.nix new file mode 100644 index 000000000000..0b8bed04659f --- /dev/null +++ b/pkgs/os-specific/bsd/freebsd/default.nix @@ -0,0 +1,87 @@ +{ + lib, + config, + makeScopeWithSplicing', + generateSplicesForMkScope, + callPackage, + crossLibcStdenv, +}: + +let + versions = builtins.fromJSON (builtins.readFile ./versions.json); + + badBranchError = + branch: + throw '' + Unknown FreeBSD branch ${branch}! + FreeBSD branches normally look like one of: + * `release/..0` for tagged releases without security updates + * `releng/.` for release update branches with security updates + * `stable/` for stable versions working towards the next minor release + * `main` for the latest development version + + Set one with the NIXPKGS_FREEBSD_BRANCH environment variable or by setting `nixpkgs.config.freebsdBranch`. + ''; + + attributes = + let + supported13 = "release/13.1.0"; + supported14 = "release/14.0.0"; + branch = + let + fallbackBranch = supported13; + envBranch = builtins.getEnv "NIXPKGS_FREEBSD_BRANCH"; + selectedBranch = + if config.freebsdBranch != null then + config.freebsdBranch + else if envBranch != "" then + envBranch + else + null; + chosenBranch = if selectedBranch != null then selectedBranch else fallbackBranch; + in + chosenBranch; + in + { + freebsd = versions.${branch} or (badBranchError branch); + freebsd13 = versions.${supported13} or (badBranchError supported13); + freebsd14 = versions.${supported14} or (badBranchError supported14); + }; + + # `./package-set.nix` should never know the name of the package set we + # are constructing; just this function is allowed to know that. This + # is why we: + # + # - do the splicing for cross compilation here + # + # - construct the *anonymized* `buildFreebsd` attribute to be passed + # to `./package-set.nix`. + callFreeBSDWithAttrs = + extraArgs: attribute: sourceData: + let + otherSplices = generateSplicesForMkScope [ attribute ]; + in + makeScopeWithSplicing' { + inherit otherSplices; + f = callPackage ./package-set.nix ( + { + buildFreebsd = otherSplices.selfBuildHost; + inherit sourceData; + versionData = sourceData.version; + patchesRoot = ./patches/${sourceData.version.revision}; + } + // extraArgs + ); + }; + + exportedAttrSetsNative = lib.mapAttrs (callFreeBSDWithAttrs { }) attributes; + + exportedAttrSetsCross = lib.mapAttrs' ( + name: sourceData: + lib.nameValuePair (name + "Cross") ( + callFreeBSDWithAttrs { stdenv = crossLibcStdenv; } name sourceData + ) + ) attributes; +in + +exportedAttrSetsNative // exportedAttrSetsCross diff --git a/pkgs/os-specific/bsd/freebsd/versions.nix b/pkgs/os-specific/bsd/freebsd/versions.nix deleted file mode 100644 index e49396795e2d..000000000000 --- a/pkgs/os-specific/bsd/freebsd/versions.nix +++ /dev/null @@ -1,46 +0,0 @@ -{ - lib, - config, - makeScopeWithSplicing', - generateSplicesForMkScope, - callPackage, - crossLibcStdenv, -}: - -let - versions = builtins.fromJSON (builtins.readFile ./versions.json); - - # `./package-set.nix` should never know the name of the package set we - # are constructing; just this function is allowed to know that. This - # is why we: - # - # - do the splicing for cross compilation here - # - # - construct the *anonymized* `buildFreebsd` attribute to be passed - # to `./package-set.nix`. - callFreeBSDWithAttrs = - extraArgs: branch: sourceData: - let - otherSplices = generateSplicesForMkScope [ - "freebsdBranches" - branch - ]; - in - makeScopeWithSplicing' { - inherit otherSplices; - f = callPackage ./package-set.nix ( - { - buildFreebsd = otherSplices.selfBuildHost; - inherit sourceData; - versionData = sourceData.version; - patchesRoot = ./patches/${sourceData.version.revision}; - } - // extraArgs - ); - }; -in -{ - freebsdBranches = lib.mapAttrs (callFreeBSDWithAttrs { }) versions; - - freebsdBranchesCross = lib.mapAttrs (callFreeBSDWithAttrs { stdenv = crossLibcStdenv; }) versions; -} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 8ded19f002d9..f01a0f12634b 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -40910,16 +40910,10 @@ with pkgs; name = "bsd-setup-hook"; } ../os-specific/bsd/setup-hook.sh; - inherit (callPackage ../os-specific/bsd/freebsd/versions.nix {}) freebsdBranches freebsdBranchesCross; - - freebsd13 = freebsdBranches."release/13.2.0"; - freebsd14 = freebsdBranches."release/14.0.0"; - freebsdGit = freebsdBranches.main; - freebsd13Cross = freebsdBranchesCross."release/13.0.0"; - freebsd14Cross = freebsdBranchesCross."release/14.0.0"; - freebsdGitCross = freebsdBranchesCross.main; - - inherit (callPackage ../os-specific/bsd/freebsd/default-branch.nix {}) freebsd freebsdCross; + inherit (callPackage ../os-specific/bsd/freebsd {}) + freebsd freebsdCross + freebsd13 freebsd13Cross + freebsd14 freebsd14Cross; netbsd = callPackage ../os-specific/bsd/netbsd { }; netbsdCross = callPackage ../os-specific/bsd/netbsd {