Date: Monday, September 18, 2017 @ 17:59:09 Author: heftig Revision: 305821
archrelease: copy trunk to testing-i686, testing-x86_64 Added: thunderbird/repos/testing-i686/ thunderbird/repos/testing-i686/PKGBUILD (from rev 305820, thunderbird/trunk/PKGBUILD) thunderbird/repos/testing-i686/clip-ft-glyph-52esr.diff (from rev 305820, thunderbird/trunk/clip-ft-glyph-52esr.diff) thunderbird/repos/testing-i686/fix-wifi-scanner.diff (from rev 305820, thunderbird/trunk/fix-wifi-scanner.diff) thunderbird/repos/testing-i686/glibc-2.26-fix.diff (from rev 305820, thunderbird/trunk/glibc-2.26-fix.diff) thunderbird/repos/testing-i686/harmony-fix.diff (from rev 305820, thunderbird/trunk/harmony-fix.diff) thunderbird/repos/testing-i686/no-crmf.diff (from rev 305820, thunderbird/trunk/no-crmf.diff) thunderbird/repos/testing-i686/rust-i686.patch (from rev 305820, thunderbird/trunk/rust-i686.patch) thunderbird/repos/testing-i686/thunderbird-install-dir.patch (from rev 305820, thunderbird/trunk/thunderbird-install-dir.patch) thunderbird/repos/testing-i686/thunderbird.desktop (from rev 305820, thunderbird/trunk/thunderbird.desktop) thunderbird/repos/testing-x86_64/ thunderbird/repos/testing-x86_64/PKGBUILD (from rev 305820, thunderbird/trunk/PKGBUILD) thunderbird/repos/testing-x86_64/clip-ft-glyph-52esr.diff (from rev 305820, thunderbird/trunk/clip-ft-glyph-52esr.diff) thunderbird/repos/testing-x86_64/fix-wifi-scanner.diff (from rev 305820, thunderbird/trunk/fix-wifi-scanner.diff) thunderbird/repos/testing-x86_64/glibc-2.26-fix.diff (from rev 305820, thunderbird/trunk/glibc-2.26-fix.diff) thunderbird/repos/testing-x86_64/harmony-fix.diff (from rev 305820, thunderbird/trunk/harmony-fix.diff) thunderbird/repos/testing-x86_64/no-crmf.diff (from rev 305820, thunderbird/trunk/no-crmf.diff) thunderbird/repos/testing-x86_64/rust-i686.patch (from rev 305820, thunderbird/trunk/rust-i686.patch) thunderbird/repos/testing-x86_64/thunderbird-install-dir.patch (from rev 305820, thunderbird/trunk/thunderbird-install-dir.patch) thunderbird/repos/testing-x86_64/thunderbird.desktop (from rev 305820, thunderbird/trunk/thunderbird.desktop) ----------------------------------------------+ testing-i686/PKGBUILD | 186 ++++++++++++++++++ testing-i686/clip-ft-glyph-52esr.diff | 147 ++++++++++++++ testing-i686/fix-wifi-scanner.diff | 16 + testing-i686/glibc-2.26-fix.diff | 258 +++++++++++++++++++++++++ testing-i686/harmony-fix.diff | 16 + testing-i686/no-crmf.diff | 39 +++ testing-i686/rust-i686.patch | 16 + testing-i686/thunderbird-install-dir.patch | 12 + testing-i686/thunderbird.desktop | 173 ++++++++++++++++ testing-x86_64/PKGBUILD | 186 ++++++++++++++++++ testing-x86_64/clip-ft-glyph-52esr.diff | 147 ++++++++++++++ testing-x86_64/fix-wifi-scanner.diff | 16 + testing-x86_64/glibc-2.26-fix.diff | 258 +++++++++++++++++++++++++ testing-x86_64/harmony-fix.diff | 16 + testing-x86_64/no-crmf.diff | 39 +++ testing-x86_64/rust-i686.patch | 16 + testing-x86_64/thunderbird-install-dir.patch | 12 + testing-x86_64/thunderbird.desktop | 173 ++++++++++++++++ 18 files changed, 1726 insertions(+) Copied: thunderbird/repos/testing-i686/PKGBUILD (from rev 305820, thunderbird/trunk/PKGBUILD) =================================================================== --- testing-i686/PKGBUILD (rev 0) +++ testing-i686/PKGBUILD 2017-09-18 17:59:09 UTC (rev 305821) @@ -0,0 +1,186 @@ +# $Id$ +# Maintainer: Jan Alexander Steffens (heftig) <jan.steff...@gmail.com> +# Contributor: Ionut Biru <ib...@archlinux.org> +# Contributor: Alexander Baldeck <alexan...@archlinux.org> +# Contributor: Dale Blount <d...@archlinux.org> +# Contributor: Anders Bostrom <anders.bost...@home.se> + +pkgname=thunderbird +pkgver=52.3.0 +pkgrel=2 +pkgdesc="Standalone mail and news reader from mozilla.org" +arch=(i686 x86_64) +license=(MPL GPL LGPL) +url="https://www.mozilla.org/thunderbird/" +depends=(gtk3 gtk2 mozilla-common libxt startup-notification mime-types dbus-glib alsa-lib ffmpeg + nss hunspell sqlite ttf-font icu libvpx) +makedepends=(unzip zip diffutils python2 yasm mesa imake gconf libpulse inetutils xorg-server-xvfb + autoconf2.13 rust) +optdepends=('libcanberra: sound support') +options=(!emptydirs !makeflags) +source=(https://ftp.mozilla.org/pub/mozilla.org/thunderbird/releases/$pkgver/source/thunderbird-$pkgver.source.tar.xz + thunderbird.desktop + clip-ft-glyph-52esr.diff harmony-fix.diff glibc-2.26-fix.diff + thunderbird-install-dir.patch no-crmf.diff rust-i686.patch fix-wifi-scanner.diff) +sha256sums=('050acc320a9c50365a53e4faa6538a0ad7f9a302d5f2cfb6edf0c6fe1b573b18' + 'e44c55501f650a4e80b9c353b81f33e07ca65808db831eff6ca616aded233827' + 'dc4feddbf22ea11ae2513c68b7f3fc9047850d055a7f30d31a7ee94d7d5de12a' + '16bb776e9f3039321db747b2eaece0cda1320f3711fb853a68d67247b0aa065d' + 'cd7ff441da66a287f8712e60cdc9e216c30355d521051e2eaae28a66d81915e8' + '24599eab8862476744fe1619a9a53a5b8cdcab30b3fc5767512f31d3529bd05d' + 'a7317caba56e89932bd9e3b9352d94701dd9a419685057f238b1ded8dc0adcd7' + 'f61ea706ce6905f568b9bdafd1b044b58f20737426f0aa5019ddb9b64031a269' + '9765bca5d63fb5525bbd0520b7ab1d27cabaed697e2fc7791400abc3fa4f13b8') + +# Google API keys (see http://www.chromium.org/developers/how-tos/api-keys) +# Note: These are for Arch Linux use ONLY. For your own distribution, please +# get your own set of keys. Feel free to contact foutre...@archlinux.org for +# more information. +_google_api_key=AIzaSyDwr302FpOSkGRpLlUpPThNTDPbXcIn_FM + +# Mozilla API keys (see https://location.services.mozilla.com/api) +# Note: These are for Arch Linux use ONLY. For your own distribution, please +# get your own set of keys. Feel free to contact hef...@archlinux.org for +# more information. +_mozilla_api_key=16674381-f021-49de-8622-3021c5942aff + +prepare() { + mkdir path + ln -s /usr/bin/python2 path/python + + cd $pkgname-$pkgver + patch -Np1 -i ../thunderbird-install-dir.patch + + # https://bugzilla.mozilla.org/show_bug.cgi?id=1371991 + patch -Np1 -i ../no-crmf.diff + + # https://bugzilla.mozilla.org/show_bug.cgi?id=1385667 + # https://bugzilla.mozilla.org/show_bug.cgi?id=1394149 + patch -d mozilla/toolkit/crashreporter/google-breakpad/src/client -Np4 < ../glibc-2.26-fix.diff + + # https://bugzilla.mozilla.org/show_bug.cgi?id=1314968 + patch -d mozilla -Np1 < ../fix-wifi-scanner.diff + + # https://bugzilla.mozilla.org/show_bug.cgi?id=1393467 + patch -d mozilla -Np1 < ../clip-ft-glyph-52esr.diff + + # https://bugzilla.mozilla.org/show_bug.cgi?id=1400721 + patch -d mozilla -Np1 < ../harmony-fix.diff + + # Build with the rust targets we actually ship + patch -d mozilla -Np1 < ../rust-i686.patch + + echo -n "$_google_api_key" >google-api-key + echo -n "$_mozilla_api_key" >mozilla-api-key + + cat >.mozconfig <<END +ac_add_options --enable-application=mail +ac_add_options --enable-calendar + +ac_add_options --prefix=/usr +ac_add_options --enable-release +ac_add_options --enable-gold +ac_add_options --enable-pie +ac_add_options --enable-optimize="-O2" +ac_add_options --enable-rust + +# Branding +ac_add_options --enable-official-branding +ac_add_options --enable-update-channel=release +ac_add_options --with-distribution-id=org.archlinux + +# Keys +ac_add_options --with-google-api-keyfile=${PWD@Q}/google-api-key +ac_add_options --with-mozilla-api-keyfile=${PWD@Q}/mozilla-api-key + +# System libraries +ac_add_options --with-system-nspr +ac_add_options --with-system-nss +ac_add_options --with-system-icu +ac_add_options --with-system-jpeg +ac_add_options --with-system-zlib +ac_add_options --with-system-bz2 +ac_add_options --with-system-libvpx +ac_add_options --enable-system-hunspell +ac_add_options --enable-system-sqlite +ac_add_options --enable-system-ffi +ac_add_options --enable-system-pixman + +# Features +ac_add_options --enable-startup-notification +ac_add_options --disable-crashreporter +ac_add_options --enable-alsa +ac_add_options --disable-updater + +STRIP_FLAGS="--strip-debug" +END +} + +build() { + cd $pkgname-$pkgver + + # _FORTIFY_SOURCE causes configure failures + CPPFLAGS+=" -O2" + + export PATH="$srcdir/path:$PATH" + + # Do PGO + #xvfb-run -a -n 95 -s "-extension GLX -screen 0 1280x1024x24" \ + # make -f client.mk build MOZ_PGO=1 + make -f client.mk build +} + +package() { + cd $pkgname-$pkgver + make -f client.mk DESTDIR="$pkgdir" INSTALL_SDK= install + + _vendorjs="$pkgdir/usr/lib/$pkgname/defaults/preferences/vendor.js" + install -Dm644 /dev/stdin "$_vendorjs" <<END +// Use LANG environment variable to choose locale +pref("intl.locale.matchOS", true); + +// Disable default mailer checking. +pref("mail.shell.checkDefaultMail", false); + +// Don't disable our bundled extensions in the application directory +pref("extensions.autoDisableScopes", 11); +pref("extensions.shownSelectionUI", true); +END + + _distini="$pkgdir/usr/lib/$pkgname/distribution/distribution.ini" + install -Dm644 /dev/stdin "$_distini" <<END +[Global] +id=archlinux +version=1.0 +about=Mozilla Thunderbird for Arch Linux + +[Preferences] +app.distributor=archlinux +app.distributor.channel=$pkgname +app.partner.archlinux=archlinux +END + + for i in 16 22 24 32 48 256; do + install -Dm644 other-licenses/branding/thunderbird/mailicon$i.png \ + "$pkgdir/usr/share/icons/hicolor/${i}x${i}/apps/$pkgname.png" + done + + install -Dm644 ../$pkgname.desktop \ + "$pkgdir/usr/share/applications/$pkgname.desktop" + + # Use system-provided dictionaries + rm -r "$pkgdir"/usr/lib/$pkgname/dictionaries + ln -Ts /usr/share/hunspell "$pkgdir/usr/lib/$pkgname/dictionaries" + ln -Ts /usr/share/hyphen "$pkgdir/usr/lib/$pkgname/hyphenation" + + # Install a wrapper to avoid confusion about binary path + install -Dm755 /dev/stdin "$pkgdir/usr/bin/$pkgname" <<END +#!/bin/sh +exec /usr/lib/$pkgname/thunderbird "\$@" +END + + # Replace duplicate binary with wrapper + # https://bugzilla.mozilla.org/show_bug.cgi?id=658850 + ln -srf "$pkgdir/usr/bin/$pkgname" \ + "$pkgdir/usr/lib/$pkgname/thunderbird-bin" +} Copied: thunderbird/repos/testing-i686/clip-ft-glyph-52esr.diff (from rev 305820, thunderbird/trunk/clip-ft-glyph-52esr.diff) =================================================================== --- testing-i686/clip-ft-glyph-52esr.diff (rev 0) +++ testing-i686/clip-ft-glyph-52esr.diff 2017-09-18 17:59:09 UTC (rev 305821) @@ -0,0 +1,147 @@ +# HG changeset patch +# User Lee Salzman <lsalz...@mozilla.com> +# Date 1504640559 14400 +# Tue Sep 05 15:42:39 2017 -0400 +# Node ID 923246286b9858fb103e100f886c03714b97b5ec +# Parent 3fff2b174212af40a7b7ba75a047db431f81c780 +clip FreeType glyph bitmap to mask in Skia (52 ESR) + +diff --git a/gfx/skia/skia/src/ports/SkFontHost_FreeType_common.cpp b/gfx/skia/skia/src/ports/SkFontHost_FreeType_common.cpp +--- a/gfx/skia/skia/src/ports/SkFontHost_FreeType_common.cpp ++++ b/gfx/skia/skia/src/ports/SkFontHost_FreeType_common.cpp +@@ -350,58 +350,118 @@ void SkScalerContext_FreeType_Base::gene + const SkMatrix& bitmapTransform) + { + const bool doBGR = SkToBool(fRec.fFlags & SkScalerContext::kLCD_BGROrder_Flag); + const bool doVert = SkToBool(fRec.fFlags & SkScalerContext::kLCD_Vertical_Flag); + + switch ( face->glyph->format ) { + case FT_GLYPH_FORMAT_OUTLINE: { + FT_Outline* outline = &face->glyph->outline; +- FT_BBox bbox; +- FT_Bitmap target; + + int dx = 0, dy = 0; + if (fRec.fFlags & SkScalerContext::kSubpixelPositioning_Flag) { + dx = SkFixedToFDot6(glyph.getSubXFixed()); + dy = SkFixedToFDot6(glyph.getSubYFixed()); + // negate dy since freetype-y-goes-up and skia-y-goes-down + dy = -dy; + } +- FT_Outline_Get_CBox(outline, &bbox); +- /* +- what we really want to do for subpixel is +- offset(dx, dy) +- compute_bounds +- offset(bbox & !63) +- but that is two calls to offset, so we do the following, which +- achieves the same thing with only one offset call. +- */ +- FT_Outline_Translate(outline, dx - ((bbox.xMin + dx) & ~63), +- dy - ((bbox.yMin + dy) & ~63)); ++ memset(glyph.fImage, 0, glyph.rowBytes() * glyph.fHeight); + + if (SkMask::kLCD16_Format == glyph.fMaskFormat) { +- FT_Render_Glyph(face->glyph, doVert ? FT_RENDER_MODE_LCD_V : FT_RENDER_MODE_LCD); ++ FT_Outline_Translate(outline, dx, dy); ++ FT_Error err = FT_Render_Glyph(face->glyph, doVert ? FT_RENDER_MODE_LCD_V : FT_RENDER_MODE_LCD); ++ if (err) { ++ return; ++ } ++ + SkMask mask; + glyph.toMask(&mask); ++ ++ FT_GlyphSlotRec& ftGlyph = *face->glyph; ++ ++ if (!SkIRect::Intersects(mask.fBounds, ++ SkIRect::MakeXYWH( ftGlyph.bitmap_left, ++ -ftGlyph.bitmap_top, ++ ftGlyph.bitmap.width, ++ ftGlyph.bitmap.rows))) ++ { ++ return; ++ } ++ ++ // If the FT_Bitmap extent is larger, discard bits of the bitmap outside the mask. ++ // If the SkMask extent is larger, shrink mask to fit bitmap (clearing discarded). ++ unsigned char* origBuffer = ftGlyph.bitmap.buffer; ++ // First align the top left (origin). ++ if (-ftGlyph.bitmap_top < mask.fBounds.fTop) { ++ int32_t topDiff = mask.fBounds.fTop - (-ftGlyph.bitmap_top); ++ ftGlyph.bitmap.buffer += ftGlyph.bitmap.pitch * topDiff; ++ ftGlyph.bitmap.rows -= topDiff; ++ ftGlyph.bitmap_top = -mask.fBounds.fTop; ++ } ++ if (ftGlyph.bitmap_left < mask.fBounds.fLeft) { ++ int32_t leftDiff = mask.fBounds.fLeft - ftGlyph.bitmap_left; ++ ftGlyph.bitmap.buffer += leftDiff; ++ ftGlyph.bitmap.width -= leftDiff; ++ ftGlyph.bitmap_left = mask.fBounds.fLeft; ++ } ++ if (mask.fBounds.fTop < -ftGlyph.bitmap_top) { ++ mask.fImage += mask.fRowBytes * (-ftGlyph.bitmap_top - mask.fBounds.fTop); ++ mask.fBounds.fTop = -ftGlyph.bitmap_top; ++ } ++ if (mask.fBounds.fLeft < ftGlyph.bitmap_left) { ++ mask.fImage += sizeof(uint16_t) * (ftGlyph.bitmap_left - mask.fBounds.fLeft); ++ mask.fBounds.fLeft = ftGlyph.bitmap_left; ++ } ++ // Origins aligned, clean up the width and height. ++ int ftVertScale = (doVert ? 3 : 1); ++ int ftHoriScale = (doVert ? 1 : 3); ++ if (mask.fBounds.height() * ftVertScale < SkToInt(ftGlyph.bitmap.rows)) { ++ ftGlyph.bitmap.rows = mask.fBounds.height() * ftVertScale; ++ } ++ if (mask.fBounds.width() * ftHoriScale < SkToInt(ftGlyph.bitmap.width)) { ++ ftGlyph.bitmap.width = mask.fBounds.width() * ftHoriScale; ++ } ++ if (SkToInt(ftGlyph.bitmap.rows) < mask.fBounds.height() * ftVertScale) { ++ mask.fBounds.fBottom = mask.fBounds.fTop + ftGlyph.bitmap.rows / ftVertScale; ++ } ++ if (SkToInt(ftGlyph.bitmap.width) < mask.fBounds.width() * ftHoriScale) { ++ mask.fBounds.fRight = mask.fBounds.fLeft + ftGlyph.bitmap.width / ftHoriScale; ++ } ++ + if (fPreBlend.isApplicable()) { +- copyFT2LCD16<true>(face->glyph->bitmap, mask, doBGR, ++ copyFT2LCD16<true>(ftGlyph.bitmap, mask, doBGR, + fPreBlend.fR, fPreBlend.fG, fPreBlend.fB); + } else { +- copyFT2LCD16<false>(face->glyph->bitmap, mask, doBGR, ++ copyFT2LCD16<false>(ftGlyph.bitmap, mask, doBGR, + fPreBlend.fR, fPreBlend.fG, fPreBlend.fB); + } ++ // Restore the buffer pointer so FreeType can properly free it. ++ ftGlyph.bitmap.buffer = origBuffer; + } else { ++ FT_BBox bbox; ++ FT_Bitmap target; ++ FT_Outline_Get_CBox(outline, &bbox); ++ /* ++ what we really want to do for subpixel is ++ offset(dx, dy) ++ compute_bounds ++ offset(bbox & !63) ++ but that is two calls to offset, so we do the following, which ++ achieves the same thing with only one offset call. ++ */ ++ FT_Outline_Translate(outline, dx - ((bbox.xMin + dx) & ~63), ++ dy - ((bbox.yMin + dy) & ~63)); ++ + target.width = glyph.fWidth; + target.rows = glyph.fHeight; + target.pitch = glyph.rowBytes(); + target.buffer = reinterpret_cast<uint8_t*>(glyph.fImage); + target.pixel_mode = compute_pixel_mode( (SkMask::Format)fRec.fMaskFormat); + target.num_grays = 256; + +- memset(glyph.fImage, 0, glyph.rowBytes() * glyph.fHeight); + FT_Outline_Get_Bitmap(face->glyph->library, outline, &target); + } + } break; + + case FT_GLYPH_FORMAT_BITMAP: { + FT_Pixel_Mode pixel_mode = static_cast<FT_Pixel_Mode>(face->glyph->bitmap.pixel_mode); + SkMask::Format maskFormat = static_cast<SkMask::Format>(glyph.fMaskFormat); + Copied: thunderbird/repos/testing-i686/fix-wifi-scanner.diff (from rev 305820, thunderbird/trunk/fix-wifi-scanner.diff) =================================================================== --- testing-i686/fix-wifi-scanner.diff (rev 0) +++ testing-i686/fix-wifi-scanner.diff 2017-09-18 17:59:09 UTC (rev 305821) @@ -0,0 +1,16 @@ + netwerk/wifi/nsWifiScannerDBus.cpp | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git c/netwerk/wifi/nsWifiScannerDBus.cpp i/netwerk/wifi/nsWifiScannerDBus.cpp +index 182553e18fa6e104..6fa0a0b023d3e45f 100644 +--- c/netwerk/wifi/nsWifiScannerDBus.cpp ++++ i/netwerk/wifi/nsWifiScannerDBus.cpp +@@ -62,7 +62,7 @@ nsWifiScannerDBus::SendMessage(const char* aInterface, + return NS_ERROR_FAILURE; + } + } else if (!strcmp(aFuncCall, "GetAll")) { +- const char* param = ""; ++ const char* param = "org.freedesktop.NetworkManager.AccessPoint"; + if (!dbus_message_iter_append_basic(&argsIter, DBUS_TYPE_STRING, ¶m)) { + return NS_ERROR_FAILURE; + } Copied: thunderbird/repos/testing-i686/glibc-2.26-fix.diff (from rev 305820, thunderbird/trunk/glibc-2.26-fix.diff) =================================================================== --- testing-i686/glibc-2.26-fix.diff (rev 0) +++ testing-i686/glibc-2.26-fix.diff 2017-09-18 17:59:09 UTC (rev 305821) @@ -0,0 +1,258 @@ +From 6a0b7c8ecf0734ba1bcdccf8e0ee97e721fd5420 Mon Sep 17 00:00:00 2001 +Message-Id: <6a0b7c8ecf0734ba1bcdccf8e0ee97e721fd5420.1505113337.git.jan.steff...@gmail.com> +From: =?UTF-8?q?Emilio=20Cobos=20=C3=81lvarez?= <emi...@crisal.io> +Date: Sat, 19 Aug 2017 20:14:25 +0200 +Subject: [PATCH] Fix use of struct ucontext (squash 2 commits) + +Needed for building with glibc 2.26. + +Bug 1385667: Use ucontext_t consistently in breakpad-client. r=ted +MozReview-Commit-ID: AJhzJdNXP0f + +Bug 1394149: Fix remaining uses of ucontext in breakpad-client. r=ted +MozReview-Commit-ID: 5tP7fXsI7dQ +--- + .../linux/dump_writer_common/ucontext_reader.cc | 30 +++++++++++----------- + .../linux/dump_writer_common/ucontext_reader.h | 10 ++++---- + .../linux/handler/exception_handler.cc | 10 ++++---- + .../linux/handler/exception_handler.h | 2 +- + .../linux/microdump_writer/microdump_writer.cc | 2 +- + .../linux/minidump_writer/minidump_writer.cc | 2 +- + 6 files changed, 28 insertions(+), 28 deletions(-) + +diff --git a/toolkit/crashreporter/breakpad-client/linux/dump_writer_common/ucontext_reader.cc b/toolkit/crashreporter/breakpad-client/linux/dump_writer_common/ucontext_reader.cc +index 999960912e459e1b..303c0ebd32b663c4 100644 +--- a/toolkit/crashreporter/breakpad-client/linux/dump_writer_common/ucontext_reader.cc ++++ b/toolkit/crashreporter/breakpad-client/linux/dump_writer_common/ucontext_reader.cc +@@ -40,15 +40,15 @@ namespace google_breakpad { + + #if defined(__i386__) + +-uintptr_t UContextReader::GetStackPointer(const struct ucontext* uc) { ++uintptr_t UContextReader::GetStackPointer(const ucontext_t* uc) { + return uc->uc_mcontext.gregs[REG_ESP]; + } + +-uintptr_t UContextReader::GetInstructionPointer(const struct ucontext* uc) { ++uintptr_t UContextReader::GetInstructionPointer(const ucontext_t* uc) { + return uc->uc_mcontext.gregs[REG_EIP]; + } + +-void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext *uc, ++void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext_t *uc, + const struct _libc_fpstate* fp) { + const greg_t* regs = uc->uc_mcontext.gregs; + +@@ -88,15 +88,15 @@ void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext *uc, + + #elif defined(__x86_64) + +-uintptr_t UContextReader::GetStackPointer(const struct ucontext* uc) { ++uintptr_t UContextReader::GetStackPointer(const ucontext_t* uc) { + return uc->uc_mcontext.gregs[REG_RSP]; + } + +-uintptr_t UContextReader::GetInstructionPointer(const struct ucontext* uc) { ++uintptr_t UContextReader::GetInstructionPointer(const ucontext_t* uc) { + return uc->uc_mcontext.gregs[REG_RIP]; + } + +-void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext *uc, ++void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext_t *uc, + const struct _libc_fpstate* fpregs) { + const greg_t* regs = uc->uc_mcontext.gregs; + +@@ -145,15 +145,15 @@ void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext *uc, + + #elif defined(__ARM_EABI__) + +-uintptr_t UContextReader::GetStackPointer(const struct ucontext* uc) { ++uintptr_t UContextReader::GetStackPointer(const ucontext_t* uc) { + return uc->uc_mcontext.arm_sp; + } + +-uintptr_t UContextReader::GetInstructionPointer(const struct ucontext* uc) { ++uintptr_t UContextReader::GetInstructionPointer(const ucontext_t* uc) { + return uc->uc_mcontext.arm_pc; + } + +-void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext *uc) { ++void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext_t *uc) { + out->context_flags = MD_CONTEXT_ARM_FULL; + + out->iregs[0] = uc->uc_mcontext.arm_r0; +@@ -184,41 +184,41 @@ void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext *uc) { + + #elif defined(__aarch64__) + +-uintptr_t UContextReader::GetStackPointer(const struct ucontext* uc) { ++uintptr_t UContextReader::GetStackPointer(const ucontext_t* uc) { + return uc->uc_mcontext.sp; + } + +-uintptr_t UContextReader::GetInstructionPointer(const struct ucontext* uc) { ++uintptr_t UContextReader::GetInstructionPointer(const ucontext_t* uc) { + return uc->uc_mcontext.pc; + } + +-void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext *uc, ++void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext_t *uc, + const struct fpsimd_context* fpregs) { + out->context_flags = MD_CONTEXT_ARM64_FULL; + + out->cpsr = static_cast<uint32_t>(uc->uc_mcontext.pstate); + for (int i = 0; i < MD_CONTEXT_ARM64_REG_SP; ++i) + out->iregs[i] = uc->uc_mcontext.regs[i]; + out->iregs[MD_CONTEXT_ARM64_REG_SP] = uc->uc_mcontext.sp; + out->iregs[MD_CONTEXT_ARM64_REG_PC] = uc->uc_mcontext.pc; + + out->float_save.fpsr = fpregs->fpsr; + out->float_save.fpcr = fpregs->fpcr; + my_memcpy(&out->float_save.regs, &fpregs->vregs, + MD_FLOATINGSAVEAREA_ARM64_FPR_COUNT * 16); + } + + #elif defined(__mips__) + +-uintptr_t UContextReader::GetStackPointer(const struct ucontext* uc) { ++uintptr_t UContextReader::GetStackPointer(const ucontext_t* uc) { + return uc->uc_mcontext.gregs[MD_CONTEXT_MIPS_REG_SP]; + } + +-uintptr_t UContextReader::GetInstructionPointer(const struct ucontext* uc) { ++uintptr_t UContextReader::GetInstructionPointer(const ucontext_t* uc) { + return uc->uc_mcontext.pc; + } + +-void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext *uc) { ++void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext_t *uc) { + #if _MIPS_SIM == _ABI64 + out->context_flags = MD_CONTEXT_MIPS64_FULL; + #elif _MIPS_SIM == _ABIO32 +diff --git a/toolkit/crashreporter/breakpad-client/linux/dump_writer_common/ucontext_reader.h b/toolkit/crashreporter/breakpad-client/linux/dump_writer_common/ucontext_reader.h +index c533e28ba7441e83..039752a2dfb6e589 100644 +--- a/toolkit/crashreporter/breakpad-client/linux/dump_writer_common/ucontext_reader.h ++++ b/toolkit/crashreporter/breakpad-client/linux/dump_writer_common/ucontext_reader.h +@@ -41,21 +41,21 @@ namespace google_breakpad { + + // Wraps platform-dependent implementations of accessors to ucontext structs. + struct UContextReader { +- static uintptr_t GetStackPointer(const struct ucontext* uc); ++ static uintptr_t GetStackPointer(const ucontext_t* uc); + +- static uintptr_t GetInstructionPointer(const struct ucontext* uc); ++ static uintptr_t GetInstructionPointer(const ucontext_t* uc); + + // Juggle a arch-specific ucontext into a minidump format + // out: the minidump structure + // info: the collection of register structures. + #if defined(__i386__) || defined(__x86_64) +- static void FillCPUContext(RawContextCPU *out, const ucontext *uc, ++ static void FillCPUContext(RawContextCPU *out, const ucontext_t *uc, + const struct _libc_fpstate* fp); + #elif defined(__aarch64__) +- static void FillCPUContext(RawContextCPU *out, const ucontext *uc, ++ static void FillCPUContext(RawContextCPU *out, const ucontext_t *uc, + const struct fpsimd_context* fpregs); + #else +- static void FillCPUContext(RawContextCPU *out, const ucontext *uc); ++ static void FillCPUContext(RawContextCPU *out, const ucontext_t *uc); + #endif + }; + +diff --git a/toolkit/crashreporter/breakpad-client/linux/handler/exception_handler.cc b/toolkit/crashreporter/breakpad-client/linux/handler/exception_handler.cc +index 71a51a763938e39d..12df9bc96ec45fea 100644 +--- a/toolkit/crashreporter/breakpad-client/linux/handler/exception_handler.cc ++++ b/toolkit/crashreporter/breakpad-client/linux/handler/exception_handler.cc +@@ -439,44 +439,44 @@ bool ExceptionHandler::HandleSignal(int sig, siginfo_t* info, void* uc) { + // Fill in all the holes in the struct to make Valgrind happy. + memset(&g_crash_context_, 0, sizeof(g_crash_context_)); + memcpy(&g_crash_context_.siginfo, info, sizeof(siginfo_t)); +- memcpy(&g_crash_context_.context, uc, sizeof(struct ucontext)); ++ memcpy(&g_crash_context_.context, uc, sizeof(ucontext_t)); + #if defined(__aarch64__) +- struct ucontext* uc_ptr = (struct ucontext*)uc; ++ ucontext_t* uc_ptr = (ucontext_t*)uc; + struct fpsimd_context* fp_ptr = + (struct fpsimd_context*)&uc_ptr->uc_mcontext.__reserved; + if (fp_ptr->head.magic == FPSIMD_MAGIC) { + memcpy(&g_crash_context_.float_state, fp_ptr, + sizeof(g_crash_context_.float_state)); + } + #elif !defined(__ARM_EABI__) && !defined(__mips__) + // FP state is not part of user ABI on ARM Linux. +- // In case of MIPS Linux FP state is already part of struct ucontext ++ // In case of MIPS Linux FP state is already part of ucontext_t + // and 'float_state' is not a member of CrashContext. +- struct ucontext* uc_ptr = (struct ucontext*)uc; ++ ucontext_t* uc_ptr = (ucontext_t*)uc; + if (uc_ptr->uc_mcontext.fpregs) { + memcpy(&g_crash_context_.float_state, uc_ptr->uc_mcontext.fpregs, + sizeof(g_crash_context_.float_state)); + } + #endif + g_crash_context_.tid = syscall(__NR_gettid); + if (crash_handler_ != NULL) { + if (crash_handler_(&g_crash_context_, sizeof(g_crash_context_), + callback_context_)) { + return true; + } + } + return GenerateDump(&g_crash_context_); + } + + // This is a public interface to HandleSignal that allows the client to + // generate a crash dump. This function may run in a compromised context. + bool ExceptionHandler::SimulateSignalDelivery(int sig) { + siginfo_t siginfo = {}; + // Mimic a trusted signal to allow tracing the process (see + // ExceptionHandler::HandleSignal(). + siginfo.si_code = SI_USER; + siginfo.si_pid = getpid(); +- struct ucontext context; ++ ucontext_t context; + getcontext(&context); + return HandleSignal(sig, &siginfo, &context); + } +diff --git a/toolkit/crashreporter/breakpad-client/linux/handler/exception_handler.h b/toolkit/crashreporter/breakpad-client/linux/handler/exception_handler.h +index 711586fec7ddae59..be1880170e2826b0 100644 +--- a/toolkit/crashreporter/breakpad-client/linux/handler/exception_handler.h ++++ b/toolkit/crashreporter/breakpad-client/linux/handler/exception_handler.h +@@ -191,7 +191,7 @@ class ExceptionHandler { + struct CrashContext { + siginfo_t siginfo; + pid_t tid; // the crashing thread. +- struct ucontext context; ++ ucontext_t context; + #if !defined(__ARM_EABI__) && !defined(__mips__) + // #ifdef this out because FP state is not part of user ABI for Linux ARM. + // In case of MIPS Linux FP state is already part of struct +diff --git a/toolkit/crashreporter/breakpad-client/linux/microdump_writer/microdump_writer.cc b/toolkit/crashreporter/breakpad-client/linux/microdump_writer/microdump_writer.cc +index ff20bf36584c876b..a0b90e08fc5f0cff 100644 +--- a/toolkit/crashreporter/breakpad-client/linux/microdump_writer/microdump_writer.cc ++++ b/toolkit/crashreporter/breakpad-client/linux/microdump_writer/microdump_writer.cc +@@ -571,7 +571,7 @@ class MicrodumpWriter { + + void* Alloc(unsigned bytes) { return dumper_->allocator()->Alloc(bytes); } + +- const struct ucontext* const ucontext_; ++ const ucontext_t* const ucontext_; + #if !defined(__ARM_EABI__) && !defined(__mips__) + const google_breakpad::fpstate_t* const float_state_; + #endif +diff --git a/toolkit/crashreporter/breakpad-client/linux/minidump_writer/minidump_writer.cc b/toolkit/crashreporter/breakpad-client/linux/minidump_writer/minidump_writer.cc +index 0650bb95c179464a..6b5304bcd605ca3a 100644 +--- a/toolkit/crashreporter/breakpad-client/linux/minidump_writer/minidump_writer.cc ++++ b/toolkit/crashreporter/breakpad-client/linux/minidump_writer/minidump_writer.cc +@@ -1247,7 +1247,7 @@ class MinidumpWriter { + const int fd_; // File descriptor where the minidum should be written. + const char* path_; // Path to the file where the minidum should be written. + +- const struct ucontext* const ucontext_; // also from the signal handler ++ const ucontext_t* const ucontext_; // also from the signal handler + #if !defined(__ARM_EABI__) && !defined(__mips__) + const google_breakpad::fpstate_t* const float_state_; // ditto + #endif +-- +2.14.1 + Copied: thunderbird/repos/testing-i686/harmony-fix.diff (from rev 305820, thunderbird/trunk/harmony-fix.diff) =================================================================== --- testing-i686/harmony-fix.diff (rev 0) +++ testing-i686/harmony-fix.diff 2017-09-18 17:59:09 UTC (rev 305821) @@ -0,0 +1,16 @@ +diff --git i/gfx/skia/skia/src/ports/SkFontHost_cairo.cpp w/gfx/skia/skia/src/ports/SkFontHost_cairo.cpp +index 42da19280fce8235..2c221c32d097b462 100644 +--- i/gfx/skia/skia/src/ports/SkFontHost_cairo.cpp ++++ w/gfx/skia/skia/src/ports/SkFontHost_cairo.cpp +@@ -666,10 +666,7 @@ void SkScalerContext_CairoFT::generateMetrics(SkGlyph* glyph) + glyph->fTop = -SkToS16(SkFDot6Floor(bbox.yMax)); + glyph->fLeft = SkToS16(SkFDot6Floor(bbox.xMin)); + +- if (isLCD(fRec) && +- gSetLcdFilter && +- (fLcdFilter == FT_LCD_FILTER_DEFAULT || +- fLcdFilter == FT_LCD_FILTER_LIGHT)) { ++ if (isLCD(fRec)) { + if (fRec.fFlags & kLCD_Vertical_Flag) { + glyph->fTop -= 1; + glyph->fHeight += 2; Copied: thunderbird/repos/testing-i686/no-crmf.diff (from rev 305820, thunderbird/trunk/no-crmf.diff) =================================================================== --- testing-i686/no-crmf.diff (rev 0) +++ testing-i686/no-crmf.diff 2017-09-18 17:59:09 UTC (rev 305821) @@ -0,0 +1,39 @@ +diff -u -rN thunderbird-52.1.1/mozilla/config/external/nss/crmf/moz.build thunderbird-52.1.1-nocrmf/mozilla/config/external/nss/crmf/moz.build +--- thunderbird-52.1.1/mozilla/config/external/nss/crmf/moz.build 2017-05-09 23:35:13.000000000 +0200 ++++ thunderbird-52.1.1-nocrmf/mozilla/config/external/nss/crmf/moz.build 2017-06-14 01:51:36.686773132 +0200 +@@ -8,7 +8,6 @@ + + if CONFIG['MOZ_SYSTEM_NSS']: + OS_LIBS += [l for l in CONFIG['NSS_LIBS'] if l.startswith('-L')] +- OS_LIBS += ['-lcrmf'] + else: + USE_LIBS += [ + # The dependency on nss is not real, but is required to force the +diff -u -rN thunderbird-52.1.1/mozilla/old-configure thunderbird-52.1.1-nocrmf/mozilla/old-configure +--- thunderbird-52.1.1/mozilla/old-configure 2017-05-09 23:35:35.000000000 +0200 ++++ thunderbird-52.1.1-nocrmf/mozilla/old-configure 2017-06-14 01:50:28.726873231 +0200 +@@ -10692,9 +10692,7 @@ + + fi + +-if test -n "$MOZ_SYSTEM_NSS"; then +- NSS_LIBS="$NSS_LIBS -lcrmf" +-else ++if test -z "$MOZ_SYSTEM_NSS"; then + NSS_CFLAGS="-I${DIST}/include/nss" + fi + +diff -u -rN thunderbird-52.1.1/mozilla/old-configure.in thunderbird-52.1.1-nocrmf/mozilla/old-configure.in +--- thunderbird-52.1.1/mozilla/old-configure.in 2017-05-09 23:35:22.000000000 +0200 ++++ thunderbird-52.1.1-nocrmf/mozilla/old-configure.in 2017-06-14 01:50:50.953507079 +0200 +@@ -2126,9 +2126,7 @@ + AM_PATH_NSS(3.28.4, [MOZ_SYSTEM_NSS=1], [AC_MSG_ERROR([you don't have NSS installed or your version is too old])]) + fi + +-if test -n "$MOZ_SYSTEM_NSS"; then +- NSS_LIBS="$NSS_LIBS -lcrmf" +-else ++if test -z "$MOZ_SYSTEM_NSS"; then + NSS_CFLAGS="-I${DIST}/include/nss" + fi + Copied: thunderbird/repos/testing-i686/rust-i686.patch (from rev 305820, thunderbird/trunk/rust-i686.patch) =================================================================== --- testing-i686/rust-i686.patch (rev 0) +++ testing-i686/rust-i686.patch 2017-09-18 17:59:09 UTC (rev 305821) @@ -0,0 +1,16 @@ + build/moz.configure/rust.configure | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git c/build/moz.configure/rust.configure i/build/moz.configure/rust.configure +index cd86b24153debb1b..44911715e25d95e3 100644 +--- c/build/moz.configure/rust.configure ++++ i/build/moz.configure/rust.configure +@@ -81,7 +81,7 @@ def rust_target(rust_compiler, rustc, target, cross_compiling): + # OpenBSD + ('x86_64', 'OpenBSD'): 'x86_64-unknown-openbsd', + # Linux +- ('x86', 'Linux'): 'i586-unknown-linux-gnu', ++ ('x86', 'Linux'): 'i686-unknown-linux-gnu', + # Linux + ('x86_64', 'Linux'): 'x86_64-unknown-linux-gnu', + # OS X and iOS Copied: thunderbird/repos/testing-i686/thunderbird-install-dir.patch (from rev 305820, thunderbird/trunk/thunderbird-install-dir.patch) =================================================================== --- testing-i686/thunderbird-install-dir.patch (rev 0) +++ testing-i686/thunderbird-install-dir.patch 2017-09-18 17:59:09 UTC (rev 305821) @@ -0,0 +1,12 @@ +diff -upr comm-esr31.orig/mozilla/config/baseconfig.mk comm-esr31/mozilla/config/baseconfig.mk +--- comm-esr31.orig/mozilla/config/baseconfig.mk 2014-07-22 09:44:22.000000000 +0300 ++++ comm-esr31/mozilla/config/baseconfig.mk 2014-07-22 09:46:45.000000000 +0300 +@@ -4,7 +4,7 @@ + # whether a normal build is happening or whether the check is running. + includedir := $(includedir)/$(MOZ_APP_NAME)-$(MOZ_APP_VERSION) + idldir = $(datadir)/idl/$(MOZ_APP_NAME)-$(MOZ_APP_VERSION) +-installdir = $(libdir)/$(MOZ_APP_NAME)-$(MOZ_APP_VERSION) ++installdir = $(libdir)/$(MOZ_APP_NAME) + sdkdir = $(libdir)/$(MOZ_APP_NAME)-devel-$(MOZ_APP_VERSION) + ifndef TOP_DIST + TOP_DIST = dist Copied: thunderbird/repos/testing-i686/thunderbird.desktop (from rev 305820, thunderbird/trunk/thunderbird.desktop) =================================================================== --- testing-i686/thunderbird.desktop (rev 0) +++ testing-i686/thunderbird.desktop 2017-09-18 17:59:09 UTC (rev 305821) @@ -0,0 +1,173 @@ +[Desktop Entry] +Name=Thunderbird +Comment=Send and receive mail with Thunderbird +Comment[ast]=Lleer y escribir corréu electrónicu +Comment[ca]=Llegiu i escriviu correu +Comment[cs]=Čtení a psaní pošty +Comment[da]=Skriv/læs e-post/nyhedsgruppe med Mozilla Thunderbird +Comment[de]=E-Mails und Nachrichten mit Thunderbird lesen und schreiben +Comment[el]=Διαβάστε και γράψτε γράμματα με το Mozilla Thunderbird +Comment[es]=Lea y escriba correos y noticias con Thunderbird +Comment[fi]=Lue ja kirjoita sähköposteja +Comment[fr]=Lire et écrire des courriels +Comment[gl]=Lea e escriba correo electrónico +Comment[he]=קריאה/כתיבה של דוא״ל/חדשות באמצעות Mozilla Thunderbird +Comment[hr]=Čitajte/šaljite e-poštu s Thunderbird +Comment[hu]=Levelek írása és olvasása a Thunderbirddel +Comment[it]=Per leggere e scrivere email +Comment[ja]=メールの読み書き +Comment[ko]=Mozilla Thunderbird 메일/뉴스 읽기 및 쓰기 클라이언트 +Comment[nl]=E-mail/nieuws lezen en schrijven met Mozilla Thunderbird +Comment[pl]=Czytanie i wysyłanie e-maili +Comment[pt_BR]=Leia e escreva suas mensagens +Comment[ru]=Читайте и пишите письма +Comment[sk]=Čítajte a píšte poštu pomocou programu Thunderbird +Comment[sv]=Läs och skriv e-post +Comment[ug]=ئېلخەت ۋە خەۋەرلەرنى Mozilla Thunderbird دا كۆرۈش ۋە يېزىش +Comment[uk]=Читання та написання листів +Comment[vi]=Đọc và soạn thư điện tử +Comment[zh_CN]=阅读邮件或新闻 +Comment[zh_TW]=以 Mozilla Thunderbird 讀寫郵件或新聞 +GenericName=Mail Client +GenericName[ast]=Client de correu +GenericName[ca]=Client de correu +GenericName[cs]=Poštovní klient +GenericName[da]=E-postklient +GenericName[de]=E-Mail-Anwendung +GenericName[el]=Λογισμικό αλληλογραφίας +GenericName[es]=Cliente de correo +GenericName[fi]=Sähköpostiohjelma +GenericName[fr]=Client de messagerie +GenericName[gl]=Cliente de correo electrónico +GenericName[he]=לקוח דוא״ל +GenericName[hr]=Klijent e-pošte +GenericName[hu]=Levelezőkliens +GenericName[it]=Client email +GenericName[ja]=電子メールクライアント +GenericName[ko]=메일 클라이언트 +GenericName[nl]=E-mailprogramma +GenericName[pl]=Klient poczty +GenericName[pt_BR]=Cliente de E-mail +GenericName[ru]=Почтовый клиент +GenericName[sk]=Poštový klient +GenericName[ug]=ئېلخەت دېتالى +GenericName[uk]=Поштова програма +GenericName[vi]=Phần mềm khách quản lý thư điện tử +GenericName[zh_CN]=邮件新闻客户端 +GenericName[zh_TW]=郵件用戶端 +Exec=/usr/lib/thunderbird/thunderbird %u +Terminal=false +Type=Application +Icon=thunderbird +Categories=Network;Email; +MimeType=message/rfc822;x-scheme-handler/mailto;application/x-xpinstall; +StartupNotify=true +Actions=ComposeMessage;OpenAddressBook; + +[Desktop Action ComposeMessage] +Name=Write new message +Name[ar]=اكتب رسالة جديدة +Name[ast]=Redactar mensaxe nuevu +Name[be]=Напісаць новы ліст +Name[bg]=Съставяне на ново съобщение +Name[br]=Skrivañ ur gemennadenn nevez +Name[ca]=Escriu un missatge nou +Name[cs]=Napsat novou zprávu +Name[da]=Skriv en ny meddelelse +Name[de]=Neue Nachricht verfassen +Name[el]=Σύνταξη νέου μηνύματος +Name[es_AR]=Escribir un nuevo mensaje +Name[es_ES]=Redactar nuevo mensaje +Name[et]=Kirjuta uus kiri +Name[eu]=Idatzi mezu berria +Name[fi]=Kirjoita uusi viesti +Name[fr]=Rédiger un nouveau message +Name[fy_NL]=Skriuw in nij berjocht +Name[ga_IE]=Scríobh teachtaireacht nua +Name[gd]=Sgrìobh teachdaireachd ùr +Name[gl]=Escribir unha nova mensaxe +Name[he]=כתיבת הודעה חדשה +Name[hr]=Piši novu poruku +Name[hu]=Új üzenet írása +Name[hy_AM]=Գրել նոր նամակ +Name[is]=SKrifa nýjan póst +Name[it]=Scrivi nuovo messaggio +Name[ja]=新しいメッセージを作成する +Name[ko]=새 메시지 작성 +Name[lt]=Rašyti naują laišką +Name[nb_NO]=Skriv ny melding +Name[nl]=Nieuw bericht aanmaken +Name[nn_NO]=Skriv ny melding +Name[pl]=Nowa wiadomość +Name[pt_BR]=Nova mensagem +Name[pt_PT]=Escrever nova mensagem +Name[rm]=Scriver in nov messadi +Name[ro]=Scrie un mesaj nou +Name[ru]=Создать новое сообщение +Name[si]=නව ලිපියක් ලියන්න +Name[sk]=Nová e-mailová správa +Name[sl]=Sestavi novo sporočilo +Name[sq]=Shkruani mesazh të ri +Name[sr]=Писање нове поруке +Name[sv_SE]=Skriv ett nytt meddelande +Name[ta_LK]=புதிய செய்தியை எழுதுக +Name[tr]=Yeni ileti yaz +Name[uk]=Написати нового листа +Name[vi]=Viết thư mới +Name[zh_CN]=编写新消息 +Name[zh_TW]=寫一封新訊息 +Exec=/usr/lib/thunderbird/thunderbird -compose + +[Desktop Action OpenAddressBook] +Name=Open address book +Name[ar]=افتح دفتر العناوين +Name[ast]=Abrir llibreta de direiciones +Name[be]=Адкрыць адрасную кнігу +Name[bg]=Отваряне на адресник +Name[br]=Digeriñ ur c'harned chomlec'hioù +Name[ca]=Obre la llibreta d'adreces +Name[cs]=Otevřít Adresář +Name[da]=Åbn adressebog +Name[de]=Adressbuch öffnen +Name[el]=Άνοιγμα ευρετηρίου διευθύνσεων +Name[es_AR]=Abrir libreta de direcciones +Name[es_ES]=Abrir libreta de direcciones +Name[et]=Ava aadressiraamat +Name[eu]=Ireki helbide-liburua +Name[fi]=Avaa osoitekirja +Name[fr]=Ouvrir un carnet d'adresses +Name[fy_NL]=Iepenje adresboek +Name[ga_IE]=Oscail leabhar seoltaí +Name[gd]=Fosgail leabhar-sheòlaidhean +Name[gl]=Abrir a axenda de enderezos +Name[he]=פתיחת ספר כתובות +Name[hr]=Otvori adresar +Name[hu]=Címjegyzék megnyitása +Name[hy_AM]=Բացել Հասցեագիրքը +Name[is]=Opna nafnaskrá +Name[it]=Apri rubrica +Name[ja]=アドレス帳を開く +Name[ko]=주소록 열기 +Name[lt]=Atverti adresų knygą +Name[nb_NO]=Åpne adressebok +Name[nl]=Adresboek openen +Name[nn_NO]=Opne adressebok +Name[pl]=Książka adresowa +Name[pt_BR]=Catálogo de endereços +Name[pt_PT]=Abrir livro de endereços +Name[rm]=Avrir il cudeschet d'adressas +Name[ro]=Deschide agenda de contacte +Name[ru]=Открыть адресную книгу +Name[si]=ලිපින පොත විවෘත කරන්න +Name[sk]=Otvoriť adresár +Name[sl]=Odpri adressar +Name[sq]=Hapni libër adresash +Name[sr]=Отвори адресар +Name[sv_SE]=Öppna adressboken +Name[ta_LK]=முகவரி பத்தகத்தை திறக்க +Name[tr]=Adres defterini aç +Name[uk]=Відкрити адресну книгу +Name[vi]=Mở sổ địa chỉ +Name[zh_CN]=打开通讯录 +Name[zh_TW]=開啟通訊錄 +Exec=/usr/lib/thunderbird/thunderbird -addressbook Copied: thunderbird/repos/testing-x86_64/PKGBUILD (from rev 305820, thunderbird/trunk/PKGBUILD) =================================================================== --- testing-x86_64/PKGBUILD (rev 0) +++ testing-x86_64/PKGBUILD 2017-09-18 17:59:09 UTC (rev 305821) @@ -0,0 +1,186 @@ +# $Id$ +# Maintainer: Jan Alexander Steffens (heftig) <jan.steff...@gmail.com> +# Contributor: Ionut Biru <ib...@archlinux.org> +# Contributor: Alexander Baldeck <alexan...@archlinux.org> +# Contributor: Dale Blount <d...@archlinux.org> +# Contributor: Anders Bostrom <anders.bost...@home.se> + +pkgname=thunderbird +pkgver=52.3.0 +pkgrel=2 +pkgdesc="Standalone mail and news reader from mozilla.org" +arch=(i686 x86_64) +license=(MPL GPL LGPL) +url="https://www.mozilla.org/thunderbird/" +depends=(gtk3 gtk2 mozilla-common libxt startup-notification mime-types dbus-glib alsa-lib ffmpeg + nss hunspell sqlite ttf-font icu libvpx) +makedepends=(unzip zip diffutils python2 yasm mesa imake gconf libpulse inetutils xorg-server-xvfb + autoconf2.13 rust) +optdepends=('libcanberra: sound support') +options=(!emptydirs !makeflags) +source=(https://ftp.mozilla.org/pub/mozilla.org/thunderbird/releases/$pkgver/source/thunderbird-$pkgver.source.tar.xz + thunderbird.desktop + clip-ft-glyph-52esr.diff harmony-fix.diff glibc-2.26-fix.diff + thunderbird-install-dir.patch no-crmf.diff rust-i686.patch fix-wifi-scanner.diff) +sha256sums=('050acc320a9c50365a53e4faa6538a0ad7f9a302d5f2cfb6edf0c6fe1b573b18' + 'e44c55501f650a4e80b9c353b81f33e07ca65808db831eff6ca616aded233827' + 'dc4feddbf22ea11ae2513c68b7f3fc9047850d055a7f30d31a7ee94d7d5de12a' + '16bb776e9f3039321db747b2eaece0cda1320f3711fb853a68d67247b0aa065d' + 'cd7ff441da66a287f8712e60cdc9e216c30355d521051e2eaae28a66d81915e8' + '24599eab8862476744fe1619a9a53a5b8cdcab30b3fc5767512f31d3529bd05d' + 'a7317caba56e89932bd9e3b9352d94701dd9a419685057f238b1ded8dc0adcd7' + 'f61ea706ce6905f568b9bdafd1b044b58f20737426f0aa5019ddb9b64031a269' + '9765bca5d63fb5525bbd0520b7ab1d27cabaed697e2fc7791400abc3fa4f13b8') + +# Google API keys (see http://www.chromium.org/developers/how-tos/api-keys) +# Note: These are for Arch Linux use ONLY. For your own distribution, please +# get your own set of keys. Feel free to contact foutre...@archlinux.org for +# more information. +_google_api_key=AIzaSyDwr302FpOSkGRpLlUpPThNTDPbXcIn_FM + +# Mozilla API keys (see https://location.services.mozilla.com/api) +# Note: These are for Arch Linux use ONLY. For your own distribution, please +# get your own set of keys. Feel free to contact hef...@archlinux.org for +# more information. +_mozilla_api_key=16674381-f021-49de-8622-3021c5942aff + +prepare() { + mkdir path + ln -s /usr/bin/python2 path/python + + cd $pkgname-$pkgver + patch -Np1 -i ../thunderbird-install-dir.patch + + # https://bugzilla.mozilla.org/show_bug.cgi?id=1371991 + patch -Np1 -i ../no-crmf.diff + + # https://bugzilla.mozilla.org/show_bug.cgi?id=1385667 + # https://bugzilla.mozilla.org/show_bug.cgi?id=1394149 + patch -d mozilla/toolkit/crashreporter/google-breakpad/src/client -Np4 < ../glibc-2.26-fix.diff + + # https://bugzilla.mozilla.org/show_bug.cgi?id=1314968 + patch -d mozilla -Np1 < ../fix-wifi-scanner.diff + + # https://bugzilla.mozilla.org/show_bug.cgi?id=1393467 + patch -d mozilla -Np1 < ../clip-ft-glyph-52esr.diff + + # https://bugzilla.mozilla.org/show_bug.cgi?id=1400721 + patch -d mozilla -Np1 < ../harmony-fix.diff + + # Build with the rust targets we actually ship + patch -d mozilla -Np1 < ../rust-i686.patch + + echo -n "$_google_api_key" >google-api-key + echo -n "$_mozilla_api_key" >mozilla-api-key + + cat >.mozconfig <<END +ac_add_options --enable-application=mail +ac_add_options --enable-calendar + +ac_add_options --prefix=/usr +ac_add_options --enable-release +ac_add_options --enable-gold +ac_add_options --enable-pie +ac_add_options --enable-optimize="-O2" +ac_add_options --enable-rust + +# Branding +ac_add_options --enable-official-branding +ac_add_options --enable-update-channel=release +ac_add_options --with-distribution-id=org.archlinux + +# Keys +ac_add_options --with-google-api-keyfile=${PWD@Q}/google-api-key +ac_add_options --with-mozilla-api-keyfile=${PWD@Q}/mozilla-api-key + +# System libraries +ac_add_options --with-system-nspr +ac_add_options --with-system-nss +ac_add_options --with-system-icu +ac_add_options --with-system-jpeg +ac_add_options --with-system-zlib +ac_add_options --with-system-bz2 +ac_add_options --with-system-libvpx +ac_add_options --enable-system-hunspell +ac_add_options --enable-system-sqlite +ac_add_options --enable-system-ffi +ac_add_options --enable-system-pixman + +# Features +ac_add_options --enable-startup-notification +ac_add_options --disable-crashreporter +ac_add_options --enable-alsa +ac_add_options --disable-updater + +STRIP_FLAGS="--strip-debug" +END +} + +build() { + cd $pkgname-$pkgver + + # _FORTIFY_SOURCE causes configure failures + CPPFLAGS+=" -O2" + + export PATH="$srcdir/path:$PATH" + + # Do PGO + #xvfb-run -a -n 95 -s "-extension GLX -screen 0 1280x1024x24" \ + # make -f client.mk build MOZ_PGO=1 + make -f client.mk build +} + +package() { + cd $pkgname-$pkgver + make -f client.mk DESTDIR="$pkgdir" INSTALL_SDK= install + + _vendorjs="$pkgdir/usr/lib/$pkgname/defaults/preferences/vendor.js" + install -Dm644 /dev/stdin "$_vendorjs" <<END +// Use LANG environment variable to choose locale +pref("intl.locale.matchOS", true); + +// Disable default mailer checking. +pref("mail.shell.checkDefaultMail", false); + +// Don't disable our bundled extensions in the application directory +pref("extensions.autoDisableScopes", 11); +pref("extensions.shownSelectionUI", true); +END + + _distini="$pkgdir/usr/lib/$pkgname/distribution/distribution.ini" + install -Dm644 /dev/stdin "$_distini" <<END +[Global] +id=archlinux +version=1.0 +about=Mozilla Thunderbird for Arch Linux + +[Preferences] +app.distributor=archlinux +app.distributor.channel=$pkgname +app.partner.archlinux=archlinux +END + + for i in 16 22 24 32 48 256; do + install -Dm644 other-licenses/branding/thunderbird/mailicon$i.png \ + "$pkgdir/usr/share/icons/hicolor/${i}x${i}/apps/$pkgname.png" + done + + install -Dm644 ../$pkgname.desktop \ + "$pkgdir/usr/share/applications/$pkgname.desktop" + + # Use system-provided dictionaries + rm -r "$pkgdir"/usr/lib/$pkgname/dictionaries + ln -Ts /usr/share/hunspell "$pkgdir/usr/lib/$pkgname/dictionaries" + ln -Ts /usr/share/hyphen "$pkgdir/usr/lib/$pkgname/hyphenation" + + # Install a wrapper to avoid confusion about binary path + install -Dm755 /dev/stdin "$pkgdir/usr/bin/$pkgname" <<END +#!/bin/sh +exec /usr/lib/$pkgname/thunderbird "\$@" +END + + # Replace duplicate binary with wrapper + # https://bugzilla.mozilla.org/show_bug.cgi?id=658850 + ln -srf "$pkgdir/usr/bin/$pkgname" \ + "$pkgdir/usr/lib/$pkgname/thunderbird-bin" +} Copied: thunderbird/repos/testing-x86_64/clip-ft-glyph-52esr.diff (from rev 305820, thunderbird/trunk/clip-ft-glyph-52esr.diff) =================================================================== --- testing-x86_64/clip-ft-glyph-52esr.diff (rev 0) +++ testing-x86_64/clip-ft-glyph-52esr.diff 2017-09-18 17:59:09 UTC (rev 305821) @@ -0,0 +1,147 @@ +# HG changeset patch +# User Lee Salzman <lsalz...@mozilla.com> +# Date 1504640559 14400 +# Tue Sep 05 15:42:39 2017 -0400 +# Node ID 923246286b9858fb103e100f886c03714b97b5ec +# Parent 3fff2b174212af40a7b7ba75a047db431f81c780 +clip FreeType glyph bitmap to mask in Skia (52 ESR) + +diff --git a/gfx/skia/skia/src/ports/SkFontHost_FreeType_common.cpp b/gfx/skia/skia/src/ports/SkFontHost_FreeType_common.cpp +--- a/gfx/skia/skia/src/ports/SkFontHost_FreeType_common.cpp ++++ b/gfx/skia/skia/src/ports/SkFontHost_FreeType_common.cpp +@@ -350,58 +350,118 @@ void SkScalerContext_FreeType_Base::gene + const SkMatrix& bitmapTransform) + { + const bool doBGR = SkToBool(fRec.fFlags & SkScalerContext::kLCD_BGROrder_Flag); + const bool doVert = SkToBool(fRec.fFlags & SkScalerContext::kLCD_Vertical_Flag); + + switch ( face->glyph->format ) { + case FT_GLYPH_FORMAT_OUTLINE: { + FT_Outline* outline = &face->glyph->outline; +- FT_BBox bbox; +- FT_Bitmap target; + + int dx = 0, dy = 0; + if (fRec.fFlags & SkScalerContext::kSubpixelPositioning_Flag) { + dx = SkFixedToFDot6(glyph.getSubXFixed()); + dy = SkFixedToFDot6(glyph.getSubYFixed()); + // negate dy since freetype-y-goes-up and skia-y-goes-down + dy = -dy; + } +- FT_Outline_Get_CBox(outline, &bbox); +- /* +- what we really want to do for subpixel is +- offset(dx, dy) +- compute_bounds +- offset(bbox & !63) +- but that is two calls to offset, so we do the following, which +- achieves the same thing with only one offset call. +- */ +- FT_Outline_Translate(outline, dx - ((bbox.xMin + dx) & ~63), +- dy - ((bbox.yMin + dy) & ~63)); ++ memset(glyph.fImage, 0, glyph.rowBytes() * glyph.fHeight); + + if (SkMask::kLCD16_Format == glyph.fMaskFormat) { +- FT_Render_Glyph(face->glyph, doVert ? FT_RENDER_MODE_LCD_V : FT_RENDER_MODE_LCD); ++ FT_Outline_Translate(outline, dx, dy); ++ FT_Error err = FT_Render_Glyph(face->glyph, doVert ? FT_RENDER_MODE_LCD_V : FT_RENDER_MODE_LCD); ++ if (err) { ++ return; ++ } ++ + SkMask mask; + glyph.toMask(&mask); ++ ++ FT_GlyphSlotRec& ftGlyph = *face->glyph; ++ ++ if (!SkIRect::Intersects(mask.fBounds, ++ SkIRect::MakeXYWH( ftGlyph.bitmap_left, ++ -ftGlyph.bitmap_top, ++ ftGlyph.bitmap.width, ++ ftGlyph.bitmap.rows))) ++ { ++ return; ++ } ++ ++ // If the FT_Bitmap extent is larger, discard bits of the bitmap outside the mask. ++ // If the SkMask extent is larger, shrink mask to fit bitmap (clearing discarded). ++ unsigned char* origBuffer = ftGlyph.bitmap.buffer; ++ // First align the top left (origin). ++ if (-ftGlyph.bitmap_top < mask.fBounds.fTop) { ++ int32_t topDiff = mask.fBounds.fTop - (-ftGlyph.bitmap_top); ++ ftGlyph.bitmap.buffer += ftGlyph.bitmap.pitch * topDiff; ++ ftGlyph.bitmap.rows -= topDiff; ++ ftGlyph.bitmap_top = -mask.fBounds.fTop; ++ } ++ if (ftGlyph.bitmap_left < mask.fBounds.fLeft) { ++ int32_t leftDiff = mask.fBounds.fLeft - ftGlyph.bitmap_left; ++ ftGlyph.bitmap.buffer += leftDiff; ++ ftGlyph.bitmap.width -= leftDiff; ++ ftGlyph.bitmap_left = mask.fBounds.fLeft; ++ } ++ if (mask.fBounds.fTop < -ftGlyph.bitmap_top) { ++ mask.fImage += mask.fRowBytes * (-ftGlyph.bitmap_top - mask.fBounds.fTop); ++ mask.fBounds.fTop = -ftGlyph.bitmap_top; ++ } ++ if (mask.fBounds.fLeft < ftGlyph.bitmap_left) { ++ mask.fImage += sizeof(uint16_t) * (ftGlyph.bitmap_left - mask.fBounds.fLeft); ++ mask.fBounds.fLeft = ftGlyph.bitmap_left; ++ } ++ // Origins aligned, clean up the width and height. ++ int ftVertScale = (doVert ? 3 : 1); ++ int ftHoriScale = (doVert ? 1 : 3); ++ if (mask.fBounds.height() * ftVertScale < SkToInt(ftGlyph.bitmap.rows)) { ++ ftGlyph.bitmap.rows = mask.fBounds.height() * ftVertScale; ++ } ++ if (mask.fBounds.width() * ftHoriScale < SkToInt(ftGlyph.bitmap.width)) { ++ ftGlyph.bitmap.width = mask.fBounds.width() * ftHoriScale; ++ } ++ if (SkToInt(ftGlyph.bitmap.rows) < mask.fBounds.height() * ftVertScale) { ++ mask.fBounds.fBottom = mask.fBounds.fTop + ftGlyph.bitmap.rows / ftVertScale; ++ } ++ if (SkToInt(ftGlyph.bitmap.width) < mask.fBounds.width() * ftHoriScale) { ++ mask.fBounds.fRight = mask.fBounds.fLeft + ftGlyph.bitmap.width / ftHoriScale; ++ } ++ + if (fPreBlend.isApplicable()) { +- copyFT2LCD16<true>(face->glyph->bitmap, mask, doBGR, ++ copyFT2LCD16<true>(ftGlyph.bitmap, mask, doBGR, + fPreBlend.fR, fPreBlend.fG, fPreBlend.fB); + } else { +- copyFT2LCD16<false>(face->glyph->bitmap, mask, doBGR, ++ copyFT2LCD16<false>(ftGlyph.bitmap, mask, doBGR, + fPreBlend.fR, fPreBlend.fG, fPreBlend.fB); + } ++ // Restore the buffer pointer so FreeType can properly free it. ++ ftGlyph.bitmap.buffer = origBuffer; + } else { ++ FT_BBox bbox; ++ FT_Bitmap target; ++ FT_Outline_Get_CBox(outline, &bbox); ++ /* ++ what we really want to do for subpixel is ++ offset(dx, dy) ++ compute_bounds ++ offset(bbox & !63) ++ but that is two calls to offset, so we do the following, which ++ achieves the same thing with only one offset call. ++ */ ++ FT_Outline_Translate(outline, dx - ((bbox.xMin + dx) & ~63), ++ dy - ((bbox.yMin + dy) & ~63)); ++ + target.width = glyph.fWidth; + target.rows = glyph.fHeight; + target.pitch = glyph.rowBytes(); + target.buffer = reinterpret_cast<uint8_t*>(glyph.fImage); + target.pixel_mode = compute_pixel_mode( (SkMask::Format)fRec.fMaskFormat); + target.num_grays = 256; + +- memset(glyph.fImage, 0, glyph.rowBytes() * glyph.fHeight); + FT_Outline_Get_Bitmap(face->glyph->library, outline, &target); + } + } break; + + case FT_GLYPH_FORMAT_BITMAP: { + FT_Pixel_Mode pixel_mode = static_cast<FT_Pixel_Mode>(face->glyph->bitmap.pixel_mode); + SkMask::Format maskFormat = static_cast<SkMask::Format>(glyph.fMaskFormat); + Copied: thunderbird/repos/testing-x86_64/fix-wifi-scanner.diff (from rev 305820, thunderbird/trunk/fix-wifi-scanner.diff) =================================================================== --- testing-x86_64/fix-wifi-scanner.diff (rev 0) +++ testing-x86_64/fix-wifi-scanner.diff 2017-09-18 17:59:09 UTC (rev 305821) @@ -0,0 +1,16 @@ + netwerk/wifi/nsWifiScannerDBus.cpp | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git c/netwerk/wifi/nsWifiScannerDBus.cpp i/netwerk/wifi/nsWifiScannerDBus.cpp +index 182553e18fa6e104..6fa0a0b023d3e45f 100644 +--- c/netwerk/wifi/nsWifiScannerDBus.cpp ++++ i/netwerk/wifi/nsWifiScannerDBus.cpp +@@ -62,7 +62,7 @@ nsWifiScannerDBus::SendMessage(const char* aInterface, + return NS_ERROR_FAILURE; + } + } else if (!strcmp(aFuncCall, "GetAll")) { +- const char* param = ""; ++ const char* param = "org.freedesktop.NetworkManager.AccessPoint"; + if (!dbus_message_iter_append_basic(&argsIter, DBUS_TYPE_STRING, ¶m)) { + return NS_ERROR_FAILURE; + } Copied: thunderbird/repos/testing-x86_64/glibc-2.26-fix.diff (from rev 305820, thunderbird/trunk/glibc-2.26-fix.diff) =================================================================== --- testing-x86_64/glibc-2.26-fix.diff (rev 0) +++ testing-x86_64/glibc-2.26-fix.diff 2017-09-18 17:59:09 UTC (rev 305821) @@ -0,0 +1,258 @@ +From 6a0b7c8ecf0734ba1bcdccf8e0ee97e721fd5420 Mon Sep 17 00:00:00 2001 +Message-Id: <6a0b7c8ecf0734ba1bcdccf8e0ee97e721fd5420.1505113337.git.jan.steff...@gmail.com> +From: =?UTF-8?q?Emilio=20Cobos=20=C3=81lvarez?= <emi...@crisal.io> +Date: Sat, 19 Aug 2017 20:14:25 +0200 +Subject: [PATCH] Fix use of struct ucontext (squash 2 commits) + +Needed for building with glibc 2.26. + +Bug 1385667: Use ucontext_t consistently in breakpad-client. r=ted +MozReview-Commit-ID: AJhzJdNXP0f + +Bug 1394149: Fix remaining uses of ucontext in breakpad-client. r=ted +MozReview-Commit-ID: 5tP7fXsI7dQ +--- + .../linux/dump_writer_common/ucontext_reader.cc | 30 +++++++++++----------- + .../linux/dump_writer_common/ucontext_reader.h | 10 ++++---- + .../linux/handler/exception_handler.cc | 10 ++++---- + .../linux/handler/exception_handler.h | 2 +- + .../linux/microdump_writer/microdump_writer.cc | 2 +- + .../linux/minidump_writer/minidump_writer.cc | 2 +- + 6 files changed, 28 insertions(+), 28 deletions(-) + +diff --git a/toolkit/crashreporter/breakpad-client/linux/dump_writer_common/ucontext_reader.cc b/toolkit/crashreporter/breakpad-client/linux/dump_writer_common/ucontext_reader.cc +index 999960912e459e1b..303c0ebd32b663c4 100644 +--- a/toolkit/crashreporter/breakpad-client/linux/dump_writer_common/ucontext_reader.cc ++++ b/toolkit/crashreporter/breakpad-client/linux/dump_writer_common/ucontext_reader.cc +@@ -40,15 +40,15 @@ namespace google_breakpad { + + #if defined(__i386__) + +-uintptr_t UContextReader::GetStackPointer(const struct ucontext* uc) { ++uintptr_t UContextReader::GetStackPointer(const ucontext_t* uc) { + return uc->uc_mcontext.gregs[REG_ESP]; + } + +-uintptr_t UContextReader::GetInstructionPointer(const struct ucontext* uc) { ++uintptr_t UContextReader::GetInstructionPointer(const ucontext_t* uc) { + return uc->uc_mcontext.gregs[REG_EIP]; + } + +-void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext *uc, ++void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext_t *uc, + const struct _libc_fpstate* fp) { + const greg_t* regs = uc->uc_mcontext.gregs; + +@@ -88,15 +88,15 @@ void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext *uc, + + #elif defined(__x86_64) + +-uintptr_t UContextReader::GetStackPointer(const struct ucontext* uc) { ++uintptr_t UContextReader::GetStackPointer(const ucontext_t* uc) { + return uc->uc_mcontext.gregs[REG_RSP]; + } + +-uintptr_t UContextReader::GetInstructionPointer(const struct ucontext* uc) { ++uintptr_t UContextReader::GetInstructionPointer(const ucontext_t* uc) { + return uc->uc_mcontext.gregs[REG_RIP]; + } + +-void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext *uc, ++void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext_t *uc, + const struct _libc_fpstate* fpregs) { + const greg_t* regs = uc->uc_mcontext.gregs; + +@@ -145,15 +145,15 @@ void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext *uc, + + #elif defined(__ARM_EABI__) + +-uintptr_t UContextReader::GetStackPointer(const struct ucontext* uc) { ++uintptr_t UContextReader::GetStackPointer(const ucontext_t* uc) { + return uc->uc_mcontext.arm_sp; + } + +-uintptr_t UContextReader::GetInstructionPointer(const struct ucontext* uc) { ++uintptr_t UContextReader::GetInstructionPointer(const ucontext_t* uc) { + return uc->uc_mcontext.arm_pc; + } + +-void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext *uc) { ++void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext_t *uc) { + out->context_flags = MD_CONTEXT_ARM_FULL; + + out->iregs[0] = uc->uc_mcontext.arm_r0; +@@ -184,41 +184,41 @@ void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext *uc) { + + #elif defined(__aarch64__) + +-uintptr_t UContextReader::GetStackPointer(const struct ucontext* uc) { ++uintptr_t UContextReader::GetStackPointer(const ucontext_t* uc) { + return uc->uc_mcontext.sp; + } + +-uintptr_t UContextReader::GetInstructionPointer(const struct ucontext* uc) { ++uintptr_t UContextReader::GetInstructionPointer(const ucontext_t* uc) { + return uc->uc_mcontext.pc; + } + +-void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext *uc, ++void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext_t *uc, + const struct fpsimd_context* fpregs) { + out->context_flags = MD_CONTEXT_ARM64_FULL; + + out->cpsr = static_cast<uint32_t>(uc->uc_mcontext.pstate); + for (int i = 0; i < MD_CONTEXT_ARM64_REG_SP; ++i) + out->iregs[i] = uc->uc_mcontext.regs[i]; + out->iregs[MD_CONTEXT_ARM64_REG_SP] = uc->uc_mcontext.sp; + out->iregs[MD_CONTEXT_ARM64_REG_PC] = uc->uc_mcontext.pc; + + out->float_save.fpsr = fpregs->fpsr; + out->float_save.fpcr = fpregs->fpcr; + my_memcpy(&out->float_save.regs, &fpregs->vregs, + MD_FLOATINGSAVEAREA_ARM64_FPR_COUNT * 16); + } + + #elif defined(__mips__) + +-uintptr_t UContextReader::GetStackPointer(const struct ucontext* uc) { ++uintptr_t UContextReader::GetStackPointer(const ucontext_t* uc) { + return uc->uc_mcontext.gregs[MD_CONTEXT_MIPS_REG_SP]; + } + +-uintptr_t UContextReader::GetInstructionPointer(const struct ucontext* uc) { ++uintptr_t UContextReader::GetInstructionPointer(const ucontext_t* uc) { + return uc->uc_mcontext.pc; + } + +-void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext *uc) { ++void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext_t *uc) { + #if _MIPS_SIM == _ABI64 + out->context_flags = MD_CONTEXT_MIPS64_FULL; + #elif _MIPS_SIM == _ABIO32 +diff --git a/toolkit/crashreporter/breakpad-client/linux/dump_writer_common/ucontext_reader.h b/toolkit/crashreporter/breakpad-client/linux/dump_writer_common/ucontext_reader.h +index c533e28ba7441e83..039752a2dfb6e589 100644 +--- a/toolkit/crashreporter/breakpad-client/linux/dump_writer_common/ucontext_reader.h ++++ b/toolkit/crashreporter/breakpad-client/linux/dump_writer_common/ucontext_reader.h +@@ -41,21 +41,21 @@ namespace google_breakpad { + + // Wraps platform-dependent implementations of accessors to ucontext structs. + struct UContextReader { +- static uintptr_t GetStackPointer(const struct ucontext* uc); ++ static uintptr_t GetStackPointer(const ucontext_t* uc); + +- static uintptr_t GetInstructionPointer(const struct ucontext* uc); ++ static uintptr_t GetInstructionPointer(const ucontext_t* uc); + + // Juggle a arch-specific ucontext into a minidump format + // out: the minidump structure + // info: the collection of register structures. + #if defined(__i386__) || defined(__x86_64) +- static void FillCPUContext(RawContextCPU *out, const ucontext *uc, ++ static void FillCPUContext(RawContextCPU *out, const ucontext_t *uc, + const struct _libc_fpstate* fp); + #elif defined(__aarch64__) +- static void FillCPUContext(RawContextCPU *out, const ucontext *uc, ++ static void FillCPUContext(RawContextCPU *out, const ucontext_t *uc, + const struct fpsimd_context* fpregs); + #else +- static void FillCPUContext(RawContextCPU *out, const ucontext *uc); ++ static void FillCPUContext(RawContextCPU *out, const ucontext_t *uc); + #endif + }; + +diff --git a/toolkit/crashreporter/breakpad-client/linux/handler/exception_handler.cc b/toolkit/crashreporter/breakpad-client/linux/handler/exception_handler.cc +index 71a51a763938e39d..12df9bc96ec45fea 100644 +--- a/toolkit/crashreporter/breakpad-client/linux/handler/exception_handler.cc ++++ b/toolkit/crashreporter/breakpad-client/linux/handler/exception_handler.cc +@@ -439,44 +439,44 @@ bool ExceptionHandler::HandleSignal(int sig, siginfo_t* info, void* uc) { + // Fill in all the holes in the struct to make Valgrind happy. + memset(&g_crash_context_, 0, sizeof(g_crash_context_)); + memcpy(&g_crash_context_.siginfo, info, sizeof(siginfo_t)); +- memcpy(&g_crash_context_.context, uc, sizeof(struct ucontext)); ++ memcpy(&g_crash_context_.context, uc, sizeof(ucontext_t)); + #if defined(__aarch64__) +- struct ucontext* uc_ptr = (struct ucontext*)uc; ++ ucontext_t* uc_ptr = (ucontext_t*)uc; + struct fpsimd_context* fp_ptr = + (struct fpsimd_context*)&uc_ptr->uc_mcontext.__reserved; + if (fp_ptr->head.magic == FPSIMD_MAGIC) { + memcpy(&g_crash_context_.float_state, fp_ptr, + sizeof(g_crash_context_.float_state)); + } + #elif !defined(__ARM_EABI__) && !defined(__mips__) + // FP state is not part of user ABI on ARM Linux. +- // In case of MIPS Linux FP state is already part of struct ucontext ++ // In case of MIPS Linux FP state is already part of ucontext_t + // and 'float_state' is not a member of CrashContext. +- struct ucontext* uc_ptr = (struct ucontext*)uc; ++ ucontext_t* uc_ptr = (ucontext_t*)uc; + if (uc_ptr->uc_mcontext.fpregs) { + memcpy(&g_crash_context_.float_state, uc_ptr->uc_mcontext.fpregs, + sizeof(g_crash_context_.float_state)); + } + #endif + g_crash_context_.tid = syscall(__NR_gettid); + if (crash_handler_ != NULL) { + if (crash_handler_(&g_crash_context_, sizeof(g_crash_context_), + callback_context_)) { + return true; + } + } + return GenerateDump(&g_crash_context_); + } + + // This is a public interface to HandleSignal that allows the client to + // generate a crash dump. This function may run in a compromised context. + bool ExceptionHandler::SimulateSignalDelivery(int sig) { + siginfo_t siginfo = {}; + // Mimic a trusted signal to allow tracing the process (see + // ExceptionHandler::HandleSignal(). + siginfo.si_code = SI_USER; + siginfo.si_pid = getpid(); +- struct ucontext context; ++ ucontext_t context; + getcontext(&context); + return HandleSignal(sig, &siginfo, &context); + } +diff --git a/toolkit/crashreporter/breakpad-client/linux/handler/exception_handler.h b/toolkit/crashreporter/breakpad-client/linux/handler/exception_handler.h +index 711586fec7ddae59..be1880170e2826b0 100644 +--- a/toolkit/crashreporter/breakpad-client/linux/handler/exception_handler.h ++++ b/toolkit/crashreporter/breakpad-client/linux/handler/exception_handler.h +@@ -191,7 +191,7 @@ class ExceptionHandler { + struct CrashContext { + siginfo_t siginfo; + pid_t tid; // the crashing thread. +- struct ucontext context; ++ ucontext_t context; + #if !defined(__ARM_EABI__) && !defined(__mips__) + // #ifdef this out because FP state is not part of user ABI for Linux ARM. + // In case of MIPS Linux FP state is already part of struct +diff --git a/toolkit/crashreporter/breakpad-client/linux/microdump_writer/microdump_writer.cc b/toolkit/crashreporter/breakpad-client/linux/microdump_writer/microdump_writer.cc +index ff20bf36584c876b..a0b90e08fc5f0cff 100644 +--- a/toolkit/crashreporter/breakpad-client/linux/microdump_writer/microdump_writer.cc ++++ b/toolkit/crashreporter/breakpad-client/linux/microdump_writer/microdump_writer.cc +@@ -571,7 +571,7 @@ class MicrodumpWriter { + + void* Alloc(unsigned bytes) { return dumper_->allocator()->Alloc(bytes); } + +- const struct ucontext* const ucontext_; ++ const ucontext_t* const ucontext_; + #if !defined(__ARM_EABI__) && !defined(__mips__) + const google_breakpad::fpstate_t* const float_state_; + #endif +diff --git a/toolkit/crashreporter/breakpad-client/linux/minidump_writer/minidump_writer.cc b/toolkit/crashreporter/breakpad-client/linux/minidump_writer/minidump_writer.cc +index 0650bb95c179464a..6b5304bcd605ca3a 100644 +--- a/toolkit/crashreporter/breakpad-client/linux/minidump_writer/minidump_writer.cc ++++ b/toolkit/crashreporter/breakpad-client/linux/minidump_writer/minidump_writer.cc +@@ -1247,7 +1247,7 @@ class MinidumpWriter { + const int fd_; // File descriptor where the minidum should be written. + const char* path_; // Path to the file where the minidum should be written. + +- const struct ucontext* const ucontext_; // also from the signal handler ++ const ucontext_t* const ucontext_; // also from the signal handler + #if !defined(__ARM_EABI__) && !defined(__mips__) + const google_breakpad::fpstate_t* const float_state_; // ditto + #endif +-- +2.14.1 + Copied: thunderbird/repos/testing-x86_64/harmony-fix.diff (from rev 305820, thunderbird/trunk/harmony-fix.diff) =================================================================== --- testing-x86_64/harmony-fix.diff (rev 0) +++ testing-x86_64/harmony-fix.diff 2017-09-18 17:59:09 UTC (rev 305821) @@ -0,0 +1,16 @@ +diff --git i/gfx/skia/skia/src/ports/SkFontHost_cairo.cpp w/gfx/skia/skia/src/ports/SkFontHost_cairo.cpp +index 42da19280fce8235..2c221c32d097b462 100644 +--- i/gfx/skia/skia/src/ports/SkFontHost_cairo.cpp ++++ w/gfx/skia/skia/src/ports/SkFontHost_cairo.cpp +@@ -666,10 +666,7 @@ void SkScalerContext_CairoFT::generateMetrics(SkGlyph* glyph) + glyph->fTop = -SkToS16(SkFDot6Floor(bbox.yMax)); + glyph->fLeft = SkToS16(SkFDot6Floor(bbox.xMin)); + +- if (isLCD(fRec) && +- gSetLcdFilter && +- (fLcdFilter == FT_LCD_FILTER_DEFAULT || +- fLcdFilter == FT_LCD_FILTER_LIGHT)) { ++ if (isLCD(fRec)) { + if (fRec.fFlags & kLCD_Vertical_Flag) { + glyph->fTop -= 1; + glyph->fHeight += 2; Copied: thunderbird/repos/testing-x86_64/no-crmf.diff (from rev 305820, thunderbird/trunk/no-crmf.diff) =================================================================== --- testing-x86_64/no-crmf.diff (rev 0) +++ testing-x86_64/no-crmf.diff 2017-09-18 17:59:09 UTC (rev 305821) @@ -0,0 +1,39 @@ +diff -u -rN thunderbird-52.1.1/mozilla/config/external/nss/crmf/moz.build thunderbird-52.1.1-nocrmf/mozilla/config/external/nss/crmf/moz.build +--- thunderbird-52.1.1/mozilla/config/external/nss/crmf/moz.build 2017-05-09 23:35:13.000000000 +0200 ++++ thunderbird-52.1.1-nocrmf/mozilla/config/external/nss/crmf/moz.build 2017-06-14 01:51:36.686773132 +0200 +@@ -8,7 +8,6 @@ + + if CONFIG['MOZ_SYSTEM_NSS']: + OS_LIBS += [l for l in CONFIG['NSS_LIBS'] if l.startswith('-L')] +- OS_LIBS += ['-lcrmf'] + else: + USE_LIBS += [ + # The dependency on nss is not real, but is required to force the +diff -u -rN thunderbird-52.1.1/mozilla/old-configure thunderbird-52.1.1-nocrmf/mozilla/old-configure +--- thunderbird-52.1.1/mozilla/old-configure 2017-05-09 23:35:35.000000000 +0200 ++++ thunderbird-52.1.1-nocrmf/mozilla/old-configure 2017-06-14 01:50:28.726873231 +0200 +@@ -10692,9 +10692,7 @@ + + fi + +-if test -n "$MOZ_SYSTEM_NSS"; then +- NSS_LIBS="$NSS_LIBS -lcrmf" +-else ++if test -z "$MOZ_SYSTEM_NSS"; then + NSS_CFLAGS="-I${DIST}/include/nss" + fi + +diff -u -rN thunderbird-52.1.1/mozilla/old-configure.in thunderbird-52.1.1-nocrmf/mozilla/old-configure.in +--- thunderbird-52.1.1/mozilla/old-configure.in 2017-05-09 23:35:22.000000000 +0200 ++++ thunderbird-52.1.1-nocrmf/mozilla/old-configure.in 2017-06-14 01:50:50.953507079 +0200 +@@ -2126,9 +2126,7 @@ + AM_PATH_NSS(3.28.4, [MOZ_SYSTEM_NSS=1], [AC_MSG_ERROR([you don't have NSS installed or your version is too old])]) + fi + +-if test -n "$MOZ_SYSTEM_NSS"; then +- NSS_LIBS="$NSS_LIBS -lcrmf" +-else ++if test -z "$MOZ_SYSTEM_NSS"; then + NSS_CFLAGS="-I${DIST}/include/nss" + fi + Copied: thunderbird/repos/testing-x86_64/rust-i686.patch (from rev 305820, thunderbird/trunk/rust-i686.patch) =================================================================== --- testing-x86_64/rust-i686.patch (rev 0) +++ testing-x86_64/rust-i686.patch 2017-09-18 17:59:09 UTC (rev 305821) @@ -0,0 +1,16 @@ + build/moz.configure/rust.configure | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git c/build/moz.configure/rust.configure i/build/moz.configure/rust.configure +index cd86b24153debb1b..44911715e25d95e3 100644 +--- c/build/moz.configure/rust.configure ++++ i/build/moz.configure/rust.configure +@@ -81,7 +81,7 @@ def rust_target(rust_compiler, rustc, target, cross_compiling): + # OpenBSD + ('x86_64', 'OpenBSD'): 'x86_64-unknown-openbsd', + # Linux +- ('x86', 'Linux'): 'i586-unknown-linux-gnu', ++ ('x86', 'Linux'): 'i686-unknown-linux-gnu', + # Linux + ('x86_64', 'Linux'): 'x86_64-unknown-linux-gnu', + # OS X and iOS Copied: thunderbird/repos/testing-x86_64/thunderbird-install-dir.patch (from rev 305820, thunderbird/trunk/thunderbird-install-dir.patch) =================================================================== --- testing-x86_64/thunderbird-install-dir.patch (rev 0) +++ testing-x86_64/thunderbird-install-dir.patch 2017-09-18 17:59:09 UTC (rev 305821) @@ -0,0 +1,12 @@ +diff -upr comm-esr31.orig/mozilla/config/baseconfig.mk comm-esr31/mozilla/config/baseconfig.mk +--- comm-esr31.orig/mozilla/config/baseconfig.mk 2014-07-22 09:44:22.000000000 +0300 ++++ comm-esr31/mozilla/config/baseconfig.mk 2014-07-22 09:46:45.000000000 +0300 +@@ -4,7 +4,7 @@ + # whether a normal build is happening or whether the check is running. + includedir := $(includedir)/$(MOZ_APP_NAME)-$(MOZ_APP_VERSION) + idldir = $(datadir)/idl/$(MOZ_APP_NAME)-$(MOZ_APP_VERSION) +-installdir = $(libdir)/$(MOZ_APP_NAME)-$(MOZ_APP_VERSION) ++installdir = $(libdir)/$(MOZ_APP_NAME) + sdkdir = $(libdir)/$(MOZ_APP_NAME)-devel-$(MOZ_APP_VERSION) + ifndef TOP_DIST + TOP_DIST = dist Copied: thunderbird/repos/testing-x86_64/thunderbird.desktop (from rev 305820, thunderbird/trunk/thunderbird.desktop) =================================================================== --- testing-x86_64/thunderbird.desktop (rev 0) +++ testing-x86_64/thunderbird.desktop 2017-09-18 17:59:09 UTC (rev 305821) @@ -0,0 +1,173 @@ +[Desktop Entry] +Name=Thunderbird +Comment=Send and receive mail with Thunderbird +Comment[ast]=Lleer y escribir corréu electrónicu +Comment[ca]=Llegiu i escriviu correu +Comment[cs]=Čtení a psaní pošty +Comment[da]=Skriv/læs e-post/nyhedsgruppe med Mozilla Thunderbird +Comment[de]=E-Mails und Nachrichten mit Thunderbird lesen und schreiben +Comment[el]=Διαβάστε και γράψτε γράμματα με το Mozilla Thunderbird +Comment[es]=Lea y escriba correos y noticias con Thunderbird +Comment[fi]=Lue ja kirjoita sähköposteja +Comment[fr]=Lire et écrire des courriels +Comment[gl]=Lea e escriba correo electrónico +Comment[he]=קריאה/כתיבה של דוא״ל/חדשות באמצעות Mozilla Thunderbird +Comment[hr]=Čitajte/šaljite e-poštu s Thunderbird +Comment[hu]=Levelek írása és olvasása a Thunderbirddel +Comment[it]=Per leggere e scrivere email +Comment[ja]=メールの読み書き +Comment[ko]=Mozilla Thunderbird 메일/뉴스 읽기 및 쓰기 클라이언트 +Comment[nl]=E-mail/nieuws lezen en schrijven met Mozilla Thunderbird +Comment[pl]=Czytanie i wysyłanie e-maili +Comment[pt_BR]=Leia e escreva suas mensagens +Comment[ru]=Читайте и пишите письма +Comment[sk]=Čítajte a píšte poštu pomocou programu Thunderbird +Comment[sv]=Läs och skriv e-post +Comment[ug]=ئېلخەت ۋە خەۋەرلەرنى Mozilla Thunderbird دا كۆرۈش ۋە يېزىش +Comment[uk]=Читання та написання листів +Comment[vi]=Đọc và soạn thư điện tử +Comment[zh_CN]=阅读邮件或新闻 +Comment[zh_TW]=以 Mozilla Thunderbird 讀寫郵件或新聞 +GenericName=Mail Client +GenericName[ast]=Client de correu +GenericName[ca]=Client de correu +GenericName[cs]=Poštovní klient +GenericName[da]=E-postklient +GenericName[de]=E-Mail-Anwendung +GenericName[el]=Λογισμικό αλληλογραφίας +GenericName[es]=Cliente de correo +GenericName[fi]=Sähköpostiohjelma +GenericName[fr]=Client de messagerie +GenericName[gl]=Cliente de correo electrónico +GenericName[he]=לקוח דוא״ל +GenericName[hr]=Klijent e-pošte +GenericName[hu]=Levelezőkliens +GenericName[it]=Client email +GenericName[ja]=電子メールクライアント +GenericName[ko]=메일 클라이언트 +GenericName[nl]=E-mailprogramma +GenericName[pl]=Klient poczty +GenericName[pt_BR]=Cliente de E-mail +GenericName[ru]=Почтовый клиент +GenericName[sk]=Poštový klient +GenericName[ug]=ئېلخەت دېتالى +GenericName[uk]=Поштова програма +GenericName[vi]=Phần mềm khách quản lý thư điện tử +GenericName[zh_CN]=邮件新闻客户端 +GenericName[zh_TW]=郵件用戶端 +Exec=/usr/lib/thunderbird/thunderbird %u +Terminal=false +Type=Application +Icon=thunderbird +Categories=Network;Email; +MimeType=message/rfc822;x-scheme-handler/mailto;application/x-xpinstall; +StartupNotify=true +Actions=ComposeMessage;OpenAddressBook; + +[Desktop Action ComposeMessage] +Name=Write new message +Name[ar]=اكتب رسالة جديدة +Name[ast]=Redactar mensaxe nuevu +Name[be]=Напісаць новы ліст +Name[bg]=Съставяне на ново съобщение +Name[br]=Skrivañ ur gemennadenn nevez +Name[ca]=Escriu un missatge nou +Name[cs]=Napsat novou zprávu +Name[da]=Skriv en ny meddelelse +Name[de]=Neue Nachricht verfassen +Name[el]=Σύνταξη νέου μηνύματος +Name[es_AR]=Escribir un nuevo mensaje +Name[es_ES]=Redactar nuevo mensaje +Name[et]=Kirjuta uus kiri +Name[eu]=Idatzi mezu berria +Name[fi]=Kirjoita uusi viesti +Name[fr]=Rédiger un nouveau message +Name[fy_NL]=Skriuw in nij berjocht +Name[ga_IE]=Scríobh teachtaireacht nua +Name[gd]=Sgrìobh teachdaireachd ùr +Name[gl]=Escribir unha nova mensaxe +Name[he]=כתיבת הודעה חדשה +Name[hr]=Piši novu poruku +Name[hu]=Új üzenet írása +Name[hy_AM]=Գրել նոր նամակ +Name[is]=SKrifa nýjan póst +Name[it]=Scrivi nuovo messaggio +Name[ja]=新しいメッセージを作成する +Name[ko]=새 메시지 작성 +Name[lt]=Rašyti naują laišką +Name[nb_NO]=Skriv ny melding +Name[nl]=Nieuw bericht aanmaken +Name[nn_NO]=Skriv ny melding +Name[pl]=Nowa wiadomość +Name[pt_BR]=Nova mensagem +Name[pt_PT]=Escrever nova mensagem +Name[rm]=Scriver in nov messadi +Name[ro]=Scrie un mesaj nou +Name[ru]=Создать новое сообщение +Name[si]=නව ලිපියක් ලියන්න +Name[sk]=Nová e-mailová správa +Name[sl]=Sestavi novo sporočilo +Name[sq]=Shkruani mesazh të ri +Name[sr]=Писање нове поруке +Name[sv_SE]=Skriv ett nytt meddelande +Name[ta_LK]=புதிய செய்தியை எழுதுக +Name[tr]=Yeni ileti yaz +Name[uk]=Написати нового листа +Name[vi]=Viết thư mới +Name[zh_CN]=编写新消息 +Name[zh_TW]=寫一封新訊息 +Exec=/usr/lib/thunderbird/thunderbird -compose + +[Desktop Action OpenAddressBook] +Name=Open address book +Name[ar]=افتح دفتر العناوين +Name[ast]=Abrir llibreta de direiciones +Name[be]=Адкрыць адрасную кнігу +Name[bg]=Отваряне на адресник +Name[br]=Digeriñ ur c'harned chomlec'hioù +Name[ca]=Obre la llibreta d'adreces +Name[cs]=Otevřít Adresář +Name[da]=Åbn adressebog +Name[de]=Adressbuch öffnen +Name[el]=Άνοιγμα ευρετηρίου διευθύνσεων +Name[es_AR]=Abrir libreta de direcciones +Name[es_ES]=Abrir libreta de direcciones +Name[et]=Ava aadressiraamat +Name[eu]=Ireki helbide-liburua +Name[fi]=Avaa osoitekirja +Name[fr]=Ouvrir un carnet d'adresses +Name[fy_NL]=Iepenje adresboek +Name[ga_IE]=Oscail leabhar seoltaí +Name[gd]=Fosgail leabhar-sheòlaidhean +Name[gl]=Abrir a axenda de enderezos +Name[he]=פתיחת ספר כתובות +Name[hr]=Otvori adresar +Name[hu]=Címjegyzék megnyitása +Name[hy_AM]=Բացել Հասցեագիրքը +Name[is]=Opna nafnaskrá +Name[it]=Apri rubrica +Name[ja]=アドレス帳を開く +Name[ko]=주소록 열기 +Name[lt]=Atverti adresų knygą +Name[nb_NO]=Åpne adressebok +Name[nl]=Adresboek openen +Name[nn_NO]=Opne adressebok +Name[pl]=Książka adresowa +Name[pt_BR]=Catálogo de endereços +Name[pt_PT]=Abrir livro de endereços +Name[rm]=Avrir il cudeschet d'adressas +Name[ro]=Deschide agenda de contacte +Name[ru]=Открыть адресную книгу +Name[si]=ලිපින පොත විවෘත කරන්න +Name[sk]=Otvoriť adresár +Name[sl]=Odpri adressar +Name[sq]=Hapni libër adresash +Name[sr]=Отвори адресар +Name[sv_SE]=Öppna adressboken +Name[ta_LK]=முகவரி பத்தகத்தை திறக்க +Name[tr]=Adres defterini aç +Name[uk]=Відкрити адресну книгу +Name[vi]=Mở sổ địa chỉ +Name[zh_CN]=打开通讯录 +Name[zh_TW]=開啟通訊錄 +Exec=/usr/lib/thunderbird/thunderbird -addressbook