# Bring your own API key for downstream distro # This key is only for openEuler # https://www.chromium.org/developers/how-tos/api-keys/ %global api_key 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 %define outputdir out %define __provides_exclude ^lib.*\\.so.*$ %bcond_without clang %bcond_with lto %bcond_with gtk4 %bcond_without qt %ifarch x86_64 %bcond_without swiftshader %endif %bcond_with system_harfbuzz %bcond_with system_freetype %bcond_with arm_bti %bcond_with system_icu %bcond_without pipewire %bcond_without system_ffmpeg %bcond_with system_zlib %bcond_with system_vpx %bcond_with system_avif %bcond_with system_re2 %bcond_with system_webp %bcond_with system_zstd # Enable esbuild %global esbuild 1 # When will gn fix this? # https://bugs.chromium.org/p/gn/issues/detail?id=360 %global bootstrap 0 Name: chromium Version: 128.0.6613.119 Release: 1 Summary: A WebKit (Blink) powered web browser. Url: http://www.chromium.org/Home License: BSD-3-Clause AND LGPL-2.1-or-later # Use chromium-latest.py to generate clean tarball from released build tarballs, found here: # https://commondatastorage.googleapis.com/chromium-browser-official/chromium-%%{version}.tar.xz Source0: chromium-%{version}.tar.xz Source1: master_preferences Source2: chrome-wrapper Source3: chromium-symbolic.svg Source4: INSTALL.sh # esbuild binary %if 0%{?esbuild} Source101: esbuild.tar.gz %endif Patch0: chromium-libusb_interrupt_event_handler.patch Patch2: chromium-master-prefs-path.patch Patch3: fix_building_widevinecdm_with_chromium.patch Patch6: gcc-enable-lto.patch # Do not use unrar code, it is non-free Patch7: chromium-norar.patch Patch9: system-libdrm.patch # other distro patchset Patch15: chromium-125-compiler.patch Patch40: chromium-91-java-only-allowed-in-android-builds.patch Patch98: chromium-102-regex_pattern-array.patch Patch202: chromium-prop-codecs.patch Patch203: chromium-106-ffmpeg-duration.patch Patch205: chromium-disable-GlobalMediaControlsCastStartStop.patch Patch240: chromium-117-string-convert.patch Patch248: chromium-119-assert.patch Patch256: chromium-120-make_unique-struct.patch Patch261: chromium-121-rust-clang_lib.patch Patch311: chromium-125-disable-FFmpegAllowLists.patch Patch322: chromium-125-lp155-typename.patch Patch337: chromium-123-missing-QtGui.patch Patch359: chromium-126-quiche-interator.patch Patch360: chromium-127-bindgen.patch Patch361: chromium-127-rust-clanglib.patch Patch362: chromium-127-clang17-traitors.patch Patch363: chromium-127-constexpr.patch # filter_labels_{include,exclude} was added to gn in Feb 2024 # https://gn.googlesource.com/gn/+/e05c0aa00938adc0797bda1e8f2c15675aa13c30%5E%21/ Patch500: gn-funcs.patch # ERROR at //build/config/BUILDCONFIG.gn:543:5: Dependency not allowed. # The item //third_party/webrtc/modules/audio_device:audio_device_name # can not depend on //third_party/abseil-cpp/absl/strings:string_view # because it is not in //third_party/abseil-cpp/absl/strings:string_view's visibility list Patch501: gn-absl.patch # ../build/rust/std/remap_alloc.cc:147:5: error: use of undeclared identifier 'memset'; did you mean 'wmemset'? Patch502: use-of-undeclared-identifier-memset.patch # ../base/containers/span.h:1155:9: error: call to function 'memmove' that is neither visible in the template definition nor found by argument-dependent lookup Patch503: 0001-Fix-error-call-to-function-memmove-that-is-neither-v.patch # ../mojo/public/cpp/bindings/lib/multiplex_router.cc:897:24: error: no matching member function for call to 'emplace' Patch504: emplace.patch # ../chrome/browser/ui/webui/top_chrome/webui_contents_wrapper.h:188:19: error: static assertion expression is not an integral constant expression Patch505: bubble-contents.patch # ../components/enterprise/connectors/common.h:144:8: error: no template named 'optional' in namespace 'std' Patch506: 0001-Fix-no-template-named-optional-in-namespace-std.patch # Disable swiftshader on aarch64 # ld.lld: error: undefined symbol: llvm::MCSymbolizer::~MCSymbolizer() # >>> referenced by AArch64ExternalSymbolizer.cpp # >>> obj/third_party/swiftshader/third_party/llvm-16.0/swiftshader_llvm_aarch64/AArch64ExternalSymbolizer.o:(llvm::AArch64ExternalSymbolizer::~AArch64ExternalSymbolizer()) # >>> referenced by AArch64ExternalSymbolizer.cpp # >>> obj/third_party/swiftshader/third_party/llvm-16.0/swiftshader_llvm_aarch64/AArch64ExternalSymbolizer.o:(vtable for llvm::AArch64ExternalSymbolizer) # # ld.lld: error: undefined symbol: llvm::MCExternalSymbolizer::tryAddingPcLoadReferenceComment(llvm::raw_ostream&, long, unsigned long) # >>> referenced by AArch64ExternalSymbolizer.cpp # >>> obj/third_party/swiftshader/third_party/llvm-16.0/swiftshader_llvm_aarch64/AArch64ExternalSymbolizer.o:(vtable for llvm::AArch64ExternalSymbolizer) %ifarch aarch64 Patch600: swiftshader.patch Patch601: swiftshader-2.patch %endif # RISC-V Support Patch1001: riscv-sandbox.patch Patch1002: riscv-dav1d.patch Patch1003: riscv-swiftshader.patch Patch1004: riscv-v8.patch Patch1005: riscv-cpuinfo.patch BuildRequires: SDL-devel BuildRequires: bison BuildRequires: cups-devel BuildRequires: desktop-file-utils BuildRequires: elfutils BuildRequires: flex BuildRequires: git %if ! %{bootstrap} BuildRequires: gn %else BuildRequires: libstdc++-static %endif BuildRequires: gperf BuildRequires: hicolor-icon-theme BuildRequires: golang # Java used during build BuildRequires: java-17-openjdk-headless BuildRequires: libcap-devel BuildRequires: libgcrypt-devel BuildRequires: gsm-devel BuildRequires: libjpeg-turbo-devel BuildRequires: libpng-devel BuildRequires: nasm BuildRequires: ncurses-devel BuildRequires: ninja-build >= 1.7.2 BuildRequires: nodejs >= 8.0 BuildRequires: pam-devel BuildRequires: pkgconfig BuildRequires: python3 BuildRequires: python3-setuptools BuildRequires: python3-six BuildRequires: snappy-devel BuildRequires: util-linux BuildRequires: perl(Switch) BuildRequires: pkgconfig(alsa) BuildRequires: pkgconfig(bzip2) BuildRequires: pkgconfig(cairo) >= 1.6 BuildRequires: pkgconfig(dbus-1) BuildRequires: pkgconfig(dri) BuildRequires: pkgconfig(expat) BuildRequires: pkgconfig(flac++) 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(libcrypto) BuildRequires: pkgconfig(libcurl) BuildRequires: pkgconfig(libdrm) BuildRequires: pkgconfig(libelf) BuildRequires: pkgconfig(libevdev) BuildRequires: pkgconfig(libevent) 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) %if %{with system_webp} BuildRequires: pkgconfig(libwebp) >= 0.4.0 %endif %if %{with system_zstd} BuildRequires: pkgconfig(libzstd) %endif BuildRequires: pkgconfig(libxml-2.0) >= 2.9.5 BuildRequires: pkgconfig(libxslt) BuildRequires: pkgconfig(minizip) 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(python3) BuildRequires: pkgconfig(slang) BuildRequires: pkgconfig(sqlite3) BuildRequires: pkgconfig(theora) >= 1.1 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) BuildRequires: cargo BuildRequires: rust BuildRequires: rust-bindgen Requires: xdg-utils Recommends: google-noto-emoji-fonts Conflicts: chromium-browser Provides: %{name}-suid-helper = %{version} Provides: chromium-browser = %{version} Obsoletes: %{name}-suid-helper < %{version} Obsoletes: chromium-browser < %{version} ExclusiveArch: x86_64 aarch64 riscv64 %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) %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 qt} BuildRequires: pkgconfig(Qt5Core) BuildRequires: pkgconfig(Qt5Widgets) %endif %if %{with system_ffmpeg} BuildRequires: pkgconfig(libavcodec) BuildRequires: pkgconfig(libavfilter) BuildRequires: pkgconfig(libavformat) >= 58 BuildRequires: pkgconfig(libavutil) %endif %if %{with system_avif} #BuildRequires: pkgconfig(libavif) #BuildRequires: pkgconfig(libyuv) %endif %if %{with system_re2} BuildRequires: pkgconfig(re2) >= 11 %endif %if %{with clang} BuildRequires: clang llvm lld BuildRequires: libstdc++-devel libstdc++-static BuildRequires: compiler-rt %endif %if %{without clang} BuildRequires: gcc BuildRequires: gcc-c++ %endif %description Chromium is an open-source web browser, powered by WebKit (Blink). %package -n chromedriver Summary: WebDriver for Google Chrome/Chromium Requires: %{name} = %{version} %description -n chromedriver 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 # download source0 cd %{_sourcedir} rm -f %{SOURCE0} wget -q https://user-repo.openeuler.openatom.cn/lfs-tar/chromium/chromium-%{version}.tar.xz cd - #%{__cat} %{SOURCE101} %{SOURCE102} %{SOURCE103} %{SOURCE104} %{SOURCE105} > %{SOURCE0} %setup -q -n chromium-%{version} %autopatch -p1 # Change shebang in all relevant files in this directory and all subdirectories # See `man find` for how the `-exec command {} +` syntax works find -type f \( -iname "*.py" \) -exec sed -i '1s=^#! */usr/bin/\(python\|env python\)[23]\?=#!%{__python3}=' {} + # Hard code extra version sed -i 's/getenv("CHROME_VERSION_EXTRA")/"openEuler Project"/' chrome/common/channel_info_posix.cc %build rm third_party/devtools-frontend/src/third_party/esbuild/esbuild tar -xf %{SOURCE101} pushd esbuild gflags="-mod=vendor -gcflags=all='-N -l'" GO_FLAGS="${gflags}" make cp -a esbuild ../third_party/devtools-frontend/src/third_party/esbuild/esbuild popd #correct path for 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 # Get rid of the pre-built eu-strip binary, it is x86_64 and of mysterious origin rm -rf buildtools/third_party/eu-strip/bin/eu-strip # Replace it with a symlink to copy ln -s %{_bindir}/eu-strip buildtools/third_party/eu-strip/bin/eu-strip # need for error: the option `Z` is only accepted on the nightly compiler export RUSTC_BOOTSTRAP=1 # set rustc version rustc_version="$(rustc --version | cut -d' ' -f2)" # set rust bindgen root rust_bindgen_root="%{_prefix}" export RUSTFLAGS # python3 mkdir -p $HOME/bin export PYTHON=python3 ln -sfn %{_bindir}/$PYTHON $HOME/bin/python export PATH="$HOME/bin/:$PATH" # use alternative wrapper rm chrome/installer/linux/common/wrapper cp %{SOURCE2} chrome/installer/linux/common/wrapper # set clang version #global clang_maj_ver %%(clang --version | sed -n 's/clang version //p' | cut -d. -f1) #if %{?clang_maj_ver} >= 17 # This is for >= 24.03 LTS, return example: 17 clang_version="$(clang --version | sed -n 's/clang version //p' | cut -d. -f1)" #else # This is for < 24.03 LTS, return example: 17.0.6 #clang_version="$(clang --version | awk '/clang version/{print $3}')" #endif 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/eu-strip buildtools/third_party/libc++ buildtools/third_party/libc++abi buildtools/third_party/libunwind chrome/third_party/mozilla_security_manager courgette/third_party 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/html5lib-python 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/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/lodash-isequal 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/third_party third_party/distributed_point_functions third_party/dom_distiller_js third_party/eigen3 third_party/emoji-segmenter third_party/farmhash 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/iccjpeg third_party/inspector_protocol third_party/ipcz third_party/jinja2 third_party/jsoncpp third_party/jstemplate 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/libudev 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/mesa third_party/metrics_proto third_party/minigbm 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/pthreadpool third_party/puffin third_party/pyjson5 third_party/pyyaml third_party/qcms third_party/rnnoise third_party/rust third_party/ruy third_party/s2cellid third_party/securemessage third_party/selenium-atoms third_party/sentencepiece third_party/sentencepiece/src/third_party/darts_clone third_party/shell-encryption 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-16.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/eigen3 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/util third_party/tflite/src/third_party/xla/xla/tsl/framework 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/base64 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/src/third_party/siphash v8/src/third_party/utf8-decoder v8/src/third_party/valgrind v8/third_party/glibc v8/third_party/inspector_protocol 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 ) keeplibs+=( third_party/libavif ) %endif %if !%{with system_webp} || !%{with system_avif} keeplibs+=( third_party/libwebp ) %endif keeplibs+=( third_party/speech-dispatcher third_party/usb_ids third_party/xdg-utils ) %if ! %{with system_re2} keeplibs+=( third_party/re2 ) %endif %if ! %{with system_zlib} keeplibs+=( third_party/zlib ) %endif keeplibs+=( third_party/lit ) keeplibs+=( third_party/rust/chromium_crates_io ) keeplibs+=( third_party/rust/cxx ) %if ! %{with system_zstd} keeplibs+=( third_party/zstd ) %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} %undefine _debugsource_packages %if %{with clang} export CC=clang export CXX=clang++ export AR=llvm-ar export NM=llvm-nm export RANLIB=llvm-ranlib %else export CC=gcc export CXX=g++ 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 # ignore warnings due to gcc bug (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84055) export CXXFLAGS="${CXXFLAGS} -Wno-attributes -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" export CXXFLAGS=${CXXFLAGS/-Wp,-D_GLIBCXX_ASSERTIONS} # 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 %ifarch aarch64 %if %{without clang} export CXXFLAGS="${CXXFLAGS} -flax-vector-conversions -fno-omit-frame-pointer" %else export CXXFLAGS="${CXXFLAGS} -flax-vector-conversions=all" %endif %endif %if %{without clang} export CXXFLAGS="${CXXFLAGS} -Wno-unused-but-set-variable -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 -fpermissive" %if %{with lto} && %{without clang} # reduce the threads for linking even more due to LTO eating ton of memory _link_threads=$(((%{jobs} - 2))) test "$_link_threads" -le 0 && _link_threads=1 export LDFLAGS="-flto=$_link_threads --param lto-max-streaming-parallelism=1" %endif # Set system libraries to be used gn_system_libraries=( flac fontconfig libdrm libevent libjpeg libpng libxslt libusb libxml opus snappy ) %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_re2} gn_system_libraries+=( re2 ) %endif %if %{with system_webp} gn_system_libraries+=( libwebp ) %endif %if %{with system_zlib} gn_system_libraries+=( zlib ) %endif %if %{with system_zstd} gn_system_libraries+=( zstd ) %endif build/linux/unbundle/replace_gn_files.py --system-libraries ${gn_system_libraries[@]} # Configuration for GN # Available options: out/Release/gn args --list out/Release/ gn_conf="" gn_conf+=" custom_toolchain=\"//build/toolchain/linux/unbundle:default\"" gn_conf+=" host_toolchain=\"//build/toolchain/linux/unbundle:default\"" gn_conf+=" use_custom_libcxx=false" %ifarch x86_64 gn_conf+=" host_cpu=\"x64\"" %endif %ifarch riscv64 gn_conf+=" host_cpu=\"riscv64\"" %endif gn_conf+=" is_debug=false" gn_conf+=" dcheck_always_on=false" gn_conf+=" enable_nacl=false" %if %{with swiftshader} gn_conf+=" use_swiftshader_with_subzero=true" %endif %ifarch aarch64 gn_conf+=" enable_swiftshader=false" gn_conf+=" dawn_use_swiftshader=false" %endif gn_conf+=" is_component_ffmpeg=true" gn_conf+=" use_cups=true" gn_conf+=" use_aura=true" gn_conf+=" symbol_level=1" gn_conf+=" blink_symbol_level=0" gn_conf+=" use_kerberos=true" gn_conf+=" enable_vr=false" gn_conf+=" optimize_webui=false" gn_conf+=" enable_reading_list=false" gn_conf+=" use_pulseaudio=true link_pulseaudio=true" gn_conf+=" is_component_build=false" gn_conf+=" use_sysroot=false" gn_conf+=" fatal_linker_warnings=false" gn_conf+=" use_allocator_shim=true" gn_conf+=" use_partition_alloc=true" gn_conf+=" disable_fieldtrial_testing_config=true" gn_conf+=" use_gnome_keyring=false" gn_conf+=" use_unofficial_version_number=false" %ifnarch riscv64 gn_conf+=" use_vaapi=true" %endif gn_conf+=" use_sysroot=false" gn_conf+=" treat_warnings_as_errors=false" gn_conf+=" enable_widevine=false" gn_conf+=" use_dbus=true" gn_conf+=" media_use_openh264=false" gn_conf+=" rtc_use_h264=false" gn_conf+=" use_v8_context_snapshot=true" gn_conf+=" v8_use_external_startup_data=true" gn_conf+=" safe_browsing_use_unrar=false" %if %{with gtk4} gn_conf+=" gtk_version=4" %endif %if %{without qt} gn_conf+=" use_qt=false" %else gn_conf+=" moc_qt5_path=\"%{_libdir}/qt5/bin\"" %endif # See dependency logic in third_party/BUILD.gn %if %{with system_harfbuzz} gn_conf+=" use_system_harfbuzz=true" %endif %if %{with system_freetype} gn_conf+=" use_system_freetype=true" %endif gn_conf+=" enable_hangout_services_extension=true" gn_conf+=" enable_vulkan=true" %if %{with pipewire} gn_conf+=" rtc_use_pipewire=true rtc_link_pipewire=true" %endif %if %{with clang} gn_conf+=" is_clang=true clang_version=\"$clang_version\" clang_base_path=\"$clang_base_path\" clang_use_chrome_plugins=false" %if %{with lto} && %{with clang} gn_conf+=" use_thin_lto=true" %endif gn_conf+=" use_lld=true" %else gn_conf+=" is_clang=false" %ifnarch riscv64 aarch64 gn_conf+=" use_gold=true" %endif %endif %if %{with lto} && %{without clang} gn_conf+=" gcc_lto=true" %endif %if %{with system_icu} gn_conf+=" icu_use_data_file=false" %endif gn_conf+=" rust_sysroot_absolute=\"%{_prefix}\"" gn_conf+=" rustc_version=\"$rustc_version\"" gn_conf+=" rust_bindgen_root=\"$rust_bindgen_root\"" # 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 gn_conf+=" proprietary_codecs=true" gn_conf+=" ffmpeg_branding=\"Chrome\"" %ifarch aarch64 gn_conf+=" host_cpu=\"arm64\"" %if %{with arm_bti} gn_conf+=" arm_control_flow_integrity=\"standard\"" %else gn_conf+=" arm_control_flow_integrity=\"none\"" %endif %endif gn_conf+=" google_api_key=\"%{api_key}\"" gn_conf+=" use_system_libffi=true" %if %{bootstrap} tools/gn/bootstrap/bootstrap.py --gn-gen-args="${gn_conf}" %else mkdir -p %{outputdir} && cp -a %{_bindir}/gn %{outputdir}/ %endif # GN does not support passing cflags: # https://bugs.chromium.org/p/chromium/issues/detail?id=642016 %{outputdir}/gn gen --args="${gn_conf}" %{outputdir} %{!?njobs:%global njobs %{_smp_build_ncpus}} ninja -v -j%njobs -C %{outputdir} chrome chromedriver %install bash %{SOURCE4} -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. 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 %{SOURCE1} %{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 %{SOURCE3} %{buildroot}%{_datadir}/icons/hicolor/symbolic/apps/chromium-browser.svg %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-browser.1* %files -n chromedriver %{_libdir}/chromium/chromedriver %{_bindir}/chromedriver %changelog * Wed Oct 09 2024 misaka00251 - 128.0.6613.119-1 - Upgrade to version 128 * Tue Jul 02 2024 misaka0251 - 125.0.6422.141-1 - Upgrade to version 125 * Wed Mar 06 2024 misaka00251 - 119.0.6045.159-1 - Upgrade to version 119 * Wed Dec 30 2020 Jeffery.Gao - 87.0.4280.88-1 - Package init