diff options
author | tron <tron@pkgsrc.org> | 2011-01-14 21:51:58 +0000 |
---|---|---|
committer | tron <tron@pkgsrc.org> | 2011-01-14 21:51:58 +0000 |
commit | 4b6389e26d01dc973655d1c7b4f3a0aef50adf97 (patch) | |
tree | 5ab93bb1cb7c8fbb37800d1567ecb358a9b6e167 /graphics/netpbm/patches/patch-ac | |
parent | f6eca4d5299211b953f27d5611c2ba4aa38f1e47 (diff) | |
download | pkgsrc-4b6389e26d01dc973655d1c7b4f3a0aef50adf97.tar.gz |
Get "pnmtopng" to build with new "png" package. "pngtopnm" still fails.
Diffstat (limited to 'graphics/netpbm/patches/patch-ac')
-rw-r--r-- | graphics/netpbm/patches/patch-ac | 387 |
1 files changed, 366 insertions, 21 deletions
diff --git a/graphics/netpbm/patches/patch-ac b/graphics/netpbm/patches/patch-ac index 1946546c99a..18aa0f883f0 100644 --- a/graphics/netpbm/patches/patch-ac +++ b/graphics/netpbm/patches/patch-ac @@ -1,8 +1,20 @@ -$NetBSD: patch-ac,v 1.19 2010/06/13 22:44:39 wiz Exp $ +$NetBSD: patch-ac,v 1.20 2011/01/14 21:51:59 tron Exp $ ---- converter/other/pnmtopng.c.orig 2009-09-03 15:34:36.000000000 +0000 -+++ converter/other/pnmtopng.c -@@ -69,11 +69,6 @@ +Fix build with png-1.5. + +--- converter/other/pnmtopng.c.orig 2010-07-10 02:38:01.000000000 +0100 ++++ converter/other/pnmtopng.c 2011-01-14 21:49:17.000000000 +0000 +@@ -61,7 +61,8 @@ + #include <assert.h> + #include <string.h> /* strcat() */ + #include <limits.h> +-#include <png.h> /* includes zlib.h and setjmp.h */ ++#include <png.h> /* includes setjmp.h */ ++#include <zlib.h> + #include "pnm.h" + #include "pngtxt.h" + #include "shhopt.h" +@@ -69,11 +70,6 @@ #include "nstring.h" #include "version.h" @@ -14,36 +26,369 @@ $NetBSD: patch-ac,v 1.19 2010/06/13 22:44:39 wiz Exp $ struct zlibCompression { -@@ -2611,7 +2606,7 @@ convertpnm(struct cmdlineInfo const cmdl - info_ptr->num_palette = palette_size; +@@ -2079,6 +2075,7 @@ + gray * const alpha_mask, + colorhash_table const cht, + coloralphahash_table const caht, ++ png_struct * const png_ptr, + png_info * const info_ptr, + xelval const png_maxval, + unsigned int const depth) { +@@ -2091,20 +2088,20 @@ + xel p_png; + xel const p = xelrow[col]; + PPM_DEPTH(p_png, p, maxval, png_maxval); +- 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 (depth == 16) + *pp++ = PNM_GET1(p_png) >> 8; + *pp++ = PNM_GET1(p_png) & 0xff; +- } else if (info_ptr->color_type == PNG_COLOR_TYPE_PALETTE) { ++ } else if (png_get_color_type(png_ptr, info_ptr) == PNG_COLOR_TYPE_PALETTE) { + unsigned int paletteIndex; + if (alpha) + paletteIndex = lookupColorAlpha(caht, &p, &alpha_mask[col]); + else + paletteIndex = ppm_lookupcolor(cht, &p); + *pp++ = paletteIndex; +- } else if (info_ptr->color_type == PNG_COLOR_TYPE_RGB || +- info_ptr->color_type == PNG_COLOR_TYPE_RGB_ALPHA) { ++ } else 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) { + if (depth == 16) + *pp++ = PPM_GETR(p_png) >> 8; + *pp++ = PPM_GETR(p_png) & 0xff; +@@ -2117,7 +2114,7 @@ + } else + pm_error("INTERNAL ERROR: undefined color_type"); + +- if (info_ptr->color_type & PNG_COLOR_MASK_ALPHA) { ++ if (png_get_color_type(png_ptr, info_ptr) & PNG_COLOR_MASK_ALPHA) { + int const png_alphaval = (int) + alpha_mask[col] * (float) png_maxval / maxval + 0.5; + if (depth == 16) +@@ -2174,7 +2171,7 @@ + + makePngLine(line, xelrow, cols, maxval, + alpha, alpha ? alpha_mask[row] : NULL, +- cht, caht, info_ptr, png_maxval, depth); ++ cht, caht, png_ptr, info_ptr, png_maxval, depth); + + png_write_row(png_ptr, line); + } +@@ -2186,12 +2183,12 @@ + + static void + doGamaChunk(struct cmdlineInfo const cmdline, ++ png_struct * const png_ptr, + png_info * const info_ptr) { + + if (cmdline.gammaSpec) { + /* gAMA chunk */ +- info_ptr->valid |= PNG_INFO_gAMA; +- info_ptr->gamma = cmdline.gamma; ++ png_set_gAMA(png_ptr, info_ptr, cmdline.gamma); + } + } + +@@ -2199,20 +2196,15 @@ + + static void + doChrmChunk(struct cmdlineInfo const cmdline, ++ png_struct * const png_ptr, + png_info * const info_ptr) { + + if (cmdline.rgbSpec) { + /* cHRM chunk */ +- info_ptr->valid |= PNG_INFO_cHRM; +- +- info_ptr->x_white = cmdline.rgb.wx; +- info_ptr->y_white = cmdline.rgb.wy; +- info_ptr->x_red = cmdline.rgb.rx; +- info_ptr->y_red = cmdline.rgb.ry; +- info_ptr->x_green = cmdline.rgb.gx; +- info_ptr->y_green = cmdline.rgb.gy; +- info_ptr->x_blue = cmdline.rgb.bx; +- info_ptr->y_blue = cmdline.rgb.by; ++ ++ png_set_cHRM (png_ptr, info_ptr, cmdline.rgb.wx, cmdline.rgb.wy, ++ cmdline.rgb.rx, cmdline.rgb.ry, cmdline.rgb.gx, ++ cmdline.rgb.gy, cmdline.rgb.bx, cmdline.rgb.by); + } + } + +@@ -2220,15 +2212,12 @@ + + static void + doPhysChunk(struct cmdlineInfo const cmdline, ++ png_struct * const png_ptr, + png_info * const info_ptr) { + + if (cmdline.sizeSpec) { + /* pHYS chunk */ +- info_ptr->valid |= PNG_INFO_pHYs; +- +- info_ptr->x_pixels_per_unit = cmdline.size.x; +- info_ptr->y_pixels_per_unit = cmdline.size.y; +- info_ptr->phys_unit_type = cmdline.size.unit; ++ png_set_pHYs(png_ptr, info_ptr, cmdline.size.x, cmdline.size.y, cmdline.size.unit); + } + } + +@@ -2237,26 +2226,28 @@ + + static void + doTimeChunk(struct cmdlineInfo const cmdline, ++ png_struct * const png_ptr, + png_info * const info_ptr) { + + if (cmdline.modtimeSpec) { + /* tIME chunk */ +- info_ptr->valid |= PNG_INFO_tIME; +- +- png_convert_from_time_t(&info_ptr->mod_time, cmdline.modtime); ++ png_timep ptime; ++ png_convert_from_time_t(ptime, cmdline.modtime); ++ png_set_tIME(png_ptr, info_ptr, ptime); + } + } + + + + static void +-doSbitChunk(png_info * const pngInfoP, ++doSbitChunk(png_struct * const pngP, ++ png_info * const pngInfoP, + xelval const pngMaxval, + xelval const maxval, + bool const alpha, + xelval const alphaMaxval) { + +- if (pngInfoP->color_type != PNG_COLOR_TYPE_PALETTE && ++ if (png_get_color_type(pngP, pngInfoP) != PNG_COLOR_TYPE_PALETTE && + (pngMaxval > maxval || (alpha && pngMaxval > alphaMaxval))) { + + /* We're writing in a bit depth that doesn't match the maxval +@@ -2275,26 +2266,28 @@ + sBIT chunk. + */ + +- pngInfoP->valid |= PNG_INFO_sBIT; +- + { + int const sbitval = pm_maxvaltobits(MIN(maxval, pngMaxval)); ++ png_color_8 sbit; + +- if (pngInfoP->color_type & PNG_COLOR_MASK_COLOR) { +- pngInfoP->sig_bit.red = sbitval; +- pngInfoP->sig_bit.green = sbitval; +- pngInfoP->sig_bit.blue = sbitval; ++ (void)memset(&sbit, 0, sizeof(sbit)); ++ if (png_get_color_type(pngP, pngInfoP) & PNG_COLOR_MASK_COLOR) { ++ sbit.red = sbitval; ++ sbit.green = sbitval; ++ sbit.blue = sbitval; + } else +- pngInfoP->sig_bit.gray = sbitval; ++ sbit.gray = sbitval; + + if (verbose) + pm_message("Writing sBIT chunk with bits = %d", sbitval); +- } +- if (pngInfoP->color_type & PNG_COLOR_MASK_ALPHA) { +- pngInfoP->sig_bit.alpha = +- pm_maxvaltobits(MIN(alphaMaxval, pngMaxval)); +- if (verbose) +- pm_message(" alpha bits = %d", pngInfoP->sig_bit.alpha); ++ ++ if (png_get_color_type(pngP, pngInfoP) & PNG_COLOR_MASK_ALPHA) { ++ sbit.alpha = ++ pm_maxvaltobits(MIN(alphaMaxval, pngMaxval)); ++ if (verbose) ++ pm_message(" alpha bits = %d", sbit.alpha); ++ } ++ png_set_sBIT(pngP, pngInfoP, &sbit); + } + } + } +@@ -2391,6 +2384,8 @@ + xelval maxmaxval; + gray ** alpha_mask; + ++ int color_type; ++ + /* these guys are initialized to quiet compiler warnings: */ + maxmaxval = 255; + alpha_mask = NULL; +@@ -2576,43 +2571,42 @@ + pm_error ("setjmp returns error condition (2)"); + } + +- png_init_io (png_ptr, stdout); +- info_ptr->width = cols; +- info_ptr->height = rows; +- info_ptr->bit_depth = depth; +- + if (colorMapped) +- info_ptr->color_type = PNG_COLOR_TYPE_PALETTE; +- else if (pnm_type == PPM_TYPE) +- info_ptr->color_type = PNG_COLOR_TYPE_RGB; +- else +- info_ptr->color_type = PNG_COLOR_TYPE_GRAY; ++ color_type = PNG_COLOR_TYPE_PALETTE; ++ else if (pnm_type == PPM_TYPE) { ++ if (alpha) ++ color_type = PNG_COLOR_TYPE_RGB_ALPHA; ++ else ++ color_type = PNG_COLOR_TYPE_RGB; ++ } else { ++ if (alpha) ++ color_type = PNG_COLOR_TYPE_GRAY_ALPHA; ++ else ++ color_type = PNG_COLOR_TYPE_GRAY; ++ } + +- if (alpha && info_ptr->color_type != PNG_COLOR_TYPE_PALETTE) +- info_ptr->color_type |= PNG_COLOR_MASK_ALPHA; ++ png_set_IHDR(png_ptr, info_ptr, cols, rows, depth, PNG_COLOR_TYPE_PALETTE, 0, 0, 0); ++ png_init_io (png_ptr, stdout); + +- info_ptr->interlace_type = cmdline.interlace; ++ if (cmdline.interlace) ++ png_set_interlace_handling(png_ptr); + +- doGamaChunk(cmdline, info_ptr); ++ doGamaChunk(cmdline, png_ptr, info_ptr); + +- doChrmChunk(cmdline, info_ptr); ++ doChrmChunk(cmdline, png_ptr, info_ptr); + +- doPhysChunk(cmdline, info_ptr); ++ doPhysChunk(cmdline, png_ptr, info_ptr); + +- if (info_ptr->color_type == PNG_COLOR_TYPE_PALETTE) { ++ if (png_get_color_type(png_ptr, info_ptr) == PNG_COLOR_TYPE_PALETTE) { + + /* creating PNG palette (PLTE and tRNS chunks) */ + + createPngPalette(palette_pnm, palette_size, maxval, + trans_pnm, trans_size, alpha_maxval, + palette, trans); +- info_ptr->valid |= PNG_INFO_PLTE; +- info_ptr->palette = palette; +- info_ptr->num_palette = palette_size; ++ png_set_PLTE(png_ptr, info_ptr, palette, palette_size); if (trans_size > 0) { - info_ptr->valid |= PNG_INFO_tRNS; +- info_ptr->valid |= PNG_INFO_tRNS; - info_ptr->trans = trans; -+ info_ptr->trans_alpha = trans; - info_ptr->num_trans = trans_size; /* omit opaque values */ +- info_ptr->num_trans = trans_size; /* omit opaque values */ ++ png_set_tRNS(png_ptr, info_ptr, trans, trans_size, NULL); } /* creating hIST chunk */ -@@ -2648,7 +2643,7 @@ convertpnm(struct cmdlineInfo const cmdl - info_ptr->color_type == PNG_COLOR_TYPE_RGB) { + if (cmdline.hist) { +@@ -2638,18 +2632,17 @@ + + ppm_freecolorhash(cht); + +- info_ptr->valid |= PNG_INFO_hIST; +- info_ptr->hist = histogram; ++ png_set_hIST(png_ptr, info_ptr, histogram); + if (verbose) + pm_message("histogram created"); + } + } else { /* color_type != PNG_COLOR_TYPE_PALETTE */ +- if (info_ptr->color_type == PNG_COLOR_TYPE_GRAY || +- info_ptr->color_type == PNG_COLOR_TYPE_RGB) { ++ if (png_get_color_type(png_ptr, info_ptr) == PNG_COLOR_TYPE_GRAY || ++ png_get_color_type(png_ptr, info_ptr) == PNG_COLOR_TYPE_RGB) { if (transparent > 0) { - info_ptr->valid |= PNG_INFO_tRNS; +- info_ptr->valid |= PNG_INFO_tRNS; - info_ptr->trans_values = -+ info_ptr->trans_color = - xelToPngColor_16(transcolor, maxval, png_maxval); +- xelToPngColor_16(transcolor, maxval, png_maxval); ++ png_color_16 trans_color = xelToPngColor_16(transcolor, maxval, png_maxval); ++ png_set_tRNS(png_ptr, info_ptr, NULL, 0, &trans_color); ++ } } else { -@@ -2660,10 +2655,10 @@ convertpnm(struct cmdlineInfo const cmdl - if (info_ptr->valid && PNG_INFO_tRNS) + /* This is PNG_COLOR_MASK_ALPHA. Transparency will be handled +@@ -2657,43 +2650,43 @@ + */ + } + if (verbose) { +- if (info_ptr->valid && PNG_INFO_tRNS) ++ if (png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS)) { ++ png_color_16p trans_color; ++ ++ png_get_tRNS(png_ptr, info_ptr, NULL, NULL, &trans_color); pm_message("Transparent color {gray, red, green, blue} = " "{%d, %d, %d, %d}", - info_ptr->trans_values.gray, - info_ptr->trans_values.red, - info_ptr->trans_values.green, - info_ptr->trans_values.blue); -+ info_ptr->trans_color.gray, -+ info_ptr->trans_color.red, -+ info_ptr->trans_color.green, -+ info_ptr->trans_color.blue); - else +- else ++ trans_color->gray, ++ trans_color->red, ++ trans_color->green, ++ trans_color->blue); ++ } else pm_message("No transparent color"); } + } + + /* bKGD chunk */ + if (cmdline.background) { +- info_ptr->valid |= PNG_INFO_bKGD; +- if (info_ptr->color_type == PNG_COLOR_TYPE_PALETTE) { +- info_ptr->background.index = background_index; +- } else { +- info_ptr->background = +- xelToPngColor_16(backcolor, maxval, png_maxval); ++ if (png_get_color_type(png_ptr, info_ptr) != PNG_COLOR_TYPE_PALETTE) { ++ png_color_16 background = xelToPngColor_16(backcolor, maxval, png_maxval); ++ png_set_bKGD(png_ptr, info_ptr, &background); + if (verbose) + pm_message("Writing bKGD chunk with background color " + " {gray, red, green, blue} = {%d, %d, %d, %d}", +- info_ptr->background.gray, +- info_ptr->background.red, +- info_ptr->background.green, +- info_ptr->background.blue ); ++ background.gray, ++ background.red, ++ background.green, ++ background.blue ); + } + } + +- doSbitChunk(info_ptr, png_maxval, maxval, alpha, alpha_maxval); ++ doSbitChunk(png_ptr, info_ptr, png_maxval, maxval, alpha, alpha_maxval); + + /* tEXT and zTXT chunks */ + if (cmdline.text || cmdline.ztxt) +- pnmpng_read_text(info_ptr, tfp, !!cmdline.ztxt, cmdline.verbose); ++ pnmpng_read_text(png_ptr, info_ptr, tfp, !!cmdline.ztxt, cmdline.verbose); + +- doTimeChunk(cmdline, info_ptr); ++ doTimeChunk(cmdline, png_ptr, info_ptr); + + if (cmdline.filterSet != 0) + png_set_filter(png_ptr, 0, cmdline.filterSet); +@@ -2703,6 +2696,7 @@ + /* write the png-info struct */ + png_write_info(png_ptr, info_ptr); + ++#if 0 + if (cmdline.text || cmdline.ztxt) + /* prevent from being written twice with png_write_end */ + info_ptr->num_text = 0; +@@ -2710,6 +2704,7 @@ + if (cmdline.modtime) + /* prevent from being written twice with png_write_end */ + info_ptr->valid &= ~PNG_INFO_tIME; ++#endif + + /* let libpng take care of, e.g., bit-depth conversions */ + png_set_packing (png_ptr); |