From 95a8766521ed143dbf82ec447b7b79743e274797 Mon Sep 17 00:00:00 2001 From: "A. Wilcox" Date: Tue, 13 Mar 2018 01:17:58 -0500 Subject: user/thunderbird: new package --- user/thunderbird/APKBUILD | 90 +++++++++++++++++++ user/thunderbird/bad-google-code.patch | 49 +++++++++++ user/thunderbird/disable-hunspell_hooks.patch | 11 +++ user/thunderbird/fix-seccomp-bpf.patch | 14 +++ user/thunderbird/mach-linux-musl.patch | 119 ++++++++++++++++++++++++++ user/thunderbird/mozconfig | 33 +++++++ user/thunderbird/profiler.patch | 44 ++++++++++ user/thunderbird/proper-system-hunspell.patch | 22 +++++ user/thunderbird/stab.h | 71 +++++++++++++++ user/thunderbird/thunderbird.desktop | 64 ++++++++++++++ 10 files changed, 517 insertions(+) create mode 100644 user/thunderbird/APKBUILD create mode 100644 user/thunderbird/bad-google-code.patch create mode 100644 user/thunderbird/disable-hunspell_hooks.patch create mode 100644 user/thunderbird/fix-seccomp-bpf.patch create mode 100644 user/thunderbird/mach-linux-musl.patch create mode 100644 user/thunderbird/mozconfig create mode 100644 user/thunderbird/profiler.patch create mode 100644 user/thunderbird/proper-system-hunspell.patch create mode 100644 user/thunderbird/stab.h create mode 100644 user/thunderbird/thunderbird.desktop diff --git a/user/thunderbird/APKBUILD b/user/thunderbird/APKBUILD new file mode 100644 index 000000000..782061ea3 --- /dev/null +++ b/user/thunderbird/APKBUILD @@ -0,0 +1,90 @@ +# Contributor: A. Wilcox +# Maintainer: A. Wilcox +pkgname=thunderbird +pkgver=52.6.0 +pkgrel=0 +pkgdesc="Email client from Mozilla" +url="https://www.mozilla.org/thunderbird/" +arch="all" +options="!check" # X11 required +license="MPL" +depends="" +# moz build system stuff +# system-libs +# actual deps +makedepends=" + autoconf2.13 debianutils-which perl python2 + + alsa-lib-dev bzip2-dev icu-dev libevent-dev libffi-dev libpng-dev + libjpeg-turbo-dev libvpx-dev nspr-dev nss-dev pulseaudio-dev zlib-dev + + dbus-glib-dev gconf-dev gtk+2.0-dev gtk+3.0-dev hunspell-dev libsm-dev + libnotify-dev libxcomposite-dev libxdamage-dev libxrender-dev libxt-dev + nss-static sqlite-dev startup-notification-dev unzip yasm zip + " +install="" +subpackages="$pkgname-dev" +source="https://archive.mozilla.org/pub/thunderbird/releases/$pkgver/source/thunderbird-$pkgver.source.tar.xz + mozconfig + bad-google-code.patch + fix-seccomp-bpf.patch + mach-linux-musl.patch + profiler.patch + proper-system-hunspell.patch + stab.h + thunderbird.desktop + " +somask="liblgpllibs.so + libmozgtk.so + libmozsandbox.so + libxul.so" +_tbirddir=/usr/lib/${pkgname}-${pkgver} + +prepare() { + default_prepare + cp "$srcdir"/stab.h "$builddir"/mozilla/toolkit/crashreporter/google-breakpad/src/ + cp "$srcdir"/mozconfig "$builddir"/mozconfig + echo "ac_add_options --enable-optimize=\"$CFLAGS\"" >> "$builddir"/mozconfig + echo "ac_add_options --host=\"$CHOST\"" >> "$builddir"/mozconfig + echo "ac_add_options --target=\"$CTARGET\"" >> "$builddir"/mozconfig +} + +build() { + cd "$builddir" + + # reportedly needed for gcc6; confirm this? + export CXXFLAGS="$CXXFLAGS -fno-delete-null-pointer-checks -fno-schedule-insns2" + + export LDFLAGS="$LDFLAGS -Wl,-rpath,${_tbirddir}" + export USE_SHORT_LIBNAME=1 + + ./mozilla/mach build +} + +package() { + cd "$builddir" + DESTDIR="$pkgdir" ./mozilla/mach install + install -D -m644 "$srcdir"/thunderbird.desktop \ + "$pkgdir"/usr/share/applications/thunderbird.desktop +} + +dev() { + pkgdesc="$pkgdesc (development files)" + + mkdir -p "$subpkgdir"/usr + mv "$pkgdir"/usr/include "$subpkgdir"/usr/include + mkdir -p "$subpkgdir"/usr/lib + mv "$pkgdir"/usr/lib/thunderbird-devel* "$subpkgdir"/usr/lib + mkdir -p "$subpkgdir"/usr/share + mv "$pkgdir"/usr/share/idl "$subpkgdir"/usr/share +} + +sha512sums="80742c95ed61d1cb2e72b71bb23bdd211a40240ab4393e9f028a38f902547372084a8f56445e2394484be088a7b9801405f3d6618fb2742601cc968bf34427f0 thunderbird-52.6.0.source.tar.xz +000b4403bfac4a6192ebe36a734ef3e464f3bdd3bc797e87bc487b4d9d93cd4b41137d82726617205e39f7aedf8bf2dfb11645db24a8b0b0137a141c9133f151 mozconfig +9b11ba43f1f3fe9cda69b6b92e2073ea5165a47e30084537f396ceb8fb63573c4eb057251644837504aa4546183dc8f77fbb24f1450b6a15a1386f29180deefc bad-google-code.patch +2f52fcd7c42f8e12c955e05aa12449aa486c5347d2a7406ff0dada66f64079152b18c3f65c43410df372e871488f17889bc337ced37d0b76305afdbcb55cb580 fix-seccomp-bpf.patch +475bdf81c41775634b131635197fa449b5068f2624a6b120d1878e2191a8e7badf01ac79a15ccf39242c64a29357f2ed7bae96352ceb70a234b17468a999e0c4 mach-linux-musl.patch +7e72b96196f51cc02478f1802a10b1c1754db09d7d35aef697c5dcaace107e7a45a1b97256cc98b4aa728845694be093b148b61868e8ebfc8317fea19d6c71fa profiler.patch +63b09028262a109e3a02f928c12323793df65dbd6d5605ddc315978b50ff4b50f6d1af410dc7c00538c80009a8721900c6320b166c8aa9bc6dce170ebcd6fc91 proper-system-hunspell.patch +0b3f1e4b9fdc868e4738b5c81fd6c6128ce8885b260affcb9a65ff9d164d7232626ce1291aaea70132b3e3124f5e13fef4d39326b8e7173e362a823722a85127 stab.h +95a2b1deb4f6c90750fdd2bfe8ca0a7879a5b267965091705a6beb0a0a4b1ccad75d11df7b9885543ca4232ff704e975c6946f4c11804cb71c471e06f9576001 thunderbird.desktop" diff --git a/user/thunderbird/bad-google-code.patch b/user/thunderbird/bad-google-code.patch new file mode 100644 index 000000000..4be2b6748 --- /dev/null +++ b/user/thunderbird/bad-google-code.patch @@ -0,0 +1,49 @@ +--- thunderbird-52.6.0/mozilla/toolkit/crashreporter/google-breakpad/src/common/linux/dump_symbols.cc ++++ thunderbird-52.6.0/mozilla/toolkit/crashreporter/google-breakpad/src/common/linux/dump_symbols.cc +@@ -45,6 +45,7 @@ + #include + #include + #include ++#include + + #include + #include +--- thunderbird-52.6.0/mozilla/toolkit/crashreporter/google-breakpad/src/common/stabs_reader.cc ++++ thunderbird-52.6.0/mozilla/toolkit/crashreporter/google-breakpad/src/common/stabs_reader.cc +@@ -41,6 +41,10 @@ + + #include "common/using_std_string.h" + ++#ifndef N_UNDF ++#define N_UNDF 0 ++#endif ++ + using std::vector; + + namespace google_breakpad { +--- thunderbird-52.6.0/mozilla/toolkit/crashreporter/google-breakpad/src/common/stabs_reader.h ++++ thunderbird-52.6.0/mozilla/toolkit/crashreporter/google-breakpad/src/common/stabs_reader.h +@@ -55,7 +55,7 @@ + + #ifdef HAVE_MACH_O_NLIST_H + #include +-#elif defined(HAVE_A_OUT_H) ++#elif 0 + #include + #endif + +--- thunderbird-52.6.0/mozilla/toolkit/crashreporter/google-breakpad/src/third_party/lss/linux_syscall_support.h ++++ thunderbird-52.6.0/mozilla/toolkit/crashreporter/google-breakpad/src/third_party/lss/linux_syscall_support.h +@@ -1134,6 +1134,12 @@ struct kernel_statfs { + #ifndef __NR_fallocate + #define __NR_fallocate 285 + #endif ++ ++#undef __NR_pread ++#define __NR_pread __NR_pread64 ++#undef __NR_pwrite ++#define __NR_pwrite __NR_pwrite64 ++ + /* End of x86-64 definitions */ + #elif defined(__mips__) + #if _MIPS_SIM == _MIPS_SIM_ABI32 diff --git a/user/thunderbird/disable-hunspell_hooks.patch b/user/thunderbird/disable-hunspell_hooks.patch new file mode 100644 index 000000000..1eaa4d035 --- /dev/null +++ b/user/thunderbird/disable-hunspell_hooks.patch @@ -0,0 +1,11 @@ +--- a/mozilla-config.h.in 2016-07-06 15:16:06.621880293 +0200 ++++ b/mozilla-config.h.in 2016-07-06 15:16:42.958428126 +0200 +@@ -54,7 +54,7 @@ + * HUNSPELL_STATIC is defined in extensions/spellcheck/hunspell/src/Makefile.in, + * unless --enable-system-hunspell is defined. + */ +-#if defined(HUNSPELL_STATIC) ++#if 0 + #include "hunspell_alloc_hooks.h" + #include "hunspell_fopen_hooks.h" + #endif diff --git a/user/thunderbird/fix-seccomp-bpf.patch b/user/thunderbird/fix-seccomp-bpf.patch new file mode 100644 index 000000000..844ec7b96 --- /dev/null +++ b/user/thunderbird/fix-seccomp-bpf.patch @@ -0,0 +1,14 @@ +--- a/mozilla/security/sandbox/chromium/sandbox/linux/seccomp-bpf/trap.cc.orig 2015-09-23 09:10:08.812740571 +0200 ++++ b/mozilla/security/sandbox/chromium/sandbox/linux/seccomp-bpf/trap.cc 2015-09-23 09:11:38.404746155 +0200 +@@ -23,6 +23,11 @@ + #include "sandbox/linux/services/android_ucontext.h" + #endif + ++// musl libc defines siginfo_t __si_fields instead of _sifields ++#if defined(OS_LINUX) && !defined(__GLIBC__) ++#define _sifields __si_fields ++#endif ++ + namespace { + + struct arch_sigsys { diff --git a/user/thunderbird/mach-linux-musl.patch b/user/thunderbird/mach-linux-musl.patch new file mode 100644 index 000000000..6bddf6ff6 --- /dev/null +++ b/user/thunderbird/mach-linux-musl.patch @@ -0,0 +1,119 @@ + +# HG changeset patch +# User Mike Hommey +# Date 1502856976 -32400 +# Node ID 8d9ae8c45dd07496f164364f24c5f43edcf2eb6e +# Parent fa02d334033f0039ef82b3d7dc194312ba250279 +Bug 1384062 - Make SystemResourceMonitor.stop more resilient to errors. r=ahal,gps + +The poll() call in SystemResourceMonitor.stop might fail even though +there is something to read from the pipe, in some corner cases, and +python won't let us know about it. In that case, an exception is thrown, +leaving the SystemResourceMonitor (and its callers) in a weird state. In +practice, this leads BuildMonitor.__exit__ to recall stop, which then +fails. + +So when poll() throws an exception, we pretend there's still something +to read, and we try to read anyways. If there is something to read, +recv() will return it, otherwise, it will throw an exception of its own, +which we catch, pretending we're done. + +Furthermore, when there is nothing to read from the pipe, poll() simply +returns False, and our loop never sets `done` to True, and we then hit +an assert, which doesn't have its place here, so we remove it. + +Finally, the other end of the pipe might have died at any time, making +sending over the pipe fail, so we also protect against that. + +With all these changes, it feels like the reason to backout bug 1239939 +in bug 1272782 should have been dealt with, and we can drop the timeout +again. + +diff --git a/mozilla/testing/mozbase/mozsystemmonitor/mozsystemmonitor/resourcemonitor.py b/mozilla/testing/mozbase/mozsystemmonitor/mozsystemmonitor/resourcemonitor.py +--- a/mozilla/testing/mozbase/mozsystemmonitor/mozsystemmonitor/resourcemonitor.py ++++ b/mozilla/testing/mozbase/mozsystemmonitor/mozsystemmonitor/resourcemonitor.py +@@ -284,57 +284,71 @@ class SystemResourceMonitor(object): + """ + if not self._process: + self._stopped = True + return + + assert self._running + assert not self._stopped + +- self._pipe.send(('terminate',)) ++ try: ++ self._pipe.send(('terminate',)) ++ except Exception: ++ pass + self._running = False + self._stopped = True + + self.measurements = [] + +- done = False +- + # The child process will send each data sample over the pipe + # as a separate data structure. When it has finished sending + # samples, it sends a special "done" message to indicate it + # is finished. +- while self._pipe.poll(1.0): +- start_time, end_time, io_diff, cpu_diff, cpu_percent, virt_mem, \ +- swap_mem = self._pipe.recv() ++ ++ # multiprocessing.Pipe is not actually a pipe on at least Linux. that ++ # has an effect on the expected outcome of reading from it when the ++ # other end of the pipe dies, leading to possibly hanging on revc() ++ # below. So we must poll(). ++ def poll(): ++ try: ++ return self._pipe.poll(0.1) ++ except Exception: ++ # Poll might throw an exception even though there's still ++ # data to read. That happens when the underlying system call ++ # returns both POLLERR and POLLIN, but python doesn't tell us ++ # about it. So assume there is something to read, and we'll ++ # get an exception when trying to read the data. ++ return True ++ while poll(): ++ try: ++ start_time, end_time, io_diff, cpu_diff, cpu_percent, virt_mem, \ ++ swap_mem = self._pipe.recv() ++ except Exception: ++ # Let's assume we're done here ++ break + + # There should be nothing after the "done" message so + # terminate. + if start_time == 'done': +- done = True + break + + io = self._io_type(*io_diff) + virt = self._virt_type(*virt_mem) + swap = self._swap_type(*swap_mem) + cpu_times = [self._cpu_times_type(*v) for v in cpu_diff] + + self.measurements.append(SystemResourceUsage(start_time, end_time, + cpu_times, cpu_percent, io, virt, swap)) + + # We establish a timeout so we don't hang forever if the child + # process has crashed. + self._process.join(10) + if self._process.is_alive(): + self._process.terminate() + self._process.join(10) +- else: +- # We should have received a "done" message from the +- # child indicating it shut down properly. This only +- # happens if the child shuts down cleanly. +- assert done + + if len(self.measurements): + self.start_time = self.measurements[0].start + self.end_time = self.measurements[-1].end + + # Methods to record events alongside the monitored data. + + def record_event(self, name): + diff --git a/user/thunderbird/mozconfig b/user/thunderbird/mozconfig new file mode 100644 index 000000000..8359687c5 --- /dev/null +++ b/user/thunderbird/mozconfig @@ -0,0 +1,33 @@ +ac_add_options --prefix=/usr +ac_add_options --libdir=/usr/lib +ac_add_options --disable-crashreporter +ac_add_options --disable-elf-hack +ac_add_options --disable-install-strip +ac_add_options --disable-jemalloc +ac_add_options --disable-profiling +ac_add_options --disable-strip +ac_add_options --disable-tests +ac_add_options --disable-updater +ac_add_options --enable-application=mail +ac_add_options --enable-alsa +ac_add_options --enable-calendar +ac_add_options --enable-dbus +ac_add_options --enable-default-toolkit=cairo-gtk3 +ac_add_options --enable-gio +ac_add_options --enable-official-branding +ac_add_options --enable-pie +ac_add_options --enable-pulseaudio +ac_add_options --enable-startup-notification +ac_add_options --enable-system-ffi +ac_add_options --enable-system-hunspell +ac_add_options --enable-system-sqlite +ac_add_options --with-pthreads +ac_add_options --with-system-bz2 +ac_add_options --with-system-icu +ac_add_options --with-system-jpeg +ac_add_options --with-system-libevent +ac_add_options --with-system-libvpx +ac_add_options --with-system-nspr +ac_add_options --with-system-nss +ac_add_options --with-system-png +ac_add_options --with-system-zlib diff --git a/user/thunderbird/profiler.patch b/user/thunderbird/profiler.patch new file mode 100644 index 000000000..1b502a243 --- /dev/null +++ b/user/thunderbird/profiler.patch @@ -0,0 +1,44 @@ +--- a/mozilla/tools/profiler/core/platform-linux.cc ++++ b/mozilla/tools/profiler/core/platform-linux.cc +@@ -711,11 +711,13 @@ void OS::Startup() { + void TickSample::PopulateContext(void* aContext) + { + MOZ_ASSERT(aContext); ++#if defined(__GLIBC__) + ucontext_t* pContext = reinterpret_cast(aContext); + if (!getcontext(pContext)) { + context = pContext; + SetSampleContext(this, aContext); + } ++#endif + } + + void OS::SleepMicro(int microseconds) +--- a/mozilla/tools/profiler/core/platform.h ++++ b/mozilla/tools/profiler/core/platform.h +@@ -34,6 +34,8 @@ + #define MOZ_COUNT_DTOR(name) + #endif + ++#include ++ + #ifdef ANDROID + #include + #else +--- a/mozilla/tools/profiler/lul/LulElf.cpp ++++ b/mozilla/tools/profiler/lul/LulElf.cpp +@@ -483,10 +483,10 @@ string FormatIdentifier(unsigned char identifier[16]) { + // Return the non-directory portion of FILENAME: the portion after the + // last slash, or the whole filename if there are no slashes. + string BaseFileName(const string &filename) { +- // Lots of copies! basename's behavior is less than ideal. +- char *c_filename = strdup(filename.c_str()); +- string base = basename(c_filename); +- free(c_filename); ++ // basename's behavior is less than ideal so avoid it ++ const char *c_filename = filename.c_str(); ++ const char *p = strrchr(c_filename, '/'); ++ string base = p ? p+1 : c_filename; + return base; + } + diff --git a/user/thunderbird/proper-system-hunspell.patch b/user/thunderbird/proper-system-hunspell.patch new file mode 100644 index 000000000..e1429de08 --- /dev/null +++ b/user/thunderbird/proper-system-hunspell.patch @@ -0,0 +1,22 @@ +moz seem to have no idea what their own damn build system is doing... + +--- thunderbird-52.6.0/mozilla/extensions/spellcheck/hunspell/glue/moz.build 2018-01-24 03:06:15.000000000 +0000 ++++ thunderbird-52.6.0/mozilla/extensions/spellcheck/hunspell/glue/moz.build 2018-03-12 09:17:05.386773708 +0000 +@@ -16,6 +16,9 @@ + if CONFIG['MOZ_SYSTEM_HUNSPELL']: + CXXFLAGS += CONFIG['MOZ_HUNSPELL_CFLAGS'] + else: ++ # This variable is referenced in configure.in. Make sure to change that file ++ # too if you need to change this variable. ++ DEFINES['HUNSPELL_STATIC'] = True + LOCAL_INCLUDES += ['../src'] + + LOCAL_INCLUDES += [ +@@ -33,7 +36,3 @@ + 'RemoteSpellCheckEngineChild.h', + 'RemoteSpellCheckEngineParent.h', + ] +- +-# This variable is referenced in configure.in. Make sure to change that file +-# too if you need to change this variable. +-DEFINES['HUNSPELL_STATIC'] = True diff --git a/user/thunderbird/stab.h b/user/thunderbird/stab.h new file mode 100644 index 000000000..6f70af398 --- /dev/null +++ b/user/thunderbird/stab.h @@ -0,0 +1,71 @@ +/* $OpenBSD: stab.h,v 1.3 2003/06/02 19:34:12 millert Exp $ */ +/* $NetBSD: stab.h,v 1.4 1994/10/26 00:56:25 cgd Exp $ */ + +/*- + * Copyright (c) 1991 The Regents of the University of California. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * @(#)stab.h 5.2 (Berkeley) 4/4/91 + */ + +#ifndef _STAB_H_ +#define _STAB_H_ + +/* + * The following are symbols used by various debuggers and by the Pascal + * compiler. Each of them must have one (or more) of the bits defined by + * the N_STAB mask set. + */ + +#define N_GSYM 0x20 /* global symbol */ +#define N_FNAME 0x22 /* F77 function name */ +#define N_FUN 0x24 /* procedure name */ +#define N_STSYM 0x26 /* data segment variable */ +#define N_LCSYM 0x28 /* bss segment variable */ +#define N_MAIN 0x2a /* main function name */ +#define N_PC 0x30 /* global Pascal symbol */ +#define N_RSYM 0x40 /* register variable */ +#define N_SLINE 0x44 /* text segment line number */ +#define N_DSLINE 0x46 /* data segment line number */ +#define N_BSLINE 0x48 /* bss segment line number */ +#define N_SSYM 0x60 /* structure/union element */ +#define N_SO 0x64 /* main source file name */ +#define N_LSYM 0x80 /* stack variable */ +#define N_BINCL 0x82 /* include file beginning */ +#define N_SOL 0x84 /* included source file name */ +#define N_PSYM 0xa0 /* parameter variable */ +#define N_EINCL 0xa2 /* include file end */ +#define N_ENTRY 0xa4 /* alternate entry point */ +#define N_LBRAC 0xc0 /* left bracket */ +#define N_EXCL 0xc2 /* deleted include file */ +#define N_RBRAC 0xe0 /* right bracket */ +#define N_BCOMM 0xe2 /* begin common */ +#define N_ECOMM 0xe4 /* end common */ +#define N_ECOML 0xe8 /* end common (local name) */ +#define N_LENG 0xfe /* length of preceding entry */ + +#endif /* !_STAB_H_ */ diff --git a/user/thunderbird/thunderbird.desktop b/user/thunderbird/thunderbird.desktop new file mode 100644 index 000000000..210859df0 --- /dev/null +++ b/user/thunderbird/thunderbird.desktop @@ -0,0 +1,64 @@ +[Desktop Entry] +Name=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]=郵件用戶端 +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 讀寫郵件或新聞 +Exec=thunderbird %u +Icon=thunderbird +Terminal=false +Type=Application +MimeType=message/rfc822;x-scheme-handler/mailto; +StartupNotify=true +Categories=Network;Email; -- cgit v1.2.3-70-g09d2