2019-04-08 17:28:05 +02:00
|
|
|
|
{
|
|
|
|
|
description = "The purely functional package manager";
|
|
|
|
|
|
2024-03-27 18:16:16 +01:00
|
|
|
|
inputs = {
|
|
|
|
|
nixpkgs.url = "github:NixOS/nixpkgs/nixos-23.11-small";
|
|
|
|
|
nixpkgs-regression.url = "github:NixOS/nixpkgs/215d4d0fd80ca5163643b03a33fde804a29cc1e2";
|
|
|
|
|
pre-commit-hooks = {
|
2024-04-01 19:34:30 +02:00
|
|
|
|
url = "github:cachix/git-hooks.nix";
|
2024-04-08 05:05:19 +02:00
|
|
|
|
flake = false;
|
2024-03-27 18:16:16 +01:00
|
|
|
|
};
|
2024-04-05 01:07:44 +02:00
|
|
|
|
flake-compat = {
|
|
|
|
|
url = "github:edolstra/flake-compat";
|
|
|
|
|
flake = false;
|
|
|
|
|
};
|
2024-03-27 18:16:16 +01:00
|
|
|
|
};
|
2019-04-08 17:28:05 +02:00
|
|
|
|
|
2024-04-05 01:07:44 +02:00
|
|
|
|
outputs =
|
|
|
|
|
{
|
|
|
|
|
self,
|
|
|
|
|
nixpkgs,
|
|
|
|
|
nixpkgs-regression,
|
|
|
|
|
pre-commit-hooks,
|
|
|
|
|
flake-compat,
|
|
|
|
|
}:
|
2019-04-08 17:28:05 +02:00
|
|
|
|
|
2019-10-04 10:45:33 +02:00
|
|
|
|
let
|
2022-03-02 03:40:18 +01:00
|
|
|
|
inherit (nixpkgs) lib;
|
2019-05-29 17:25:41 +02:00
|
|
|
|
|
2022-01-25 00:13:54 +01:00
|
|
|
|
officialRelease = true;
|
2022-12-06 18:00:10 +01:00
|
|
|
|
|
2024-03-04 07:11:19 +01:00
|
|
|
|
# Set to true to build the release notes for the next release.
|
|
|
|
|
buildUnreleasedNotes = false;
|
|
|
|
|
|
2022-03-02 03:40:18 +01:00
|
|
|
|
version = lib.fileContents ./.version + versionSuffix;
|
2020-04-01 00:20:12 +02:00
|
|
|
|
versionSuffix =
|
2024-04-05 01:07:44 +02:00
|
|
|
|
if officialRelease then
|
|
|
|
|
""
|
|
|
|
|
else
|
|
|
|
|
"pre${
|
|
|
|
|
builtins.substring 0 8 (self.lastModifiedDate or self.lastModified or "19700101")
|
|
|
|
|
}_${self.shortRev or "dirty"}";
|
2020-03-13 18:28:01 +01:00
|
|
|
|
|
2023-08-23 20:28:24 +02:00
|
|
|
|
linux32BitSystems = [ "i686-linux" ];
|
2024-04-05 01:07:44 +02:00
|
|
|
|
linux64BitSystems = [
|
|
|
|
|
"x86_64-linux"
|
|
|
|
|
"aarch64-linux"
|
|
|
|
|
];
|
2023-08-23 20:28:24 +02:00
|
|
|
|
linuxSystems = linux32BitSystems ++ linux64BitSystems;
|
2024-04-05 01:07:44 +02:00
|
|
|
|
darwinSystems = [
|
|
|
|
|
"x86_64-darwin"
|
|
|
|
|
"aarch64-darwin"
|
|
|
|
|
];
|
2023-08-23 20:28:24 +02:00
|
|
|
|
systems = linuxSystems ++ darwinSystems;
|
2023-10-05 18:12:18 +02:00
|
|
|
|
|
2023-09-25 19:46:55 +02:00
|
|
|
|
crossSystems = [
|
2024-04-05 01:07:44 +02:00
|
|
|
|
"armv6l-linux"
|
|
|
|
|
"armv7l-linux"
|
|
|
|
|
"x86_64-freebsd13"
|
|
|
|
|
"x86_64-netbsd"
|
2023-09-25 19:46:55 +02:00
|
|
|
|
];
|
2021-02-06 01:07:48 +01:00
|
|
|
|
|
2024-04-05 01:07:44 +02:00
|
|
|
|
stdenvs = [
|
|
|
|
|
"gccStdenv"
|
|
|
|
|
"clangStdenv"
|
|
|
|
|
"stdenv"
|
|
|
|
|
"libcxxStdenv"
|
|
|
|
|
"ccacheStdenv"
|
|
|
|
|
];
|
2021-07-08 17:01:51 +02:00
|
|
|
|
|
2022-03-02 03:40:18 +01:00
|
|
|
|
forAllSystems = lib.genAttrs systems;
|
|
|
|
|
|
|
|
|
|
forAllCrossSystems = lib.genAttrs crossSystems;
|
|
|
|
|
|
2024-04-05 01:07:44 +02:00
|
|
|
|
forAllStdenvs =
|
|
|
|
|
f:
|
|
|
|
|
lib.listToAttrs (
|
|
|
|
|
map (stdenvName: {
|
|
|
|
|
name = "${stdenvName}Packages";
|
|
|
|
|
value = f stdenvName;
|
|
|
|
|
}) stdenvs
|
|
|
|
|
);
|
2021-07-08 17:01:51 +02:00
|
|
|
|
|
2019-10-04 10:45:33 +02:00
|
|
|
|
# Memoize nixpkgs for different platforms for efficiency.
|
2024-04-05 01:07:44 +02:00
|
|
|
|
nixpkgsFor = forAllSystems (
|
|
|
|
|
system:
|
|
|
|
|
let
|
|
|
|
|
make-pkgs =
|
|
|
|
|
crossSystem: stdenv:
|
|
|
|
|
import nixpkgs {
|
|
|
|
|
localSystem = {
|
|
|
|
|
inherit system;
|
|
|
|
|
};
|
|
|
|
|
crossSystem =
|
|
|
|
|
if crossSystem == null then
|
|
|
|
|
null
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
system = crossSystem;
|
|
|
|
|
}
|
|
|
|
|
// lib.optionalAttrs (crossSystem == "x86_64-freebsd13") { useLLVM = true; };
|
|
|
|
|
overlays = [
|
|
|
|
|
(overlayFor (p: p.${stdenv}))
|
|
|
|
|
(final: prev: { nixfmt = final.callPackage ./nix-support/nixfmt.nix { }; })
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
config.permittedInsecurePackages = [ "nix-2.13.6" ];
|
2023-09-25 19:46:55 +02:00
|
|
|
|
};
|
2022-03-02 03:40:18 +01:00
|
|
|
|
stdenvs = forAllStdenvs (make-pkgs null);
|
|
|
|
|
native = stdenvs.stdenvPackages;
|
2024-04-05 01:07:44 +02:00
|
|
|
|
in
|
|
|
|
|
{
|
2022-03-02 03:40:18 +01:00
|
|
|
|
inherit stdenvs native;
|
|
|
|
|
static = native.pkgsStatic;
|
|
|
|
|
cross = forAllCrossSystems (crossSystem: make-pkgs crossSystem "stdenv");
|
2024-04-05 01:07:44 +02:00
|
|
|
|
}
|
|
|
|
|
);
|
2019-10-04 10:45:33 +02:00
|
|
|
|
|
2024-04-05 01:07:44 +02:00
|
|
|
|
binaryTarball =
|
|
|
|
|
nix: pkgs:
|
2022-01-25 01:28:44 +01:00
|
|
|
|
let
|
2022-03-02 03:40:18 +01:00
|
|
|
|
inherit (pkgs) buildPackages;
|
2024-03-14 19:15:46 +01:00
|
|
|
|
installerClosureInfo = buildPackages.closureInfo { rootPaths = [ nix ]; };
|
2022-01-25 01:28:44 +01:00
|
|
|
|
in
|
|
|
|
|
|
|
|
|
|
buildPackages.runCommand "nix-binary-tarball-${version}"
|
2024-04-05 01:07:44 +02:00
|
|
|
|
{
|
|
|
|
|
#nativeBuildInputs = lib.optional (system != "aarch64-linux") shellcheck;
|
2022-01-25 01:28:44 +01:00
|
|
|
|
meta.description = "Distribution-independent Nix bootstrap binaries for ${pkgs.system}";
|
|
|
|
|
}
|
|
|
|
|
''
|
|
|
|
|
cp ${installerClosureInfo}/registration $TMPDIR/reginfo
|
2024-03-14 19:15:46 +01:00
|
|
|
|
|
2022-01-25 01:28:44 +01:00
|
|
|
|
dir=nix-${version}-${pkgs.system}
|
|
|
|
|
fn=$out/$dir.tar.xz
|
|
|
|
|
mkdir -p $out/nix-support
|
|
|
|
|
echo "file binary-dist $fn" >> $out/nix-support/hydra-build-products
|
|
|
|
|
tar cvfJ $fn \
|
|
|
|
|
--owner=0 --group=0 --mode=u+rw,uga+r \
|
2022-09-05 14:44:01 +02:00
|
|
|
|
--mtime='1970-01-01' \
|
2022-01-25 01:28:44 +01:00
|
|
|
|
--absolute-names \
|
|
|
|
|
--hard-dereference \
|
|
|
|
|
--transform "s,$TMPDIR/reginfo,$dir/.reginfo," \
|
|
|
|
|
--transform "s,$NIX_STORE,$dir/store,S" \
|
|
|
|
|
$TMPDIR/reginfo \
|
|
|
|
|
$(cat ${installerClosureInfo}/store-paths)
|
|
|
|
|
'';
|
2021-06-26 07:12:03 +02:00
|
|
|
|
|
2024-04-05 01:07:44 +02:00
|
|
|
|
overlayFor =
|
|
|
|
|
getStdenv: final: prev:
|
2024-03-01 21:15:44 +01:00
|
|
|
|
let
|
|
|
|
|
currentStdenv = getStdenv final;
|
2024-04-05 01:07:44 +02:00
|
|
|
|
in
|
|
|
|
|
{
|
2024-03-01 21:15:44 +01:00
|
|
|
|
nixStable = prev.nix;
|
2020-02-15 21:30:26 +01:00
|
|
|
|
|
2024-03-01 21:15:44 +01:00
|
|
|
|
# Forward from the previous stage as we don’t want it to pick the lowdown override
|
|
|
|
|
nixUnstable = prev.nixUnstable;
|
|
|
|
|
|
2024-04-05 01:07:44 +02:00
|
|
|
|
build-release-notes = final.buildPackages.callPackage ./maintainers/build-release-notes.nix { };
|
2024-04-09 00:08:29 +02:00
|
|
|
|
check-headers = final.buildPackages.callPackage ./maintainers/check-headers.nix { };
|
2024-03-19 07:03:48 +01:00
|
|
|
|
clangbuildanalyzer = final.buildPackages.callPackage ./misc/clangbuildanalyzer.nix { };
|
2024-03-01 21:15:44 +01:00
|
|
|
|
|
|
|
|
|
default-busybox-sandbox-shell = final.busybox.override {
|
|
|
|
|
useMusl = true;
|
|
|
|
|
enableStatic = true;
|
|
|
|
|
enableMinimal = true;
|
|
|
|
|
extraConfig = ''
|
|
|
|
|
CONFIG_FEATURE_FANCY_ECHO y
|
|
|
|
|
CONFIG_FEATURE_SH_MATH y
|
|
|
|
|
CONFIG_FEATURE_SH_MATH_64 y
|
|
|
|
|
|
|
|
|
|
CONFIG_ASH y
|
|
|
|
|
CONFIG_ASH_OPTIMIZE_FOR_SIZE y
|
|
|
|
|
|
|
|
|
|
CONFIG_ASH_ALIAS y
|
|
|
|
|
CONFIG_ASH_BASH_COMPAT y
|
|
|
|
|
CONFIG_ASH_CMDCMD y
|
|
|
|
|
CONFIG_ASH_ECHO y
|
|
|
|
|
CONFIG_ASH_GETOPTS y
|
|
|
|
|
CONFIG_ASH_INTERNAL_GLOB y
|
|
|
|
|
CONFIG_ASH_JOB_CONTROL y
|
|
|
|
|
CONFIG_ASH_PRINTF y
|
|
|
|
|
CONFIG_ASH_TEST y
|
2024-03-08 20:51:26 +01:00
|
|
|
|
'';
|
2024-03-01 21:15:44 +01:00
|
|
|
|
};
|
2024-03-08 20:51:26 +01:00
|
|
|
|
|
2024-03-01 21:15:44 +01:00
|
|
|
|
nix = final.callPackage ./package.nix {
|
2024-04-07 02:12:35 +02:00
|
|
|
|
inherit versionSuffix;
|
2024-03-01 21:15:44 +01:00
|
|
|
|
stdenv = currentStdenv;
|
|
|
|
|
busybox-sandbox-shell = final.busybox-sandbox-shell or final.default-busybox-sandbox-shell;
|
|
|
|
|
};
|
2024-04-06 23:44:27 +02:00
|
|
|
|
|
|
|
|
|
# Export the patched version of boehmgc that Lix uses into the overlay
|
|
|
|
|
# for consumers of this flake.
|
|
|
|
|
boehmgc-nix = final.nix.boehmgc-nix;
|
2020-07-22 13:51:11 +02:00
|
|
|
|
};
|
2024-04-05 01:07:44 +02:00
|
|
|
|
in
|
|
|
|
|
{
|
2021-07-08 17:01:51 +02:00
|
|
|
|
# A Nixpkgs overlay that overrides the 'nix' and
|
|
|
|
|
# 'nix.perl-bindings' packages.
|
2022-02-11 15:05:07 +01:00
|
|
|
|
overlays.default = overlayFor (p: p.stdenv);
|
2021-07-08 17:01:51 +02:00
|
|
|
|
|
2020-03-13 18:31:16 +01:00
|
|
|
|
hydraJobs = {
|
|
|
|
|
|
2019-10-04 10:45:33 +02:00
|
|
|
|
# Binary package for various platforms.
|
2022-03-02 03:40:18 +01:00
|
|
|
|
build = forAllSystems (system: self.packages.${system}.nix);
|
2020-07-30 21:59:57 +02:00
|
|
|
|
|
2024-04-05 01:07:44 +02:00
|
|
|
|
rl-next = forAllSystems (
|
|
|
|
|
system:
|
2024-04-06 15:25:37 +02:00
|
|
|
|
let
|
2024-04-05 01:07:44 +02:00
|
|
|
|
rl-next-check =
|
|
|
|
|
name: dir:
|
|
|
|
|
let
|
|
|
|
|
pkgs = nixpkgsFor.${system}.native;
|
|
|
|
|
in
|
|
|
|
|
pkgs.buildPackages.runCommand "test-${name}-release-notes" { } ''
|
|
|
|
|
LANG=C.UTF-8 ${lib.getExe pkgs.build-release-notes} ${dir} >$out
|
|
|
|
|
'';
|
2024-04-06 15:25:37 +02:00
|
|
|
|
in
|
2024-04-05 01:07:44 +02:00
|
|
|
|
{
|
|
|
|
|
user = rl-next-check "rl-next" ./doc/manual/rl-next;
|
|
|
|
|
dev = rl-next-check "rl-next-dev" ./doc/manual/rl-next-dev;
|
|
|
|
|
}
|
|
|
|
|
);
|
2024-04-06 15:25:37 +02:00
|
|
|
|
|
build: optionally build and install with meson
This commit adds several meson.build, which successfully build and
install Lix executables, libraries, and headers. Meson does not yet
build docs, Perl bindings, or run tests, which will be added in
following commits. As such, this commit does not remove the existing
build system, or make it the default, and also as such, this commit has
several FIXMEs and TODOs as notes for what should be done before the
existing autoconf + make buildsystem can be removed and Meson made the
default. This commit does not modify any source files.
A Meson-enabled build is also added as a Hydra job, and to
`nix flake check`.
Change-Id: I667c8685b13b7bab91e281053f807a11616ae3d4
2024-03-21 20:41:23 +01:00
|
|
|
|
# FIXME(Qyriad): remove this when the migration to Meson has been completed.
|
2024-03-25 22:16:38 +01:00
|
|
|
|
# NOTE: mesonBuildClang depends on mesonBuild depends on build to avoid OOMs
|
|
|
|
|
# on aarch64 builders caused by too many parallel compiler/linker processes.
|
2024-04-05 01:07:44 +02:00
|
|
|
|
mesonBuild = forAllSystems (
|
|
|
|
|
system:
|
|
|
|
|
(self.packages.${system}.nix.override { buildWithMeson = true; }).overrideAttrs (prev: {
|
2024-03-25 22:16:38 +01:00
|
|
|
|
buildInputs = prev.buildInputs ++ [ self.packages.${system}.nix ];
|
|
|
|
|
})
|
build: optionally build and install with meson
This commit adds several meson.build, which successfully build and
install Lix executables, libraries, and headers. Meson does not yet
build docs, Perl bindings, or run tests, which will be added in
following commits. As such, this commit does not remove the existing
build system, or make it the default, and also as such, this commit has
several FIXMEs and TODOs as notes for what should be done before the
existing autoconf + make buildsystem can be removed and Meson made the
default. This commit does not modify any source files.
A Meson-enabled build is also added as a Hydra job, and to
`nix flake check`.
Change-Id: I667c8685b13b7bab91e281053f807a11616ae3d4
2024-03-21 20:41:23 +01:00
|
|
|
|
);
|
2024-04-05 01:07:44 +02:00
|
|
|
|
mesonBuildClang = forAllSystems (
|
|
|
|
|
system:
|
|
|
|
|
(nixpkgsFor.${system}.stdenvs.clangStdenvPackages.nix.override { buildWithMeson = true; })
|
|
|
|
|
.overrideAttrs
|
|
|
|
|
(prev: {
|
|
|
|
|
buildInputs = prev.buildInputs ++ [ self.hydraJobs.mesonBuild.${system} ];
|
|
|
|
|
})
|
|
|
|
|
);
|
build: optionally build and install with meson
This commit adds several meson.build, which successfully build and
install Lix executables, libraries, and headers. Meson does not yet
build docs, Perl bindings, or run tests, which will be added in
following commits. As such, this commit does not remove the existing
build system, or make it the default, and also as such, this commit has
several FIXMEs and TODOs as notes for what should be done before the
existing autoconf + make buildsystem can be removed and Meson made the
default. This commit does not modify any source files.
A Meson-enabled build is also added as a Hydra job, and to
`nix flake check`.
Change-Id: I667c8685b13b7bab91e281053f807a11616ae3d4
2024-03-21 20:41:23 +01:00
|
|
|
|
|
2019-10-04 10:45:33 +02:00
|
|
|
|
# Perl bindings for various platforms.
|
2022-03-02 03:40:18 +01:00
|
|
|
|
perlBindings = forAllSystems (system: nixpkgsFor.${system}.native.nix.perl-bindings);
|
2019-10-04 10:45:33 +02:00
|
|
|
|
|
|
|
|
|
# Binary tarball for various platforms, containing a Nix store
|
2024-03-14 19:15:46 +01:00
|
|
|
|
# with the closure of 'nix' package.
|
2024-04-05 01:07:44 +02:00
|
|
|
|
binaryTarball = forAllSystems (
|
|
|
|
|
system: binaryTarball nixpkgsFor.${system}.native.nix nixpkgsFor.${system}.native
|
|
|
|
|
);
|
2022-03-02 03:40:18 +01:00
|
|
|
|
|
2021-10-31 00:22:35 +02:00
|
|
|
|
# docker image with Nix inside
|
2022-03-02 03:40:18 +01:00
|
|
|
|
dockerImage = lib.genAttrs linux64BitSystems (system: self.packages.${system}.dockerImage);
|
2021-10-31 00:22:35 +02:00
|
|
|
|
|
2023-02-13 18:37:35 +01:00
|
|
|
|
# API docs for Nix's unstable internal C++ interfaces.
|
2024-04-05 01:07:44 +02:00
|
|
|
|
internal-api-docs =
|
|
|
|
|
let
|
|
|
|
|
nixpkgs = nixpkgsFor.x86_64-linux.native;
|
|
|
|
|
inherit (nixpkgs) pkgs;
|
|
|
|
|
|
|
|
|
|
nix = pkgs.callPackage ./package.nix {
|
|
|
|
|
inherit versionSuffix officialRelease buildUnreleasedNotes;
|
|
|
|
|
inherit (pkgs) build-release-notes;
|
|
|
|
|
internalApiDocs = true;
|
|
|
|
|
busybox-sandbox-shell = pkgs.busybox-sandbox-shell;
|
|
|
|
|
};
|
|
|
|
|
in
|
2024-03-09 05:09:11 +01:00
|
|
|
|
nix.overrideAttrs (prev: {
|
|
|
|
|
# This Hydra job is just for the internal API docs.
|
|
|
|
|
# We don't need the build artifacts here.
|
|
|
|
|
dontBuild = true;
|
|
|
|
|
doCheck = false;
|
|
|
|
|
doInstallCheck = false;
|
|
|
|
|
});
|
2023-02-13 18:37:35 +01:00
|
|
|
|
|
2019-10-04 10:45:33 +02:00
|
|
|
|
# System tests.
|
2024-03-05 21:11:59 +01:00
|
|
|
|
tests = import ./tests/nixos { inherit lib nixpkgs nixpkgsFor; } // {
|
2022-02-23 15:58:09 +01:00
|
|
|
|
|
2024-03-05 21:11:59 +01:00
|
|
|
|
# Make sure that nix-env still produces the exact same result
|
|
|
|
|
# on a particular version of Nixpkgs.
|
|
|
|
|
evalNixpkgs =
|
|
|
|
|
with nixpkgsFor.x86_64-linux.native;
|
2024-04-05 01:07:44 +02:00
|
|
|
|
runCommand "eval-nixos" { buildInputs = [ nix ]; } ''
|
|
|
|
|
type -p nix-env
|
|
|
|
|
# Note: we're filtering out nixos-install-tools because https://github.com/NixOS/nixpkgs/pull/153594#issuecomment-1020530593.
|
|
|
|
|
time nix-env --store dummy:// -f ${nixpkgs-regression} -qaP --drv-path | sort | grep -v nixos-install-tools > packages
|
|
|
|
|
[[ $(sha1sum < packages | cut -c1-40) = 402242fca90874112b34718b8199d844e8b03d12 ]]
|
|
|
|
|
mkdir $out
|
|
|
|
|
'';
|
2022-01-25 00:02:48 +01:00
|
|
|
|
|
2024-04-05 01:07:44 +02:00
|
|
|
|
nixpkgsLibTests = forAllSystems (
|
|
|
|
|
system:
|
|
|
|
|
import (nixpkgs + "/lib/tests/release.nix") {
|
|
|
|
|
pkgs = nixpkgsFor.${system}.native;
|
|
|
|
|
nixVersions = [ self.packages.${system}.nix ];
|
|
|
|
|
}
|
|
|
|
|
);
|
2024-03-05 21:11:59 +01:00
|
|
|
|
};
|
2024-03-27 18:16:16 +01:00
|
|
|
|
|
2024-04-08 05:05:19 +02:00
|
|
|
|
pre-commit = forAllSystems (
|
|
|
|
|
system:
|
|
|
|
|
let
|
|
|
|
|
pkgs = nixpkgsFor.${system}.native;
|
|
|
|
|
# Import pre-commit bypassing the flake because flakes don't let
|
|
|
|
|
# you have overlays. Also their implementation forces an
|
|
|
|
|
# unnecessary reimport of nixpkgs for our use cases.
|
|
|
|
|
tools = import (pre-commit-hooks + "/nix/call-tools.nix") pkgs;
|
|
|
|
|
pre-commit-run = pkgs.callPackage (pre-commit-hooks + "/nix/run.nix") {
|
|
|
|
|
inherit tools;
|
|
|
|
|
isFlakes = true;
|
|
|
|
|
# unused!
|
|
|
|
|
gitignore-nix-src = builtins.throw "gitignore-nix-src is unused";
|
|
|
|
|
};
|
|
|
|
|
in
|
|
|
|
|
pre-commit-run {
|
2024-04-05 01:07:44 +02:00
|
|
|
|
src = self;
|
|
|
|
|
hooks = {
|
|
|
|
|
no-commit-to-branch = {
|
|
|
|
|
enable = true;
|
|
|
|
|
settings.branch = [ "main" ];
|
|
|
|
|
};
|
|
|
|
|
check-case-conflicts.enable = true;
|
|
|
|
|
check-executables-have-shebangs = {
|
|
|
|
|
enable = true;
|
|
|
|
|
stages = [ "commit" ];
|
|
|
|
|
};
|
|
|
|
|
check-shebang-scripts-are-executable = {
|
|
|
|
|
enable = true;
|
|
|
|
|
stages = [ "commit" ];
|
|
|
|
|
};
|
|
|
|
|
check-symlinks = {
|
|
|
|
|
enable = true;
|
|
|
|
|
excludes = [ "^tests/functional/lang/symlink-resolution/broken$" ];
|
|
|
|
|
};
|
|
|
|
|
check-merge-conflicts.enable = true;
|
|
|
|
|
end-of-file-fixer = {
|
|
|
|
|
enable = true;
|
|
|
|
|
excludes = [
|
|
|
|
|
"\\.drv$"
|
|
|
|
|
"^tests/functional/lang/"
|
|
|
|
|
];
|
|
|
|
|
};
|
|
|
|
|
mixed-line-endings = {
|
|
|
|
|
enable = true;
|
|
|
|
|
excludes = [ "^tests/functional/lang/" ];
|
|
|
|
|
};
|
2024-04-08 05:05:19 +02:00
|
|
|
|
release-notes = {
|
|
|
|
|
enable = true;
|
|
|
|
|
package = pkgs.build-release-notes;
|
|
|
|
|
files = "^doc/manual/rl-next(-dev)?";
|
|
|
|
|
pass_filenames = false;
|
|
|
|
|
entry = ''
|
|
|
|
|
${lib.getExe pkgs.build-release-notes} doc/manual/rl-next doc/manual/rl-next-dev
|
|
|
|
|
'';
|
|
|
|
|
};
|
2024-04-09 00:08:29 +02:00
|
|
|
|
check-headers = {
|
|
|
|
|
enable = true;
|
|
|
|
|
package = pkgs.check-headers;
|
|
|
|
|
files = "^src/";
|
|
|
|
|
types = [
|
|
|
|
|
"c++"
|
|
|
|
|
"file"
|
|
|
|
|
"header"
|
|
|
|
|
];
|
|
|
|
|
# generated files; these will never actually be seen by this
|
|
|
|
|
# check, and are left here as documentation
|
|
|
|
|
excludes = [
|
|
|
|
|
"(parser|lexer)-tab\\.hh$"
|
|
|
|
|
"\\.gen\\.hh$"
|
|
|
|
|
];
|
|
|
|
|
entry = lib.getExe pkgs.check-headers;
|
|
|
|
|
};
|
2024-04-05 01:07:44 +02:00
|
|
|
|
# TODO: Once the test suite is nicer, clean up and start
|
|
|
|
|
# enforcing trailing whitespace on tests that don't explicitly
|
|
|
|
|
# check for it.
|
|
|
|
|
trim-trailing-whitespace = {
|
|
|
|
|
enable = true;
|
|
|
|
|
stages = [ "commit" ];
|
|
|
|
|
excludes = [ "^tests/functional/lang/" ];
|
|
|
|
|
};
|
|
|
|
|
treefmt = {
|
|
|
|
|
enable = true;
|
2024-04-08 05:05:19 +02:00
|
|
|
|
settings.formatters = [ pkgs.nixfmt ];
|
2024-04-05 01:07:44 +02:00
|
|
|
|
};
|
2024-03-27 20:28:44 +01:00
|
|
|
|
};
|
2024-04-05 01:07:44 +02:00
|
|
|
|
}
|
2024-04-08 05:05:19 +02:00
|
|
|
|
);
|
2021-10-15 12:36:29 +02:00
|
|
|
|
};
|
|
|
|
|
|
2024-04-06 15:25:37 +02:00
|
|
|
|
# NOTE *do not* add fresh derivations to checks, always add them to
|
|
|
|
|
# hydraJobs first (so CI will pick them up) and only link them here
|
2024-04-05 01:07:44 +02:00
|
|
|
|
checks = forAllSystems (
|
|
|
|
|
system:
|
|
|
|
|
{
|
|
|
|
|
# FIXME(Qyriad): remove this when the migration to Meson has been completed.
|
|
|
|
|
mesonBuild = self.hydraJobs.mesonBuild.${system};
|
|
|
|
|
mesonBuildClang = self.hydraJobs.mesonBuildClang.${system};
|
|
|
|
|
binaryTarball = self.hydraJobs.binaryTarball.${system};
|
|
|
|
|
perlBindings = self.hydraJobs.perlBindings.${system};
|
|
|
|
|
nixpkgsLibTests = self.hydraJobs.tests.nixpkgsLibTests.${system};
|
|
|
|
|
rl-next = self.hydraJobs.rl-next.${system}.user;
|
|
|
|
|
rl-next-dev = self.hydraJobs.rl-next.${system}.dev;
|
|
|
|
|
pre-commit = self.hydraJobs.pre-commit.${system};
|
|
|
|
|
}
|
|
|
|
|
// (lib.optionalAttrs (builtins.elem system linux64BitSystems)) {
|
|
|
|
|
dockerImage = self.hydraJobs.dockerImage.${system};
|
|
|
|
|
}
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
packages = forAllSystems (
|
|
|
|
|
system:
|
|
|
|
|
rec {
|
|
|
|
|
inherit (nixpkgsFor.${system}.native) nix;
|
|
|
|
|
default = nix;
|
|
|
|
|
}
|
|
|
|
|
// (
|
|
|
|
|
lib.optionalAttrs (builtins.elem system linux64BitSystems) {
|
|
|
|
|
nix-static = nixpkgsFor.${system}.static.nix;
|
|
|
|
|
dockerImage =
|
|
|
|
|
let
|
|
|
|
|
pkgs = nixpkgsFor.${system}.native;
|
|
|
|
|
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
|
|
|
|
|
'';
|
|
|
|
|
}
|
|
|
|
|
// builtins.listToAttrs (
|
|
|
|
|
map (crossSystem: {
|
|
|
|
|
name = "nix-${crossSystem}";
|
|
|
|
|
value = nixpkgsFor.${system}.cross.${crossSystem}.nix;
|
|
|
|
|
}) crossSystems
|
|
|
|
|
)
|
|
|
|
|
// builtins.listToAttrs (
|
|
|
|
|
map (stdenvName: {
|
|
|
|
|
name = "nix-${stdenvName}";
|
|
|
|
|
value = nixpkgsFor.${system}.stdenvs."${stdenvName}Packages".nix;
|
|
|
|
|
}) stdenvs
|
|
|
|
|
)
|
|
|
|
|
)
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
devShells =
|
|
|
|
|
let
|
|
|
|
|
makeShell =
|
|
|
|
|
pkgs: stdenv:
|
|
|
|
|
let
|
|
|
|
|
nix = pkgs.callPackage ./package.nix {
|
|
|
|
|
inherit stdenv versionSuffix;
|
|
|
|
|
busybox-sandbox-shell = pkgs.busybox-sandbox-shell or pkgs.default-busybox-sandbox;
|
|
|
|
|
forDevShell = true;
|
|
|
|
|
};
|
|
|
|
|
pre-commit = self.hydraJobs.pre-commit.${pkgs.system} or { };
|
|
|
|
|
in
|
2024-03-26 18:23:55 +01:00
|
|
|
|
(nix.override {
|
|
|
|
|
buildUnreleasedNotes = true;
|
|
|
|
|
officialRelease = false;
|
2024-04-05 01:07:44 +02:00
|
|
|
|
}).overrideAttrs
|
|
|
|
|
(
|
|
|
|
|
prev:
|
|
|
|
|
{
|
|
|
|
|
# Required for clang-tidy checks
|
|
|
|
|
buildInputs =
|
|
|
|
|
prev.buildInputs
|
|
|
|
|
++ [
|
|
|
|
|
pkgs.just
|
|
|
|
|
pkgs.nixfmt
|
|
|
|
|
]
|
|
|
|
|
++ lib.optional (pre-commit ? enabledPackages) pre-commit.enabledPackages
|
|
|
|
|
++ lib.optionals (stdenv.cc.isClang) [
|
|
|
|
|
pkgs.llvmPackages.llvm
|
|
|
|
|
pkgs.llvmPackages.clang-unwrapped.dev
|
|
|
|
|
];
|
|
|
|
|
nativeBuildInputs =
|
|
|
|
|
prev.nativeBuildInputs
|
|
|
|
|
++ lib.optional (stdenv.cc.isClang && !stdenv.buildPlatform.isDarwin) pkgs.buildPackages.bear
|
|
|
|
|
# Required for clang-tidy checks
|
|
|
|
|
++ lib.optionals (stdenv.cc.isClang) [
|
|
|
|
|
pkgs.buildPackages.cmake
|
|
|
|
|
pkgs.buildPackages.ninja
|
|
|
|
|
pkgs.buildPackages.llvmPackages.llvm.dev
|
|
|
|
|
]
|
|
|
|
|
++
|
|
|
|
|
lib.optional (stdenv.cc.isClang && stdenv.hostPlatform == stdenv.buildPlatform)
|
|
|
|
|
# for some reason that seems accidental and was changed in
|
|
|
|
|
# NixOS 24.05-pre, clang-tools is pinned to LLVM 14 when
|
|
|
|
|
# default LLVM is newer.
|
|
|
|
|
(pkgs.buildPackages.clang-tools.override { inherit (pkgs.buildPackages) llvmPackages; })
|
|
|
|
|
++ [
|
|
|
|
|
# FIXME(Qyriad): remove once the migration to Meson is complete.
|
|
|
|
|
pkgs.buildPackages.meson
|
|
|
|
|
pkgs.buildPackages.ninja
|
|
|
|
|
pkgs.buildPackages.cmake
|
|
|
|
|
|
|
|
|
|
pkgs.buildPackages.clangbuildanalyzer
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
src = null;
|
|
|
|
|
|
|
|
|
|
installFlags = "sysconfdir=$(out)/etc";
|
|
|
|
|
strictDeps = false;
|
|
|
|
|
|
|
|
|
|
shellHook = ''
|
|
|
|
|
PATH=$prefix/bin:$PATH
|
|
|
|
|
unset PYTHONPATH
|
|
|
|
|
export MANPATH=$out/share/man:$MANPATH
|
|
|
|
|
|
|
|
|
|
# Make bash completion work.
|
|
|
|
|
XDG_DATA_DIRS+=:$out/share
|
|
|
|
|
|
|
|
|
|
${lib.optionalString (pre-commit ? shellHook) pre-commit.shellHook}
|
|
|
|
|
'';
|
|
|
|
|
}
|
|
|
|
|
// lib.optionalAttrs (stdenv.buildPlatform.isLinux && pkgs.glibcLocales != null) {
|
|
|
|
|
# Required to make non-NixOS Linux not complain about missing locale files during configure in a dev shell
|
|
|
|
|
LOCALE_ARCHIVE = "${lib.getLib pkgs.glibcLocales}/lib/locale/locale-archive";
|
|
|
|
|
}
|
|
|
|
|
);
|
2022-03-02 03:40:18 +01:00
|
|
|
|
in
|
2024-04-05 01:07:44 +02:00
|
|
|
|
forAllSystems (
|
|
|
|
|
system:
|
2022-03-02 03:40:18 +01:00
|
|
|
|
let
|
2024-04-05 01:07:44 +02:00
|
|
|
|
makeShells =
|
|
|
|
|
prefix: pkgs:
|
|
|
|
|
lib.mapAttrs' (k: v: lib.nameValuePair "${prefix}-${k}" v) (
|
|
|
|
|
forAllStdenvs (stdenvName: makeShell pkgs pkgs.${stdenvName})
|
|
|
|
|
);
|
2022-03-02 03:40:18 +01:00
|
|
|
|
in
|
2024-04-05 01:07:44 +02:00
|
|
|
|
(makeShells "native" nixpkgsFor.${system}.native)
|
|
|
|
|
// (makeShells "static" nixpkgsFor.${system}.static)
|
|
|
|
|
// (forAllCrossSystems (
|
|
|
|
|
crossSystem:
|
|
|
|
|
let
|
|
|
|
|
pkgs = nixpkgsFor.${system}.cross.${crossSystem};
|
|
|
|
|
in
|
|
|
|
|
makeShell pkgs pkgs.stdenv
|
|
|
|
|
))
|
|
|
|
|
// {
|
|
|
|
|
default = self.devShells.${system}.native-stdenvPackages;
|
|
|
|
|
}
|
2022-03-02 03:40:18 +01:00
|
|
|
|
);
|
2024-04-05 01:07:44 +02:00
|
|
|
|
};
|
2019-04-08 17:28:05 +02:00
|
|
|
|
}
|