diff options
author | github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> | 2022-10-17 18:10:17 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-10-17 18:10:17 +0000 |
commit | 3834216ec6c16439f8fd908a0e42c41accf2c387 (patch) | |
tree | f20a9f86933f0e0c874c95f5e8a71d1cfdc72515 /pkgs/applications/version-management | |
parent | 969a1796ef2433707a52cb128de0739b9e272a2e (diff) | |
parent | 87c6a9a57c4ef5fb5f5917caf05be685d4abc632 (diff) |
Merge master into staging-next
Diffstat (limited to 'pkgs/applications/version-management')
4 files changed, 139 insertions, 70 deletions
diff --git a/pkgs/applications/version-management/git-and-tools/git-nomad/default.nix b/pkgs/applications/version-management/git-and-tools/git-nomad/default.nix index f11e978ceafbd..04ba2ca849a6e 100644 --- a/pkgs/applications/version-management/git-and-tools/git-nomad/default.nix +++ b/pkgs/applications/version-management/git-and-tools/git-nomad/default.nix @@ -1,4 +1,4 @@ -{ lib, rustPlatform, fetchFromGitHub }: +{ lib, stdenv, rustPlatform, fetchFromGitHub, SystemConfiguration }: rustPlatform.buildRustPackage rec { pname = "git-nomad"; @@ -11,6 +11,8 @@ rustPlatform.buildRustPackage rec { sha256 = "sha256-1PXAdXafkPOIVzaWjW/RlWHwYhMqPoj0Hj5JmOMUj8A="; }; + buildInputs = lib.optionals stdenv.isDarwin [ SystemConfiguration ]; + cargoHash = "sha256-ULcdJRla1JwI0y6ngW9xQXjNw2wO48HuAczsNIsJJK0="; meta = with lib; { diff --git a/pkgs/applications/version-management/p4v/darwin.nix b/pkgs/applications/version-management/p4v/darwin.nix new file mode 100644 index 0000000000000..d3d3568b9f2e2 --- /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 9c804a7459b49..1004661499be2 100644 --- a/pkgs/applications/version-management/p4v/default.nix +++ b/pkgs/applications/version-management/p4v/default.nix @@ -1,84 +1,38 @@ { stdenv , fetchurl , lib -, qtbase -, qtwebengine -, qtdeclarative -, qtwebchannel -, syntax-highlighting -, openssl -, xkeyboard_config -, patchelfUnstable -, wrapQtAppsHook -, writeText +, callPackage +, libsForQt5 }: -let - # This abomination exists because p4v calls CRYPTO_set_mem_functions and - # expects it to succeed. The function will fail if CRYPTO_malloc has already - # been called, which happens at init time via qtwebengine -> ... -> libssh. I - # suspect it was meant to work with a version of Qt where openssl is - # statically linked or some other library is used. - crypto-hack = writeText "crypto-hack.c" '' - #include <stddef.h> - int CRYPTO_set_mem_functions( - void *(*m)(size_t, const char *, int), - void *(*r)(void *, size_t, const char *, int), - void (*f)(void *, const char *, int)) { return 1; } - ''; - -in stdenv.mkDerivation rec { - pname = "p4v"; - version = "2021.3.2186916"; - src = fetchurl { - url = "http://web.archive.org/web/20211118024745/https://cdist2.perforce.com/perforce/r21.3/bin.linux26x86_64/p4v.tgz"; - sha256 = "1zldg21xq4srww9pcfbv3p8320ghjnh333pz5r70z1gwbq4vf3jq"; +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"; + }; }; - dontBuild = true; - nativeBuildInputs = [ patchelfUnstable wrapQtAppsHook ]; - - ldLibraryPath = lib.makeLibraryPath [ - stdenv.cc.cc.lib - qtbase - qtwebengine - qtdeclarative - qtwebchannel - syntax-highlighting - openssl - ]; - - dontWrapQtApps = true; - installPhase = '' - mkdir $out - cp -r bin $out - mkdir -p $out/lib - cp -r lib/P4VResources $out/lib - $CC -fPIC -shared -o $out/lib/libcrypto-hack.so ${crypto-hack} - - for f in $out/bin/*.bin ; do - patchelf --set-rpath $ldLibraryPath --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" $f - # combining this with above breaks rpath (patchelf bug?) - patchelf --add-needed libstdc++.so \ - --add-needed $out/lib/libcrypto-hack.so \ - --clear-symbol-version _ZNSt20bad_array_new_lengthD1Ev \ - --clear-symbol-version _ZTVSt20bad_array_new_length \ - --clear-symbol-version _ZTISt20bad_array_new_length \ - --clear-symbol-version _ZdlPvm \ - $f - wrapQtApp $f \ - --suffix QT_XKB_CONFIG_ROOT : ${xkeyboard_config}/share/X11/xkb - done - ''; + mkDerivation = + if stdenv.isDarwin then callPackage ./darwin.nix { } + else libsForQt5.callPackage ./linux.nix { }; +in mkDerivation { + pname = "p4v"; + version = "2022.2.2336701"; - dontFixup = true; + src = srcs.${stdenv.hostPlatform.system} or (throw "Unsupported system: ${stdenv.hostPlatform.system}"); meta = { - description = "Perforce Visual Client"; + 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; [ nathyong nioncode ]; + platforms = builtins.attrNames srcs; + maintainers = with lib.maintainers; [ impl nathyong nioncode ]; }; } diff --git a/pkgs/applications/version-management/p4v/linux.nix b/pkgs/applications/version-management/p4v/linux.nix new file mode 100644 index 0000000000000..6a9d6ba6aad4b --- /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; +} |