about summary refs log tree commit diff
path: root/pkgs/applications/version-management/p4v
diff options
context:
space:
mode:
authorNoah Fontes <noah@noahfontes.com>2022-09-06 15:53:30 -0700
committerNoah Fontes <noah@noahfontes.com>2022-10-07 21:26:19 -0700
commit0defcde4c01baa6c4eda01aad9efbb4d7faab896 (patch)
treecac3024d44ddb4ac76235cc93c68464eef1f20fd /pkgs/applications/version-management/p4v
parent98d026a144d729d7054067cee6a57e6999d5c03f (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.nix114
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;
 }