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 00000000000..ec2dccfc359 --- /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 { + + 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 00000000000..9fe04ee70da --- /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 ]; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index b90623b29f3..f512e44cede 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -406,6 +406,10 @@ with pkgs; eclipse-mat = callPackage ../development/tools/eclipse-mat { }; + edgedb = callPackage ../tools/networking/edgedb { + inherit (darwin.apple_sdk.frameworks) CoreServices Security; + }; + efficient-compression-tool = callPackage ../tools/compression/efficient-compression-tool { }; evans = callPackage ../development/tools/evans { };