File chromium.spec of Package chromium.openSUSE_Leap_42.1_Update
#
# spec file for package chromium
#
# Copyright (c) 2016 SUSE LINUX GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.
# Please submit bugfixes or comments via http://bugs.opensuse.org/
#
Name: chromium
Version: 53.0.2785.113
Release: 0
Summary: Google's opens source browser project
License: BSD-3-Clause and LGPL-2.1+
Group: Productivity/Networking/Web/Browsers
Url: http://code.google.com/p/chromium/
Source0: http://commondatastorage.googleapis.com/chromium-browser-official/%{name}-%{version}.tar.xz
Source2: %{name}-rpmlintrc
Source30: master_preferences
Source31: default_bookmarks.html
Source99: chrome-wrapper
Source100: chromium-browser.sh
Source101: chromium-browser.desktop
Source102: chromium-browser.xml
Source103: chromium.default
Source104: chromium-icons.tar.bz2
## Start Patches
# PATCH-FIX-OPENSUSE Make the 1-click-install ymp file always download [bnc#836059]
Patch1: exclude_ymp.diff
# PATCH-FIX-OPENSUSE enables reading of the master preference
Patch2: chromium-master-prefs-path.patch
# PATCH-FIX-UPSTREAM Add more charset aliases
Patch3: chromium-more-codec-aliases.patch
# PATCH-FIX-OPENSUSE Compile the sandbox with -fPIE settings
Patch4: chromium-sandbox-pie.patch
# PATCH-FIX-OPENSUSE chromium-46.0.2490.71-fix-missing-i18n_process_css_test.patch - file was removed
Patch5: chromium-46.0.2490.71-fix-missing-i18n_process_css_test.patch
# PATCH-FIX-OPENSUSE fix_building_widevinecdm_with_chromium.patch - Enable WideVine plugin
Patch6: fix_building_widevinecdm_with_chromium.patch
# PATCH-FIX-OPENSUSE fix_network_api_crash.patch - Fix crash in network API, e.g. when using chromecast extension
Patch7: fix_network_api_crash.patch
# PATCH-FIX-OPENSUSE gcc60-fixes.diff - Fix crashes due to the GCC6 optimizations
Patch8: gcc60-fixes.diff
# archlinux arm enhancement patches
Patch100: arm-webrtc-fix.patch
Patch101: arm_use_right_compiler.patch
# GN buildsystem related patches
Patch200: chromium-last-commit-position-r0.patch
BuildRequires: alsa-devel
BuildRequires: binutils-gold
BuildRequires: bison
BuildRequires: cups-devel
BuildRequires: dbus-1-devel
BuildRequires: desktop-file-utils
BuildRequires: fdupes
BuildRequires: flac-devel
BuildRequires: flex
BuildRequires: freetype2-devel
BuildRequires: gcc
BuildRequires: gcc-c++
BuildRequires: gperf
BuildRequires: harfbuzz-devel
BuildRequires: hicolor-icon-theme
BuildRequires: hunspell-devel
BuildRequires: krb5-devel
BuildRequires: libbz2-devel
BuildRequires: libelf-devel
BuildRequires: libevent-devel
BuildRequires: libexpat-devel
BuildRequires: libpulse-devel
BuildRequires: libwebp-devel
BuildRequires: python-xml
BuildRequires: snappy-devel
BuildRequires: update-desktop-files
BuildRequires: zlib-devel
BuildRequires: pkgconfig(libffi)
Requires(pre): permissions
BuildRequires: SDL-devel
BuildRequires: dirac-devel >= 1.0.0
BuildRequires: libcap-devel
BuildRequires: libdc1394
BuildRequires: libdc1394-devel
BuildRequires: libdrm-devel
BuildRequires: libgcrypt-devel
BuildRequires: libgnome-keyring-devel
BuildRequires: libgsm
BuildRequires: libgsm-devel
BuildRequires: libjack-devel
BuildRequires: libogg-devel
BuildRequires: liboil-devel >= 0.3.15
BuildRequires: libopenssl-devel
BuildRequires: libtheora-devel >= 1.1
BuildRequires: libvdpau-devel
BuildRequires: libvorbis-devel
BuildRequires: libvpx-devel
BuildRequires: ncurses-devel
BuildRequires: ninja
BuildRequires: pam-devel
BuildRequires: pciutils-devel
BuildRequires: pkg-config
BuildRequires: python
BuildRequires: python-devel
BuildRequires: schroedinger-devel
BuildRequires: slang-devel
BuildRequires: texinfo
BuildRequires: util-linux
BuildRequires: valgrind-devel
BuildRequires: wdiff
BuildRequires: pkgconfig(cairo) >= 1.6
BuildRequires: pkgconfig(dbus-1)
BuildRequires: pkgconfig(gconf-2.0)
BuildRequires: pkgconfig(glib-2.0)
BuildRequires: pkgconfig(gtk+-2.0)
BuildRequires: pkgconfig(gtk+-3.0)
BuildRequires: pkgconfig(libcrypto)
BuildRequires: pkgconfig(libexif)
BuildRequires: pkgconfig(libudev)
BuildRequires: pkgconfig(libxslt)
BuildRequires: pkgconfig(nspr) >= 4.9.5
BuildRequires: pkgconfig(nss) >= 3.14
BuildRequires: pkgconfig(sqlite3)
BuildRequires: pkgconfig(x11)
BuildRequires: pkgconfig(xcomposite)
BuildRequires: pkgconfig(xcursor)
BuildRequires: pkgconfig(xdamage)
BuildRequires: pkgconfig(xext)
BuildRequires: pkgconfig(xfixes)
BuildRequires: pkgconfig(xi)
BuildRequires: pkgconfig(xrandr)
BuildRequires: pkgconfig(xrender)
BuildRequires: pkgconfig(xscrnsaver)
BuildRequires: pkgconfig(xt)
BuildRequires: pkgconfig(xtst)
Requires: alsa
Requires: ffmpegsumo
Requires: hicolor-icon-theme
Requires: update-alternatives
Requires: xdg-utils
Requires(pre): permissions
# Recommends the chromium-ffmpeg library (available from packman)
Recommends: %{name}-ffmpeg
Conflicts: otherproviders(chromium-browser)
Provides: chromium-based-browser = %{version}
Provides: chromium-browser = %{version}
Provides: browser(npapi)
Obsoletes: %{name}-suid-helper < %{version}
Obsoletes: chromium-browser < %{version}
Provides: %{name}-suid-helper = %{version}
ExclusiveArch: %{ix86} x86_64 %arm
#Requirements to build a fully functional ffmpeg
# This can only be done on packman OBS
%if 0%{?packman_bs}
BuildRequires: libfaac-devel >= 1.28
BuildRequires: libmp3lame-devel
BuildRequires: libopencore-amr-devel
BuildRequires: libx264-devel
BuildRequires: libxvidcore-devel
%endif
#Define the maximum number of build processes to prevent running out of memory
%ifarch %arm
%define ninjaproc 2
%else
%define ninjaproc 4
%endif
%description
Chromium is the open-source project behind Google Chrome. We invite you to join us in our effort to help build a safer, faster, and more stable way for all Internet users to experience the web, and to create a powerful platform for developing a new generation of web applications.
%package ffmpegsumo
Summary: Library to provide partial ffmpeg support to Chromium
License: BSD-3-Clause and LGPL-2.1+
Group: Productivity/Networking/Web/Browsers
Requires: %{name}
Conflicts: otherproviders(ffmpegsumo)
Conflicts: %{name}-ffmpeg
Provides: ffmpegsumo = %{version}
%description ffmpegsumo
The is the multimedia codec library for Chromium. It is based on the internal ffmpeg source code and contains only the open source codecs from ffmpeg. Proprietary codecs (e.g. H.264) are not part of this library, but are provided in an external package
%package desktop-kde
Summary: Update to chromium to use KDE's kwallet to store passwords
License: BSD-3-Clause and LGPL-2.1+
Group: Productivity/Networking/Web/Browsers
Requires(post): chromium = %{version}
Conflicts: otherproviders(chromium-password)
Provides: chromium-password = %{version}
%if 0%{?suse_version} > 1320 || 0%{?suse_version} == 1315 && 0%{?is_opensuse}
Supplements: packageand(chromium:plasma5-session)
%else
Supplements: packageand(chromium:kdebase4-session)
%endif
%description desktop-kde
By using the openSUSE update-alternatives the password store for Chromium is changed to utilize KDE's kwallet. If access to passwords stored via Chromium (3-dot menu > Settings > Show advanced settings > Passwords and forms > Manage passwords) or using KDE's KWallet presents a problem, see <https://bugs.chromium.org/p/chromium/issues/detail?id=620360#c3>.
%package desktop-gnome
Summary: Update to chromium to use Gnome keyring to store passwords
License: BSD-3-Clause and LGPL-2.1+
Group: Productivity/Networking/Web/Browsers
Requires: libgnome
Requires(post): chromium = %{version}
Supplements: packageand(chromium:gnome-session)
Conflicts: otherproviders(chromium-password)
Provides: chromium-password = %{version}
%description desktop-gnome
By using the openSUSE update-alternatives the password store for Chromium is changed to utilize Gnome's Keyring. If access to passwords stored via Chromium (3-dot menu > Settings > Show advanced settings > Passwords and forms > Manage passwords) or using Gnome's Keyring presents a problem, see <https://bugs.chromium.org/p/chromium/issues/detail?id=620360#c3>.
%package -n chromedriver
Summary: WebDriver for Google Chrome/Chromium
License: BSD-3-Clause
Group: Development/Tools/Other
Url: http://code.google.com/p/chromedriver/
%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.
%if 0%{?packman_bs}
%package ffmpeg
Summary: The ffmpeg library for Google's opens source browser Chromium
License: BSD-3-Clause and LGPL-2.1+
Group: Productivity/Networking/Web/Browsers
Requires: %{name}
Conflicts: otherproviders(ffmpegsumo)
Provides: ffmpegsumo = %{version}
%description ffmpeg
FFMPEG library built from the chromium sources.
%endif
%prep
%setup -q
#GN Buildsystem fixes
%patch200 -p1
#Standard patches
%patch1
%patch2
%patch3
%patch4
%patch5 -p1
%patch6 -p1
%patch7
%if 0%{?suse_version} > 1320
%patch8
%endif
# archlinux arm enhancements
%patch100
%patch101 -p0
%build
# Create the configuration for GN
myconf_gn+=" is_debug=false"
myconf_gn+=" enable_nacl=false"
myconf_gn+=" proprietary_codecs=true"
myconf_gn+=" is_component_ffmpeg=true"
myconf_gn+=" use_cups=true"
myconf_gn+=" use_gconf=true"
myconf_gn+=" use_gtk3=true"
myconf_gn+=" use_kerberos=true"
myconf_gn+=" use_pulseaudio=true"
myconf_gn+=" is_clang=false"
myconf_gn+=" use_sysroot=false"
myconf_gn+=" treat_warnings_as_errors=false"
myconf_gn+=" fatal_linker_warnings=false"
myconf_gn+=" use_allocator=\"none\""
myconf_gn+=" enable_widevine=true"
myconf_gn+=" fieldtrial_testing_like_official_build=true"
# Define the Chrome branding in order to get libffmpeg on packman that supports all codecs
%if 0%{?packman_bs}
myconf_gn+=" ffmpeg_branding=\"Chrome\""
%endif
%ifarch %arm
myconf_gn+=" target_cpu =\"arm\""
myconf_gn+=" target_sysroot_dir=\"\""
myconf_gn+=" arm_use_neon=false"
myconf_gn+=" arm_optionally_use_neon=false"
myconf_gn+=" arm_use_thumb=true"
myconf_gn+=" remove_webcore_debug_symbols=true"
myconf_gn+=" symbol_level = 0"
myconf_gn+=" is_component_build = true"
%endif
# Set up Google API keys, see http://www.chromium.org/developers/how-tos/api-keys
# Note: these are for the openSUSE Chromium builds ONLY. For your own distribution,
# please get your own set of keys.
google_api_key="AIzaSyD1hTe85_a14kr1Ks8T3Ce75rvbR1_Dx7Q"
google_default_client_id="4139804441.apps.googleusercontent.com"
google_default_client_secret="KDTRKEZk2jwT_7CDpcmMA--P"
myconf_gn+=" google_api_key=\"${google_api_key}\""
myconf_gn+=" google_default_client_id=\"${google_default_client_id}\""
myconf_gn+=" google_default_client_secret=\"${google_default_client_secret}\""
third_party/libaddressinput/chromium/tools/update-strings.py
if [ ! -f chrome/test/data/webui/i18n_process_css_test.html ]; then
touch chrome/test/data/webui/i18n_process_css_test.html
fi
tools/gn/bootstrap/bootstrap.py -v --gn-gen-args "${myconf_gn}"
out/Release/gn gen --args="${myconf_gn}" out/Release
%if 0%{?packman_bs}
ninja -C out/Release third_party/ffmpeg
%else
ninja -j %{ninjaproc} -C out/Release chrome
# Build the required SUID_SANDBOX helper
ninja -j %{ninjaproc} -C out/Release chrome_sandbox
# Build the ChromeDriver test suite
ninja -j %{ninjaproc} -C out/Release chromedriver
%endif
%install
mkdir -p %{buildroot}%{_libdir}/chromium
%if 0%{?packman_bs}
pushd out/Release
cp -av libffmpeg.so %{buildroot}%{_libdir}/chromium/
popd
%else
%ifarch x86_64
mkdir -p %{buildroot}%{_libexecdir}/
%endif
install -m 755 %{SOURCE100} %{buildroot}%{_libdir}/chromium/chromium-generic
# x86_64 capable systems need this
sed -i "s|%{_libexecdir}/chromium|%{_libdir}/chromium|g" %{buildroot}%{_libdir}/chromium/chromium-generic
#update the password-store settings for each alternative
%if 0%{?suse_version} > 1320 || 0%{?suse_version} == 1315 && 0%{?is_opensuse}
sed "s|password-store=detect|password-store=kwallet5|g" %{buildroot}%{_libdir}/chromium/chromium-generic > %{buildroot}%{_libdir}/chromium/chromium-kde
%else
sed "s|password-store=detect|password-store=kwallet|g" %{buildroot}%{_libdir}/chromium/chromium-generic > %{buildroot}%{_libdir}/chromium/chromium-kde
%endif
sed "s|password-store=detect|password-store=gnome|g" %{buildroot}%{_libdir}/chromium/chromium-generic > %{buildroot}%{_libdir}/chromium/chromium-gnome
mkdir -p %{buildroot}%{_mandir}/man1/
pushd out/Release
# Install the file %{_sysconfdir}/default/chromium which defines the chromium flags
mkdir -p %{buildroot}%{_sysconfdir}/default
install -m 644 %{SOURCE103} %{buildroot}%{_sysconfdir}/default/chromium
# Recent Chromium builds now wants to have the sandbox in the same directory. So let's create a symlink to the one in %{_prefix}/lib
cp -a chrome_sandbox %{buildroot}%{_libexecdir}/
ln -s -f %{_libexecdir}/chrome_sandbox %{buildroot}/%{_libdir}/chromium/chrome-sandbox
cp -a *.bin *.pak locales xdg-mime icudtl.dat %{buildroot}%{_libdir}/chromium/
cp -a chromedriver %{buildroot}%{_libdir}/chromium/
# chromium components
%ifarch %arm
cp -a lib*.so %{buildroot}%{_libdir}/chromium/
%else
cp -av libffmpeg.so %{buildroot}%{_libdir}/chromium/
%endif
# Patch xdg-settings to use the chromium version of xdg-mime as that the system one is not KDE4 compatible
sed "s|xdg-mime|%{_libdir}/chromium/xdg-mime|g" xdg-settings > %{buildroot}%{_libdir}/chromium/xdg-settings
cp -a resources.pak %{buildroot}%{_libdir}/chromium/
cp -a chrome %{buildroot}%{_libdir}/chromium/chromium
cp -a chrome.1 %{buildroot}%{_mandir}/man1/chrome.1
cp -a chrome.1 %{buildroot}%{_mandir}/man1/chromium.1
%fdupes %{buildroot}%{_mandir}/man1/
popd
mkdir -p %{buildroot}%{_datadir}/icons/
pushd %{buildroot}%{_datadir}/icons/
tar -xjf %{SOURCE104}
mv oxygen hicolor
popd
mkdir -p %{buildroot}%{_datadir}/applications/
desktop-file-install --dir %{buildroot}%{_datadir}/applications %{SOURCE101}
mkdir -p %{buildroot}%{_datadir}/gnome-control-center/default-apps/
cp -a %{SOURCE102} %{buildroot}%{_datadir}/gnome-control-center/default-apps/
# link to browser plugin path. Plugin patch doesn't work. Why?
mkdir -p %{buildroot}%{_libdir}/browser-plugins
pushd %{buildroot}%{_libdir}/%{name}
ln -s ../browser-plugins plugins
# Install the master_preferences file
mkdir -p %{buildroot}%{_sysconfdir}/%{name}
install -m 0644 %{SOURCE30} %{buildroot}%{_sysconfdir}/%{name}
install -m 0644 %{SOURCE31} %{buildroot}%{_sysconfdir}/%{name}
# Set the right attributes
chmod 755 %{buildroot}%{_libdir}/%{name}/xdg-settings
chmod 755 %{buildroot}%{_libdir}/%{name}/xdg-mime
# create a dummy target for %{_sysconfdir}/alternatives/chromium
mkdir -p %{buildroot}%{_sysconfdir}/alternatives
mkdir -p %{buildroot}%{_bindir}
touch %{buildroot}%{_sysconfdir}/alternatives/chromium
ln -s -f %{_sysconfdir}/alternatives/chromium %{buildroot}/%{_bindir}/chromium
%endif
%if !0%{?packman_bs}
%pre
if [ -f %{_bindir}/chromium -a ! -L %{_bindir}/chromium ] ; then
rm -f %{_bindir}/chromium
fi
%verifyscript
%verify_permissions -e %{_libexecdir}/chrome_sandbox
%post
%icon_theme_cache_post
%desktop_database_post
update-alternatives --install %{_bindir}/chromium chromium %{_libdir}/chromium/chromium-generic 10
%set_permissions %{_libexecdir}/chrome_sandbox
/sbin/ldconfig %{_libdir}/chromium
%postun
%icon_theme_cache_postun
%desktop_database_postun
if [ $1 -eq 0 ]; then
update-alternatives --remove chromium %{_libdir}/chromium/chromium-generic
fi
/sbin/ldconfig %{_libdir}/chromium
%post desktop-kde
update-alternatives --install %{_bindir}/chromium chromium %{_libdir}/chromium/chromium-kde 15
%preun desktop-kde
if [ $1 -eq 0 ]; then
update-alternatives --remove chromium %{_libdir}/chromium/chromium-kde
fi
%post desktop-gnome
update-alternatives --install %{_bindir}/chromium chromium %{_libdir}/chromium/chromium-gnome 15
%postun desktop-gnome
if [ $1 -eq 0 ]; then
update-alternatives --remove chromium %{_libdir}/chromium/chromium-gnome
fi
%endif
# Files!
%if 0%{?packman_bs}
%post ffmpeg
/sbin/ldconfig %{_libdir}/chromium
%postun ffmpeg
/sbin/ldconfig %{_libdir}/chromium
%files ffmpeg
%defattr(-,root,root,-)
%dir %{_libdir}/chromium
%{_libdir}/chromium/libffmpeg.so
%else
%files
%defattr(-,root,root,-)
%verify(not mode) %{_libexecdir}/chrome_sandbox
%doc AUTHORS LICENSE
%config %{_sysconfdir}/%{name}
%config(noreplace) %{_sysconfdir}/default/chromium
%dir %{_datadir}/gnome-control-center
%dir %{_datadir}/gnome-control-center/default-apps
%{_libdir}/chromium/
%{_mandir}/man1/chrom*
%{_datadir}/applications/*.desktop
%{_datadir}/gnome-control-center/default-apps/chromium-browser.xml
%{_datadir}/icons/hicolor/
%{_libexecdir}/chrome_sandbox
%exclude %{_libdir}/chromium/libffmpeg.so
%exclude %{_libdir}/chromium/chromium-kde
%exclude %{_libdir}/chromium/chromium-gnome
%exclude %{_libdir}/chromium/chromedriver
%{_bindir}/chromium
%ghost %{_sysconfdir}/alternatives/chromium
%files ffmpegsumo
%defattr(-,root,root,-)
%{_libdir}/chromium/libffmpeg.so
%files desktop-kde
%defattr(-,root,root)
%ghost %{_sysconfdir}/alternatives/chromium
%attr(755, root, root) %{_libdir}/chromium/chromium-kde
%files desktop-gnome
%defattr(-,root,root)
%ghost %{_sysconfdir}/alternatives/chromium
%attr(755, root, root) %{_libdir}/chromium/chromium-gnome
%files -n chromedriver
%defattr(-,root,root,-)
%{_libdir}/chromium/chromedriver
%endif
%changelog