about summary refs log tree commit diff
path: root/nixpkgs/pkgs/tools/package-management/pacman/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/tools/package-management/pacman/default.nix')
-rw-r--r--nixpkgs/pkgs/tools/package-management/pacman/default.nix134
1 files changed, 134 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/tools/package-management/pacman/default.nix b/nixpkgs/pkgs/tools/package-management/pacman/default.nix
new file mode 100644
index 000000000000..f9a7fcdcde59
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/pacman/default.nix
@@ -0,0 +1,134 @@
+{ lib
+, stdenv
+, fetchpatch
+, fetchurl
+, asciidoc
+, binutils
+, coreutils
+, curl
+, gpgme
+, installShellFiles
+, libarchive
+, makeWrapper
+, meson
+, ninja
+, openssl
+, perl
+, pkg-config
+, zlib
+
+# Compression tools in scripts/libmakepkg/util/compress.sh.in
+, gzip
+, bzip2
+, xz
+, zstd
+, lrzip
+, lzop
+, ncompress
+, lz4
+, lzip
+
+# pacman-key runtime dependencies
+, gawk
+, gettext
+, gnugrep
+, gnupg
+
+# Tells pacman where to find ALPM hooks provided by packages.
+# This path is very likely to be used in an Arch-like root.
+, sysHookDir ? "/usr/share/libalpm/hooks/"
+}:
+
+stdenv.mkDerivation rec {
+  pname = "pacman";
+  version = "6.0.2";
+
+  src = fetchurl {
+    url = "https://sources.archlinux.org/other/${pname}/${pname}-${version}.tar.xz";
+    hash = "sha256-fY4+jFEhrsCWXfcfWb7fRgUsbPFPljZcRBHsPeCkwaU=";
+  };
+
+  nativeBuildInputs = [
+    asciidoc
+    installShellFiles
+    makeWrapper
+    meson
+    ninja
+    pkg-config
+  ];
+
+  buildInputs = [
+    curl
+    gpgme
+    libarchive
+    openssl
+    perl
+    zlib
+  ];
+
+  patches = [
+    ./dont-create-empty-dirs.patch
+    # Add keyringdir meson option to configure the keyring directory
+    (fetchpatch {
+      url = "https://gitlab.archlinux.org/pacman/pacman/-/commit/79bd512181af12ec80fd8f79486fc9508fa4a1b3.patch";
+      hash = "sha256-ivTPwWe06Q5shn++R6EY0x3GC0P4X0SuC+F5sndfAtM=";
+    })
+  ];
+
+  postPatch = let compressionTools = [
+    gzip
+    bzip2
+    xz
+    zstd
+    lrzip
+    lzop
+    ncompress
+    lz4
+    lzip
+  ]; in ''
+    echo 'export PATH=${lib.makeBinPath compressionTools}:$PATH' >> scripts/libmakepkg/util/compress.sh.in
+    substituteInPlace meson.build \
+      --replace "install_dir : SYSCONFDIR" "install_dir : '$out/etc'" \
+      --replace "join_paths(DATAROOTDIR, 'libalpm/hooks/')" "'${sysHookDir}'" \
+      --replace "join_paths(PREFIX, DATAROOTDIR, get_option('keyringdir'))" "'\$KEYRING_IMPORT_DIR'"
+    substituteInPlace doc/meson.build \
+      --replace "/bin/true" "${coreutils}/bin/true"
+    substituteInPlace scripts/repo-add.sh.in \
+      --replace bsdtar "${libarchive}/bin/bsdtar"
+    substituteInPlace scripts/pacman-key.sh.in \
+      --replace "local KEYRING_IMPORT_DIR='@keyringdir@'" "" \
+      --subst-var-by keyringdir '\$KEYRING_IMPORT_DIR' \
+      --replace "--batch --check-trustdb" "--batch --check-trustdb --allow-weak-key-signatures"
+  ''; # the line above should be removed once Arch migrates to gnupg 2.3.x
+
+  mesonFlags = [
+    "--sysconfdir=/etc"
+    "--localstatedir=/var"
+  ];
+
+  hardeningDisable = [ "fortify3" ];
+
+  postInstall = ''
+    installShellCompletion --bash scripts/pacman --zsh scripts/_pacman
+    wrapProgram $out/bin/makepkg \
+      --prefix PATH : ${lib.makeBinPath [ binutils ]}
+    wrapProgram $out/bin/pacman-key \
+      --prefix PATH : ${lib.makeBinPath [
+        "${placeholder "out"}"
+        coreutils
+        gawk
+        gettext
+        gnugrep
+        gnupg
+      ]}
+  '';
+
+  meta = with lib; {
+    description = "A simple library-based package manager";
+    homepage = "https://archlinux.org/pacman/";
+    changelog = "https://gitlab.archlinux.org/pacman/pacman/-/raw/v${version}/NEWS";
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ samlukeyes123 ];
+  };
+}