diff options
-rw-r--r-- | app-editors/xemacs/ChangeLog | 8 | ||||
-rw-r--r-- | app-editors/xemacs/files/xemacs-21.4.22-large-images.patch | 122 | ||||
-rw-r--r-- | app-editors/xemacs/xemacs-21.4.22-r1.ebuild | 237 |
3 files changed, 366 insertions, 1 deletions
diff --git a/app-editors/xemacs/ChangeLog b/app-editors/xemacs/ChangeLog index cf3374c93ec0..11c88dd716f5 100644 --- a/app-editors/xemacs/ChangeLog +++ b/app-editors/xemacs/ChangeLog @@ -1,6 +1,12 @@ # ChangeLog for app-editors/xemacs # Copyright 1999-2009 Gentoo Foundation; Distributed under the GPL v2 -# $Header: /var/cvsroot/gentoo-x86/app-editors/xemacs/ChangeLog,v 1.124 2009/06/21 12:58:26 graaff Exp $ +# $Header: /var/cvsroot/gentoo-x86/app-editors/xemacs/ChangeLog,v 1.125 2009/07/06 20:22:19 graaff Exp $ + +*xemacs-21.4.22-r1 (06 Jul 2009) + + 06 Jul 2009; Hans de Graaff <graaff@gentoo.org> +xemacs-21.4.22-r1.ebuild, + +files/xemacs-21.4.22-large-images.patch: + Add upstream patch for bug #275397. 21 Jun 2009; Hans de Graaff <graaff@gentoo.org> xemacs-21.4.22.ebuild: Remove PROVIDE: app-editors/xemacs is the only provider right now so it diff --git a/app-editors/xemacs/files/xemacs-21.4.22-large-images.patch b/app-editors/xemacs/files/xemacs-21.4.22-large-images.patch new file mode 100644 index 000000000000..a03af3ccfa38 --- /dev/null +++ b/app-editors/xemacs/files/xemacs-21.4.22-large-images.patch @@ -0,0 +1,122 @@ +PATCH 21.4 + +Here is the 21.4 version of the previous patch. The lisp.h hunk is a +little ugly. Recommendations on how to deal with the absence of +UINT_64_T in 21.4 are welcome. + +Index: src/glyphs-eimage.c +=================================================================== +RCS file: /pack/xemacscvs/XEmacs/xemacs/src/glyphs-eimage.c,v +retrieving revision 1.9.2.5 +diff -d -u -r1.9.2.5 glyphs-eimage.c +--- src/glyphs-eimage.c 2007/08/20 19:52:28 1.9.2.5 ++++ src/glyphs-eimage.c 2009/07/01 22:36:04 +@@ -407,6 +407,7 @@ + */ + + { ++ UINT_64_BIT pixels_sq; + int jpeg_gray = 0; /* if we're dealing with a grayscale */ + /* Step 4: set parameters for decompression. */ + +@@ -429,7 +430,10 @@ + jpeg_start_decompress (&cinfo); + + /* Step 6: Read in the data and put into EImage format (8bit RGB triples)*/ +- ++ pixels_sq = ++ (UINT_64_BIT) cinfo.output_width * (UINT_64_BIT) cinfo.output_height; ++ if (pixels_sq > ((size_t) -1) / 3) ++ signal_image_error ("JPEG image too large to instantiate", instantiator); + unwind.eimage = (unsigned char*) xmalloc (cinfo.output_width * cinfo.output_height * 3); + if (!unwind.eimage) + signal_image_error("Unable to allocate enough memory for image", instantiator); +@@ -671,6 +675,7 @@ + { + ColorMapObject *cmo = unwind.giffile->SColorMap; + int i, j, row, pass, interlace, slice; ++ UINT_64_BIT pixels_sq; + unsigned char *eip; + /* interlaced gifs have rows in this order: + 0, 8, 16, ..., 4, 12, 20, ..., 2, 6, 10, ..., 1, 3, 5, ... */ +@@ -679,6 +684,9 @@ + + height = unwind.giffile->SHeight; + width = unwind.giffile->SWidth; ++ pixels_sq = (UINT_64_BIT) width * (UINT_64_BIT) height; ++ if (pixels_sq > ((size_t) -1) / (3 * unwind.giffile->ImageCount)) ++ signal_image_error ("GIF image too large to instantiate", instantiator); + unwind.eimage = (unsigned char*) + xmalloc (width * height * 3 * unwind.giffile->ImageCount); + if (!unwind.eimage) +@@ -937,11 +945,15 @@ + { + int y; + unsigned char **row_pointers; ++ UINT_64_BIT pixels_sq; + height = info_ptr->height; + width = info_ptr->width; ++ pixels_sq = (UINT_64_BIT) width * (UINT_64_BIT) height; ++ if (pixels_sq > ((size_t) -1) / 3) ++ signal_image_error ("PNG image too large to instantiate", instantiator); + + /* Wow, allocate all the memory. Truly, exciting. */ +- unwind.eimage = xnew_array_and_zero (unsigned char, width * height * 3); ++ unwind.eimage = xnew_array_and_zero (unsigned char, pixels_sq * 3); + /* libpng expects that the image buffer passed in contains a + picture to draw on top of if the png has any transparencies. + This could be a good place to pass that in... */ +@@ -994,7 +1006,7 @@ + png_set_expand (png_ptr); + /* send grayscale images to RGB too */ + if (info_ptr->color_type == PNG_COLOR_TYPE_GRAY || +- info_ptr->color_type == PNG_COLOR_TYPE_GRAY_ALPHA) ++ info_ptr->color_type == PNG_COLOR_TYPE_GRAY_ALPHA) + png_set_gray_to_rgb (png_ptr); + /* we can't handle alpha values */ + if (info_ptr->color_type & PNG_COLOR_MASK_ALPHA) +@@ -1268,6 +1280,7 @@ + + uint32 *raster; + unsigned char *ep; ++ UINT_64_BIT pixels_sq; + + assert (!NILP (data)); + +@@ -1290,12 +1303,15 @@ + + TIFFGetField (unwind.tiff, TIFFTAG_IMAGEWIDTH, &width); + TIFFGetField (unwind.tiff, TIFFTAG_IMAGELENGTH, &height); +- unwind.eimage = (unsigned char *) xmalloc (width * height * 3); ++ pixels_sq = (UINT_64_BIT) width * (UINT_64_BIT) height; ++ if (pixels_sq >= 1 << 29) ++ signal_image_error ("TIFF image too large to instantiate", instantiator); ++ unwind.eimage = (unsigned char *) xmalloc (pixels_sq * 3); + + /* #### This is little more than proof-of-concept/function testing. + It needs to be reimplemented via scanline reads for both memory + compactness. */ +- raster = (uint32*) _TIFFmalloc (width * height * sizeof (uint32)); ++ raster = (uint32*) _TIFFmalloc ((tsize_t) (pixels_sq * sizeof (uint32))); + if (raster != NULL) + { + int i,j; +Index: src/lisp.h +=================================================================== +RCS file: /pack/xemacscvs/XEmacs/xemacs/src/lisp.h,v +retrieving revision 1.45.2.10 +diff -d -u -r1.45.2.10 lisp.h +--- src/lisp.h 2005/02/01 03:55:02 1.45.2.10 ++++ src/lisp.h 2009/07/01 22:36:05 +@@ -265,6 +265,11 @@ + /*#define REGISTER register*/ + /*#endif*/ + ++#if SIZEOF_LONG == 8 ++#define UINT_64_BIT unsigned long ++#elif SIZEOF_LONG_LONG == 8 ++#define UINT_64_BIT unsigned long long ++#endif + + /* EMACS_INT is the underlying integral type into which a Lisp_Object must fit. + In particular, it must be large enough to contain a pointer. diff --git a/app-editors/xemacs/xemacs-21.4.22-r1.ebuild b/app-editors/xemacs/xemacs-21.4.22-r1.ebuild new file mode 100644 index 000000000000..1787dc3ec70f --- /dev/null +++ b/app-editors/xemacs/xemacs-21.4.22-r1.ebuild @@ -0,0 +1,237 @@ +# Copyright 1999-2009 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: /var/cvsroot/gentoo-x86/app-editors/xemacs/xemacs-21.4.22-r1.ebuild,v 1.1 2009/07/06 20:22:19 graaff Exp $ + +# Note: xemacs currently does not work with a hardened profile. If you +# want to use xemacs on a hardened profile then compile with the +# -nopie flag in CFLAGS or help fix bug #75028. + +export WANT_AUTOCONF="2.1" +inherit autotools eutils + +DESCRIPTION="highly customizable open source text editor and application development system" +HOMEPAGE="http://www.xemacs.org/" +SRC_URI="http://ftp.xemacs.org/xemacs-21.4/${P}.tar.gz + http://www.malfunction.de/afterstep/files/NeXT_XEmacs.tar.gz" + +LICENSE="GPL-2" +SLOT="0" +KEYWORDS="~alpha ~amd64 ~hppa ~ppc ~ppc64 ~sparc ~x86" +IUSE="eolconv esd gif gpm pop postgres ldap xface nas dnd X jpeg tiff png mule motif freewnn canna xim athena neXt Xaw3d gdbm berkdb" + +X_DEPEND="x11-libs/libXt x11-libs/libXmu x11-libs/libXext x11-misc/xbitmaps" + +RDEPEND=" + berkdb? ( sys-libs/db ) + gdbm? ( >=sys-libs/gdbm-1.8.3 ) + >=sys-libs/zlib-1.1.4 + >=dev-libs/openssl-0.9.6 + >=media-libs/audiofile-0.2.3 + gpm? ( >=sys-libs/gpm-1.19.6 ) + postgres? ( >=virtual/postgresql-base-7.2 ) + ldap? ( net-nds/openldap ) + esd? ( media-sound/esound ) + nas? ( media-libs/nas ) + X? ( $X_DEPEND !Xaw3d? ( !neXt? ( x11-libs/libXaw ) ) ) + dnd? ( x11-libs/dnd ) + motif? ( >=x11-libs/openmotif-2.1.30 ) + athena? ( x11-libs/libXaw ) + Xaw3d? ( x11-libs/Xaw3d ) + neXt? ( x11-libs/neXtaw ) + xface? ( media-libs/compface ) + tiff? ( media-libs/tiff ) + png? ( =media-libs/libpng-1.2* ) + jpeg? ( media-libs/jpeg ) + canna? ( app-i18n/canna ) + !amd64? ( freewnn? ( app-i18n/freewnn ) ) + >=sys-libs/ncurses-5.2 + >=app-admin/eselect-emacs-1.2" +DEPEND="${DEPEND}" + +PDEPEND="app-xemacs/xemacs-base + mule? ( app-xemacs/mule-base )" + +src_unpack() { + unpack ${P}.tar.gz + use neXt && unpack NeXT_XEmacs.tar.gz + + cd "${S}" + epatch "${FILESDIR}"/xemacs-21.4.19-texi.patch + + # see bug 58350, 102540 and 143580 + epatch "${FILESDIR}"/xemacs-21.4.19-db.patch + + # Security bug #216880 + epatch "${FILESDIR}"/xemacs-21.4.21-vcdiff.patch + + # Security bug #275397 + epatch "${FILESDIR}"/${P}-large-images.patch + + # Run autoconf. XEmacs tries to be smart by providing a stub + # configure.ac file for autoconf 2.59 but this throws our + # autotools eclass so it must be removed first. + rm "${S}"/configure.ac + eautoconf + + use neXt && cp "${WORKDIR}"/NeXT.XEmacs/xemacs-icons/* "${S}"/etc/toolbar/ +} + +src_compile() { + local myconf="" + + if use X; then + + myconf="${myconf} --with-widgets=athena" + myconf="${myconf} --with-dialogs=athena" + myconf="${myconf} --with-menubars=lucid" + myconf="${myconf} --with-scrollbars=lucid" + if use motif ; then + myconf="--with-widgets=motif" + myconf="${myconf} --with-dialogs=motif" + myconf="${myconf} --with-scrollbars=motif" + myconf="${myconf} --with-menubars=lucid" + fi + if use athena ; then + myconf="--with-scrollbars=athena" + fi + + if use Xaw3d; then + myconf="${myconf} --with-athena=3d" + elif use neXt; then + myconf="${myconf} --with-athena=next" + else + myconf="${myconf} --with-athena=xaw" + fi + + use dnd && myconf="${myconf} --with-dragndrop --with-offix" + + myconf="${myconf} $(use_with tiff ) $(use_with png )" + myconf="${myconf} $(use_with jpeg ) $(use_with xface )" + else + myconf="${myconf} + --without-x + --without-xpm + --without-dragndrop + --with-gif=no" + fi + + if use mule ; then + myconf="${myconf} --with-mule" + + if use xim ; then + if use motif ; then + myconf="${myconf} --with-xim=motif" + else + myconf="${myconf} --with-xim=xlib" + fi + else + myconf="${myconf} --with-xim=no" + fi + + myconf="${myconf} $(use_with canna ) $(use_with freewnn wnn )" + fi + + # This determines the type of sounds we are playing + local soundconf="native" + + # This determines how these sounds should be played + use nas && soundconf="${soundconf},nas" + use esd && soundconf="${soundconf},esd" + + myconf="${myconf} --with-sound=${soundconf}" + + if use gdbm || use berkdb ; then + use gdbm && mydb="gdbm" + + use berkdb && mydb="${mydb},berkdb" + + myconf="${myconf} --with-database=${mydb}" + else + myconf="${myconf} --without-database" + fi + + # fixes #21264, this should be fixed in 21.4.21 and has been fixed + # in 21.5 for sure. Now that 21.4.21 is out there is no real + # evidence that this indeed got fixed, so keep these exceptions + # for now. + use alpha && myconf="${myconf} --with-system-malloc" + use ppc64 && myconf="${myconf} --with-system-malloc" + use ia64 && myconf="${myconf} --with-system-malloc" + + # Enabling modules will cause segfaults outside the XEmacs build directory + use ia64 && myconf="${myconf} --without-modules" + + einfo "${myconf}" + + # Don't use econf because it uses options which this configure + # script does not understand (like --host). + ./configure ${myconf} ${EXTRA_ECONF} \ + $(use_with gif ) \ + $(use_with gpm ) \ + $(use_with postgres postgresql ) \ + $(use_with ldap ) \ + $(use_with eolconv file-coding ) \ + $(use_with pop ) \ + --prefix=/usr \ + --with-ncurses \ + --with-msw=no \ + --mail-locking=flock \ + --with-site-lisp=yes \ + --with-site-modules=yes \ + || die "The configure script failed to run properly" + + emake || die "emake failed" +} + +src_install() { + emake prefix="${D}"/usr \ + mandir="${D}"/usr/share/man/man1 \ + infodir="${D}"/usr/share/info \ + install gzip-el || die "emake install failed" + + # Rename some applications installed in bin so that it is clear + # which application installed them and so that conflicting + # packages (emacs) can't clobber the actual applications. + # Addresses bug #62991. + for i in b2m ctags etags rcs-checkin ; do + mv "${D}"/usr/bin/${i} "${D}"/usr/bin/${i}-xemacs || die "mv ${i} failed" + done + + # rename man pages + for i in ctags etags; do + mv "${D}"/usr/share/man/man1/${i}{,-xemacs}.1 || die "mv ${i}.1 failed" + done + + # install base packages directories + dodir /usr/lib/xemacs/xemacs-packages/ + dodir /usr/lib/xemacs/site-packages/ + dodir /usr/lib/xemacs/site-modules/ + dodir /usr/lib/xemacs/site-lisp/ + + if use mule; + then + dodir /usr/lib/xemacs/mule-packages + fi + + # remove extraneous info files + cd "${D}"/usr/share/info + rm -f dir info.info texinfo* termcap* standards* + + cd "${S}" + dodoc BUGS CHANGES-* ChangeLog GETTING* INSTALL PROBLEMS README* + dodoc "${FILESDIR}"/README.Gentoo + + insinto /usr/share/pixmaps + newins "${S}"/etc/${PN}-icon.xpm ${PN}.xpm + + insinto /usr/share/applications + doins "${FILESDIR}"/${PN}.desktop +} + +pkg_postinst() { + eselect emacs update ifunset +} + +pkg_postrm() { + eselect emacs update ifunset +} |