Merge pull request #1839 from tonytheodore/muellni-update_libharu

libharu: update
This commit is contained in:
Tony Theodore 2017-07-22 18:17:38 +10:00 committed by GitHub
commit 5f1ba37141
3 changed files with 18 additions and 430 deletions

View File

@ -111,10 +111,10 @@ endef
# called with owner/repo, tag prefix, tag suffix, filter-out, version sep
define MXE_GET_GH_TAG
$(MXE_GET_GH_TAGS) \
| $(if $(4),grep -v '$(strip $(4))') \
| $(if $(4),grep -vi '$(strip $(4))') \
| $(SED) -n 's,^$(strip $(2))\([^"]*\)$(strip $(3))$$,\1,p' \
| tr '$(strip $(5))' '.' \
| $(SORT) -V
| $(SORT) -V \
| tail -1
endef

View File

@ -1,406 +0,0 @@
# This file is part of MXE. See LICENSE.md for licensing information.
From 531d2a9af8c51ad8badc32bc9ba43bb3b87b0e9f Mon Sep 17 00:00:00 2001
From: Antony Dovgal <tony@daylessday.org>
Date: Mon, 10 Jan 2011 01:22:14 +0300
Subject: [PATCH] fix build with libpng 1.5.0 (reported by Tamas Tevesz)
(cherry picked from commit
e5bf8b01f6c3d5e3fe0e26ac5345e0da10c03934)
Conflicts:
CHANGES
---
src/hpdf_image_png.c | 109 +++++++++++++++++++++++++++-----------------------
1 files changed, 59 insertions(+), 50 deletions(-)
diff --git a/src/hpdf_image_png.c b/src/hpdf_image_png.c
index b8f831e..6057424 100644
--- a/src/hpdf_image_png.c
+++ b/src/hpdf_image_png.c
@@ -109,14 +109,15 @@ ReadPngData_Interlaced (HPDF_Dict image,
png_infop info_ptr)
{
png_uint_32 len = png_get_rowbytes(png_ptr, info_ptr);
+ png_uint_32 height = png_get_image_height(png_ptr, info_ptr);
png_bytep* row_pointers = HPDF_GetMem (image->mmgr,
- info_ptr->height * sizeof (png_bytep));
+ height * sizeof (png_bytep));
if (row_pointers) {
HPDF_UINT i;
- HPDF_MemSet (row_pointers, 0, info_ptr->height * sizeof (png_bytep));
- for (i = 0; i < (HPDF_UINT)info_ptr->height; i++) {
+ HPDF_MemSet (row_pointers, 0, height * sizeof (png_bytep));
+ for (i = 0; i < (HPDF_UINT)height; i++) {
row_pointers[i] = HPDF_GetMem (image->mmgr, len);
if (image->error->error_no != HPDF_OK)
@@ -126,7 +127,7 @@ ReadPngData_Interlaced (HPDF_Dict image,
if (image->error->error_no == HPDF_OK) {
png_read_image(png_ptr, row_pointers);
if (image->error->error_no == HPDF_OK) { /* add this line */
- for (i = 0; i < (HPDF_UINT)info_ptr->height; i++) {
+ for (i = 0; i < (HPDF_UINT)height; i++) {
if (HPDF_Stream_Write (image->stream, row_pointers[i], len) !=
HPDF_OK)
break;
@@ -135,7 +136,7 @@ ReadPngData_Interlaced (HPDF_Dict image,
}
/* clean up */
- for (i = 0; i < (HPDF_UINT)info_ptr->height; i++) {
+ for (i = 0; i < (HPDF_UINT)height; i++) {
HPDF_FreeMem (image->mmgr, row_pointers[i]);
}
@@ -151,12 +152,13 @@ ReadPngData (HPDF_Dict image,
png_infop info_ptr)
{
png_uint_32 len = png_get_rowbytes(png_ptr, info_ptr);
+ png_uint_32 height = png_get_image_height(png_ptr, info_ptr);
png_bytep buf_ptr = HPDF_GetMem (image->mmgr, len);
if (buf_ptr) {
HPDF_UINT i;
- for (i = 0; i < (HPDF_UINT)info_ptr->height; i++) {
+ for (i = 0; i < (HPDF_UINT)height; i++) {
png_read_rows(png_ptr, (png_byte**)&buf_ptr, NULL, 1);
if (image->error->error_no != HPDF_OK)
break;
@@ -182,14 +184,16 @@ ReadTransparentPaletteData (HPDF_Dict image,
HPDF_STATUS ret = HPDF_OK;
HPDF_UINT i, j;
png_bytep *row_ptr;
+ png_uint_32 height = png_get_image_height(png_ptr, info_ptr);
+ png_uint_32 width = png_get_image_width(png_ptr, info_ptr);
- row_ptr = HPDF_GetMem (image->mmgr, info_ptr->height * sizeof(png_bytep));
+ row_ptr = HPDF_GetMem (image->mmgr, height * sizeof(png_bytep));
if (!row_ptr) {
return HPDF_FAILD_TO_ALLOC_MEM;
} else {
png_uint_32 len = png_get_rowbytes(png_ptr, info_ptr);
- for (i = 0; i < (HPDF_UINT)info_ptr->height; i++) {
+ for (i = 0; i < (HPDF_UINT)height; i++) {
row_ptr[i] = HPDF_GetMem(image->mmgr, len);
if (!row_ptr[i]) {
for (; i >= 0; i--) {
@@ -207,19 +211,19 @@ ReadTransparentPaletteData (HPDF_Dict image,
goto Error;
}
- 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;
+ for (j = 0; j < height; j++) {
+ for (i = 0; i < width; i++) {
+ smask_data[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) {
+ if (HPDF_Stream_Write (image->stream, row_ptr[j], width) != HPDF_OK) {
ret = HPDF_FILE_IO_ERROR;
goto Error;
}
}
Error:
- for (i = 0; i < (HPDF_UINT)info_ptr->height; i++) {
+ for (i = 0; i < (HPDF_UINT)height; i++) {
HPDF_FreeMem (image->mmgr, row_ptr[i]);
}
@@ -238,6 +242,8 @@ ReadTransparentPngData (HPDF_Dict image,
HPDF_UINT i, j;
png_bytep *row_ptr, row;
png_byte color_type;
+ png_uint_32 height = png_get_image_height(png_ptr, info_ptr);
+ png_uint_32 width = png_get_image_width(png_ptr, info_ptr);
color_type = png_get_color_type(png_ptr, info_ptr);
@@ -245,13 +251,13 @@ ReadTransparentPngData (HPDF_Dict image,
return HPDF_INVALID_PNG_IMAGE;
}
- row_ptr = HPDF_GetMem (image->mmgr, info_ptr->height * sizeof(png_bytep));
+ row_ptr = HPDF_GetMem (image->mmgr, height * sizeof(png_bytep));
if (!row_ptr) {
return HPDF_FAILD_TO_ALLOC_MEM;
} else {
png_uint_32 len = png_get_rowbytes(png_ptr, info_ptr);
- for (i = 0; i < (HPDF_UINT)info_ptr->height; i++) {
+ for (i = 0; i < (HPDF_UINT)height; i++) {
row_ptr[i] = HPDF_GetMem(image->mmgr, len);
if (!row_ptr[i]) {
for (; i >= 0; i--) {
@@ -271,12 +277,12 @@ ReadTransparentPngData (HPDF_Dict image,
switch (color_type) {
case PNG_COLOR_TYPE_RGB_ALPHA:
- 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_len = 3 * width * sizeof(png_byte);
+ for (j = 0; j < height; j++) {
+ for (i = 0; i < 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];
+ smask_data[width * j + i] = row[4 * i + 3];
}
if (HPDF_Stream_Write (image->stream, row, row_len) != HPDF_OK) {
@@ -286,12 +292,12 @@ ReadTransparentPngData (HPDF_Dict image,
}
break;
case PNG_COLOR_TYPE_GRAY_ALPHA:
- 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_len = width * sizeof(png_byte);
+ for (j = 0; j < height; j++) {
+ for (i = 0; i < width; i++) {
row = row_ptr[j];
row[i] = row[2 * i];
- smask_data[info_ptr->width * j + i] = row[2 * i + 1];
+ smask_data[width * j + i] = row[2 * i + 1];
}
if (HPDF_Stream_Write (image->stream, row, row_len) != HPDF_OK) {
@@ -306,7 +312,7 @@ ReadTransparentPngData (HPDF_Dict image,
}
Error:
- for (i = 0; i < (HPDF_UINT)info_ptr->height; i++) {
+ for (i = 0; i < (HPDF_UINT)height; i++) {
HPDF_FreeMem (image->mmgr, row_ptr[i]);
}
@@ -415,7 +421,8 @@ LoadPngData (HPDF_Dict image,
{
HPDF_STATUS ret = HPDF_OK;
-
+ png_uint_32 width, height;
+ int bit_depth, color_type;
png_structp png_ptr = NULL;
png_infop info_ptr = NULL;
@@ -447,8 +454,10 @@ LoadPngData (HPDF_Dict image,
goto Exit;
}
+ png_get_IHDR(png_ptr, info_ptr, &width, &height, &bit_depth, &color_type, NULL, NULL, NULL);
+
/* 16bit images are not supported. */
- if (info_ptr->bit_depth == 16) {
+ if (bit_depth == 16) {
png_set_strip_16(png_ptr);
}
@@ -458,7 +467,7 @@ LoadPngData (HPDF_Dict image,
}
/* check palette-based images for transparent areas and load them immediately if found */
- if (xref && PNG_COLOR_TYPE_PALETTE & info_ptr->color_type) {
+ if (xref && PNG_COLOR_TYPE_PALETTE & color_type) {
png_bytep trans;
int num_trans;
HPDF_Dict smask;
@@ -478,10 +487,10 @@ 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");
- 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_AddNumber (smask, "Width", (HPDF_UINT)width);
+ ret += HPDF_Dict_AddNumber (smask, "Height", (HPDF_UINT)height);
ret += HPDF_Dict_AddName (smask, "ColorSpace", "DeviceGray");
- ret += HPDF_Dict_AddNumber (smask, "BitsPerComponent", (HPDF_UINT)info_ptr->bit_depth);
+ ret += HPDF_Dict_AddNumber (smask, "BitsPerComponent", (HPDF_UINT)bit_depth);
if (ret != HPDF_OK) {
HPDF_Dict_Free(smask);
@@ -489,7 +498,7 @@ LoadPngData (HPDF_Dict image,
goto Exit;
}
- smask_data = HPDF_GetMem(image->mmgr, info_ptr->width * info_ptr->height);
+ smask_data = HPDF_GetMem(image->mmgr, width * height);
if (!smask_data) {
HPDF_Dict_Free(smask);
ret = HPDF_FAILD_TO_ALLOC_MEM;
@@ -503,7 +512,7 @@ LoadPngData (HPDF_Dict image,
goto Exit;
}
- if (HPDF_Stream_Write(smask->stream, smask_data, info_ptr->width * info_ptr->height) != HPDF_OK) {
+ if (HPDF_Stream_Write(smask->stream, smask_data, width * height) != HPDF_OK) {
HPDF_FreeMem(image->mmgr, smask_data);
HPDF_Dict_Free(smask);
ret = HPDF_FILE_IO_ERROR;
@@ -513,9 +522,9 @@ LoadPngData (HPDF_Dict image,
ret += CreatePallet(image, png_ptr, info_ptr);
- 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);
+ ret += HPDF_Dict_AddNumber (image, "Width", (HPDF_UINT)width);
+ ret += HPDF_Dict_AddNumber (image, "Height", (HPDF_UINT)height);
+ ret += HPDF_Dict_AddNumber (image, "BitsPerComponent", (HPDF_UINT)bit_depth);
ret += HPDF_Dict_Add (image, "SMask", smask);
png_destroy_read_struct(&png_ptr, &info_ptr, NULL);
@@ -526,7 +535,7 @@ 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 (xref && PNG_COLOR_MASK_ALPHA & info_ptr->color_type) {
+ if (xref && PNG_COLOR_MASK_ALPHA & color_type) {
HPDF_Dict smask;
png_bytep smask_data;
@@ -539,10 +548,10 @@ 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");
- 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_AddNumber (smask, "Width", (HPDF_UINT)width);
+ ret += HPDF_Dict_AddNumber (smask, "Height", (HPDF_UINT)height);
ret += HPDF_Dict_AddName (smask, "ColorSpace", "DeviceGray");
- ret += HPDF_Dict_AddNumber (smask, "BitsPerComponent", (HPDF_UINT)info_ptr->bit_depth);
+ ret += HPDF_Dict_AddNumber (smask, "BitsPerComponent", (HPDF_UINT)bit_depth);
if (ret != HPDF_OK) {
HPDF_Dict_Free(smask);
@@ -550,7 +559,7 @@ no_transparent_color_in_palette:
goto Exit;
}
- smask_data = HPDF_GetMem(image->mmgr, info_ptr->width * info_ptr->height);
+ smask_data = HPDF_GetMem(image->mmgr, width * height);
if (!smask_data) {
HPDF_Dict_Free(smask);
ret = HPDF_FAILD_TO_ALLOC_MEM;
@@ -564,7 +573,7 @@ no_transparent_color_in_palette:
goto Exit;
}
- if (HPDF_Stream_Write(smask->stream, smask_data, info_ptr->width * info_ptr->height) != HPDF_OK) {
+ if (HPDF_Stream_Write(smask->stream, smask_data, width * height) != HPDF_OK) {
HPDF_FreeMem(image->mmgr, smask_data);
HPDF_Dict_Free(smask);
ret = HPDF_FILE_IO_ERROR;
@@ -572,14 +581,14 @@ no_transparent_color_in_palette:
}
HPDF_FreeMem(image->mmgr, smask_data);
- if (info_ptr->color_type == PNG_COLOR_TYPE_GRAY_ALPHA) {
+ if (color_type == PNG_COLOR_TYPE_GRAY_ALPHA) {
ret += HPDF_Dict_AddName (image, "ColorSpace", "DeviceGray");
} else {
ret += HPDF_Dict_AddName (image, "ColorSpace", "DeviceRGB");
}
- 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);
+ ret += HPDF_Dict_AddNumber (image, "Width", (HPDF_UINT)width);
+ ret += HPDF_Dict_AddNumber (image, "Height", (HPDF_UINT)height);
+ ret += HPDF_Dict_AddNumber (image, "BitsPerComponent", (HPDF_UINT)bit_depth);
ret += HPDF_Dict_Add (image, "SMask", smask);
png_destroy_read_struct(&png_ptr, &info_ptr, NULL);
@@ -589,9 +598,9 @@ no_transparent_color_in_palette:
/* if the image has color palette, copy the pallet of the image to
* create color map.
*/
- if (info_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
+ if (color_type == PNG_COLOR_TYPE_PALETTE)
ret = CreatePallet(image, png_ptr, info_ptr);
- else if (info_ptr->color_type == PNG_COLOR_TYPE_GRAY)
+ else if (color_type == PNG_COLOR_TYPE_GRAY)
ret = HPDF_Dict_AddName (image, "ColorSpace", "DeviceGray");
else
ret = HPDF_Dict_AddName (image, "ColorSpace", "DeviceRGB");
@@ -617,16 +626,16 @@ no_transparent_color_in_palette:
}
/* setting the info of the image. */
- if (HPDF_Dict_AddNumber (image, "Width", (HPDF_UINT)info_ptr->width)
+ if (HPDF_Dict_AddNumber (image, "Width", (HPDF_UINT)width)
!= HPDF_OK)
goto Exit;
- if (HPDF_Dict_AddNumber (image, "Height", (HPDF_UINT)info_ptr->height)
+ if (HPDF_Dict_AddNumber (image, "Height", (HPDF_UINT)height)
!= HPDF_OK)
goto Exit;
if (HPDF_Dict_AddNumber (image, "BitsPerComponent",
- (HPDF_UINT)info_ptr->bit_depth) != HPDF_OK)
+ (HPDF_UINT)bit_depth) != HPDF_OK)
goto Exit;
/* clean up */
--
1.7.8.3
Wt requires the following patch for libHaru to render arcs correctly.
This patch has been tested against libhar 2.1.0 and 2.2.0.
(see http://redmine.webtoolkit.eu/projects/wt/wiki/LibHaru)
diff -ur a/src/hpdf_page_operator.c b/src/hpdf_page_operator.c
--- a/src/hpdf_page_operator.c 2010-02-01 07:26:13.000000000 -0300
+++ b/src/hpdf_page_operator.c 2012-03-10 18:12:41.347028623 -0300
@@ -2192,7 +2192,7 @@
HPDF_PTRACE ((" HPDF_Page_Arc\n"));
- if (ang1 >= ang2 || (ang2 - ang1) >= 360)
+ if (fabs(ang2 - ang1) >= 360)
HPDF_RaiseError (page->error, HPDF_PAGE_OUT_OF_RANGE, 0);
if (ret != HPDF_OK)
@@ -2205,10 +2205,10 @@
for (;;) {
- if (ang2 - ang1 <= 90)
+ if (fabs(ang2 - ang1) <= 90)
return InternalArc (page, x, y, ray, ang1, ang2, cont_flg);
else {
- HPDF_REAL tmp_ang = ang1 + 90;
+ HPDF_REAL tmp_ang = (ang2 > ang1 ? ang1 + 90 : ang1 - 90);
if ((ret = InternalArc (page, x, y, ray, ang1, tmp_ang, cont_flg))
!= HPDF_OK)
@@ -2217,7 +2217,7 @@
ang1 = tmp_ang;
}
- if (ang1 >= ang2)
+ if (fabs(ang1 - ang2) < 0.1)
break;
cont_flg = HPDF_TRUE;
@@ -2280,7 +2280,11 @@
pbuf = HPDF_FToA (pbuf, (HPDF_REAL)x0, eptr);
*pbuf++ = ' ';
pbuf = HPDF_FToA (pbuf, (HPDF_REAL)y0, eptr);
- pbuf = (char *)HPDF_StrCpy (pbuf, " m\012", eptr);
+
+ if (attr->gmode == HPDF_GMODE_PATH_OBJECT)
+ pbuf = (char *)HPDF_StrCpy (pbuf, " l\012", eptr);
+ else
+ pbuf = (char *)HPDF_StrCpy (pbuf, " m\012", eptr);
}
pbuf = HPDF_FToA (pbuf, (HPDF_REAL)x1, eptr);

View File

@ -3,29 +3,23 @@
PKG := libharu
$(PKG)_WEBSITE := http://libharu.org/
$(PKG)_IGNORE :=
$(PKG)_VERSION := 2.2.1
$(PKG)_CHECKSUM := 45fd57044042c0e290ad0f11fc19eeb31b50c4b9edadf9d89dd5a7d9ae4865a7
$(PKG)_SUBDIR := libharu-$($(PKG)_VERSION)
$(PKG)_FILE := libharu-$($(PKG)_VERSION).tar.gz
$(PKG)_URL := http://libharu.org/files/$($(PKG)_FILE)
$(PKG)_VERSION := 2.3.0
$(PKG)_CHECKSUM := 8f9e68cc5d5f7d53d1bc61a1ed876add1faf4f91070dbc360d8b259f46d9a4d2
$(PKG)_GH_CONF := libharu/libharu,RELEASE_,,,_
$(PKG)_DEPS := gcc libpng zlib
define $(PKG)_UPDATE
$(WGET) -q -O- 'https://github.com/libharu/libharu/tags' | \
$(SED) -n 's,.*/archive/RELEASE_\([0-9][^"]*\)\.tar.*,\1,p' | \
$(SED) 's,_,.,g' | \
grep -v 'RC' | \
head -1
endef
define $(PKG)_BUILD
cd '$(1)' && ./configure \
--host='$(TARGET)' \
--prefix='$(PREFIX)/$(TARGET)' \
--disable-shared \
--with-zlib='$(PREFIX)/$(TARGET)' \
--with-png='$(PREFIX)/$(TARGET)'
$(MAKE) -C '$(1)' -j '$(JOBS)' install
endef
cd '$(BUILD_DIR)' && '$(TARGET)-cmake' '$(SOURCE_DIR)' \
-DCMAKE_C_FLAGS=$(if $(BUILD_STATIC),,-DHPDF_DLL_MAKE) \
-DLIBHPDF_SHARED=$(CMAKE_SHARED_BOOL) \
-DLIBHPDF_STATIC=$(CMAKE_STATIC_BOOL) \
-DDEVPAK=ON
$(MAKE) -C '$(BUILD_DIR)' -j '$(JOBS)' VERBOSE=1
$(MAKE) -C '$(BUILD_DIR)' -j 1 install VERBOSE=1
$(PKG)_BUILD_SHARED =
$(TARGET)-gcc -o $(PREFIX)/$(TARGET)/bin/test-$(PKG).exe \
$(if $(BUILD_STATIC),,-DHPDF_DLL) \
'$(1)/demo/slide_show_demo.c' \
$(if $(BUILD_STATIC),'-lhpdfs','-lhpdf') \
`$(TARGET)-pkg-config libpng zlib --libs`
endef