chromium-browser-stable/chromium-browser-stable.spec

553 lines
18 KiB
RPMSpec

# This spec file is based on other spec files, ebuilds, PKGBUILDs available from
# [1] https://repos.fedorapeople.org/repos/spot/chromium/
# [2] https://copr.fedoraproject.org/coprs/churchyard/chromium-russianfedora-tested/
# [3] https://www.archlinux.org/packages/extra/x86_64/chromium/
# [4] https://src.fedoraproject.org/rpms/chromium/
# [5] https://gitweb.gentoo.org/repo/gentoo.git/tree/www-client/chromium/
# [6] https://svnweb.freebsd.org/ports/head/www/chromium/Makefile?view=markup
# [7] https://packages.altlinux.org/ru/Sisyphus/srpms/chromium/spec
# [8] https://build.opensuse.org/package/show/network:chromium/chromium
# [9] https://packages.ubuntu.com/search?keywords=chromium-browser
# Get the version number of latest stable version
# $ curl -s 'https://omahaproxy.appspot.com/all?os=linux&channel=stable' | sed 1d | cut -d , -f 3
%global _build_pkgcheck_set %{nil}
# eol 'fix' corrupts some .bin
%define dont_fix_eol 1
%define _disable_lto 1
%define crname chromium-browser
%define _crdir %{_libdir}/%{crname}
%define _src %{_topdir}/SOURCES
%define chromium_system_libs 1
%define ffmpeg 1
%define icu 0
%define libva 1
%define clang 1
%define jsoncpp 0
# Set up Google API keys, see http://www.chromium.org/developers/how-tos/api-keys
# Note: these are for Mageia use ONLY.
# For your own builds, please get your own set of keys.
%define google_api_key AIzaSyDhhIHB_kQZodiWr8yDAm8E3GwEyiXmuDU
%define google_default_client_id 1039996407057-q599ngv7i6ni4sbkd2fsns30246r9s9v.apps.googleusercontent.com
%define google_default_client_secret mRHXPjlS4cLpp1beCiXoYbLZ
Summary: A fast web browser based on the Blink engine
Name: chromium-browser-stable
Version: 69.0.3497.100
Release: 4
License: BSD, LGPL
Group: Networking/WWW
Url: https://www.chromium.org/Home
Source0: https://commondatastorage.googleapis.com/chromium-browser-official/chromium-%{version}.tar.xz
Source1: chromium-wrapper
Source2: chromium-browser.desktop
# Setup toolchain for rosa builds, from gentoo
# https://gitweb.gentoo.org/repo/gentoo.git/plain/www-client/chromium/files/toolchain/BUILD.gn
Source5: BUILD.gn
Source10: %{name}.rpmlintrc
Source30: master_preferences
Source31: default_bookmarks.html
Source32: chromium.default
Source100: icons.tar.bz2
Source997: depot_tools.tar.xz
Source999: new-system-icons.tar.xz
Patch4: chromium-30.0.1599.66-master-prefs-path.patch
Patch22: chromium-54-proprietary-codecs-assert.patch
%if 0%{jsoncpp}
# (cjw) add missing unbundle gn files (1)
Patch28: chromium-53-gn-system-icu-jsoncpp.patch
%endif
# (cjw) Recognize mimetypes for matroska (.mkv) and AVI (.avi) formats (video/x-matroska and audio/x-matroska, video/x-msvideo) + handle A52 "AC3" and DTS compressed audio.
Patch32: chromium-55-extra-media.patch
# (cjw) fix webrtc build with system ffmpeg
Patch35: chromium-50-system-ffmpeg-3.patch
# (cjw) fix build with current glib...
Patch36: chromium-58-glib.patch
# New from Debian
Patch500: chromium-third-party-cookies-off-by-default.patch
Patch501: chromium-ps-print.patch
# Google patched their bundled copy of icu 54 to include API functionality that wasn't added until 55.
# :P
Patch502: chromium-45.0.2454.101-system-icu-54-does-not-have-detectHostTimeZone.patch
# fix build with icu other than 54
Patch504: chromium-system-icu-r0.patch
# https://aur.archlinux.org/packages/chromium-vaapi/
# https://github.com/saiarcot895/chromium-ubuntu-build
Patch508: chromium-vaapi-r20.patch
Patch509: chromium-widevine-r2.patch
# ROSA Build
Patch600: chromium-buildname-60.0.3112.90.patch
# Patch to fix build
Patch601: chromium-62-include-cstdlib.patch
Patch605: chromium-ffmpeg-ebp-r1.patch
# Add "ROSA" to the user agent string
Patch627: chromium-68.0.3440.106-rosa-user-agent.patch
# From https://salsa.debian.org/chromium-team/chromium/tree/master/debian/patches
Patch710: Debian-Fixes-gpu-timeout.patch
# https://build.opensuse.org/package/show/network:chromium/chromium
Patch720: openSUSE-Compile-the-sandbox-with-fPIE-settings.patch
# https://packages.altlinux.org/ru/Sisyphus/srpms/chromium/patches
Patch730: ALT-allow-to-override-clang-through-env-variables.patch
Patch731: ALT-allow-_FORTIFY_SOURCE-for-clang.patch
Patch732: FEDORA-Fix-memcpy.patch
Patch733: FEDORA-Fix-issue-where-timespec-is-not-defined-when-.patch
Patch744: UBUNTU-define__libc_malloc.patch
Patch745: UBUNTU-add-missing-cstddef-include.patch
Patch746: UBUNTU-set-rpath-on-chromium-executables.patch
Patch747: UBUNTU-suppress-newer-clang-warning-flags.patch
Patch748: UBUNTU-enable-chromecast-by-default.patch
Patch749: FEDORA-Fix-gcc-round.patch
Patch750: UBUNTU-fix-extra-arflags.patch
Patch751: UBUNTU-touch-v35.patch
Patch752: UBUNTU-revert-Xclang-instcombine-lower-dbg-declare.patch
Provides: %{crname} = %{EVRD}
Conflicts: chromium-browser-unstable
Conflicts: chromium-browser-beta
Obsoletes: chromium-browser < 1:9.0.597.94
BuildRequires: bison
%if 0%{?clang}
BuildRequires: clang
BuildRequires: lld
BuildRequires: libcxx-devel
BuildRequires: libcxxabi-devel
%endif
# gn needs these
BuildRequires: libstdc++-static-devel
BuildRequires: libstdc++-devel
BuildRequires: flex
BuildRequires: git
BuildRequires: gperf
BuildRequires: gyp
BuildRequires: ninja
BuildRequires: nodejs >= 6.7.0
BuildRequires: util-linux
BuildRequires: yasm
BuildRequires: atomic-devel
BuildRequires: bzip2-devel
BuildRequires: cap-devel
BuildRequires: cups-devel
BuildRequires: elfutils-devel
BuildRequires: jpeg-devel
%if 0%{jsoncpp}
BuildRequires: jsoncpp-devel
%endif
BuildRequires: pam-devel
BuildRequires: snappy-devel
BuildRequires: speech-dispatcher-devel
BuildRequires: pkgconfig(alsa)
BuildRequires: pkgconfig(atk)
BuildRequires: pkgconfig(dbus-glib-1)
BuildRequires: pkgconfig(expat)
%if 0%{?ffmpeg}
BuildRequires: pkgconfig(libavcodec) >= 4.0.2
%endif
BuildRequires: pkgconfig(flac)
BuildRequires: pkgconfig(fontconfig)
BuildRequires: pkgconfig(freetype2)
BuildRequires: pkgconfig(gconf-2.0)
BuildRequires: pkgconfig(gl)
BuildRequires: pkgconfig(glib-2.0)
BuildRequires: pkgconfig(glu)
BuildRequires: pkgconfig(gnome-keyring-1)
BuildRequires: pkgconfig(gstreamer-plugins-base-1.0)
BuildRequires: pkgconfig(gtk+-2.0)
BuildRequires: pkgconfig(gtk+-3.0)
BuildRequires: pkgconfig(harfbuzz)
%if 0%{icu}
BuildRequires: pkgconfig(icu-i18n)
%endif
BuildRequires: pkgconfig(libexif)
BuildRequires: pkgconfig(libgcrypt)
BuildRequires: pkgconfig(libgpsd)
BuildRequires: pkgconfig(libmtp)
BuildRequires: pkgconfig(libopenjp2)
BuildRequires: pkgconfig(libpci)
BuildRequires: pkgconfig(libpng)
BuildRequires: pkgconfig(libpulse)
BuildRequires: pkgconfig(libtiff-4)
BuildRequires: pkgconfig(libusb-1.0)
BuildRequires: pkgconfig(libxml-2.0)
BuildRequires: pkgconfig(libxslt)
%if 0%{?libva}
BuildRequires: pkgconfig(libva)
%endif
BuildRequires: pkgconfig(minizip)
BuildRequires: pkgconfig(nspr)
BuildRequires: pkgconfig(nss)
BuildRequires: pkgconfig(opus)
BuildRequires: pkgconfig(speex)
BuildRequires: pkgconfig(udev)
BuildRequires: pkgconfig(xscrnsaver)
BuildRequires: pkgconfig(xt)
BuildRequires: pkgconfig(xtst)
BuildRequires: pkgconfig(zlib)
#BuildRequires: pkgconfig(vpx)
BuildRequires: pkgconfig(krb5-gssapi)
BuildRequires: pythonegg(beautifulsoup4)
BuildRequires: pythonegg(html5lib)
Suggests: chromium-browser-pepper-flash
Conflicts: chromium-widevinecdm-plugin < 54
Obsoletes: chromium-widevinecdm-plugin < 54
Conflicts: chromium-browser-beta
Conflicts: chromium-browser-unstable
Obsoletes: chromium-browser < 1:9.0.597.94
Obsoletes: chromium-browser-pdf-plugin < 17.0.0.169
Provides: %{crname} = %{EVRD}
ExclusiveArch: %{ix86} x86_64 armv7l
%description
Chromium is a browser that combines a minimal design with sophisticated
technology to make the web faster, safer, and easier.
This is the stable channel Chromium browser. It offers a rock solid
browser which is updated with features and fixes once they have been
thoroughly tested.
Note: If you are reverting from unstable to stable or beta channel, you may
experience tab crashes on startup. This crash only affects tabs restored
during the first launch due to a change in how tab state is stored.
See http://bugs.chromium.org/34688. It's always a good idea to back up
your profile before changing channels.
%files
%config %{_sysconfdir}/%{crname}
%config %{_sysconfdir}/default/%{crname}
%{_bindir}/%{crname}
%{_crdir}/chromium-wrapper
%{_crdir}/chrome
%{_crdir}/chrome-sandbox
%{_crdir}/icudtl.dat
%{_crdir}/locales
%{_crdir}/*.pak
%{_crdir}/resources
%{_crdir}/themes
%{_crdir}/default_apps
%{_crdir}/swiftshader
%dir %{_crdir}/pepper
%{_datadir}/applications/*.desktop
%{_iconsdir}/hicolor/*/apps/chromium*
%post
# Remove chromium-browser-install package if we have it installed
if [ `rpm -q chromium-browser-install | wc -w` == 1 ]
then
rpm -e chromium-browser-install
fi
#----------------------------------------------------------------------------
%package -n chromium-browser
Summary: A fast web browser based on the Blink engine
Epoch: 1
Group: Networking/WWW
# No %%{EVRD}
Requires: %{name} = %{version}-%{release}
%description -n chromium-browser
Chromium is a browser that combines a minimal design with sophisticated
technology to make the web faster, safer, and easier.
This is a transition package that installs the stable channel Chromium
browser. If you prefer the dev channel browser, install the
chromium-browser-unstable package instead.
%files -n chromium-browser
#----------------------------------------------------------------------------
%package -n chromedriver
Summary: WebDriver for Google Chrome/Chromium
Group: Development/Other
# No %%{EVRD}
Requires: %{name} = %{version}-%{release}
%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.
%files -n chromedriver
%doc LICENSE AUTHORS
%{_bindir}/chromedriver
%{_crdir}/chromedriver
#----------------------------------------------------------------------------
%prep
%setup -qn chromium-%{version} -a 997 -a 999
%patch4 -p1 -b .prefs
%patch22 -p1
%if 0%{jsoncpp}
%patch28 -p1
%endif
%patch32 -p1
%if 0%{?ffmpeg}
%patch35 -p1
%endif
%patch36 -p1
%if 0%{icu}
%patch502 -p1 -b .system-icu
%patch504 -p0 -b .icu-ver
%endif
%if 0%{?libva}
%patch508 -p1 -b .vaapi
%endif
%patch500 -p1
%patch501 -p1
%patch509 -p1
%patch600 -p1
%patch601 -p1
%patch605 -p1
%patch627 -p1
%patch710 -p1
%patch720 -p1
%patch730 -p1
%patch731 -p1
%patch732 -p1
%patch733 -p1
%patch744 -p1
%patch745 -p1
%patch746 -p1
%patch747 -p1
%patch748 -p1
%patch749 -p1
%patch750 -p1
%patch751 -p1
%patch752 -p1
mkdir -p third_party/llvm-build/Release+Asserts/bin
pushd third_party/llvm-build/Release+Asserts/bin
ln -sf /usr/bin/clang clang
ln -sf /usr/bin/clang++ clang++
popd
# Remove bundled ICU; its header files appear to get picked up instead of
# the system ones, leading to errors during the final link stage.
# https://groups.google.com/a/chromium.org/d/topic/chromium-packagers/BNGvJc08B6Q
#find third_party/icu -type f \! -regex '.*\.\(gn\|gni\|isolate\)' -delete
# Hard code extra version
FILE=chrome/common/channel_info_posix.cc
sed -i.orig -e 's/getenv("CHROME_VERSION_EXTRA")/"%{product_vendor} %{product_version}"/' $FILE
cmp $FILE $FILE.orig && exit 1
# setup node
mkdir -p third_party/node/linux/node-linux-x64/bin
ln -s /usr/bin/node third_party/node/linux/node-linux-x64/bin/node
%build
%define use_gold true
%if 0%{clang}
%define is_clang true
%else
%define is_clang false
%endif
# widevinecdmadapter
# Build error with widevinecdmadapter in 67.0.3396.62 (fixed)
%define widevine 1
%if 0%{widevine}
%define is_widevine true
%else
%define is_widevine false
%endif
%define lld 1
%if 0%{lld}
%define is_lld true
%else
%define is_lld false
%endif
# jumbo https://chromium.googlesource.com/chromium/src/+/master/docs/jumbo.md
# (Alzim) 1 - localhost, 0 - ABF build
%define localhost 0
%if 0%{localhost}
%define is_limit 100
%else
%define is_limit 10
%endif
%if 0%{?libva}
%define is_vaapi true
%else
%define is_vaapi false
%endif
%if 0%{?clang}
export CC=clang
export CXX=clang++
export AR=ar
export NM=nm
# flags to fix i586 builds
%ifarch i386 i486 i586 i686
export LDFLAGS="$LDFLAGS -Wl,-z,notext"
%endif
%else
%setup_compile_flags
CC=%{__cc}; export CC
CXX=%{__cxx}; export CXX
AR=%{__ar}; export AR
NM=%{__nm}; export NM
LD=%{__cxx}; export LD
# filter out some flags to fix i586 builds with GCC
CFLAGS=$(echo "$CFLAGS"|sed -e 's/-gdwarf-4//' -e 's/-fvar-tracking-assignments//' -e 's/-frecord-gcc-switches//')
CXXFLAGS=$(echo "$CXXFLAGS"|sed -e 's/-gdwarf-4//' -e 's/-fvar-tracking-assignments//' -e 's/-frecord-gcc-switches//')
CFLAGS="$CFLAGS -Wno-error=pointer-to-int-cast -Wno-error=int-to-pointer-cast"
CXXFLAGS="$CXXFLAGS -Wno-error=attributes -Wno-error=comment -Wno-error=unused-variable -Wno-error=strict-overflow -Wno-error=deprecated-declarations"
%endif
# If system glibc is too old, use Chromium's built-in libc++, otherwise use system libc++.
# Shell does not or may not understand not integer values correctly,
# so remove the dot by sed to make the value of the glibc version an integer.
glibc_version="$(rpm -q --queryformat "%{VERSION}" glibc | sed -e 's/\.//g')"
# -lt means 'less than'
# glibc 2.27 is used as a stop point, because today (17.10.2018) Chromium
# is built with system glibc 2.27 in ALT Sisyphus,
# ROSA has glibc 2.25, and chromium 69 is unbuildable with it
if [ "$glibc_version" -lt 227 ]
then use_custom_libcxx='true'
else use_custom_libcxx='false'
fi
echo "DEBUG: use_custom_libcxx = ${use_custom_libcxx}"
# v NO TABS IN HERE!
%define gn_config use_sysroot=false \
system_libdir="%{_lib}" \
use_custom_libcxx="${use_custom_libcxx}" \
icu_use_data_file=true \
enable_nacl=false \
optimize_webui=true \
binutils_path="%{_bindir}" \
linux_use_bundled_binutils=false \
use_gold=%{use_gold} \
custom_toolchain="%{_sourcedir}:default" \
proprietary_codecs=true \
ffmpeg_branding="Chromium" \
enable_ac3_eac3_audio_demuxing=true \
enable_mse_mpeg2ts_stream_parser=true \
enable_hevc_demuxing=true \
use_system_libjpeg=true \
use_libjpeg_turbo=false \
enable_widevine=%{is_widevine} \
pdf_enable_xfa=true \
use_pulseaudio=true \
link_pulseaudio=true \
use_cups=true \
use_kerberos=true \
use_allocator="none" \
treat_warnings_as_errors=false \
fatal_linker_warnings=false \
use_aura=true \
use_libpci=true \
is_debug=false \
symbol_level=0 \
remove_webcore_debug_symbols=true \
is_official_build=true \
is_clang=%{is_clang} \
use_allocator="none" \
use_allocator_shim=false \
clang_use_chrome_plugins=false \
clang_base_path="%{_prefix}" \
use_lld=%{is_lld} \
use_system_freetype=true \
use_bundled_fontconfig=false \
use_system_harfbuzz=true \
use_vaapi=%{is_vaapi} \
v8_use_external_startup_data=false \
google_api_key="%{google_api_key}" \
google_default_client_id="%{google_default_client_id}" \
google_default_client_secret="%{google_default_client_secret}" \
use_jumbo_build=true \
jumbo_file_merge_limit = %{is_limit}
#extra_cxxflags="${CXXFLAGS}" \
#extra_ldflags="${LDFLAGS}" \
#is_nacl_glibc=false \
%define system_gn_list ffmpeg flac libxslt snappy yasm libdrm fontconfig freetype harfbuzz-ng
# libpng, libtiff
# libvpx : system libvpx will normally be much older than the bundled one
# opus
# icu
# libevent
# libwebp
# System libxml must be built with icu support to be used in Chromium
# libxml
# jsoncpp
build/linux/unbundle/replace_gn_files.py --system-libraries %{system_gn_list}
third_party/libaddressinput/chromium/tools/update-strings.py
python tools/gn/bootstrap/bootstrap.py --gn-gen-args='%{gn_config}'
out/Release/gn gen --args='%{gn_config}' out/Release
pushd out/Release
# widevinecdmadapter
# Build error with widevinecdmadapter in 67.0.3396.62
ninja -vvv %{_smp_mflags} chrome chrome_sandbox chromedriver
popd
%install
mkdir -p %{buildroot}%{_bindir}
mkdir -p %{buildroot}%{_crdir}/locales
mkdir -p %{buildroot}%{_crdir}/themes
mkdir -p %{buildroot}%{_crdir}/default_apps
install -m 755 %{SOURCE1} %{buildroot}%{_crdir}/chromium-wrapper
install -m 755 out/Release/chrome %{buildroot}%{_crdir}/
install -m 4755 out/Release/chrome_sandbox %{buildroot}%{_crdir}/chrome-sandbox
cp -a out/Release/chromedriver %{buildroot}%{_crdir}/chromedriver
install -m 644 out/Release/*.pak %{buildroot}%{_crdir}/
install -m 644 out/Release/icudtl.dat %{buildroot}%{_crdir}/
install -m 644 out/Release/locales/*.pak %{buildroot}%{_crdir}/locales/
install -m 644 out/Release/resources.pak %{buildroot}%{_crdir}/
install -m 644 chrome/browser/resources/default_apps/* %{buildroot}%{_crdir}/default_apps/
ln -s %{_crdir}/chromium-wrapper %{buildroot}%{_bindir}/%{crname}
sed -i "s!@LIBDIR@!%{_libdir}!g" %{buildroot}%{_crdir}/chromium-wrapper
ln -s %{_crdir}/chromedriver %{buildroot}%{_bindir}/chromedriver
cp -r out/Release/swiftshader %{buildroot}%{_crdir}
# create global config file
mkdir -p %{buildroot}%{_sysconfdir}/default
install -m644 %{SOURCE32} %{buildroot}%{_sysconfdir}/default/%{crname}
# create pepper dir. talkplugin works fine only if sylinks in pepper
mkdir -p %{buildroot}%{_crdir}/pepper
find out/Release/resources/ -name "*.d" -exec rm {} \;
cp -r out/Release/resources %{buildroot}%{_crdir}
# desktop file
mkdir -p %{buildroot}%{_datadir}/applications
install -m 644 %{SOURCE2} %{buildroot}%{_datadir}/applications/
# icon
mkdir -p %{buildroot}%{_iconsdir}/hicolor/
tar xjf %{SOURCE100} -C %{buildroot}%{_iconsdir}/hicolor/
mkdir -p %{buildroot}%{_sysconfdir}/%{crname}
install -m 0644 %{SOURCE30} %{buildroot}%{_sysconfdir}/%{crname}/
install -m 0644 %{SOURCE31} %{buildroot}%{_sysconfdir}/%{crname}/
find %{buildroot} -name "*.nexe" -exec strip {} \;