Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 20 additions & 0 deletions doc/build-helpers/testers.chapter.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,26 @@ If the `moduleNames` argument is omitted, `hasPkgConfigModules` will use `meta.p

:::

## `hasCmakeConfigModules` {#tester-hasCmakeConfigModules}

Checks whether a package exposes a given list of `*config.cmake` modules.
Note the moduleNames used in cmake find_package are case sensitive.

:::{.example #ex-hascmakeconfigmodules}

# Check that `*config.cmake` modules are exposed using explicit module names

```nix
{
passthru.tests.cmake-config = testers.hasCmakeConfigModules {
package = finalAttrs.finalPackage;
moduleNames = [ "Foo" ];
};
}
```

:::

## `lycheeLinkCheck` {#tester-lycheeLinkCheck}

Check a packaged static site's links with the [`lychee` package](https://search.nixos.org/packages?show=lychee&type=packages&query=lychee).
Expand Down
6 changes: 6 additions & 0 deletions doc/redirects.json
Original file line number Diff line number Diff line change
Expand Up @@ -1694,6 +1694,12 @@
"ex-haspkgconfigmodules-explicitmodules": [
"index.html#ex-haspkgconfigmodules-explicitmodules"
],
"tester-hasCmakeConfigModules": [
"index.html#tester-hasCmakeConfigModules"
],
"ex-hascmakeconfigmodules": [
"index.html#ex-hascmakeconfigmodules"
],
"tester-lycheeLinkCheck": [
"index.html#tester-lycheeLinkCheck"
],
Expand Down
2 changes: 2 additions & 0 deletions pkgs/build-support/testers/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -225,6 +225,8 @@
);
hasPkgConfigModules = callPackage ./hasPkgConfigModules/tester.nix { };

hasCmakeConfigModules = callPackage ./hasCmakeConfigModules/tester.nix { };

testMetaPkgConfig = callPackage ./testMetaPkgConfig/tester.nix { };

shellcheck = callPackage ./shellcheck/tester.nix { };
Expand Down
86 changes: 86 additions & 0 deletions pkgs/build-support/testers/hasCmakeConfigModules/tester.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
# Static arguments
{
lib,
runCommandCC,
cmake,
}:

# Tester arguments
{
package,
moduleNames,
# Extra nativeBuildInputs needed to pass the cmake find_package test, e.g. pkg-config.
nativeBuildInputs ? [ ],
# buildInputs is used to help pass the cmake find_package test.
# The purpose of buildInputs here is to allow us to iteratively add
# any missing dependencies required by the *Config.cmake module
# during testing. This allows us to test and fix the CMake setup
# without rebuilding the finalPackage each time. Once all required
# packages are properly added to the finalPackage's propagateBuildInputs,
# this buildInputs should be set to an empty list [].
buildInputs ? [ ],
# Extra cmakeFlags needed to pass the cmake find_package test.
# Can be used to set verbose/debug flags.
cmakeFlags ? [ ],
testName ? "check-cmake-config-${package.pname or package.name}",
version ? package.version or null,
versionCheck ? false,
}:

runCommandCC testName
{
inherit moduleNames versionCheck cmakeFlags;
version = if versionCheck then version else null;
nativeBuildInputs = [
cmake
] ++ nativeBuildInputs;
buildInputs = [ package ] ++ buildInputs;
meta =
{
description = "Test whether ${package.name} exposes cmake-config modules ${lib.concatStringsSep ", " moduleNames}";
}
# Make sure licensing info etc is preserved, as this is a concern for e.g. cache.nixos.org,
# as hydra can't check this meta info in dependencies.
# The test itself is just Nixpkgs, with MIT license.
// builtins.intersectAttrs {
available = throw "unused";
broken = throw "unused";
insecure = throw "unused";
license = throw "unused";
maintainers = throw "unused";
teams = throw "unused";
platforms = throw "unused";
unfree = throw "unused";
unsupported = throw "unused";
} package.meta;
}
''
touch "$out"
notFound=0
for moduleName in $moduleNames; do
echo "checking cmake-config module $moduleName"

cat <<EOF > CMakeLists.txt
cmake_minimum_required(VERSION 3.14)
project(CheckCmakeModule)

find_package($moduleName $version EXACT NO_MODULE REQUIRED)
EOF

echoCmd 'cmake flags' $cmakeFlags
set +e
cmake . $cmakeFlags
r=$?
set -e
if [[ $r = 0 ]]; then
echo "✅ cmake-config module $moduleName exists"
else
echo "❌ cmake-config module $moduleName was not found"
((notFound+=1))
fi
done

if [[ $notFound -ne 0 ]]; then
exit 1
fi
''
73 changes: 73 additions & 0 deletions pkgs/build-support/testers/hasCmakeConfigModules/tests.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
# cd nixpkgs
# nix-build -A tests.testers.hasCmakeConfigModules
{
lib,
testers,
boost,
mpi,
eigen,
runCommand,
}:

lib.recurseIntoAttrs {

boost-versions-match = testers.hasCmakeConfigModules {
package = boost;
moduleNames = [
"Boost"
"boost_math"
];
versionCheck = true;
};

boost-versions-mismatch = testers.testBuildFailure (
testers.hasCmakeConfigModules {
package = boost;
moduleNames = [
"Boost"
"boost_math"
];
version = "1.2.3"; # Deliberately-incorrect version number
versionCheck = true;
}
);

boost-no-versionCheck = testers.hasCmakeConfigModules {
package = boost;
moduleNames = [
"Boost"
"boost_math"
];
version = "1.2.3"; # Deliberately-incorrect version number
versionCheck = false;
};

boost-has-boost_mpi = testers.hasCmakeConfigModules {
package = boost.override { useMpi = true; };
moduleNames = [
"boost_mpi"
];
buildInputs = [ mpi ];
};

boost_mpi-does-not-have-mpi = testers.testBuildFailure (
testers.hasCmakeConfigModules {
package = boost.override { useMpi = true; };
moduleNames = [
"boost_mpi"
];
}
);

eigen-has-Eigen = testers.hasCmakeConfigModules {
package = eigen;
moduleNames = [ "Eigen3" ];
};

eigen-does-not-have-eigen = testers.testBuildFailure (
testers.hasCmakeConfigModules {
package = eigen;
moduleNames = [ "eigen3" ];
}
);
}
2 changes: 2 additions & 0 deletions pkgs/build-support/testers/test/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,8 @@ lib.recurseIntoAttrs {

hasPkgConfigModules = pkgs.callPackage ../hasPkgConfigModules/tests.nix { };

hasCmakeConfigModules = pkgs.callPackage ../hasCmakeConfigModules/tests.nix { };

shellcheck = pkgs.callPackage ../shellcheck/tests.nix { };

shfmt = pkgs.callPackages ../shfmt/tests.nix { };
Expand Down
6 changes: 0 additions & 6 deletions pkgs/by-name/ad/adios2/package.nix
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@
python3Packages,
mpi,
bzip2,
lz4,
c-blosc2,
hdf5-mpi,
libfabric,
Expand All @@ -22,8 +21,6 @@
zeromq,
zfp,
zlib,
zlib-ng,
zstd,
ucx,
yaml-cpp,
nlohmann_json,
Expand Down Expand Up @@ -69,7 +66,6 @@ stdenv.mkDerivation (finalAttrs: {
[
mpi
bzip2
lz4
c-blosc2
(hdf5-mpi.override { inherit mpi; })
libfabric
Expand All @@ -80,8 +76,6 @@ stdenv.mkDerivation (finalAttrs: {
zeromq
zfp
zlib
zlib-ng # required by c-blocs2
zstd # required by c-blocs2
yaml-cpp
nlohmann_json

Expand Down
14 changes: 9 additions & 5 deletions pkgs/development/libraries/c-blosc/1.nix
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ stdenv.mkDerivation (finalAttrs: {

nativeBuildInputs = [ cmake ];

buildInputs = [
propagatedBuildInputs = [
lz4
zlib
zstd
Expand All @@ -54,15 +54,19 @@ stdenv.mkDerivation (finalAttrs: {

doCheck = !static;

passthru.tests.pkg-config = testers.testMetaPkgConfig finalAttrs.finalPackage;
passthru.tests = {
pkg-config = testers.testMetaPkgConfig finalAttrs.finalPackage;
cmake-config = testers.hasCmakeConfigModules {
moduleNames = [ "Blosc2" ];
package = finalAttrs.finalPackage;
};
};

meta = with lib; {
description = "Blocking, shuffling and loss-less compression library";
homepage = "https://www.blosc.org";
changelog = "https://github.com/Blosc/c-blosc/releases/tag/v${finalAttrs.version}";
pkgConfigModules = [
"blosc"
];
pkgConfigModules = [ "blosc2" ];
license = licenses.bsd3;
platforms = platforms.all;
maintainers = with maintainers; [ ris ];
Expand Down
14 changes: 9 additions & 5 deletions pkgs/development/libraries/c-blosc/2.nix
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ stdenv.mkDerivation (finalAttrs: {

nativeBuildInputs = [ cmake ];

buildInputs = [
propagatedBuildInputs = [
lz4
zlib-ng
zstd
Expand All @@ -56,15 +56,19 @@ stdenv.mkDerivation (finalAttrs: {
# possibly https://github.com/Blosc/c-blosc2/issues/432
enableParallelChecking = false;

passthru.tests.pkg-config = testers.testMetaPkgConfig finalAttrs.finalPackage;
passthru.tests = {
pkg-config = testers.testMetaPkgConfig finalAttrs.finalPackage;
cmake-config = testers.hasCmakeConfigModules {
moduleNames = [ "Blosc2" ];
package = finalAttrs.finalPackage;
};
};

meta = with lib; {
description = "Fast, compressed, persistent binary data store library for C";
homepage = "https://www.blosc.org";
changelog = "https://github.com/Blosc/c-blosc2/releases/tag/v${finalAttrs.version}";
pkgConfigModules = [
"blosc2"
];
pkgConfigModules = [ "blosc2" ];
license = licenses.bsd3;
platforms = platforms.all;
maintainers = with maintainers; [ ris ];
Expand Down