RPM build for ungoogled-chromium
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

1506 lines
57 KiB

%global obs 0
%global ninja_verbose 0
%global ccache 0
%define _lto_cflags %{nil}
%global numjobs 8
%ifarch aarch64
%global numjobs 4
%endif
# official builds have less debugging and go faster... but we have to shut some things off.
%global official_build 1
# Fancy build status, so we at least know, where we are..
# %1 where
# %2 what
%if %{ninja_verbose}
%global build_target() \
export NINJA_STATUS="[%2:%f/%t] " ; \
../depot_tools/ninja -j %{numjobs} -C '%1' -vvv '%2'
%else
%global build_target() \
export NINJA_STATUS="[%2:%f/%t] " ; \
../depot_tools/ninja -j %{numjobs} -C '%1' '%2'
%endif
# Define __python2 and __python3 for OBS
%if %{obs}
%global __python2 /usr/bin/python2
%global __python3 /usr/bin/python3
%endif
# This is finally possible with Chromium 93
%global build_with_python3 1
%if 0%{?build_with_python3}
%global chromium_pybin %{__python3}
%else
%global chromium_pybin %{__python2}
%endif
%global use_vaapi 1
# 2020-08-20: F33+ aarch64 has a binutils bug trying to link clear_key_cdm
# https://bugzilla.redhat.com/show_bug.cgi?id=1869884
%global build_clear_key_cdm 1
# NEVER EVER EVER turn this on in official builds
%global freeworld 0
%if %{freeworld}
%global lsuffix freeworld
%global nsuffix -freeworld
%else
%global lsuffix fedora
%global nsuffix %{nil}
%endif
# gn/ninja output folder
%global builddir out/Release
# Debuginfo packages aren't very useful here. If you need to debug
# you should do a proper debug build (not implemented in this spec yet)
%global debug_package %{nil}
# A switch to disable domain substitution for development purposes.
%bcond_without domain_substitution
# %%{nil} for Stable; -beta for Beta; -dev for Devel
# dash in -beta and -dev is intentional !
%global chromium_channel %{nil}
%global chromium_menu_name Ungoogled Chromium
%global chromium_browser_channel ungoogled-chromium%{chromium_channel}
%global chromium_path %{_libdir}/ungoogled-chromium%{chromium_channel}
# We don't want any libs in these directories to generate Provides
# Requires is trickier.
# To generate this list, go into %%{buildroot}%%{chromium_path} and run
# for i in `find . -name "*.so" | sort`; do NAME=`basename -s .so $i`; printf "$NAME|"; done
# for RHEL7, append libfontconfig to the end
# make sure there is not a trailing | at the end of the list
%global __provides_exclude_from %{chromium_path}/.*\\.so|%{chromium_path}/lib/.*\\.so|%{chromium_path}/lib/.*\\.so.*
%global privlibs libaccessibility|libandroid_mojo_bindings_shared|libanimation|libapdu|libaura|libaura_extra|libauthenticator_test_mojo_bindings_shared|libbase|libbase_i18n|libbindings|libbindings_base|libblink_common|libblink_controller|libblink_core|libblink_embedded_frame_sink_mojo_bindings_shared|libblink_features|libblink_modules|libblink_mojom_broadcastchannel_bindings_shared|libblink_platform|libbluetooth|libboringssl|libbrowser_ui_views|libcaptive_portal|libcapture_base|libcapture_lib|libcbor|libcc|libcc_animation|libcc_base|libcc_debug|libcc_ipc|libcc_mojo_embedder|libcc_paint|libcertificate_matching|libcert_verifier|libchrome_features|libchromium_sqlite3|libclearkeycdm|libclient|libcloud_policy_proto_generated_compile|libcodec|libcolor_space|libcolor_utils|libcommon|libcompositor|libcontent|libcontent_common_mojo_bindings_shared|libcontent_public_common_mojo_bindings_shared|libcontent_service_cpp|libcontent_service_mojom|libcontent_service_mojom_shared|libcontent_settings_features|libcrash_key_lib|libcrcrypto|libcrdtp|libdbus|libdevice_base|libdevice_event_log|libdevice_features|libdevice_gamepad|libdevices|libdevice_vr|libdevice_vr_mojo_bindings|libdevice_vr_mojo_bindings_blink|libdevice_vr_mojo_bindings_shared|libdevice_vr_test_mojo_bindings|libdevice_vr_test_mojo_bindings_blink|libdevice_vr_test_mojo_bindings_shared|libdiscardable_memory_client|libdiscardable_memory_common|libdiscardable_memory_service|libdisplay|libdisplay_types|libdisplay_util|libdomain_reliability|libdom_storage_mojom|libdom_storage_mojom_shared|libEGL|libEGL|libembedder|libembedder_switches|libevents|libevents_base|libevents_devices_x11|libevents_ozone_layout|libevents_x|libextras|libffmpeg|libfido|libfingerprint|libfreetype_harfbuzz|libgamepad_mojom|libgamepad_mojom_blink|libgamepad_mojom_shared|libgamepad_shared_typemap_traits|libgcm|libgeometry|libgeometry_skia|libgesture_detection|libgfx|libgfx_ipc|libgfx_ipc_buffer_types|libgfx_ipc_color|libgfx_ipc_geometry|libgfx_ipc_skia|libgfx_switches|libgfx_x11|libgin|libgles2|libgles2_implementation|libgles2_utils|libGLESv2|libGLESv2|libgl_init|libgl_in_process_context|libgl_wrapper|libgpu|libgpu_ipc_service|libgtkui|libheadless_non_renderer|libhost|libicui18n|libicuuc|libinterfaces_shared|libipc|libipc_mojom|libipc_mojom_shared|libkeycodes_x11|libkeyed_service_content|libkeyed_service_core|liblearning_common|liblearning_impl|libleveldatabase|libleveldb_proto|libmanager|libmedia|libmedia_blink|libmedia_gpu|libmedia_learning_mojo_impl|libmedia_message_center|libmedia_mojo_services|libmedia_session_base_cpp|libmedia_session_cpp|libmedia_webrtc|libmemory_instrumentation|libmenu|libmessage_center|libmessage_support|libmetrics_cpp|libmidi|libmirroring_service|libmojo_base_lib|libmojo_base_mojom|libmojo_base_mojom_blink|libmojo_base_mojom_shared|libmojo_base_shared_typemap_traits|libmojo_core_embedder|libmojo_core_embedder_internal|libmojo_core_ports|libmojo_cpp_platform|libmojom_core_shared|libmojom_mhtml_load_result_shared|libmojom_modules_shared|libmojo_mojom_bindings|libmojo_mojom_bindings_shared|libmojom_platform_shared|libmojo_public_system|libmojo_public_system_cpp|libnative_theme|libnet|libnetwork_cpp|libnetwork_cpp_base|libnetwork_service|libnetwork_session_configurator|libonc|libos_crypt|libparsers|libpdfium|libperfetto|libperformace_manager_public_mojom|libperformace_manager_public_mojom_blink|libperformace_manager_public_mojom_shared|libplatform|libplatform_window|libplatform_window_common|libplatform_window_handler_libs|libpolicy_component|libpolicy_proto|libppapi_host|libppapi_proxy|libppapi_shared|libprefs|libprinting|libproperties|libprotobuf_lite|libproxy_config|libpublic|librange|libraster|libresource_coordinator_public_mojom|libresource_coordinator_public_mojom_blink|libresource_coordinator_public_mojom_shared|libsandbox|libsandbox_services|libscheduling_metrics|libseccomp_bpf|libsecurity_state_features|libservice|libservice_manager_cpp|libservice_manager_cpp_types|libservice_manager_mojom|libservice_manager_mojom_blink|libservice_manager_mojom_constants|libservice_manager_mojom_constants_blink|libservice_manager_mojom_constants_shared|libservice_manager_mojom_shared|libservice_manager_mojom_traits|libservice_provider|libsessions|libshared_memory_support|libshared_with_blink|libshell_dialogs|libskia|libskia_shared_typemap_traits|libsnapshot|libsql|libstartup_tracing|libstorage_browser|libstorage_common|libstorage_service_public|libstub_window|libsuid_sandbox_client|libsurface|libsystem_media_controls|libtab_count_metrics|libthread_linux|libtracing|libtracing_cpp|libtracing_mojom|libtracing_mojom_shared|libui_accessibility_ax_mojom|libui_accessibility_ax_mojom_blink|libui_accessibility_ax_mojom_shared|libui_base|libui_base_clipboard|libui_base_clipboard_types|libui_base_features|libui_base_idle|libui_base_ime|libui_base_ime_init|libui_base_ime_linux|libui_base_ime_types|libui_base_x|libui_data_pack|libui_devtools|libui_message_center_cpp|libui_touch_selection|liburl|liburl_ipc|liburl_matcher|libusb_shared|libuser_manager|libuser_prefs|libv8|libv8_libbase|libv8_libplatform|libviews|libviz_common|libviz_resource_format_utils|libviz_vulkan_context_provider|libVkICD_mock_icd|libvk_swiftshader|libvr_base|libvr_common|libvulkan_info|libvulkan_init|libvulkan_wrapper|libvulkan_x11|libvulkan_ycbcr_info|libweb_bluetooth_mojo_bindings_shared|libwebdata_common|libweb_dialogs|libweb_feature_mojo_bindings_mojom|libweb_feature_mojo_bindings_mojom_blink|libweb_feature_mojo_bindings_mojom_shared|libwebgpu|libweb_modal|libwebrtc_component|libwebview|libwm|libwm_public|libwtf|libwtf_support|libx11_events_platform|libx11_window|libzygote
%global __requires_exclude ^(%{privlibs})\\.so*
%if 0
# Chromium's fork of ICU is now something we can't unbundle.
# This is left here to ease the change if that ever switches.
BuildRequires: libicu-devel >= 5.4
%global bundleicu 0
%else
%global bundleicu 1
%endif
%global bundlere2 1
# The libxml_utils code depends on the specific bundled libxml checkout
# which is not compatible with the current code in the Fedora package as of
# 2017-06-08.
%global bundlelibxml 1
# Fedora's Python 2 stack is being removed, we use the bundled Python libraries
# This can be revisited once we upgrade to Python 3
%global bundlepylibs 0
# RHEL 7.9 dropped minizip.
# It exists everywhere else though.
%global bundleminizip 0
# Chromium used to break on wayland, hidpi, and colors with gtk3 enabled.
# Hopefully it does not anymore.
%global gtk3 1
%global bundleharfbuzz 1
%global bundleopus 1
%global bundlelibusbx 0
%global bundlelibwebp 0
%global bundlelibpng 0
%global bundlelibjpeg 0
# Needs FT_ClipBox which was implemented after 2.11.0. Should be able to set this back to 0 later.
%global bundlefreetype 1
%global bundlelibdrm 0
%global bundlefontconfig 0
### Google API keys (see http://www.chromium.org/developers/how-tos/api-keys)
### Note: These are for Fedora use ONLY.
### For your own distribution, please get your own set of keys.
### http://lists.debian.org/debian-legal/2013/11/msg00006.html
%global api_key %{nil}
%global default_client_id %{nil}
%global default_client_secret %{nil}
#Build with debugging symbols
%global debug_pkg 0
%global majorversion 98
%global revision 1
# Depot tools revision
%global depot_tools_revision a8c66d0dabec812f47b6f2a4639baca46b9b4d7a
%if %{freeworld}
Name: ungoogled-chromium%{nsuffix}
%else
Name: ungoogled-chromium
%endif
Version: %{majorversion}.0.4758.80
Release: 1%{?dist}.%{revision}
%if %{?freeworld}
# chromium-freeworld
Summary: A lightweight approach to removing Google web service dependency, built with all possible codecs
%else
Summary: A lightweight approach to removing Google web service dependency
%endif
URL: https://github.com/Eloston/ungoogled-chromium
License: BSD and LGPLv2+ and ASL 2.0 and IJG and MIT and GPLv2+ and ISC and OpenSSL and (MPLv1.1 or GPLv2 or LGPLv2)
### Chromium Fedora Patches ###
# Use /etc/chromium for initial_prefs
Patch1: chromium-91.0.4472.77-initial_prefs-etc-path.patch
# Use gn system files
Patch2: chromium-67.0.3396.62-gn-system.patch
# Do not prefix libpng functions
Patch3: chromium-60.0.3112.78-no-libpng-prefix.patch
# Do not mangle zlib
Patch5: chromium-77.0.3865.75-no-zlib-mangle.patch
# Try to load widevine from other places
Patch10: chromium-92.0.4515.107-widevine-other-locations.patch
# Tell bootstrap.py to always use the version of Python we specify
Patch11: chromium-93.0.4577.63-py3-bootstrap.patch
# https://gitweb.gentoo.org/repo/gentoo.git/tree/www-client/chromium/files/chromium-unbundle-zlib.patch
Patch52: chromium-81.0.4044.92-unbundle-zlib.patch
# Fix issue where closure_compiler thinks java is only allowed in android builds
# https://bugs.chromium.org/p/chromium/issues/detail?id=1192875
Patch65: chromium-91.0.4472.77-java-only-allowed-in-android-builds.patch
# Rawhide (f35) glibc defines SIGSTKSZ as a long instead of a constant
Patch76: chromium-92.0.4515.107-rawhide-gcc-std-max-fix.patch
# Do not download proprietary widevine module in the background (thanks Debian)
Patch79: chromium-93.0.4577.63-widevine-no-download.patch
# Fix crashes with components/cast_*
# Thanks to Gentoo
Patch80: chromium-98.0.4758.80-EnumTable-crash.patch
# Clean up clang-format for python3
# thanks to Jon Nettleton
Patch86: chromium-94.0.4606.81-clang-format.patch
# include full UrlResponseHead header
Patch95: chromium-93.0.4577.63-mojo-header-fix.patch
# From gentoo
Patch98: chromium-94.0.4606.71-InkDropHost-crash.patch
# Enable WebRTCPPipeWireCapturer by default
Patch99: chromium-96.0.4664.110-enable-WebRTCPipeWireCapturer-byDefault.patch
# VAAPI
# Upstream turned VAAPI on in Linux in 86
Patch202: chromium-98.0.4758.80-enable-hardware-accelerated-mjpeg.patch
Patch203: chromium-86.0.4240.75-vaapi-i686-fpermissive.patch
Patch205: chromium-86.0.4240.75-fix-vaapi-on-intel.patch
# Apply these patches to work around EPEL8 issues
Patch300: chromium-92.0.4515.107-rhel8-force-disable-use_gnome_keyring.patch
# Fixes from Gentoo
Patch400: chromium-glibc-2.34.patch
Patch401: chromium-VirtualCursor-standard-layout.patch
# Clang 12 cflags
Patch403: chromium-clang-12-cflags.patch
Patch404: chromium-clang-sanitizer-cflags.patch
# RPM Fusion patches [free/chromium-freeworld]:
Patch503: chromium-manpage.patch
# RPM Fusion patches [free/chromium-browser-privacy]:
Patch600: chromium-default-user-data-dir.patch
# ungoogled-chromium platform patches
Patch700: chromium-94.0.4606.61-ungoogled-pref-fix.patch
# Use chromium-latest.py to generate clean tarball from released build tarballs, found here:
# http://build.chromium.org/buildbot/official/
# For Chromium Fedora use chromium-latest.py --stable --ffmpegclean --ffmpegarm
# If you want to include the ffmpeg arm sources append the --ffmpegarm switch
# https://commondatastorage.googleapis.com/chromium-browser-official/chromium-%%{version}.tar.xz
%if %{freeworld} || %{obs}
Source0: https://commondatastorage.googleapis.com/chromium-browser-official/chromium-%{version}.tar.xz
%else
Source0: chromium-%{version}-clean.tar.xz
%endif
# Packaged by OBS from https://chromium.googlesource.com/chromium/tools/depot_tools.git
Source2: depot_tools-%{depot_tools_revision}.tar.xz
Source3: ungoogled-chromium.sh
Source4: %{chromium_browser_channel}.desktop
# Also, only used if you want to reproduce the clean tarball.
Source5: clean_ffmpeg.sh
Source6: chromium-latest.py
Source7: get_free_ffmpeg_source_files.py
# Get the names of all tests (gtests) for Linux
# Usage: get_linux_tests_name.py chromium-%%{version} --spec
Source8: get_linux_tests_names.py
# GNOME stuff
Source9: ungoogled-chromium.xml
Source13: master_preferences
# Unpackaged fonts
Source14: https://fontlibrary.org/assets/downloads/gelasio/4d610887ff4d445cbc639aae7828d139/gelasio.zip
Source15: https://download.savannah.nongnu.org/releases/freebangfont/MuktiNarrow-0.94.tar.bz2
Source16: https://github.com/web-platform-tests/wpt/raw/master/fonts/Ahem.ttf
Source17: GardinerModBug.ttf
Source18: GardinerModCat.ttf
# Bring xcb-proto with us (might need more than python on EPEL?)
Source20: https://www.x.org/releases/individual/proto/xcb-proto-1.14.tar.xz
# Add our own appdata file.
Source22: ungoogled-chromium.appdata.xml
# ungoogled-chromium source
%global ungoogled_chromium_revision 98.0.4758.80-1
Source300: https://github.com/Eloston/ungoogled-chromium/archive/%{ungoogled_chromium_revision}/ungoogled-chromium-%{ungoogled_chromium_revision}.tar.gz
BuildRequires: llvm
BuildRequires: llvm-libs
BuildRequires: clang
BuildRequires: clang-libs
BuildRequires: lld
BuildRequires: lld-libs
BuildRequires: compiler-rt
BuildRequires: alsa-lib-devel
BuildRequires: atk-devel
BuildRequires: bison
BuildRequires: cups-devel
BuildRequires: dbus-devel
BuildRequires: desktop-file-utils
BuildRequires: expat-devel
BuildRequires: flex
BuildRequires: fontconfig-devel
BuildRequires: glib2-devel
BuildRequires: glibc-devel
BuildRequires: gperf
%if 0%{?bundleharfbuzz}
#nothing
%else
BuildRequires: harfbuzz-devel >= 2.4.0
%endif
BuildRequires: libatomic
BuildRequires: libcap-devel
BuildRequires: libcurl-devel
%if 0%{?bundlelibdrm}
#nothing
%else
BuildRequires: libdrm-devel
%endif
BuildRequires: libgcrypt-devel
BuildRequires: libudev-devel
BuildRequires: libuuid-devel
BuildRequires: libusb-devel
BuildRequires: libXdamage-devel
BuildRequires: libXtst-devel
BuildRequires: xcb-proto
BuildRequires: mesa-libgbm-devel
BuildRequires: minizip-compat-devel
BuildRequires: nodejs
BuildRequires: nss-devel >= 3.26
BuildRequires: pciutils-devel
BuildRequires: pulseaudio-libs-devel
# For screen sharing on Wayland, currently Fedora only thing - no epel
%if 0%{?fedora}
BuildRequires: pkgconfig(libpipewire-0.3)
%endif
# for /usr/bin/appstream-util
BuildRequires: libappstream-glib
# gn needs these
BuildRequires: libstdc++-static
BuildRequires: libstdc++-devel, openssl-devel
# Fedora tries to use system libs whenever it can.
BuildRequires: bzip2-devel
BuildRequires: dbus-glib-devel
# For eu-strip
BuildRequires: elfutils
BuildRequires: elfutils-libelf-devel
BuildRequires: flac-devel
%if 0%{?bundlefreetype}
# nothing
%else
BuildRequires: freetype-devel
%endif
BuildRequires: hwdata
BuildRequires: kernel-headers
BuildRequires: libevent-devel
BuildRequires: libffi-devel
%if 0%{?bundleicu}
# If this is true, we're using the bundled icu.
# We'd like to use the system icu every time, but we cannot always do that.
%else
# Not newer than 54 (at least not right now)
BuildRequires: libicu-devel = 54.1
%endif
%if 0%{?bundlelibjpeg}
# If this is true, we're using the bundled libjpeg
# which we need to do because the RHEL 7 libjpeg doesn't work for chromium anymore
%else
BuildRequires: libjpeg-devel
%endif
%if 0%{?bundlelibpng}
# If this is true, we're using the bundled libpng
# which we need to do because the RHEL 7 libpng doesn't work right anymore
%else
BuildRequires: libpng-devel
%endif
%if 0
# see https://code.google.com/p/chromium/issues/detail?id=501318
BuildRequires: libsrtp-devel >= 1.4.4
%endif
BuildRequires: libudev-devel
%if %{bundlelibusbx}
# Do nothing
%else
%if 0%{?fedora} >= 35
Requires: libusb1 >= 1.0.24-4
BuildRequires: libusb1-devel >= 1.0.24-4
%else
Requires: libusbx >= 1.0.21-0.1.git448584a
BuildRequires: libusbx-devel >= 1.0.21-0.1.git448584a
%endif
%endif
BuildRequires: libva-devel
# We don't use libvpx anymore because Chromium loves to
# use bleeding edge revisions here that break other things
# ... so we just use the bundled libvpx.
%if %{bundlelibwebp}
# Do nothing
%else
BuildRequires: libwebp-devel
%endif
BuildRequires: libxslt-devel
BuildRequires: libxshmfence-devel
# Same here, it seems.
# BuildRequires: libyuv-devel
BuildRequires: mesa-libGL-devel
%if %{bundleopus}
# Do nothing
%else
BuildRequires: opus-devel
%endif
BuildRequires: perl(Switch)
%if 0%{gtk3}
BuildRequires: pkgconfig(gtk+-3.0)
%else
BuildRequires: pkgconfig(gtk+-2.0)
%endif
%if ! %{build_with_python3}
%if 0%{?fedora} >= 32
BuildRequires: python2.7
%else
BuildRequires: python2
BuildRequires: python2-devel
%endif
%else
BuildRequires: python3
BuildRequires: python3-devel
%endif
%if 0%{?build_with_python3}
%if 0%{?bundlepylibs}
# Using bundled bits, do nothing.
%else
BuildRequires: python3-beautifulsoup4
# BuildRequires: python2-beautifulsoup
BuildRequires: python3-html5lib
BuildRequires: python3-markupsafe
BuildRequires: python3-ply
BuildRequires: python3-simplejson
%endif
%else
%if 0%{?bundlepylibs}
# Using bundled bits, do nothing.
%else
BuildRequires: python2-beautifulsoup4
BuildRequires: python2-beautifulsoup
BuildRequires: python2-html5lib
BuildRequires: python2-markupsafe
BuildRequires: python2-ply
BuildRequires: python2-simplejson
%endif
%endif
%if 0%{?bundlere2}
# Using bundled bits, do nothing.
%else
Requires: re2 >= 20160401
BuildRequires: re2-devel >= 20160401
%endif
BuildRequires: speech-dispatcher-devel
BuildRequires: yasm
BuildRequires: zlib-devel
# for third_party/test_fonts
%if %{freeworld}
# dont need fonts for this
%else
BuildRequires: google-croscore-arimo-fonts
BuildRequires: google-croscore-cousine-fonts
BuildRequires: google-croscore-tinos-fonts
BuildRequires: google-noto-sans-cjk-jp-fonts
BuildRequires: lohit-gurmukhi-fonts
BuildRequires: dejavu-sans-fonts
BuildRequires: thai-scalable-garuda-fonts
BuildRequires: lohit-devanagari-fonts
BuildRequires: lohit-tamil-fonts
BuildRequires: google-noto-sans-khmer-fonts
BuildRequires: google-noto-emoji-color-fonts
BuildRequires: google-noto-sans-symbols2-fonts
# There used to be a copy of this font file here, but it looks like NotoSansTibetan is no more.
# And yet, the chromium code still wants it.
Source115: NotoSansTibetan-Regular.ttf
%endif
# using the built from source version on aarch64
BuildRequires: ninja-build
# Yes, java is needed as well..
BuildRequires: java-1.8.0-openjdk-headless
BuildRequires: lua
# There is a hardcoded check for nss 3.26 in the chromium code (crypto/nss_util.cc)
Requires: nss%{_isa} >= 3.26
Requires: nss-mdns%{_isa}
# GTK modules it expects to find for some reason.
%if 0%{gtk3}
Requires: libcanberra-gtk3%{_isa}
%else
Requires: libcanberra-gtk2%{_isa}
%endif
%if 0%{?fedora}
# This enables support for u2f tokens
Requires: u2f-hidraw-policy
%endif
ExclusiveArch: x86_64 i686 aarch64
# For selinux scriptlet
Requires(post): /usr/sbin/semanage
Requires(post): /usr/sbin/restorecon
%if %{?freeworld}
%description
%{name} is a distribution of ungoogled-chromium, built with all possible codecs.
ungoogled-chromium is Chromium, sans integration with Google. It also features
some tweaks to enhance privacy, control, and transparency (almost all of which
require manual activation or enabling).
ungoogled-chromium retains the default Chromium experience as closely as
possible. Unlike other Chromium forks that have their own visions of a web
browser, ungoogled-chromium is essentially a drop-in replacement for Chromium.
%else
%description
%{name} is a distribution of ungoogled-chromium.
ungoogled-chromium is Chromium, sans integration with Google. It also features
some tweaks to enhance privacy, control, and transparency (almost all of which
require manual activation or enabling).
ungoogled-chromium retains the default Chromium experience as closely as
possible. Unlike other Chromium forks that have their own visions of a web
browser, ungoogled-chromium is essentially a drop-in replacement for Chromium.
%endif
# Chromium needs an explicit Requires: minizip-compat
Requires: minizip-compat%{_isa}
############################################PREP###########################################################
%prep
%setup -q -T -n ungoogled-chromium-%{ungoogled_chromium_revision} -b 300
%setup -q -T -n depot_tools-%{depot_tools_revision} -b 2
%setup -q -n chromium-%{version}
%global ungoogled_chromium_root %{_builddir}/ungoogled-chromium-%{ungoogled_chromium_revision}
ln -s depot_tools-%{depot_tools_revision} ../depot_tools
%if %{obs}
(
cd ..
for i in chromium-%{version}.tar.xz chromium-latest.py clean_ffmpeg.sh get_free_ffmpeg_source_files.py
do
j=../SOURCES/$i
chmod +x $j
ln -s $j $i
done
printf 'md5 %s\n' "$(md5sum chromium-%{version}.tar.xz)" > chromium-%{version}.tar.xz.hashes
./chromium-latest.py --version %{version} --ffmpegclean --ffmpegarm --prep
rm -f *.tar.xz* *.sh *.py
)
%endif
### Chromium Fedora Patches ###
%patch1 -p1 -b .etc
%patch2 -p1 -b .gnsystem
%patch3 -p1 -b .nolibpngprefix
%patch5 -p1 -b .nozlibmangle
%patch10 -p1 -b .widevine-other-locations
%if 0%{?build_with_python3}
%patch11 -p1 -b .py3
%endif
# Short term fixes (usually gcc and backports)
%if 0%{?fedora}
%patch52 -p1 -b .unbundle-zlib
%endif
%patch65 -p1 -b .java-only-allowed
%if 0%{?fedora} >= 35
%patch76 -p1 -b .sigstkszfix
%endif
%patch79 -p1 -b .widevine-no-download
%patch80 -p1 -b .EnumTable-crash
%patch86 -p1 -b .clang-format-py3
%patch95 -p1 -b .mojo-header-fix
%patch98 -p1 -b .InkDropHost-crash
%patch99 -p1 -b .enable-WebRTCPipeWireCapturer-byDefault
# Feature specific patches
%if %{use_vaapi}
%patch202 -p1 -b .accel-mjpeg
%ifarch i686
%patch203 -p1 -b .i686permissive
%endif
%patch205 -p1 -b .vaapi-intel-fix
%endif
# Always disable gnome keyring
%patch300 -p1 -b .disblegnomekeyring
# glibc fix
%patch400 -p1 -b .glibc-2.34
%patch401 -p1 -b .virtualcursor
# cflags
%if 0%{?fedora} < 35
%patch403 -p1 -b .clang-12-cflags
%endif
%patch404 -p1 -b .clang-sanitizer-cflags
# RPM Fusion patches [free/chromium-freeworld]:
%patch503 -p1 -b .manpage
# RPM Fusion patches [free/chromium-browser-privacy]:
%patch600 -p1 -b .default-user-dir
# ungoogled-chromium platform patches
%patch700 -p1 -b .ungoogled-pref-fix
# Change shebang in all relevant files in this directory and all subdirectories
# See `man find` for how the `-exec command {} +` syntax works
%if 0%{?build_with_python3}
find -type f -exec sed -iE '1s=^#! */usr/bin/\(python\|env python\)[23]\?=#!%{__python3}=' {} +
%else
find -type f -exec sed -iE '1s=^#! */usr/bin/\(python\|env python\)[23]\?=#!%{__python2}=' {} +
%endif
export AR=${AR:=llvm-ar}
export NM=${NM:=llvm-nm}
export CC=${CC:=clang}
export CXX=${CXX:=clang++}
%if %{ccache}
export CCACHE_CPP2=yes
export CCACHE_SLOPPINESS=time_macros
%endif
rm -rf buildtools/third_party/libc++/BUILD.gn
# Unpack fonts
%if %{freeworld}
# no font fun needed.
%else
pushd third_party/test_fonts
mkdir test_fonts
cd test_fonts
unzip %{SOURCE14}
tar xf %{SOURCE15}
mv MuktiNarrow0.94/MuktiNarrow.ttf .
rm -rf MuktiNarrow0.94
cp %{SOURCE16} .
cp %{SOURCE17} .
cp %{SOURCE18} .
cp -a /usr/share/fonts/google-arimo-fonts/Arimo-*.ttf .
cp -a /usr/share/fonts/google-cousine-fonts/Cousine-*.ttf .
cp -a /usr/share/fonts/google-tinos-fonts/Tinos-*.ttf .
cp -a /usr/share/fonts/lohit-gurmukhi/Lohit-Gurmukhi.ttf .
cp -a /usr/share/fonts/google-noto-cjk/NotoSansCJKjp-Regular.otf .
cp -a /usr/share/fonts/dejavu-sans-fonts/DejaVuSans.ttf /usr/share/fonts/dejavu-sans-fonts/DejaVuSans-Bold.ttf .
cp -a /usr/share/fonts/thai-scalable/Garuda.otf .
sed -i 's|Garuda.ttf|Garuda.otf|g' ../BUILD.gn
cp -a /usr/share/fonts/lohit-devanagari/Lohit-Devanagari.ttf /usr/share/fonts/lohit-tamil/Lohit-Tamil.ttf .
cp -a /usr/share/fonts/google-noto/NotoSansKhmer-Regular.ttf .
cp -a /usr/share/fonts/google-noto-emoji/NotoColorEmoji.ttf .
cp -a /usr/share/fonts/google-noto/NotoSansSymbols2-Regular.ttf .
cp -a %{SOURCE115} .
popd
%endif
# Core defines are flags that are true for both the browser and headless.
UNGOOGLED_CHROMIUM_GN_DEFINES=''
UNGOOGLED_CHROMIUM_GN_DEFINES+=' is_debug=false is_unsafe_developer_build=false dcheck_always_on=false'
%ifarch x86_64 aarch64
UNGOOGLED_CHROMIUM_GN_DEFINES+=' system_libdir="lib64" clang_base_path="/usr"'
%endif
%if %{official_build}
UNGOOGLED_CHROMIUM_GN_DEFINES+=' is_official_build=true use_thin_lto=true is_cfi=true'
sed -i 's|OFFICIAL_BUILD|GOOGLE_CHROME_BUILD|g' tools/generate_shim_headers/generate_shim_headers.py
%endif
UNGOOGLED_CHROMIUM_GN_DEFINES+=' google_api_key="%{api_key}" google_default_client_id="%{default_client_id}" google_default_client_secret="%{default_client_secret}"'
UNGOOGLED_CHROMIUM_GN_DEFINES+=' is_clang=true clang_use_chrome_plugins=false use_sysroot=false disable_fieldtrial_testing_config=true use_lld=true rtc_enable_symbol_export=true'
UNGOOGLED_CHROMIUM_GN_DEFINES+=' use_gold=false'
%if %{freeworld}
UNGOOGLED_CHROMIUM_GN_DEFINES+=' ffmpeg_branding="ChromeOS" proprietary_codecs=true'
%else
UNGOOGLED_CHROMIUM_GN_DEFINES+=' ffmpeg_branding="Chromium" proprietary_codecs=false'
%endif
UNGOOGLED_CHROMIUM_GN_DEFINES+=' treat_warnings_as_errors=false'
UNGOOGLED_CHROMIUM_GN_DEFINES+=' use_custom_libcxx=false'
%ifarch aarch64
UNGOOGLED_CHROMIUM_GN_DEFINES+=' target_cpu="arm64"'
%endif
UNGOOGLED_CHROMIUM_GN_DEFINES+=' use_gnome_keyring=false'
UNGOOGLED_CHROMIUM_GN_DEFINES+=' use_gio=true use_pulseaudio=true icu_use_data_file=true'
UNGOOGLED_CHROMIUM_GN_DEFINES+=' enable_nacl=false'
UNGOOGLED_CHROMIUM_GN_DEFINES+=' is_component_ffmpeg=false is_component_build=false'
UNGOOGLED_CHROMIUM_GN_DEFINES+=' enable_hangout_services_extension=false'
%if %{debug_pkg}
UNGOOGLED_CHROMIUM_GN_DEFINES+=' blink_symbol_level=1 symbol_level=1 exclude_unwind_tables=false'
%else
UNGOOGLED_CHROMIUM_GN_DEFINES+=' blink_symbol_level=0 symbol_level=0 exclude_unwind_tables=true'
%endif
UNGOOGLED_CHROMIUM_GN_DEFINES+=' enable_widevine=true'
%if %{use_vaapi}
UNGOOGLED_CHROMIUM_GN_DEFINES+=' use_vaapi=true'
%else
UNGOOGLED_CHROMIUM_GN_DEFINES+=' use_vaapi=false'
%endif
UNGOOGLED_CHROMIUM_GN_DEFINES+=' rtc_use_pipewire=true rtc_link_pipewire=true'
%if %{ccache}
UNGOOGLED_CHROMIUM_GN_DEFINES+=' cc_wrapper="ccache"'
%endif
UNGOOGLED_CHROMIUM_GN_DEFINES+=' chrome_pgo_phase=2 enable_js_type_check=false enable_mse_mpeg2ts_stream_parser=true enable_one_click_signin=false enable_reading_list=false enable_remoting=false enable_reporting=false enable_service_discovery=false safe_browsing_mode=0'
export UNGOOGLED_CHROMIUM_GN_DEFINES
# ungoogled-chromium: binary pruning.
# Exclude PGO profile
sed -i '\!chrome/build/pgo_profiles/.*!d' %{ungoogled_chromium_root}/pruning.list
python3 -B %{ungoogled_chromium_root}/utils/prune_binaries.py . %{ungoogled_chromium_root}/pruning.list || true
mkdir -p third_party/node/linux/node-linux-x64/bin
ln -s %{_bindir}/node third_party/node/linux/node-linux-x64/bin/node
# Remove most of the bundled libraries. Libraries specified below (taken from
# Gentoo's Chromium ebuild) are the libraries that needs to be preserved.
build/linux/unbundle/remove_bundled_libraries.py \
'base/third_party/cityhash' \
'base/third_party/cityhash_v103' \
'base/third_party/double_conversion' \
'base/third_party/dynamic_annotations' \
'base/third_party/icu' \
'base/third_party/libevent' \
'base/third_party/nspr' \
'base/third_party/superfasthash' \
'base/third_party/symbolize' \
'base/third_party/valgrind' \
'base/third_party/xdg_mime' \
'base/third_party/xdg_user_dirs' \
'buildtools/third_party/eu-strip' \
'buildtools/third_party/libc++' \
'buildtools/third_party/libc++abi' \
'chrome/third_party/mozilla_security_manager' \
'courgette/third_party' \
'net/third_party/mozilla_security_manager' \
'net/third_party/nss' \
'net/third_party/quiche' \
'net/third_party/uri_template' \
'third_party/abseil-cpp' \
'third_party/angle' \
'third_party/angle/src/common/third_party/base' \
'third_party/angle/src/common/third_party/smhasher' \
'third_party/angle/src/common/third_party/xxhash' \
'third_party/angle/src/third_party/libXNVCtrl' \
'third_party/angle/src/third_party/trace_event' \
'third_party/angle/src/third_party/volk' \
'third_party/apple_apsl' \
'third_party/axe-core' \
'third_party/blanketjs' \
'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/beautifulsoup4-4.9.3' \
'third_party/catapult/third_party/google-endpoints' \
'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/crashpad' \
'third_party/crashpad/crashpad/third_party/lss' \
'third_party/crashpad/crashpad/third_party/zlib/' \
'third_party/crc32c' \
'third_party/cros_system_api' \
'third_party/dav1d' \
'third_party/dawn' \
'third_party/dawn/third_party/khronos' \
'third_party/dawn/third_party/tint' \
'third_party/depot_tools' \
'third_party/devscripts' \
'third_party/devtools-frontend' \
'third_party/devtools-frontend/src/third_party/typescript' \
'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/lit-html' \
'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/wasmparser' \
'third_party/devtools-frontend/src/test/unittests/front_end/third_party/i18n' \
'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/expat' \
'third_party/farmhash' \
'third_party/fdlibm' \
'third_party/ffmpeg' \
'third_party/fft2d' \
'third_party/flac' \
'third_party/flatbuffers' \
'third_party/fontconfig' \
'third_party/freetype' \
'third_party/fusejs' \
'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/google_trust_services' \
'third_party/googletest' \
'third_party/grpc' \
'third_party/harfbuzz-ng' \
'third_party/highway' \
'third_party/hunspell' \
'third_party/iccjpeg' \
'third_party/icu' \
'third_party/inspector_protocol' \
'third_party/jinja2' \
'third_party/jsoncpp' \
'third_party/jstemplate' \
'third_party/khronos' \
'third_party/leveldatabase' \
'third_party/libXNVCtrl' \
'third_party/libaddressinput' \
'third_party/libaom' \
'third_party/libaom/source/libaom/third_party/fastfeat' \
'third_party/libaom/source/libaom/third_party/vector' \
'third_party/libaom/source/libaom/third_party/x86inc' \
'third_party/libavif' \
'third_party/libdrm' \
'third_party/libgav1' \
'third_party/libgifcodec' \
'third_party/libjingle' \
'third_party/libjpeg_turbo' \
'third_party/libjxl' \
'third_party/libphonenumber' \
'third_party/libpng' \
'third_party/libsecret' \
'third_party/libsrtp' \
'third_party/libsync' \
'third_party/libudev' \
'third_party/liburlpattern' \
'third_party/libusb' \
'third_party/libva_protected_content' \
'third_party/libvpx' \
'third_party/libvpx/source/libvpx/third_party/x86inc' \
'third_party/libwebm' \
'third_party/libwebp' \
'third_party/libx11' \
'third_party/libxcb-keysyms' \
'third_party/libxml' \
'third_party/libxml/chromium' \
'third_party/libxslt' \
'third_party/libyuv' \
'third_party/libzip' \
'third_party/lottie' \
'third_party/lss' \
'third_party/lzma_sdk' \
'third_party/mako' \
'third_party/maldoca' \
'third_party/maldoca/src/third_party/tensorflow_protos' \
'third_party/maldoca/src/third_party/zlibwrapper' \
'third_party/markupsafe' \
'third_party/mesa' \
'third_party/metrics_proto' \
'third_party/minigbm' \
'third_party/modp_b64' \
'third_party/nasm' \
'third_party/nearby' \
'third_party/neon_2_sse' \
'third_party/node' \
'third_party/node/node_modules/polymer-bundler/lib/third_party/UglifyJS2' \
'third_party/one_euro_filter' \
'third_party/opencv' \
%if %{freeworld}
'third_party/openh264' \
%endif
'third_party/openscreen' \
'third_party/openscreen/src/third_party/mozilla' \
'third_party/openscreen/src/third_party/tinycbor' \
'third_party/opus' \
'third_party/ots' \
'third_party/pdfium' \
'third_party/pdfium/third_party/agg23' \
'third_party/pdfium/third_party/base' \
'third_party/pdfium/third_party/bigint' \
'third_party/pdfium/third_party/freetype' \
'third_party/pdfium/third_party/lcms' \
'third_party/pdfium/third_party/libopenjpeg20' \
'third_party/pdfium/third_party/libpng16' \
'third_party/pdfium/third_party/libtiff' \
'third_party/pdfium/third_party/skia_shared' \
'third_party/perfetto' \
'third_party/perfetto/protos/third_party/chromium' \
'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/six' \
'third_party/pyjson5' \
'third_party/qcms' \
'third_party/qunit' \
%if 0%{?bundlere2}
'third_party/re2' \
%endif
'third_party/rnnoise' \
'third_party/ruy' \
'third_party/s2cellid' \
'third_party/securemessage' \
'third_party/shell-encryption' \
'third_party/simplejson' \
'third_party/sinonjs' \
'third_party/six' \
'third_party/skia' \
'third_party/skia/include/third_party/skcms' \
'third_party/skia/include/third_party/vulkan' \
'third_party/skia/third_party/skcms' \
'third_party/skia/third_party/vulkan' \
'third_party/smhasher' \
'third_party/snappy' \
'third_party/speech-dispatcher' \
'third_party/sqlite' \
'third_party/swiftshader' \
'third_party/swiftshader/third_party/astc-encoder' \
'third_party/swiftshader/third_party/llvm-subzero' \
'third_party/swiftshader/third_party/llvm-10.0' \
'third_party/swiftshader/third_party/marl' \
'third_party/swiftshader/third_party/subzero' \
'third_party/swiftshader/third_party/SPIRV-Headers' \
'third_party/tcmalloc' \
'third_party/tensorflow-text' \
'third_party/test_fonts' \
'third_party/tflite' \
'third_party/tflite/src/third_party/eigen3' \
'third_party/tflite/src/third_party/fft2d' \
'third_party/tflite_support' \
'third_party/ukey2' \
'third_party/usb_ids' \
'third_party/usrsctp' \
'third_party/utf' \
'third_party/vulkan' \
'third_party/wayland' \
'third_party/web-animations-js' \
'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/widevine' \
'third_party/woff2' \
'third_party/wuffs' \
'third_party/x11proto' \
'third_party/xcbproto' \
'third_party/xdg-utils' \
'third_party/zxcvbn-cpp' \
'third_party/zlib' \
'third_party/zlib/google' \
'tools/gn/src/base/third_party/icu' \
'url/third_party/mozilla' \
'v8/src/third_party/siphash' \
'v8/src/third_party/utf8-decoder' \
'v8/src/third_party/valgrind' \
'v8/third_party/v8' \
'v8/third_party/inspector_protocol' \
--do-remove
export PATH=$PATH:%{_builddir}/depot_tools
build/linux/unbundle/replace_gn_files.py --system-libraries \
%if 0%{?bundlefontconfig}
%else
fontconfig \
%endif
%if 0%{?bundlefreetype}
%else
freetype \
%endif
%if 0%{?bundleharfbuzz}
%else
harfbuzz-ng \
%endif
%if 0%{?bundleicu}
%else
icu \
%endif
%if %{bundlelibdrm}
%else
libdrm \
%endif
%if %{bundlelibjpeg}
%else
libjpeg \
%endif
%if %{bundlelibpng}
%else
libpng \
%endif
%if %{bundlelibusbx}
%else
libusb \
%endif
%if %{bundlelibwebp}
%else
libwebp \
%endif
%if %{bundlelibxml}
%else
libxml \
%endif
libxslt \
%if %{bundleopus}
%else
opus \
%endif
%if 0%{?bundlere2}
%else
re2 \
%endif
%if 0%{?bundleminizip}
%else
zlib \
%endif
flac
# fix arm gcc
sed -i 's|arm-linux-gnueabihf-|arm-linux-gnu-|g' build/toolchain/linux/BUILD.gn
%ifarch aarch64
# We don't need to cross compile while building on an aarch64 system.
sed -i 's|aarch64-linux-gnu-||g' build/toolchain/linux/BUILD.gn
# Correct the ninja file to check for aarch64, not just x86.
sed -i '/${LONG_BIT}/ a \ aarch64)\' ../depot_tools/ninja
sed -i '/aarch64)/ a \ exec "/usr/bin/ninja-build" "[email protected]";;\' ../depot_tools/ninja
%endif
sed -i 's|exec "${THIS_DIR}/ninja-linux${LONG_BIT}"|exec "/usr/bin/ninja-build"|g' ../depot_tools/ninja
# 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 the Fedora copy
ln -s %{_bindir}/eu-strip buildtools/third_party/eu-strip/bin/eu-strip
# Check that there is no system 'google' module, shadowing bundled ones:
%if 0%{?build_with_python3}
if python3 -c 'import google ; print google.__path__' 2> /dev/null ; then \
echo "Python 3 'google' module is defined, this will shadow modules of this build"; \
%else
if python2 -c 'import google ; print google.__path__' 2> /dev/null ; then \
echo "Python 2 'google' module is defined, this will shadow modules of this build"; \
%endif
exit 1 ; \
fi
# ungoogled-chromium: patches
python3 -B %{ungoogled_chromium_root}/utils/patches.py apply . %{ungoogled_chromium_root}/patches
# ungoogled-chromium: domain substitution
%if %{with domain_substitution}
rm -f %{_builddir}/dsc.tar.gz
python3 -B %{ungoogled_chromium_root}/utils/domain_substitution.py apply . \
-r %{ungoogled_chromium_root}/domain_regex.list \
-f %{ungoogled_chromium_root}/domain_substitution.list \
-c %{_builddir}/dsc.tar.gz
%endif
tools/gn/bootstrap/bootstrap.py --gn-gen-args="$UNGOOGLED_CHROMIUM_GN_DEFINES"
%{builddir}/gn --script-executable=%{chromium_pybin} gen --args="$UNGOOGLED_CHROMIUM_GN_DEFINES" %{builddir}
%if %{bundlelibusbx}
# no hackity hack hack
%else
# hackity hack hack
rm -rf third_party/libusb/src/libusb/libusb.h
# we _shouldn't need to do this, but it looks like we do.
cp -a %{_includedir}/libusb-1.0/libusb.h third_party/libusb/src/libusb/libusb.h
%endif
# Hard code extra version
FILE=chrome/common/channel_info_posix.cc
sed -i.orig -e 's/getenv("CHROME_VERSION_EXTRA")/"Ungoogled Chromium"/' $FILE
%build
# Turning the buildsystem up to 11.
ulimit -n 4096
# unpack a local copy of the xcb-proto bits
tar xf %{SOURCE20}
# export PYTHONPATH="../../third_party/pyjson5/src:../../third_party/catapult/third_party/google-endpoints:../../xcb-proto-1.14"
export PYTHONPATH="../../third_party/pyjson5/src:../../xcb-proto-1.14:../../third_party/catapult/third_party/html5lib-1.1"
echo
# Now do the full browser
%build_target %{builddir} chrome
%build_target %{builddir} chrome_sandbox
%build_target %{builddir} chromedriver
%if %{build_clear_key_cdm}
%build_target %{builddir} clear_key_cdm
%endif
%build_target %{builddir} policy_templates
# bug #827861, vk_swiftshader_icd.json not getting properly installed in out/Release
sed -e 's|${ICD_LIBRARY_PATH}|./libvk_swiftshader.so|g' third_party/swiftshader/src/Vulkan/vk_swiftshader_icd.json.tmpl > out/Release/vk_swiftshader_icd.json
%install
rm -rf %{buildroot}
mkdir -p %{buildroot}%{_bindir}
mkdir -p %{buildroot}%{chromium_path}
cp -a %{SOURCE3} %{buildroot}%{chromium_path}/%{chromium_browser_channel}.sh
export BUILD_TARGET=`cat /etc/redhat-release`
export CHROMIUM_PATH=%{chromium_path}
export CHROMIUM_BROWSER_CHANNEL=%{chromium_browser_channel}
sed -i "s|@@[email protected]@|$BUILD_TARGET|g" %{buildroot}%{chromium_path}/%{chromium_browser_channel}.sh
sed -i "s|@@[email protected]@|$CHROMIUM_PATH|g" %{buildroot}%{chromium_path}/%{chromium_browser_channel}.sh
sed -i "s|@@[email protected]@|$CHROMIUM_BROWSER_CHANNEL|g" %{buildroot}%{chromium_path}/%{chromium_browser_channel}.sh
%if "%{chromium_channel}" == "%{nil}"
sed -i "s|@@[email protected]@||g" %{buildroot}%{chromium_path}/%{chromium_browser_channel}.sh
%else
# Enable debug outputs for beta and dev channels
export EXTRA_FLAGS="--enable-logging=stderr --v=2"
sed -i "s|@@[email protected]@|$EXTRA_FLAGS|g" %{buildroot}%{chromium_path}/%{chromium_browser_channel}.sh
%endif
ln -s %{chromium_path}/%{chromium_browser_channel}.sh %{buildroot}%{_bindir}/%{chromium_browser_channel}
mkdir -p %{buildroot}%{_mandir}/man1/
pushd %{builddir}
cp -a *.pak locales resources icudtl.dat %{buildroot}%{chromium_path}
%ifarch x86_64 i686 aarch64
cp -a swiftshader %{buildroot}%{chromium_path}
cp -a libvk_swiftshader.so* %{buildroot}%{chromium_path}
cp -a libvulkan.so* %{buildroot}%{chromium_path}
cp -a vk_swiftshader_icd.json %{buildroot}%{chromium_path}
%endif
cp -a chrome %{buildroot}%{chromium_path}/%{chromium_browser_channel}
cp -a chrome_sandbox %{buildroot}%{chromium_path}/chrome-sandbox
cp -a chrome_crashpad_handler %{buildroot}%{chromium_path}/chrome_crashpad_handler
cp -a ../../chrome/app/resources/manpage.1.in %{buildroot}%{_mandir}/man1/%{chromium_browser_channel}.1
sed -i "s|@@[email protected]@|%{chromium_browser_channel}|g" %{buildroot}%{_mandir}/man1/%{chromium_browser_channel}.1
sed -i "s|@@[email protected]@|%{chromium_menu_name}|g" %{buildroot}%{_mandir}/man1/%{chromium_browser_channel}.1
# V8 initial snapshots
# https://code.google.com/p/chromium/issues/detail?id=421063
cp -a snapshot_blob.bin %{buildroot}%{chromium_path}
cp -a v8_context_snapshot.bin %{buildroot}%{chromium_path}
cp -a xdg-mime xdg-settings %{buildroot}%{chromium_path}
# This is ANGLE, not to be confused with the similarly named files under swiftshader/
cp -a libEGL.so* libGLESv2.so* %{buildroot}%{chromium_path}
%if %{build_clear_key_cdm}
%ifarch i686
cp -a ClearKeyCdm/_platform_specific/linux_x86/libclearkeycdm.so %{buildroot}%{chromium_path}
%else
%ifarch x86_64
cp -a ClearKeyCdm/_platform_specific/linux_x64/libclearkeycdm.so %{buildroot}%{chromium_path}
%else
%ifarch aarch64
cp -a ClearKeyCdm/_platform_specific/linux_arm64/libclearkeycdm.so %{buildroot}%{chromium_path}
%else
cp -a libclearkeycdm.so %{buildroot}%{chromium_path}
%endif
%endif
%endif
%endif
# chromedriver
cp -a chromedriver %{buildroot}%{chromium_path}/chromedriver
ln -s %{chromium_path}/chromedriver %{buildroot}%{_bindir}/chromedriver
popd
# Add directories for policy management
mkdir -p %{buildroot}%{_sysconfdir}/chromium/policies/managed
mkdir -p %{buildroot}%{_sysconfdir}/chromium/policies/recommended
cp -a out/Release/gen/chrome/app/policy/common/html/en-US/*.html .
cp -a out/Release/gen/chrome/app/policy/linux/examples/chrome.json .
mkdir -p %{buildroot}%{_datadir}/icons/hicolor/256x256/apps
cp -a chrome/app/theme/chromium/product_logo_256.png %{buildroot}%{_datadir}/icons/hicolor/256x256/apps/%{chromium_browser_channel}.png
mkdir -p %{buildroot}%{_datadir}/icons/hicolor/128x128/apps
cp -a chrome/app/theme/chromium/product_logo_128.png %{buildroot}%{_datadir}/icons/hicolor/128x128/apps/%{chromium_browser_channel}.png
mkdir -p %{buildroot}%{_datadir}/icons/hicolor/64x64/apps
cp -a chrome/app/theme/chromium/product_logo_64.png %{buildroot}%{_datadir}/icons/hicolor/64x64/apps/%{chromium_browser_channel}.png
mkdir -p %{buildroot}%{_datadir}/icons/hicolor/48x48/apps
cp -a chrome/app/theme/chromium/product_logo_48.png %{buildroot}%{_datadir}/icons/hicolor/48x48/apps/%{chromium_browser_channel}.png
mkdir -p %{buildroot}%{_datadir}/icons/hicolor/24x24/apps
cp -a chrome/app/theme/chromium/product_logo_24.png %{buildroot}%{_datadir}/icons/hicolor/24x24/apps/%{chromium_browser_channel}.png
# Install the master_preferences file
mkdir -p %{buildroot}%{_sysconfdir}/%{name}
install -m 0644 %{SOURCE13} %{buildroot}%{_sysconfdir}/%{name}/
mkdir -p %{buildroot}%{_datadir}/applications/
desktop-file-install --dir %{buildroot}%{_datadir}/applications %{SOURCE4}
install -D -m0644 %{SOURCE22} ${RPM_BUILD_ROOT}%{_datadir}/metainfo/%{chromium_browser_channel}.appdata.xml
appstream-util validate-relax --nonet ${RPM_BUILD_ROOT}%{_datadir}/metainfo/%{chromium_browser_channel}.appdata.xml
mkdir -p %{buildroot}%{_datadir}/gnome-control-center/default-apps/
cp -a %{SOURCE9} %{buildroot}%{_datadir}/gnome-control-center/default-apps/
%post
# Set SELinux labels - semanage itself will adjust the lib directory naming
# But only do it when selinux is enabled, otherwise, it gets noisy.
if selinuxenabled; then
semanage fcontext -a -t bin_t /usr/lib/%{chromium_browser_channel} &>/dev/null || :
semanage fcontext -a -t bin_t /usr/lib/%{chromium_browser_channel}/%{chromium_browser_channel}.sh &>/dev/null || :
semanage fcontext -a -t chrome_sandbox_exec_t /usr/lib/chrome-sandbox &>/dev/null || :
restorecon -R -v %{chromium_path}/%{chromium_browser_channel} &>/dev/null || :
fi
%files
%doc AUTHORS
%doc chrome_policy_list.html *.json
%license LICENSE
%config %{_sysconfdir}/%{name}/
# %%dir %%{_sysconfdir}/%%{name}/native-messaging-hosts
%{_bindir}/%{chromium_browser_channel}
%dir %{chromium_path}
%{chromium_path}/*.bin
%{chromium_path}/chrome_*.pak
%{chromium_path}/chrome_crashpad_handler
%{chromium_path}/resources.pak
%{chromium_path}/icudtl.dat
%{chromium_path}/%{chromium_browser_channel}
%attr(0755, root, root) %{chromium_path}/%{chromium_browser_channel}.sh
%{chromium_path}/libEGL.so*
%{chromium_path}/libGLESv2.so*
%ifarch x86_64 i686 aarch64
%{chromium_path}/swiftshader/
%endif
%attr(4755, root, root) %{chromium_path}/chrome-sandbox
%{chromium_path}/xdg-mime
%{chromium_path}/xdg-settings
%{_mandir}/man1/%{chromium_browser_channel}.*
%{_datadir}/icons/hicolor/*/apps/%{chromium_browser_channel}.png
%{_datadir}/applications/*.desktop
%{_datadir}/metainfo/*.appdata.xml
%{_datadir}/gnome-control-center/default-apps/ungoogled-chromium.xml
%{chromium_path}/headless_*.pak
%if %{build_clear_key_cdm}
%{chromium_path}/libclearkeycdm.so
%endif
%{chromium_path}/resources/
%ifarch x86_64 i686 aarch64
%{chromium_path}/swiftshader/
%{chromium_path}/libvk_swiftshader.so*
%{chromium_path}/libvulkan.so*
%{chromium_path}/vk_swiftshader_icd.json
%endif
%dir %{chromium_path}/locales/
%lang(am) %{chromium_path}/locales/am.pak*
%lang(ar) %{chromium_path}/locales/ar.pak*
%lang(bg) %{chromium_path}/locales/bg.pak*
%lang(bn) %{chromium_path}/locales/bn.pak*
%lang(ca) %{chromium_path}/locales/ca.pak*
%lang(cs) %{chromium_path}/locales/cs.pak*
%lang(da) %{chromium_path}/locales/da.pak*
%lang(de) %{chromium_path}/locales/de.pak*
%lang(el) %{chromium_path}/locales/el.pak*
%lang(en_GB) %{chromium_path}/locales/en-GB.pak*
# Chromium _ALWAYS_ needs en-US.pak as a fallback
# This means we cannot apply the lang code here.
# Otherwise, it is filtered out on install.
%{chromium_path}/locales/en-US.pak*
%lang(es) %{chromium_path}/locales/es.pak*
%lang(es) %{chromium_path}/locales/es-419.pak*
%lang(et) %{chromium_path}/locales/et.pak*
%lang(fa) %{chromium_path}/locales/fa.pak*
%lang(fi) %{chromium_path}/locales/fi.pak*
%lang(fil) %{chromium_path}/locales/fil.pak*
%lang(fr) %{chromium_path}/locales/fr.pak*
%lang(gu) %{chromium_path}/locales/gu.pak*
%lang(he) %{chromium_path}/locales/he.pak*
%lang(hi) %{chromium_path}/locales/hi.pak*
%lang(hr) %{chromium_path}/locales/hr.pak*
%lang(hu) %{chromium_path}/locales/hu.pak*
%lang(id) %{chromium_path}/locales/id.pak*
%lang(it) %{chromium_path}/locales/it.pak*
%lang(ja) %{chromium_path}/locales/ja.pak*
%lang(kn) %{chromium_path}/locales/kn.pak*
%lang(ko) %{chromium_path}/locales/ko.pak*
%lang(lt) %{chromium_path}/locales/lt.pak*
%lang(lv) %{chromium_path}/locales/lv.pak*
%lang(ml) %{chromium_path}/locales/ml.pak*
%lang(mr) %{chromium_path}/locales/mr.pak*
%lang(ms) %{chromium_path}/locales/ms.pak*
%lang(nb) %{chromium_path}/locales/nb.pak*
%lang(nl) %{chromium_path}/locales/nl.pak*
%lang(pl) %{chromium_path}/locales/pl.pak*
%lang(pt_BR) %{chromium_path}/locales/pt-BR.pak*
%lang(pt_PT) %{chromium_path}/locales/pt-PT.pak*
%lang(ro) %{chromium_path}/locales/ro.pak*
%lang(ru) %{chromium_path}/locales/ru.pak*
%lang(sk) %{chromium_path}/locales/sk.pak*
%lang(sl) %{chromium_path}/locales/sl.pak*
%lang(sr) %{chromium_path}/locales/sr.pak*
%lang(sv) %{chromium_path}/locales/sv.pak*
%lang(sw) %{chromium_path}/locales/sw.pak*
%lang(ta) %{chromium_path}/locales/ta.pak*
%lang(te) %{chromium_path}/locales/te.pak*
%lang(th) %{chromium_path}/locales/th.pak*
%lang(tr) %{chromium_path}/locales/tr.pak*
%lang(uk) %{chromium_path}/locales/uk.pak*
%lang(vi) %{chromium_path}/locales/vi.pak*
%lang(zh_CN) %{chromium_path}/locales/zh-CN.pak*
%lang(zh_TW) %{chromium_path}/locales/zh-TW.pak*
# These are psuedolocales, not real ones.
# They only get generated when is_official_build=false
%if !%{official_build}
%{chromium_path}/locales/ar-XB.pak*
%{chromium_path}/locales/en-XA.pak*
%endif
%{_bindir}/chromedriver
%{chromium_path}/chromedriver
%changelog
* Sun Feb 13 2022 wchen342 <[email protected]> - 98.0.4758.80-1
- update Chromium to 98.0.4758.80
* Tue Dec 14 2021 wchen342 <[email protected]> - 96.0.4664.110-1
- update Chromium to 96.0.4664.110
- Enable PGO
* Sat Dec 11 2021 wchen342 <[email protected]> - 96.0.4664.93-1
- update Chromium to 96.0.4664.93
* Thu Nov 18 2021 wchen342 <[email protected]> - 96.0.4664.45-1
- update Chromium to 96.0.4664.45
* Thu Nov 11 2021 wchen342 <[email protected]> - 95.0.4638.69-1
- update Chromium to 95.0.4638.69
- Use clang instead of gcc
- Enable CFI
* Fri Oct 8 2021 wchen342 <[email protected]> - 94.0.4606.81-1
- update Chromium to 94.0.4606.81
* Fri Oct 1 2021 wchen342 <[email protected]> - 94.0.4606.71-1
- update Chromium to 94.0.4606.71
* Tue Sep 28 2021 wchen342 <[email protected]> - 94.0.4606.61-1
- update Chromium to 94.0.4606.61
* Wed Sep 22 2021 wchen342 <[email protected]> - 93.0.4577.82-1
- update Chromium to 93.0.4577.82
* Sat Sep 4 2021 wchen342 <[email protected]> - 93.0.4577.63-1
- update Chromium to 93.0.4577.63
* Mon Aug 9 2021 wchen342 <[email protected]> - 92.0.4515.131-1
- update Chromium to 92.0.4515.131
* Fri Jul 16 2021 wchen342 <[email protected]> - 91.0.4472.164-1
- update Chromium to 91.0.4472.164
* Sat Jul 10 2021 wchen342 <[email protected]> - 91.0.4472.114-2
- Fedora upstream update
* Sat Jun 12 2021 wchen342 <[email protected]> - 91.0.4472.114-1
- update Chromium to 91.0.4472.114
* Sat Jun 12 2021 wchen342 <[email protected]> - 91.0.4472.101-1
- update Chromium to 91.0.4472.101
* Sun Jun 6 2021 wchen342 <[email protected]> - 91.0.4472.77-1
- update Chromium to 91.0.4472.77
* Thu May 13 2021 wchen342 <[email protected]> - 90.0.4430.212-1
- update Chromium to 90.0.4430.212
* Sun May 2 2021 wchen342 <[email protected]> - 90.0.4430.93-1
- update Chromium to 90.0.4430.93
* Thu Apr 1 2021 wchen342 <[email protected]> - 89.0.4389.114-1
- Update Chromium to 89.0.4389.114
* Tue Mar 9 2021 wchen342 <[email protected]> - 89.0.4389.82-1
- Update Chromium to 89.0.4389.82
* Sun Mar 7 2021 wchen342 <[email protected]> - 89.0.4389.72-1
- Update Chromium to 89.0.4389.72
* Fri Feb 19 2021 wchen342 <[email protected]> - 88.0.4324.182-1
- Update Chromium to 88.0.4234.182
* Fri Feb 05 2021 wchen342 <[email protected]> - 88.0.4324.150-1
- Update Chromium to 88.0.4324.150
* Wed Feb 03 2021 wchen342 <[email protected]> - 88.0.4324.146-1
- Update Chromium to 88.0.4324.146
- Update ungoogled-chromium to 88.0.4324.146-1
* Fri Jan 29 2021 wchen342 <[email protected]> - 88.0.4324.104-1
- Update Chromium to 88.0.4324.104
- Update ungoogled-chromium to 88.0.4324.104-1
* Fri Jan 1 2021 wchen342 <[email protected]> - 87.0.4280.141-1
- Update Chromium to 87.0.4280.141
- Update ungoogled-chromium to 87.0.4280.141-1
- Add back RHEL (CentOS) support
* Wed Dec 09 2020 wchen342 <[email protected]> - 87.0.4280.88-1
- Update Chromium to 87.0.4280.88
- Update ungoogled-chromium to 87.0.4280.88-1
- Rewrite spec file with Fedora Chromium source
* Mon Sep 14 2020 qvint <[email protected]> - 85.0.4183.102-1
- Update Chromium to 85.0.4183.102
- Update ungoogled-chromium to 85.0.4183.102-1
- Add domain_substitution switch
- Fix manpage and desktop metadata files
- Update AppStream metadata
* Thu Aug 13 2020 qvint <[email protected]> - 84.0.4147.125-1
- Update Chromium to 84.0.4147.125
- Update ungoogled-chromium to 84.0.4147.125-1
* Sat Jul 18 2020 qvint <[email protected]> - 84.0.4147.89-1
- Update Chromium to 84.0.4147.89
- Update ungoogled-chromium to 84.0.4147.89-1
* Sat Jun 27 2020 qvint <[email protected]> - 83.0.4103.116-1
- Update Chromium to 83.0.4103.116
- Update ungoogled-chromium to 83.0.4103.116-1
- Try alternative locations for the Widevine CDM library
* Wed May 06 2020 qvint <[email protected]> - 81.0.4044.138-1
- Update Chromium to 81.0.4044.138
- Update ungoogled-chromium to 38e86b5
* Thu Apr 30 2020 qvint <[email protected]> - 81.0.4044.129-1
- Update Chromium to 81.0.4044.129
- Update ungoogled-chromium to 81.0.4044.129-1
* Fri Apr 10 2020 qvint <[email protected]> - 81.0.4044.92-1
- Update Chromium to 81.0.4044.92
- Update ungoogled-chromium to 209e24b
* Thu Feb 27 2020 qvint <[email protected]> - 80.0.3987.122-1
- Update Chromium to 80.0.3987.122
- Update ungoogled-chromium to 80.0.3987.122-1
* Tue Feb 04 2020 RPM Fusion Release Engineering <[email protected]> - 79.0.3945.130-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
* Fri Jan 17 2020 qvint <[email protected]> - 79.0.3945.130-1
- Update Chromium to 79.0.3945.130
- Update ungoogled-chromium to 79.0.3945.130-1
* Wed Jan 08 2020 qvint <[email protected]> - 79.0.3945.117-1
- Update Chromium to 79.0.3945.117
- Update ungoogled-chromium to 79.0.3945.117-1
* Wed Dec 18 2019 qvint <[email protected]> - 79.0.3945.88-1
- Update Chromium to 79.0.3945.88
- Update ungoogled-chromium to 7ddfefb
- Sync spec and sources with free/chromium-freeworld (e472355)
* Tue Nov 19 2019 qvint <[email protected]> - 78.0.3904.108-1
- Update Chromium to 78.0.3904.108
- Update ungoogled-chromium to 0529d60
* Thu Nov 07 2019 qvint <[email protected]> - 78.0.3904.97-1
- Update Chromium to 78.0.3904.97
- Update ungoogled-chromium to 6894e44
* Sat Nov 02 2019 qvint <[email protected]> - 78.0.3904.87-1
- Update Chromium to 78.0.3904.87
- Update ungoogled-chromium to 78.0.3904.87-1
- Disable debuginfo to match fedora chromium
* Fri Nov 01 2019 qvint <[email protected]> - 78.0.3904.70-1
- Update Chromium to 78.0.3904.70
- Update ungoogled-chromium to 78.0.3904.70-1
* Mon Oct 14 2019 qvint <[email protected]> - 77.0.3865.120-1
- Update Chromium to 77.0.3865.120
- Update ungoogled-chromium to 99b98c5
* Wed Sep 25 2019 qvint <[email protected]> - 77.0.3865.90-1
- Update Chromium to 77.0.3865.90
- Update ungoogled-chromium to 77.0.3865.90-1
- Disabled Nvidia support
- Use the bundled python2 as python2 is going to be removed from Fedora
* Mon Sep 23 2019 qvint <[email protected]> - 76.0.3809.132-1
- Initial version based on Akarshan Biswas' <[email protected]g> work