hasufell-repository/packages/net-www/exlibs/inox.exlib

592 lines
20 KiB
Bash

# Copyright 2009, 2010 Elias Pipping <pipping@exherbo.org>
# Copyright 2009 Heiko Przybyl <zuxez@cs.tu-berlin.de>
# Copyright 2016 Timo Gurr <tgurr@exherbo.org>
# Copyright 2016 Julian Ospald <hasufell@posteo.de>
# Distributed under the terms of the GNU General Public License v2
# You'll find new releases here:
# - http://omahaproxy.appspot.com/viewer
# - http://googlechromereleases.blogspot.com
CHROMIUM_CHANNEL=stable
MY_PN=chromium
MY_PNV=${MY_PN}-${PV}
require freedesktop-desktop gtk-icon-cache python [ has_lib=false ] toolchain-funcs
myexparam patchset=
exparam -v PATCHSET patchset
if [[ -z $(exparam patchset) ]]; then
die "patchset exparam needs to be set!"
fi
export_exlib_phases pkg_setup src_prepare src_configure src_compile src_test src_install pkg_postinst pkg_postrm
SUMMARY="Privacy enhanced Google Chrome"
DESCRIPTION="Inox patchset tries to provide a minimal Chromium based browser
with focus on privacy by disabling data transmission to Google."
HOMEPAGE="https://www.chromium.org/Home https://github.com/gcarq/inox-patchset"
DOWNLOADS="
https://storage.googleapis.com/chromium-browser-official/${MY_PNV}.tar.xz
https://gsdview.appspot.com/chromium-browser-official/${MY_PNV}.tar.xz
https://github.com/gcarq/inox-patchset/archive/${PATCHSET}.tar.gz -> inox-patches-${PATCHSET}.tar.gz
"
LICENCES="
BSD-3 [[ note = [ chromium itself ] ]]
Apache-2.0 [[ note = [ skia ] ]]
BSD-2 [[ note = [ bsdiff, bspatch ] ]]
BSD-3 [[ note = [ dtoa, jscre, modp_b64, v8, webkit ] ]]
GPL-2 [[ note = [ hunspell, 'Mozilla interface to Java Plugin APIs', npapi, nspr, nss ] ]]
LGPL-2 [[ note = [ webkit ] ]]
LGPL-2.1 [[ note = [ ffmpeg, hunspell, 'Mozilla interface to Java Plugin APIs', npapi, nspr,
nss, webkit ] ]]
MPL-1.1 [[ note = [ hunspell, 'Mozilla interface to Java Plugin APIs', npapi, nspr, nss ] ]]
MIT [[ note = [ harfbuzz ] ]]
public-domain [[ note = [ lzma_sdk, sqlite ] ]]
GPL-3 [[ note = [ inox patchset ] ]]
"
SLOT="0"
MYOPTIONS="
bindist
cups
gconf
keyring [[ description = [ Store passwords using GNOME Keyring ] ]]
pulseaudio
platform:
amd64
x86
x86_cpu_features:
sse2
( providers: jpeg-turbo )
( providers: eudev systemd ) [[ number-selected = exactly-one ]]
"
# http://crbug.com/62803 tracks the addition of a use_openssl option. Once that bug is closed,
# use_openssl=1 can be passed; dev-libs/{nss,nspr} will no longer be needed. Note that that flag
# currently does not use system openssl but a bundled version from third_party/openssl!
# There is use_system_ssl for that
# TODO: GN build with system speech dispatcher and libevent
# app-speech/speechd[>=0.8]
# dev-libs/libevent[>=1.4.13]
# media-libs/libvpx[>=1.6.0-r1]
DEPENDENCIES="
build:
dev-lang/node
dev-lang/python:*[>=2.5&<3]
dev-lang/yasm
dev-perl/Switch
dev-python/beautifulsoup4[python_abis:2.7]
dev-python/html5lib[python_abis:2.7]
dev-python/simplejson[python_abis:2.7]
dev-scm/git [[ note = [ https://bugs.gentoo.org/show_bug.cgi?id=593476 ] ]]
dev-util/gperf[>=3.0.4]
sys-devel/bison
sys-devel/ninja
build+run:
app-arch/gzip[>=1.8]
app-arch/snappy
dev-libs/atk
dev-libs/dbus-glib:1[>=0.84]
dev-libs/expat
dev-libs/glib:2[>=2.26] [[ note = [ for gsettings ] ]]
dev-libs/icu:=
dev-libs/libxml2:2.0[>=2.6.32]
dev-libs/libxslt[>=1.1.26]
dev-libs/nspr[>=4.0]
dev-libs/nss[>=3.12.3] [[ note = [ see base/nss_util.cc for the version requirement ] ]]
media-libs/flac
media-libs/fontconfig
media-libs/freetype:2
media-libs/libpng:=[>=1.2.37]
media-libs/libwebp:=[>=0.4]
media-libs/opus[>=1.1-r1]
net-libs/libsrtp
sys-apps/dbus
sys-apps/pciutils
providers:eudev? ( sys-apps/eudev )
providers:systemd? ( sys-apps/systemd )
sys-libs/zlib[>=1.2.7-r1]
sys-sound/alsa-lib
virtual/usb:1
x11-libs/cairo[X]
x11-libs/gdk-pixbuf:2.0
x11-libs/harfbuzz[>=1.4.2]
x11-libs/libX11
x11-libs/libxcb
x11-libs/libXScrnSaver
x11-libs/libXcomposite
x11-libs/libXcursor
x11-libs/libXdamage
x11-libs/libXext
x11-libs/libXfixes
x11-libs/libXi
x11-libs/libXrandr
x11-libs/libXrender
x11-libs/libXtst
x11-libs/pango
cups? (
dev-libs/libgcrypt
net-print/cups
)
gconf? ( gnome-platform/GConf:2 )
keyring? ( gnome-desktop/libgnome-keyring:1 )
providers:jpeg-turbo? ( media-libs/libjpeg-turbo )
pulseaudio? ( media-sound/pulseaudio )
run:
x11-libs/gtk+:3
cups? ( x11-libs/gtk+:3[cups] )
recommendation:
fonts/corefonts [[ description = [ Needed to display some websites ] ]]
x11-apps/xdg-utils [[ description = [ Set as default browser. Use application launchers for downloaded files (only for Gnome/KDE/Xfce) ] ]]
suggestion:
gnome-desktop/adwaita-icon-theme [[ description = [ For the downloads tab ] ]]
"
WORK=${WORKBASE}/${MY_PNV}
DEFAULT_SRC_COMPILE_PARAMS=( chrome chrome_sandbox )
cxx_is_gxx() {
[[ ${CXX} == *g++* ]] && [[ ${CXX} != *clang* ]]
}
eninja() {
edo ninja -j ${EXJOBS:-1} -v "$@"
}
inox_pkg_setup() {
export V=1
# For ffmpeg's linking
export LD="${CXX}"
exdirectory --allow /opt
}
inox_src_prepare() {
# odd upstream git versioning
edo rm -r "${WORKBASE}"/inox-patchset-${PATCHSET}/archive
# this one is unneded and doesn't apply cleanly
edo rm "${WORKBASE}"/inox-patchset-${PATCHSET}/*launcher-branding.patch
# fire up the inox patches
expatch "${WORKBASE}"/inox-patchset-${PATCHSET}/
default
# setup nodejs
edo mkdir -p third_party/node/linux/node-linux-x64/bin
edo ln -s /usr/host/bin/node third_party/node/linux/node-linux-x64/bin/node
local keeplibs=(
base/third_party/dmg_fp
base/third_party/dynamic_annotations
base/third_party/icu
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
breakpad/src/third_party/curl
chrome/third_party/mozilla_security_manager
courgette/third_party
net/third_party/mozilla_security_manager
net/third_party/nss
third_party/WebKit
third_party/analytics
third_party/angle
third_party/angle/src/common/third_party/numerics
third_party/angle/src/third_party/compiler
third_party/angle/src/third_party/libXNVCtrl
third_party/angle/src/third_party/murmurhash
third_party/angle/src/third_party/trace_event
third_party/boringssl
third_party/brotli
third_party/cacheinvalidation
third_party/catapult
third_party/catapult/third_party/polymer
third_party/catapult/third_party/py_vulcanize
third_party/catapult/third_party/py_vulcanize/third_party/rcssmin
third_party/catapult/third_party/py_vulcanize/third_party/rjsmin
third_party/catapult/tracing/third_party/d3
third_party/catapult/tracing/third_party/gl-matrix
third_party/catapult/tracing/third_party/jszip
third_party/catapult/tracing/third_party/mannwhitneyu
third_party/ced
third_party/cld_2
third_party/cld_3
third_party/cros_system_api
third_party/devscripts
third_party/dom_distiller_js
third_party/fips181
third_party/flatbuffers
third_party/flot
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/hunspell
third_party/iccjpeg
third_party/inspector_protocol
third_party/jinja2
third_party/jstemplate
third_party/khronos
third_party/leveldatabase
third_party/libXNVCtrl
third_party/libaddressinput
third_party/libjingle
third_party/libphonenumber
third_party/libsecret
third_party/libsrtp
third_party/libudev
third_party/libusb
third_party/libwebm
third_party/libxml/chromium
third_party/libyuv
third_party/lss
third_party/lzma_sdk
third_party/markupsafe
third_party/mesa
third_party/modp_b64
third_party/mt19937ar
third_party/node
third_party/node/node_modules/vulcanize/third_party/UglifyJS2
third_party/openh264
third_party/openmax_dl
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/lcms2-2.6
third_party/pdfium/third_party/libjpeg
third_party/pdfium/third_party/libopenjpeg20
third_party/pdfium/third_party/libpng16
third_party/pdfium/third_party/libtiff
third_party/pdfium/third_party/zlib_v128
third_party/ply
third_party/polymer
third_party/protobuf
third_party/protobuf/third_party/six
third_party/qcms
third_party/sfntly
third_party/skia
third_party/smhasher
third_party/sqlite
third_party/tcmalloc
third_party/usrsctp
third_party/web-animations-js
third_party/webdriver
third_party/webrtc
third_party/widevine
third_party/woff2
third_party/x86inc
third_party/zlib/google
url/third_party/mozilla
v8/src/third_party/valgrind
v8/third_party/inspector_protocol
)
# TODO: keep for GN builds
keeplibs+=(
base/third_party/libevent
third_party/adobe
third_party/speech-dispatcher
third_party/usb_ids
third_party/xdg-utils
third_party/yasm/run_yasm.py
)
# TODO: keep FFmpeg
keeplibs+=( third_party/ffmpeg )
# TODO: package re2
keeplibs+=( third_party/re2 )
# TODO: keep libvpx (58.0.3029.81 fails to compile with the current libvpx-1.6.1)
keeplibs+=( third_party/libvpx )
keeplibs+=( third_party/libvpx/source/libvpx/third_party/x86inc )
# remove some of the bundled libraries
edo build/linux/unbundle/remove_bundled_libraries.py "${keeplibs[@]}" --do-remove
# TODO: Find out how to properly do this for GN and/or report upstream
edo sed \
-e "s:pkg_config = \"\":pkg_config = \"$(exhost --tool-prefix)pkg-config\":g" \
-i build/config/linux/pkg_config.gni
# TODO: Find out how to properly do this for GN and/or report upstream
# Fix this for multiarch by adding appropriate symlinks here and adding this directory to
# the PATH
local dir=${WORKBASE}/symlinked-build-tools
edo mkdir -p ${dir}
# Build error: FAILED: x64/obj/third_party/brotli/libbrotli.a
edo ln -s /usr/host/bin/$(exhost --target)-ar ${dir}/ar
# Build error: FAILED: x64/obj/third_party/brotli/brotli/decode.o
edo ln -s /usr/host/bin/$(exhost --target)-cc ${dir}/gcc
# Build error: FAILED: x64/obj/third_party/brotli/bro/encode_parallel.o
edo ln -s /usr/host/bin/$(exhost --target)-c++ ${dir}/g++
# Build error: strip is hardcoded somewhere
edo ln -s /usr/host/bin/$(exhost --target)-strip ${dir}/strip
# Build error: FAILED: libGLESv2.so libGLESv2.so.TOC
edo ln -s /usr/host/bin/$(exhost --target)-readelf ${dir}/readelf
# and, they assume python is python2!
edo ln -s /usr/host/bin/python2 ${dir}/python
export PATH="${dir}:${PATH}"
}
inox_src_configure() {
# re2: not yet packaged
# libevent: https://bugs.gentoo.org/593458
# libvpx: 58.0.3029.81 fails to compile
# ffmpeg: unknown
local gn_system_libraries="
flac
harfbuzz-ng
icu
libjpeg
libpng
libwebp
libxml
libxslt
snappy
yasm
zlib
"
edo build/linux/unbundle/replace_gn_files.py --system-libraries ${gn_system_libraries}
local myconf_gn=""
export AR="${AR}"
export CC="${CC}"
export CXX="${CXX}"
export NM="${NM}"
# Define a custom toolchain for GN
myconf_gn+=" custom_toolchain=\"${FILES}/toolchain:default\""
# GN needs explicit config for Debug/Release as opposed to inferring it from build directory
myconf_gn+=" is_debug=false"
# Disable nacl, we can't build without pnacl (http://crbug.com/269560)
myconf_gn+=" enable_nacl=false"
# Trying to use gold results in linker crash
myconf_gn+=" use_gold=false use_sysroot=false linux_use_bundled_binutils=false"
# Don't try to build with Clang for now
myconf_gn+=" is_clang=false"
# Make sure that -Werror doesn't get added to CFLAGS by the build system.
# Depending on GCC version the warnings are different and we don't want
# the build to fail because of that.
myconf_gn+=" treat_warnings_as_errors=false"
# Disable fatal linker warnings, Gentoo bug 506268
myconf_gn+=" fatal_linker_warnings=false"
myconf_gn+=" fieldtrial_testing_like_official_build=true"
# FFmpeg handling
ffmpeg_branding="$(option bindist Chromium Chrome)"
myconf_gn+=" proprietary_codecs=$(option bindist false true)"
myconf_gn+=" ffmpeg_branding=\"${ffmpeg_branding}\""
# Options
# TODO: link_pulseaudio=true for GN
myconf_gn+=" enable_widevine=true"
myconf_gn+=" use_cups=$(option cups true false)"
myconf_gn+=" use_gconf=$(option gconf true false)"
myconf_gn+=" use_gnome_keyring=$(option keyring true false)"
myconf_gn+=" use_pulseaudio=$(option pulseaudio true false)"
# hard disable kerberos support (requires heimdal)
myconf_gn+=" use_kerberos=false"
# GTK3 build
myconf_gn+=" use_gtk3=true"
# inox specific
myconf_gn+=" enable_hangout_services_extension=false"
myconf_gn+=" enable_rlz=false"
myconf_gn+=" enable_rlz_support=false"
myconf_gn+=" enable_remoting=false"
myconf_gn+=" enable_google_now=false"
myconf_gn+=" safe_browsing_mode=0"
myconf_gn+=" enable_webrtc=true" # prevents frequent crashes
myconf_gn+=" enable_hotwording=false"
myconf_gn+=" enable_print_preview=false"
# Update strings
edo third_party/libaddressinput/chromium/tools/update-strings.py
# 46.0.2490.86 fails with Exception: Failed to open test/data/webui/i18n_process_css_test.html while
# trying to flatten test/data/webui/i18n_process_css_test.html
edo touch chrome/test/data/webui/i18n_process_css_test.html
# GN configure
edo tools/gn/bootstrap/bootstrap.py -v --no-clean --gn-gen-args "${myconf_gn}"
edo out/Release/gn gen --args="${myconf_gn}" out/Release
}
inox_src_compile() {
eninja -C out/Release chrome chrome_sandbox
}
inox_src_test() {
local disabled_base_tests=(
FilePathTest.FromUTF8Unsafe_And_AsUTF8Unsafe # Needs a utf8 locale
LoggingTest.CheckStreamsAreLazy # does not like to be sandboxed
OutOfMemoryDeathTest.ViaSharedLibraries
ProcessMetricsTest.GetNumberOfThreads
RTLTest.WrapPathWithLTRFormatting
StatsTableTest.MultipleThreads # Flaky
# Need access to a running X11 server (and potentially more)
'MessageLoopTestTypeUI.*'
MessageLoopTest.IsType
'WaitableEventWatcherTest.*'
'MessagePumpGLibTest.*'
'MessagePumpLibeventTest.*'
'TimerTest.*'
# fails with "out of memory" even with plenty free mem
SecurityTest.MemoryAllocationRestrictionsNew
SecurityTest.MemoryAllocationRestrictionsNewArray
SecurityTest.NewOverflow
# Fails randomly on different systems
SysInfoTest.MaxSharedMemorySize
TraceEventTestFixture.TraceSampling
# 42.0.2311.135
ProcessUtilTest.CurrentDirectory
)
local disabled_crypto_tests=(
# 39.0.2171.95
SignatureVerifierTest.VerifyRSAPSS
)
local disabled_gn_tests=(
BuilderTest.BasicDeps
# 41.0.2272.76
Label.Resolve
)
local disabled_ui_base_tests=(
# Needs fonts/corefonts
FontTest.LoadArial
FontTest.GetActualFontNameForTesting
# Need access to a running X11 server (and potentially more)
'CanvasTest.*'
'ClipboardTest.*'
'ClipboardTest/0.*'
'FontTest.AvgCharWidth'
'FontTest.AvgWidths'
'FontTest.Widths'
'GtkExpandedContainerTest.*'
'RenderTextTest.*'
'ResourceBundleTest.DelegateGetFontList'
'ScreenTest.*'
'TextEliderTest.*'
'TextUtilsTest.GetStringWidth'
'AnimationContainerTest.*'
'AnimationTest.*'
'SlideAnimationTest.*'
'OSExchangeDataProviderAuraX11Test.*'
'InputMethodBaseTest.*'
'OSExchangeDataTest.*'
# These have been failing for a long time but are not critical. http://crbug.com/110711
FontListTest.FontDescString_FromFontVector
FontListTest.Fonts_DescStringWithStyleInFlexibleFormat_RoundTrip
FontListTest.Fonts_FontVector_RoundTrip
FontListTest.Fonts_FromDescString
FontListTest.Fonts_FromDescStringInFlexibleFormat
FontListTest.Fonts_FromDescStringWithStyleInFlexibleFormat
FontListTest.Fonts_FromFontVector
FontListTest.Fonts_GetHeight_GetBaseline
FontListTest.Fonts_Derive
FontListTest.Fonts_DeriveWithSizeDelta
# 38.0.2125.101
SelectionRequestorTest.NestedRequests
)
local disabled_media_tests=(
# http://crbug.com/160384
'YUVConvertTest.*'
)
local t suites=( base cacheinvalidation crypto gn gpu printing ui_base url ) HOME="${TEMP}"
for t in ${suites[@]}; do
tv=disabled_${t}_tests[*]
eninja -C out/Release ${t}_unittests
edo out/Release/${t}_unittests --gtest_filter=$(IFS=:; echo "-${!tv}")
done
}
inox_src_install() {
# Install into /opt
local dest=/opt/inox
edo cd out/Release
exeinto ${dest}
newexe chrome inox
newexe chrome_sandbox chrome-sandbox # the name is hardcoded
edo chmod 4755 "${IMAGE}"${dest}/chrome-sandbox
doexe "${FILES}"/inox-launcher.sh
insinto ${dest}
doins -r *.pak locales resources
doins -r *.bin
doins libwidevinecdmadapter.so
newman chrome.1 inox.1
dodir /usr/$(exhost --target)/bin
dosym ${dest}/inox-launcher.sh /usr/$(exhost --target)/bin/inox-browser
for size in 22 24 48 64 128 256 ; do
insinto /usr/share/icons/hicolor/${size}x${size}/apps
newins "${WORK}"/chrome/app/theme/chromium/product_logo_${size}.png inox-browser.png
done
insinto /usr/share/applications/
hereins inox-browser.desktop <<EOF
[Desktop Entry]
Version=1.0
Name=Inox
GenericName=Web Browser
Exec=inox-browser %U
Terminal=false
Icon=inox-browser
Type=Application
Categories=Network;WebBrowser;
MimeType=text/html;text/xml;application/xhtml_xml;x-scheme-handler/http;x-scheme-handler/https;x-scheme-handler/ftp;x-scheme-handler/mailto;x-scheme-handler/webcal;
StartupWMClass=Inox-browser
EOF
insinto /etc/revdep-rebuild
hereins ${PN} <<EOF
SEARCH_DIRS=${dest}
EOF
}
inox_pkg_postinst() {
freedesktop-desktop_pkg_postinst
gtk-icon-cache_pkg_postinst
}
inox_pkg_postrm() {
freedesktop-desktop_pkg_postrm
gtk-icon-cache_pkg_postrm
}