From a289e7feb19e9047dc091063b16c125aa99c6fc3 Mon Sep 17 00:00:00 2001 From: Noah Fontes Date: Tue, 6 Sep 2022 16:05:35 -0700 Subject: [PATCH] p4v: add support for x86_64-darwin --- .../version-management/p4v/darwin.nix | 24 ++++ .../version-management/p4v/default.nix | 121 ++++-------------- .../version-management/p4v/linux.nix | 89 +++++++++++++ pkgs/top-level/all-packages.nix | 2 +- 4 files changed, 140 insertions(+), 96 deletions(-) create mode 100644 pkgs/applications/version-management/p4v/darwin.nix create mode 100644 pkgs/applications/version-management/p4v/linux.nix diff --git a/pkgs/applications/version-management/p4v/darwin.nix b/pkgs/applications/version-management/p4v/darwin.nix new file mode 100644 index 000000000000..d3d3568b9f2e --- /dev/null +++ b/pkgs/applications/version-management/p4v/darwin.nix @@ -0,0 +1,24 @@ +{ stdenv, undmg }: + +{ pname, version, src, meta }: +stdenv.mkDerivation { + inherit pname version src meta; + + nativeBuildInputs = [ undmg ]; + + sourceRoot = "."; + + installPhase = '' + mkdir -p $out/Applications $out/bin + + # Install Qt applications. + for f in p4admin.app p4merge.app p4v.app; do + mv $f $out/Applications + done + + # Install p4vc separately (it's a tiny shell script). + mv p4vc $out/bin + substituteInPlace $out/bin/p4vc \ + --replace /Applications $out/Applications + ''; +} diff --git a/pkgs/applications/version-management/p4v/default.nix b/pkgs/applications/version-management/p4v/default.nix index 6e4ff1f2c13e..1004661499be 100644 --- a/pkgs/applications/version-management/p4v/default.nix +++ b/pkgs/applications/version-management/p4v/default.nix @@ -1,107 +1,38 @@ { stdenv , fetchurl , lib -, autoPatchelfHook -, cups -, dbus -, fontconfig -, gccForLibs -, libX11 -, libXcomposite -, libXcursor -, libXdamage -, libXext -, libXi -, libXrandr -, libXrender -, libXtst -, libinput -, libxcb -, libxkbcommon -, nss -, qttools -, qtwebengine -, xcbutilimage -, xcbutilkeysyms -, xcbutilrenderutil -, xcbutilwm +, callPackage +, libsForQt5 }: let + # Upstream replaces minor versions, so use archived URLs. + srcs = { + "x86_64-linux" = fetchurl { + url = "https://web.archive.org/web/20220902181457id_/https://ftp.perforce.com/perforce/r22.2/bin.linux26x86_64/p4v.tgz"; + sha256 = "8fdade4aafe25f568a61cfd80823aa90599c2a404b7c6b4a0862c84b07a9f8d2"; + }; + "x86_64-darwin" = fetchurl { + url = "https://web.archive.org/web/20220902194716id_/https://ftp.perforce.com/perforce/r22.2/bin.macosx1015x86_64/P4V.dmg"; + sha256 = "c4a9460c0f849be193c68496c500f8a785c740f5bea5b5e7f617969c20be3cd7"; + }; + }; + + mkDerivation = + if stdenv.isDarwin then callPackage ./darwin.nix { } + else libsForQt5.callPackage ./linux.nix { }; +in mkDerivation { pname = "p4v"; version = "2022.2.2336701"; - unwrapped = stdenv.mkDerivation { - pname = "${pname}-unwrapped"; - inherit version; + src = srcs.${stdenv.hostPlatform.system} or (throw "Unsupported system: ${stdenv.hostPlatform.system}"); - src = fetchurl { - url = "https://web.archive.org/web/20220902181457/https://ftp.perforce.com/perforce/r22.2/bin.linux26x86_64/p4v.tgz"; - sha256 = "8fdade4aafe25f568a61cfd80823aa90599c2a404b7c6b4a0862c84b07a9f8d2"; - }; - - 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 - ]; - - dontBuild = true; - - # 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 = builtins.attrNames srcs; + 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; } diff --git a/pkgs/applications/version-management/p4v/linux.nix b/pkgs/applications/version-management/p4v/linux.nix new file mode 100644 index 000000000000..6a9d6ba6aad4 --- /dev/null +++ b/pkgs/applications/version-management/p4v/linux.nix @@ -0,0 +1,89 @@ +{ stdenv +, autoPatchelfHook +, cups +, dbus +, fontconfig +, gccForLibs +, libX11 +, libXcomposite +, libXcursor +, libXdamage +, libXext +, libXi +, libXrandr +, libXrender +, libXtst +, libinput +, libxcb +, libxkbcommon +, nss +, qttools +, qtwebengine +, xcbutilimage +, xcbutilkeysyms +, xcbutilrenderutil +, xcbutilwm +}: + +{ pname, version, src, meta }: +let + unwrapped = stdenv.mkDerivation { + pname = "${pname}-unwrapped"; + inherit version src meta; + + 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 + ]; + + dontBuild = true; + + # 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 + ''; + }; +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; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 33ca400bbb81..590bfa419ccb 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -30207,7 +30207,7 @@ with pkgs; p4 = callPackage ../applications/version-management/p4 { }; p4d = callPackage ../applications/version-management/p4d { }; - p4v = libsForQt515.callPackage ../applications/version-management/p4v { }; + p4v = callPackage ../applications/version-management/p4v { }; partio = callPackage ../development/libraries/partio {};