python312Packages.llm-gguf: init at 0.2 (#364926)
[NixPkgs.git] / pkgs / development / libraries / qt-6 / modules / qtbase.nix
blob90a09ad165f1236491c1a4d3166f590091c180e8
2   stdenv,
3   lib,
4   src,
5   patches ? [ ],
6   version,
7   bison,
8   flex,
9   gperf,
10   lndir,
11   perl,
12   pkg-config,
13   which,
14   cmake,
15   ninja,
16   xmlstarlet,
17   libproxy,
18   xorg,
19   zstd,
20   double-conversion,
21   util-linux,
22   systemd,
23   systemdSupport ? stdenv.hostPlatform.isLinux,
24   libb2,
25   md4c,
26   mtdev,
27   lksctp-tools,
28   libselinux,
29   libsepol,
30   vulkan-headers,
31   vulkan-loader,
32   libthai,
33   libdrm,
34   libdatrie,
35   lttng-ust,
36   libepoxy,
37   dbus,
38   fontconfig,
39   freetype,
40   glib,
41   harfbuzz,
42   icu,
43   libX11,
44   libXcomposite,
45   libXext,
46   libXi,
47   libXrender,
48   libinput,
49   libjpeg,
50   libpng,
51   libxcb,
52   libxkbcommon,
53   libxml2,
54   libxslt,
55   openssl,
56   pcre,
57   pcre2,
58   sqlite,
59   udev,
60   xcbutil,
61   xcbutilimage,
62   xcbutilkeysyms,
63   xcbutilrenderutil,
64   xcbutilwm,
65   zlib,
66   at-spi2-core,
67   unixODBC,
68   unixODBCDrivers,
69   # darwin
70   moveBuildTree,
71   darwinVersionInputs,
72   xcbuild,
73   # mingw
74   pkgsBuildBuild,
75   # optional dependencies
76   cups,
77   libmysqlclient,
78   postgresql,
79   withGtk3 ? false,
80   dconf,
81   gtk3,
82   # options
83   libGLSupported ? stdenv.hostPlatform.isLinux,
84   libGL,
85   qttranslations ? null,
88 let
89   isCrossBuild = !stdenv.buildPlatform.canExecute stdenv.hostPlatform;
91 stdenv.mkDerivation rec {
92   pname = "qtbase";
94   inherit src version;
96   propagatedBuildInputs =
97     [
98       libxml2
99       libxslt
100       openssl
101       sqlite
102       zlib
103       # Text rendering
104       harfbuzz
105       icu
106       # Image formats
107       libjpeg
108       libpng
109       pcre2
110       pcre
111       zstd
112       libb2
113       md4c
114       double-conversion
115     ]
116     ++ lib.optionals (!stdenv.hostPlatform.isMinGW) [
117       libproxy
118       dbus
119       glib
120       # unixODBC drivers
121       unixODBC
122       unixODBCDrivers.psql
123       unixODBCDrivers.sqlite
124       unixODBCDrivers.mariadb
125     ]
126     ++ lib.optionals systemdSupport [
127       systemd
128     ]
129     ++ lib.optionals stdenv.hostPlatform.isLinux [
130       util-linux
131       mtdev
132       lksctp-tools
133       libselinux
134       libsepol
135       lttng-ust
136       vulkan-headers
137       vulkan-loader
138       libthai
139       libdrm
140       libdatrie
141       udev
142       # Text rendering
143       fontconfig
144       freetype
145       # X11 libs
146       libX11
147       libXcomposite
148       libXext
149       libXi
150       libXrender
151       libxcb
152       libxkbcommon
153       xcbutil
154       xcbutilimage
155       xcbutilkeysyms
156       xcbutilrenderutil
157       xcbutilwm
158       xorg.libXdmcp
159       xorg.libXtst
160       xorg.xcbutilcursor
161       libepoxy
162     ]
163     ++ lib.optionals libGLSupported [
164       libGL
165     ]
166     ++ lib.optionals stdenv.hostPlatform.isMinGW [
167       vulkan-headers
168       vulkan-loader
169     ]
170     ++ lib.optional (cups != null && lib.meta.availableOn stdenv.hostPlatform cups) cups;
172   buildInputs =
173     lib.optionals (lib.meta.availableOn stdenv.hostPlatform at-spi2-core) [
174       at-spi2-core
175     ]
176     ++ lib.optionals (lib.meta.availableOn stdenv.hostPlatform libinput) [
177       libinput
178     ]
179     ++ lib.optionals stdenv.hostPlatform.isDarwin darwinVersionInputs
180     ++ lib.optional withGtk3 gtk3
181     ++ lib.optional (libmysqlclient != null && !stdenv.hostPlatform.isMinGW) libmysqlclient
182     ++ lib.optional (
183       postgresql != null && lib.meta.availableOn stdenv.hostPlatform postgresql
184     ) postgresql;
186   nativeBuildInputs = [
187     bison
188     flex
189     gperf
190     lndir
191     perl
192     pkg-config
193     which
194     cmake
195     xmlstarlet
196     ninja
197   ] ++ lib.optionals stdenv.hostPlatform.isDarwin [ moveBuildTree ];
199   propagatedNativeBuildInputs =
200     [ lndir ]
201     # I’m not sure if this is necessary, but the macOS mkspecs stuff
202     # tries to call `xcrun xcodebuild`, so better safe than sorry.
203     ++ lib.optionals stdenv.hostPlatform.isDarwin [ xcbuild ];
205   strictDeps = true;
207   enableParallelBuilding = true;
209   inherit patches;
211   postPatch = lib.optionalString stdenv.hostPlatform.isDarwin ''
212     # TODO: Verify that this catches all the occurrences?
213     for file in \
214       cmake/QtPublicAppleHelpers.cmake \
215       mkspecs/features/mac/asset_catalogs.prf \
216       mkspecs/features/mac/default_pre.prf \
217       mkspecs/features/mac/sdk.mk \
218       mkspecs/features/mac/sdk.prf \
219       mkspecs/features/permissions.prf \
220       src/corelib/Qt6CoreMacros.cmake
221     do
222       substituteInPlace "$file" \
223         --replace-quiet /usr/bin/xcrun '${lib.getExe' xcbuild "xcrun"}' \
224         --replace-quiet /usr/bin/xcode-select '${lib.getExe' xcbuild "xcode-select"}' \
225         --replace-quiet /usr/libexec/PlistBuddy '${lib.getExe' xcbuild "PlistBuddy"}'
226     done
228     substituteInPlace mkspecs/common/macx.conf \
229       --replace-fail 'CONFIG += ' 'CONFIG += no_default_rpath '
230   '';
232   fix_qt_builtin_paths = ../hooks/fix-qt-builtin-paths.sh;
233   fix_qt_module_paths = ../hooks/fix-qt-module-paths.sh;
234   preHook = ''
235     . "$fix_qt_builtin_paths"
236     . "$fix_qt_module_paths"
237   '';
239   qtPluginPrefix = "lib/qt-6/plugins";
240   qtQmlPrefix = "lib/qt-6/qml";
242   cmakeFlags =
243     [
244       "-DQT_EMBED_TOOLCHAIN_COMPILER=OFF"
245       "-DINSTALL_PLUGINSDIR=${qtPluginPrefix}"
246       "-DINSTALL_QMLDIR=${qtQmlPrefix}"
247       "-DQT_FEATURE_libproxy=ON"
248       "-DQT_FEATURE_system_sqlite=ON"
249       "-DQT_FEATURE_openssl_linked=ON"
250     ]
251     ++ lib.optionals (!stdenv.hostPlatform.isDarwin) [
252       "-DQT_FEATURE_sctp=ON"
253       "-DQT_FEATURE_journald=${if systemdSupport then "ON" else "OFF"}"
254       "-DQT_FEATURE_vulkan=ON"
255     ]
256     ++ lib.optionals stdenv.hostPlatform.isDarwin [
257       "-DQT_FEATURE_rpath=OFF"
258     ]
259     ++ lib.optionals isCrossBuild [
260       "-DQT_HOST_PATH=${pkgsBuildBuild.qt6.qtbase}"
261       "-DQt6HostInfo_DIR=${pkgsBuildBuild.qt6.qtbase}/lib/cmake/Qt6HostInfo"
262     ]
263     ++ lib.optional (
264       qttranslations != null && !isCrossBuild
265     ) "-DINSTALL_TRANSLATIONSDIR=${qttranslations}/translations";
267   env.NIX_CFLAGS_COMPILE = "-DNIXPKGS_QT_PLUGIN_PREFIX=\"${qtPluginPrefix}\"";
269   outputs = [
270     "out"
271     "dev"
272   ];
273   separateDebugInfo = true;
275   moveToDev = false;
277   postFixup =
278     ''
279       moveToOutput      "mkspecs/modules" "$dev"
280       fixQtModulePaths  "$dev/mkspecs/modules"
281       fixQtBuiltinPaths "$out" '*.pr?'
282     ''
283     + lib.optionalString stdenv.hostPlatform.isLinux ''
285       # FIXME: not sure why this isn't added automatically?
286       patchelf --add-rpath "${libmysqlclient}/lib/mariadb" $out/${qtPluginPrefix}/sqldrivers/libqsqlmysql.so
287     '';
289   dontWrapQtApps = true;
291   setupHook = ../hooks/qtbase-setup-hook.sh;
293   meta = with lib; {
294     homepage = "https://www.qt.io/";
295     description = "Cross-platform application framework for C++";
296     license = with licenses; [
297       fdl13Plus
298       gpl2Plus
299       lgpl21Plus
300       lgpl3Plus
301     ];
302     maintainers = with maintainers; [
303       milahu
304       nickcao
305       LunNova
306     ];
307     platforms = platforms.unix ++ platforms.windows;
308   };