# Copyright 2009, 2010 Elias Pipping # Copyright 2009 Heiko Przybyl # Copyright 2016 Timo Gurr # Copyright 2016 Julian Ospald # 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 ]] ( providers: gtk2 gtk3 ) [[ 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] DEPENDENCIES=" build: dev-lang/python:*[>=2.5&<3] dev-lang/yasm dev-perl/Switch dev-python/Jinja2[python_abis:2.7] dev-python/beautifulsoup4[python_abis:2.7] dev-python/html5lib[python_abis:2.7] dev-python/ply[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] media-libs/libexif 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 ] ]] fonts/corefonts media-libs/flac media-libs/fontconfig media-libs/freetype:2 media-libs/libpng:=[>=1.2.37] media-libs/libvpx[>=1.6.0-r1] media-libs/libwebp[>=0.4] media-libs/opus[>=1.1-r1] media-libs/speex 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 providers:gtk2? ( x11-libs/gtk+:2[>=2.16.0] ) providers:gtk3? ( x11-libs/gtk+:3 ) x11-libs/harfbuzz x11-libs/libX11 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 providers:gtk2? ( x11-libs/gtk+:2[>=2.16.0][cups] ) providers:gtk3? ( x11-libs/gtk+:3[cups] ) ) gconf? ( gnome-platform/GConf:2 ) keyring? ( gnome-desktop/libgnome-keyring:1 ) providers:jpeg-turbo? ( media-libs/libjpeg-turbo ) pulseaudio? ( media-sound/pulseaudio ) 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 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/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/mesa third_party/modp_b64 third_party/mt19937ar 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/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 ) # 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 ) # 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 # ffmpeg: unknown local gn_system_libraries=" flac harfbuzz-ng icu libjpeg libpng libvpx 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" myconf_gn+=" use_gtk3=$(option providers:gtk3 true false)" # inox specific myconf_gn+=" enable_google_now=false" myconf_gn+=" enable_hangout_services_extension=false" myconf_gn+=" enable_hotwording=false" myconf_gn+=" enable_print_preview=false" myconf_gn+=" enable_remoting=false" myconf_gn+=" enable_webrtc=false" myconf_gn+=" safe_browsing_mode=0" myconf_gn+=" use_allocator=\"none\"" # 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 --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 <