diff --git a/doc/stdenv/stdenv.xml b/doc/stdenv/stdenv.xml index 65a343d7edd8..64fc91fabca2 100644 --- a/doc/stdenv/stdenv.xml +++ b/doc/stdenv/stdenv.xml @@ -2083,6 +2083,16 @@ postInstall = '' + + + validatePkgConfig + + + + The validatePkgConfig hook validates all pkg-config (.pc) files in a package. This helps catching some common errors in pkg-config files, such as undefined variables. + + + cmake diff --git a/pkgs/build-support/setup-hooks/validate-pkg-config.sh b/pkgs/build-support/setup-hooks/validate-pkg-config.sh new file mode 100644 index 000000000000..54fc9cc122ca --- /dev/null +++ b/pkgs/build-support/setup-hooks/validate-pkg-config.sh @@ -0,0 +1,19 @@ +# This setup hook validates each pkgconfig file in each output. + +fixupOutputHooks+=(_validatePkgConfig) + +_validatePkgConfig() { + for pc in $(find "$prefix" -name '*.pc'); do + local bail=0 + + # Do not fail immediately. It's nice to see all errors when + # there are multiple pkgconfig files. + if ! pkg-config --validate "$pc"; then + bail=1 + fi + done + + if [ $bail -eq 1 ]; then + exit 1 + fi +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 0db4b476682f..6fe9ebd39997 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -501,6 +501,10 @@ in iconConvTools = callPackage ../build-support/icon-conv-tools {}; + validatePkgConfig = makeSetupHook + { name = "validate-pkg-config"; deps = [ findutils pkgconfig ]; } + ../build-support/setup-hooks/validate-pkg-config.sh; + #package writers writers = callPackage ../build-support/writers {};