about summary refs log tree commit diff
path: root/pkgs/development/tools/diesel-cli/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/development/tools/diesel-cli/default.nix')
-rw-r--r--pkgs/development/tools/diesel-cli/default.nix77
1 files changed, 77 insertions, 0 deletions
diff --git a/pkgs/development/tools/diesel-cli/default.nix b/pkgs/development/tools/diesel-cli/default.nix
new file mode 100644
index 000000000000..f6a67b051146
--- /dev/null
+++ b/pkgs/development/tools/diesel-cli/default.nix
@@ -0,0 +1,77 @@
+{ stdenv, lib, rustPlatform, fetchFromGitHub, openssl, pkgconfig, Security
+, sqliteSupport ? true, sqlite
+, postgresqlSupport ? true, postgresql
+, mysqlSupport ? true, mysql, zlib, libiconv
+}:
+
+assert lib.assertMsg (sqliteSupport == true || postgresqlSupport == true || mysqlSupport == true)
+  "support for at least one database must be enabled";
+
+let
+  inherit (stdenv.lib) optional optionals optionalString;
+  features = ''
+    ${optionalString sqliteSupport "sqlite"} \
+    ${optionalString postgresqlSupport "postgres"} \
+    ${optionalString mysqlSupport "mysql"} \
+  '';
+in
+
+rustPlatform.buildRustPackage rec {
+  pname = "diesel-cli";
+  version = "1.4.0";
+
+  src = fetchFromGitHub {
+    owner = "diesel-rs";
+    repo = "diesel";
+    rev = "v${version}";
+    sha256 = "0wp4hvpl9cf8hw1jyz3z476k5blrh6srfpv36dw10bj126rz9pvb";
+  };
+
+  patches = [
+    # Allow warnings to fix many instances of `error: trait objects without an explicit `dyn` are deprecated`
+    #
+    # Remove this after https://github.com/diesel-rs/diesel/commit/9004d1c3fa12aaee84986bd3d893002491373f8c
+    # is in a release.
+    ./allow-warnings.patch
+  ];
+
+  cargoBuildFlags = [ "--no-default-features --features \"${features}\"" ];
+  cargoPatches = [ ./cargo-lock.patch ];
+  cargoSha256 = "0xlcskddhy7xsiwj54gmn1xlgkfxb4dwrys7rbamfz1h8aa6ixjx";
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ openssl ]
+    ++ optional stdenv.isDarwin Security
+    ++ optional (stdenv.isDarwin && mysqlSupport) libiconv
+    ++ optional sqliteSupport sqlite
+    ++ optional postgresqlSupport postgresql
+    ++ optionals mysqlSupport [ mysql zlib ];
+
+  # We must `cd diesel_cli`, we cannot use `--package diesel_cli` to build
+  # because --features fails to apply to the package:
+  # https://github.com/rust-lang/cargo/issues/5015
+  # https://github.com/rust-lang/cargo/issues/4753
+  preBuild = "cd diesel_cli";
+  postBuild = "cd ..";
+
+  checkPhase = optionalString sqliteSupport ''
+    (cd diesel_cli && cargo check --features sqlite)
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    $out/bin/diesel --version
+  '';
+
+  # Fix the build with mariadb, which otherwise shows "error adding symbols:
+  # DSO missing from command line" errors for libz and libssl.
+  NIX_LDFLAGS = lib.optional mysqlSupport "-lz -lssl -lcrypto";
+
+  meta = with lib; {
+    description = "Database tool for working with Rust projects that use Diesel";
+    homepage = https://github.com/diesel-rs/diesel/tree/master/diesel_cli;
+    license = with licenses; [ mit asl20 ];
+    platforms = platforms.all;
+    maintainers = with maintainers; [ ivan ];
+  };
+}