_use_nacl=1
_use_libpdf=1
_use_pepperflash=1
_use_clang=0
pkgname='chromium-dev'
pkgver='25.0.1323.1'
_toolchains_rev="10235"
pkgrel='1'
pkgdesc='The open-source project behind Google Chrome (Dev channel)'
arch=('i686' 'x86_64')
url='http://www.chromium.org/'
license=('BSD')
depends=('dbus-glib' 'alsa-lib' 'hicolor-icon-theme' 'libevent' 'libxss' 'nss' 'libxslt' 'udev' 'desktop-file-utils' 'gtk2' 'flac' 'libpng' 'libjpeg'
'icu' 'libusb' 'expat' 'libvpx' 'libwebp' 'minizip' 'speex')
makedepends=('python2' 'gperf' 'yasm' 'mesa' 'bison' 'xdg-utils' 'elfutils' 'subversion' 'python2-simplejson')
install="${pkgname}.install"
backup=('etc/chromium-dev/default')
noextract=()
source=("http://commondatastorage.googleapis.com/chromium-browser-official/chromium-${pkgver}.tar.bz2"
"${pkgname}.desktop"
"${pkgname}.sh"
'default'
'gcc-4.7.diff'
'chromium-ppapi-r0.patch'
'chromium-20.0.1132.57-glib-2.16-use-siginfo_t.patch'
'pulse_audio_fix.patch')
sha1sums=('de32f7d5a2b44e8c54ed1733903c14a56f8e378b'
'004d7496d7e08d96bb884748a9e55cd71cf78cee'
'54c53502c26456c9735e67314b2d61e29477438e'
'd6d2da45c0729dfd1c606a15c8ffb7591dbc7b44'
'e25739be0c7e6d14c2675d3ed4dcd99f63f4661c'
'c07d63888e5b72ecb598e45645cdd5c05d8e0c89'
'770065c9e6c68ee7da2a4205cca23b252102cfea'
'ed61977e494b6f23b9639f80bad15447c63b5554')
_before_srcdir="$(pwd)"
if [ "${_use_nacl}" = "1" ]; then
_naclsdk_path="http://gsdview.appspot.com/nativeclient-archive2/toolchain/${_toolchains_rev}"
_toolchain_path="http://gsdview.appspot.com/nativeclient-archive2/x86_toolchain/r${_toolchains_rev}"
_naclsdk_nacl_sha1sum=$(curl -sL "${_naclsdk_path}/naclsdk_linux_x86.tgz.sha1hash")
_naclsdk_pnacl_sha1sum=$(curl -sL "${_naclsdk_path}/naclsdk_pnacl_linux_x86.tgz.sha1hash")
_naclsdk_toolchain_sha1sum=$(curl -sL "${_toolchain_path}/toolchain_linux_x86.tar.bz2.sha1hash")
source+=("naclsdk_nacl-${_toolchains_rev}.tgz"::"${_naclsdk_path}/naclsdk_linux_x86.tgz"
"naclsdk_pnacl-${_toolchains_rev}.tgz"::"${_naclsdk_path}/naclsdk_pnacl_linux_x86.tgz"
"naclsdk_toolchain-${_toolchains_rev}.tar.bz2"::"${_toolchain_path}/toolchain_linux_x86.tar.bz2")
sha1sums+=("${_naclsdk_nacl_sha1sum}"
"${_naclsdk_pnacl_sha1sum}"
"${_naclsdk_toolchain_sha1sum}")
noextract+=("naclsdk_nacl-${_toolchains_rev}.tgz"
"naclsdk_pnacl-${_toolchains_rev}.tgz"
"naclsdk_toolchain-${_toolchains_rev}.tar.bz2")
fi
if [ "${_use_pepperflash}" = "1" ] || [ "${_use_libpdf}" = "1" ]; then
[ "$CARCH" = "i686" ] && _rpm_arch='i386'
[ "$CARCH" = "x86_64" ] && _rpm_arch='x86_64'
rm -f filelists.xml
curl -sL "http://dl.google.com/linux/chrome/rpm/stable/${_rpm_arch}/repodata/filelists.xml.gz" | gzip -d > filelists.xml
_rpm_build="$(grep -e "unstable" filelists.xml | cut -d '"' -f12 | head -n 1)"
_rpm_sha1sum="$(grep -e "unstable" filelists.xml | cut -d '"' -f2 | head -n 1)"
rm -f filelists.xml
source+=("http://dl.google.com/linux/chrome/rpm/stable/${_rpm_arch}/google-chrome-unstable-${pkgver}-${_rpm_build}.${_rpm_arch}.rpm")
sha1sums+=("${_rpm_sha1sum}")
noextract+=("google-chrome-unstable-${pkgver}-${_rpm_build}.${_rpm_arch}.rpm")
fi
_use_gnome=0
if [ -x /usr/bin/gconftool-2 ]; then
depends+=('gconf' 'libgnome-keyring')
_use_gnome=1
fi
_use_pulseaudio=0
if [ -x /usr/bin/pulseaudio ]; then
depends+=('libpulse')
_use_pulseaudio=1
fi
if [ "${_use_pepperflash}" = "1" ] && [ "${_use_nacl}" = "0" ]; then
msg "To use PepperFlash you need to build chromium with NaCl!. Disabling PepperFlash support"
_use_pepperflash=0
fi
build() {
cd "${srcdir}"
rm -rf chromium-build
mv "chromium-${pkgver}" chromium-build
cd chromium-build
if [ "${_use_clang}" = "1" ]; then
msg2 "Download clang"
sh ./tools/clang/scripts/update.sh
fi
msg "Configure to save configuration in ~/.config/${pkgname}"
sed -e "s|'filename': 'chromium-browser'|'filename': '${pkgname}'|" -e "s|'confdir': 'chromium'|'confdir': '${pkgname}'|" -i chrome/chrome_exe.gypi
sed -e "s|config_dir.Append(\"chromium\")|config_dir.Append(\"${pkgname}\")|" -e "s|config_dir.Append(\"chrome-frame\")|config_dir.Append(\"chrome-frame-${pkgname#chromium-}\")|" -i chrome/common/chrome_paths_linux.cc
msg "Remove unnecesary components"
find third_party -type f \! -iname '*.gyp*' \
\! -path 'third_party/angle/*' \
\! -path 'third_party/cacheinvalidation/*' \
\! -path 'third_party/cld/*' \
\! -path 'third_party/cros_system_api/*' \
\! -path 'third_party/ffmpeg/*' \
\! -path 'third_party/flac/flac.h' \
\! -path 'third_party/flot/*' \
\! -path 'third_party/gpsd/*' \
\! -path 'third_party/harfbuzz/*' \
\! -path 'third_party/harfbuzz-ng/*' \
\! -path 'third_party/hunspell/*' \
\! -path 'third_party/hyphen/*' \
\! -path 'third_party/iccjpeg/*' \
\! -path 'third_party/jsoncpp/*' \
\! -path 'third_party/khronos/*' \
\! -path 'third_party/leveldatabase/*' \
\! -path 'third_party/libjingle/*' \
\! -path 'third_party/libphonenumber/*' \
\! -path 'third_party/libsrtp/*' \
\! -path 'third_party/libusb/libusb.h' \
\! -path 'third_party/libva/*' \
\! -path 'third_party/libvpx/libvpx.h' \
\! -path 'third_party/libxml/chromium/*' \
\! -path 'third_party/libXNVCtrl/*' \
\! -path 'third_party/libyuv/*' \
\! -path 'third_party/llvm-build/*' \
\! -path 'third_party/lss/*' \
\! -path 'third_party/mesa/*' \
\! -path 'third_party/modp_b64/*' \
\! -path 'third_party/mongoose/*' \
\! -path 'third_party/mt19937ar/*' \
\! -path 'third_party/npapi/*' \
\! -path 'third_party/openmax/*' \
\! -path 'third_party/opus/*' \
\! -path 'third_party/ots/*' \
\! -path 'third_party/ply/*' \
\! -path 'third_party/protobuf/*' \
\! -path 'third_party/pywebsocket/*' \
\! -path 'third_party/qcms/*' \
\! -path 'third_party/re2/*' \
\! -path 'third_party/scons-2.0.1/*' \
\! -path 'third_party/sfntly/*' \
\! -path 'third_party/skia/*' \
\! -path 'third_party/smhasher/*' \
\! -path 'third_party/speex/speex.h' \
\! -path 'third_party/sqlite/*' \
\! -path 'third_party/tcmalloc/*' \
\! -path 'third_party/tlslite/*' \
\! -path 'third_party/trace-viewer/*' \
\! -path 'third_party/undoview/*' \
\! -path 'third_party/v8-i18n/*' \
\! -path 'third_party/v8/*' \
\! -path 'third_party/webdriver/*' \
\! -path 'third_party/webgl_conformance/*' \
\! -path 'third_party/WebKit/*' \
\! -path 'third_party/webrtc/*' \
\! -path 'third_party/widevine/*' \
-delete
msg "Misc patches"
patch --silent -p0 -E -i "${srcdir}/gcc-4.7.diff"
patch --silent -p1 -E -i "${srcdir}/chromium-20.0.1132.57-glib-2.16-use-siginfo_t.patch"
sed -i 's|glib/gutils.h|glib.h|' "${srcdir}/chromium-build/ui/base/l10n/l10n_util.cc"
patch --silent -p1 -E -i "${srcdir}/pulse_audio_fix.patch"
if [[ ! -e chrome/test/data/nacl/nacl_test_data.gyp ]]; then
mkdir -p chrome/test/data/nacl
touch chrome/test/data/nacl/nacl_test_data.gyp
echo "{
'targets': [
{
'target_name': 'nacl_tests',
'type': 'none',
},
],
}" > chrome/test/data/nacl/nacl_test_data.gyp
fi
echo > "${srcdir}/flapper_version.h"
msg "Use python2"
rm -rf "${srcdir}/python"
mkdir "${srcdir}/python"
ln -s /usr/bin/python2 "${srcdir}/python/python"
export PATH="${srcdir}/python":$PATH
find . -type f -exec sed -i -r -e 's|/usr/bin/python$|&2|g' -e 's|(/usr/bin/python2)\.4$|\1|g' {} +
if [ "${_use_nacl}" = 1 ]; then
msg "Prepare NaCl SDK"
mkdir native_client/toolchain/.tars
ln -s "${srcdir}/naclsdk_nacl-${_toolchains_rev}.tgz" "native_client/toolchain/.tars/naclsdk_linux_x86.tgz"
ln -s "${srcdir}/naclsdk_pnacl-${_toolchains_rev}.tgz" "native_client/toolchain/.tars/naclsdk_pnacl_linux_x86.tgz"
ln -s "${srcdir}/naclsdk_toolchain-${_toolchains_rev}.tar.bz2" "native_client/toolchain/.tars/toolchain_linux_x86.tar.bz2"
patch --silent -p0 -E -i "${srcdir}/chromium-ppapi-r0.patch"
fi
msg "Building Chromium..."
[ "${CARCH}" = "i686" ] && _chromium_arch='ia32'
[ "${CARCH}" = "x86_64" ] && _chromium_arch='x64'
export -n CFLAGS CXXFLAGS
CFLAGS+=' -Wno-c++0x-compat'
GYP_DEFINES="\
target_arch="${_chromium_arch}" \
werror= \
no_strict_aliasing=1 \
linux_sandbox_path="/usr/lib/${pkgname}/chromium-sandbox" \
linux_sandbox_chrome_path="/usr/lib/${pkgname}/chromium" \
release_extra_cflags=\""${CFLAGS}"\" \
ffmpeg_branding=Chrome \
proprietary_codecs=1 \
use_system_bzip2=1 \
use_system_flac=1 \
use_system_icu=1 \
use_system_libevent=1 \
use_system_libexpat=1 \
use_system_libjpeg=1 \
use_system_libpng=1 \
use_system_libusb=1
use_system_libwebp=1 \
use_system_libxml=1 \
use_system_libxslt=1 \
use_system_minizip=1 \
use_system_hunspell=0 \
use_system_libsrtpd=0 \
use_system_opus=0 \
use_system_speex=1 \
use_system_sqlite=0 \
use_system_ssl=0 \
use_system_v8=0 \
use_system_libvpx=1 \
use_system_xdg_utils=1 \
use_system_yasm=1 \
use_system_zlib=1 \
use_gconf="${_use_gnome}" \
use_gnome_keyring="${_use_gnome}" \
use_pulseaudio="${_use_pulseaudio}" \
linux_link_gnome_keyring="${_use_gnome}" \
linux_strip_binary=1 \
remove_webcore_debug_symbols=1 \
linux_use_gold_binary=0 \
linux_use_gold_flags=0 \
linux_use_tcmalloc=0 \
linux_link_gsettings=1 \
flapper_version_h_file="${srcdir}/flapper_version.h" \
disable_sse2=1 \
"
[ "${_use_nacl}" = "0" ] && GYP_DEFINES+="disable_nacl=1 "
if [ "${_use_clang}" = "1" ]; then
GYP_DEFINES+="clang=1 clang_use_chrome_plugins=1 "
else
GYP_DEFINES+="gcc_version=47 "
fi
GYP_DEFINES+="build_ffmpegsumo=1 "
export GYP_DEFINES
msg2 "Building build project..."
build/gyp_chromium -f make --depth=. build/all.gyp
make BUILDTYPE=Release chrome chrome_sandbox chromedriver
}
package() {
cd "${srcdir}/chromium-build"
_chromium_home="${pkgdir}/usr/lib/${pkgname}"
install -d "${_chromium_home}"
install -d "${pkgdir}/etc/chromium-dev"
msg "Packaging ${pkgname}"
install -Dm755 out/Release/chrome "${_chromium_home}/chromium"
install -Dm4755 -o root -g root out/Release/chrome_sandbox "${_chromium_home}/chromium-sandbox"
install -Dm755 out/Release/chromedriver "${_chromium_home}/chromiumdriver"
install -Dm644 out/Release/{chrome,chrome_100_percent,chrome_remote_desktop,content_resources,resources}.pak "${_chromium_home}/"
cp -a out/Release/locales "${_chromium_home}"/
install -Dm644 out/Release/chrome.1 "${pkgdir}/usr/share/man/man1/${pkgname}.1"
install -Dm644 "${srcdir}/${pkgname}.desktop" "${pkgdir}/usr/share/applications/${pkgname}.desktop"
for _size in 16 22 24 32 48 128 256; do
case ${_size} in
16|32) branding="chrome/app/theme/default_100_percent/chromium" ;;
*) branding="chrome/app/theme/chromium" ;;
esac
install -Dm644 "${branding}/product_logo_${_size}.png" "${pkgdir}/usr/share/icons/hicolor/${_size}x${_size}/apps/${pkgname}.png"
done
install -Dm755 "${srcdir}/${pkgname}.sh" "${pkgdir}/usr/bin/${pkgname}"
install -Dm644 LICENSE "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE"
install -Dm644 "${srcdir}/default" "${pkgdir}/etc/chromium-dev/default"
install -Dm775 out/Release/libffmpegsumo.so "${_chromium_home}/"
if [ "${_use_nacl}" = 1 ]; then
msg2 "Adding NaCl components"
install -Dm755 out/Release/libppGoogleNaClPluginChrome.so "${_chromium_home}/libppGoogleNaClPluginChrome.so"
[ "${CARCH}" = "i686" ] && install -Dm755 out/Release/nacl_irt_x86_32.nexe "${_chromium_home}/nacl_irt_x86_32.nexe"
[ "${CARCH}" = "x86_64" ] && install -Dm755 out/Release/nacl_irt_x86_64.nexe "${_chromium_home}/nacl_irt_x86_64.nexe"
install -Dm755 out/Release/nacl_helper{,_bootstrap} "${_chromium_home}"/
fi
if [ "${_use_pepperflash}" = "1" ]; then
msg2 "Adding PepperFlash"
cd "${srcdir}"
bsdtar -xf "google-chrome-unstable-${pkgver}-${_rpm_build}.${_rpm_arch}.rpm" opt/google/chrome/PepperFlash
install -dm755 "${_chromium_home}/PepperFlash"
for i in "${srcdir}/opt/google/chrome/PepperFlash/"*; do install -m644 "$i" "${_chromium_home}/PepperFlash"; done
chmod 775 "${_chromium_home}/PepperFlash/libpepflashplayer.so"
_flash_ver="$(cat "${_chromium_home}/PepperFlash/manifest.json" | grep version | sed 's|[a-z,": ]*||g')"
sed -e "s|use_pepperflash=0|use_pepperflash=1|" -e "s|version=0|version=${_flash_ver}|" -i "${_before_srcdir}/${pkgname}.install"
rm -fr "${srcdir}/opt"
fi
if [ "${_use_libpdf}" = "1" ]; then
msg2 "Adding libpdf"
cd "${srcdir}"
bsdtar -xf "google-chrome-unstable-${pkgver}-${_rpm_build}.${_rpm_arch}.rpm" opt/google/chrome/libpdf.so
install -m755 "${srcdir}/opt/google/chrome/libpdf.so" "${_chromium_home}/libpdf.so"
rm -rf "${srcdir}/opt"
fi
}