diff options
author | Samuli Suominen <ssuominen@gentoo.org> | 2011-08-07 09:55:19 +0000 |
---|---|---|
committer | Samuli Suominen <ssuominen@gentoo.org> | 2011-08-07 09:55:19 +0000 |
commit | cc5a1053d0df968fa1cac2642a82bf9367d0fdf3 (patch) | |
tree | df77ad4a67a613cf88ff85d30c1b247e36e36b39 /media-gfx/xv | |
parent | Fix building with libpng15 wrt #368315 with NetBSD patch. (diff) | |
download | gentoo-2-cc5a1053d0df968fa1cac2642a82bf9367d0fdf3.tar.gz gentoo-2-cc5a1053d0df968fa1cac2642a82bf9367d0fdf3.tar.bz2 gentoo-2-cc5a1053d0df968fa1cac2642a82bf9367d0fdf3.zip |
Fix building with libpng15 wrt #355883 by Mike Frysinger
(Portage version: 2.2.0_alpha47/cvs/Linux x86_64)
Diffstat (limited to 'media-gfx/xv')
-rw-r--r-- | media-gfx/xv/ChangeLog | 8 | ||||
-rw-r--r-- | media-gfx/xv/files/xv-3.10a-libpng15.patch | 538 | ||||
-rw-r--r-- | media-gfx/xv/xv-3.10a-r16.ebuild | 90 |
3 files changed, 635 insertions, 1 deletions
diff --git a/media-gfx/xv/ChangeLog b/media-gfx/xv/ChangeLog index 4b2101c0695e..228e7054e37c 100644 --- a/media-gfx/xv/ChangeLog +++ b/media-gfx/xv/ChangeLog @@ -1,6 +1,12 @@ # ChangeLog for media-gfx/xv # Copyright 1999-2011 Gentoo Foundation; Distributed under the GPL v2 -# $Header: /var/cvsroot/gentoo-x86/media-gfx/xv/ChangeLog,v 1.102 2011/02/26 18:31:17 signals Exp $ +# $Header: /var/cvsroot/gentoo-x86/media-gfx/xv/ChangeLog,v 1.103 2011/08/07 09:55:19 ssuominen Exp $ + +*xv-3.10a-r16 (07 Aug 2011) + + 07 Aug 2011; Samuli Suominen <ssuominen@gentoo.org> +xv-3.10a-r16.ebuild, + +files/xv-3.10a-libpng15.patch: + Fix building with libpng15 wrt #355883 by Mike Frysinger 26 Feb 2011; Kevin McCarthy <signals@gentoo.org> xv-3.10a-r15.ebuild: Updated depends from media-libs/jpeg to virtual/jpeg diff --git a/media-gfx/xv/files/xv-3.10a-libpng15.patch b/media-gfx/xv/files/xv-3.10a-libpng15.patch new file mode 100644 index 000000000000..94502c1528d2 --- /dev/null +++ b/media-gfx/xv/files/xv-3.10a-libpng15.patch @@ -0,0 +1,538 @@ +--- xvpng.c ++++ xvpng.c +@@ -31,6 +31,7 @@ + + #ifdef HAVE_PNG + ++#include "zlib.h" + #include "png.h" + + /*** Stuff for PNG Dialog box ***/ +@@ -41,7 +42,7 @@ + #define COMPRESSION 6 /* default zlib compression level, not max + (Z_BEST_COMPRESSION) */ + +-#define HAVE_tRNS (info_ptr->valid & PNG_INFO_tRNS) ++#define HAVE_tRNS (png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS)) + + #define DWIDE 86 + #define DHIGH 104 +@@ -435,6 +436,16 @@ int WritePNG(fp, pic, ptype, w, h, rmap, + { + png_struct *png_ptr; + png_info *info_ptr; ++ struct { ++ /* IHDR */ ++ png_uint_32 width; ++ png_uint_32 height; ++ int bit_depth; ++ int color_type; ++ int interlace_type; ++ /* PLTE */ ++ int use_palette; ++ } info_tmp; + png_color palette[256]; + png_textp text; + byte r1[256], g1[256], b1[256]; /* storage for deduped palette */ +@@ -444,6 +455,7 @@ int WritePNG(fp, pic, ptype, w, h, rmap, + byte *p, *png_line; + char software[256]; + char *savecmnt; ++ int num_text, max_text; + + if ((png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, + png_xv_error, png_xv_warning)) == NULL) { +@@ -458,7 +470,7 @@ int WritePNG(fp, pic, ptype, w, h, rmap, + FatalError(software); + } + +- if (setjmp(png_ptr->jmpbuf)) { ++ if (setjmp(png_jmpbuf(png_ptr))) { + png_destroy_write_struct(&png_ptr, &info_ptr); + return -1; + } +@@ -489,8 +501,8 @@ int WritePNG(fp, pic, ptype, w, h, rmap, + png_set_filter(png_ptr, 0, filter); + } + +- info_ptr->width = w; +- info_ptr->height = h; ++ info_tmp.width = w; ++ info_tmp.height = h; + if (w <= 0 || h <= 0) { + SetISTR(ISTR_WARNING, "%s: image dimensions out of range (%dx%d)", + fbasename, w, h); +@@ -498,7 +510,8 @@ int WritePNG(fp, pic, ptype, w, h, rmap, + return -1; + } + +- info_ptr->interlace_type = interCB.val ? 1 : 0; ++ info_tmp.interlace_type = ++ interCB.val ? PNG_INTERLACE_ADAM7 : PNG_INTERLACE_NONE; + + linesize = 0; /* quiet a compiler warning */ + +@@ -542,40 +555,40 @@ int WritePNG(fp, pic, ptype, w, h, rmap, + png_destroy_write_struct(&png_ptr, &info_ptr); + return -1; + } +- info_ptr->color_type = PNG_COLOR_TYPE_RGB; +- info_ptr->bit_depth = 8; ++ info_tmp.color_type = PNG_COLOR_TYPE_RGB; ++ info_tmp.bit_depth = 8; ++ info_tmp.use_palette = 0; + } else /* ptype == PIC8 */ { + linesize = w; +- info_ptr->color_type = PNG_COLOR_TYPE_PALETTE; ++ info_tmp.color_type = PNG_COLOR_TYPE_PALETTE; + if (numuniqcols <= 2) +- info_ptr->bit_depth = 1; ++ info_tmp.bit_depth = 1; + else + if (numuniqcols <= 4) +- info_ptr->bit_depth = 2; ++ info_tmp.bit_depth = 2; + else + if (numuniqcols <= 16) +- info_ptr->bit_depth = 4; ++ info_tmp.bit_depth = 4; + else +- info_ptr->bit_depth = 8; ++ info_tmp.bit_depth = 8; + + for (i = 0; i < numuniqcols; i++) { + palette[i].red = r1[i]; + palette[i].green = g1[i]; + palette[i].blue = b1[i]; + } +- info_ptr->num_palette = numuniqcols; +- info_ptr->palette = palette; +- info_ptr->valid |= PNG_INFO_PLTE; ++ info_tmp.use_palette = 1; + } + } + + else if (colorType == F_GREYSCALE || colorType == F_BWDITHER) { +- info_ptr->color_type = PNG_COLOR_TYPE_GRAY; ++ info_tmp.color_type = PNG_COLOR_TYPE_GRAY; ++ info_tmp.use_palette = 0; + if (colorType == F_BWDITHER) { + /* shouldn't happen */ + if (ptype == PIC24) FatalError("PIC24 and B/W Stipple in WritePNG()"); + +- info_ptr->bit_depth = 1; ++ info_tmp.bit_depth = 1; + if (MONO(r1[0], g1[0], b1[0]) > MONO(r1[1], g1[1], b1[1])) { + remap[0] = 1; + remap[1] = 0; +@@ -595,7 +608,7 @@ int WritePNG(fp, pic, ptype, w, h, rmap, + png_destroy_write_struct(&png_ptr, &info_ptr); + return -1; + } +- info_ptr->bit_depth = 8; ++ info_tmp.bit_depth = 8; + } + else /* ptype == PIC8 */ { + int low_precision; +@@ -617,7 +630,7 @@ int WritePNG(fp, pic, ptype, w, h, rmap, + for (; i < 256; i++) + remap[i]=0; /* shouldn't be necessary, but... */ + +- info_ptr->bit_depth = 8; ++ info_tmp.bit_depth = 8; + + /* Note that this fails most of the time because of gamma */ + /* (and that would be a bug: GRR FIXME) */ +@@ -636,7 +649,7 @@ int WritePNG(fp, pic, ptype, w, h, rmap, + for (i = 0; i < numuniqcols; i++) { + remap[i] &= 0xf; + } +- info_ptr->bit_depth = 4; ++ info_tmp.bit_depth = 4; + + /* try to adjust to 2-bit precision grayscale */ + +@@ -652,7 +665,7 @@ int WritePNG(fp, pic, ptype, w, h, rmap, + for (i = 0; i < numuniqcols; i++) { + remap[i] &= 3; + } +- info_ptr->bit_depth = 2; ++ info_tmp.bit_depth = 2; + + /* try to adjust to 1-bit precision grayscale */ + +@@ -668,7 +681,7 @@ int WritePNG(fp, pic, ptype, w, h, rmap, + for (i = 0; i < numuniqcols; i++) { + remap[i] &= 1; + } +- info_ptr->bit_depth = 1; ++ info_tmp.bit_depth = 1; + } + } + } +@@ -677,6 +690,20 @@ int WritePNG(fp, pic, ptype, w, h, rmap, + else + png_error(png_ptr, "Unknown colorstyle in WritePNG"); + ++ png_set_IHDR(png_ptr, info_ptr, ++ info_tmp.width, info_tmp.height, ++ info_tmp.bit_depth, info_tmp.color_type, ++ info_tmp.interlace_type, PNG_COMPRESSION_TYPE_BASE, ++ PNG_FILTER_TYPE_BASE); ++ if (info_tmp.use_palette) { ++ /* ++ * info_ptr->num_palette = numuniqcols; ++ * info_ptr->palette = palette; ++ * info_ptr->valid |= PNG_INFO_PLTE; ++ */ ++ png_set_PLTE(png_ptr, info_ptr, palette, numuniqcols); ++ } ++ + if ((text = (png_textp)malloc(sizeof(png_text)))) { + sprintf(software, "XV %s", REVDATE); + +@@ -684,21 +711,29 @@ int WritePNG(fp, pic, ptype, w, h, rmap, + text->key = "Software"; + text->text = software; + text->text_length = strlen(text->text); ++ text->lang = NULL; + +- info_ptr->max_text = 1; +- info_ptr->num_text = 1; +- info_ptr->text = text; ++ /* ++ * info_ptr->max_text = 1; ++ * info_ptr->num_text = 1; ++ * info_ptr->text = text; ++ */ ++ png_set_text(png_ptr, info_ptr, text, 1); ++ num_text = max_text = 1; + } + + Display_Gamma = gDial.val; /* Save the current gamma for loading */ + + // GRR FIXME: add .Xdefaults option to omit writing gamma (size, cumulative errors when editing)--alternatively, modify save box to include "omit" checkbox +- info_ptr->gamma = 1.0/gDial.val; +- info_ptr->valid |= PNG_INFO_gAMA; ++ /* ++ * info_ptr->gamma = 1.0/gDial.val; ++ * info_ptr->valid |= PNG_INFO_gAMA; ++ */ ++ png_set_gAMA(png_ptr, info_ptr, 1.0/gDial.val); + + png_write_info(png_ptr, info_ptr); + +- if (info_ptr->bit_depth < 8) ++ if (info_tmp.bit_depth < 8) + png_set_packing(png_ptr); + + pass=png_set_interlace_handling(png_ptr); +@@ -711,13 +746,13 @@ int WritePNG(fp, pic, ptype, w, h, rmap, + int j; + p = pic; + for (j = 0; j < h; ++j) { +- if (info_ptr->color_type == PNG_COLOR_TYPE_GRAY) { ++ if (info_tmp.color_type == PNG_COLOR_TYPE_GRAY) { + int k; + for (k = 0; k < w; ++k) + png_line[k] = ptype==PIC24 ? MONO(p[k*3], p[k*3+1], p[k*3+2]) : + remap[pc2nc[p[k]]]; + png_write_row(png_ptr, png_line); +- } else if (info_ptr->color_type == PNG_COLOR_TYPE_PALETTE) { ++ } else if (info_tmp.color_type == PNG_COLOR_TYPE_PALETTE) { + int k; + for (k = 0; k < w; ++k) + png_line[k] = pc2nc[p[k]]; +@@ -743,24 +778,26 @@ int WritePNG(fp, pic, ptype, w, h, rmap, + strcpy(savecmnt, picComments); + key = savecmnt; + tp = text; +- info_ptr->num_text = 0; ++ ++ png_free_data(png_ptr, info_ptr, PNG_FREE_TEXT, -1); ++ num_text = 0; + + comment = strchr(key, ':'); + + do { + /* Allocate a larger structure for comments if necessary */ +- if (info_ptr->num_text >= info_ptr->max_text) ++ if (num_text >= max_text) + { + if ((tp = +- realloc(text, (info_ptr->num_text + 2)*sizeof(png_text))) == NULL) ++ realloc(text, (num_text + 2)*sizeof(png_text))) == NULL) + { + break; + } + else + { + text = tp; +- tp = &text[info_ptr->num_text]; +- info_ptr->max_text += 2; ++ tp = &text[num_text]; ++ max_text += 2; + } + } + +@@ -810,7 +847,7 @@ int WritePNG(fp, pic, ptype, w, h, rmap, + } + + tp->compression = tp->text_length > 640 ? 0 : -1; +- info_ptr->num_text++; ++ num_text++; + tp++; + } + } +@@ -834,27 +871,29 @@ int WritePNG(fp, pic, ptype, w, h, rmap, + tp->text = key; + tp->text_length = q - key; + tp->compression = tp->text_length > 750 ? 0 : -1; +- info_ptr->num_text++; ++ num_text++; + key = NULL; + } + } while (key && *key); ++ png_set_text(png_ptr, info_ptr, text, num_text); + } + else { +- info_ptr->num_text = 0; ++ png_free_data(png_ptr, info_ptr, PNG_FREE_TEXT, -1); + } + } +- info_ptr->text = text; + +- png_convert_from_time_t(&(info_ptr->mod_time), time(NULL)); +- info_ptr->valid |= PNG_INFO_tIME; ++ { ++ png_time mod_time; ++ ++ png_convert_from_time_t(&mod_time, time(NULL)); ++ png_set_tIME(png_ptr, info_ptr, &mod_time); ++ } + + png_write_end(png_ptr, info_ptr); + fflush(fp); /* just in case we core-dump before finishing... */ + + if (text) { + free(text); +- /* must do this or png_destroy_write_struct() 0.97+ will free text again: */ +- info_ptr->text = (png_textp)NULL; + if (savecmnt) + { + free(savecmnt); +@@ -886,6 +925,8 @@ int LoadPNG(fname, pinfo) + int pass; + int gray_to_rgb; + size_t commentsize; ++ png_textp text; ++ int num_text; + + fbasename = BaseName(fname); + +@@ -921,7 +962,7 @@ int LoadPNG(fname, pinfo) + FatalError("malloc failure in LoadPNG"); + } + +- if (setjmp(png_ptr->jmpbuf)) { ++ if (setjmp(png_jmpbuf(png_ptr))) { + fclose(fp); + png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp)NULL); + if (!read_anything) { +@@ -945,8 +986,8 @@ int LoadPNG(fname, pinfo) + #endif + png_read_info(png_ptr, info_ptr); + +- pinfo->w = pinfo->normw = info_ptr->width; +- pinfo->h = pinfo->normh = info_ptr->height; ++ pinfo->w = pinfo->normw = png_get_image_width(png_ptr, info_ptr); ++ pinfo->h = pinfo->normh = png_get_image_height(png_ptr, info_ptr); + if (pinfo->w <= 0 || pinfo->h <= 0) { + SetISTR(ISTR_WARNING, "%s: image dimensions out of range (%dx%d)", + fbasename, pinfo->w, pinfo->h); +@@ -957,9 +998,9 @@ int LoadPNG(fname, pinfo) + pinfo->frmType = F_PNG; + + sprintf(pinfo->fullInfo, "PNG, %d bit ", +- info_ptr->bit_depth * info_ptr->channels); ++ png_get_bit_depth(png_ptr,info_ptr) * png_get_channels(png_ptr, info_ptr)); + +- switch(info_ptr->color_type) { ++ switch(png_get_color_type(png_ptr, info_ptr)) { + case PNG_COLOR_TYPE_PALETTE: + strcat(pinfo->fullInfo, "palette color"); + break; +@@ -983,15 +1024,20 @@ int LoadPNG(fname, pinfo) + + sprintf(pinfo->fullInfo + strlen(pinfo->fullInfo), + ", %sinterlaced. (%d bytes)", +- info_ptr->interlace_type ? "" : "non-", filesize); ++ png_get_interlace_type(png_ptr, info_ptr) ? "" : "non-", filesize); + +- sprintf(pinfo->shrtInfo, "%lux%lu PNG", info_ptr->width, info_ptr->height); ++ sprintf(pinfo->shrtInfo, "%lux%lu PNG", ++ png_get_image_width(png_ptr, info_ptr), ++ png_get_image_height(png_ptr, info_ptr)); + +- if (info_ptr->bit_depth < 8) ++ if (png_get_bit_depth(png_ptr, info_ptr) < 8) + png_set_packing(png_ptr); + +- if (info_ptr->valid & PNG_INFO_gAMA) +- png_set_gamma(png_ptr, Display_Gamma, info_ptr->gamma); ++ if (png_get_valid(png_ptr, info_ptr, PNG_INFO_gAMA)) { ++ double gamma; ++ png_get_gAMA(png_ptr, info_ptr, &gamma); ++ png_set_gamma(png_ptr, Display_Gamma, gamma); ++ } + /* + *else + * png_set_gamma(png_ptr, Display_Gamma, 0.45); +@@ -1000,7 +1046,7 @@ int LoadPNG(fname, pinfo) + gray_to_rgb = 0; /* quiet a compiler warning */ + + if (have_imagebg) { +- if (info_ptr->bit_depth == 16) { ++ if (png_get_bit_depth(png_ptr, info_ptr) == 16) { + my_background.red = imagebgR; + my_background.green = imagebgG; + my_background.blue = imagebgB; +@@ -1013,8 +1059,8 @@ int LoadPNG(fname, pinfo) + } + png_set_background(png_ptr, &my_background, PNG_BACKGROUND_GAMMA_SCREEN, + 0, Display_Gamma); +- if ((info_ptr->color_type == PNG_COLOR_TYPE_GRAY_ALPHA || +- (info_ptr->color_type == PNG_COLOR_TYPE_GRAY && HAVE_tRNS)) && ++ if ((png_get_color_type(png_ptr, info_ptr) == PNG_COLOR_TYPE_GRAY_ALPHA || ++ (png_get_color_type(png_ptr, info_ptr) == PNG_COLOR_TYPE_GRAY && HAVE_tRNS)) && + (imagebgR != imagebgG || imagebgR != imagebgB)) /* i.e., colored bg */ + { + png_set_gray_to_rgb(png_ptr); +@@ -1022,8 +1068,10 @@ int LoadPNG(fname, pinfo) + gray_to_rgb = 1; + } + } else { +- if (info_ptr->valid & PNG_INFO_bKGD) { +- png_set_background(png_ptr, &info_ptr->background, ++ if (png_get_valid(png_ptr, info_ptr, PNG_INFO_bKGD)) { ++ png_color_16p background; ++ png_get_bKGD(png_ptr, info_ptr, &background); ++ png_set_background(png_ptr, background, + PNG_BACKGROUND_GAMMA_FILE, 1, 1.0); + } else { + my_background.red = my_background.green = my_background.blue = +@@ -1033,13 +1081,13 @@ int LoadPNG(fname, pinfo) + } + } + +- if (info_ptr->bit_depth == 16) ++ if (png_get_bit_depth(png_ptr, info_ptr) == 16) + png_set_strip_16(png_ptr); + +- if (info_ptr->color_type == PNG_COLOR_TYPE_GRAY || +- info_ptr->color_type == PNG_COLOR_TYPE_GRAY_ALPHA) ++ if (png_get_color_type(png_ptr, info_ptr) == PNG_COLOR_TYPE_GRAY || ++ png_get_color_type(png_ptr, info_ptr) == PNG_COLOR_TYPE_GRAY_ALPHA) + { +- if (info_ptr->bit_depth == 1) ++ if (png_get_bit_depth(png_ptr, info_ptr) == 1) + pinfo->colType = F_BWDITHER; + else + pinfo->colType = F_GREYSCALE; +@@ -1050,8 +1098,8 @@ int LoadPNG(fname, pinfo) + + png_read_update_info(png_ptr, info_ptr); + +- if (info_ptr->color_type == PNG_COLOR_TYPE_RGB || +- info_ptr->color_type == PNG_COLOR_TYPE_RGB_ALPHA || gray_to_rgb) ++ if (png_get_color_type(png_ptr, info_ptr) == PNG_COLOR_TYPE_RGB || ++ png_get_color_type(png_ptr, info_ptr) == PNG_COLOR_TYPE_RGB_ALPHA || gray_to_rgb) + { + linesize = 3 * pinfo->w; + if (linesize/3 < pinfo->w) { /* know pinfo->w > 0 (see above) */ +@@ -1065,16 +1113,20 @@ int LoadPNG(fname, pinfo) + } else { + linesize = pinfo->w; + pinfo->type = PIC8; +- if (info_ptr->color_type == PNG_COLOR_TYPE_GRAY || +- info_ptr->color_type == PNG_COLOR_TYPE_GRAY_ALPHA) { ++ if (png_get_color_type(png_ptr, info_ptr) == PNG_COLOR_TYPE_GRAY || ++ png_get_color_type(png_ptr, info_ptr) == PNG_COLOR_TYPE_GRAY_ALPHA) { + for (i = 0; i < 256; i++) + pinfo->r[i] = pinfo->g[i] = pinfo->b[i] = i; + } else { ++ png_colorp palette; ++ int num_palette; ++ ++ png_get_PLTE(png_ptr, info_ptr, &palette, &num_palette); + pinfo->colType = F_FULLCOLOR; +- for (i = 0; i < info_ptr->num_palette; i++) { +- pinfo->r[i] = info_ptr->palette[i].red; +- pinfo->g[i] = info_ptr->palette[i].green; +- pinfo->b[i] = info_ptr->palette[i].blue; ++ for (i = 0; i < num_palette; i++) { ++ pinfo->r[i] = palette[i].red; ++ pinfo->g[i] = palette[i].green; ++ pinfo->b[i] = palette[i].blue; + } + } + } +@@ -1092,7 +1144,17 @@ int LoadPNG(fname, pinfo) + png_error(png_ptr, "can't allocate space for PNG image"); + } + +- png_start_read_image(png_ptr); ++ /* ++ * In png 1.5 (or at least 1.5.1beta06) calling this after calling ++ * png_read_update_info() does nothing besides issue a misleading ++ * warning message. The png docs are not at all clear on what an ++ * application is *supposed* to do, so I'm not sure if this is a ++ * problem with xv or with libpng. However, for now I'll comment ++ * this out as according to the png source that should be harmless ++ * and we don't want to see the warning message every time someone ++ * opens a png. ++ */ ++ /*png_start_read_image(png_ptr);*/ + + for (i = 0; i < pass; i++) { + byte *p = pinfo->pic; +@@ -1106,22 +1168,23 @@ int LoadPNG(fname, pinfo) + + png_read_end(png_ptr, info_ptr); + +- if (info_ptr->num_text > 0) { ++ png_get_text(png_ptr, info_ptr, &text, &num_text); ++ if (num_text > 0) { + commentsize = 1; + +- for (i = 0; i < info_ptr->num_text; i++) +- commentsize += strlen(info_ptr->text[i].key) + 1 + +- info_ptr->text[i].text_length + 2; ++ for (i = 0; i < num_text; i++) ++ commentsize += strlen(text[i].key) + 1 + ++ text[i].text_length + 2; + + if ((pinfo->comment = malloc(commentsize)) == NULL) { + png_warning(png_ptr,"can't allocate comment string"); + } + else { + pinfo->comment[0] = '\0'; +- for (i = 0; i < info_ptr->num_text; i++) { +- strcat(pinfo->comment, info_ptr->text[i].key); ++ for (i = 0; i < num_text; i++) { ++ strcat(pinfo->comment, text[i].key); + strcat(pinfo->comment, "::"); +- strcat(pinfo->comment, info_ptr->text[i].text); ++ strcat(pinfo->comment, text[i].text); + strcat(pinfo->comment, "\n"); + } + } +@@ -1143,7 +1206,7 @@ png_xv_error(png_ptr, message) + { + SetISTR(ISTR_WARNING,"%s: libpng error: %s", fbasename, message); + +- longjmp(png_ptr->jmpbuf, 1); ++ longjmp(png_jmpbuf(png_ptr), 1); + } + + diff --git a/media-gfx/xv/xv-3.10a-r16.ebuild b/media-gfx/xv/xv-3.10a-r16.ebuild new file mode 100644 index 000000000000..d22e6f4506a7 --- /dev/null +++ b/media-gfx/xv/xv-3.10a-r16.ebuild @@ -0,0 +1,90 @@ +# Copyright 1999-2011 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: /var/cvsroot/gentoo-x86/media-gfx/xv/xv-3.10a-r16.ebuild,v 1.1 2011/08/07 09:55:19 ssuominen Exp $ + +EAPI=2 +inherit eutils flag-o-matic + +JUMBOV=20070520 +DESCRIPTION="An interactive image manipulation program that supports a wide variety of image formats" +HOMEPAGE="http://www.trilon.com/xv/index.html http://www.sonic.net/~roelofs/greg_xv.html" +SRC_URI="mirror://sourceforge/png-mng/${P}-jumbo-patches-${JUMBOV}.tar.gz ftp://ftp.cis.upenn.edu/pub/xv/${P}.tar.gz" + +LICENSE="xv" +SLOT="0" +KEYWORDS="~alpha ~amd64 ~hppa ~ia64 ~mips ~ppc ~ppc64 ~sparc ~x86 ~x86-fbsd" +IUSE="jpeg tiff png" + +DEPEND="x11-libs/libXt + jpeg? ( virtual/jpeg ) + tiff? ( >=media-libs/tiff-3.6.1-r2 ) + png? ( >=media-libs/libpng-1.2 >=sys-libs/zlib-1.1.4 )" +RDEPEND="${DEPEND}" + +src_prepare() { + # Apply the jumbo patch + epatch "${WORKDIR}"/${P}-jumbo-fix-enh-patch-${JUMBOV}.txt + + # OSX and BSD xv.h define patches + epatch "${FILESDIR}"/${P}-osx-bsd-${JUMBOV}.patch + + # OSX malloc patch + epatch "${FILESDIR}"/${P}-vdcomp-osx-${JUMBOV}.patch + + # Disable JP2K (i.e. use system JPEG libs) + epatch "${FILESDIR}"/${P}-disable-jp2k-${JUMBOV}.patch + + # Fix -wait option (do not rely on obsolete CLK_TCK) + epatch "${FILESDIR}"/${P}-fix-wait-${JUMBOV}.patch + + # Use LDFLAGS on link lines + epatch "${FILESDIR}"/${P}-add-ldflags-${JUMBOV}.patch + + epatch "${FILESDIR}"/${P}-libpng15.patch + + # Link with various image libraries depending on use flags + IMAGE_LIBS="" + use jpeg && IMAGE_LIBS="${IMAGE_LIBS} -ljpeg" + use png && IMAGE_LIBS="${IMAGE_LIBS} -lz -lpng" + use tiff && IMAGE_LIBS="${IMAGE_LIBS} -ltiff" + + sed -i \ + -e 's/\(^JPEG.*\)/#\1/g' \ + -e 's/\(^PNG.*\)/#\1/g' \ + -e 's/\(^TIFF.*\)/#\1/g' \ + -e "s/\(^LIBS = .*\)/\1${IMAGE_LIBS}/g" Makefile + + # /usr/bin/gzip => /bin/gzip + sed -i -e 's#/usr\(/bin/gzip\)#\1#g' config.h + + # Fix installation of ps docs + sed -i -e 's#$(DESTDIR)$(LIBDIR)#$(LIBDIR)#g' Makefile +} + +src_compile() { + append-flags -DUSE_GETCWD -DLINUX -DUSLEEP + use jpeg && append-flags -DDOJPEG + use png && append-flags -DDOPNG + use tiff && append-flags -DDOTIFF -DUSE_TILED_TIFF_BOTLEFT_FIX + + emake \ + CC="$(tc-getCC)" CCOPTS="${CFLAGS}" LDFLAGS="${LDFLAGS}" \ + PREFIX=/usr \ + DOCDIR=/usr/share/doc/${PF} \ + LIBDIR="${T}" || die +} + +src_install() { + dodir /usr/bin + dodir /usr/share/man/man1 + + emake \ + DESTDIR="${D}" \ + PREFIX=/usr \ + DOCDIR=/usr/share/doc/${PF} \ + LIBDIR="${T}" install || die + + dodoc CHANGELOG BUGS IDEAS + doicon "${FILESDIR}"/${PN}.png + make_desktop_entry xv "" "" "Graphics;Viewer" +} |