aboutsummaryrefslogtreecommitdiff
path: root/infra/libkookie/nixpkgs/pkgs/applications/misc/dbeaver/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'infra/libkookie/nixpkgs/pkgs/applications/misc/dbeaver/default.nix')
-rw-r--r--infra/libkookie/nixpkgs/pkgs/applications/misc/dbeaver/default.nix158
1 files changed, 120 insertions, 38 deletions
diff --git a/infra/libkookie/nixpkgs/pkgs/applications/misc/dbeaver/default.nix b/infra/libkookie/nixpkgs/pkgs/applications/misc/dbeaver/default.nix
index 05d282aaf064..68c9019f6edd 100644
--- a/infra/libkookie/nixpkgs/pkgs/applications/misc/dbeaver/default.nix
+++ b/infra/libkookie/nixpkgs/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,44 +24,120 @@ stdenv.mkDerivation rec {
genericName = "SQL Integrated Development Environment";
categories = "Development;";
};
+in
+stdenv.mkDerivation rec {
+ pname = "dbeaver-ce";
+ version = "21.0.0"; # When updating also update fetchedMavenDeps.sha256
+
+ src = fetchFromGitHub {
+ owner = "dbeaver";
+ repo = "dbeaver";
+ rev = version;
+ sha256 = "sha256-it0EcPD7TXSknjVkGv22Nq1D4J32OEncQDy4w9CIPNk=";
+ };
+
+ fetchedMavenDeps = stdenv.mkDerivation {
+ name = "dbeaver-${version}-maven-deps";
+ inherit src;
+
+ buildInputs = [
+ maven
+ ];
+
+ buildPhase = "mvn package -Dmaven.repo.local=$out/.m2 -P desktop,all-platforms";
+
+ # 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-xKlFFQXd2U513KZKQa7ttSFNX2gxVr9hNsvyaoN/rEE=";
+ };
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=";
- };
+ buildPhase = ''
+ runHook preBuild
+
+ mvn package --offline -Dmaven.repo.local=$(cp -dpR ${fetchedMavenDeps}/.m2 ./ && chmod +w -R .m2 && pwd)/.m2 -P desktop,all-platforms
- installPhase = ''
- # remove bundled jre
- rm -rf jre
+ runHook postBuild
+ '';
- mkdir -p $out/
- cp -r . $out/dbeaver
+ installPhase =
+ let
+ productTargetPath = "product/standalone/target/products/org.jkiss.dbeaver.core.product";
- # Patch binaries.
- interpreter=$(cat $NIX_CC/nix-support/dynamic-linker)
- patchelf --set-interpreter $interpreter $out/dbeaver/dbeaver
+ platformMap = {
+ aarch64-linux = "aarch64";
+ x86_64-darwin = "x86_64";
+ x86_64-linux = "x86_64";
+ };
- 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"
+ systemPlatform = platformMap.${stdenv.hostPlatform.system} or (throw "dbeaver not supported on ${stdenv.hostPlatform.system}");
+ in
+ if stdenv.isDarwin then ''
+ runHook preInstall
- # Create desktop item.
- mkdir -p $out/share/applications
- cp ${desktopItem}/share/applications/* $out/share/applications
+ mkdir -p $out/Applications $out/bin
+ cp -r ${productTargetPath}/macosx/cocoa/${systemPlatform}/DBeaver.app $out/Applications
- mkdir -p $out/share/pixmaps
- ln -s $out/dbeaver/icon.xpm $out/share/pixmaps/dbeaver.xpm
- '';
+ 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
+
+ runHook postInstall
+ '' else ''
+ runHook preInstall
+
+ mkdir -p $out/
+ cp -r ${productTargetPath}/linux/gtk/${systemPlatform}/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
+
+ runHook postInstall
+ '';
meta = with lib; {
homepage = "https://dbeaver.io/";
@@ -67,7 +149,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" "aarch64-linux" ];
+ maintainers = with maintainers; [ jojosch ];
};
}