python3Packages.orjson: Disable failing tests on 32 bit
[NixPkgs.git] / pkgs / development / libraries / qt-6 / modules / qtwebengine.nix
blobf7bdd2543b0ed9282ff0d96430c536b632f331c4
1 { qtModule
2 , qtdeclarative
3 , qtwebchannel
4 , qtpositioning
5 , qtwebsockets
6 , buildPackages
7 , bison
8 , coreutils
9 , flex
10 , git
11 , gperf
12 , ninja
13 , pkg-config
14 , python3
15 , which
16 , nodejs
17 , qtbase
18 , perl
19 , xorg
20 , libXcursor
21 , libXScrnSaver
22 , libXrandr
23 , libXtst
24 , libxshmfence
25 , libXi
26 , fontconfig
27 , freetype
28 , harfbuzz
29 , icu
30 , dbus
31 , libdrm
32 , zlib
33 , minizip
34 , libjpeg
35 , libpng
36 , libtiff
37 , libwebp
38 , libopus
39 , jsoncpp
40 , protobuf
41 , libvpx
42 , srtp
43 , snappy
44 , nss
45 , libevent
46 , openssl
47 , alsa-lib
48 , pulseaudio
49 , libcap
50 , pciutils
51 , systemd
52 , pipewire
53 , gn
54 , cups
55 , openbsm
56 , runCommand
57 , writeScriptBin
58 , ffmpeg
59 , lib
60 , stdenv
61 , glib
62 , libxml2
63 , libxslt
64 , lcms2
65 , re2
66 , libkrb5
67 , mesa
68 , xkeyboard_config
69 , enableProprietaryCodecs ? true
72 qtModule {
73   pname = "qtwebengine";
74   qtInputs = [ qtdeclarative qtwebchannel qtwebsockets qtpositioning ];
75   nativeBuildInputs = [
76     bison
77     coreutils
78     flex
79     git
80     gperf
81     ninja
82     pkg-config
83     (python3.withPackages (ps: with ps; [ html5lib ]))
84     which
85     gn
86     nodejs
87   ];
88   doCheck = true;
89   outputs = [ "out" "dev" ];
91   dontUseGnConfigure = true;
93   # ninja builds some components with -Wno-format,
94   # which cannot be set at the same time as -Wformat-security
95   hardeningDisable = [ "format" ];
97   patches = [
98     # fixes consistent crashing in github on 6.4.0, can probably remove when there is a patch release
99     # https://codereview.qt-project.org/c/qt/qtwebengine/+/436316
100     ../patches/qtwebengine-fix.patch
101   ];
103   postPatch = ''
104     # Patch Chromium build tools
105     (
106       cd src/3rdparty/chromium;
108       # Manually fix unsupported shebangs
109       substituteInPlace third_party/harfbuzz-ng/src/src/update-unicode-tables.make \
110         --replace "/usr/bin/env -S make -f" "/usr/bin/make -f" || true
111       substituteInPlace third_party/webgpu-cts/src/tools/run_deno \
112         --replace "/usr/bin/env -S deno" "/usr/bin/deno" || true
113       patchShebangs .
114     )
116     substituteInPlace cmake/Functions.cmake \
117       --replace "/bin/bash" "${buildPackages.bash}/bin/bash"
119     sed -i -e '/lib_loader.*Load/s!"\(libudev\.so\)!"${lib.getLib systemd}/lib/\1!' \
120       src/3rdparty/chromium/device/udev_linux/udev?_loader.cc
122     sed -i -e '/libpci_loader.*Load/s!"\(libpci\.so\)!"${pciutils}/lib/\1!' \
123       src/3rdparty/chromium/gpu/config/gpu_info_collector_linux.cc
125     substituteInPlace src/3rdparty/chromium/ui/events/ozone/layout/xkb/xkb_keyboard_layout_engine.cc \
126       --replace "/usr/share/X11/xkb" "${xkeyboard_config}/share/X11/xkb"
128     # Patch library paths in sources
129     substituteInPlace src/core/web_engine_library_info.cpp \
130       --replace "QLibraryInfo::path(QLibraryInfo::DataPath)" "\"$out\"" \
131       --replace "QLibraryInfo::path(QLibraryInfo::TranslationsPath)" "\"$out/translations\"" \
132       --replace "QLibraryInfo::path(QLibraryInfo::LibraryExecutablesPath)" "\"$out/libexec\""
133   '';
135   cmakeFlags = [
136     "-DQT_FEATURE_qtpdf_build=ON"
137     "-DQT_FEATURE_qtpdf_widgets_build=ON"
138     "-DQT_FEATURE_qtpdf_quick_build=ON"
139     "-DQT_FEATURE_pdf_v8=ON"
140     "-DQT_FEATURE_pdf_xfa=ON"
141     "-DQT_FEATURE_pdf_xfa_bmp=ON"
142     "-DQT_FEATURE_pdf_xfa_gif=ON"
143     "-DQT_FEATURE_pdf_xfa_png=ON"
144     "-DQT_FEATURE_pdf_xfa_tiff=ON"
145     "-DQT_FEATURE_webengine_system_icu=ON"
146     "-DQT_FEATURE_webengine_system_libevent=ON"
147     "-DQT_FEATURE_webengine_system_libxml=ON"
148     "-DQT_FEATURE_webengine_system_ffmpeg=ON"
149     # android only. https://bugreports.qt.io/browse/QTBUG-100293
150     # "-DQT_FEATURE_webengine_native_spellchecker=ON"
151     "-DQT_FEATURE_webengine_sanitizer=ON"
152     "-DQT_FEATURE_webengine_webrtc_pipewire=ON"
153     "-DQT_FEATURE_webengine_kerberos=ON"
154   ] ++ lib.optional enableProprietaryCodecs "-DQT_FEATURE_webengine_proprietary_codecs=ON";
156   propagatedBuildInputs = [
157     # Image formats
158     libjpeg
159     libpng
160     libtiff
161     libwebp
163     # Video formats
164     srtp
165     libvpx
167     # Audio formats
168     libopus
170     # Text rendering
171     harfbuzz
172     icu
174     openssl
175     glib
176     libxml2
177     libxslt
178     lcms2
179     re2
181     libevent
182     ffmpeg
184     dbus
185     zlib
186     minizip
187     snappy
188     nss
189     protobuf
190     jsoncpp
192     # Audio formats
193     alsa-lib
194     pulseaudio
196     # Text rendering
197     fontconfig
198     freetype
200     libcap
201     pciutils
203     # X11 libs
204     xorg.xrandr
205     libXScrnSaver
206     libXcursor
207     libXrandr
208     xorg.libpciaccess
209     libXtst
210     xorg.libXcomposite
211     xorg.libXdamage
212     libdrm
213     xorg.libxkbfile
214     libxshmfence
215     libXi
216     xorg.libXext
218     # Pipewire
219     pipewire
221     libkrb5
222     mesa
223   ];
225   buildInputs = [
226     cups
227   ];
229   requiredSystemFeatures = [ "big-parallel" ];
231   preConfigure = ''
232     export NINJAFLAGS="-j$NIX_BUILD_CORES"
233   '';
235   postInstall = ''
236     # This is required at runtime
237     mkdir $out/libexec
238     mv $dev/libexec/QtWebEngineProcess $out/libexec
239   '';
241   meta = with lib; {
242     description = "A web engine based on the Chromium web browser";
243     platforms = platforms.linux;
244     # This build takes a long time; particularly on slow architectures
245     # 1 hour on 32x3.6GHz -> maybe 12 hours on 4x2.4GHz
246     timeout = 24 * 3600;
247   };