Merge pull request #246386 from hercules-ci/lib-getExe-dont-make-name-assumption

lib.getExe: Do not make assumptions about the main program
This commit is contained in:
Robert Hensing 2023-08-02 20:05:52 +02:00 committed by GitHub
commit f8f9f13d57
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
56 changed files with 95 additions and 9 deletions

View file

@ -144,5 +144,9 @@ rec {
=> "/nix/store/am9ml4f4ywvivxnkiaqwr0hyxka1xjsf-mustache-go-1.3.0/bin/mustache"
*/
getExe = x:
"${lib.getBin x}/bin/${x.meta.mainProgram or (lib.getName x)}";
"${lib.getBin x}/bin/${x.meta.mainProgram or (
# This could be turned into an error when 23.05 is at end of life
lib.warn "getExe: Package ${lib.strings.escapeNixIdentifier x.meta.name or x.pname or x.name} does not have the meta.mainProgram attribute. We'll assume that the main program has the same name for now, but this behavior is deprecated, because it leads to surprising errors when the assumption does not hold. If the package has a main program, please set `meta.mainProgram` in its definition to make this warning go away. Otherwise, if the package does not have a main program, or if you don't control its definition, specify the full path to the program, such as \"\${lib.getBin foo}/bin/bar\"."
lib.getName x
)}";
}

View file

@ -10,6 +10,11 @@ in
};
config = lib.mkIf cfg.enable {
assertions = [
{ assertion = false;
message = "The oddjob service was found to be broken without NixOS test or maintainer. Please take ownership of this service.";
}
];
systemd.packages = [ cfg.package ];
systemd.services.oddjobd = {
@ -21,7 +26,7 @@ in
serviceConfig = {
Type = "dbus";
BusName = "org.freedesktop.oddjob";
ExecStart = "${lib.getExe cfg.package}/bin/oddjobd";
ExecStart = "${lib.getBin cfg.package}/bin/oddjobd";
};
};
};

View file

@ -75,5 +75,6 @@ stdenv.mkDerivation rec {
license = licenses.gpl3Plus;
maintainers = with maintainers; [ aske ];
platforms = platforms.all;
mainProgram = "espeak-ng";
};
}

View file

@ -31,5 +31,6 @@ rustPlatform.buildRustPackage rec {
license = licenses.gpl3Plus;
maintainers = with maintainers; [ fufexan ];
platforms = platforms.linux;
mainProgram = "regreet";
};
}

View file

@ -227,5 +227,6 @@ in stdenv.mkDerivation {
license = licenses.gpl3Plus;
maintainers = with maintainers; [ zhaofengli ];
platforms = [ "x86_64-linux" ];
mainProgram = "darling";
};
}

View file

@ -109,5 +109,6 @@ mkDerivation rec {
license = lib.licenses.gpl2;
platforms = lib.platforms.unix;
maintainers = with lib.maintainers; [ bjornfor raskin gebner ];
mainProgram = "openscad";
};
}

View file

@ -41,5 +41,6 @@ stdenv.mkDerivation rec {
license = lib.licenses.asl20;
maintainers = with lib.maintainers; [ anselmschueler ];
platforms = lib.platforms.unix;
mainProgram = "tesseract";
};
}

View file

@ -20,6 +20,7 @@
# not in `badPlatforms` because cross-compilation on 64-bit machine might work.
maxSilent = 14400; # 4h, double the default of 7200s (c.f. #129212, #129115)
license = lib.licenses.mpl20;
mainProgram = "firefox";
};
tests = [ nixosTests.firefox ];
updateScript = callPackage ./update.nix {
@ -46,6 +47,7 @@
# not in `badPlatforms` because cross-compilation on 64-bit machine might work.
maxSilent = 14400; # 4h, double the default of 7200s (c.f. #129212, #129115)
license = lib.licenses.mpl20;
mainProgram = "firefox";
};
tests = [ nixosTests.firefox-beta ];
updateScript = callPackage ./update.nix {
@ -74,6 +76,7 @@
# not in `badPlatforms` because cross-compilation on 64-bit machine might work.
maxSilent = 14400; # 4h, double the default of 7200s (c.f. #129212, #129115)
license = lib.licenses.mpl20;
mainProgram = "firefox";
};
tests = [ nixosTests.firefox-devedition ];
updateScript = callPackage ./update.nix {
@ -104,6 +107,7 @@
broken = stdenv.buildPlatform.is32bit; # since Firefox 60, build on 32-bit platforms fails with "out of memory".
# not in `badPlatforms` because cross-compilation on 64-bit machine might work.
license = lib.licenses.mpl20;
mainProgram = "firefox";
};
tests = [ nixosTests.firefox-esr-102 ];
updateScript = callPackage ./update.nix {
@ -132,6 +136,7 @@
broken = stdenv.buildPlatform.is32bit; # since Firefox 60, build on 32-bit platforms fails with "out of memory".
# not in `badPlatforms` because cross-compilation on 64-bit machine might work.
license = lib.licenses.mpl20;
mainProgram = "firefox";
};
tests = [ nixosTests.firefox-esr-115 ];
updateScript = callPackage ./update.nix {

View file

@ -60,5 +60,6 @@ stdenv.mkDerivation rec {
license = licenses.gpl3Plus;
sourceProvenance = with sourceTypes; [ binaryNativeCode ];
maintainers = with maintainers; [ zendo ];
mainProgram = "clash-verge";
};
}

View file

@ -18,6 +18,7 @@ let
{
pythonInterpreter = "${python3.interpreter}";
configDirName = lib.toLower binaryName;
meta.mainProgram = "disable-breaking-updates.py";
} ''
mkdir -p $out/bin
cp ${./disable-breaking-updates.py} $out/bin/disable-breaking-updates.py

View file

@ -88,5 +88,6 @@ stdenv.mkDerivation (finalAttrs: {
maintainers = with maintainers; [ winter raitobezarius ];
license = licenses.mit;
inherit (nodejs.meta) platforms;
mainProgram = "thelounge";
};
})

View file

@ -88,5 +88,6 @@ buildGoModule rec {
license = licenses.mit;
maintainers = with maintainers; [ disassembler kolaente ma27 techknowlogick ];
broken = stdenv.isDarwin;
mainProgram = "gitea";
};
}

View file

@ -29,5 +29,6 @@ stdenv.mkDerivation {
license = licenses.gpl2Only;
maintainers = with maintainers; [ astro ];
platforms = [ "x86_64-linux" "aarch64-linux" ];
mainProgram = "nvramtool";
};
}

View file

@ -44,5 +44,6 @@ stdenv.mkDerivation rec {
license = licenses.mit;
platforms = platforms.linux;
maintainers = with maintainers; [ primeos ];
mainProgram = "cage";
};
}

View file

@ -25,13 +25,21 @@ rec {
name = last (builtins.split "/" nameOrPath);
in
pkgs.runCommandLocal name (if (types.str.check content) then {
inherit content interpreter;
passAsFile = [ "content" ];
} else {
inherit interpreter;
contentPath = content;
}) ''
pkgs.runCommandLocal name (
lib.optionalAttrs (nameOrPath == "/bin/${name}") {
meta.mainProgram = name;
}
// (
if (types.str.check content) then {
inherit content interpreter;
passAsFile = [ "content" ];
} else {
inherit interpreter;
contentPath = content;
}
)
)
''
# On darwin a script cannot be used as an interpreter in a shebang but
# there doesn't seem to be a limit to the size of shebang and multiple
# arguments to the interpreter are allowed.
@ -89,6 +97,8 @@ rec {
# https://github.com/NixOS/nixpkgs/issues/154203
# https://github.com/NixOS/nixpkgs/issues/148189
nativeBuildInputs = [ stdenv.cc.bintools ];
} // lib.optionalAttrs (nameOrPath == "/bin/${name}") {
meta.mainProgram = name;
}) ''
${compileScript}
${lib.optionalString strip

View file

@ -73,5 +73,6 @@ stdenv.mkDerivation rec {
license = licenses.gpl2Plus;
platforms = platforms.linux;
maintainers = teams.gnome.members ++ teams.pantheon.members;
mainProgram = "file-roller";
};
}

View file

@ -232,6 +232,7 @@ stdenv.mkDerivation (rec {
maintainers = [ maintainers.eelco ];
platforms = platforms.all;
priority = 6; # in `buildEnv' (including the one inside `perl.withPackages') the library files will have priority over files in `perl`
mainProgram = "perl";
};
} // lib.optionalAttrs (stdenv.buildPlatform != stdenv.hostPlatform) rec {
crossVersion = "c876045741f5159318085d2737b0090f35a842ca"; # June 5, 2022

View file

@ -572,5 +572,6 @@ in with passthru; stdenv.mkDerivation {
license = licenses.psfl;
platforms = platforms.linux ++ platforms.darwin;
maintainers = with maintainers; [ fridh ];
mainProgram = "python3";
};
}

View file

@ -46,5 +46,6 @@ stdenv.mkDerivation rec {
license = licenses.lgpl21Plus;
maintainers = with maintainers; [ jtojnar ];
platforms = platforms.linux;
mainProgram = "xdg-dbus-proxy";
};
}

View file

@ -45,5 +45,6 @@ buildPythonPackage rec {
homepage = "https://github.com/pycqa/flake8";
license = licenses.mit;
maintainers = with maintainers; [ dotlambda ];
mainProgram = "flake8";
};
}

View file

@ -12,5 +12,6 @@ buildGoModule {
meta = common.meta // {
description = "Woodpecker Continuous Integration agent";
mainProgram = "woodpecker-agent";
};
}

View file

@ -22,5 +22,6 @@ buildGoModule {
meta = common.meta // {
description = "Woodpecker Continuous Integration server";
mainProgram = "woodpecker-server";
};
}

View file

@ -23,5 +23,6 @@ buildGoModule rec {
changelog = "https://github.com/evanw/esbuild/blob/v${version}/CHANGELOG.md";
license = licenses.mit;
maintainers = with maintainers; [ lucus16 marsam undefined-moe ];
mainProgram = "esbuild";
};
}

View file

@ -29,5 +29,6 @@ buildGoModule rec {
homepage = "https://github.com/netlify/esbuild";
license = licenses.mit;
maintainers = with maintainers; [ roberth ];
mainProgram = "esbuild";
};
}

View file

@ -26,5 +26,6 @@ rustPlatform.buildRustPackage rec {
homepage = "https://github.com/mozilla/geckodriver";
license = licenses.mpl20;
maintainers = with maintainers; [ jraygauthier ];
mainProgram = "geckodriver";
};
}

View file

@ -34,5 +34,7 @@ stdenv.mkDerivation rec {
license = lib.licenses.gpl2Plus;
platforms = lib.platforms.unix;
mainProgram = "libtool";
};
}

View file

@ -68,5 +68,6 @@ stdenv.mkDerivation rec {
license = licenses.gpl2Plus;
maintainers = [ ];
platforms = platforms.unix;
mainProgram = "libtool";
};
}

View file

@ -28,5 +28,6 @@ rustPlatform.buildRustPackage rec {
homepage = "https://github.com/XAMPPRocky/tokei";
license = with licenses; [ asl20 /* or */ mit ];
maintainers = with maintainers; [ gebner lilyball ];
mainProgram = "tokei";
};
}

View file

@ -73,5 +73,6 @@ in stdenv.mkDerivation rec {
# Note from primeos: By updating Chromium I also update Google Chrome and
# ChromeDriver.
platforms = attrNames allSpecs;
mainProgram = "chromedriver";
};
}

View file

@ -43,5 +43,6 @@ rustPlatform.buildRustPackage rec {
description = "A time traveling resource monitor for modern Linux systems";
license = licenses.asl20;
homepage = "https://github.com/facebookincubator/below";
mainProgram = "below";
};
}

View file

@ -322,5 +322,6 @@ stdenv.mkDerivation (finalAttrs: {
license = lib.licenses.mit;
maintainers = with lib.maintainers; [ offline henkery code-asher ];
platforms = [ "x86_64-linux" "aarch64-linux" "x86_64-darwin" ];
mainProgram = "code-server";
};
})

View file

@ -42,5 +42,6 @@ buildGoModule rec {
platforms = platforms.linux ++ platforms.darwin;
license = licenses.mpl20;
maintainers = with maintainers; [ pradeepchhetri vdemeester nh2 techknowlogick];
mainProgram = "consul";
};
}

View file

@ -30,5 +30,6 @@ buildGoModule rec {
changelog = "https://github.com/joohoi/acme-dns/releases/tag/${src.rev}";
license = lib.licenses.mit;
maintainers = with lib.maintainers; [ emilylange ];
mainProgram = "acme-dns";
};
}

View file

@ -110,5 +110,6 @@ in rustPlatform.buildRustPackage (commonDerivationAttrs // {
license = licenses.gpl3Only;
platforms = platforms.linux;
maintainers = with maintainers; [ emilylange bendlas ];
mainProgram = "lldap";
};
})

View file

@ -73,5 +73,6 @@ buildGoModule rec {
homepage = "https://grafana.com/products/cloud";
changelog = "https://github.com/grafana/agent/blob/${src.rev}/CHANGELOG.md";
maintainers = with lib.maintainers; [ flokli emilylange ];
mainProgram = "grafana-agent";
};
}

View file

@ -219,5 +219,6 @@ stdenv.mkDerivation (finalAttrs: {
license = lib.licenses.mit;
maintainers = with lib.maintainers; [ dguenther ghuntley emilytrau ];
platforms = [ "x86_64-linux" "aarch64-linux" "x86_64-darwin" "aarch64-darwin" ];
mainProgram = "openvscode-server";
};
})

View file

@ -98,5 +98,6 @@ buildGoModule rec {
homepage = "https://www.pufferpanel.com/";
license = with licenses; [ asl20 ];
maintainers = with maintainers; [ ckie tie ];
mainProgram = "pufferpanel";
};
}

View file

@ -73,5 +73,6 @@ stdenvNoCC.mkDerivation (finalAttrs: {
license = lib.licenses.gpl3Only;
platforms = lib.platforms.linux;
maintainers = with lib.maintainers; [ misterio77 ];
mainProgram = "kavita";
};
})

View file

@ -161,6 +161,9 @@ self: super:
+ lib.optionalString stdenv.hostPlatform.isStatic ''
export NIX_CFLAGS_LINK="$NIX_CFLAGS_LINK -lXau -lXdmcp"
'';
meta = attrs.meta // {
mainProgram = "xdpyinfo";
};
});
xdm = super.xdm.overrideAttrs (attrs: {
@ -814,6 +817,7 @@ self: super:
--replace '_X_NORETURN' '__attribute__((noreturn))' \
--replace 'n_dirs--;' ""
'';
meta.mainProgram = "lndir";
});
twm = super.twm.overrideAttrs (attrs: {
@ -940,6 +944,12 @@ self: super:
'';
});
xset = super.xset.overrideAttrs (attrs: {
meta = attrs.meta // {
mainProgram = "xset";
};
});
# convert Type1 vector fonts to OpenType fonts
fontbitstreamtype1 = super.fontbitstreamtype1.overrideAttrs (attrs: {
nativeBuildInputs = attrs.nativeBuildInputs ++ [ fontforge ];

View file

@ -40,5 +40,6 @@ stdenv.mkDerivation rec {
license = lib.licenses.unfree;
platforms = lib.platforms.unix;
maintainers = with lib.maintainers; [ thoughtpolice roconnor ];
mainProgram = "tarsnap";
};
}

View file

@ -65,6 +65,7 @@ let
nvramtool = generic {
pname = "nvramtool";
meta.description = "Read and write coreboot parameters and display information from the coreboot table in CMOS/NVRAM";
meta.mainProgram = "nvramtool";
};
superiotool = generic {
pname = "superiotool";

View file

@ -50,5 +50,6 @@ buildGoModule rec {
homepage = "https://direnv.net";
license = licenses.mit;
maintainers = teams.numtide.members;
mainProgram = "direnv";
};
}

View file

@ -50,5 +50,6 @@ stdenv.mkDerivation rec {
maintainers = with maintainers; [ doronbehar ];
license = licenses.bsd2;
platforms = platforms.all;
mainProgram = "file";
};
}

View file

@ -57,5 +57,6 @@ rustPlatform.buildRustPackage rec {
changelog = "https://github.com/nix-community/nurl/blob/v${version}/CHANGELOG.md";
license = licenses.mpl20;
maintainers = with maintainers; [ figsoda ];
mainProgram = "nurl";
};
}

View file

@ -126,5 +126,6 @@ rustPlatform.buildRustPackage {
license = licenses.mpl20;
maintainers = with maintainers; [ thoughtpolice happysalada ];
platforms = with platforms; all;
mainProgram = "vector";
};
}

View file

@ -60,5 +60,6 @@ stdenvNoCC.mkDerivation rec {
platforms = platforms.linux;
license = licenses.gpl2;
maintainers = [ maintainers.artturin ];
mainProgram = "xvfb-run";
};
}

View file

@ -77,5 +77,6 @@ buildPythonPackage rec {
'';
license = licenses.unlicense;
maintainers = with maintainers; [ mkg20001 SuperSandro2000 marsam ];
mainProgram = "yt-dlp";
};
}

View file

@ -40,5 +40,6 @@ buildGoModule rec {
homepage = "https://github.com/MetaCubeX/Clash.Meta";
license = licenses.gpl3Only;
maintainers = with maintainers; [ oluceps ];
mainProgram = "clash-meta";
};
}

View file

@ -40,5 +40,6 @@ buildGoModule rec {
changelog = "https://github.com/Dreamacro/clash/releases/tag/v${version}";
license = licenses.gpl3Only;
maintainers = with maintainers; [ contrun Br1ght0ne ];
mainProgram = "clash";
};
}

View file

@ -87,5 +87,6 @@ buildNpmPackage rec {
license = licenses.mit;
maintainers = with maintainers; [ misterio77 ];
platforms = lib.unique (geckodriver.meta.platforms ++ chromedriver.meta.platforms);
mainProgram = "sitespeed-io";
};
}

View file

@ -21,5 +21,6 @@ rustPlatform.buildRustPackage rec {
homepage = "https://git.deuxfleurs.fr/Deuxfleurs/wgautomesh";
license = licenses.agpl3Only;
maintainers = [ maintainers.lx ];
mainProgram = "wgautomesh";
};
}

View file

@ -44,5 +44,6 @@ rustPlatform.buildRustPackage rec {
homepage = "https://github.com/nix-community/harmonia";
license = licenses.mit;
maintainers = with maintainers; [ mic92 ];
mainProgram = "harmonia";
};
}

View file

@ -241,6 +241,7 @@ self = stdenv.mkDerivation {
maintainers = with maintainers; [ eelco lovesegfault artturin ];
platforms = platforms.unix;
outputsToInstall = [ "out" ] ++ optional enableDocumentation "man";
mainProgram = "nix";
};
};
in self

View file

@ -43,5 +43,6 @@ python3Packages.buildPythonPackage rec {
license = licenses.lgpl3Plus;
platforms = platforms.linux;
maintainers = [ maintainers.Technical27 ];
mainProgram = "auto-cpufreq";
};
}

View file

@ -55,5 +55,6 @@ stdenv.mkDerivation rec {
platforms = platforms.all;
maintainers = with maintainers; [ rob relrod SuperSandro2000 ];
changelog = "https://github.com/htop-dev/htop/blob/${version}/ChangeLog";
mainProgram = "htop";
};
}

View file

@ -29,5 +29,6 @@ rustPlatform.buildRustPackage rec {
license = licenses.lgpl3Only;
maintainers = with maintainers; [ linj ];
platforms = platforms.linux;
mainProgram = "kanata";
};
}