aboutsummaryrefslogtreecommitdiff
path: root/flake.nix
diff options
context:
space:
mode:
Diffstat (limited to 'flake.nix')
-rw-r--r--flake.nix117
1 files changed, 83 insertions, 34 deletions
diff --git a/flake.nix b/flake.nix
index 5c00f744e..9a5d188ae 100644
--- a/flake.nix
+++ b/flake.nix
@@ -22,15 +22,36 @@
crossSystems = [ "armv6l-linux" "armv7l-linux" ];
+ stdenvs = [ "gccStdenv" "clangStdenv" "clang11Stdenv" "stdenv" ];
+
forAllSystems = f: nixpkgs.lib.genAttrs systems (system: f system);
+ forAllSystemsAndStdenvs = f: forAllSystems (system:
+ nixpkgs.lib.listToAttrs
+ (map
+ (n:
+ nixpkgs.lib.nameValuePair "${n}Packages" (
+ f system n
+ )) stdenvs
+ )
+ );
+
+ forAllStdenvs = stdenvs: f: nixpkgs.lib.genAttrs stdenvs (stdenv: f stdenv);
# Memoize nixpkgs for different platforms for efficiency.
- nixpkgsFor = forAllSystems (system:
- import nixpkgs {
- inherit system;
- overlays = [ self.overlay ];
- }
- );
+ nixpkgsFor =
+ let stdenvsPackages = forAllSystemsAndStdenvs
+ (system: stdenv:
+ import nixpkgs {
+ inherit system;
+ overlays = [
+ (overlayFor (p: p.${stdenv}))
+ ];
+ }
+ );
+ in
+ # Add the `stdenvPackages` at toplevel, both because these are the ones
+ # we want most of the time and for backwards compatibility
+ forAllSystems (system: stdenvsPackages.${system} // stdenvsPackages.${system}.stdenvPackages);
commonDeps = pkgs: with pkgs; rec {
# Use "busybox-sandbox-shell" if present,
@@ -91,7 +112,7 @@
libarchive
boost
lowdown-nix
- gmock
+ gtest
]
++ lib.optionals stdenv.isLinux [libseccomp]
++ lib.optional (stdenv.isLinux || stdenv.isDarwin) libsodium
@@ -255,18 +276,15 @@
$(cat ${installerClosureInfo}/store-paths)
'';
- in {
-
- # A Nixpkgs overlay that overrides the 'nix' and
- # 'nix.perl-bindings' packages.
- overlay = final: prev: {
-
+ overlayFor = getStdenv: final: prev:
+ let currentStdenv = getStdenv final; in
+ {
nixStable = prev.nix;
# Forward from the previous stage as we don’t want it to pick the lowdown override
nixUnstable = prev.nixUnstable;
- nix = with final; with commonDeps pkgs; stdenv.mkDerivation {
+ nix = with final; with commonDeps pkgs; currentStdenv.mkDerivation {
name = "nix-${version}";
inherit version;
@@ -288,9 +306,9 @@
mkdir -p $out/lib
cp -pd ${boost}/lib/{libboost_context*,libboost_thread*,libboost_system*} $out/lib
rm -f $out/lib/*.a
- ${lib.optionalString stdenv.isLinux ''
+ ${lib.optionalString currentStdenv.isLinux ''
chmod u+w $out/lib/*.so.*
- patchelf --set-rpath $out/lib:${stdenv.cc.cc.lib}/lib $out/lib/libboost_thread.so.*
+ patchelf --set-rpath $out/lib:${currentStdenv.cc.cc.lib}/lib $out/lib/libboost_thread.so.*
''}
'';
@@ -317,7 +335,7 @@
strictDeps = true;
- passthru.perl-bindings = with final; stdenv.mkDerivation {
+ passthru.perl-bindings = with final; currentStdenv.mkDerivation {
name = "nix-perl-${version}";
src = self;
@@ -336,8 +354,8 @@
pkgs.perl
boost
]
- ++ lib.optional (stdenv.isLinux || stdenv.isDarwin) libsodium
- ++ lib.optional stdenv.isDarwin darwin.apple_sdk.frameworks.Security;
+ ++ lib.optional (currentStdenv.isLinux || currentStdenv.isDarwin) libsodium
+ ++ lib.optional currentStdenv.isDarwin darwin.apple_sdk.frameworks.Security;
configureFlags = ''
--with-dbi=${perlPackages.DBI}/${pkgs.perl.libPrefix}
@@ -351,7 +369,7 @@
};
- lowdown-nix = with final; stdenv.mkDerivation rec {
+ lowdown-nix = with final; currentStdenv.mkDerivation rec {
name = "lowdown-0.9.0";
src = lowdown-src;
@@ -361,15 +379,20 @@
nativeBuildInputs = [ buildPackages.which ];
configurePhase = ''
- ${if (stdenv.isDarwin && stdenv.isAarch64) then "echo \"HAVE_SANDBOX_INIT=false\" > configure.local" else ""}
+ ${if (currentStdenv.isDarwin && currentStdenv.isAarch64) then "echo \"HAVE_SANDBOX_INIT=false\" > configure.local" else ""}
./configure \
PREFIX=${placeholder "dev"} \
BINDIR=${placeholder "bin"}/bin
- '';
+ '';
};
-
};
+ in {
+
+ # A Nixpkgs overlay that overrides the 'nix' and
+ # 'nix.perl-bindings' packages.
+ overlay = overlayFor (p: p.stdenv);
+
hydraJobs = {
# Binary package for various platforms.
@@ -405,6 +428,21 @@
installerScript = installScriptFor [ "x86_64-linux" "i686-linux" "aarch64-linux" "x86_64-darwin" "aarch64-darwin" "armv6l-linux" "armv7l-linux" ];
installerScriptForGHA = installScriptFor [ "x86_64-linux" "x86_64-darwin" "armv6l-linux" "armv7l-linux"];
+ # docker image with Nix inside
+ dockerImage = nixpkgs.lib.genAttrs linux64BitSystems (system:
+ let
+ pkgs = nixpkgsFor.${system};
+ image = import ./docker.nix { inherit pkgs; tag = version; };
+ in pkgs.runCommand "docker-image-tarball-${version}"
+ { meta.description = "Docker image with Nix for ${system}";
+ }
+ ''
+ mkdir -p $out/nix-support
+ image=$out/image.tar.gz
+ ln -s ${image} $image
+ echo "file binary-dist $image" >> $out/nix-support/hydra-build-products
+ '');
+
# Line coverage analysis.
coverage =
with nixpkgsFor.x86_64-linux;
@@ -489,12 +527,7 @@
'';
*/
- };
-
- checks = forAllSystems (system: {
- binaryTarball = self.hydraJobs.binaryTarball.${system};
- perlBindings = self.hydraJobs.perlBindings.${system};
- installTests =
+ installTests = forAllSystems (system:
let pkgs = nixpkgsFor.${system}; in
pkgs.runCommand "install-tests" {
againstSelf = testNixVersions pkgs pkgs.nix pkgs.pkgs.nix;
@@ -506,8 +539,17 @@
# Disabled because the latest stable version doesn't handle
# `NIX_DAEMON_SOCKET_PATH` which is required for the tests to work
# againstLatestStable = testNixVersions pkgs pkgs.nix pkgs.nixStable;
- } "touch $out";
- });
+ } "touch $out");
+
+ };
+
+ checks = forAllSystems (system: {
+ binaryTarball = self.hydraJobs.binaryTarball.${system};
+ perlBindings = self.hydraJobs.perlBindings.${system};
+ installTests = self.hydraJobs.installTests.${system};
+ } // (if system == "x86_64-linux" then {
+ dockerImage = self.hydraJobs.dockerImage.${system};
+ } else {}));
packages = forAllSystems (system: {
inherit (nixpkgsFor.${system}) nix;
@@ -591,15 +633,22 @@
doInstallCheck = true;
installCheckFlags = "sysconfdir=$(out)/etc";
};
- }) crossSystems)));
+ }) crossSystems)) // (builtins.listToAttrs (map (stdenvName:
+ nixpkgsFor.${system}.lib.nameValuePair
+ "nix-${stdenvName}"
+ nixpkgsFor.${system}."${stdenvName}Packages".nix
+ ) stdenvs))
+ );
defaultPackage = forAllSystems (system: self.packages.${system}.nix);
- devShell = forAllSystems (system:
+ devShell = forAllSystems (system: self.devShells.${system}.stdenvPackages);
+
+ devShells = forAllSystemsAndStdenvs (system: stdenv:
with nixpkgsFor.${system};
with commonDeps pkgs;
- stdenv.mkDerivation {
+ nixpkgsFor.${system}.${stdenv}.mkDerivation {
name = "nix";
outputs = [ "out" "dev" "doc" ];