chromium-browser-stable/chromium-browser-stable.spec
2019-12-19 17:29:31 +03:00

843 lines
28 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://packages.altlinux.org/ru/sisyphus/specfiles/chromium-gost
# 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}
%bcond_without gost
# 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 ffmpeg 1
%define icu 0
%define libva 0
%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
# GOST patches and sources
%define chromium_gost_commit 7b09253b0112b1bb7b4e89a9134cf078f4084c85
%define msspi_commit 0e5911974e2d76d68e24eac4599c7248d0018589
%define _gostsourcedir %{_builddir}/chromium-gost
%if %{with gost}
# When building libgostssl.so, we make empty fake libcapi10.so* and libcapi20.so*
# to emulate linking with proprietary CryptoPro libraries; at runtime Chromium
# tries to dlopen libgostssl.so and, if libcapi* libs are missing, it will simply
# not load this library and will not fail with an error. So, we don't need to depend
# from these libraries, especially because we can't put them into the repository.
%define __noautoreq 'libcapi.*\.so\.*'
%endif
Summary: A fast web browser based on the Blink engine
Name: chromium-browser-stable
Version: 79.0.3945.88
Release: 1
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: %{crname}.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
%if %{with gost}
Source1100: Makefile.gost
Source1101: https://github.com/deemru/chromium-gost/archive/%{chromium_gost_commit}.tar.gz?/chromium-gost-%{chromium_gost_commit}.tar.gz
Source1102: https://github.com/deemru/msspi/archive/%{msspi_commit}.tar.gz?/msspi-%{msspi_commit}.tar.gz
%endif
# needs with gost
# https://github.com/deemru/chromium-gost/blob/master/patch/chromium.patch
Patch1: chromium-79.0.3945.88-deleted-chromium-gost-info.patch
Patch4: chromium-30.0.1599.66-master-prefs-path.patch
# (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.
Patch6: chromium-55-extra-media.patch
# (cjw) [1/2] Recognize mimetypes for WMV (.wmv), FLV (.flv) and MPEG (.mpg) videos
Patch7: chromium-40-wmvflvmpg.patch
# (cjw) [2/2] Handle more video codecs.
Patch8: chromium-40-sorenson-spark.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) build pdfium with system libtiff and libpng
# (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
# clang builtin subtract functions, scoped enum
Patch47: chromium-61-gcc5.patch
# (cjw) fix gn bootstrapping with gcc
Patch190: chromium-69-gn-bootstrap.patch
# (cjw) fix i586 build
Patch198: chromium-72-i586.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
# Patch to fix build with use_system_libvpx
# Chromium bug #541273
# fix build with icu other than 54
Patch504: chromium-system-icu-r0.patch
# https://aur.archlinux.org/packages/chromium-vaapi/
Patch508: chromium-vaapi.patch
# ROSA Build
Patch600: chromium-buildname-60.0.3112.90.patch
# Patch to fix build
Patch601: chromium-62-include-cstdlib.patch
# https://github.com/RussianFedora/chromium/blob/fedora-stable/chromium-66.0.3359.81-system-clang.patch
Patch603: chromium-66.0.3359.81-system-clang.patch
# https://mirror.yandex.ru/gentoo-portage/www-client/chromium/files/
Patch604: chromium-compiler-r4.patch
# https://chromium.googlesource.com/chromium/src/+/40a8d84a54ac47d3299194c5377aebd71714f1f0%5E%21/
Patch607: chromium-67.0.3396.87-fix-build-llvm-ar.patch
# Add "ROSA" to the user agent string
Patch627: chromium-68.0.3440.106-rosa-user-agent.patch
# Do not prefix libpng functions
Patch629: chromium-60.0.3112.78-no-libpng-prefix.patch
# Fix errors build in 69
Patch631: chromium-69.0.3497.100-build-error-in-clang6.patch
# Disable fontconfig cache magic that breaks remoting
Patch717: chromium-70.0.3538.67-disable-fontconfig-cache-magic.patch
BuildRequires: bison
%if 0%{?clang}
BuildRequires: clang
BuildRequires: lld
BuildRequires: libcxx-devel
BuildRequires: libcxxabi-devel
%endif
# gn needs these
BuildRequires: libstdc++-static-devel
BuildRequires: flex
BuildRequires: git
BuildRequires: gperf
BuildRequires: gyp
BuildRequires: ninja
BuildRequires: nodejs
BuildRequires: util-linux
BuildRequires: yasm
BuildRequires: atomic-devel
BuildRequires: bzip2-devel
BuildRequires: cap-devel
#BuildRequires: closure-compiler
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(glesv2)
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: pythonegg(beautifulsoup4)
BuildRequires: pythonegg(html5lib)
%if %{with gost}
BuildRequires: chrpath
%endif
Suggests: chromium-browser-pepper-flash
Conflicts: chromium-widevinecdm-plugin < 54
Obsoletes: chromium-widevinecdm-plugin < 54
Conflicts: %{crname}-beta
Conflicts: %{crname}-unstable
# There was a dummy empty package chromium-browser
# which depended from chromium-browser-stable and nothing more.
# We decided to remove that package.
# chromium-browser SUBpackage had Epoch=1
Obsoletes: %{crname} < 1:%{version}-%{release}
Provides: %{crname} = 1:%{version}-%{release}
Obsoletes: chromium-gost-lib < 78.0.3904.70
%if %{with gost}
Provides: chromium-gost-lib = %{EVRD}
%endif
%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
%{_crdir}/libEGL.so
%{_crdir}/libGLESv2.so
%dir %{_crdir}/pepper
%{_datadir}/applications/*.desktop
%{_iconsdir}/hicolor/*/apps/chromium*
%post
# Remove chromium-browser-install package if we have it installed
if [ "$(rpm -q %{crname}-install | wc -w)" = 1 ]
then
rpm -e %{crname}-install
fi
#----------------------------------------------------------------------------
%if %{with gost}
# %package -n chromium-gost-lib
# Summary: Library to enable GOST TLS in Chromium browser via CryptoPro
# Group: System/Libraries
# Requires: %{name} = %{EVRD}
#
# %description -n chromium-gost-lib
# If you need to make TLS work with GOST cryptography in Chromium browser,
# install this package and proprietary CryptoPro packages.
#
# Chromium looks for libgostssl.so from this package, if it finds it,
# then it dlopens it. CryptoPro's libcapi10.so and libcapi20.so are
# loaded by libgostssl.so. All this allows to use GOST TLS encryption
# via CryptoPro libraries which implement GOST TLS.
#
# %files -n chromium-gost-lib
# %{_crdir}/libgostssl.so
# %{_crdir}/gostssl.so
# Symlink to chromium-browser
# Disabled to prevent conflicts with chromium-gost RPMs
#%%{_bindir}/chromium-gost
%endif
#----------------------------------------------------------------------------
%package -n chromedriver
Summary: WebDriver for Google Chrome/Chromium
Group: Development/Other
Requires: %{name} = %{EVRD}
%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
%if %{with gost}
rm -rf %{_gostsourcedir}
mkdir -p %{_gostsourcedir}
tar -C %{_gostsourcedir} --strip 1 -xf %{SOURCE1101}
sed -i \
-e "s,^#include <../ssl/internal.h>,#include \"${PWD}/third_party/boringssl/src/ssl/internal.h\",g" \
%{_gostsourcedir}/src/gostssl.cpp
tar -C %{_gostsourcedir}/src/msspi --strip 1 -xf %{SOURCE1102}
sed -i 's/ (Chromium GOST) / /g' %{_gostsourcedir}/patch/chromium.patch
sed -i 's/Chromium GOST/Chromium/g' %{_gostsourcedir}/patch/chromium.patch
patch -p1 < %{_gostsourcedir}/patch/chromium.patch
%patch1 -p1 -R
( cd ./third_party/boringssl/src
patch -p1 < %{_gostsourcedir}/patch/boringssl.patch )
#( cd %{_gostsourcedir}
# Canonical library naming requires to prefix their names with "lib"
# We make a symlink later
#grep -rIl gostssl.so . | xargs sed -i 's/gostssl.so/libgostssl.so/g' )
cp -f %{_gostsourcedir}/src/gostssl.cpp third_party/boringssl/gostssl.cpp
cp -f %{_gostsourcedir}/src/msspi/src/* third_party/boringssl
cp -f %{_gostsourcedir}/src/msspi/third_party/cprocsp/include/* third_party/boringssl/src/include
%endif
%patch4 -p1 -b .prefs
%patch6 -p1
%patch7 -p1
%patch8 -p1
%patch22 -p1
%if 0%{jsoncpp}
%patch28 -p1
%endif
%if 0%{?ffmpeg}
%patch35 -p1
%endif
%patch36 -p1
%patch47 -p1
%patch190 -p1
%patch198 -p1
# new from debian
%patch500 -p1
%patch501 -p1
%if 0%{icu}
%patch502 -p1 -b .system-icu
%patch504 -p0 -b .icu-ver
%endif
%if 0%{?libva}
%patch508 -p1 -b .vaapi
%endif
%patch600 -p1
%patch601 -p1
%patch603 -p1
%patch604 -p1
%patch607 -p1
%patch627 -p1
%patch629 -p1
%patch631 -p1 -b .clang6
%patch717 -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 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 \
'buildtools/third_party/libc++' \
'buildtools/third_party/libc++abi' \
'base/third_party/cityhash' \
'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' \
'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/adobe' \
'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/compiler' \
'third_party/angle/src/third_party/libXNVCtrl' \
'third_party/angle/src/third_party/trace_event' \
'third_party/angle/third_party/glslang' \
'third_party/angle/third_party/spirv-headers' \
'third_party/angle/third_party/spirv-tools' \
'third_party/angle/third_party/vulkan-headers' \
'third_party/angle/third_party/vulkan-loader' \
'third_party/angle/third_party/vulkan-tools' \
'third_party/angle/third_party/vulkan-validation-layers' \
'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/boringssl/src/third_party/sike' \
'third_party/boringssl/linux-aarch64/crypto/third_party/sike' \
'third_party/boringssl/linux-x86_64/crypto/third_party/sike' \
'third_party/breakpad' \
'third_party/breakpad/breakpad/src/third_party/curl' \
'third_party/brotli' \
'third_party/cacheinvalidation' \
'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-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/depot_tools' \
'third_party/devscripts' \
'third_party/dom_distiller_js' \
'third_party/emoji-segmenter' \
'third_party/expat' \
'third_party/ffmpeg' \
'third_party/flac' \
'third_party/flatbuffers' \
'third_party/flot' \
'third_party/fontconfig' \
'third_party/freetype' \
'third_party/glslang' \
'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/harfbuzz-ng' \
'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/vector' \
'third_party/libaom/source/libaom/third_party/x86inc' \
'third_party/libdrm' \
'third_party/libjingle' \
'third_party/libjpeg_turbo' \
'third_party/libphonenumber' \
'third_party/libpng' \
'third_party/libsecret' \
'third_party/libsrtp' \
'third_party/libsync' \
'third_party/libudev' \
'third_party/libusb' \
'third_party/libvpx' \
'third_party/libvpx/source/libvpx/third_party/x86inc' \
'third_party/libxml' \
'third_party/libxml/chromium' \
'third_party/libxslt' \
'third_party/libwebm' \
'third_party/libwebp' \
'third_party/libyuv' \
'third_party/llvm-build' \
'third_party/lss' \
'third_party/lzma_sdk' \
'third_party/markupsafe' \
'third_party/mesa' \
'third_party/metrics_proto' \
'third_party/modp_b64' \
'third_party/nasm' \
'third_party/node' \
'third_party/node/linux' \
'third_party/node/node_modules/polymer-bundler/lib/third_party/UglifyJS2' \
'third_party/one_euro_filter' \
'third_party/openh264' \
'third_party/openscreen' \
'third_party/openscreen/src/third_party/tinycbor/src/src' \
'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/pffft' \
'third_party/ply' \
'third_party/polymer' \
'third_party/private-join-and-compute' \
'third_party/protobuf' \
'third_party/protobuf/third_party/six' \
'third_party/pyjson5' \
'third_party/qcms' \
'third_party/qunit' \
'third_party/re2' \
'third_party/rnnoise' \
'third_party/s2cellid' \
'third_party/sfntly' \
'third_party/simplejson' \
'third_party/sinonjs' \
'third_party/skia' \
'third_party/skia/include/third_party/skcms' \
'third_party/skia/include/third_party/vulkan' \
'third_party/skia/third_party/gif' \
'third_party/skia/third_party/skcms' \
'third_party/skia/third_party/vulkan' \
'third_party/smhasher' \
'third_party/snappy' \
'third_party/speech-dispatcher' \
'third_party/spirv-headers' \
'third_party/SPIRV-Tools' \
'third_party/sqlite' \
'third_party/swiftshader' \
'third_party/swiftshader/third_party/llvm-7.0' \
'third_party/swiftshader/third_party/llvm-subzero' \
'third_party/swiftshader/third_party/marl' \
'third_party/swiftshader/third_party/subzero' \
'third_party/swiftshader/third_party/SPIRV-Headers/include/spirv/unified1' \
'third_party/tcmalloc' \
'third_party/test_fonts' \
'third_party/unrar' \
'third_party/usb_ids' \
'third_party/usrsctp' \
'third_party/vulkan' \
'third_party/web-animations-js' \
'third_party/webdriver' \
'third_party/webrtc' \
'third_party/webrtc/common_audio/third_party/fft4g' \
'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/xdg-utils' \
'third_party/yasm' \
'third_party/zlib' \
'third_party/zlib/google' \
'tools/gn/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/inspector_protocol' \
'v8/third_party/v8' \
--do-remove
# 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
# Remove compiler flags not supported by our system clang
sed -i \
-e '/"-Wno-defaulted-function-deleted"/d' \
build/config/compiler/BUILD.gn
# 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
# %if %{with gost}
# make --file %{SOURCE1100} \
# SDIR="%{_gostsourcedir}" \
# OUTDIR="%{_gostsourcedir}" \
# CC="%{__cc}" \
# CXX="%{__cxx}" \
# CFLAGS="%{optflags} -Wno-error=attributes"
# %endif
%define system_gn_list ffmpeg
# flac libxslt snappy yasm libpng zlib
# opus
# icu
# libevent
# libvpx
# libwebp
# System libxml must be built with icu support to be used in Chromium
# libxml
# handled by upstream regular build scripts? : freetype harfbuzz-ng
# jsoncpp
%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
%define use_gold false
%else
%define is_lld false
%define use_gold true
%endif
%if 0%{?libva}
%define is_vaapi true
%else
%define is_vaapi false
%endif
# v NO TABS IN HERE!
%define gn_config use_sysroot=false \
system_libdir="%{_lib}" \
icu_use_data_file=true \
enable_nacl=false \
is_nacl_glibc=false \
binutils_path="%{_bindir}" \
linux_use_bundled_binutils=false \
use_gold=%{use_gold} \
custom_toolchain="%{_sourcedir}:default" \
ffmpeg_branding="Chromium" \
proprietary_codecs=true \
enable_platform_ac3_eac3_audio = true \
enable_mse_mpeg2ts_stream_parser=true \
enable_platform_hevc=true \
use_system_libjpeg=true \
use_libjpeg_turbo=false \
enable_widevine=%{is_widevine} \
pdf_enable_xfa=true \
use_pulseaudio=true \
use_allocator="none" \
treat_warnings_as_errors=false \
fatal_linker_warnings=false \
use_aura=true \
use_libpci = true \
is_debug=false \
gtk_version=3 \
closure_compile=false \
is_clang=%{is_clang} \
clang_use_chrome_plugins=false \
clang_base_path="%{_prefix}" \
use_lld=%{is_lld} \
use_system_freetype=true \
use_system_harfbuzz=false \
use_system_libpng=true \
use_vaapi=%{is_vaapi} \
enable_dav1d_decoder=true enable_libaom_decoder=false \
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}"
build/linux/unbundle/replace_gn_files.py --system-libraries %{system_gn_list}
third_party/libaddressinput/chromium/tools/update-strings.py
%if 0%{?clang}
export CC=clang
export CXX=clang++
export AR=ar
export NM=nm
export CFLAGS="$CFLAGS -stdlib=libc++ -Wno-unused-command-line-argument"
export CXXFLAGS="$CXXFLAGS -stdlib=libc++ -Wno-unused-command-line-argument"
# flags to fix i586 builds
export LDFLAGS="$LDFLAGS -Wl,-z,notext -pthread -stdlib=libc++"
%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
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
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 %{_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/
install -m 755 out/Release/libEGL.so %{buildroot}%{_crdir}/
install -m 755 out/Release/libGLESv2.so %{buildroot}%{_crdir}/
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}/
#%if %{with gost}
#install -m0644 %{_gostsourcedir}/libgostssl.so %{buildroot}%{_crdir}/libgostssl.so
# Compatibility symlink: it is named gostssl.so in other builds of Chromium-GOST
# but it is common to prefix libraries with "lib"
#( cd %{buildroot}%{_crdir}/ && ln -s libgostssl.so gostssl.so )
# Disabled to prevent conflicts with chromium-gost RPMs
#( cd %{buildroot}%{_bindir}/ && ln -s %{crname} chromium-gost )
# Find all files and process them (idea from ALT)
#find %{buildroot}%{_crdir} -type f |
#while read f; do
# resolve symlinks
#t="$(readlink -ev "$f")"
#file "$t" | fgrep -qs ELF || continue
# Add real RPATH. We need RPATH in GOST builds because 'dlopen(libgostssl.so)'
# is performed, but libgostssl.so will not be found without RPATH.
# Here we could change chromium.path from chromium-gost so that it has
# an absolute path to "gostssl.so" instead of a relative one
# but it is strange to hardcode absolute paths to libraries and will
# break running our Chromium somewhere outside of standard locations.
#chrpath -r '%{_crdir}' "$t" ||:
#done
#%endif
find %{buildroot} -name "*.nexe" -exec strip {} \;