summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'app-text')
-rw-r--r--app-text/stardict/ChangeLog8
-rw-r--r--app-text/stardict/files/stardict-3.0.1-sparc_sigbus.patch86
-rw-r--r--app-text/stardict/stardict-3.0.1-r3.ebuild101
3 files changed, 194 insertions, 1 deletions
diff --git a/app-text/stardict/ChangeLog b/app-text/stardict/ChangeLog
index 1001f5804a80..c027e999454c 100644
--- a/app-text/stardict/ChangeLog
+++ b/app-text/stardict/ChangeLog
@@ -1,6 +1,12 @@
# ChangeLog for app-text/stardict
# Copyright 1999-2010 Gentoo Foundation; Distributed under the GPL v2
-# $Header: /var/cvsroot/gentoo-x86/app-text/stardict/ChangeLog,v 1.6 2010/02/09 21:13:13 josejx Exp $
+# $Header: /var/cvsroot/gentoo-x86/app-text/stardict/ChangeLog,v 1.7 2010/05/03 23:45:56 ssuominen Exp $
+
+*stardict-3.0.1-r3 (03 May 2010)
+
+ 03 May 2010; Samuli Suominen <ssuominen@gentoo.org>
+ +stardict-3.0.1-r3.ebuild, +files/stardict-3.0.1-sparc_sigbus.patch:
+ Fix sparc/sigbus wrt #265792 by Tiago Cunha.
09 Feb 2010; Joseph Jezak <josejx@gentoo.org> stardict-3.0.1-r2.ebuild:
Marked ppc/ppc64 stable for bug #288555.
diff --git a/app-text/stardict/files/stardict-3.0.1-sparc_sigbus.patch b/app-text/stardict/files/stardict-3.0.1-sparc_sigbus.patch
new file mode 100644
index 000000000000..2a5af3e170ce
--- /dev/null
+++ b/app-text/stardict/files/stardict-3.0.1-sparc_sigbus.patch
@@ -0,0 +1,86 @@
+http://bugs.gentoo.org/show_bug.cgi?id=265792
+
+by Tiago Cunha
+
+diff -ru stardict-3.0.1.orig/src/lib/getuint32.h stardict-3.0.1/src/lib/getuint32.h
+--- stardict-3.0.1.orig/src/lib/getuint32.h 2010-03-11 21:25:04.349799973 +0000
++++ stardict-3.0.1/src/lib/getuint32.h 2010-03-11 21:46:59.029797974 +0000
+@@ -1,7 +1,9 @@
+ #ifndef _SD_GET_UINT32_H_
+ #define _SD_GET_UINT32_H_
+
+-#ifdef ARM
++#include <string.h>
++
++#if defined(ARM) || defined(__sparc__)
+ static inline guint32 get_uint32(const gchar *addr)
+ {
+ guint32 result;
+diff -ru stardict-3.0.1.orig/src/lib/stddict.cpp stardict-3.0.1/src/lib/stddict.cpp
+--- stardict-3.0.1.orig/src/lib/stddict.cpp 2010-03-11 21:25:04.339799373 +0000
++++ stardict-3.0.1/src/lib/stddict.cpp 2010-03-11 21:53:30.415449981 +0000
+@@ -260,8 +260,12 @@
+ delete mf;
+ return NULL;
+ }
+-
+- gchar *p = mf->begin();
++ guint32 word_off_size = (get_uint32(mf->begin()) + 1) * sizeof(guint32);
++ if (word_off_size >= cachestat.st_size ||
++ *(mf->begin() + cachestat.st_size - 1) != '\0')
++ return NULL;
++
++ gchar *p = mf->begin() + word_off_size;
+ gboolean has_prefix;
+ if (cachefiletype == CacheFileType_oft)
+ has_prefix = g_str_has_prefix(p, OFFSETFILE_MAGIC_DATA);
+@@ -314,7 +318,7 @@
+ }
+ g_free(tmpstr);
+ }
+- if (cachestat.st_size!=glong(filedatasize + strlen(mf->begin()) +1)) {
++ if (cachestat.st_size != static_cast<gulong>(filedatasize + sizeof(guint32) + strlen(mf->begin() + word_off_size) +1)) {
+ delete mf;
+ return NULL;
+ }
+@@ -375,7 +379,7 @@
+ mf = get_cache_loadfile(oftfilename.c_str(), url, saveurl, cltfunc, filedatasize, 2);
+ if (!mf)
+ continue;
+- wordoffset = (guint32 *)(mf->begin()+strlen(mf->begin())+1);
++ wordoffset = reinterpret_cast<guint32 *>(mf->begin()) + 1;
+ return true;
+ }
+ return false;
+@@ -425,7 +429,12 @@
+ if (!mf.open(filename, oftstat.st_size)) {
+ return fopen(filename, "wb");
+ }
+- gchar *p = mf.begin();
++ guint32 word_off_size = (get_uint32(mf.begin()) + 1) * sizeof(guint32);
++ if (word_off_size >= oftstat.st_size ||
++ *(mf.begin() + oftstat.st_size - 1) != '\0')
++ return fopen(filename, "wb");
++
++ gchar *p = mf.begin() + word_off_size;
+ bool has_prefix;
+ if (cachefiletype == CacheFileType_oft)
+ has_prefix = g_str_has_prefix(p, OFFSETFILE_MAGIC_DATA);
+@@ -506,6 +515,9 @@
+ FILE *out= get_cache_savefile(oftfilename.c_str(), url, 2, cfilename, cltfunc);
+ if (!out)
+ continue;
++ guint32 nentries = npages;
++ fwrite(&nentries, sizeof(nentries), 1, out);
++ fwrite(wordoffset, sizeof(guint32), npages, out);
+ if (cachefiletype == CacheFileType_oft)
+ fwrite(OFFSETFILE_MAGIC_DATA, 1, sizeof(OFFSETFILE_MAGIC_DATA)-1, out);
+ else
+@@ -520,7 +532,6 @@
+ #endif
+ }
+ fwrite("\n", 1, 2, out);
+- fwrite(wordoffset, sizeof(guint32), npages, out);
+ fclose(out);
+ g_print("Save cache file: %s\n", cfilename.c_str());
+ return true;
diff --git a/app-text/stardict/stardict-3.0.1-r3.ebuild b/app-text/stardict/stardict-3.0.1-r3.ebuild
new file mode 100644
index 000000000000..e8865c637f31
--- /dev/null
+++ b/app-text/stardict/stardict-3.0.1-r3.ebuild
@@ -0,0 +1,101 @@
+# Copyright 1999-2010 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/app-text/stardict/stardict-3.0.1-r3.ebuild,v 1.1 2010/05/03 23:45:56 ssuominen Exp $
+
+EAPI="2"
+
+inherit gnome2 eutils autotools
+
+# NOTE: Even though the *.dict.dz are the same as dictd/freedict's files,
+# their indexes seem to be in a different format. So we'll keep them
+# seperate for now.
+
+IUSE="festival espeak gnome gucharmap qqwry pronounce spell"
+DESCRIPTION="A GNOME2 international dictionary supporting fuzzy and glob style matching"
+HOMEPAGE="http://stardict.sourceforge.net/"
+SRC_URI="mirror://sourceforge/stardict/${P}.tar.bz2
+ qqwry? ( mirror://sourceforge/stardict/QQWry.Dat.bz2 )
+ pronounce? ( mirror://sourceforge/stardict/WyabdcRealPeopleTTS.tar.bz2 )"
+
+RESTRICT="test"
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~amd64 ~ppc ~ppc64 ~sparc ~x86"
+
+DEP="gnome? ( >=gnome-base/libbonobo-2.2.0
+ >=gnome-base/libgnome-2.2.0
+ pronounce? ( >=gnome-base/libgnome-2.2.0[esd] )
+ >=gnome-base/libgnomeui-2.2.0
+ >=gnome-base/gconf-2
+ >=gnome-base/orbit-2.6
+ app-text/scrollkeeper )
+ spell? ( app-text/enchant )
+ gucharmap? ( >=gnome-extra/gucharmap-1.4.0 )
+ dev-libs/libsigc++
+ sys-libs/zlib
+ >=x11-libs/gtk+-2.12"
+
+RDEPEND="${DEP}
+ espeak? ( >=app-accessibility/espeak-1.29 )
+ festival? ( ~app-accessibility/festival-1.96_beta )"
+
+DEPEND="${DEP}
+ >=dev-util/intltool-0.22
+ dev-util/pkgconfig"
+
+src_prepare() {
+ epatch "${FILESDIR}"/${P}-configure.in-EST.diff
+ epatch "${FILESDIR}"/${P}-gconf-m4.diff
+ epatch "${FILESDIR}"/${P}-gcc43.patch
+ epatch "${FILESDIR}"/${P}-transparent_trayicon.patch
+ epatch "${FILESDIR}"/${P}-changelog-minor-typo-fixes.patch
+ epatch "${FILESDIR}"/${P}-gcc44.patch
+ epatch "${FILESDIR}"/${P}-sparc_sigbus.patch
+
+ # Fix compatibility with gucharmap-2, bug #240728
+ epatch "${FILESDIR}/${P}-gucharmap2.patch"
+
+ AT_M4DIR="m4" eautoreconf
+ gnome2_omf_fix
+}
+
+src_configure() {
+ export PKG_CONFIG=$(type -P pkg-config)
+ # Festival plugin crashes, bug 188684. Disable for now.
+ G2CONF="$(use_enable gnome gnome-support)
+ $(use_enable spell)
+ $(use_enable gucharmap)
+ $(use_enable espeak)
+ $(use_enable qqwry)
+ --disable-festival
+ --disable-advertisement
+ --disable-updateinfo"
+ gnome2_src_configure
+}
+
+src_install() {
+ gnome2_src_install
+ if use qqwry; then
+ insinto /usr/share/stardict/data
+ doins ../QQWry.Dat
+ fi
+ if use pronounce; then
+ dodir /usr/share/
+ mv ../WyabdcRealPeopleTTS "${D}"/usr/share/
+ fi
+ dodoc doc/{FAQ,HowToCreateDictionary,StarDictFileFormat,Translation,HACKING}
+}
+
+pkg_postinst() {
+ if use festival; then
+ elog "Note: festival text to speech (TTS) plugin is not built. To use festival"
+ elog 'TTS plugin, please, enable "Use TTS program." at:'
+ elog '"Preferences -> Dictionary -> Sound" and fill in "Commandline" with:'
+ elog '"echo %s | festival --tts"'
+ elog
+ fi
+ elog "You will now need to install stardict dictionary files. If"
+ elog "you have not, execute the below to get a list of dictionaries:"
+ elog
+ elog " emerge -s stardict-"
+}