在 Nix 构建中禁用所有 Haskell 依赖项的构建和 运行 测试
Disable building and running tests for all Haskell dependencies in a Nix build
使用 cabal2nix
很容易为我自己的 cabal 项目禁用测试套件,只需提供 --no-check
。我的项目的依赖项呢?如何在构建它们时禁用编译和 运行 它们的睾丸?
用 noCheck = false
覆盖每个依赖项(递归地!)似乎很乏味。是否有某种覆盖机制可用?
确实有!要递归更改所有包的内容,您可以覆盖生成所有包的内容,即 haskellPackages.mkDerivation
。所以这可以通过像这样的 Haskell 包覆盖来实现:
hself: hsuper: {
mkDerivation = args: hsuper.mkDerivation (args // {
doCheck = false;
});
}
您也可以像这样覆盖 here 中的其他参数。例如,您可以禁用库分析构建,这通常会使构建时间减半:
hself: hsuper: {
mkDerivation = args: hsuper.mkDerivation (args // {
enableLibraryProfiling = false;
});
}
有关详细信息,请参阅手册中的 this section。
编辑:如果您想将其用作用户叠加层,可以将以下内容放入 ~/.config/nixpkgs/overlays/haskell-no-check.nix
:
self: super: {
haskell = super.haskell // {
packageOverrides = hself: hsuper: {
mkDerivation = args: hsuper.mkDerivation (args // {
doCheck = false;
});
};
};
}
请注意,这里使用 haskell.packageOverrides
,而不是 config.nix
中有些过时的 packageOverrides
。
还有其他方法可以做到这一点,但我认为在这种情况下这是最好的,因为它将更改应用于所有 Haskell 包集。不幸的是,由于覆盖的工作方式,这将清除以前的 packageOverrides
,这通常不是问题,但也可能是。如果你需要坚持以前的,那么你可以这样做:
self: super: {
haskell = super.haskell // {
packageOverrides = super.lib.composeExtensions super.haskell.packageOverrides
(hself: hsuper: {
mkDerivation = args: hsuper.mkDerivation (args // {
doCheck = false;
});
});
};
}
使用 cabal2nix
很容易为我自己的 cabal 项目禁用测试套件,只需提供 --no-check
。我的项目的依赖项呢?如何在构建它们时禁用编译和 运行 它们的睾丸?
用 noCheck = false
覆盖每个依赖项(递归地!)似乎很乏味。是否有某种覆盖机制可用?
确实有!要递归更改所有包的内容,您可以覆盖生成所有包的内容,即 haskellPackages.mkDerivation
。所以这可以通过像这样的 Haskell 包覆盖来实现:
hself: hsuper: {
mkDerivation = args: hsuper.mkDerivation (args // {
doCheck = false;
});
}
您也可以像这样覆盖 here 中的其他参数。例如,您可以禁用库分析构建,这通常会使构建时间减半:
hself: hsuper: {
mkDerivation = args: hsuper.mkDerivation (args // {
enableLibraryProfiling = false;
});
}
有关详细信息,请参阅手册中的 this section。
编辑:如果您想将其用作用户叠加层,可以将以下内容放入 ~/.config/nixpkgs/overlays/haskell-no-check.nix
:
self: super: {
haskell = super.haskell // {
packageOverrides = hself: hsuper: {
mkDerivation = args: hsuper.mkDerivation (args // {
doCheck = false;
});
};
};
}
请注意,这里使用 haskell.packageOverrides
,而不是 config.nix
中有些过时的 packageOverrides
。
还有其他方法可以做到这一点,但我认为在这种情况下这是最好的,因为它将更改应用于所有 Haskell 包集。不幸的是,由于覆盖的工作方式,这将清除以前的 packageOverrides
,这通常不是问题,但也可能是。如果你需要坚持以前的,那么你可以这样做:
self: super: {
haskell = super.haskell // {
packageOverrides = super.lib.composeExtensions super.haskell.packageOverrides
(hself: hsuper: {
mkDerivation = args: hsuper.mkDerivation (args // {
doCheck = false;
});
});
};
}