diff --git a/pkgs/applications/misc/dbeaver/default.nix b/pkgs/applications/misc/dbeaver/default.nix index 05d282aaf06..774fcc75b2d 100644 --- a/pkgs/applications/misc/dbeaver/default.nix +++ b/pkgs/applications/misc/dbeaver/default.nix @@ -1,14 +1,20 @@ -{ lib, stdenv, fetchurl, makeDesktopItem, makeWrapper -, fontconfig, freetype, glib, gtk3 -, jdk, libX11, libXrender, libXtst, zlib }: - -# The build process is almost like eclipse's. -# See `pkgs/applications/editors/eclipse/*.nix` - -stdenv.mkDerivation rec { - pname = "dbeaver-ce"; - version = "7.3.2"; - +{ lib +, stdenv +, fetchFromGitHub +, makeDesktopItem +, makeWrapper +, fontconfig +, freetype +, glib +, gtk3 +, jdk +, libX11 +, libXrender +, libXtst +, zlib +, maven +}: +let desktopItem = makeDesktopItem { name = "dbeaver"; exec = "dbeaver"; @@ -18,45 +24,101 @@ stdenv.mkDerivation rec { genericName = "SQL Integrated Development Environment"; categories = "Development;"; }; +in +stdenv.mkDerivation rec { + pname = "dbeaver-ce"; + version = "7.3.5"; # When updating also update fetchedMavenDeps.sha256 + + src = fetchFromGitHub { + owner = "dbeaver"; + repo = "dbeaver"; + rev = version; + sha256 = "sha256-gEE7rndOaXzruWL7TG+QgVkq1+06tIZwyGzU9cFc+oU="; + }; + + fetchedMavenDeps = stdenv.mkDerivation { + name = "dbeaver-${version}-maven-deps"; + inherit src; + + buildInputs = [ + maven + ]; + + buildPhase = "mvn package -Dmaven.repo.local=$out/.m2"; + + # keep only *.{pom,jar,sha1,nbm} and delete all ephemeral files with lastModified timestamps inside + installPhase = '' + find $out -type f \ + -name \*.lastUpdated -or \ + -name resolver-status.properties -or \ + -name _remote.repositories \ + -delete + ''; + + # don't do any fixup + dontFixup = true; + outputHashAlgo = "sha256"; + outputHashMode = "recursive"; + outputHash = "sha256-jT0Z154rVmafUbb6dqYSl3cUxMuK5MR4HUsprkrgSDw="; + }; buildInputs = [ - fontconfig freetype glib gtk3 - jdk libX11 libXrender libXtst zlib + fontconfig + freetype + glib + gtk3 + jdk + libX11 + libXrender + libXtst + makeWrapper + zlib ]; nativeBuildInputs = [ - makeWrapper + maven ]; - src = fetchurl { - url = "https://dbeaver.io/files/${version}/dbeaver-ce-${version}-linux.gtk.x86_64.tar.gz"; - sha256 = "sha256-4BVXcR8/E4uIrPQJe9KU9577j4XLTxJWTO8g0vCHWts="; - }; - - installPhase = '' - # remove bundled jre - rm -rf jre - - mkdir -p $out/ - cp -r . $out/dbeaver - - # Patch binaries. - interpreter=$(cat $NIX_CC/nix-support/dynamic-linker) - patchelf --set-interpreter $interpreter $out/dbeaver/dbeaver - - makeWrapper $out/dbeaver/dbeaver $out/bin/dbeaver \ - --prefix PATH : ${jdk}/bin \ - --prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath ([ glib gtk3 libXtst ])} \ - --prefix XDG_DATA_DIRS : "$GSETTINGS_SCHEMAS_PATH" - - # Create desktop item. - mkdir -p $out/share/applications - cp ${desktopItem}/share/applications/* $out/share/applications - - mkdir -p $out/share/pixmaps - ln -s $out/dbeaver/icon.xpm $out/share/pixmaps/dbeaver.xpm + buildPhase = '' + mvn package --offline -Dmaven.repo.local=$(cp -dpR ${fetchedMavenDeps}/.m2 ./ && chmod +w -R .m2 && pwd)/.m2 ''; + installPhase = + let + productTargetPath = "product/standalone/target/products/org.jkiss.dbeaver.core.product"; + in + if stdenv.isDarwin then '' + mkdir -p $out/Applications $out/bin + cp -r ${productTargetPath}/macosx/cocoa/x86_64/DBeaver.app $out/Applications + + sed -i "/^-vm/d; /bin\/java/d" $out/Applications/DBeaver.app/Contents/Eclipse/dbeaver.ini + + ln -s $out/Applications/DBeaver.app/Contents/MacOS/dbeaver $out/bin/dbeaver + + wrapProgram $out/Applications/DBeaver.app/Contents/MacOS/dbeaver \ + --prefix JAVA_HOME : ${jdk.home} \ + --prefix PATH : ${jdk}/bin + '' else '' + mkdir -p $out/ + cp -r ${productTargetPath}/linux/gtk/x86_64/dbeaver $out/dbeaver + + # Patch binaries. + interpreter=$(cat $NIX_CC/nix-support/dynamic-linker) + patchelf --set-interpreter $interpreter $out/dbeaver/dbeaver + + makeWrapper $out/dbeaver/dbeaver $out/bin/dbeaver \ + --prefix PATH : ${jdk}/bin \ + --prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath ([ glib gtk3 libXtst ])} \ + --prefix XDG_DATA_DIRS : "$GSETTINGS_SCHEMAS_PATH" + + # Create desktop item. + mkdir -p $out/share/applications + cp ${desktopItem}/share/applications/* $out/share/applications + + mkdir -p $out/share/pixmaps + ln -s $out/dbeaver/icon.xpm $out/share/pixmaps/dbeaver.xpm + ''; + meta = with lib; { homepage = "https://dbeaver.io/"; description = "Universal SQL Client for developers, DBA and analysts. Supports MySQL, PostgreSQL, MariaDB, SQLite, and more"; @@ -67,7 +129,7 @@ stdenv.mkDerivation rec { Teradata, Firebird, Derby, etc. ''; license = licenses.asl20; - platforms = [ "x86_64-linux" ]; - maintainers = [ maintainers.jojosch ]; + platforms = [ "x86_64-linux" "x86_64-darwin" ]; + maintainers = with maintainers; [ jojosch ]; }; } diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 3754a65dee5..0c887833f51 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -3479,7 +3479,15 @@ in davfs2 = callPackage ../tools/filesystems/davfs2 { }; - dbeaver = callPackage ../applications/misc/dbeaver { }; + dbeaver = callPackage ../applications/misc/dbeaver { + jdk = jdk11; # AlgorithmId.md5WithRSAEncryption_oid was removed in jdk15 + + # TODO: remove once maven uses JDK 11 + # error: org/eclipse/tycho/core/p2/P2ArtifactRepositoryLayout has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0 + maven = maven.override { + jdk = jdk11; + }; + }; dbench = callPackage ../development/tools/misc/dbench { };