summaryrefslogtreecommitdiff
path: root/news
diff options
context:
space:
mode:
authorAntoine Brodin <antoine@FreeBSD.org>2014-12-25 14:02:37 +0000
committerAntoine Brodin <antoine@FreeBSD.org>2014-12-25 14:02:37 +0000
commit2a83ec45e0ec3f4e2dd51678de6dbd9394f16c36 (patch)
tree3c243f4db96a512d83880f78e59d2270d507a4a3 /news
parentWas added just for hugin which now support libpano13 (diff)
Properly support png 1.5
Obtained from: pkgsrc
Notes
Notes: svn path=/head/; revision=375559
Diffstat (limited to 'news')
-rw-r--r--news/knews/Makefile2
-rw-r--r--news/knews/files/patch-Imakefile2
-rw-r--r--news/knews/files/patch-png.c139
3 files changed, 66 insertions, 77 deletions
diff --git a/news/knews/Makefile b/news/knews/Makefile
index f5cb7b517813..1ea33e54d2dd 100644
--- a/news/knews/Makefile
+++ b/news/knews/Makefile
@@ -12,7 +12,7 @@ MAINTAINER= dinoex@FreeBSD.org
COMMENT= Threaded nntp newsreader for X
LIB_DEPENDS= libjpeg.so:${PORTSDIR}/graphics/jpeg \
- libpng15.so:${PORTSDIR}/graphics/png \
+ libpng.so:${PORTSDIR}/graphics/png \
libcompface.so:${PORTSDIR}/mail/faces
RUN_DEPENDS= newsp:${PORTSDIR}/print/mp-letter
diff --git a/news/knews/files/patch-Imakefile b/news/knews/files/patch-Imakefile
index 926c9ba08eaa..ef0e3abf8e54 100644
--- a/news/knews/files/patch-Imakefile
+++ b/news/knews/files/patch-Imakefile
@@ -5,7 +5,7 @@
#endif
-INCLUDES = -I../Widgets $(REGEXP_INCLUDES) $(KNEWS_INCLUDES)
-+INCLUDES = -I../Widgets $(REGEXP_INCLUDES) $(KNEWS_INCLUDES) -I${LOCALBASE}/include/libpng15
++INCLUDES = -I../Widgets $(REGEXP_INCLUDES) $(KNEWS_INCLUDES) -I${LOCALBASE}/include
+
LOCAL_LIBRARIES = \
diff --git a/news/knews/files/patch-png.c b/news/knews/files/patch-png.c
index 22eed8a7c1c3..75a99eecfc2f 100644
--- a/news/knews/files/patch-png.c
+++ b/news/knews/files/patch-png.c
@@ -1,147 +1,133 @@
---- src/png.c.orig 1998-11-21 15:55:13.000000000 +0100
-+++ src/png.c 2012-05-06 13:39:28.000000000 +0200
-@@ -20,6 +20,7 @@
- #else
+$NetBSD: patch-bd,v 1.3 2011/01/15 19:16:00 tron Exp $
+
+Fix build with png-1.5.
+
+--- src/png.c.orig 1998-11-21 14:55:13.000000000 +0000
++++ src/png.c 2011-01-15 19:09:09.000000000 +0000
+@@ -78,8 +78,8 @@
- #include <png.h>
-+#include <pngpriv.h>
- #include <setjmp.h>
-
- static unsigned int p_cmap_inited = False;
-@@ -76,10 +77,16 @@
- return fp;
- }
-
-+static Pixmap rep_fail(const char *e) {
-+ ArtTextAddLine(main_widgets.text, e, ascii_font->body_font,
-+ global.alert_pixel);
-+ return None;
-+}
-+
Pixmap do_png(char *data, long len, long *wp, long *hp)
{
- png_struct p_str;
- png_info p_info;
-+ png_structp png_ptr;
-+ png_infop info_ptr;
++ png_struct *p_str = NULL;
++ png_info *p_info = NULL;
Pixmap pixmap;
FILE *volatile vol_fp = NULL;
void *volatile vol_pic = NULL;
-@@ -92,13 +99,21 @@
-
- init_png_cmap();
-
-- if (!(vol_fp = dump_for_png(data, len))) {
-- ArtTextAddLine(main_widgets.text, "[knews: temp file error.]",
-- ascii_font->body_font, global.alert_pixel);
-- return None;
-+ if (!(vol_fp = dump_for_png(data, len)))
-+ return rep_fail("[knews: temp file error.]");
-+
-+ png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING,
-+ NULL, NULL, NULL);
-+ if (!png_ptr)
-+ return rep_fail("[knews: can't allocate PNG structure.]");
-+ info_ptr = png_create_info_struct(png_ptr);
-+ if (!info_ptr) {
-+ png_destroy_read_struct(&png_ptr,
-+ (png_infopp)NULL, (png_infopp)NULL);
-+ return rep_fail("[knews: can't PNG info structure.]");
+@@ -98,7 +98,11 @@
+ return None;
}
- if (setjmp(p_str.jmpbuf))
-+ if (setjmp(png_jmpbuf(png_ptr)))
++ if ((p_str = (png_struct *) png_create_read_struct(PNG_LIBPNG_VER_STRING,
++ NULL, NULL, NULL)))
++ p_info = (png_info *) png_create_info_struct(p_str);
++
++ if (p_str && p_info && setjmp(png_jmpbuf(p_str)))
ArtTextAddLine(main_widgets.text, "[knews: png error.]",
ascii_font->body_font, global.alert_pixel);
else {
-@@ -108,58 +123,55 @@
+@@ -107,59 +111,63 @@
+ int did;
unsigned int per_line = 0;
unsigned int i, j, pass;
++ png_color_16p background;
++ png_byte color_type;
++ png_colorp palette;
++ int num_palette;
++
++ png_init_io(p_str, vol_fp);
++ png_read_info(p_str, p_info);
++
++ vol_w = w = png_get_image_width(p_str, p_info);
++ vol_h = h = png_get_image_height(p_str, p_info);
++
++ if (png_get_bit_depth(p_str, p_info) == 16)
++ png_set_strip_16(p_str);
++ else if (png_get_bit_depth(p_str, p_info) < 8)
++ png_set_packing(p_str);
- png_read_init(&p_str);
- png_info_init(&p_info);
-
- png_init_io(&p_str, vol_fp);
- png_read_info(&p_str, &p_info);
-+ png_init_io(png_ptr, vol_fp);
-+ png_read_info(png_ptr, info_ptr);
-
+-
- vol_w = w = p_info.width;
- vol_h = h = p_info.height;
-+ vol_w = w = info_ptr->width;
-+ vol_h = h = info_ptr->height;
-
+-
- if (p_info.bit_depth == 16)
- png_set_strip_16(&p_str);
- else if (p_info.bit_depth < 8)
- png_set_packing(&p_str);
-+ if (info_ptr->bit_depth == 16)
-+ png_set_strip_16(png_ptr);
-+ else if (info_ptr->bit_depth < 8)
-+ png_set_packing(png_ptr);
-
+-
- if (p_info.valid & PNG_INFO_bKGD)
- png_set_background(&p_str, &p_info.background,
-+ if (info_ptr->valid & PNG_INFO_bKGD)
-+ png_set_background(png_ptr, &info_ptr->background,
++ if (png_get_bKGD(p_str, p_info, &background) & PNG_INFO_bKGD)
++ png_set_background(p_str, background,
PNG_BACKGROUND_GAMMA_FILE, True, 1.0);
else {
static png_color_16 bg = {0, };
- png_set_background(&p_str, &bg,
-+ png_set_background(png_ptr, &bg,
++ png_set_background(p_str, &bg,
PNG_BACKGROUND_GAMMA_SCREEN, False, 1.0);
}
per_line = w;
- if (!(p_info.color_type & PNG_COLOR_MASK_COLOR)) { /* grey image */
-+ if (!(info_ptr->color_type & PNG_COLOR_MASK_COLOR)) { /* grey image */
++ color_type = png_get_color_type(p_str, p_info);
++ if (!(color_type & PNG_COLOR_MASK_COLOR)) { /* grey image */
grey = True;
- png_set_expand(&p_str);
-+ png_set_expand(png_ptr);
++ png_set_expand(p_str);
} else if (!p_cmap) { /* true color visual */
- if (p_info.color_type == PNG_COLOR_TYPE_PALETTE)
- png_set_expand(&p_str);
-+ if (info_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
-+ png_set_expand(png_ptr);
++ if (color_type == PNG_COLOR_TYPE_PALETTE)
++ png_set_expand(p_str);
per_line *= 3;
- } else if (p_info.color_type & PNG_COLOR_MASK_PALETTE) {
-+ } else if (info_ptr->color_type & PNG_COLOR_MASK_PALETTE) {
++ } else if (color_type & PNG_COLOR_MASK_PALETTE &&
++ png_get_PLTE(p_str, p_info,
++ &palette, &num_palette) & PNG_INFO_PLTE) {
CMAP_ENTRY *pal;
int i, pn;
- pn = p_info.num_palette;
-+ pn = info_ptr->num_palette;
++ pn = num_palette;
pal = (CMAP_ENTRY *)XtMalloc(pn * sizeof *pal);
for (i = 0 ; i < pn ; i++) {
- pal[i].r = p_info.palette[i].red;
- pal[i].g = p_info.palette[i].green;
- pal[i].b = p_info.palette[i].blue;
-+ pal[i].r = info_ptr->palette[i].red;
-+ pal[i].g = info_ptr->palette[i].green;
-+ pal[i].b = info_ptr->palette[i].blue;
++ pal[i].r = palette[i].red;
++ pal[i].g = palette[i].green;
++ pal[i].b = palette[i].blue;
}
vol_pal = pal;
vol_pn = pn;
} else {
- png_set_dither(&p_str, p_cmap, cmap_size,
-+ png_set_quantize(png_ptr, p_cmap, cmap_size,
- cmap_size, NULL, True);
+- cmap_size, NULL, True);
++ png_set_quantize(p_str, p_cmap, cmap_size,
++ cmap_size, NULL, True);
}
- pass = png_set_interlace_handling(&p_str);
- png_start_read_image(&p_str);
-+ pass = png_set_interlace_handling(png_ptr);
-+ png_start_read_image(png_ptr);
++ pass = png_set_interlace_handling(p_str);
++ png_start_read_image(p_str);
vol_pic = pic = (unsigned char *)XtMalloc(h * per_line);
-@@ -167,14 +179,14 @@
+@@ -167,14 +175,14 @@
for (i = 0 ; i < pass ; i++) {
row = pic;
for (j = 0 ; j < h ; j++) {
- png_read_row(&p_str, NULL, row);
-+ png_read_row(png_ptr, NULL, row);
++ png_read_row(p_str, NULL, row);
if (!did)
vol_did = did = True;
row += per_line;
@@ -149,16 +135,19 @@
}
- png_read_end(&p_str, NULL);
-+ png_read_end(png_ptr, NULL);
++ png_read_end(p_str, NULL);
}
if (!vol_did)
-@@ -204,7 +216,7 @@
+@@ -204,7 +212,10 @@
}
}
- png_read_destroy(&p_str, &p_info, NULL);
-+ png_read_destroy(png_ptr, info_ptr, NULL);
++ if (p_info)
++ png_destroy_read_struct(&p_str, &p_info, NULL);
++ else
++ png_destroy_read_struct(&p_str, NULL, NULL);
fclose((FILE *)vol_fp);
XtFree((char *)vol_pic);
XtFree((char *)vol_pal);