LogoopenSUSE Build Service > Projects
Sign Up | Log In

View File chromium.spec of Package chromium (Project network:chromium)

#
# spec file for package chromium
#
# Copyright (c) 2015 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 chromium_no_dlopen 1
%define chromium_system_libs 0

Name:           chromium
Version:        41.0.2272.76
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
Source997:      courgette.tar.xz
Source998:      depot_tools.tar.xz
Source999:      gn-binaries.tar.xz
Provides:       chromium-based-browser = %{version}
Provides:       chromium-browser = %{version}
Provides:       browser(npapi)
Obsoletes:      chromium-browser < %{version}
Conflicts:      otherproviders(chromium-browser)
# There is no v8 for ppc and thus chromium won't run on ppc. For aarch64 certain buildrequires are missing (e.g. valgrind)
ExcludeArch:    aarch64 ppc ppc64 ppc64le

## Start Patches
# Many changes to the gyp systems so we can use system libraries
# 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
Patch4:         chromium-master-prefs-path.patch
# PATCH-FIX-OPENSUSE Fix some includes specifically for the GCC version used
Patch5:         chromium-gcc-fixes.patch
# PATCH-FIX-UPSTREAM Add more charset aliases
Patch6:         chromium-more-codec-aliases.patch
# PATCH-FIX-OPENSUSE Compile the sandbox with -fPIE settings
Patch7:         chromium-sandbox-pie.patch
# PATCH-FIX-OPENSUSE Adjust ldflags for better building
Patch8:         adjust-ldflags-no-keep-memory.patch
# PATCH-FIX-OPENSUSE no-clang-on-packman.diff - We can't use clang build flags on packman
Patch9:         no-clang-on-packman.diff

# archlinux arm enhancement patches
Patch100:       arm-webrtc-fix.patch
Patch101:       chromium-arm-r0.patch
Patch102:       skia.patch

BuildRequires:  alsa-devel
BuildRequires:  bison
BuildRequires:  cups-devel
BuildRequires:  desktop-file-utils
BuildRequires:  fdupes
BuildRequires:  flac-devel
BuildRequires:  flex
BuildRequires:  freetype2-devel
BuildRequires:  gcc
BuildRequires:  gcc-c++
BuildRequires:  gperf
BuildRequires:  hicolor-icon-theme
BuildRequires:  hunspell-devel
BuildRequires:  krb5
BuildRequires:  krb5-devel
BuildRequires:  libbz2-devel
BuildRequires:  libcap-devel
BuildRequires:  libdrm-devel
BuildRequires:  libelf-devel
BuildRequires:  libexpat-devel
BuildRequires:  libgcrypt-devel
BuildRequires:  libgnome-keyring-devel
BuildRequires:  libicu-devel >= 4.0
BuildRequires:  libpulse-devel

%if !0%{?packman_bs}
BuildRequires:  ninja
%endif
BuildRequires:  libdrm-devel
BuildRequires:  pam-devel
BuildRequires:  pciutils-devel
BuildRequires:  pkg-config
BuildRequires:  python
BuildRequires:  python-devel
BuildRequires:  python-xml
BuildRequires:  sqlite3-devel
BuildRequires:  update-desktop-files
BuildRequires:  util-linux
BuildRequires:  valgrind-devel
BuildRequires:  wdiff
BuildRequires:  perl(Switch)
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(libcrypto)
BuildRequires:  pkgconfig(libexif)
BuildRequires:  pkgconfig(libexif)
BuildRequires:  pkgconfig(libudev)
BuildRequires:  pkgconfig(libxslt)
BuildRequires:  pkgconfig(nspr) >= 4.9.5
BuildRequires:  pkgconfig(nss) >= 3.14
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)
%if 0%{?chromium_system_libs}
%if 0%{?suse_version} > 1230
BuildRequires:  libjpeg62-devel
%else
BuildRequires:  libjpeg-devel
%endif
BuildRequires:  perl-JSON
BuildRequires:  usbutils
BuildRequires:  yasm
BuildRequires:  pkgconfig(bzip2)
BuildRequires:  pkgconfig(libevent)
BuildRequires:  pkgconfig(libmtp)
BuildRequires:  pkgconfig(libpng)
BuildRequires:  pkgconfig(libusb-1.0)
BuildRequires:  pkgconfig(libxslt)
BuildRequires:  pkgconfig(opus)
BuildRequires:  pkgconfig(protobuf)
BuildRequires:  pkgconfig(speex)
%endif

Requires:       alsa
Requires:       ffmpegsumo
Requires:       hicolor-icon-theme
Requires:       update-alternatives
Requires:       xdg-utils

#Requirements to build a fully functional ffmpeg
# This can only be done on packman OBS
%if 0%{?packman_bs}
BuildRequires:  SDL-devel
BuildRequires:  dirac-devel >= 1.0.0
BuildRequires:  imlib2-devel
BuildRequires:  libdc1394
BuildRequires:  libdc1394-devel
BuildRequires:  libfaac-devel >= 1.28
BuildRequires:  libgsm
BuildRequires:  libgsm-devel
BuildRequires:  libjack-devel
BuildRequires:  libmp3lame-devel
BuildRequires:  libogg-devel
BuildRequires:  liboil-devel >= 0.3.15
BuildRequires:  libopencore-amr-devel
BuildRequires:  libtheora-devel >= 1.1
BuildRequires:  libvdpau-devel
BuildRequires:  libvorbis-devel
BuildRequires:  libvpx-devel
BuildRequires:  libx264-devel
BuildRequires:  libxvidcore-devel
BuildRequires:  ncurses-devel
BuildRequires:  schroedinger-devel
BuildRequires:  slang-devel
BuildRequires:  texinfo
%endif

Requires(pre):  permissions

Recommends:     Chromium-password = %{version}
Obsoletes:      %{name}-suid-helper < %{version}
Provides:       %{name}-suid-helper = %{version}

# Recommends the chromium-ffmpeg library (available from packman)
Recommends:     chromium-ffmpeg

%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 ffmpeg support to Chromium
License:        BSD-3-Clause and LGPL-2.1+
Group:          Productivity/Networking/Web/Browsers
Provides:       ffmpegsumo = %{version}
Conflicts:      otherproviders(ffmpegsumo)
Requires:       %{name}

%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
Supplements:    packageand(chromium:kdebase4-session)
Conflicts:      otherproviders(chromium-password)
Provides:       chromium-password = %{version}
Requires(post): chromium = %{version}

%description desktop-kde
By using the openSUSE update-alternatives the password store for Chromium is changed to utilize
KDE's kwallet. Please be aware that by this change the old password are no longer accessible and
are also not converted to kwallet.

%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
Supplements:    packageand(chromium:gnome-session)
Conflicts:      otherproviders(chromium-password)
Provides:       chromium-password = %{version}
Requires(post): chromium = %{version}
Requires:       libgnome

%description desktop-gnome
By using the openSUSE update-alternatives the password store for Chromium is changed to utilize
Gnome's Keyring. Please be aware that by this change the old password are no longer accessible and
are also not converted to Gnome's Keyring.

%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 lib for Google's opens source browser Chromium
License:        BSD-3-Clause and LGPL-2.1+
Group:          Productivity/Networking/Web/Browsers
Provides:       ffmpegsumo = %{version}
Conflicts:      otherproviders(ffmpegsumo)
Requires:       %{name}

%description ffmpeg
FFMPEG library built from the chromium sources.
%endif

%prep
%setup -q -n %{name}-%{version} -a 999 -a 998

%patch1 -p0
%patch6 -p0
%patch4 -p0
%patch5 -p0
%patch7 -p0
%patch8 -p0
%if 0%{?packman_bs}
%patch9 -p0
%endif

#Upstream fixes

# archlinux arm enhancements
%patch100 -p0
%patch101 -p0
%patch102 -p0

export PATH="$PATH":`pwd`/depot_tools

%build

PARSED_OPT_FLAGS=`echo \'%{optflags} -D_GNU_SOURCE\' | sed "s/ /',/g" | sed "s/',/', '/g"`
#'
sed -i "s|'-O<(release_optimize)'|$PARSED_OPT_FLAGS|g" build/common.gypi

myconf+="-Dwerror=
                     -Dlinux_sandbox_chrome_path=%{_libdir}/chromium/chromium
                     -Duse_openssl=0
                     -Duse_system_ffmpeg=0
                     -Dbuild_ffmpegsumo=1
                     -Dproprietary_codecs=1
                     -Dremove_webcore_debug_symbols=1
                     -Dlogging_like_official_build=1
                     -Dlinux_fpic=1 
                     -Ddisable_sse2=1
                     -Dcomponent=shared_library
                     -Dclang=0
                     -Dtoolkit_uses_gtk=0"

%if 0%{?packman_bs}
myconf+=" -Dffmpeg_branding=Chrome"
%endif

myconf+=" -Ddisable_nacl=1"

%ifarch x86_64
myconf+=" -Dtarget_arch=x64"
%endif

%ifarch %arm
myconf+=" -Dtarget_arch=arm
          -Dsysroot=
          -Ddisable_nacl=1"
%endif
%ifarch armv6hl armv7hl
myconf+=" -Darm_float_abi=hard"
%endif

%if 0%{?chromium_system_libs}
myconf+=" -Duse_system_flac=1
          -Duse_system_speex=1
          -Duse_system_libexif=1 
                     -Duse_system_libevent=1 
                     -Duse_system_libmtp=1
                     -Duse_system_opus=1 
                     -Duse_system_bzip2=1 
                     -Duse_system_harfbuzz=1 
                     -Duse_system_libjpeg=1 
                     -Duse_system_libpng=1 
                     -Duse_system_libxslt=1 
                     -Duse_system_libyuv=1 
                     -Duse_system_nspr=1 
                     -Duse_system_protobuf=1 
                     -Duse_system_yasm=1"

%if 0%{?suse_version} > 1230
myconf+=" -Duse_system_icu=1"
%endif

%endif

%if 0%{?chromium_no_dlopen}
myconf+=" -Duse_pulseaudio=1 
                     -Dlinux_link_libpci=1 
                     -Dlinux_link_gnome_keyring=1
                     -Dlinux_link_gsettings=1 
                     -Dlinux_link_libgps=1"

%ifnarch %ix86
#myconf+=" -Dlinux_link_kerberos=1" 
%endif

%endif

%if 0%{?suse_version} > 1310
myconf+=" -Dpython_ver=2.7"
%ifarch x86_64
myconf+=" -Dsystem_libdir=lib64"
%endif
%endif

myconf+=" -Djavascript_engine=v8 "

myconf+=" -Dlinux_use_gold_binary=0 
          -Dlinux_use_gold_flags=0"

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

myconf+=" -Dgoogle_api_key=AIzaSyD1hTe85_a14kr1Ks8T3Ce75rvbR1_Dx7Q 
          -Dgoogle_default_client_id=4139804441.apps.googleusercontent.com 
          -Dgoogle_default_client_secret=KDTRKEZk2jwT_7CDpcmMA--P"

build/linux/unbundle/replace_gyp_files.py $myconf

%if 0%{?packman_bs}
    ./build/gyp_chromium -f make third_party/ffmpeg/ffmpeg.gyp --no-parallel --depth . $myconf
    cd third_party/ffmpeg
    make -r %{?_smp_mflags} -f ffmpeg.Makefile BUILDTYPE=Release V=1
%else
    export GYP_GENERATORS='ninja'
    ./build/gyp_chromium build/all.gyp --depth .  $myconf

    ninja -C out/Release chrome

    # Build the required SUID_SANDBOX helper
    ninja -C out/Release chrome_sandbox

    # Build the ChromeDriver test suite
    ninja -C out/Release chromedriver
%endif

%install
mkdir -p %{buildroot}%{_libdir}/chromium/
%if 0%{?packman_bs}
	pushd third_party/ffmpeg/out/Release
	cp -a lib*.so %{buildroot}%{_libdir}/chromium/
	popd
%else
	%ifarch x86_64
	mkdir -p %{buildroot}%{_prefix}/lib/
	%endif
	install -m 755 %{SOURCE100} %{buildroot}%{_libdir}/chromium/chromium-generic

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

	#update the password-store settings for each alternative
	sed "s|password-store=basic|password-store=kwallet|g" %{buildroot}%{_libdir}/chromium/chromium-generic > %{buildroot}%{_libdir}/chromium/chromium-kde
	sed "s|password-store=basic|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 /etc/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 /usr/lib
	cp -a chrome_sandbox %{buildroot}%{_prefix}/lib/
	ln -s -f %{_prefix}/lib/chrome_sandbox %{buildroot}/%{_libdir}/chromium/chrome-sandbox

	cp -a *.pak locales remoting_locales xdg-mime icudtl.dat %{buildroot}%{_libdir}/chromium/
	cp -a chromedriver %{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
    cp -a *_blob.bin %{buildroot}%{_libdir}/chromium/
	%fdupes %{buildroot}%{_mandir}/man1/

	# chromium components
	mkdir -p %{buildroot}%{_libdir}/chromium/lib/
	cp -av lib/*.so %{buildroot}%{_libdir}/chromium/lib/

	#libffmpegsumo
	cp -a libffmpegsumo.so %{buildroot}%{_libdir}/chromium/
	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 /etc/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

%clean
rm -rf %{buildroot}

%pre
if [ -f %{_bindir}/chromium -a ! -L %{_bindir}/chromium ] ; then rm -f %{_bindir}/chromium
fi

# Add snipplets to update the GTK cache on package install.

%verifyscript
%verify_permissions -e %{_prefix}/lib/chrome_sandbox 

%post
%icon_theme_cache_post
%desktop_database_post
"%_sbindir/update-alternatives" --install %{_bindir}/chromium chromium %{_libdir}/chromium/chromium-generic 10
%set_permissions %{_prefix}/lib/chrome_sandbox

%postun
%icon_theme_cache_postun
%desktop_database_postun
if [ $1 -eq 0 ]; then
update-alternatives --remove-all chromium
fi

%post desktop-kde 
if [ ! -e /.buildenv ]; then
"%_sbindir/update-alternatives" --install %{_bindir}/chromium chromium %{_libdir}/chromium/chromium-kde 15
"%_sbindir/update-alternatives" --auto chromium
fi

%preun desktop-kde
if [ $1 -eq 0 -a ! -e /.buildenv ]; then
"%_sbindir/update-alternatives" --remove chromium %{_libdir}/chromium/chromium-kde
"%_sbindir/update-alternatives" --auto chromium
fi

%post desktop-gnome
if [ ! -e /.buildenv ]; then
"%_sbindir/update-alternatives" --install %{_bindir}/chromium chromium %{_libdir}/chromium/chromium-gnome 15
"%_sbindir/update-alternatives" --auto chromium
fi

%postun desktop-gnome
if [ $1 -eq 0 -a ! -e /.buildenv ]; then
"%_sbindir/update-alternatives" --remove chromium %{_libdir}/chromium/chromium-gnome
"%_sbindir/update-alternatives" --auto chromium
fi

# Files!

%if 0%{?packman_bs}

%files ffmpeg
%defattr(-,root,root,-)
%dir %{_libdir}/chromium
%{_libdir}/chromium/lib*.so

%else

%files
%defattr(-,root,root,-)
%verify(not mode) %{_prefix}/lib/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/
%{_prefix}/lib/chrome_sandbox
%exclude %{_libdir}/chromium/libffmpegsumo.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/libffmpegsumo.so

%files desktop-kde
%attr(755, root, root) %{_libdir}/chromium/chromium-kde

%files desktop-gnome
%attr(755, root, root) %{_libdir}/chromium/chromium-gnome

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

%changelog