summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libharu-2.2.1-png15.patch403
-rw-r--r--libharu.spec29
2 files changed, 423 insertions, 9 deletions
diff --git a/libharu-2.2.1-png15.patch b/libharu-2.2.1-png15.patch
new file mode 100644
index 0000000..993d774
--- /dev/null
+++ b/libharu-2.2.1-png15.patch
@@ -0,0 +1,403 @@
+diff -up libharu-2.2.1/src/hpdf_image_png.c.png15 libharu-2.2.1/src/hpdf_image_png.c
+--- libharu-2.2.1/src/hpdf_image_png.c.png15 2012-07-31 15:15:22.369386483 -0400
++++ libharu-2.2.1/src/hpdf_image_png.c 2012-07-31 15:54:23.645540431 -0400
+@@ -110,13 +110,22 @@ ReadPngData_Interlaced (HPDF_Dict im
+ {
+ png_uint_32 len = png_get_rowbytes(png_ptr, info_ptr);
+ png_bytep* row_pointers = HPDF_GetMem (image->mmgr,
++#if (PNG_LIBPNG_VER_MAJOR >= 1 && PNG_LIBPNG_VER_MINOR >= 4) && defined(PNG_EASY_ACCESS_SUPPORTED)
++ png_get_image_height(png_ptr, info_ptr) * sizeof (png_bytep));
++#else
+ info_ptr->height * sizeof (png_bytep));
++#endif
+
+ if (row_pointers) {
+ HPDF_UINT i;
+
++#if (PNG_LIBPNG_VER_MAJOR >= 1 && PNG_LIBPNG_VER_MINOR >= 4) && defined(PNG_EASY_ACCESS_SUPPORTED)
++ HPDF_MemSet (row_pointers, 0, png_get_image_height(png_ptr, info_ptr) * sizeof (png_bytep));
++ for (i = 0; i < (HPDF_UINT)(png_get_image_height(png_ptr, info_ptr)); i++) {
++#else
+ HPDF_MemSet (row_pointers, 0, info_ptr->height * sizeof (png_bytep));
+ for (i = 0; i < (HPDF_UINT)info_ptr->height; i++) {
++#endif
+ row_pointers[i] = HPDF_GetMem (image->mmgr, len);
+
+ if (image->error->error_no != HPDF_OK)
+@@ -126,7 +135,11 @@ ReadPngData_Interlaced (HPDF_Dict im
+ if (image->error->error_no == HPDF_OK) {
+ png_read_image(png_ptr, row_pointers);
+ if (image->error->error_no == HPDF_OK) { /* add this line */
++#if (PNG_LIBPNG_VER_MAJOR >= 1 && PNG_LIBPNG_VER_MINOR >= 4) && defined(PNG_EASY_ACCESS_SUPPORTED)
++ for (i = 0; i < (HPDF_UINT)(png_get_image_height(png_ptr, info_ptr)); i++) {
++#else
+ for (i = 0; i < (HPDF_UINT)info_ptr->height; i++) {
++#endif
+ if (HPDF_Stream_Write (image->stream, row_pointers[i], len) !=
+ HPDF_OK)
+ break;
+@@ -135,7 +148,11 @@ ReadPngData_Interlaced (HPDF_Dict im
+ }
+
+ /* clean up */
++#if (PNG_LIBPNG_VER_MAJOR >= 1 && PNG_LIBPNG_VER_MINOR >= 4) && defined(PNG_EASY_ACCESS_SUPPORTED)
++ for (i = 0; i < (HPDF_UINT)(png_get_image_height(png_ptr, info_ptr)); i++) {
++#else
+ for (i = 0; i < (HPDF_UINT)info_ptr->height; i++) {
++#endif
+ HPDF_FreeMem (image->mmgr, row_pointers[i]);
+ }
+
+@@ -156,7 +173,11 @@ ReadPngData (HPDF_Dict image,
+ if (buf_ptr) {
+ HPDF_UINT i;
+
++#if (PNG_LIBPNG_VER_MAJOR >= 1 && PNG_LIBPNG_VER_MINOR >= 4) && defined(PNG_EASY_ACCESS_SUPPORTED)
++ for (i = 0; i < (HPDF_UINT)(png_get_image_height(png_ptr, info_ptr)); i++) {
++#else
+ for (i = 0; i < (HPDF_UINT)info_ptr->height; i++) {
++#endif
+ png_read_rows(png_ptr, (png_byte**)&buf_ptr, NULL, 1);
+ if (image->error->error_no != HPDF_OK)
+ break;
+@@ -183,13 +204,21 @@ ReadTransparentPaletteData (HPDF_Dict
+ HPDF_UINT i, j;
+ png_bytep *row_ptr;
+
++#if (PNG_LIBPNG_VER_MAJOR >= 1 && PNG_LIBPNG_VER_MINOR >= 4) && defined(PNG_EASY_ACCESS_SUPPORTED)
++ row_ptr = HPDF_GetMem (image->mmgr, png_get_image_height(png_ptr, info_ptr) * sizeof(png_bytep));
++#else
+ row_ptr = HPDF_GetMem (image->mmgr, info_ptr->height * sizeof(png_bytep));
++#endif
+ if (!row_ptr) {
+ return HPDF_FAILD_TO_ALLOC_MEM;
+ } else {
+ png_uint_32 len = png_get_rowbytes(png_ptr, info_ptr);
+
++#if (PNG_LIBPNG_VER_MAJOR >= 1 && PNG_LIBPNG_VER_MINOR >= 4) && defined(PNG_EASY_ACCESS_SUPPORTED)
++ for (i = 0; i < (HPDF_UINT)(png_get_image_height(png_ptr, info_ptr)); i++) {
++#else
+ for (i = 0; i < (HPDF_UINT)info_ptr->height; i++) {
++#endif
+ row_ptr[i] = HPDF_GetMem(image->mmgr, len);
+ if (!row_ptr[i]) {
+ for (; i >= 0; i--) {
+@@ -207,19 +236,32 @@ ReadTransparentPaletteData (HPDF_Dict
+ goto Error;
+ }
+
++#if (PNG_LIBPNG_VER_MAJOR >= 1 && PNG_LIBPNG_VER_MINOR >= 4) && defined(PNG_EASY_ACCESS_SUPPORTED)
++ for (j = 0; j < png_get_image_height(png_ptr, info_ptr); j++) {
++ for (i = 0; i < png_get_image_width(png_ptr, info_ptr); i++) {
++ smask_data[png_get_image_width(png_ptr, info_ptr) * j + i] = (row_ptr[j][i] < num_trans) ? trans[row_ptr[j][i]] : 0xFF;
++ }
++
++ if (HPDF_Stream_Write (image->stream, row_ptr[j], png_get_image_width(png_ptr, info_ptr)) != HPDF_OK) {
++#else
+ for (j = 0; j < info_ptr->height; j++) {
+ for (i = 0; i < info_ptr->width; i++) {
+ smask_data[info_ptr->width * j + i] = (row_ptr[j][i] < num_trans) ? trans[row_ptr[j][i]] : 0xFF;
+ }
+
+ if (HPDF_Stream_Write (image->stream, row_ptr[j], info_ptr->width) != HPDF_OK) {
++#endif
+ ret = HPDF_FILE_IO_ERROR;
+ goto Error;
+ }
+ }
+
+ Error:
++#if (PNG_LIBPNG_VER_MAJOR >= 1 && PNG_LIBPNG_VER_MINOR >= 4) && defined(PNG_EASY_ACCESS_SUPPORTED)
++ for (i = 0; i < (HPDF_UINT)(png_get_image_height(png_ptr, info_ptr)); i++) {
++#else
+ for (i = 0; i < (HPDF_UINT)info_ptr->height; i++) {
++#endif
+ HPDF_FreeMem (image->mmgr, row_ptr[i]);
+ }
+
+@@ -245,13 +287,21 @@ ReadTransparentPngData (HPDF_Dict im
+ return HPDF_INVALID_PNG_IMAGE;
+ }
+
++#if (PNG_LIBPNG_VER_MAJOR >= 1 && PNG_LIBPNG_VER_MINOR >= 4) && defined(PNG_EASY_ACCESS_SUPPORTED)
++ row_ptr = HPDF_GetMem (image->mmgr, png_get_image_height(png_ptr, info_ptr) * sizeof(png_bytep));
++#else
+ row_ptr = HPDF_GetMem (image->mmgr, info_ptr->height * sizeof(png_bytep));
++#endif
+ if (!row_ptr) {
+ return HPDF_FAILD_TO_ALLOC_MEM;
+ } else {
+ png_uint_32 len = png_get_rowbytes(png_ptr, info_ptr);
+
++#if (PNG_LIBPNG_VER_MAJOR >= 1 && PNG_LIBPNG_VER_MINOR >= 4) && defined(PNG_EASY_ACCESS_SUPPORTED)
++ for (i = 0; i < (HPDF_UINT)(png_get_image_height(png_ptr, info_ptr)); i++) {
++#else
+ for (i = 0; i < (HPDF_UINT)info_ptr->height; i++) {
++#endif
+ row_ptr[i] = HPDF_GetMem(image->mmgr, len);
+ if (!row_ptr[i]) {
+ for (; i >= 0; i--) {
+@@ -271,12 +321,21 @@ ReadTransparentPngData (HPDF_Dict im
+
+ switch (color_type) {
+ case PNG_COLOR_TYPE_RGB_ALPHA:
++#if (PNG_LIBPNG_VER_MAJOR >= 1 && PNG_LIBPNG_VER_MINOR >= 4) && defined(PNG_EASY_ACCESS_SUPPORTED)
++ row_len = 3 * png_get_image_width(png_ptr, info_ptr) * sizeof(png_byte);
++ for (j = 0; j < png_get_image_height(png_ptr, info_ptr); j++) {
++ for (i = 0; i < png_get_image_width(png_ptr, info_ptr); i++) {
++ row = row_ptr[j];
++ memmove(row + (3 * i), row + (4*i), 3);
++ smask_data[png_get_image_width(png_ptr, info_ptr) * j + i] = row[4 * i + 3];
++#else
+ row_len = 3 * info_ptr->width * sizeof(png_byte);
+ for (j = 0; j < info_ptr->height; j++) {
+ for (i = 0; i < info_ptr->width; i++) {
+ row = row_ptr[j];
+ memmove(row + (3 * i), row + (4*i), 3);
+ smask_data[info_ptr->width * j + i] = row[4 * i + 3];
++#endif
+ }
+
+ if (HPDF_Stream_Write (image->stream, row, row_len) != HPDF_OK) {
+@@ -286,12 +345,21 @@ ReadTransparentPngData (HPDF_Dict im
+ }
+ break;
+ case PNG_COLOR_TYPE_GRAY_ALPHA:
++#if (PNG_LIBPNG_VER_MAJOR >= 1 && PNG_LIBPNG_VER_MINOR >= 4) && defined(PNG_EASY_ACCESS_SUPPORTED)
++ row_len = png_get_image_width(png_ptr, info_ptr) * sizeof(png_byte);
++ for (j = 0; j < png_get_image_height(png_ptr, info_ptr); j++) {
++ for (i = 0; i < png_get_image_width(png_ptr, info_ptr); i++) {
++ row = row_ptr[j];
++ row[i] = row[2 * i];
++ smask_data[png_get_image_width(png_ptr, info_ptr) * j + i] = row[2 * i + 1];
++#else
+ row_len = info_ptr->width * sizeof(png_byte);
+ for (j = 0; j < info_ptr->height; j++) {
+ for (i = 0; i < info_ptr->width; i++) {
+ row = row_ptr[j];
+ row[i] = row[2 * i];
+ smask_data[info_ptr->width * j + i] = row[2 * i + 1];
++#endif
+ }
+
+ if (HPDF_Stream_Write (image->stream, row, row_len) != HPDF_OK) {
+@@ -306,7 +374,11 @@ ReadTransparentPngData (HPDF_Dict im
+ }
+
+ Error:
++#if (PNG_LIBPNG_VER_MAJOR >= 1 && PNG_LIBPNG_VER_MINOR >= 4) && defined(PNG_EASY_ACCESS_SUPPORTED)
++ for (i = 0; i < (HPDF_UINT)(png_get_image_height(png_ptr, info_ptr)); i++) {
++#else
+ for (i = 0; i < (HPDF_UINT)info_ptr->height; i++) {
++#endif
+ HPDF_FreeMem (image->mmgr, row_ptr[i]);
+ }
+
+@@ -448,7 +520,11 @@ LoadPngData (HPDF_Dict image,
+ }
+
+ /* 16bit images are not supported. */
++#if (PNG_LIBPNG_VER_MAJOR >= 1 && PNG_LIBPNG_VER_MINOR >= 4) && defined(PNG_EASY_ACCESS_SUPPORTED)
++ if (png_get_bit_depth(png_ptr, info_ptr) == 16) {
++#else
+ if (info_ptr->bit_depth == 16) {
++#endif
+ png_set_strip_16(png_ptr);
+ }
+
+@@ -458,7 +534,11 @@ LoadPngData (HPDF_Dict image,
+ }
+
+ /* check palette-based images for transparent areas and load them immediately if found */
++#if (PNG_LIBPNG_VER_MAJOR >= 1 && PNG_LIBPNG_VER_MINOR >= 4) && defined(PNG_EASY_ACCESS_SUPPORTED)
++ if (xref && PNG_COLOR_TYPE_PALETTE & png_get_color_type(png_ptr, info_ptr)) {
++#else
+ if (xref && PNG_COLOR_TYPE_PALETTE & info_ptr->color_type) {
++#endif
+ png_bytep trans;
+ int num_trans;
+ HPDF_Dict smask;
+@@ -478,10 +558,20 @@ LoadPngData (HPDF_Dict image,
+ smask->header.obj_class |= HPDF_OSUBCLASS_XOBJECT;
+ ret = HPDF_Dict_AddName (smask, "Type", "XObject");
+ ret += HPDF_Dict_AddName (smask, "Subtype", "Image");
++
++#if (PNG_LIBPNG_VER_MAJOR >= 1 && PNG_LIBPNG_VER_MINOR >= 4) && defined(PNG_EASY_ACCESS_SUPPORTED)
++ ret += HPDF_Dict_AddNumber (smask, "Width", (HPDF_UINT)png_get_image_width(png_ptr, info_ptr));
++ ret += HPDF_Dict_AddNumber (smask, "Height", (HPDF_UINT)png_get_image_height(png_ptr, info_ptr));
++#else
+ ret += HPDF_Dict_AddNumber (smask, "Width", (HPDF_UINT)info_ptr->width);
+ ret += HPDF_Dict_AddNumber (smask, "Height", (HPDF_UINT)info_ptr->height);
++#endif
+ ret += HPDF_Dict_AddName (smask, "ColorSpace", "DeviceGray");
++#if (PNG_LIBPNG_VER_MAJOR >= 1 && PNG_LIBPNG_VER_MINOR >= 4) && defined(PNG_EASY_ACCESS_SUPPORTED)
++ ret += HPDF_Dict_AddNumber (smask, "BitsPerComponent", (HPDF_UINT)png_get_bit_depth(png_ptr, info_ptr));
++#else
+ ret += HPDF_Dict_AddNumber (smask, "BitsPerComponent", (HPDF_UINT)info_ptr->bit_depth);
++#endif
+
+ if (ret != HPDF_OK) {
+ HPDF_Dict_Free(smask);
+@@ -489,7 +579,11 @@ LoadPngData (HPDF_Dict image,
+ goto Exit;
+ }
+
++#if (PNG_LIBPNG_VER_MAJOR >= 1 && PNG_LIBPNG_VER_MINOR >= 4) && defined(PNG_EASY_ACCESS_SUPPORTED)
++ smask_data = HPDF_GetMem(image->mmgr, png_get_image_width(png_ptr, info_ptr) * png_get_image_height(png_ptr, info_ptr));
++#else
+ smask_data = HPDF_GetMem(image->mmgr, info_ptr->width * info_ptr->height);
++#endif
+ if (!smask_data) {
+ HPDF_Dict_Free(smask);
+ ret = HPDF_FAILD_TO_ALLOC_MEM;
+@@ -503,7 +597,11 @@ LoadPngData (HPDF_Dict image,
+ goto Exit;
+ }
+
++#if (PNG_LIBPNG_VER_MAJOR >= 1 && PNG_LIBPNG_VER_MINOR >= 4) && defined(PNG_EASY_ACCESS_SUPPORTED)
++ if (HPDF_Stream_Write(smask->stream, smask_data, png_get_image_width(png_ptr, info_ptr) * png_get_image_height(png_ptr, info_ptr)) != HPDF_OK) {
++#else
+ if (HPDF_Stream_Write(smask->stream, smask_data, info_ptr->width * info_ptr->height) != HPDF_OK) {
++#endif
+ HPDF_FreeMem(image->mmgr, smask_data);
+ HPDF_Dict_Free(smask);
+ ret = HPDF_FILE_IO_ERROR;
+@@ -513,9 +611,15 @@ LoadPngData (HPDF_Dict image,
+
+
+ ret += CreatePallet(image, png_ptr, info_ptr);
++#if (PNG_LIBPNG_VER_MAJOR >= 1 && PNG_LIBPNG_VER_MINOR >= 4) && defined(PNG_EASY_ACCESS_SUPPORTED)
++ ret += HPDF_Dict_AddNumber (image, "Width", (HPDF_UINT)png_get_image_width(png_ptr, info_ptr));
++ ret += HPDF_Dict_AddNumber (image, "Height", (HPDF_UINT)png_get_image_height(png_ptr, info_ptr));
++ ret += HPDF_Dict_AddNumber (image, "BitsPerComponent", (HPDF_UINT)png_get_bit_depth(png_ptr, info_ptr));
++#else
+ ret += HPDF_Dict_AddNumber (image, "Width", (HPDF_UINT)info_ptr->width);
+ ret += HPDF_Dict_AddNumber (image, "Height", (HPDF_UINT)info_ptr->height);
+ ret += HPDF_Dict_AddNumber (image, "BitsPerComponent", (HPDF_UINT)info_ptr->bit_depth);
++#endif
+ ret += HPDF_Dict_Add (image, "SMask", smask);
+
+ png_destroy_read_struct(&png_ptr, &info_ptr, NULL);
+@@ -526,7 +630,11 @@ no_transparent_color_in_palette:
+
+ /* read images with alpha channel right away
+ we have to do this because image transparent mask must be added to the Xref */
++#if (PNG_LIBPNG_VER_MAJOR >= 1 && PNG_LIBPNG_VER_MINOR >= 4) && defined(PNG_EASY_ACCESS_SUPPORTED)
++ if (xref && PNG_COLOR_MASK_ALPHA & png_get_color_type(png_ptr, info_ptr)) {
++#else
+ if (xref && PNG_COLOR_MASK_ALPHA & info_ptr->color_type) {
++#endif
+ HPDF_Dict smask;
+ png_bytep smask_data;
+
+@@ -539,10 +647,17 @@ no_transparent_color_in_palette:
+ smask->header.obj_class |= HPDF_OSUBCLASS_XOBJECT;
+ ret = HPDF_Dict_AddName (smask, "Type", "XObject");
+ ret += HPDF_Dict_AddName (smask, "Subtype", "Image");
++#if (PNG_LIBPNG_VER_MAJOR >= 1 && PNG_LIBPNG_VER_MINOR >= 4) && defined(PNG_EASY_ACCESS_SUPPORTED)
++ ret += HPDF_Dict_AddNumber (smask, "Width", (HPDF_UINT)png_get_image_width(png_ptr, info_ptr));
++ ret += HPDF_Dict_AddNumber (smask, "Height", (HPDF_UINT)png_get_image_height(png_ptr, info_ptr));
++ ret += HPDF_Dict_AddName (smask, "ColorSpace", "DeviceGray");
++ ret += HPDF_Dict_AddNumber (smask, "BitsPerComponent", (HPDF_UINT)png_get_bit_depth(png_ptr, info_ptr));
++#else
+ ret += HPDF_Dict_AddNumber (smask, "Width", (HPDF_UINT)info_ptr->width);
+ ret += HPDF_Dict_AddNumber (smask, "Height", (HPDF_UINT)info_ptr->height);
+ ret += HPDF_Dict_AddName (smask, "ColorSpace", "DeviceGray");
+ ret += HPDF_Dict_AddNumber (smask, "BitsPerComponent", (HPDF_UINT)info_ptr->bit_depth);
++#endif
+
+ if (ret != HPDF_OK) {
+ HPDF_Dict_Free(smask);
+@@ -550,7 +665,11 @@ no_transparent_color_in_palette:
+ goto Exit;
+ }
+
++#if (PNG_LIBPNG_VER_MAJOR >= 1 && PNG_LIBPNG_VER_MINOR >= 4) && defined(PNG_EASY_ACCESS_SUPPORTED)
++ smask_data = HPDF_GetMem(image->mmgr, png_get_image_width(png_ptr, info_ptr) * png_get_image_height(png_ptr, info_ptr));
++#else
+ smask_data = HPDF_GetMem(image->mmgr, info_ptr->width * info_ptr->height);
++#endif
+ if (!smask_data) {
+ HPDF_Dict_Free(smask);
+ ret = HPDF_FAILD_TO_ALLOC_MEM;
+@@ -564,7 +683,11 @@ no_transparent_color_in_palette:
+ goto Exit;
+ }
+
++#if (PNG_LIBPNG_VER_MAJOR >= 1 && PNG_LIBPNG_VER_MINOR >= 4) && defined(PNG_EASY_ACCESS_SUPPORTED)
++ if (HPDF_Stream_Write(smask->stream, smask_data, png_get_image_width(png_ptr, info_ptr) * png_get_image_height(png_ptr, info_ptr)) != HPDF_OK) {
++#else
+ if (HPDF_Stream_Write(smask->stream, smask_data, info_ptr->width * info_ptr->height) != HPDF_OK) {
++#endif
+ HPDF_FreeMem(image->mmgr, smask_data);
+ HPDF_Dict_Free(smask);
+ ret = HPDF_FILE_IO_ERROR;
+@@ -572,14 +695,24 @@ no_transparent_color_in_palette:
+ }
+ HPDF_FreeMem(image->mmgr, smask_data);
+
++#if (PNG_LIBPNG_VER_MAJOR >= 1 && PNG_LIBPNG_VER_MINOR >= 4) && defined(PNG_EASY_ACCESS_SUPPORTED)
++ if (png_get_color_type(png_ptr, info_ptr) == PNG_COLOR_TYPE_GRAY_ALPHA) {
++#else
+ if (info_ptr->color_type == PNG_COLOR_TYPE_GRAY_ALPHA) {
++#endif
+ ret += HPDF_Dict_AddName (image, "ColorSpace", "DeviceGray");
+ } else {
+ ret += HPDF_Dict_AddName (image, "ColorSpace", "DeviceRGB");
+ }
++#if (PNG_LIBPNG_VER_MAJOR >= 1 && PNG_LIBPNG_VER_MINOR >= 4) && defined(PNG_EASY_ACCESS_SUPPORTED)
++ ret += HPDF_Dict_AddNumber (image, "Width", (HPDF_UINT)png_get_image_width(png_ptr, info_ptr));
++ ret += HPDF_Dict_AddNumber (image, "Height", (HPDF_UINT)png_get_image_height(png_ptr, info_ptr));
++ ret += HPDF_Dict_AddNumber (image, "BitsPerComponent", (HPDF_UINT)png_get_bit_depth(png_ptr, info_ptr));
++#else
+ ret += HPDF_Dict_AddNumber (image, "Width", (HPDF_UINT)info_ptr->width);
+ ret += HPDF_Dict_AddNumber (image, "Height", (HPDF_UINT)info_ptr->height);
+ ret += HPDF_Dict_AddNumber (image, "BitsPerComponent", (HPDF_UINT)info_ptr->bit_depth);
++#endif
+ ret += HPDF_Dict_Add (image, "SMask", smask);
+
+ png_destroy_read_struct(&png_ptr, &info_ptr, NULL);
+@@ -589,9 +722,15 @@ no_transparent_color_in_palette:
+ /* if the image has color palette, copy the pallet of the image to
+ * create color map.
+ */
++#if (PNG_LIBPNG_VER_MAJOR >= 1 && PNG_LIBPNG_VER_MINOR >= 4) && defined(PNG_EASY_ACCESS_SUPPORTED)
++ if (png_get_color_type(png_ptr, info_ptr) == PNG_COLOR_TYPE_PALETTE)
++ ret = CreatePallet(image, png_ptr, info_ptr);
++ else if (png_get_color_type(png_ptr, info_ptr) == PNG_COLOR_TYPE_GRAY)
++#else
+ if (info_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
+- ret = CreatePallet(image, png_ptr, info_ptr);
++ ret = CreatePallet(image, png_ptr, info_ptr);
+ else if (info_ptr->color_type == PNG_COLOR_TYPE_GRAY)
++#endif
+ ret = HPDF_Dict_AddName (image, "ColorSpace", "DeviceGray");
+ else
+ ret = HPDF_Dict_AddName (image, "ColorSpace", "DeviceRGB");
+@@ -617,6 +756,18 @@ no_transparent_color_in_palette:
+ }
+
+ /* setting the info of the image. */
++#if (PNG_LIBPNG_VER_MAJOR >= 1 && PNG_LIBPNG_VER_MINOR >= 4) && defined(PNG_EASY_ACCESS_SUPPORTED)
++ if (HPDF_Dict_AddNumber (image, "Width", (HPDF_UINT)png_get_image_width(png_ptr, info_ptr))
++ != HPDF_OK)
++ goto Exit;
++
++ if (HPDF_Dict_AddNumber (image, "Height", (HPDF_UINT)png_get_image_height(png_ptr, info_ptr))
++ != HPDF_OK)
++ goto Exit;
++
++ if (HPDF_Dict_AddNumber (image, "BitsPerComponent",
++ (HPDF_UINT)png_get_bit_depth(png_ptr, info_ptr)) != HPDF_OK)
++#else
+ if (HPDF_Dict_AddNumber (image, "Width", (HPDF_UINT)info_ptr->width)
+ != HPDF_OK)
+ goto Exit;
+@@ -627,6 +778,7 @@ no_transparent_color_in_palette:
+
+ if (HPDF_Dict_AddNumber (image, "BitsPerComponent",
+ (HPDF_UINT)info_ptr->bit_depth) != HPDF_OK)
++#endif
+ goto Exit;
+
+ /* clean up */
diff --git a/libharu.spec b/libharu.spec
index a5a829c..68cb3eb 100644
--- a/libharu.spec
+++ b/libharu.spec
@@ -1,17 +1,18 @@
Name: libharu
Version: 2.2.1
-Release: 1%{?dist}
+Release: 2%{?dist}
Summary: C library for generating PDF files
Group: System Environment/Libraries
License: zlib with acknowledgement
URL: http://libharu.org
Source0: http://libharu.org/files/%{name}-%{version}.tar.gz
+Patch0: libharu-2.2.1-png15.patch
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
-BuildRequires: glibc-headers
-BuildRequires: libpng-devel
-BuildRequires: zlib-devel
+BuildRequires: glibc-headers
+BuildRequires: libpng-devel
+BuildRequires: zlib-devel
%description
@@ -22,7 +23,7 @@ It is free, open source, written in ANSI C and cross platform.
%package devel
Summary: Development files for %{name}
Group: Development/Libraries
-Requires: %{name} = %{version}-%{release}
+Requires: %{name}%{?_isa} = %{version}-%{release}
%description devel
The %{name}-devel package contains libraries and header files for
@@ -31,6 +32,12 @@ developing applications that use %{name}.
%prep
%setup -q
+%patch0 -p1 -b .png15
+
+# honours flag
+sed -e '/CFLAGS/s/-O0/-O2/' \
+ -e '/CFLAGS/s/-g3/-g/' \
+ -i configure
%build
@@ -39,13 +46,13 @@ make %{?_smp_mflags}
%install
-rm -rf $RPM_BUILD_ROOT
-make install DESTDIR=$RPM_BUILD_ROOT
-find $RPM_BUILD_ROOT -name '*.la' -exec rm -f {} ';'
+rm -rf %{buildroot}
+make install DESTDIR=%{buildroot}
+find %{buildroot} -name '*.la' -exec rm -f {} ';'
%clean
-rm -rf $RPM_BUILD_ROOT
+rm -rf %{buildroot}
%post -p /sbin/ldconfig
@@ -66,6 +73,10 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Tue Aug 26 2014 Remi Collet <remi@fedoraproject.org> - 2.2.1-2
+- add libpng15 patch from rawhide
+- honour compilation options
+
* Thu Feb 02 2012 Remi Collet <remi@fedoraproject.org> - 2.2.1-1
- update to 2.2.1 for remi repo