# # spec file for package chromium # # Copyright (c) 2025 SUSE LLC # Copyright (c) 2024 Callum Farmer # Copyright (c) 2025 Andreas Stieger # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed # upon. The license for this file, and modifications and additions to the # file, is the same license as for the pristine package itself (unless the # license for the pristine package is not an Open Source License, in which # case the license is the MIT License). An "Open Source License" is a # license that conforms to the Open Source Definition (Version 1.9) # published by the Open Source Initiative. # Please submit bugfixes or comments via https://bugs.opensuse.org/ # %define rname chromium %define outputdir out # bsc#1108175 %define __provides_exclude ^lib.*\\.so.*$ %define __requires_exclude ^libffmpeg\\.so.*$ # suse_version 1500 all of sle code 15, all of leap15 # suse_version 1600 all of alp, slfo # suse_version 1699 tw %if 0%{?suse_version} >= 1600 || 0%{?sle_version} >= 150400 %bcond_without gtk4 %bcond_without qt5 %else %bcond_with gtk4 %bcond_with qt5 %endif %ifarch aarch64 ppc64le riscv64 # ERROR Unresolved dependencies. # //third_party/swiftshader/src/Reactor:swiftshader_reactor(//build/toolchain/linux/unbundle:default) # needs //third_party/swiftshader/src/Reactor:swiftshader_subzero_reactor(//build/toolchain/linux/unbundle:default) %bcond_with swiftshader %else %bcond_without swiftshader %endif %if 0%{?suse_version} >= 1600 %bcond_with system_harfbuzz %bcond_without system_freetype %bcond_without arm_bti # ERROR Unresolved dependencies. # //chrome/browser/ui/lens:unit_tests(//build/toolchain/linux/unbundle:default) # needs //third_party/icu:icuuc_public(//build/toolchain/linux/unbundle:default) %bcond_with system_icu %bcond_without qt6 %bcond_without system_ffmpeg %else %bcond_with system_harfbuzz %bcond_with system_freetype %bcond_with arm_bti %bcond_with system_icu %bcond_without qt6 %bcond_with system_ffmpeg %endif %define ffmpeg_version 59 %bcond_with system_zstd %define node_ver 22 %define node_ver_next 23 %define node_version %(rpm -q --qf "%%{version}" nodejs%{node_ver}) # LLVM version %define llvm_version 19 # RUST version %define rust_version 1.86 # GCC version %define gcc_version 14 # esbuild version %define esbuild_version 0.25.1 %if 0%{?suse_version} <= 1699 %bcond_with system_webp %bcond_with system_re2 %else %bcond_without system_webp %bcond_without system_re2 %endif %bcond_without is_beta # CHANNEL SWITCH %bcond_with system_avif # Compiler %bcond_without clang # libstdc++ or libc++ %bcond_with libstdcpp # Chromium built with GCC 11 and LTO enabled crashes (boo#1194055) %bcond_without lto %bcond_without pipewire %bcond_with system_zlib %bcond_with system_vpx %if %{pkg_vcmp libxml2-devel >= 2.12} %bcond_without libxml2_2_12 %else %bcond_with libxml2_2_12 %endif %if %{pkg_vcmp gtk4-devel >= 4.19} %bcond_without gtk4_4_19 %else %bcond_with gtk4_4_19 %endif %if %{pkg_vcmp flac-devel >= 1.5.0} %bcond_without flac_1_5 %else %bcond_with flac_1_5 %endif # Package names %if %{with is_beta} %define chromedriver_name %{name}-chromedriver %define n_suffix -dev %else %define chromedriver_name chromedriver %define n_suffix %{nil} %endif # official builds have less debugging and go faster... but we have to shut some things off. %global official_build 1 Name: chromium%{n_suffix} Version: 141.0.7367.0 Release: 0 Summary: Google's open source browser project License: BSD-3-Clause AND LGPL-2.1-or-later URL: https://www.chromium.org/ Source0: https://github.com/chromium-linux-tarballs/chromium-tarballs/releases/download/%{version}/chromium-%{version}-linux.tar.xz # https://github.com/evanw/esbuild/archive/refs/tags/v%%{esbuild_version}.tar.gz Source1: esbuild-%{esbuild_version}.tar.gz Source2: esbuild-%{esbuild_version}-vendor.tar.gz Source3: README.SUSE # Toolchain definitions Source30: master_preferences Source104: chromium-symbolic.svg # https://source.chromium.org/chromium/chromium/src/+/refs/tags/%%{version}:chrome/installer/linux/common/installer.include Source105: INSTALL.sh # Source106: chrome-wrapper Patch0: chromium-libusb_interrupt_event_handler.patch # PATCH-FIX-OPENSUSE Make the 1-click-install ymp file always download [bnc#836059] Patch1: exclude_ymp.patch # PATCH-FIX-OPENSUSE enables reading of the master preference Patch2: chromium-master-prefs-path.patch # PATCH-FIX-OPENSUSE fix_building_widevinecdm_with_chromium.patch - Enable WideVine plugin Patch3: fix_building_widevinecdm_with_chromium.patch Patch4: chromium-buildname.patch Patch6: gcc-enable-lto.patch # Do not use unrar code, it is non-free Patch7: chromium-norar.patch Patch9: system-libdrm.patch # gentoo/fedora/arch patchset Patch15: chromium-125-compiler.patch Patch98: chromium-102-regex_pattern-array.patch # PATCH-FIX-SUSE: allow prop codecs to be set with chromium branding Patch202: chromium-prop-codecs.patch Patch240: chromium-117-string-convert.patch Patch261: chromium-121-rust-clang_lib.patch Patch337: chromium-123-missing-QtGui.patch Patch359: chromium-126-quiche-interator.patch Patch360: chromium-127-bindgen.patch Patch361: chromium-127-rust-clanglib.patch Patch363: chromium-127-constexpr.patch Patch364: chromium-129-revert-AVFMT_FLAG_NOH264PARSE.patch Patch368: chromium-131-clang-stack-protector.patch Patch369: chromium-132-pdfium-explicit-template.patch Patch371: chromium-133-bring_back_and_disable_allowlist.patch Patch373: chromium-134-type-mismatch-error.patch Patch375: chromium-131-fix-qt-ui.pach Patch376: chromium-135-add_map_droppable.patch Patch377: chromium-139-deterministic.patch Patch378: chromium-139-pdfium-openjpeg-CVE-2025-54874.patch Patch379: chromium-140-keep-__rust_no_alloc_shim_is_unstable.patch # conditionally applied patches ppc64le only Patch401: ppc-fedora-add-ppc64-architecture-string.patch Patch402: ppc-fedora-0001-linux-seccomp-bpf-ppc64-glibc-workaround-in-SIGSYS-h.patch Patch403: ppc-fedora-0001-sandbox-Enable-seccomp_bpf-for-ppc64.patch Patch404: ppc-fedora-0001-services-service_manager-sandbox-linux-Fix-TCGETS-de.patch Patch405: ppc-fedora-0001-sandbox-linux-bpf_dsl-Update-syscall-ranges-for-ppc6.patch Patch406: ppc-fedora-0001-sandbox-linux-Implement-partial-support-for-ppc64-sy.patch Patch407: ppc-fedora-0001-sandbox-linux-Update-IsSyscallAllowed-in-broker_proc.patch Patch408: ppc-fedora-0001-sandbox-linux-Update-syscall-helpers-lists-for-ppc64.patch Patch409: ppc-fedora-0002-sandbox-linux-bpf_dsl-Modify-seccomp_macros-to-add-s.patch Patch410: ppc-fedora-0003-sandbox-linux-system_headers-Update-linux-seccomp-he.patch Patch411: ppc-fedora-0004-sandbox-linux-system_headers-Update-linux-signal-hea.patch Patch412: ppc-fedora-0005-sandbox-linux-seccomp-bpf-Add-ppc64-syscall-stub.patch Patch413: ppc-fedora-0005-sandbox-linux-update-unit-test-for-ppc64.patch Patch414: ppc-fedora-0006-sandbox-linux-disable-timedwait-time64-ppc64.patch Patch415: ppc-fedora-0007-sandbox-linux-add-ppc64-stat.patch Patch416: ppc-fedora-Sandbox-linux-services-credentials.cc-PPC.patch Patch417: ppc-fedora-0008-sandbox-fix-ppc64le-glibc234.patch Patch418: ppc-fedora-0001-third_party-angle-Include-missing-header-cstddef-in-.patch Patch419: ppc-fedora-0001-Add-PPC64-support-for-boringssl.patch Patch420: ppc-fedora-0001-third_party-libvpx-Properly-generate-gni-on-ppc64.patch Patch421: ppc-fedora-0001-third_party-pffft-Include-altivec.h-on-ppc64-with-SI.patch Patch422: ppc-fedora-0002-Add-PPC64-generated-files-for-boringssl.patch Patch423: ppc-fedora-0002-third_party-lss-kernel-structs.patch Patch424: ppc-fedora-0001-swiftshader-fix-build.patch Patch425: ppc-fedora-Rtc_base-system-arch.h-PPC.patch Patch426: ppc-fedora-0002-Include-cstddef-to-fix-build.patch Patch427: ppc-fedora-0004-third_party-crashpad-port-curl-transport-ppc64.patch Patch428: ppc-fedora-HACK-third_party-libvpx-use-generic-gnu.patch Patch429: ppc-fedora-0001-third-party-hwy-wrong-include.patch Patch430: ppc-fedora-HACK-debian-clang-disable-base-musttail.patch Patch431: ppc-fedora-0001-Add-ppc64-target-to-libaom.patch Patch432: ppc-fedora-0001-Add-pregenerated-config-for-libaom-on-ppc64.patch Patch433: ppc-fedora-0002-third_party-libvpx-Remove-bad-ppc64-config.patch Patch434: ppc-fedora-0003-third_party-libvpx-Add-ppc64-generated-config.patch Patch435: ppc-fedora-0004-third_party-libvpx-work-around-ambiguous-vsx.patch Patch436: ppc-fedora-skia-vsx-instructions.patch Patch437: ppc-fedora-0001-Implement-support-for-ppc64-on-Linux.patch Patch438: ppc-fedora-0001-Implement-support-for-PPC64-on-Linux.patch Patch439: ppc-fedora-0001-Force-baseline-POWER8-AltiVec-VSX-CPU-features-when-.patch Patch440: ppc-fedora-fix-clang-selection.patch Patch442: ppc-fedora-fix-rust-linking.patch Patch443: ppc-fedora-fix-breakpad-compile.patch Patch444: ppc-fedora-fix-partition-alloc-compile.patch Patch445: ppc-fedora-fix-study-crash.patch Patch446: ppc-fedora-memory-allocator-dcheck-assert-fix.patch Patch447: ppc-fedora-fix-different-data-layouts.patch Patch448: ppc-fedora-0002-Add-ppc64-trap-instructions.patch Patch449: ppc-fedora-fix-ppc64-linux-syscalls-headers.patch Patch450: ppc-fedora-use-sysconf-page-size-on-ppc64.patch Patch451: ppc-fedora-0001-Enable-ppc64-pointer-compression.patch Patch452: ppc-fedora-dawn-fix-ppc64le-detection.patch Patch453: ppc-fedora-add-ppc64-architecture-to-extensions.diff Patch454: ppc-fedora-fix-unknown-warning-option-messages.diff Patch455: ppc-fedora-add-ppc64-pthread-stack-size.patch Patch456: ppc-fedora-fix-ppc64-rust_png-build-error.patch Patch457: ppc-chromium-136-clang-config.patch Patch458: ppc-fedora-0001-add-xnn-ppc64el-support.patch # https://src.fedoraproject.org/rpms/chromium/blob/rawhide/f/0002-regenerate-xnn-buildgn.patch Patch459: ppc-fedora-0002-regenerate-xnn-buildgn.patch Patch460: ppc-debian-0003-third_party-ffmpeg-Add-ppc64-generated-config.patch # conditionally applied patches # patch where libxml < 2.12 Patch1010: chromium-124-system-libxml.patch # patch where rust <= 1.85 Patch1030: chromium-134-revert-rust-adler2.patch # gtk4 is too old Patch1040: gtk-414.patch # flac is too old Patch1050: chromium-140-old-flac.patch # end conditionally applied patches BuildRequires: SDL-devel BuildRequires: bison BuildRequires: cups-devel BuildRequires: desktop-file-utils BuildRequires: elfutils BuildRequires: fdupes BuildRequires: flex BuildRequires: git BuildRequires: gn >= 0.20250619 BuildRequires: gperf BuildRequires: hicolor-icon-theme BuildRequires: golang(API) # Java used during build BuildRequires: java-openjdk-headless BuildRequires: libdc1394 BuildRequires: libgcrypt-devel BuildRequires: libgsm-devel BuildRequires: libjpeg-devel >= 8.1 BuildRequires: libpng-devel BuildRequires: memory-constraints BuildRequires: nasm BuildRequires: ninja >= 1.7.2 BuildRequires: pam-devel BuildRequires: pkgconfig BuildRequires: (nodejs >= %node_ver.0 with nodejs < %node_ver_next.0) %if 0%{?suse_version} >= 1600 BuildRequires: python3 BuildRequires: python3-setuptools BuildRequires: python3-six %else BuildRequires: python311 BuildRequires: python311-setuptools BuildRequires: python311-six %endif BuildRequires: snappy-devel BuildRequires: update-desktop-files BuildRequires: util-linux BuildRequires: wdiff BuildRequires: perl(Switch) BuildRequires: pkgconfig(alsa) BuildRequires: pkgconfig(bzip2) BuildRequires: pkgconfig(cairo) >= 1.6 BuildRequires: pkgconfig(dbus-1) BuildRequires: pkgconfig(dirac) >= 1.0.0 BuildRequires: pkgconfig(dri) BuildRequires: pkgconfig(epoxy) BuildRequires: pkgconfig(expat) BuildRequires: pkgconfig(flac++) BuildRequires: pkgconfig(form) BuildRequires: pkgconfig(formw) BuildRequires: pkgconfig(gbm) BuildRequires: pkgconfig(glib-2.0) BuildRequires: pkgconfig(hunspell) BuildRequires: pkgconfig(imlib2) BuildRequires: pkgconfig(jack) BuildRequires: pkgconfig(kadm-client) BuildRequires: pkgconfig(kdb) BuildRequires: pkgconfig(krb5) BuildRequires: pkgconfig(libcap) BuildRequires: pkgconfig(libcrypto) BuildRequires: pkgconfig(libcurl) BuildRequires: pkgconfig(libdc1394-2) BuildRequires: pkgconfig(libdrm) BuildRequires: pkgconfig(libelf) BuildRequires: pkgconfig(libevdev) BuildRequires: pkgconfig(libexif) BuildRequires: pkgconfig(libffi) BuildRequires: pkgconfig(libpci) BuildRequires: pkgconfig(libpulse) BuildRequires: pkgconfig(libssl) BuildRequires: pkgconfig(libudev) BuildRequires: pkgconfig(libusb-1.0) BuildRequires: pkgconfig(libva) BuildRequires: pkgconfig(libxml-2.0) >= 2.9.5 BuildRequires: pkgconfig(libxslt) BuildRequires: pkgconfig(menu) BuildRequires: pkgconfig(menuw) BuildRequires: pkgconfig(minizip) BuildRequires: pkgconfig(ncurses) BuildRequires: pkgconfig(ncurses++) BuildRequires: pkgconfig(ncurses++w) BuildRequires: pkgconfig(ncursesw) BuildRequires: pkgconfig(nspr) >= 4.9.5 BuildRequires: pkgconfig(nss) >= 3.26 BuildRequires: pkgconfig(ogg) BuildRequires: pkgconfig(openssl) BuildRequires: pkgconfig(opus) >= 1.3.1 BuildRequires: pkgconfig(panel) BuildRequires: pkgconfig(panelw) BuildRequires: pkgconfig(schroedinger-1.0) BuildRequires: pkgconfig(slang) BuildRequires: pkgconfig(sqlite3) BuildRequires: pkgconfig(theora) >= 1.1 BuildRequires: pkgconfig(tic) BuildRequires: pkgconfig(tinfo) BuildRequires: pkgconfig(vdpau) BuildRequires: pkgconfig(vorbis) BuildRequires: pkgconfig(wayland-client) BuildRequires: pkgconfig(wayland-cursor) BuildRequires: pkgconfig(wayland-scanner) BuildRequires: pkgconfig(wayland-server) BuildRequires: pkgconfig(x11) BuildRequires: pkgconfig(xcb-dri3) BuildRequires: pkgconfig(xcb-proto) BuildRequires: pkgconfig(xcomposite) BuildRequires: pkgconfig(xcursor) BuildRequires: pkgconfig(xdamage) BuildRequires: pkgconfig(xext) BuildRequires: pkgconfig(xfixes) BuildRequires: pkgconfig(xi) BuildRequires: pkgconfig(xkbcommon) >= 1.0.0 BuildRequires: pkgconfig(xrandr) BuildRequires: pkgconfig(xrender) BuildRequires: pkgconfig(xscrnsaver) BuildRequires: pkgconfig(xshmfence) BuildRequires: pkgconfig(xt) BuildRequires: pkgconfig(xtst) # BEG add rust BR BuildRequires: cargo%{rust_version} BuildRequires: rust%{rust_version} # END add rust BR BuildRequires: rust-bindgen Requires: xdg-utils Requires(pre): permissions Recommends: noto-coloremoji-fonts Conflicts: chromium-browser Provides: %{name}-suid-helper = %{version} Provides: chromium-based-browser = %{version} Provides: chromium-browser = %{version} Provides: web_browser Obsoletes: %{name}-suid-helper < %{version} Obsoletes: chromium-beta-desktop-gnome < %{version} Obsoletes: chromium-beta-desktop-kde < %{version} Obsoletes: chromium-browser < %{version} Obsoletes: chromium-desktop-gnome < %{version} Obsoletes: chromium-desktop-kde < %{version} Obsoletes: chromium-dev-desktop-gnome < %{version} Obsoletes: chromium-dev-desktop-kde < %{version} Obsoletes: chromium-ffmpeg < %{version} Obsoletes: chromium-ffmpegsumo < %{version} # no 32bit supported and it takes ages to build ExclusiveArch: x86_64 aarch64 riscv64 ppc64le %if 0%{?suse_version} <= 1500 BuildRequires: pkgconfig(glproto) %endif %if %{with pipewire} BuildRequires: pkgconfig(libpipewire-0.3) BuildRequires: pkgconfig(libspa-0.2) %endif %if %{with system_harfbuzz} BuildRequires: pkgconfig(harfbuzz) > 2.3.0 %endif %if %{with system_icu} BuildRequires: pkgconfig(icu-i18n) >= 67.0 %endif %if %{with system_vpx} BuildRequires: pkgconfig(vpx) >= 1.8.2 %endif %if %{with system_freetype} BuildRequires: pkgconfig(freetype2) %endif %if %{with system_zlib} BuildRequires: pkgconfig(zlib) %endif %if %{with gtk4} BuildRequires: pkgconfig(atk-bridge-2.0) BuildRequires: pkgconfig(gtk4) %else BuildRequires: pkgconfig(gtk+-3.0) %endif %if %{with system_ffmpeg} BuildRequires: pkgconfig(libavcodec) BuildRequires: pkgconfig(libavfilter) BuildRequires: pkgconfig(libavformat) >= %{ffmpeg_version} BuildRequires: pkgconfig(libavutil) %endif %if %{with system_avif} BuildRequires: pkgconfig(libavif) BuildRequires: pkgconfig(libyuv) %endif %if %{with qt5} BuildRequires: pkgconfig(Qt5Core) BuildRequires: pkgconfig(Qt5Gui) BuildRequires: pkgconfig(Qt5Widgets) %endif %if %{with qt6} BuildRequires: pkgconfig(Qt6Core) BuildRequires: pkgconfig(Qt6Gui) BuildRequires: pkgconfig(Qt6Widgets) %endif %if %{with system_re2} BuildRequires: pkgconfig(re2) >= 11 %endif %if %{with system_webp} BuildRequires: pkgconfig(libwebp) >= 0.4.0 %endif %if %{with system_zstd} BuildRequires: pkgconfig(libzstd) >= 1.5.5 %endif %if %{with clang} %if 0%{?suse_version} <= 1500 BuildRequires: clang%{llvm_version} %if %{with libstdcpp} BuildRequires: libstdc++6-devel-gcc%{gcc_version} %else BuildRequires: clang%{llvm_version}-devel #BuildRequires: libc++-devel BuildRequires: libc++.so >= %{llvm_version} %endif BuildRequires: lld%{llvm_version} BuildRequires: llvm%{llvm_version} #!BuildIgnore: gcc %else BuildRequires: clang %if %{with libstdcpp} BuildRequires: libstdc++-devel %else BuildRequires: libc++-devel %endif BuildRequires: lld BuildRequires: llvm %endif %endif %if %{without clang} BuildRequires: binutils-gold %if 0%{?suse_version} <= 1500 BuildRequires: gcc%{gcc_version} BuildRequires: gcc%{gcc_version}-c++ %else BuildRequires: gcc BuildRequires: gcc-c++ %endif %endif %if 0%{?suse_version} >= 1699 #!BuildIgnore: rpmlint rpmlint-Factory rpmlint-mini %endif %description Chromium is the open-source project behind Google Chrome. We invite you to join us in our effort to help build a safer, faster, and more stable way for all Internet users to experience the web, and to create a powerful platform for developing a new generation of web applications. %package -n %{chromedriver_name} Summary: WebDriver for Google Chrome/Chromium License: BSD-3-Clause Requires: %{name} = %{version} %if %{with is_beta} Conflicts: chromedriver Provides: chromedriver = %{version}-%{release} %endif %description -n %{chromedriver_name} WebDriver is an open source tool for automated testing of webapps across many browsers. It provides capabilities for navigating to web pages, user input, JavaScript execution, and more. ChromeDriver is a standalone server which implements WebDriver's wire protocol for Chromium. It is being developed by members of the Chromium and WebDriver teams. %prep %setup -q -n %{rname}-%{version} # apply all patches up to 399 %autopatch -p1 -M 399 %ifarch ppc64le %autopatch -p1 -m 400 -M 499 %endif %if %{without libxml2_2_12} %patch -p1 -P 1010 %endif %if "%{?rust_version}" == "1.85" %patch -p1 -P 1030 %endif %if %{without gtk4_4_19} %patch -p1 -R -P 1040 %endif %if %{without flac_1_5} %patch -p1 -P 1050 %endif %build # esbuild rm third_party/devtools-frontend/src/third_party/esbuild/esbuild tar -xf %{SOURCE1} tar -xf %{SOURCE2} ln -sf esbuild-%{esbuild_version} esbuild pushd esbuild gflags="-mod=vendor" %if 0%{?suse_version} >= 1600 gflags+=" -buildvcs=false" %endif GO_FLAGS="${gflags}" make cp -a esbuild ../third_party/devtools-frontend/src/third_party/esbuild/esbuild popd # Fix the path to nodejs binary mkdir -p third_party/node/linux/node-linux-x64/bin rm -f third_party/node/linux/node-linux-x64/bin/node ln -s %{_bindir}/node third_party/node/linux/node-linux-x64/bin/node sed -i -e "s@^NODE_VERSION=.*@NODE_VERSION=\"v%{node_version}\"@" third_party/node/update_node_binaries # python3 mkdir -p $HOME/bin %if 0%{?suse_version} >= 1600 export PYTHON=python3 %else export PYTHON=python3.11 %endif ln -sfn %{_bindir}/$PYTHON $HOME/bin/python ln -sfn %{_bindir}/$PYTHON $HOME/bin/python3 export PATH="$HOME/bin:$PATH" # use our wrapper rm chrome/installer/linux/common/wrapper cp %{SOURCE106} chrome/installer/linux/common/wrapper # from our Fedora friends export RUSTC_BOOTSTRAP=1 rustc_version="$(rustc --version | cut -d' ' -f2)" clang_version="$(clang --version | sed -n 's/clang version //p')" if [[ $(echo ${clang_version} | cut -d. -f1) -ge 16 ]]; then clang_version="$(echo ${clang_version} | cut -d. -f1)" fi clang_base_path="$(clang --version | grep InstalledDir | cut -d' ' -f2 | sed 's#/bin##')" # Remove bundled libs keeplibs=( base/third_party/cityhash base/third_party/double_conversion base/third_party/icu base/third_party/nspr base/third_party/superfasthash base/third_party/symbolize base/third_party/xdg_user_dirs buildtools/third_party/libc++ buildtools/third_party/libc++abi buildtools/third_party/libunwind net/third_party/mozilla_security_manager net/third_party/nss net/third_party/quic net/third_party/uri_template third_party/abseil-cpp third_party/abseil-cpp/absl third_party/abseil-cpp/absl/algorithm third_party/abseil-cpp/absl/base third_party/abseil-cpp/absl/flags third_party/abseil-cpp/absl/functional third_party/abseil-cpp/absl/strings third_party/abseil-cpp/absl/types third_party/angle third_party/angle/src/common/third_party/xxhash third_party/angle/src/third_party/ceval third_party/angle/src/third_party/libXNVCtrl third_party/angle/src/third_party/volk third_party/anonymous_tokens third_party/apple_apsl third_party/axe-core third_party/bidimapper third_party/blink third_party/boringssl third_party/boringssl/src/third_party/fiat third_party/breakpad third_party/breakpad/breakpad/src/third_party/curl third_party/brotli third_party/catapult third_party/catapult/common/py_vulcanize/third_party/rcssmin third_party/catapult/common/py_vulcanize/third_party/rjsmin third_party/catapult/third_party/beautifulsoup4 third_party/catapult/third_party/html5lib-1.1/ third_party/catapult/third_party/polymer third_party/catapult/third_party/six third_party/catapult/tracing/third_party/d3 third_party/catapult/tracing/third_party/gl-matrix third_party/catapult/tracing/third_party/jpeg-js third_party/catapult/tracing/third_party/jszip third_party/catapult/tracing/third_party/mannwhitneyu third_party/catapult/tracing/third_party/oboe third_party/catapult/tracing/third_party/pako third_party/ced third_party/cld_3 third_party/closure_compiler third_party/compiler-rt third_party/content_analysis_sdk third_party/cpuinfo third_party/crashpad third_party/crashpad/crashpad/third_party/lss third_party/crashpad/crashpad/third_party/zlib third_party/crabbyavif third_party/crc32c third_party/cros_system_api third_party/d3 third_party/dav1d third_party/dawn third_party/dawn/third_party third_party/depot_tools third_party/devscripts third_party/devtools-frontend third_party/devtools-frontend/src/front_end/third_party third_party/devtools-frontend/src/front_end/third_party/acorn third_party/devtools-frontend/src/front_end/third_party/axe-core third_party/devtools-frontend/src/front_end/third_party/chromium third_party/devtools-frontend/src/front_end/third_party/codemirror third_party/devtools-frontend/src/front_end/third_party/diff third_party/devtools-frontend/src/front_end/third_party/i18n third_party/devtools-frontend/src/front_end/third_party/intl-messageformat third_party/devtools-frontend/src/front_end/third_party/lighthouse third_party/devtools-frontend/src/front_end/third_party/marked third_party/devtools-frontend/src/front_end/third_party/puppeteer third_party/devtools-frontend/src/front_end/third_party/puppeteer/package/lib/esm/third_party/mitt third_party/devtools-frontend/src/front_end/third_party/puppeteer/package/lib/esm/third_party/parsel-js third_party/devtools-frontend/src/front_end/third_party/puppeteer/package/lib/esm/third_party/rxjs third_party/devtools-frontend/src/front_end/third_party/wasmparser third_party/devtools-frontend/src/node_modules/fast-glob third_party/devtools-frontend/src/third_party third_party/dom_distiller_js third_party/dragonbox third_party/eigen3 third_party/emoji-segmenter third_party/farmhash third_party/fast_float third_party/fdlibm third_party/fft2d third_party/flatbuffers third_party/fp16 third_party/fusejs/dist third_party/fxdiv third_party/gemmlowp third_party/google_input_tools third_party/google_input_tools/third_party/closure_library third_party/google_input_tools/third_party/closure_library/third_party/closure third_party/googletest third_party/highway third_party/hunspell third_party/ink third_party/inspector_protocol third_party/ipcz third_party/jinja2 third_party/jsoncpp third_party/khronos third_party/lens_server_proto third_party/leveldatabase third_party/libaddressinput third_party/libaom third_party/libaom/source/libaom/third_party/fastfeat third_party/libaom/source/libaom/third_party/SVT-AV1 third_party/libaom/source/libaom/third_party/vector third_party/libaom/source/libaom/third_party/x86inc third_party/libgav1 third_party/libjingle third_party/libphonenumber third_party/libsecret third_party/libsrtp third_party/libsync third_party/libtess2 third_party/liburlpattern third_party/libva_protected_content third_party/libwebm third_party/libx11/src third_party/libxcb-keysyms/keysyms third_party/libxml/chromium third_party/libzip third_party/lit third_party/lottie third_party/lss third_party/lzma_sdk third_party/mako third_party/markupsafe third_party/material_color_utilities third_party/metrics_proto third_party/minigbm third_party/ml_dtypes third_party/modp_b64 third_party/nasm third_party/nearby third_party/node third_party/omnibox_proto third_party/one_euro_filter third_party/openscreen third_party/openscreen/src/third_party/tinycbor/src/src third_party/ots third_party/pdfium third_party/pdfium/third_party/agg23 third_party/pdfium/third_party/bigint third_party/pdfium/third_party/freetype third_party/pdfium/third_party/lcms third_party/pdfium/third_party/libopenjpeg third_party/pdfium/third_party/libtiff third_party/perfetto third_party/perfetto/protos/third_party/chromium third_party/perfetto/protos/third_party/simpleperf third_party/pffft third_party/ply third_party/polymer third_party/private-join-and-compute third_party/private_membership third_party/protobuf third_party/protobuf/third_party/utf8_range third_party/pthreadpool third_party/puffin third_party/pyjson5 third_party/pyyaml third_party/rapidhash third_party/readability third_party/rnnoise third_party/rust third_party/ruy third_party/s2cellid third_party/search_engines_data third_party/securemessage third_party/selenium-atoms third_party/sentencepiece third_party/sentencepiece/src/third_party/darts_clone third_party/shell-encryption third_party/simdutf third_party/simplejson third_party/skia third_party/skia/include/third_party/vulkan/ third_party/skia/third_party/vulkan third_party/smhasher third_party/spirv-headers third_party/spirv-tools third_party/sqlite third_party/swiftshader third_party/swiftshader/third_party/astc-encoder third_party/swiftshader/third_party/llvm-10.0 third_party/swiftshader/third_party/llvm-subzero third_party/swiftshader/third_party/marl third_party/swiftshader/third_party/SPIRV-Headers third_party/swiftshader/third_party/SPIRV-Tools third_party/swiftshader/third_party/subzero third_party/tensorflow_models third_party/tensorflow-text third_party/tflite third_party/tflite/src/third_party/fft2d third_party/tflite/src/third_party/xla/third_party/tsl third_party/tflite/src/third_party/xla/xla/tsl third_party/ukey2 third_party/utf third_party/vulkan third_party/wayland third_party/webdriver third_party/webgpu-cts third_party/webrtc third_party/webrtc/common_audio/third_party/ooura third_party/webrtc/common_audio/third_party/spl_sqrt_floor third_party/webrtc/modules/third_party/fft third_party/webrtc/modules/third_party/g711 third_party/webrtc/modules/third_party/g722 third_party/webrtc/rtc_base/third_party/sigslot third_party/webrtc/rtc_tools third_party/widevine third_party/woff2 third_party/wuffs third_party/x11proto third_party/xcbproto third_party/xnnpack third_party/zlib/google third_party/zxcvbn-cpp url/third_party/mozilla v8/third_party/glibc v8/third_party/inspector_protocol v8/third_party/rapidhash-v8 v8/third_party/siphash v8/third_party/utf8-decoder v8/third_party/valgrind v8/third_party/v8/builtins v8/third_party/v8/codegen ) %if !%{with system_harfbuzz} keeplibs+=( third_party/harfbuzz-ng ) %endif %if !%{with system_freetype} keeplibs+=( third_party/freetype ) %endif %if !%{with system_icu} keeplibs+=( third_party/icu ) %endif %if !%{with system_ffmpeg} keeplibs+=( third_party/ffmpeg ) %endif %if !%{with system_zlib} keeplibs+=( third_party/zlib ) %endif %if !%{with system_vpx} keeplibs+=( third_party/libvpx third_party/libvpx/source/libvpx/third_party/x86inc ) %endif %if !%{with system_avif} keeplibs+=( third_party/libyuv ) %endif %if !%{with system_webp} || !%{with system_avif} keeplibs+=( third_party/libwebp ) %endif # needed due to bugs in GN keeplibs+=( third_party/speech-dispatcher third_party/usb_ids third_party/xdg-utils ) # really if not with system_re2 but googletest needs it keeplibs+=( third_party/re2 ) #endif %if !%{with system_zstd} keeplibs+=( third_party/zstd ) %endif # needed ... keeplibs+=( third_party/lit ) keeplibs+=( third_party/rust/chromium_crates_io ) keeplibs+=( third_party/rust/cxx ) %if %{without libstdcpp} keeplibs+=( third_party/snappy ) %endif build/linux/unbundle/remove_bundled_libraries.py "${keeplibs[@]}" --do-remove # GN sets lto on its own and we need just ldflag options, not cflags %define _lto_cflags %{nil} %if %{with clang} export CC=clang export CXX=clang++ export AR=llvm-ar export NM=llvm-nm export RANLIB=llvm-ranlib %else %if 0%{?suse_version} <= 1500 export CC=gcc-%{gcc_version} export CXX=g++-%{gcc_version} # some still call gcc/g++ ln -sfn %{_bindir}/$CC $HOME/bin/gcc ln -sfn %{_bindir}/$CXX $HOME/bin/g++ export PATH="$HOME/bin/:$PATH" %else export CC=gcc export CXX=g++ %endif export AR=ar export NM=nm export RANLIB=ranlib %endif # REDUCE DEBUG as it gets TOO large ARCH_FLAGS="`echo %{optflags} | sed -e 's/^-g / /g' -e 's/ -g / /g' -e 's/ -g$//g'`" export CXXFLAGS="${ARCH_FLAGS} -Wno-return-type" # extra flags to reduce warnings that aren't very useful export CXXFLAGS="${CXXFLAGS} -Wno-pedantic -Wno-unused-result -Wno-unused-function -Wno-unused-variable -Wno-deprecated-declarations" # ignore warnings for minor mistakes that are too common export CXXFLAGS="${CXXFLAGS} -Wno-return-type -Wno-parentheses -Wno-misleading-indentation" # ignore warnings that are not supported well until gcc 8 export CXXFLAGS="${CXXFLAGS} -Wno-attributes" # ignore warnings due to gcc bug (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84055) export CXXFLAGS="${CXXFLAGS} -Wno-ignored-attributes" # ingore new gcc 8 warnings that aren't yet handled upstream export CXXFLAGS="${CXXFLAGS} -Wno-address -Wno-dangling-else -D_GNU_SOURCE" # for wayland export CXXFLAGS="${CXXFLAGS} -I/usr/include/wayland -I/usr/include/libxkbcommon -I/usr/include/opus" %if %{with clang} export LDFLAGS="${LDFLAGS} -Wl,--build-id=sha1" export CXXFLAGS="${CXXFLAGS} -Wno-unused-command-line-argument -Wno-unknown-warning-option" %endif %if %{without libstdcpp} export LDFLAGS="${LDFLAGS} -stdlib=libc++" export CXXFLAGS="${CXXFLAGS} -stdlib=libc++ -I/usr/include/c++/v1" %endif %ifarch aarch64 %if %{without clang} export CXXFLAGS="${CXXFLAGS} -flax-vector-conversions -fno-omit-frame-pointer" %else %if 0%{?sle_version} == 150200 export CXXFLAGS="${CXXFLAGS} -flax-vector-conversions" %else export CXXFLAGS="${CXXFLAGS} -flax-vector-conversions=all" %endif %endif %endif export CXXFLAGS="${CXXFLAGS} -Wno-unused-but-set-variable -Wno-missing-braces -Wno-unused-private-field -Wno-absolute-value" %if %{without clang} export CXXFLAGS="${CXXFLAGS} -Wno-packed-not-aligned" %endif export CFLAGS="${CXXFLAGS}" %if %{without clang} export CXXFLAGS="${CXXFLAGS} -Wno-subobject-linkage -Wno-class-memaccess" %endif export CXXFLAGS="${CXXFLAGS} -Wno-invalid-offsetof -U_GLIBCXX_ASSERTIONS -fpermissive" export RUSTFLAGS # do not eat all memory %limit_build -m 2600 %if %{with lto} && %{without clang} # reduce the threads for linking even more due to LTO eating ton of memory _link_threads=$((($(echo %{?_smp_mflags} | cut -c 3-) - 2))) test "$_link_threads" -le 0 && _link_threads=1 export LDFLAGS="-flto=$_link_threads --param lto-max-streaming-parallelism=1" %endif # need for error: the option `Z` is only accepted on the nightly compiler export RUSTC_BOOTSTRAP=1 # Set system libraries to be used gn_system_libraries=( flac fontconfig libdrm libjpeg libpng libusb libxml libxslt opus ) %if %{with libstdcpp} gn_system_libraries+=( snappy ) %endif %if %{with system_harfbuzz} gn_system_libraries+=( harfbuzz-ng ) %endif %if %{with system_freetype} gn_system_libraries+=( freetype ) %endif %if %{with system_icu} gn_system_libraries+=( icu ) %endif %if %{with system_vpx} gn_system_libraries+=( libvpx ) %endif %if %{with system_ffmpeg} gn_system_libraries+=( ffmpeg ) %endif %if %{with system_avif} gn_system_libraries+=( libyuv ) gn_system_libraries+=( libavif ) %endif %if %{with system_re2} gn_system_libraries+=( re2 ) %endif %if %{with system_webp} gn_system_libraries+=( libwebp ) %endif %if %{with system_zstd} gn_system_libraries+=( zstd ) %endif %if %{with system_zlib} gn_system_libraries+=( zlib ) %endif build/linux/unbundle/replace_gn_files.py --system-libraries ${gn_system_libraries[@]} # Create the configuration for GN # Available options: out/Release/gn args --list out/Release/ myconf_gn="" myconf_gn+=" custom_toolchain=\"//build/toolchain/linux/unbundle:default\"" myconf_gn+=" host_toolchain=\"//build/toolchain/linux/unbundle:default\"" myconf_gn+=" use_custom_libcxx=false" %ifarch x86_64 myconf_gn+=" host_cpu=\"x64\"" %endif %ifarch riscv64 myconf_gn+=" host_cpu=\"riscv64\"" %endif %ifarch aarch64 myconf_gn+=" host_cpu=\"arm64\"" %if %{with arm_bti} myconf_gn+=" arm_control_flow_integrity=\"standard\"" %else myconf_gn+=" arm_control_flow_integrity=\"none\"" %endif %endif %ifarch ppc64le myconf_gn+=" host_cpu=\"ppc64\"" %endif myconf_gn+=" host_os=\"linux\"" %if %{official_build} myconf_gn+=" is_official_build=true" sed -i 's|OFFICIAL_BUILD|GOOGLE_CHROME_BUILD|g' tools/generate_shim_headers/generate_shim_headers.py %endif myconf_gn+=" is_debug=false" myconf_gn+=" dcheck_always_on=false" myconf_gn+=" enable_nacl=false" %if %{with swiftshader} myconf_gn+=" use_swiftshader_with_subzero=true" %endif myconf_gn+=" is_component_ffmpeg=true" myconf_gn+=" use_cups=true" myconf_gn+=" use_aura=true" myconf_gn+=" symbol_level=1" myconf_gn+=" blink_symbol_level=0" myconf_gn+=" use_kerberos=true" myconf_gn+=" enable_vr=false" myconf_gn+=" optimize_webui=false" myconf_gn+=" enable_reading_list=false" myconf_gn+=" use_pulseaudio=true link_pulseaudio=true" myconf_gn+=" is_component_build=false" myconf_gn+=" use_sysroot=false" myconf_gn+=" fatal_linker_warnings=false" myconf_gn+=" use_allocator_shim=true" myconf_gn+=" use_partition_alloc=true" myconf_gn+=" disable_fieldtrial_testing_config=true" myconf_gn+=" use_unofficial_version_number=false" myconf_gn+=" use_vaapi=true" myconf_gn+=" use_sysroot=false" myconf_gn+=" treat_warnings_as_errors=false" myconf_gn+=" enable_widevine=true" myconf_gn+=" use_dbus=true" myconf_gn+=" media_use_openh264=false" myconf_gn+=" rtc_use_h264=false" myconf_gn+=" use_v8_context_snapshot=true" myconf_gn+=" v8_use_external_startup_data=true" myconf_gn+=" rust_sysroot_absolute=\"%{_prefix}\"" myconf_gn+=" rust_bindgen_root=\"%{_prefix}\"" myconf_gn+=" rustc_version=\"$rustc_version\"" myconf_gn+=" clang_base_path=\"$clang_base_path\"" myconf_gn+=" clang_version=\"$clang_version\"" myconf_gn+=" safe_browsing_use_unrar=false" %if %{with gtk4} myconf_gn+=" gtk_version=4" %endif %if %{without qt5} myconf_gn+=" use_qt5=false" %else myconf_gn+=" moc_qt5_path=\"%{_libqt5_bindir}\"" %endif %if %{with qt6} myconf_gn+=" use_qt6=true" myconf_gn+=" moc_qt6_path=\"%{?_qt6_libexecdir}\"" %endif # See dependency logic in third_party/BUILD.gn %if %{with system_harfbuzz} myconf_gn+=" use_system_harfbuzz=true" %endif %if %{with system_freetype} myconf_gn+=" use_system_freetype=true" %endif myconf_gn+=" use_system_libffi=true" myconf_gn+=" enable_hangout_services_extension=true" myconf_gn+=" enable_vulkan=true" %if %{with pipewire} myconf_gn+=" rtc_use_pipewire=true rtc_link_pipewire=true" %endif %if %{with clang} myconf_gn+=" is_clang=true clang_use_chrome_plugins=false" %if %{with lto} && %{with clang} %if 0%{?suse_version} >= 1500 || 0%{?sle_version} >= 150300 myconf_gn+=" use_thin_lto=true" %endif %endif myconf_gn+=" use_lld=true" %else myconf_gn+=" is_clang=false" myconf_gn+=" use_gold=true" %endif %if %{with lto} && %{without clang} myconf_gn+=" gcc_lto=true" %endif %if %{with system_icu} myconf_gn+=" icu_use_data_file=false" %endif # The proprietary codecs just force the chromium to say they can use it and # offload the actual computation to the ffmpeg, otherwise the chromium # won't be able to load the codec even if the library can handle it myconf_gn+=" proprietary_codecs=true" myconf_gn+=" ffmpeg_branding=\"Chrome\"" # Set up Google API keys, see http://www.chromium.org/developers/how-tos/api-keys # Note: these are for the openSUSE Chromium builds ONLY. For your own distribution, # please get your own set of keys. google_api_key="AIzaSyD1hTe85_a14kr1Ks8T3Ce75rvbR1_Dx7Q" myconf_gn+=" google_api_key=\"${google_api_key}\"" if [ "$clang_version" -lt 20 ] ; then myconf_gn+=" clang_warning_suppression_file=\"\"" fi # GN does not support passing cflags: # https://bugs.chromium.org/p/chromium/issues/detail?id=642016 gn gen --args="${myconf_gn}" %{outputdir} ninja -v %{?_smp_mflags} -C %{outputdir} \ chrome \ chromedriver \ %{nil} %install bash %{SOURCE105} -s %{buildroot} -l %{_libdir} %{!?with_system_icu:-i true} -o %{outputdir} # chromedriver cp -a %{outputdir}/chromedriver.unstripped %{buildroot}%{_libdir}/chromium/chromedriver ln -s %{_libdir}/chromium/chromedriver %{buildroot}%{_bindir}/chromedriver # link to browser plugin path. Plugin patch doesn't work. Why? mkdir -p %{buildroot}%{_libdir}/browser-plugins ln -s %{_libdir}/browser-plugins %{buildroot}%{_libdir}/chromium/plugins # Install the master_preferences file mkdir -p %{buildroot}%{_sysconfdir}/chromium install -m 0644 %{SOURCE30} %{buildroot}%{_sysconfdir}/chromium # Compat link ln -s %{_bindir}/chromium-browser %{buildroot}%{_bindir}/chromium # Policy dirs mkdir -p %{buildroot}%{_sysconfdir}/chromium/policies mkdir %{buildroot}%{_sysconfdir}/chromium/policies/managed mkdir %{buildroot}%{_sysconfdir}/chromium/policies/recommended chmod -w %{buildroot}%{_sysconfdir}/chromium/policies/managed mkdir -p %{buildroot}%{_datadir}/chromium/extensions mkdir -p %{buildroot}%{_sysconfdir}/chromium/native-messaging-hosts # SVG install -Dm 0644 %{SOURCE104} %{buildroot}%{_datadir}/icons/hicolor/symbolic/apps/chromium-browser.svg # link for the manpage ln -sf chromium-browser.1%{?ext_man} %{buildroot}%{_mandir}/man1/chromium.1%{?ext_man} %fdupes -s %{buildroot} %files %license LICENSE %doc AUTHORS %{_datadir}/chromium %dir %{_sysconfdir}/chromium %dir %{_sysconfdir}/chromium/policies %dir %{_sysconfdir}/chromium/policies/managed %dir %{_sysconfdir}/chromium/policies/recommended %dir %{_sysconfdir}/chromium/native-messaging-hosts %config %{_sysconfdir}/chromium/master_preferences %{_libdir}/chromium %{_datadir}/applications/*.desktop %{_datadir}/metainfo/chromium-browser.appdata.xml %{_datadir}/icons/hicolor %exclude %{_libdir}/chromium/chromedriver %{_bindir}/chromium-browser %{_bindir}/chromium %{_mandir}/man1/chromium.1%{?ext_man} %{_mandir}/man1/chromium-browser.1%{?ext_man} %files -n %{chromedriver_name} %license LICENSE %{_libdir}/chromium/chromedriver %{_bindir}/chromedriver %changelog