Merge pull request #268619 from tweag/lib-descriptions
[NixPkgs.git] / pkgs / applications / misc / mysql-workbench / default.nix
blobff9fb7c6b2cbe23c20fec752d83880bb5bdfe1f1
1 { lib, stdenv
2 , fetchurl
3 , substituteAll
4 , cmake
5 , ninja
6 , pkg-config
7 , glibc
8 , gtk3
9 , gtkmm3
10 , pcre
11 , swig
12 , antlr4_12
13 , sudo
14 , mysql
15 , libxml2
16 , libmysqlconnectorcpp
17 , vsqlite
18 , gdal
19 , libiodbc
20 , libpthreadstubs
21 , libXdmcp
22 , libuuid
23 , libzip
24 , libsecret
25 , libssh
26 , python3
27 , jre
28 , boost
29 , libsigcxx
30 , libX11
31 , openssl
32 , rapidjson
33 , proj
34 , cairo
35 , libxkbcommon
36 , libepoxy
37 , wrapGAppsHook
38 , at-spi2-core
39 , dbus
40 , bash
41 , coreutils
42 , zstd
45 let
46   inherit (python3.pkgs) paramiko pycairo pyodbc;
47 in stdenv.mkDerivation rec {
48   pname = "mysql-workbench";
49   version = "8.0.34";
51   src = fetchurl {
52     url = "https://cdn.mysql.com//Downloads/MySQLGUITools/mysql-workbench-community-${version}-src.tar.gz";
53     sha256 = "sha256-ub/D6HRtXOvX+lai71t1UjMmMzBsz5ljCrJCuf9aq7U=";
54   };
56   patches = [
57     (substituteAll {
58       src = ./hardcode-paths.patch;
59       catchsegv = "${glibc.bin}/bin/catchsegv";
60       bash = "${bash}/bin/bash";
61       cp = "${coreutils}/bin/cp";
62       dd = "${coreutils}/bin/dd";
63       ls = "${coreutils}/bin/ls";
64       mkdir = "${coreutils}/bin/mkdir";
65       nohup = "${coreutils}/bin/nohup";
66       rm = "${coreutils}/bin/rm";
67       rmdir = "${coreutils}/bin/rmdir";
68       stat = "${coreutils}/bin/stat";
69       sudo = "${sudo}/bin/sudo";
70     })
72     # Fix swig not being able to find headers
73     # https://github.com/NixOS/nixpkgs/pull/82362#issuecomment-597948461
74     (substituteAll {
75       src = ./fix-swig-build.patch;
76       cairoDev = "${cairo.dev}";
77     })
78   ];
80   # 1. have it look for 4.12.0 instead of 4.11.1
81   # 2. for some reason CMakeCache.txt is part of source code
82   preConfigure = ''
83     substituteInPlace CMakeLists.txt \
84       --replace "antlr-4.11.1-complete.jar" "antlr-4.12.0-complete.jar"
85     rm -f build/CMakeCache.txt
86   '';
88   nativeBuildInputs = [
89     cmake
90     ninja
91     pkg-config
92     jre
93     swig
94     wrapGAppsHook
95   ];
97   buildInputs = [
98     gtk3
99     gtkmm3
100     libX11
101     antlr4_12.runtime.cpp
102     python3
103     mysql
104     libxml2
105     libmysqlconnectorcpp
106     vsqlite
107     gdal
108     boost
109     libssh
110     openssl
111     rapidjson
112     libiodbc
113     pcre
114     cairo
115     libuuid
116     libzip
117     libsecret
118     libsigcxx
119     proj
121     # python dependencies:
122     paramiko
123     pycairo
124     pyodbc
125     # TODO: package sqlanydb and add it here
127     # transitive dependencies:
128     libpthreadstubs
129     libXdmcp
130     libxkbcommon
131     libepoxy
132     at-spi2-core
133     dbus
134     zstd
135   ];
137   postPatch = ''
138     patchShebangs tools/get_wb_version.sh
139   '';
141   env.NIX_CFLAGS_COMPILE = toString ([
142     # error: 'OGRErr OGRSpatialReference::importFromWkt(char**)' is deprecated
143     "-Wno-error=deprecated-declarations"
144   ] ++ lib.optionals stdenv.isAarch64 [
145     # error: narrowing conversion of '-1' from 'int' to 'char'
146     "-Wno-error=narrowing"
147   ] ++ lib.optionals (stdenv.cc.isGNU && lib.versionAtLeast stdenv.cc.version "12") [
148     # Needed with GCC 12 but problematic with some old GCCs
149     "-Wno-error=maybe-uninitialized"
150   ]);
152   cmakeFlags = [
153     "-DMySQL_CONFIG_PATH=${mysql}/bin/mysql_config"
154     "-DIODBC_CONFIG_PATH=${libiodbc}/bin/iodbc-config"
155     # mysql-workbench 8.0.21 depends on libmysqlconnectorcpp 1.1.8.
156     # Newer versions of connector still provide the legacy library when enabled
157     # but the headers are in a different location.
158     "-DWITH_ANTLR_JAR=${antlr4_12.jarLocation}"
159     "-DMySQLCppConn_INCLUDE_DIR=${libmysqlconnectorcpp}/include/jdbc"
160   ];
162   # There is already an executable and a wrapper in bindir
163   # No need to wrap both
164   dontWrapGApps = true;
166   preFixup = ''
167     gappsWrapperArgs+=(
168       --prefix PATH : "${python3}/bin"
169       --prefix PROJSO : "${proj}/lib/libproj.so"
170       --set PYTHONPATH $PYTHONPATH
171     )
172   '';
174   # Let’s wrap the programs not ending with bin
175   # until https://bugs.mysql.com/bug.php?id=91948 is fixed
176   postFixup = ''
177     find -L "$out/bin" -type f -executable -print0 \
178       | while IFS= read -r -d ''' file; do
179       if [[ "''${file}" != *-bin ]]; then
180         echo "Wrapping program $file"
181         wrapGApp "$file"
182       fi
183     done
184   '';
186   meta = with lib; {
187     description = "Visual MySQL database modeling, administration and querying tool";
188     longDescription = ''
189       MySQL Workbench is a modeling tool that allows you to design
190       and generate MySQL databases graphically. It also has administration
191       and query development modules where you can manage MySQL server instances
192       and execute SQL queries.
193     '';
195     homepage = "http://wb.mysql.com/";
196     license = licenses.gpl2;
197     maintainers = [ ];
198     platforms = platforms.linux;
199     mainProgram = "mysql-workbench";
200   };