File chromium.spec of Package chromium.5824

#
# 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/
#


%define rname chromium
%bcond_with clang
Name:           chromium
Version:        54.0.2840.100
Release:        0
Summary:        Google's open 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/%{rname}-%{version}.tar.xz
Source2:        %{rname}-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
# 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
# System libs
Patch8:         chromium-system-ffmpeg-r3.patch
Patch9:         chromium-system-jinja-r13.patch
# Gcc fix
Patch10:        gcc60-fixes.diff
# PATCH-FIX-UPSTREAM correctly build sandbox
Patch11:        chromium-sandbox.patch
# PATCH-FIX-SUSE make ld use less memory by tweaking compiler flags
Patch13:        chromium-linker-memory.patch
# 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
Patch201:       fix-gn-bootstrap.diff
# PATCH-FIX-SUSE: allow proprietary codecs to be set with chromium branding
Patch202:       chromium-prop-codecs.patch
BuildRequires:  SDL-devel
BuildRequires:  binutils-gold
BuildRequires:  bison
BuildRequires:  cups-devel
BuildRequires:  desktop-file-utils
BuildRequires:  fdupes
BuildRequires:  flex
BuildRequires:  gperf
BuildRequires:  hicolor-icon-theme
BuildRequires:  libcap-devel
BuildRequires:  libdc1394
BuildRequires:  libelf-devel
BuildRequires:  libgcrypt-devel
BuildRequires:  libgsm
BuildRequires:  libgsm-devel
BuildRequires:  libjpeg-devel
BuildRequires:  libpng-devel
BuildRequires:  ncurses-devel
BuildRequires:  ninja
BuildRequires:  pam-devel
BuildRequires:  pkgconfig
BuildRequires:  procps
BuildRequires:  python
BuildRequires:  python-Jinja2
BuildRequires:  python-ply
BuildRequires:  python-simplejson
BuildRequires:  python-xml
BuildRequires:  snappy-devel
BuildRequires:  update-desktop-files
BuildRequires:  util-linux
BuildRequires:  wdiff
BuildRequires:  perl(Switch)
BuildRequires:  pkgconfig(alsa)
BuildRequires:  pkgconfig(bzip2)
BuildRequires:  pkgconfig(cairo) >= 1.6
BuildRequires:  pkgconfig(dbus-1)
BuildRequires:  pkgconfig(dirac) >= 1.0.0
BuildRequires:  pkgconfig(expat)
BuildRequires:  pkgconfig(flac++)
BuildRequires:  pkgconfig(freetype2)
BuildRequires:  pkgconfig(gconf-2.0)
BuildRequires:  pkgconfig(glib-2.0)
BuildRequires:  pkgconfig(gnome-keyring-1)
BuildRequires:  pkgconfig(gtk+-2.0)
BuildRequires:  pkgconfig(gtk+-3.0)
BuildRequires:  pkgconfig(harfbuzz)
BuildRequires:  pkgconfig(hunspell)
BuildRequires:  pkgconfig(imlib2)
BuildRequires:  pkgconfig(jack)
BuildRequires:  pkgconfig(kadm-client)
BuildRequires:  pkgconfig(kdb)
BuildRequires:  pkgconfig(krb5)
BuildRequires:  pkgconfig(libcrypto)
BuildRequires:  pkgconfig(libdc1394-2)
BuildRequires:  pkgconfig(libdrm)
BuildRequires:  pkgconfig(libevent)
BuildRequires:  pkgconfig(libexif)
BuildRequires:  pkgconfig(libffi)
BuildRequires:  pkgconfig(liboil-0.3) >= 0.3.15
BuildRequires:  pkgconfig(libpci)
BuildRequires:  pkgconfig(libpulse)
BuildRequires:  pkgconfig(libssl)
BuildRequires:  pkgconfig(libtcmalloc)
BuildRequires:  pkgconfig(libudev)
BuildRequires:  pkgconfig(libwebp)
BuildRequires:  pkgconfig(libxml-2.0)
BuildRequires:  pkgconfig(libxslt)
BuildRequires:  pkgconfig(nspr) >= 4.9.5
BuildRequires:  pkgconfig(nss) >= 3.14
BuildRequires:  pkgconfig(ogg)
BuildRequires:  pkgconfig(openssl)
BuildRequires:  pkgconfig(python)
BuildRequires:  pkgconfig(schroedinger-1.0)
BuildRequires:  pkgconfig(slang)
BuildRequires:  pkgconfig(sqlite3)
BuildRequires:  pkgconfig(theora) >= 1.1
BuildRequires:  pkgconfig(valgrind)
BuildRequires:  pkgconfig(vdpau)
BuildRequires:  pkgconfig(vorbis)
BuildRequires:  pkgconfig(vpx)
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)
BuildRequires:  pkgconfig(zlib)
#Requirements to build a fully functional ffmpeg
Requires:       alsa
Requires:       hicolor-icon-theme
Requires:       xdg-utils
Requires(pre):  permissions
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}
Obsoletes:      chromium-beta-desktop-gnome
Obsoletes:      chromium-beta-desktop-kde
Obsoletes:      chromium-desktop-gnome
Obsoletes:      chromium-desktop-kde
Obsoletes:      chromium-dev-desktop-gnome
Obsoletes:      chromium-dev-desktop-kde
# There is no v8 for ppc and thus chromium won't run on ppc. For aarch64 certain buildrequires are missing (e.g. valgrind)
# while it would build for %arm, we exclude it as it takes forever to build
ExcludeArch:    %arm aarch64 ppc ppc64 ppc64le
Requires:       ffmpegsumo
# Recommends the chromium-ffmpeg library (available from packman)
Recommends:     %{name}-ffmpeg
%if %{with clang}
BuildRequires:  clang >= 3.9.0
%else
BuildRequires:  gcc
BuildRequires:  gcc-c++
%endif
#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

%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)
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 -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 -n %{rname}-%{version}

#GN Buildsystem fixes
%patch200 -p1
%patch201 -p1
%patch202 -p1

#Standard patches
%patch1
%patch2
%patch3
%patch4
%patch5 -p1
%patch6 -p1
%patch7
%patch8 -p1
%patch9 -p1
%patch10
%patch11 -p1
%patch13 -p1

# archlinux arm enhancements
%patch100
%patch101

%build
# do not eat all memory
ninjaproc="%{?jobs:%{jobs}}"
echo "Available memory:"
free
echo "System limits:"
ulimit -a
if test -n "$ninjaproc" -a "$ninjaproc" -gt 1 ; then
    mem_per_process=1300
    max_mem=`LANG=C free -t -m | sed -n "s|^Mem: *\([0-9]*\).*$|\1|p"`
    max_jobs="$(($max_mem / $mem_per_process))"
    test "$ninjaproc" -gt "$max_jobs" && ninjaproc="$max_jobs" && echo "Warning: Reducing number of jobs to $max_jobs because of memory limits"
    test "$ninjaproc" -le 0 && ninjaproc=1 && echo "Warning: Do not use the parallel build at all becuse of memory limits"
fi

# Create the configuration for GN
# Available options: out/Release/gn args --list out/Release/
myconf_gn=""
myconf_gn+=" is_debug=false"
myconf_gn+=" enable_nacl=false"
myconf_gn+=" is_component_ffmpeg=true"
myconf_gn+=" use_cups=true"
myconf_gn+=" use_gconf=true"
myconf_gn+=" use_gtk3=true"
myconf_gn+=" use_aura=true"
myconf_gn+=" enable_clipboard_aurax11=true"
myconf_gn+=" symbol_level=1"
myconf_gn+=" remove_webcore_debug_symbols=true"
myconf_gn+=" use_kerberos=true"
myconf_gn+=" use_pulseaudio=true link_pulseaudio=true"
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+=" fieldtrial_testing_like_official_build=true"
myconf_gn+=" use_gold=true"
myconf_gn+=" use_sysroot=false"
myconf_gn+=" enable_widevine=true"
myconf_gn+=" enable_hangout_services_extension=true"
%if %{with clang}
myconf_gn+=" is_clang=true clang_base_path=\"/usr\" clang_use_chrome_plugins=false"
%else
myconf_gn+=" is_clang=false"
%endif

# Define the Chrome branding in order to get libffmpeg on packman that supports all codecs
# The proprietary codecs just force the chromium to say they can use it and
# offload the actual computation to the split ffmpeg.so, otherwise the chromium
# won't be able to load the codec even if the library can handle it
myconf_gn+=" proprietary_codecs=true"
%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+=" 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

%if %{with clang}
export CC=clang
export CXX=clang++
%endif
export CFLAGS="%{optflags}"
export CXXFLAGS="%{optflags}"

tools/gn/bootstrap/bootstrap.py -v --gn-gen-args "${myconf_gn}"
# GN does not support passing cflags:
#  https://bugs.chromium.org/p/chromium/issues/detail?id=642016
out/Release/gn gen --args="${myconf_gn}" out/Release

%if 0%{?packman_bs}
    ninja -v -j $ninjaproc -C out/Release third_party/ffmpeg
%else
    ninja -v -j $ninjaproc -C out/Release chrome chrome_sandbox 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
    mkdir -p %{buildroot}%{_bindir}
    install -m 755 %{SOURCE100} %{buildroot}%{_bindir}/chromium

    # x86_64 capable systems need this
    sed -i "s|%{_libexecdir}/chromium|%{_libdir}/chromium|g" %{buildroot}%{_bindir}/chromium

    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
    # ffmpeg
    cp -av libffmpeg.so %{buildroot}%{_libdir}/chromium/

    # 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}/chromium
    ln -s ../browser-plugins plugins

    # Install the master_preferences file
    mkdir -p %{buildroot}%{_sysconfdir}/chromium
    install -m 0644 %{SOURCE30} %{buildroot}%{_sysconfdir}/chromium
    install -m 0644 %{SOURCE31} %{buildroot}%{_sysconfdir}/chromium

    # Set the right attributes
    chmod 755 %{buildroot}%{_libdir}/chromium/xdg-settings
    chmod 755 %{buildroot}%{_libdir}/chromium/xdg-mime
%endif

%if !0%{?packman_bs}
%verifyscript
%verify_permissions -e %{_libexecdir}/chrome_sandbox

%post
%icon_theme_cache_post
%desktop_database_post
%set_permissions %{_libexecdir}/chrome_sandbox
/sbin/ldconfig %{_libdir}/chromium

%postun
%icon_theme_cache_postun
%desktop_database_postun
/sbin/ldconfig %{_libdir}/chromium
%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}/chromium
%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/chromedriver
%{_bindir}/chromium

%files ffmpegsumo
%defattr(-,root,root,-)
%{_libdir}/chromium/libffmpeg.so

%files -n chromedriver
%defattr(-,root,root,-)
%{_libdir}/chromium/chromedriver
%endif

%changelog
openSUSE Build Service is sponsored by