about summary refs log tree commit diff
path: root/pkgs/applications/version-management
diff options
context:
space:
mode:
authorAnderson Torres <torres.anderson.85@protonmail.com>2022-10-11 00:11:22 -0300
committerGitHub <noreply@github.com>2022-10-11 00:11:22 -0300
commit77c986e784ebd1a40da0d5bed9f459933fe6874d (patch)
treef7d83c3fb7e238106cc1144c0c8cdcde51c069e3 /pkgs/applications/version-management
parentb7fa69bbea93d990454dbf42f310de1af8940459 (diff)
parent453192aa4ba3c76e3071531132417d45cf214485 (diff)
Merge pull request #190105 from impl/free-p4
p4: 2021.2.2201121 -> 2022.1.2305383, build from source and remove unfree binaries
Diffstat (limited to 'pkgs/applications/version-management')
-rw-r--r--pkgs/applications/version-management/p4/default.nix114
-rw-r--r--pkgs/applications/version-management/p4d/default.nix2
2 files changed, 100 insertions, 16 deletions
diff --git a/pkgs/applications/version-management/p4/default.nix b/pkgs/applications/version-management/p4/default.nix
index 4f61be6669aa1..8a54d4eb77bf2 100644
--- a/pkgs/applications/version-management/p4/default.nix
+++ b/pkgs/applications/version-management/p4/default.nix
@@ -1,31 +1,115 @@
-{ stdenv, fetchurl, lib, autoPatchelfHook }:
+{ stdenv
+, fetchurl
+, fetchzip
+, lib
+, emptyDirectory
+, linkFarm
+, symlinkJoin
+, jam
+, libcxx
+, libcxxabi
+, openssl
+, xcbuild
+, CoreServices
+, Foundation
+, Security
+}:
 
+let
+  opensslStatic = openssl.override {
+    static = true;
+  };
+  androidZlibContrib =
+    let
+      src = fetchzip {
+        url = "https://android.googlesource.com/platform/external/zlib/+archive/61174f4fd262c6075f88768465f308aae95a2f04.tar.gz";
+        sha256 = "sha256-EMzKAHcEWOUugcHKH2Fj3ZaIHC9UlgO4ULKe3RvgxvI=";
+        stripRoot = false;
+      };
+    in
+    linkFarm "android-zlib-contrib" [
+      # We only want to keep the contrib directory as the other files conflict
+      # with p4's own zlib files. (For the same reason, we can't use the
+      # cone-based Git sparse checkout, either.)
+      { name = "contrib"; path = "${src}/contrib"; }
+    ];
+  libcxxUnified = symlinkJoin {
+    inherit (libcxx) name;
+    paths = [ libcxx libcxxabi ];
+  };
+in
 stdenv.mkDerivation rec {
   pname = "p4";
-  version = "2021.2.2201121";
+  version = "2022.1.2305383";
 
   src = fetchurl {
-    # actually  https://cdist2.perforce.com/perforce/r21.2/bin.linux26x86_64/helix-core-server.tgz but upstream deletes releases
-    url = "https://web.archive.org/web/20211118024943/https://cdist2.perforce.com/perforce/r21.2/bin.linux26x86_64/helix-core-server.tgz";
-    sha256 = "sha256-SrfI2ZD7KDyttCd8+fo8g4UZKljYYO/SbzqrS9tAcC8=";
+    # Upstream replaces minor versions, so use archived URL.
+    url = "https://web.archive.org/web/20220901184735id_/https://ftp.perforce.com/perforce/r22.1/bin.tools/p4source.tgz";
+    sha256 = "27ab3ddd7b178b05cf0b710e941650dac0688d294110ebafda9027732c0944c6";
   };
 
-  sourceRoot = ".";
+  nativeBuildInputs = [ jam ];
+
+  buildInputs = lib.optionals stdenv.isDarwin [ CoreServices Foundation Security ];
+
+  outputs = [ "out" "bin" "dev" ];
 
-  dontBuild = true;
+  hardeningDisable = lib.optionals stdenv.isDarwin [ "strictoverflow" ];
 
-  nativeBuildInputs = [ autoPatchelfHook ];
+  jamFlags =
+    [
+      "-sEXEC=bin.unix"
+      "-sCROSS_COMPILE=${stdenv.cc.targetPrefix}"
+      "-sMALLOC_OVERRIDE=no"
+      "-sSSLINCDIR=${lib.getDev opensslStatic}/include"
+      "-sSSLLIBDIR=${lib.getLib opensslStatic}/lib"
+    ]
+    ++ lib.optionals stdenv.cc.isClang [ "-sOSCOMP=clang" "-sCLANGVER=${stdenv.cc.cc.version}" ]
+    ++ lib.optionals stdenv.cc.isGNU [ "-sOSCOMP=gcc" "-sGCCVER=${stdenv.cc.cc.version}" ]
+    ++ lib.optionals stdenv.isLinux [ "-sOSVER=26" ]
+    ++ lib.optionals stdenv.isDarwin [
+      "-sOSVER=1013"
+      "-sMACOSX_SDK=${emptyDirectory}"
+      "-sLIBC++DIR=${libcxxUnified}/lib"
+    ];
+
+  CCFLAGS =
+    # The file contrib/optimizations/slide_hash_neon.h is missing from the
+    # upstream distribution. It comes from the Android/Chromium sources.
+    lib.optionals stdenv.isAarch64 [ "-I${androidZlibContrib}" ];
+
+  "C++FLAGS" =
+    # Avoid a compilation error that only occurs for 4-byte longs.
+    lib.optionals stdenv.isi686 [ "-Wno-narrowing" ]
+    # See the "Header dependency changes" section of
+    # https://www.gnu.org/software/gcc/gcc-11/porting_to.html for more
+    # information on why we need to include these.
+    ++ lib.optionals
+      (stdenv.cc.isClang || (stdenv.cc.isGNU && lib.versionAtLeast stdenv.cc.cc.version "11.0.0"))
+      [ "-include" "limits" "-include" "thread" ];
+
+  buildPhase = ''
+    runHook preBuild
+    jam $jamFlags -j$NIX_BUILD_CORES p4
+    jam $jamFlags -j$NIX_BUILD_CORES -sPRODUCTION=yes p4api.tar
+    runHook postBuild
+  '';
 
   installPhase = ''
-    install -D --target $out/bin p4 p4broker p4d p4p
+    runHook preInstall
+    mkdir -p $bin/bin $dev $out
+    cp bin.unix/p4 $bin/bin
+    cp -r bin.unix/p4api-${version}/include $dev
+    cp -r bin.unix/p4api-${version}/lib $out
+    runHook postInstall
   '';
 
-  meta = {
-    description = "Perforce Command-Line Client";
+  meta = with lib; {
+    description = "Perforce Helix Core command-line client and APIs";
     homepage = "https://www.perforce.com";
-    sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
-    license = lib.licenses.unfree;
-    platforms = [ "x86_64-linux" ];
-    maintainers = with lib.maintainers; [ corngood ];
+    license = licenses.bsd2;
+    mainProgram = "p4";
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ corngood impl ];
   };
 }
diff --git a/pkgs/applications/version-management/p4d/default.nix b/pkgs/applications/version-management/p4d/default.nix
index 5b98131303d3b..e2cf8e1013c3d 100644
--- a/pkgs/applications/version-management/p4d/default.nix
+++ b/pkgs/applications/version-management/p4d/default.nix
@@ -47,6 +47,6 @@ stdenv.mkDerivation {
     license = licenses.unfree;
     mainProgram = "p4d";
     platforms = builtins.attrNames srcs;
-    maintainers = with maintainers; [ impl ];
+    maintainers = with maintainers; [ corngood impl ];
   };
 }