about summary refs log tree commit diff
path: root/pkgs/tools/networking/edgedb
diff options
context:
space:
mode:
authorranfdev <ranfdev@gmail.com>2022-07-02 10:26:59 +0200
committerranfdev <ranfdev@gmail.com>2022-07-03 18:32:49 +0200
commitcf19e96438c4b772ed7f4600d35348ccca90ccae (patch)
tree3dbc4a0ecd998c851328f810d66b7bf227783690 /pkgs/tools/networking/edgedb
parent18b14a254dca6b68ca0ce2ce885ce2b550065799 (diff)
edgedb: init at unstable-2022-06-27
I can't init at 1.1.2 because there's an issue while vendoring the packages.
v1.1.2 seem to require two different version of the same package, causing an issue similar to
https://github.com/NixOS/nixpkgs/issues/30742.
Diffstat (limited to 'pkgs/tools/networking/edgedb')
-rw-r--r--pkgs/tools/networking/edgedb/0001-dynamically-patchelf-binaries.patch34
-rw-r--r--pkgs/tools/networking/edgedb/default.nix55
2 files changed, 89 insertions, 0 deletions
diff --git a/pkgs/tools/networking/edgedb/0001-dynamically-patchelf-binaries.patch b/pkgs/tools/networking/edgedb/0001-dynamically-patchelf-binaries.patch
new file mode 100644
index 0000000000000..ec2dccfc359a9
--- /dev/null
+++ b/pkgs/tools/networking/edgedb/0001-dynamically-patchelf-binaries.patch
@@ -0,0 +1,34 @@
+diff --git a/src/portable/install.rs b/src/portable/install.rs
+index dc0d932..5394fc1 100644
+--- a/src/portable/install.rs
++++ b/src/portable/install.rs
+@@ -133,8 +133,16 @@ fn unpack_package(cache_file: &Path, target_dir: &Path)
+     for entry in arch.entries()? {
+         let mut entry = entry?;
+         let path = entry.path()?;
++        let is_inside_bin = {
++            let mut path_iter = path.iter();
++            path_iter.next(); // discards first folder
++            path_iter.as_path().starts_with("bin")
++        };
+         if let Some(path) = build_path(&target_dir, &*path)? {
+-            entry.unpack(path)?;
++            entry.unpack(&path)?;
++            if is_inside_bin {
++                nix_patchelf_if_needed(&path);
++            }
+         }
+     }
+     bar.finish_and_clear();
+@@ -203,3 +211,11 @@ pub fn package(pkg_info: &PackageInfo) -> anyhow::Result<InstallInfo> {
+ 
+     Ok(info)
+ }
++
++fn nix_patchelf_if_needed(dest_path: &Path) {
++    let _ = ::std::process::Command::new("@patchelf@/bin/patchelf")
++        .arg("--set-interpreter")
++        .arg("@dynamicLinker@")
++        .arg(dest_path)
++        .output();
++}
diff --git a/pkgs/tools/networking/edgedb/default.nix b/pkgs/tools/networking/edgedb/default.nix
new file mode 100644
index 0000000000000..9fe04ee70daf9
--- /dev/null
+++ b/pkgs/tools/networking/edgedb/default.nix
@@ -0,0 +1,55 @@
+{ stdenv
+, lib
+, runCommand
+, patchelf
+, fetchFromGitHub
+, rustPlatform
+, makeWrapper
+, pkg-config
+, curl
+, Security
+, CoreServices
+, libiconv
+, xz
+, perl
+, substituteAll
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "edgedb";
+  version = "unstable-2022-06-27";
+
+  src = fetchFromGitHub {
+    owner = "edgedb";
+    repo = "edgedb-cli";
+    rev = "3c65c8bf0a09988356ad477d0ae234182f809b0a";
+    sha256 = "sha256-UqoRa5ZbPJEHo9wyyygrN1ssorgY3cLw/mMrCDXr4gw=";
+  };
+
+  cargoSha256 = "sha256-6HJkkem44+dat5bmVEM+7GSJFjCz1dYZeRIPEoEwNlI=";
+
+  nativeBuildInputs = [ makeWrapper pkg-config perl ];
+
+  buildInputs = [
+    curl
+  ] ++ lib.optionals stdenv.isDarwin [ CoreServices Security libiconv xz ];
+
+  checkFeatures = [ ];
+
+  patches = [
+    (substituteAll {
+      src = ./0001-dynamically-patchelf-binaries.patch;
+      inherit patchelf;
+      dynamicLinker = stdenv.cc.bintools.dynamicLinker;
+    })
+  ];
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = "EdgeDB cli";
+    homepage = "https://www.edgedb.com/docs/cli/index";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = [ maintainers.ranfdev ];
+  };
+}