From 7cb21224c77bf7159eee0a23bce43bbe0bc7e288 Mon Sep 17 00:00:00 2001 From: Andrey Bondrov Date: Thu, 17 Nov 2016 23:12:20 +1000 Subject: [PATCH] New version 54.0.2840.100 Switch to GN to build --- .abf.yml | 5 +- BUILD.gn | 19 + arm-webrtc-fix.patch | 50 -- ...mium-52-pdfium-system-libtiff-libpng.patch | 519 ++++++++++++++++++ chromium-53-bignum-werror-fix.patch | 11 + chromium-53-breakiterator.patch | 41 ++ ...mium-53-ffmpeg-no-deprecation-errors.patch | 22 + chromium-53-gn-system-icu-jsoncpp.patch | 42 ++ chromium-53-gn-system-opus.patch | 58 ++ ...link-libgio-libpci-libudev-libbrlapi.patch | 195 +++++++ chromium-54-ffmpeg-2.8.patch | 20 + chromium-54-gn-system-icu.patch | 248 +++++++++ chromium-54-no-ash.patch | 38 ++ chromium-54-no-deprecated-error.patch | 18 + chromium-54-proprietary-codecs-assert.patch | 15 + chromium-arm-r0.patch | 11 - chromium-browser-stable.rpmlintrc | 1 + chromium-browser-stable.spec | 401 +++++++------- icons.tar.bz2 | Bin 40051 -> 0 bytes 19 files changed, 1440 insertions(+), 274 deletions(-) create mode 100644 BUILD.gn delete mode 100644 arm-webrtc-fix.patch create mode 100644 chromium-52-pdfium-system-libtiff-libpng.patch create mode 100644 chromium-53-bignum-werror-fix.patch create mode 100644 chromium-53-breakiterator.patch create mode 100644 chromium-53-ffmpeg-no-deprecation-errors.patch create mode 100644 chromium-53-gn-system-icu-jsoncpp.patch create mode 100644 chromium-53-gn-system-opus.patch create mode 100644 chromium-53-link-libgio-libpci-libudev-libbrlapi.patch create mode 100644 chromium-54-ffmpeg-2.8.patch create mode 100644 chromium-54-gn-system-icu.patch create mode 100644 chromium-54-no-ash.patch create mode 100644 chromium-54-no-deprecated-error.patch create mode 100644 chromium-54-proprietary-codecs-assert.patch delete mode 100644 chromium-arm-r0.patch create mode 100644 chromium-browser-stable.rpmlintrc delete mode 100644 icons.tar.bz2 diff --git a/.abf.yml b/.abf.yml index 318dfed..59dafc4 100644 --- a/.abf.yml +++ b/.abf.yml @@ -1,6 +1,5 @@ sources: "icons.tar.bz2": a835954af164bf38f8ea4ea80608839bed7800a3 - gn-binaries.tar.xz: 312d6a6addabeed98f3357d34dbc87ccfd43026b - depot_tools.tar.xz: 082b7f9a4dfa7eb03900755b4866aef2d73543a5 new-system-icons.tar.xz: 89339b8b3b05359a8745ed7968fe148902a2fa28 - chromium-53.0.2785.92.tar.xz: b9cfc8694ab89590b28da56ee535ef44f345be68 + depot_tools.tar.xz: 082b7f9a4dfa7eb03900755b4866aef2d73543a5 + chromium-54.0.2840.100.tar.xz: bf51814c569110714a4b1266f96c5bbc45af1a80 diff --git a/BUILD.gn b/BUILD.gn new file mode 100644 index 0000000..78f7b57 --- /dev/null +++ b/BUILD.gn @@ -0,0 +1,19 @@ +import("//build/toolchain/gcc_toolchain.gni") + +gcc_toolchain("default") { + cc = getenv("CC") + cxx = getenv("CXX") + ar = getenv("AR") + nm = getenv("NM") + ld = cxx + + extra_cflags = getenv("CFLAGS") + extra_cppflags = getenv("CPPFLAGS") + extra_cxxflags = getenv("CXXFLAGS") + extra_ldflags = getenv("LDFLAGS") + + toolchain_args = { + current_cpu = current_cpu + current_os = current_os + } +} diff --git a/arm-webrtc-fix.patch b/arm-webrtc-fix.patch deleted file mode 100644 index e5d237d..0000000 --- a/arm-webrtc-fix.patch +++ /dev/null @@ -1,50 +0,0 @@ ---- third_party/webrtc/system_wrappers/source/cpu_features.cc.orig 2014-01-15 18:38:50.331954791 -0700 -+++ third_party/webrtc/system_wrappers/source/cpu_features.cc 2014-01-15 18:38:37.902004379 -0700 -@@ -18,6 +18,47 @@ - - #include "webrtc/typedefs.h" - -+#include -+#ifdef __arm__ -+#include -+#include -+#include -+#include -+#endif -+ -+#ifdef __arm__ -+uint64_t WebRtc_GetCPUFeaturesARM() { -+ static bool detected = false; -+ static uint64_t have_neon = 0; -+ -+ int fd; -+ Elf32_auxv_t auxv; -+ unsigned int hwcaps; -+ -+ if (!detected) { -+ int fd; -+ Elf32_auxv_t auxv; -+ unsigned int hwcaps; -+ -+ fd = open("/proc/self/auxv", O_RDONLY); -+ if (fd >= 0) { -+ while (read(fd, &auxv, sizeof(Elf32_auxv_t)) == sizeof(Elf32_auxv_t)) { -+ if (auxv.a_type == AT_HWCAP) { -+ have_neon = (auxv.a_un.a_val & HWCAP_NEON) ? kCPUFeatureNEON : 0; -+ break; -+ } -+ } -+ close (fd); -+ } else { -+ have_neon = 0; -+ } -+ detected = true; -+ } -+ -+ return 0 | have_neon; // others here as we need them -+} -+#endif -+ - // No CPU feature is available => straight C path. - int GetCPUInfoNoASM(CPUFeature feature) { - (void)feature; diff --git a/chromium-52-pdfium-system-libtiff-libpng.patch b/chromium-52-pdfium-system-libtiff-libpng.patch new file mode 100644 index 0000000..6b83b50 --- /dev/null +++ b/chromium-52-pdfium-system-libtiff-libpng.patch @@ -0,0 +1,519 @@ +diff -up chromium-54.0.2840.16/third_party/pdfium/BUILD.gn.pdfium-system-libtiff-libpng chromium-54.0.2840.16/third_party/pdfium/BUILD.gn +--- chromium-54.0.2840.16/third_party/pdfium/BUILD.gn.pdfium-system-libtiff-libpng 2016-09-09 00:03:48.000000000 +0200 ++++ chromium-54.0.2840.16/third_party/pdfium/BUILD.gn 2016-09-12 13:47:03.205588975 +0200 +@@ -14,7 +14,6 @@ config("pdfium_common_config") { + "third_party/freetype/include/freetype", + ] + defines = [ +- "OPJ_STATIC", + "PNG_PREFIX", + "PNG_USE_READ_MACROS", + ] +@@ -553,7 +552,7 @@ static_library("fxcodec") { + deps = [ + "third_party:fx_lcms2", + "third_party:fx_libopenjpeg", +- "third_party:fx_zlib", ++ "//third_party/zlib:zlib", + + # This is a generic JPEG library dependency. + "//third_party:jpeg", +diff -up chromium-54.0.2840.16/third_party/pdfium/core/fxcodec/codec/codec_int.h.pdfium-system-libtiff-libpng chromium-54.0.2840.16/third_party/pdfium/core/fxcodec/codec/codec_int.h +--- chromium-54.0.2840.16/third_party/pdfium/core/fxcodec/codec/codec_int.h.pdfium-system-libtiff-libpng 2016-09-09 00:03:48.000000000 +0200 ++++ chromium-54.0.2840.16/third_party/pdfium/core/fxcodec/codec/codec_int.h 2016-09-12 13:47:03.205588975 +0200 +@@ -16,7 +16,7 @@ + + #include "core/fxcodec/include/fx_codec.h" + #include "core/fxcodec/jbig2/JBig2_Context.h" +-#include "third_party/libopenjpeg20/openjpeg.h" ++#include + + class CPDF_ColorSpace; + +diff -up chromium-54.0.2840.16/third_party/pdfium/core/fxcodec/codec/fx_codec_flate.cpp.pdfium-system-libtiff-libpng chromium-54.0.2840.16/third_party/pdfium/core/fxcodec/codec/fx_codec_flate.cpp +--- chromium-54.0.2840.16/third_party/pdfium/core/fxcodec/codec/fx_codec_flate.cpp.pdfium-system-libtiff-libpng 2016-09-09 00:03:48.000000000 +0200 ++++ chromium-54.0.2840.16/third_party/pdfium/core/fxcodec/codec/fx_codec_flate.cpp 2016-09-12 13:47:03.205588975 +0200 +@@ -11,7 +11,7 @@ + + #include "core/fxcodec/include/fx_codec.h" + #include "core/fxcrt/include/fx_ext.h" +-#include "third_party/zlib_v128/zlib.h" ++#include + + extern "C" { + static void* my_alloc_func(void* opaque, +diff -up chromium-54.0.2840.16/third_party/pdfium/core/fxcodec/codec/fx_codec_jpx_opj.cpp.pdfium-system-libtiff-libpng chromium-54.0.2840.16/third_party/pdfium/core/fxcodec/codec/fx_codec_jpx_opj.cpp +--- chromium-54.0.2840.16/third_party/pdfium/core/fxcodec/codec/fx_codec_jpx_opj.cpp.pdfium-system-libtiff-libpng 2016-09-09 00:03:48.000000000 +0200 ++++ chromium-54.0.2840.16/third_party/pdfium/core/fxcodec/codec/fx_codec_jpx_opj.cpp 2016-09-12 13:47:03.206588962 +0200 +@@ -13,7 +13,7 @@ + #include "core/fxcodec/include/fx_codec.h" + #include "core/fxcrt/include/fx_safe_types.h" + #include "third_party/lcms2-2.6/include/lcms2.h" +-#include "third_party/libopenjpeg20/openjpeg.h" ++#include + + static void fx_error_callback(const char* msg, void* client_data) { + (void)client_data; +@@ -752,7 +752,7 @@ FX_BOOL CJPX_Decoder::Init(const unsigne + image = nullptr; + return FALSE; + } +- image->pdfium_use_colorspace = !!m_ColorSpace; ++// image->pdfium_use_colorspace = !!m_ColorSpace; + + if (!parameters.nb_tile_to_decode) { + if (!opj_set_decode_area(l_codec, image, parameters.DA_x0, parameters.DA_y0, +diff -up chromium-54.0.2840.16/third_party/pdfium/core/fxcodec/codec/fx_codec_png.cpp.pdfium-system-libtiff-libpng chromium-54.0.2840.16/third_party/pdfium/core/fxcodec/codec/fx_codec_png.cpp +--- chromium-54.0.2840.16/third_party/pdfium/core/fxcodec/codec/fx_codec_png.cpp.pdfium-system-libtiff-libpng 2016-09-09 00:03:48.000000000 +0200 ++++ chromium-54.0.2840.16/third_party/pdfium/core/fxcodec/codec/fx_codec_png.cpp 2016-09-12 13:47:03.207588950 +0200 +@@ -10,10 +10,7 @@ + #include "core/fxcodec/include/fx_codec.h" + #include "core/fxge/include/fx_dib.h" + +-extern "C" { +-#undef FAR +-#include "third_party/libpng16/png.h" +-} ++#include + + static void _png_error_data(png_structp png_ptr, png_const_charp error_msg) { + if (png_get_error_ptr(png_ptr)) { +diff -up chromium-54.0.2840.16/third_party/pdfium/core/fxcodec/codec/fx_codec_tiff.cpp.pdfium-system-libtiff-libpng chromium-54.0.2840.16/third_party/pdfium/core/fxcodec/codec/fx_codec_tiff.cpp +--- chromium-54.0.2840.16/third_party/pdfium/core/fxcodec/codec/fx_codec_tiff.cpp.pdfium-system-libtiff-libpng 2016-09-09 00:03:48.000000000 +0200 ++++ chromium-54.0.2840.16/third_party/pdfium/core/fxcodec/codec/fx_codec_tiff.cpp 2016-09-12 13:47:03.206588962 +0200 +@@ -9,7 +9,7 @@ + #include "core/fxge/include/fx_dib.h" + + extern "C" { +-#include "third_party/libtiff/tiffiop.h" ++#include + } + + class CCodec_TiffContext { +@@ -139,7 +139,7 @@ TIFF* tiff_open(void* context, const cha + tiff_write, tiff_seek, tiff_close, tiff_get_size, + tiff_map, tiff_unmap); + if (tif) { +- tif->tif_fd = (int)(intptr_t)context; ++ (void)TIFFSetFileno(tif, (int)(intptr_t)context); + } + return tif; + } +diff -up chromium-54.0.2840.16/third_party/pdfium/skia/BUILD.gn.pdfium-system-libtiff-libpng chromium-54.0.2840.16/third_party/pdfium/skia/BUILD.gn +--- chromium-54.0.2840.16/third_party/pdfium/skia/BUILD.gn.pdfium-system-libtiff-libpng 2016-09-09 00:03:48.000000000 +0200 ++++ chromium-54.0.2840.16/third_party/pdfium/skia/BUILD.gn 2016-09-12 13:47:03.206588962 +0200 +@@ -355,7 +355,7 @@ component("skia") { + + deps = [ + ":skia_opts", +- "../third_party:fx_zlib", ++ "//third_party/zlib:zlib", + ] + + if (is_linux) { +diff -up chromium-54.0.2840.16/third_party/pdfium/third_party/BUILD.gn.pdfium-system-libtiff-libpng chromium-54.0.2840.16/third_party/pdfium/third_party/BUILD.gn +--- chromium-54.0.2840.16/third_party/pdfium/third_party/BUILD.gn.pdfium-system-libtiff-libpng 2016-09-12 13:47:03.207588950 +0200 ++++ chromium-54.0.2840.16/third_party/pdfium/third_party/BUILD.gn 2016-09-12 13:56:06.995752607 +0200 +@@ -5,6 +5,7 @@ + import("//build/config/arm.gni") + import("//build_overrides/build.gni") + import("../pdfium.gni") ++import("//build/config/linux/pkg_config.gni") + + group("third_party") { + deps = [ +@@ -267,197 +267,34 @@ static_library("jpeg") { + ] + } + +-config("fx_libopenjpeg_warnings") { +- visibility = [ ":*" ] +- if (is_win) { +- cflags = [ +- # Signed/unsigned comparisons. +- "/wd4018", +- ] +- } ++pkg_config("openjpeg_config") { ++ packages = [ ++ "libopenjp2", ++ ] + } + +-static_library("fx_libopenjpeg") { +- configs -= [ "//build/config/compiler:chromium_code" ] +- configs += [ +- "//build/config/compiler:no_chromium_code", +- ":pdfium_third_party_config", +- +- # Must be after no_chromium_code for warning flags to be ordered correctly. +- ":fx_libopenjpeg_warnings", +- ] +- sources = [ +- "libopenjpeg20/bio.c", +- "libopenjpeg20/cio.c", +- "libopenjpeg20/dwt.c", +- "libopenjpeg20/event.c", +- "libopenjpeg20/function_list.c", +- "libopenjpeg20/image.c", +- "libopenjpeg20/invert.c", +- "libopenjpeg20/j2k.c", +- "libopenjpeg20/jp2.c", +- "libopenjpeg20/mct.c", +- "libopenjpeg20/mqc.c", +- "libopenjpeg20/openjpeg.c", +- "libopenjpeg20/opj_clock.c", +- "libopenjpeg20/pi.c", +- "libopenjpeg20/raw.c", +- "libopenjpeg20/t1.c", +- "libopenjpeg20/t2.c", +- "libopenjpeg20/tcd.c", +- "libopenjpeg20/tgt.c", +- ] ++source_set("fx_libopenjpeg") { ++ public_configs = [ ":openjpeg_config" ] + } + +-static_library("fx_lpng") { +- configs -= [ "//build/config/compiler:chromium_code" ] +- configs += [ +- "//build/config/compiler:no_chromium_code", +- ":pdfium_third_party_config", ++pkg_config("fx_libpng_config") { ++ packages = [ ++ "libpng", + ] +- sources = [ +- "libpng16/png.c", +- "libpng16/png.h", +- "libpng16/pngconf.h", +- "libpng16/pngdebug.h", +- "libpng16/pngerror.c", +- "libpng16/pngget.c", +- "libpng16/pnginfo.h", +- "libpng16/pnglibconf.h", +- "libpng16/pngmem.c", +- "libpng16/pngpread.c", +- "libpng16/pngprefix.h", +- "libpng16/pngpriv.h", +- "libpng16/pngread.c", +- "libpng16/pngrio.c", +- "libpng16/pngrtran.c", +- "libpng16/pngrutil.c", +- "libpng16/pngset.c", +- "libpng16/pngstruct.h", +- "libpng16/pngtrans.c", +- "libpng16/pngwio.c", +- "libpng16/pngwrite.c", +- "libpng16/pngwtran.c", +- "libpng16/pngwutil.c", +- ] +- +- defines = [] +- cflags = [] +- +- if (current_cpu == "x86" || current_cpu == "x64") { +- sources += [ +- "libpng16/contrib/intel/filter_sse2_intrinsics.c", +- "libpng16/contrib/intel/intel_init.c", +- ] +- defines += [ "PNG_INTEL_SSE_OPT=1" ] +- } else if ((current_cpu == "arm" || current_cpu == "arm64") && arm_use_neon) { +- sources += [ +- "libpng16/arm/arm_init.c", +- "libpng16/arm/filter_neon_intrinsics.c", +- ] +- defines += [ +- "PNG_ARM_NEON_OPT=2", +- "PNG_ARM_NEON_IMPLEMENTATION=1", +- ] +- } +- +- if (is_win) { +- # Unary minus applied to unsigned type. +- cflags += [ "/wd4146" ] +- } + } + +-if (pdf_enable_xfa) { +- static_library("fx_tiff") { +- configs -= [ "//build/config/compiler:chromium_code" ] +- configs += [ +- "//build/config/compiler:no_chromium_code", +- ":pdfium_third_party_config", +- ] +- if (is_win) { +- # Need to undefine the macro since it is redefined in +- # tif_ojpeg.c and tif_jpeg.c. +- configs -= [ "//build/config/win:lean_and_mean" ] +- } +- deps = [ +- "//third_party:jpeg", +- ] +- sources = [ +- "libtiff/tif_aux.c", +- "libtiff/tif_close.c", +- "libtiff/tif_codec.c", +- "libtiff/tif_color.c", +- "libtiff/tif_compress.c", +- "libtiff/tif_dir.c", +- "libtiff/tif_dirinfo.c", +- "libtiff/tif_dirread.c", +- "libtiff/tif_dirwrite.c", +- "libtiff/tif_dumpmode.c", +- "libtiff/tif_error.c", +- "libtiff/tif_extension.c", +- "libtiff/tif_fax3.c", +- "libtiff/tif_fax3sm.c", +- "libtiff/tif_flush.c", +- "libtiff/tif_getimage.c", +- "libtiff/tif_jpeg.c", +- "libtiff/tif_luv.c", +- "libtiff/tif_lzw.c", +- "libtiff/tif_next.c", +- "libtiff/tif_ojpeg.c", +- "libtiff/tif_open.c", +- "libtiff/tif_packbits.c", +- "libtiff/tif_pixarlog.c", +- "libtiff/tif_predict.c", +- "libtiff/tif_print.c", +- "libtiff/tif_read.c", +- "libtiff/tif_strip.c", +- "libtiff/tif_swab.c", +- "libtiff/tif_thunder.c", +- "libtiff/tif_tile.c", +- "libtiff/tif_version.c", +- "libtiff/tif_warning.c", +- "libtiff/tif_write.c", +- "libtiff/tif_zip.c", +- "libtiff/tiffiop.h", +- "libtiff/tiffvers.h", +- ] +- } ++source_set("fx_lpng") { ++ public_configs = [ ":fx_libpng_config" ] + } + +-# TODO(dsinclair): Remove if fixed upstream. https://crbug.com/507712 +-config("fx_zlib_warnings") { +- visibility = [ ":*" ] +- if (is_clang) { +- cflags = [ "-Wno-shift-negative-value" ] +- } ++config("fx_tiff_config") { ++ libs = [ "tiff" ] + } + +-static_library("fx_zlib") { +- configs -= [ "//build/config/compiler:chromium_code" ] +- configs += [ +- "//build/config/compiler:no_chromium_code", +- ":pdfium_third_party_config", +- +- # Must be after no_chromium_code for warning flags to be ordered correctly. +- ":fx_zlib_warnings", +- ] +- sources = [ +- "zlib_v128/adler32.c", +- "zlib_v128/compress.c", +- "zlib_v128/crc32.c", +- "zlib_v128/deflate.c", +- "zlib_v128/gzclose.c", +- "zlib_v128/gzlib.c", +- "zlib_v128/gzread.c", +- "zlib_v128/gzwrite.c", +- "zlib_v128/infback.c", +- "zlib_v128/inffast.c", +- "zlib_v128/inflate.c", +- "zlib_v128/inftrees.c", +- "zlib_v128/trees.c", +- "zlib_v128/uncompr.c", +- "zlib_v128/zutil.c", +- ] ++if (pdf_enable_xfa) { ++ source_set("fx_tiff") { ++ public_configs = [ ":fx_tiff_config" ] ++ } + } + + # Can not be a static library due to lack of .cc files. +diff -up chromium-54.0.2840.16/third_party/pdfium/third_party/third_party.gyp.pdfium-system-libtiff-libpng chromium-54.0.2840.16/third_party/pdfium/third_party/third_party.gyp +--- chromium-54.0.2840.16/third_party/pdfium/third_party/third_party.gyp.pdfium-system-libtiff-libpng 2016-09-09 00:03:49.000000000 +0200 ++++ chromium-54.0.2840.16/third_party/pdfium/third_party/third_party.gyp 2016-09-12 13:57:09.603965515 +0200 +@@ -156,6 +156,47 @@ + }, + }, + { ++ 'target_name': 'fx_lpng', ++ 'type': 'none', ++ 'dependencies': [ ++ '../../zlib/zlib.gyp:zlib', ++ ], ++ 'direct_dependent_settings': { ++ 'cflags': [ ++ ' iterator( +- new BreakIterator(base::string16(), rule)); ++ std::unique_ptr iterator( ++ new base::i18n::BreakIterator(base::string16(), rule)); + if (!iterator->Init()) { + // Since we're not passing in any text, the only reason this could fail + // is if we fail to parse the rules. Since the rules are hardcoded, +@@ -388,7 +388,7 @@ SpellcheckWordIterator::WordIteratorStat + const size_t start = iterator_->prev(); + const size_t length = iterator_->pos() - start; + switch (iterator_->GetWordBreakStatus()) { +- case BreakIterator::IS_WORD_BREAK: { ++ case base::i18n::BreakIterator::IS_WORD_BREAK: { + if (Normalize(start, length, word_string)) { + *word_start = start; + *word_length = length; +@@ -396,7 +396,7 @@ SpellcheckWordIterator::WordIteratorStat + } + break; + } +- case BreakIterator::IS_SKIPPABLE_WORD: { ++ case base::i18n::BreakIterator::IS_SKIPPABLE_WORD: { + *word_string = iterator_->GetString(); + *word_start = start; + *word_length = length; +@@ -404,7 +404,7 @@ SpellcheckWordIterator::WordIteratorStat + } + // |iterator_| is RULE_BASED so the break status should never be + // IS_LINE_OR_CHAR_BREAK. +- case BreakIterator::IS_LINE_OR_CHAR_BREAK: { ++ case base::i18n::BreakIterator::IS_LINE_OR_CHAR_BREAK: { + NOTREACHED(); + break; + } diff --git a/chromium-53-ffmpeg-no-deprecation-errors.patch b/chromium-53-ffmpeg-no-deprecation-errors.patch new file mode 100644 index 0000000..78c780e --- /dev/null +++ b/chromium-53-ffmpeg-no-deprecation-errors.patch @@ -0,0 +1,22 @@ +--- chromium-53.0.2785.46/build/linux/unbundle/ffmpeg.gn.ffmpeg-deprecation 2016-08-05 00:05:10.000000000 +0200 ++++ chromium-53.0.2785.46/build/linux/unbundle/ffmpeg.gn 2016-08-09 21:22:45.143683293 +0200 +@@ -13,6 +13,12 @@ + ] + } + ++config("ffmpeg_deprecations") { ++ if (is_linux) { ++ cflags = [ "-Wno-error=deprecated-declarations" ] ++ } ++} ++ + shim_headers("ffmpeg_shim") { + root_path = "." + headers = [ +@@ -26,5 +32,5 @@ + deps = [ + ":ffmpeg_shim", + ] +- public_configs = [ ":system_ffmpeg" ] ++ public_configs = [ ":system_ffmpeg", ":ffmpeg_deprecations" ] + } diff --git a/chromium-53-gn-system-icu-jsoncpp.patch b/chromium-53-gn-system-icu-jsoncpp.patch new file mode 100644 index 0000000..f662dcc --- /dev/null +++ b/chromium-53-gn-system-icu-jsoncpp.patch @@ -0,0 +1,42 @@ +diff -up chromium-55.0.2873.0/build/linux/unbundle/jsoncpp.gn.gn-system-icu-jsoncpp chromium-55.0.2873.0/build/linux/unbundle/jsoncpp.gn +--- chromium-55.0.2873.0/build/linux/unbundle/jsoncpp.gn.gn-system-icu-jsoncpp 2016-10-01 16:21:27.343107786 +0200 ++++ chromium-55.0.2873.0/build/linux/unbundle/jsoncpp.gn 2016-10-01 16:21:27.343107786 +0200 +@@ -0,0 +1,27 @@ ++# Copyright 2016 The Chromium Authors. All rights reserved. ++# Use of this source code is governed by a BSD-style license that can be ++# found in the LICENSE file. ++ ++import("//build/config/linux/pkg_config.gni") ++import("//build/shim_headers.gni") ++ ++shim_headers("jsoncpp_shim") { ++ root_path = "source/include" ++ headers = [ ++ "json/assertions.h", ++ "json/autolink.h", ++ "json/config.h", ++ "json/features.h", ++ "json/forwards.h", ++ "json/json.h", ++ "json/reader.h", ++ "json/value.h", ++ "json/writer.h" ++ ] ++ ++source_set("jsoncpp") { ++ deps = [ ++ ":jsoncpp_shim", ++ ] ++ libs = [ "jsoncpp" ] ++} +diff -up chromium-55.0.2873.0/build/linux/unbundle/replace_gn_files.py.gn-system-icu-jsoncpp chromium-55.0.2873.0/build/linux/unbundle/replace_gn_files.py +--- chromium-55.0.2873.0/build/linux/unbundle/replace_gn_files.py.gn-system-icu-jsoncpp 2016-10-01 16:21:27.343107786 +0200 ++++ chromium-55.0.2873.0/build/linux/unbundle/replace_gn_files.py 2016-10-01 17:17:38.913721403 +0200 +@@ -21,6 +21,7 @@ REPLACEMENTS = { + 'flac': 'third_party/flac/BUILD.gn', + 'harfbuzz-ng': 'third_party/harfbuzz-ng/BUILD.gn', + 'icu': 'third_party/icu/BUILD.gn', ++ 'jsoncpp' : 'third_party/jsoncpp/BUILD.gn', + 'libevent': 'base/third_party/libevent/BUILD.gn', + 'libjpeg': 'build/secondary/third_party/libjpeg_turbo/BUILD.gn', + 'libpng': 'third_party/libpng/BUILD.gn', diff --git a/chromium-53-gn-system-opus.patch b/chromium-53-gn-system-opus.patch new file mode 100644 index 0000000..f8590a8 --- /dev/null +++ b/chromium-53-gn-system-opus.patch @@ -0,0 +1,58 @@ +diff -up chromium-53.0.2785.46/build/linux/unbundle/opus.gn.gn-system-opus chromium-53.0.2785.46/build/linux/unbundle/opus.gn +--- chromium-53.0.2785.46/build/linux/unbundle/opus.gn.gn-system-opus 2016-08-09 23:46:12.808470292 +0200 ++++ chromium-53.0.2785.46/build/linux/unbundle/opus.gn 2016-08-09 23:53:16.660141755 +0200 +@@ -0,0 +1,43 @@ ++import("//build/config/linux/pkg_config.gni") ++import("//build/shim_headers.gni") ++ ++shim_headers("opus_shim") { ++ root_path = "src/include" ++ headers = [ ++ "opus_custom.h", ++ "opus_defines.h", ++ "opus_multistream.h", ++ "opus_types.h", ++ "opus.h", ++ ] ++} ++ ++pkg_config("system_opus") { ++ packages = [ "opus" ] ++} ++ ++source_set("opus") { ++ public_configs = [ ":system_opus" ] ++ deps = [ ++ ":opus_shim", ++ ] ++} ++ ++source_set("opus_compare") { ++} ++ ++source_set("opus_demo") { ++} ++ ++source_set("test_opus_api") { ++} ++ ++source_set("test_opus_decode") { ++} ++ ++source_set("test_opus_encode") { ++} ++ ++source_set("test_opus_padding") { ++} ++ +diff -up chromium-53.0.2785.46/build/linux/unbundle/replace_gn_files.py.gn-system-opus chromium-53.0.2785.46/build/linux/unbundle/replace_gn_files.py +--- chromium-53.0.2785.46/build/linux/unbundle/replace_gn_files.py.gn-system-opus 2016-08-09 23:46:12.797470430 +0200 ++++ chromium-53.0.2785.46/build/linux/unbundle/replace_gn_files.py 2016-08-09 23:46:12.808470292 +0200 +@@ -29,6 +29,7 @@ + 'libwebp': 'third_party/libwebp/BUILD.gn', + 'libxml': 'third_party/libxml/BUILD.gn', + 'libxslt': 'third_party/libxslt/BUILD.gn', ++ 'opus': 'third_party/opus/BUILD.gn', + 're2': 'third_party/re2/BUILD.gn', + 'snappy': 'third_party/snappy/BUILD.gn', + 'yasm': 'third_party/yasm/yasm_assemble.gni', diff --git a/chromium-53-link-libgio-libpci-libudev-libbrlapi.patch b/chromium-53-link-libgio-libpci-libudev-libbrlapi.patch new file mode 100644 index 0000000..5ff6377 --- /dev/null +++ b/chromium-53-link-libgio-libpci-libudev-libbrlapi.patch @@ -0,0 +1,195 @@ +diff -up chromium-53.0.2785.92/build/linux/libbrlapi/BUILD.gn.link_libgio chromium-53.0.2785.92/build/linux/libbrlapi/BUILD.gn +--- chromium-53.0.2785.92/build/linux/libbrlapi/BUILD.gn.link_libgio 2016-09-02 21:02:02.000000000 +0200 ++++ chromium-53.0.2785.92/build/linux/libbrlapi/BUILD.gn 2016-09-09 14:26:52.224691284 +0200 +@@ -2,6 +2,10 @@ + # Use of this source code is governed by a BSD-style license that can be + # found in the LICENSE file. + ++declare_args() { ++ linux_link_libbrlapi = false ++} ++ + import("//tools/generate_library_loader/generate_library_loader.gni") + + config("brlapi_config") { +@@ -15,6 +19,7 @@ generate_library_loader("libbrlapi") { + output_cc = "libbrlapi_loader.cc" + header = "" + config = ":brlapi_config" ++ link_directly = linux_link_libbrlapi + + functions = [ + "brlapi_getHandleSize", +diff -up chromium-53.0.2785.92/build/linux/libgio/BUILD.gn.link_libgio chromium-53.0.2785.92/build/linux/libgio/BUILD.gn +--- chromium-53.0.2785.92/build/linux/libgio/BUILD.gn.link_libgio 2016-09-02 21:02:02.000000000 +0200 ++++ chromium-53.0.2785.92/build/linux/libgio/BUILD.gn 2016-09-09 14:23:38.667124632 +0200 +@@ -2,6 +2,10 @@ + # Use of this source code is governed by a BSD-style license that can be + # found in the LICENSE file. + ++declare_args() { ++ linux_link_libgio = false ++} ++ + import("//tools/generate_library_loader/generate_library_loader.gni") + + # This generates a target named "libgio". +@@ -11,6 +15,7 @@ generate_library_loader("libgio") { + output_cc = "libgio_loader.cc" + header = "" + config = "//build/linux:gio_config" ++ link_directly = linux_link_libgio + + functions = [ + "glib_check_version", +diff -up chromium-53.0.2785.92/build/linux/libpci/BUILD.gn.link_libgio chromium-53.0.2785.92/build/linux/libpci/BUILD.gn +--- chromium-53.0.2785.92/build/linux/libpci/BUILD.gn.link_libgio 2016-09-02 21:02:02.000000000 +0200 ++++ chromium-53.0.2785.92/build/linux/libpci/BUILD.gn 2016-09-09 14:24:25.124540583 +0200 +@@ -2,14 +2,24 @@ + # Use of this source code is governed by a BSD-style license that can be + # found in the LICENSE file. + ++declare_args() { ++ linux_link_libpci = false ++} ++ ++config("libpci_config") { ++ libs = [ "pci" ] ++} ++ + import("//tools/generate_library_loader/generate_library_loader.gni") + +-# This generates a target named "libpci". +-generate_library_loader("libpci") { ++# This generates a target named "libpci_loader". ++generate_library_loader("libpci_loader") { + name = "LibPciLoader" + output_h = "libpci.h" + output_cc = "libpci_loader.cc" + header = "" ++ link_directly = linux_link_libpci ++ use_extern_c = true + + functions = [ + "pci_alloc", +@@ -20,3 +30,10 @@ + "pci_lookup_name", + ] + } ++ ++source_set("libpci") { ++ public_deps = [ ":libpci_loader" ] ++ if (linux_link_libpci) { ++ public_configs = [ ":libpci_config" ] ++ } ++} +diff -up chromium-53.0.2785.92/build/linux/libudev/BUILD.gn.link_libgio chromium-53.0.2785.92/build/linux/libudev/BUILD.gn +--- chromium-53.0.2785.92/build/linux/libudev/BUILD.gn.link_libgio 2016-09-02 21:02:02.000000000 +0200 ++++ chromium-53.0.2785.92/build/linux/libudev/BUILD.gn 2016-09-09 14:25:52.512441968 +0200 +@@ -2,6 +2,14 @@ + # Use of this source code is governed by a BSD-style license that can be + # found in the LICENSE file. + ++declare_args() { ++ linux_link_libudev = false ++} ++ ++config("libudev_config") { ++ libs = [ "udev" ] ++} ++ + import("//tools/generate_library_loader/generate_library_loader.gni") + + libudev_functions = [ +@@ -43,6 +51,7 @@ + output_h = "libudev0.h" + output_cc = "libudev0_loader.cc" + header = "\"third_party/libudev/libudev0.h\"" ++ link_directly = linux_link_libudev + + functions = libudev_functions + } +@@ -53,6 +62,7 @@ + output_h = "libudev1.h" + output_cc = "libudev1_loader.cc" + header = "\"third_party/libudev/libudev1.h\"" ++ link_directly = linux_link_libudev + + functions = libudev_functions + } +@@ -62,4 +72,5 @@ + ":udev0_loader", + ":udev1_loader", + ] ++ public_configs = [ ":libudev_config" ] + } +diff -up chromium-53.0.2785.92/tools/generate_library_loader/generate_library_loader.gni.link_libgio chromium-53.0.2785.92/tools/generate_library_loader/generate_library_loader.gni +--- chromium-53.0.2785.92/tools/generate_library_loader/generate_library_loader.gni.link_libgio 2016-09-02 21:02:26.000000000 +0200 ++++ chromium-53.0.2785.92/tools/generate_library_loader/generate_library_loader.gni 2016-09-09 14:22:50.905725074 +0200 +@@ -35,20 +35,21 @@ + rebase_path(output_cc), + "--header", + invoker.header, +- +- # Note GYP build exposes a per-target variable to control this, which, if +- # manually set to true, will disable dlopen(). Its not clear this is +- # needed, so here we just leave off. If this can be done globally, we can +- # expose one switch for this value, otherwise we need to add a template +- # param for this. +- "--link-directly=0", + ] ++ if (invoker.link_directly) { ++ args += [ "--link-directly=1", ] ++ } else { ++ args += [ "--link-directly=0", ] ++ } + if (defined(invoker.bundled_header)) { + args += [ + "--bundled-header", + invoker.bundled_header, + ] + } ++ if (defined(invoker.use_extern_c) && invoker.use_extern_c) { ++ args += [ "--use-extern-c", ] ++ } + args += invoker.functions + } + +--- chromium-53.0.2785.92/third_party/speech-dispatcher/BUILD.gn.link_libgio 2016-09-02 21:02:25.000000000 +0200 ++++ chromium-53.0.2785.92/third_party/speech-dispatcher/BUILD.gn 2016-09-09 14:48:08.131650961 +0200 +@@ -2,14 +2,23 @@ + # Use of this source code is governed by a BSD-style license that can be + # found in the LICENSE file. + ++declare_args() { ++ linux_link_libspeechd = false ++} ++ ++config("speech_dispatcher_config") { ++ libs = [ "speechd" ] ++} ++ + import("//tools/generate_library_loader/generate_library_loader.gni") + +-generate_library_loader("speech-dispatcher") { ++generate_library_loader("speech-dispatcher-loader") { + name = "LibSpeechdLoader" + output_h = "libspeechd.h" + output_cc = "libspeechd.cc" + header = "" + bundled_header = "\"third_party/speech-dispatcher/libspeechd.h\"" ++ link_directly = linux_link_libspeechd + + functions = [ + "spd_open", +@@ -28,3 +37,10 @@ + "spd_set_language", + ] + } ++ ++source_set("speech-dispatcher") { ++ public_deps = [ ":speech-dispatcher-loader" ] ++ if (linux_link_libspeechd) { ++ public_configs = [ ":speech_dispatcher_config" ] ++ } ++} diff --git a/chromium-54-ffmpeg-2.8.patch b/chromium-54-ffmpeg-2.8.patch new file mode 100644 index 0000000..d8f7082 --- /dev/null +++ b/chromium-54-ffmpeg-2.8.patch @@ -0,0 +1,20 @@ +diff -up chromium-54.0.2840.71/media/ffmpeg/ffmpeg_common.cc.ffmpeg-2.8 chromium-54.0.2840.71/media/ffmpeg/ffmpeg_common.cc +--- chromium-54.0.2840.71/media/ffmpeg/ffmpeg_common.cc.ffmpeg-2.8 2016-10-31 19:26:32.599632709 +0100 ++++ chromium-54.0.2840.71/media/ffmpeg/ffmpeg_common.cc 2016-11-03 21:36:28.282984313 +0100 +@@ -792,7 +792,6 @@ TEST_PRIMARY(SMPTE170M); + TEST_PRIMARY(SMPTE240M); + TEST_PRIMARY(FILM); + TEST_PRIMARY(BT2020); +-TEST_PRIMARY(SMPTEST428_1); + + TEST_TRANSFER(RESERVED0); + TEST_TRANSFER(BT709); +@@ -810,8 +809,6 @@ TEST_TRANSFER(BT1361_ECG); + TEST_TRANSFER(IEC61966_2_1); + TEST_TRANSFER(BT2020_10); + TEST_TRANSFER(BT2020_12); +-TEST_TRANSFER(SMPTEST2084); +-TEST_TRANSFER(SMPTEST428_1); + + TEST_COLORSPACE(RGB); + TEST_COLORSPACE(BT709); diff --git a/chromium-54-gn-system-icu.patch b/chromium-54-gn-system-icu.patch new file mode 100644 index 0000000..ef3ae88 --- /dev/null +++ b/chromium-54-gn-system-icu.patch @@ -0,0 +1,248 @@ +--- /dev/null 2016-10-22 17:04:13.204827706 +0200 ++++ chromium-55.0.2883.11/build/linux/unbundle/icu.gn 2016-10-14 00:02:10.000000000 +0200 +@@ -0,0 +1,235 @@ ++# Copyright 2016 The Chromium Authors. All rights reserved. ++# Use of this source code is governed by a BSD-style license that can be ++# found in the LICENSE file. ++ ++import("//build/config/linux/pkg_config.gni") ++import("//build/shim_headers.gni") ++ ++group("icu") { ++ public_deps = [ ++ ":icui18n", ++ ":icuuc", ++ ] ++} ++ ++config("icu_config") { ++ defines = [ ++ "USING_SYSTEM_ICU=1", ++ "ICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC", ++ ] ++} ++ ++pkg_config("system_icui18n") { ++ packages = [ "icu-i18n" ] ++} ++ ++pkg_config("system_icuuc") { ++ packages = [ "icu-uc" ] ++} ++ ++source_set("icui18n") { ++ deps = [ ++ ":icui18n_shim", ++ ] ++ public_configs = [ ++ ":icu_config", ++ ":system_icui18n", ++ ] ++} ++ ++source_set("icuuc") { ++ deps = [ ++ ":icuuc_shim", ++ ] ++ public_configs = [ ++ ":icu_config", ++ ":system_icuuc", ++ ] ++} ++ ++shim_headers("icui18n_shim") { ++ root_path = "source/i18n" ++ headers = [ ++ # This list can easily be updated using the command below: ++ # find third_party/icu/source/i18n/unicode \ ++ # -iname '*.h' -printf '"%p",\n' | \ ++ # sed -e 's|third_party/icu/i18n/common/||' | sort -u ++ "unicode/alphaindex.h", ++ "unicode/basictz.h", ++ "unicode/calendar.h", ++ "unicode/choicfmt.h", ++ "unicode/coleitr.h", ++ "unicode/coll.h", ++ "unicode/compactdecimalformat.h", ++ "unicode/curramt.h", ++ "unicode/currpinf.h", ++ "unicode/currunit.h", ++ "unicode/datefmt.h", ++ "unicode/dcfmtsym.h", ++ "unicode/decimfmt.h", ++ "unicode/dtfmtsym.h", ++ "unicode/dtitvfmt.h", ++ "unicode/dtitvinf.h", ++ "unicode/dtptngen.h", ++ "unicode/dtrule.h", ++ "unicode/fieldpos.h", ++ "unicode/fmtable.h", ++ "unicode/format.h", ++ "unicode/fpositer.h", ++ "unicode/gender.h", ++ "unicode/gregocal.h", ++ "unicode/locdspnm.h", ++ "unicode/measfmt.h", ++ "unicode/measunit.h", ++ "unicode/measure.h", ++ "unicode/msgfmt.h", ++ "unicode/numfmt.h", ++ "unicode/numsys.h", ++ "unicode/plurfmt.h", ++ "unicode/plurrule.h", ++ "unicode/rbnf.h", ++ "unicode/rbtz.h", ++ "unicode/regex.h", ++ "unicode/region.h", ++ "unicode/reldatefmt.h", ++ "unicode/scientificnumberformatter.h", ++ "unicode/search.h", ++ "unicode/selfmt.h", ++ "unicode/simpletz.h", ++ "unicode/smpdtfmt.h", ++ "unicode/sortkey.h", ++ "unicode/stsearch.h", ++ "unicode/tblcoll.h", ++ "unicode/timezone.h", ++ "unicode/tmunit.h", ++ "unicode/tmutamt.h", ++ "unicode/tmutfmt.h", ++ "unicode/translit.h", ++ "unicode/tzfmt.h", ++ "unicode/tznames.h", ++ "unicode/tzrule.h", ++ "unicode/tztrans.h", ++ "unicode/ucal.h", ++ "unicode/ucol.h", ++ "unicode/ucoleitr.h", ++ "unicode/ucsdet.h", ++ "unicode/ucurr.h", ++ "unicode/udat.h", ++ "unicode/udateintervalformat.h", ++ "unicode/udatpg.h", ++ "unicode/udisplaycontext.h", ++ "unicode/ufieldpositer.h", ++ "unicode/uformattable.h", ++ "unicode/ugender.h", ++ "unicode/uldnames.h", ++ "unicode/ulocdata.h", ++ "unicode/umsg.h", ++ "unicode/unirepl.h", ++ "unicode/unum.h", ++ "unicode/unumsys.h", ++ "unicode/upluralrules.h", ++ "unicode/uregex.h", ++ "unicode/uregion.h", ++ "unicode/usearch.h", ++ "unicode/uspoof.h", ++ "unicode/utmscale.h", ++ "unicode/utrans.h", ++ "unicode/vtzone.h", ++ ] ++} ++ ++shim_headers("icuuc_shim") { ++ root_path = "source/common" ++ headers = [ ++ # This list can easily be updated using the command below: ++ # find third_party/icu/source/common/unicode \ ++ # -iname '*.h' -printf '"%p",\n' | \ ++ # sed -e 's|third_party/icu/source/common/||' | sort -u ++ "unicode/appendable.h", ++ "unicode/brkiter.h", ++ "unicode/bytestream.h", ++ "unicode/bytestrie.h", ++ "unicode/bytestriebuilder.h", ++ "unicode/caniter.h", ++ "unicode/chariter.h", ++ "unicode/dbbi.h", ++ "unicode/docmain.h", ++ "unicode/dtintrv.h", ++ "unicode/enumset.h", ++ "unicode/errorcode.h", ++ "unicode/filteredbrk.h", ++ "unicode/icudataver.h", ++ "unicode/icuplug.h", ++ "unicode/idna.h", ++ "unicode/listformatter.h", ++ "unicode/localpointer.h", ++ "unicode/locid.h", ++ "unicode/messagepattern.h", ++ "unicode/normalizer2.h", ++ "unicode/normlzr.h", ++ "unicode/parseerr.h", ++ "unicode/parsepos.h", ++ "unicode/platform.h", ++ "unicode/ptypes.h", ++ "unicode/putil.h", ++ "unicode/rbbi.h", ++ "unicode/rep.h", ++ "unicode/resbund.h", ++ "unicode/schriter.h", ++ "unicode/std_string.h", ++ "unicode/strenum.h", ++ "unicode/stringpiece.h", ++ "unicode/stringtriebuilder.h", ++ "unicode/symtable.h", ++ "unicode/ubidi.h", ++ "unicode/ubrk.h", ++ "unicode/ucasemap.h", ++ "unicode/ucat.h", ++ "unicode/uchar.h", ++ "unicode/ucharstrie.h", ++ "unicode/ucharstriebuilder.h", ++ "unicode/uchriter.h", ++ "unicode/uclean.h", ++ "unicode/ucnv.h", ++ "unicode/ucnv_cb.h", ++ "unicode/ucnv_err.h", ++ "unicode/ucnvsel.h", ++ "unicode/uconfig.h", ++ "unicode/udata.h", ++ "unicode/uenum.h", ++ "unicode/uidna.h", ++ "unicode/uiter.h", ++ "unicode/ulistformatter.h", ++ "unicode/uloc.h", ++ "unicode/umachine.h", ++ "unicode/umisc.h", ++ "unicode/unifilt.h", ++ "unicode/unifunct.h", ++ "unicode/unimatch.h", ++ "unicode/uniset.h", ++ "unicode/unistr.h", ++ "unicode/unorm.h", ++ "unicode/unorm2.h", ++ "unicode/uobject.h", ++ "unicode/urename.h", ++ "unicode/urep.h", ++ "unicode/ures.h", ++ "unicode/uscript.h", ++ "unicode/uset.h", ++ "unicode/usetiter.h", ++ "unicode/ushape.h", ++ "unicode/usprep.h", ++ "unicode/ustring.h", ++ "unicode/ustringtrie.h", ++ "unicode/utext.h", ++ "unicode/utf.h", ++ "unicode/utf16.h", ++ "unicode/utf32.h", ++ "unicode/utf8.h", ++ "unicode/utf_old.h", ++ "unicode/utrace.h", ++ "unicode/utypes.h", ++ "unicode/uvernum.h", ++ "unicode/uversion.h", ++ ] ++} +--- chromium-54.0.2840.71/build/linux/unbundle/replace_gn_files.py.gn-system-icu 2016-10-21 00:01:59.000000000 +0200 ++++ chromium-54.0.2840.71/build/linux/unbundle/replace_gn_files.py 2016-10-22 21:31:25.859269944 +0200 +@@ -20,6 +20,7 @@ + 'ffmpeg': 'third_party/ffmpeg/BUILD.gn', + 'flac': 'third_party/flac/BUILD.gn', + 'harfbuzz-ng': 'third_party/harfbuzz-ng/BUILD.gn', ++ 'icu': 'third_party/icu/BUILD.gn', + 'libevent': 'base/third_party/libevent/BUILD.gn', + 'libjpeg': 'build/secondary/third_party/libjpeg_turbo/BUILD.gn', + 'libpng': 'third_party/libpng/BUILD.gn', diff --git a/chromium-54-no-ash.patch b/chromium-54-no-ash.patch new file mode 100644 index 0000000..ad33485 --- /dev/null +++ b/chromium-54-no-ash.patch @@ -0,0 +1,38 @@ +--- chromium-54.0.2840.16/chrome/browser/extensions/api/tabs/tabs_api.cc.no-ash 2016-09-09 00:02:22.000000000 +0200 ++++ chromium-54.0.2840.16/chrome/browser/extensions/api/tabs/tabs_api.cc 2016-09-13 06:30:44.958499013 +0200 +@@ -260,6 +260,7 @@ + return true; + } + ++#if defined(USE_ASH) + bool IsHangoutsExtensionId(const std::string& extension_id) { + for (const char* id : extension_misc::kHangoutsExtensionIds) { + if (extension_id == id) +@@ -267,6 +268,7 @@ + } + return false; + } ++#endif // defined(USE_ASH) + + } // namespace + +@@ -520,7 +522,9 @@ + + gfx::Rect window_bounds; + bool focused = true; ++#if defined(USE_ASH) + bool saw_focus_key = false; ++#endif // defined(USE_ASH) + std::string extension_id; + + if (create_data) { +@@ -593,7 +597,9 @@ + + if (create_data->focused) { + focused = *create_data->focused; ++#if defined(USE_ASH) + saw_focus_key = true; ++#endif // defined(USE_ASH) + } + } + diff --git a/chromium-54-no-deprecated-error.patch b/chromium-54-no-deprecated-error.patch new file mode 100644 index 0000000..2d4e0c5 --- /dev/null +++ b/chromium-54-no-deprecated-error.patch @@ -0,0 +1,18 @@ +diff -urN chromium-54.0.2840.100/base/BUILD.gn chromium-54.0.2840.100-patched/base/BUILD.gn +--- chromium-54.0.2840.100/base/BUILD.gn 2016-11-11 06:02:09.000000000 +1000 ++++ chromium-54.0.2840.100-patched/base/BUILD.gn 2016-11-16 15:18:19.361838354 +1000 +@@ -45,13 +45,7 @@ + } + + config("base_flags") { +- if (is_clang) { +- cflags = [ +- # Don't die on dtoa code that uses a char as an array index. +- # This is required solely for base/third_party/dmg_fp/dtoa_wrapper.cc. +- "-Wno-char-subscripts", +- ] +- } ++ cflags = [ "-Wno-error=deprecated-declarations" ] + } + + config("base_implementation") { diff --git a/chromium-54-proprietary-codecs-assert.patch b/chromium-54-proprietary-codecs-assert.patch new file mode 100644 index 0000000..0218543 --- /dev/null +++ b/chromium-54-proprietary-codecs-assert.patch @@ -0,0 +1,15 @@ +--- chromium-54.0.2840.16/media/BUILD.gn.proprietary-codecs 2016-09-09 00:02:27.000000000 +0200 ++++ chromium-54.0.2840.16/media/BUILD.gn 2016-09-12 15:08:34.566096246 +0200 +@@ -23,12 +23,6 @@ + ] + } + +-if (proprietary_codecs && media_use_ffmpeg) { +- assert( +- ffmpeg_branding != "Chromium", +- "proprietary codecs and ffmpeg_branding set to Chromium are incompatible") +-} +- + # Common configuration for targets in the media directory. + # NOT for exporting. + config("media_config") { diff --git a/chromium-arm-r0.patch b/chromium-arm-r0.patch deleted file mode 100644 index 33adc0a..0000000 --- a/chromium-arm-r0.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- third_party/icu/icu.gyp.orig 2014-05-20 19:17:22.879538568 -0600 -+++ third_party/icu/icu.gyp 2014-05-20 19:19:42.204032167 -0600 -@@ -34,7 +34,7 @@ - }], - ['(OS=="linux" or OS=="freebsd" or OS=="openbsd" or OS=="solaris" \ - or OS=="netbsd" or OS=="mac" or OS=="android" or OS=="qnx") and \ -- (target_arch=="arm" or target_arch=="ia32" or \ -+ (target_arch=="ia32" or \ - target_arch=="mipsel")', { - 'target_conditions': [ - ['_toolset=="host"', { diff --git a/chromium-browser-stable.rpmlintrc b/chromium-browser-stable.rpmlintrc new file mode 100644 index 0000000..a90fbe7 --- /dev/null +++ b/chromium-browser-stable.rpmlintrc @@ -0,0 +1 @@ +addFilter("use-of-RPM_SOURCE_DIR") diff --git a/chromium-browser-stable.spec b/chromium-browser-stable.spec index d2f6420..7adb07b 100644 --- a/chromium-browser-stable.spec +++ b/chromium-browser-stable.spec @@ -9,7 +9,6 @@ %define _src %{_topdir}/SOURCES %define chromium_system_libs 1 -%define clang 0 %define ffmpeg 0 %define icu 0 %define libva 0 @@ -17,32 +16,62 @@ # http://bugs.rosalinux.ru/show_bug.cgi?id=6826#c3 %define gtk3 0 +# Set up Google API keys, see http://www.chromium.org/developers/how-tos/api-keys +# Note: these are for Mageia use ONLY. +# For your own builds, please get your own set of keys. +%define google_api_key AIzaSyCV9AOzytWwWCtNE8f7ZV56fP1u9yWwhVU +%define google_default_client_id 1039996407057.apps.googleusercontent.com +%define google_default_client_secret mLT8XooDODav1OJG5G3bY61d + Summary: A fast web browser based on the Blink engine Name: chromium-browser-stable -Version: 53.0.2785.92 +Version: 54.0.2840.100 Release: 1 License: BSD, LGPL Group: Networking/WWW Source0: https://commondatastorage.googleapis.com/chromium-browser-official/chromium-%{version}.tar.xz Source1: chromium-wrapper Source2: chromium-browser.desktop +# Setup toolchain for rosa builds, from gentoo +# https://gitweb.gentoo.org/repo/gentoo.git/plain/www-client/chromium/files/toolchain/BUILD.gn +Source5: BUILD.gn +Source10: %{name}.rpmlintrc Source30: master_preferences Source31: default_bookmarks.html Source32: chromium.default Source100: icons.tar.bz2 Source997: depot_tools.tar.xz -Source998: gn-binaries.tar.xz Source999: new-system-icons.tar.xz Source1000: README.urpmi +Patch0: chromium-54-no-deprecated-error.patch Patch4: chromium-30.0.1599.66-master-prefs-path.patch # PATCH-FIX-UPSTREAM Add more charset aliases Patch6: chromium-more-codec-aliases.patch # PATCH-FIX-OPENSUSE Compile the sandbox with -fPIE settings Patch15: chromium-25.0.1364.172-sandbox-pie.patch -# archlinux arm enhancement patches -Patch100: arm-webrtc-fix.patch -Patch101: chromium-arm-r0.patch +# (cjw) fix build with system icu using gn +Patch21: chromium-54-gn-system-icu.patch +# (cjw) remove assertion on "chromium" branding in combination with enabled "proprietary codecs" +Patch22: chromium-54-proprietary-codecs-assert.patch +# (cjw) fix a compilation warning +Patch23: chromium-53-bignum-werror-fix.patch +# (cjw) add -Wno-error=depecated-declarations because ffmpeg deprecations cause the build to fail +Patch24: chromium-53-ffmpeg-no-deprecation-errors.patch +# (cjw) fix compilation warnings when built with ASH disabled +Patch25: chromium-54-no-ash.patch +# (cjw) fix BreakIterator ambiguity +Patch26: chromium-53-breakiterator.patch +# (cjw) link several libraries directly instead of loading them using dlopen() +Patch27: chromium-53-link-libgio-libpci-libudev-libbrlapi.patch +# (cjw) add missing unbundle gn files (1) +Patch28: chromium-53-gn-system-icu-jsoncpp.patch +# (cjw) add missing unbundle gn files (2) +Patch29: chromium-53-gn-system-opus.patch +# (cjw) build pdfium with system libtiff and libpng +Patch30: chromium-52-pdfium-system-libtiff-libpng.patch +# (cjw) fix build with ffmpeg 2.8.x +Patch31: chromium-54-ffmpeg-2.8.patch # New from Debian Patch500: chromium-third-party-cookies-off-by-default.patch @@ -50,9 +79,9 @@ Patch501: chromium-ps-print.patch # Google patched their bundled copy of icu 54 to include API functionality that wasn't added until 55. # :P -Patch502: chromium-45.0.2454.101-system-icu-54-does-not-have-detectHostTimeZone.patch +Patch502: chromium-45.0.2454.101-system-icu-54-does-not-have-detectHostTimeZone.patch # http://bazaar.launchpad.net/~saiarcot895/chromium-browser/chromium-browser.trusty.beta/revision/230#debian/patches/enable_vaapi_on_linux.diff -Patch503: enable_vaapi_on_linux.diff +Patch503: enable_vaapi_on_linux.diff # Patch to fix build with use_system_libvpx # Chromium bug #541273 # fix build with icu other than 54 @@ -64,27 +93,30 @@ Patch505: chromium-system-ffmpeg-r3.patch Patch506: chromium-51-system-ffmpeg-3.patch # fix https://bugs.chromium.org/p/chromium/issues/detail?id=585513 # vaInitialize failed VA error: unknown libva error -Patch507: issue1688073002_40001.diff -# https://aur.archlinux.org/cgit/aur.git/plain/PNGImageDecoder.patch?h=chromium-gtk3 -# fix build with system libpng -Patch601: PNGImageDecoder.patch +Patch507: issue1688073002_40001.diff Provides: %{crname} = %{EVRD} Conflicts: chromium-browser-unstable Conflicts: chromium-browser-beta Obsoletes: chromium-browser < 1:9.0.597.94 -BuildRequires: %{_lib}jsoncpp-devel BuildRequires: bison +BuildRequires: flex +BuildRequires: git +BuildRequires: gperf +BuildRequires: gyp +BuildRequires: ninja +BuildRequires: util-linux +BuildRequires: yasm +BuildRequires: atomic-devel BuildRequires: bzip2-devel BuildRequires: cap-devel BuildRequires: cups-devel BuildRequires: elfutils-devel -BuildRequires: flex -BuildRequires: gperf -BuildRequires: gyp BuildRequires: jpeg-devel -BuildRequires: ninja +BuildRequires: jsoncpp-devel BuildRequires: pam-devel +BuildRequires: snappy-devel +BuildRequires: speech-dispatcher-devel BuildRequires: pkgconfig(alsa) BuildRequires: pkgconfig(atk) BuildRequires: pkgconfig(dbus-glib-1) @@ -108,15 +140,16 @@ BuildRequires: pkgconfig(harfbuzz) %if 0%{icu} BuildRequires: pkgconfig(icu-i18n) %endif -BuildRequires: pkgconfig(libevent) BuildRequires: pkgconfig(libexif) BuildRequires: pkgconfig(libgcrypt) BuildRequires: pkgconfig(libgpsd) BuildRequires: pkgconfig(libmtp) +BuildRequires: pkgconfig(libopenjp2) BuildRequires: pkgconfig(libpci) +BuildRequires: pkgconfig(libpng) BuildRequires: pkgconfig(libpulse) +BuildRequires: pkgconfig(libtiff-4) BuildRequires: pkgconfig(libusb-1.0) -BuildRequires: pkgconfig(libwebp) BuildRequires: pkgconfig(libxml-2.0) BuildRequires: pkgconfig(libxslt) %if 0%{?libva} @@ -133,14 +166,6 @@ BuildRequires: pkgconfig(xscrnsaver) BuildRequires: pkgconfig(xt) BuildRequires: pkgconfig(xtst) BuildRequires: pkgconfig(zlib) -BuildRequires: speech-dispatcher-devel -BuildRequires: util-linux -BuildRequires: yasm -BuildRequires: %{_lib}atomic-devel - -%if 0%{?clang} -BuildRequires: clang -%endif Suggests: chromium-browser-pepper-flash Suggests: chromium-widevinecdm-plugin @@ -177,15 +202,17 @@ your profile before changing channels. %{_crdir}/chrome-sandbox %{_crdir}/icudtl.dat %{_crdir}/locales -%{_crdir}/lib +%{_crdir}/mus_app_resources_100.pak +%{_crdir}/mus_app_resources_200.pak +%{_crdir}/mus_app_resources_strings.pak %{_crdir}/resources.pak %{_crdir}/resources %{_crdir}/chrome_*_percent.pak -%{_crdir}/content_resources.pak %{_crdir}/keyboard_resources.pak %{_crdir}/*_blob.bin %{_crdir}/themes %{_crdir}/default_apps +%{_crdir}/views_mus_resources.pak %dir %{_crdir}/pepper %{_mandir}/man1/%{crname}* %{_datadir}/applications/*.desktop @@ -232,65 +259,26 @@ members of the Chromium and WebDriver teams. #---------------------------------------------------------------------------- %prep -%setup -qn chromium-%{version} -a 998 -a 997 -a 999 - -# files we do not want from upstream source bundles -rm -rf breakpad/src/processor/testdata/ -rm -rf chrome/app/test_data/dlls/ -rm -rf chrome/common/extensions/docs/ -#rm -rf chrome/test/data/ -rm -rf chrome/tools/test/reference_build/chrome_linux/ -rm -rf components/test/data/component_updater/jebgalgnebhfojomionfpkfelancnnkf/component1.dll -rm -rf content/test/data/ -rm -rf net/data/ -rm -rf ppapi/examples/ -rm -rf ppapi/native_client/tests/ -rm -rf third_party/apache-win32/ -rm -rf third_party/binutils/ -rm -rf third_party/expat/files/ -%if 0%{?ffmpeg} -rm -rf third_party/ffmpeg/*/* -rm -rf third_party/ffmpeg/*.[ch] -%endif -rm -rf third_party/flac/include -rm -rf third_party/flac/src -rm -rf third_party/lcov -rm -rf third_party/libevent/*/* -rm -rf third_party/libevent/*.[ch] -rm -rf libexif/sources -rm -rf libjpeg/*.[ch] -rm -rf libjpeg_turbo -rm -rf libpng/*.[ch] -rm -rf libxslt/libexslt -rm -rf libxslt/libxslt -rm -rf libxslt/linux -rm -rf libxslt/mac -rm -rf libxslt/win32 -rm -rf mesa/src/src -rm -rf swig -rm -rf third_party/WebKit/LayoutTests/ -rm -rf third_party/WebKit/Tools/Scripts/ -rm -rf third_party/xdg-utils/tests/ -rm -rf third_party/yasm/source/ -rm -rf tools/gyp/test/ -rm -rf v8/test/ - -%if 0%{icu} -# Remove bundled ICU; its header files appear to get picked up instead of -# the system ones, leading to errors during the final link stage. -# https://groups.google.com/a/chromium.org/d/topic/chromium-packagers/BNGvJc08B6Q -find third_party/icu -type f \! -regex '.*\.\(gyp\|gypi\|isolate\)' -delete -%endif +%setup -qn chromium-%{version} -a 997 -a 999 +%patch0 -p1 %patch4 -p1 -b .prefs %patch6 -p0 #patch14 -p1 %patch15 -p1 -# archlinux arm enhancements -%patch100 -p0 -%patch101 -p0 +%patch21 -p1 +%patch22 -p1 +%patch23 -p1 +%patch24 -p1 +%patch25 -p1 +%patch26 -p1 +%patch27 -p1 +%patch28 -p1 +%patch29 -p1 +%patch30 -p1 +%patch31 -p1 # new from debian %patch500 -p1 @@ -310,7 +298,71 @@ find third_party/icu -type f \! -regex '.*\.\(gyp\|gypi\|isolate\)' -delete %patch505 -p1 %patch506 -p1 %endif -#patch601 -p1 + +# files we do not want from upstream source bundles +rm -rf breakpad/src/processor/testdata/ +rm -rf chrome/app/test_data/dlls/ +rm -rf chrome/common/extensions/docs/ +#rm -rf chrome/test/data/ +touch chrome/test/data/webui/i18n_process_css_test.html +rm -rf chrome/tools/test/reference_build/chrome_linux/ +rm -rf components/test/data/component_updater/jebgalgnebhfojomionfpkfelancnnkf/component1.dll +rm -rf content/test/data/ +rm -rf net/data/ +#rm -rf ppapi/examples/ +rm -rf ppapi/native_client/tests/ +rm -rf third_party/apache-win32/ +rm -rf third_party/binutils/ +rm -rf third_party/expat/files/ +#rm -rf third_party/ffmpeg/*/* +#rm -rf third_party/ffmpeg/*.[ch] +rm -rf third_party/flac/{include,src} +#rm -rf third_party/icu/{android,linux,mac,patches,public,source,windows} +rm -rf third_party/lcov +#rm -rf base/third_party/libevent/*/* +#rm -rf base/third_party/libevent/*.[ch] +#rm -rf third_party/libvpx/source/libvpx +rm -rf third_party/libexif/sources +rm -rf third_party/libjpeg/*.[ch] +rm -rf third_party/libjpeg_turbo/*.[ch] +rm -rf third_party/libpng/*.[ch] +rm -rf third_party/libxslt/{libexslt,libxslt,linux,mac,win32} +rm -rf third_party/mesa/src/src +rm -rf third_party/swig +rm -rf third_party/WebKit/LayoutTests/ +rm -rf third_party/WebKit/Tools/Scripts/ +rm -rf third_party/xdg-utils/tests/ +rm -rf third_party/yasm/source/ +rm -rf third_party/zlib/{*.[ch],contrib/minizip} +rm -rf tools/gyp/test/ +#rm -rf v8/test/ +rm -r third_party/pdfium/third_party/libjpeg/*.[ch] +rm -f third_party/pdfium/third_party/libtiff/*.[ch] + +rm -f third_party/skia/platform_tools/android/apps/gradle/wrapper/gradle-wrapper.jar +rm -f third_party/WebKit/Source/devtools/scripts/jsdoc-validator/jsdoc-validator.jar +rm -f third_party/WebKit/Source/devtools/scripts/closure/compiler.jar +rm -f third_party/WebKit/Source/devtools/scripts/compiler-runner/closure-runner.jar +rm -rf third_party/sfntly/src/java/lib +rm -f third_party/haha/haha-2.0.2.jar +rm -f third_party/android_platform/webview/frameworks_5.1.0_r1.jar +rm -f third_party/android_platform/webview/frameworks_6.0.jar +rm -f third_party/libphonenumber/dist/tools/java/java-build/target/java-build-1.0-SNAPSHOT-jar-with-dependencies.jar +rm -f third_party/libphonenumber/dist/tools/java/cpp-build/target/cpp-build-1.0-SNAPSHOT-jar-with-dependencies.jar +rm -rf third_party/libphonenumber/dist/java/demo/war/WEB-INF/lib +rm -rf third_party/libphonenumber/dist/java/lib +rm -f third_party/webrtc/examples/androidapp/third_party/autobanh/autobanh.jar +rm -rf third_party/cacheinvalidation/src/example-app-build/libs +rm -f third_party/closure_compiler/runner/runner.jar +rm -f third_party/closure_compiler/compiler/compiler.jar +rm -rf third_party/proguard/lib +rm -f third_party/checkstyle/checkstyle-6.5-all.jar +rm -rf third_party/sfntly/src/cpp/ext + +# Remove bundled ICU; its header files appear to get picked up instead of +# the system ones, leading to errors during the final link stage. +# https://groups.google.com/a/chromium.org/d/topic/chromium-packagers/BNGvJc08B6Q +#find third_party/icu -type f \! -regex '.*\.\(gn\|gni\|isolate\)' -delete ### build with widevine support @@ -324,137 +376,70 @@ sed -i.orig -e 's/getenv("CHROME_VERSION_EXTRA")/"%{product_vendor} %{product_ve cmp $FILE $FILE.orig && exit 1 %build -# https://groups.google.com/a/chromium.org/forum/#!topic/chromium-packagers/9JX1N2nf4PU -touch chrome/test/data/webui/i18n_process_css_test.html -touch chrome/test/data/webui_test_resources.grd +%define system_gn_list flac harfbuzz-ng libxml libxslt snappy yasm libpng zlib jsoncpp opus +# icu +# ffmpeg +# libevent +# libvpx +# libwebp -buildconfig+="-Dwerror= - -Dlinux_sandbox_chrome_path=%{_libdir}/%{name}/chrome - -Dproprietary_codecs=1 - -Dremove_webcore_debug_symbols=1 - -Dlogging_like_official_build=1 - -Dlinux_fpic=1 - -Ddisable_sse2=1 - -Dcomponent=shared_library - -Ddisable_nacl=1 - -Ddisable_glibc=0 - -Ddisable_pnacl=1 - -Ddisable_newlib_untar=0 - -Duse_system_xdg_utils=1 - -Denable_hotwording=0 - -Denable_widevine=1 - -Denable_hidpi=1 - -Denable_touch_ui=1 - -Denable_pepper_cdms=1 - -Denable_webrtc=1 - -Drtc_use_h264=1 - -Duse_gnome_keyring=1 - -Duse_gconf=0 - -Duse_sysroot=0 - -Duse_aura=1" +# v NO TABS IN HERE! +%define gn_config use_gconf=false\ + use_sysroot=false \ + system_libdir="%{_lib}" \ + icu_use_data_file=true \ + enable_nacl=false \ + is_nacl_glibc=false \ + binutils_path="%{_bindir}" \ + linux_use_bundled_binutils=false \ + use_gold=false \ + custom_toolchain="%{_sourcedir}:default" \ + proprietary_codecs=true \ + linux_link_libgio = true \ + linux_link_libpci = true \ + linux_link_libudev = true \ + linux_link_libspeechd = true \ + enable_ac3_eac3_audio_demuxing=true \ + enable_mse_mpeg2ts_stream_parser=true \ + enable_hevc_demuxing=true \ + use_system_libjpeg=true \ + use_libjpeg_turbo=false \ + enable_widevine=true \ + enable_browser_cdms=true \ + pdf_enable_xfa=true \ + use_pulseaudio=true \ + use_allocator="none" \ + use_gtk3=false \ + treat_warnings_as_errors=false \ + fatal_linker_warnings=false \ + use_libpci = true \ + is_debug=false \ + is_clang=false \ + google_api_key="%{google_api_key}" \ + google_default_client_id="%{google_default_client_id}" \ + google_default_client_secret="%{google_default_client_secret}" -%if 0%{?gtk3} -buildconfig+=" -Duse_gtk3=1" -%else -buildconfig+=" -Dtoolkit_uses_gtk=0" -%endif +build/linux/unbundle/replace_gn_files.py --system-libraries %{system_gn_list} +third_party/libaddressinput/chromium/tools/update-strings.py -%if 0%{?ffmpeg} -buildconfig+=" -Duse_system_ffmpeg=1" -%else -buildconfig+=" -Duse_system_ffmpeg=0 - -Dbuild_ffmpegsumo=1 - -Dffmpeg_branding=Chrome" -%endif +%setup_compile_flags +CC=%{__cc}; export CC +CXX=%{__cxx}; export CXX +AR=%{__ar}; export AR +NM=%{__nm}; export NM +LD=%{__cxx}; export LD -%if 0%{?clang} -buildconfig+=" -Dclang=1 - -Dclang_use_chrome_plugins=0" -%else -buildconfig+=" -Dclang=0" -%endif +# filter out some flags to fix i586 builds +CFLAGS=$(echo "$CFLAGS"|sed -e 's/-gdwarf-4//' -e 's/-fvar-tracking-assignments//' -e 's/-frecord-gcc-switches//') +CXXFLAGS=$(echo "$CXXFLAGS"|sed -e 's/-gdwarf-4//' -e 's/-fvar-tracking-assignments//' -e 's/-frecord-gcc-switches//') -%if 0%{icu} -buildconfig+=" -Duse_system_icu=1" -%else -buildconfig+=" -Duse_system_icu=0" -%endif +python tools/gn/bootstrap/bootstrap.py --gn-gen-args='%{gn_config}' -%if 0%{?chromium_system_libs} -buildconfig+=" -Duse_system_flac=1 - -Duse_system_speex=1 - -Duse_system_fontconfig=1 - -Duse_system_jsoncpp=1 - -Duse_system_expat=1 - -Duse_system_libexif=1 - -Duse_system_libevent=1 - -Duse_system_libmtp=1 - -Duse_system_opus=1 - -Duse_system_bzip2=1 - -Duse_system_harfbuzz=0 - -Duse_system_libjpeg=1 - -Duse_system_libpng=1 - -Duse_system_libxslt=1 - -Duse_system_libxml=0 - -Duse_system_libyuv=1 - -Duse_system_nspr=1 - -Duse_system_protobuf=0 - -Duse_system_zlib=1 - -Duse_system_libvpx=0 - -Duse_system_yasm=1" -%else -buildconfig+=" -Duse_system_flac=0 - -Duse_system_speex=0 - -Duse_system_libexif=0 - -Duse_system_libevent=0 - -Duse_system_libmtp=0 - -Duse_system_opus=0 - -Duse_system_bzip2=0 - -Duse_system_harfbuzz=0 - -Duse_system_libjpeg=0 - -Duse_system_libpng=0 - -Duse_system_libxslt=0 - -Duse_system_libxml=0 - -Duse_system_libyuv=0 - -Duse_system_nspr=0 - -Duse_system_protobuf=0 - -Duse_system_yasm=0" -%endif +out/Release/gn gen --args='%{gn_config}' out/Release -%ifarch x86_64 -buildconfig+=" -Dsystem_libdir=lib64 - -Dtarget_arch=x64" -%endif - -buildconfig+=" -Duse_pulseaudio=1 - -Dlinux_link_libpci=1 - -Dlinux_link_gnome_keyring=1 - -Dlinux_link_gsettings=1 - -Dlinux_link_libgps=1 - -Dlinux_link_libspeechd=1 - -Djavascript_engine=v8 - -Dlinux_use_gold_binary=0 - -Dlinux_use_gold_flags=0 - -Dgoogle_api_key=AIzaSyD1hTe85_a14kr1Ks8T3Ce75rvbR1_Dx7Q - -Dgoogle_default_client_id=4139804441.apps.googleusercontent.com - -Dgoogle_default_client_secret=KDTRKEZk2jwT_7CDpcmMA--P" - -%if 0%{?clang} -export CC=/usr/bin/clang -export CXX=/usr/bin/clang++ -# Modern Clang produces a *lot* of warnings -export CXXFLAGS="${CXXFLAGS} -Wno-unknown-warning-option -Wno-unused-local-typedef -Wunknown-attributes -Wno-tautological-undefined-compare" -export GYP_DEFINES="clang=1" -%endif - -build/linux/unbundle/replace_gyp_files.py $buildconfig - -export GYP_GENERATORS='ninja' -./build/gyp_chromium build/all.gyp --depth=. $buildconfig - -mkdir -p out/Release - -ninja -C out/Release chrome chrome_sandbox chromedriver widevinecdmadapter clearkeycdm +pushd out/Release +ninja %{_smp_mflags} chrome chrome_sandbox chromedriver widevinecdmadapter clearkeycdm +popd %install mkdir -p %{buildroot}%{_bindir} @@ -471,10 +456,6 @@ install -m 644 out/Release/*.pak %{buildroot}%{_crdir}/ install -m 644 out/Release/icudtl.dat %{buildroot}%{_crdir}/ cp -a out/Release/*_blob.bin %{buildroot}%{_crdir}/ -# chromium components -mkdir -p %{buildroot}%{_crdir}/lib/ -cp -av out/Release/lib/*.so %{buildroot}%{_crdir}/lib/ - install -m 644 out/Release/locales/*.pak %{buildroot}%{_crdir}/locales/ install -m 644 out/Release/resources.pak %{buildroot}%{_crdir}/ install -m 644 chrome/browser/resources/default_apps/* %{buildroot}%{_crdir}/default_apps/ diff --git a/icons.tar.bz2 b/icons.tar.bz2 deleted file mode 100644 index 0e29ea3c3cfde74bd26ed4a86a78412159ed91d4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40051 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⁣ioPp3Npfo(CzN*RzX9 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%0AEav*1_IH44E>rD! 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 a+Kv_I$&<%2Or?AOi@744C`czbE{*_2Hu;PI