diff options
author | Noah Fontes <noah@noahfontes.com> | 2022-09-06 15:53:30 -0700 |
---|---|---|
committer | Noah Fontes <noah@noahfontes.com> | 2022-10-07 21:26:19 -0700 |
commit | 0defcde4c01baa6c4eda01aad9efbb4d7faab896 (patch) | |
tree | cac3024d44ddb4ac76235cc93c68464eef1f20fd /pkgs/applications/version-management/p4v | |
parent | 98d026a144d729d7054067cee6a57e6999d5c03f (diff) |
p4v: wrap derivation to avoid polluting PATH
P4V includes a bunch of extra binaries in its bin directory that are only useful as part of their wrapper scripts. They really belong in a libexec-style directory, but their wrappers hardcode bin, so we take the easier approach of wrapping their wrappers.
Diffstat (limited to 'pkgs/applications/version-management/p4v')
-rw-r--r-- | pkgs/applications/version-management/p4v/default.nix | 114 |
1 files changed, 68 insertions, 46 deletions
diff --git a/pkgs/applications/version-management/p4v/default.nix b/pkgs/applications/version-management/p4v/default.nix index 90e1e3af6256a..6e4ff1f2c13e1 100644 --- a/pkgs/applications/version-management/p4v/default.nix +++ b/pkgs/applications/version-management/p4v/default.nix @@ -27,59 +27,81 @@ , xcbutilwm }: -stdenv.mkDerivation { +let pname = "p4v"; version = "2022.2.2336701"; - src = fetchurl { - url = "https://web.archive.org/web/20220902181457/https://ftp.perforce.com/perforce/r22.2/bin.linux26x86_64/p4v.tgz"; - sha256 = "8fdade4aafe25f568a61cfd80823aa90599c2a404b7c6b4a0862c84b07a9f8d2"; - }; + unwrapped = stdenv.mkDerivation { + pname = "${pname}-unwrapped"; + inherit version; - nativeBuildInputs = [ autoPatchelfHook ]; - buildInputs = [ - cups - dbus - fontconfig - gccForLibs - libX11 - libXcomposite - libXcursor - libXdamage - libXext - libXi - libXrandr - libXrender - libXtst - libinput - libxcb - libxkbcommon - nss - qttools - qtwebengine - xcbutilimage - xcbutilkeysyms - xcbutilrenderutil - xcbutilwm - ]; + src = fetchurl { + url = "https://web.archive.org/web/20220902181457/https://ftp.perforce.com/perforce/r22.2/bin.linux26x86_64/p4v.tgz"; + sha256 = "8fdade4aafe25f568a61cfd80823aa90599c2a404b7c6b4a0862c84b07a9f8d2"; + }; - dontBuild = true; + nativeBuildInputs = [ autoPatchelfHook ]; + buildInputs = [ + cups + dbus + fontconfig + gccForLibs + libX11 + libXcomposite + libXcursor + libXdamage + libXext + libXi + libXrandr + libXrender + libXtst + libinput + libxcb + libxkbcommon + nss + qttools + qtwebengine + xcbutilimage + xcbutilkeysyms + xcbutilrenderutil + xcbutilwm + ]; - # Don't wrap the Qt apps; upstream has its own wrapper scripts. - dontWrapQtApps = true; + dontBuild = true; - installPhase = '' - mkdir -p $out - cp -r bin lib $out - addAutoPatchelfSearchPath $out/lib - ''; + # Don't wrap the Qt apps; upstream has its own wrapper scripts. + dontWrapQtApps = true; + + installPhase = '' + mkdir -p $out + cp -r bin lib $out + addAutoPatchelfSearchPath $out/lib + ''; - meta = { - description = "Perforce Helix Visual Client"; - homepage = "https://www.perforce.com"; - sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ]; - license = lib.licenses.unfreeRedistributable; - platforms = [ "x86_64-linux" ]; - maintainers = with lib.maintainers; [ impl nathyong nioncode ]; + meta = { + description = "Perforce Helix Visual Client"; + homepage = "https://www.perforce.com"; + sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ]; + license = lib.licenses.unfreeRedistributable; + platforms = [ "x86_64-linux" ]; + maintainers = with lib.maintainers; [ impl nathyong nioncode ]; + }; }; +in +stdenv.mkDerivation { + inherit pname version; + + # Build a "clean" version of the package so that we don't add extra ".bin" or + # configuration files to users' PATHs. We can't easily put the unwrapped + # package files in libexec (where they belong, probably) because the upstream + # wrapper scripts have the bin directory hardcoded. + buildCommand = '' + mkdir -p $out/bin + for f in p4admin p4merge p4v p4vc; do + ln -s ${unwrapped}/bin/$f $out/bin + done + ''; + preferLocalBuild = true; + + inherit (unwrapped) meta passthru; } |