55 lines
2 KiB
Nix
55 lines
2 KiB
Nix
{lib, pkgs} :
|
|
let inherit (lib) nv nvs; in
|
|
{
|
|
# see for example:
|
|
# - development/interpreters/php_configurable/default.nix
|
|
# - .. search composableDerivation in all-packages.nix ..
|
|
#
|
|
# You should be able to override anything you like easily
|
|
# grep the mailinglist by title "python proposal" (dec 08)
|
|
# -> http://mail.cs.uu.nl/pipermail/nix-dev/2008-December/001571.html
|
|
# to see why this got complicated when using all its features
|
|
# TODO add newer example using new syntax (kernel derivation proposal -> mailinglist)
|
|
composableDerivation = {
|
|
mkDerivation ? pkgs.stdenv.mkDerivation,
|
|
|
|
# list of functions to be applied before defaultOverridableDelayableArgs removes removeAttrs names
|
|
# prepareDerivationArgs handles derivation configurations
|
|
applyPreTidy ? [ lib.prepareDerivationArgs ],
|
|
|
|
# consider adding addtional elements by derivation.merge { removeAttrs = ["elem"]; };
|
|
removeAttrs ? ["cfg" "flags"]
|
|
|
|
}: (lib.defaultOverridableDelayableArgs ( a: mkDerivation a)
|
|
{
|
|
inherit applyPreTidy removeAttrs;
|
|
}).merge;
|
|
|
|
# some utility functions
|
|
# use this function to generate flag attrs for prepareDerivationArgs
|
|
# E nable D isable F eature
|
|
edf = {name, feat ? name, enable ? {}, disable ? {} , value ? ""}:
|
|
nvs name {
|
|
set = {
|
|
configureFlags = ["--enable-${feat}${if value == "" then "" else "="}${value}"];
|
|
} // enable;
|
|
unset = {
|
|
configureFlags = ["--disable-${feat}"];
|
|
} // disable;
|
|
};
|
|
|
|
# same for --with and --without-
|
|
# W ith or W ithout F eature
|
|
wwf = {name, feat ? name, enable ? {}, disable ? {}, value ? ""}:
|
|
nvs name {
|
|
set = enable // {
|
|
configureFlags = ["--with-${feat}${if value == "" then "" else "="}${value}"]
|
|
++ lib.maybeAttr "configureFlags" [] enable;
|
|
};
|
|
unset = disable // {
|
|
configureFlags = ["--without-${feat}"]
|
|
++ lib.maybeAttr "configureFlags" [] disable;
|
|
};
|
|
};
|
|
}
|