Ghostscript: fix build on 10.7
Fix Ghostscript build with system libpng 1.5 plus make it use system expat and freetype2 and homebrew jasper and libtiff Do not try to use system freetype if OS version is below 10.7 Signed-off-by: Adam Vandenberg <flangy@gmail.com>
This commit is contained in:
parent
86c302b3fa
commit
619bec9327
1 changed files with 196 additions and 1 deletions
|
@ -14,12 +14,21 @@ class Ghostscript < Formula
|
|||
depends_on 'pkg-config' => :build
|
||||
depends_on 'jpeg'
|
||||
depends_on 'libtiff'
|
||||
depends_on 'jasper'
|
||||
|
||||
# The patches fix compilation against libpng 1.5, provided by Lion.
|
||||
# Patch by @CharlieRoot
|
||||
def patches
|
||||
DATA
|
||||
end
|
||||
|
||||
def move_included_source_copies
|
||||
# If the install version of any of these doesn't match
|
||||
# the version included in ghostscript, we get errors
|
||||
# Taken from the MacPorts portfile - http://bit.ly/ghostscript-portfile
|
||||
%w{ jpeg libpng zlib }.each do |lib|
|
||||
renames = [ "jpeg", "libpng", "zlib", "jasper", "expat", "tiff" ]
|
||||
renames << "freetype" if 10.7 <= MACOS_VERSION
|
||||
renames.each do |lib|
|
||||
mv lib, "#{lib}_local"
|
||||
end
|
||||
end
|
||||
|
@ -52,3 +61,189 @@ class Ghostscript < Formula
|
|||
(man+'de').rmtree
|
||||
end
|
||||
end
|
||||
|
||||
__END__
|
||||
diff --git a/base/gdevpng.c b/base/gdevpng.c
|
||||
index f58c4eb..3477fe3 100644
|
||||
--- a/base/gdevpng.c
|
||||
+++ b/base/gdevpng.c
|
||||
@@ -274,13 +274,30 @@ png_print_page(gx_device_printer * pdev, FILE * file)
|
||||
char software_key[80];
|
||||
char software_text[256];
|
||||
png_text text_png;
|
||||
+#if PNG_LIBPNG_VER >= 10500
|
||||
+ int color_type = 0;
|
||||
+ png_color* palette = NULL;
|
||||
+#define PNG_SET_IHDR(bit, color) \
|
||||
+ png_set_IHDR(png_ptr, info_ptr, pdev->width, pdev->height, (bit), (color_type = (color)), \
|
||||
+ PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT);
|
||||
+#define COLOR_TYPE color_type
|
||||
+#define PALETTE palette
|
||||
+#define PNG_JMPBUF png_jmpbuf(png_ptr)
|
||||
+#else
|
||||
+#define PNG_SET_IHDR(bit, color) \
|
||||
+ info_ptr->bit_depth = (bit); \
|
||||
+ info_ptr->color_type = (color);
|
||||
+#define COLOR_TYPE info_ptr->color_type
|
||||
+#define PALETTE info_ptr->palette
|
||||
+#define PNG_JMPBUF png_ptr->jmpbuf
|
||||
+#endif
|
||||
|
||||
if (row == 0 || png_ptr == 0 || info_ptr == 0) {
|
||||
code = gs_note_error(gs_error_VMerror);
|
||||
goto done;
|
||||
}
|
||||
/* set error handling */
|
||||
- if (setjmp(png_ptr->jmpbuf)) {
|
||||
+ if (setjmp(PNG_JMPBUF)) {
|
||||
/* If we get here, we had a problem reading the file */
|
||||
code = gs_note_error(gs_error_VMerror);
|
||||
goto done;
|
||||
@@ -289,6 +306,12 @@ png_print_page(gx_device_printer * pdev, FILE * file)
|
||||
/* set up the output control */
|
||||
png_init_io(png_ptr, file);
|
||||
|
||||
+#if PNG_LIBPNG_VER >= 10500
|
||||
+ png_set_pHYs(png_ptr, info_ptr,
|
||||
+ (png_uint_32) (pdev->HWResolution[0] * (100.0 / 2.54)),
|
||||
+ (png_uint_32) (pdev->HWResolution[1] * (100.0 / 2.54)),
|
||||
+ PNG_RESOLUTION_METER);
|
||||
+#else
|
||||
/* set the file information here */
|
||||
info_ptr->width = pdev->width;
|
||||
info_ptr->height = pdev->height;
|
||||
@@ -299,10 +322,10 @@ png_print_page(gx_device_printer * pdev, FILE * file)
|
||||
(png_uint_32) (pdev->HWResolution[1] * (100.0 / 2.54));
|
||||
info_ptr->phys_unit_type = PNG_RESOLUTION_METER;
|
||||
info_ptr->valid |= PNG_INFO_pHYs;
|
||||
+#endif
|
||||
switch (depth) {
|
||||
case 32:
|
||||
- info_ptr->bit_depth = 8;
|
||||
- info_ptr->color_type = PNG_COLOR_TYPE_RGB_ALPHA;
|
||||
+ PNG_SET_IHDR(8, PNG_COLOR_TYPE_RGB_ALPHA);
|
||||
png_set_invert_alpha(png_ptr);
|
||||
{ gx_device_pngalpha *ppdev = (gx_device_pngalpha *)pdev;
|
||||
png_color_16 background;
|
||||
@@ -315,75 +338,78 @@ png_print_page(gx_device_printer * pdev, FILE * file)
|
||||
}
|
||||
break;
|
||||
case 48:
|
||||
- info_ptr->bit_depth = 16;
|
||||
- info_ptr->color_type = PNG_COLOR_TYPE_RGB;
|
||||
+ PNG_SET_IHDR(16, PNG_COLOR_TYPE_RGB);
|
||||
#if defined(ARCH_IS_BIG_ENDIAN) && (!ARCH_IS_BIG_ENDIAN)
|
||||
png_set_swap(png_ptr);
|
||||
#endif
|
||||
break;
|
||||
case 24:
|
||||
- info_ptr->bit_depth = 8;
|
||||
- info_ptr->color_type = PNG_COLOR_TYPE_RGB;
|
||||
+ PNG_SET_IHDR(8, PNG_COLOR_TYPE_RGB);
|
||||
break;
|
||||
case 8:
|
||||
- info_ptr->bit_depth = 8;
|
||||
- if (gx_device_has_color(pdev))
|
||||
- info_ptr->color_type = PNG_COLOR_TYPE_PALETTE;
|
||||
- else
|
||||
- info_ptr->color_type = PNG_COLOR_TYPE_GRAY;
|
||||
+ PNG_SET_IHDR(8, (gx_device_has_color(pdev) ? PNG_COLOR_TYPE_PALETTE : PNG_COLOR_TYPE_GRAY));
|
||||
break;
|
||||
case 4:
|
||||
- info_ptr->bit_depth = 4;
|
||||
- info_ptr->color_type = PNG_COLOR_TYPE_PALETTE;
|
||||
+ PNG_SET_IHDR(4, PNG_COLOR_TYPE_PALETTE);
|
||||
break;
|
||||
case 1:
|
||||
- info_ptr->bit_depth = 1;
|
||||
- info_ptr->color_type = PNG_COLOR_TYPE_GRAY;
|
||||
+ PNG_SET_IHDR(1, PNG_COLOR_TYPE_GRAY);
|
||||
/* invert monocrome pixels */
|
||||
png_set_invert_mono(png_ptr);
|
||||
break;
|
||||
}
|
||||
|
||||
/* set the palette if there is one */
|
||||
- if (info_ptr->color_type == PNG_COLOR_TYPE_PALETTE) {
|
||||
+ if (COLOR_TYPE == PNG_COLOR_TYPE_PALETTE) {
|
||||
int i;
|
||||
int num_colors = 1 << depth;
|
||||
gx_color_value rgb[3];
|
||||
|
||||
- info_ptr->palette =
|
||||
+ PALETTE =
|
||||
(void *)gs_alloc_bytes(mem, 256 * sizeof(png_color),
|
||||
"png palette");
|
||||
- if (info_ptr->palette == 0) {
|
||||
+ if (PALETTE == 0) {
|
||||
code = gs_note_error(gs_error_VMerror);
|
||||
goto done;
|
||||
}
|
||||
+#if PNG_LIBPNG_VER < 10500
|
||||
info_ptr->num_palette = num_colors;
|
||||
info_ptr->valid |= PNG_INFO_PLTE;
|
||||
+#endif
|
||||
for (i = 0; i < num_colors; i++) {
|
||||
(*dev_proc(pdev, map_color_rgb)) ((gx_device *) pdev,
|
||||
(gx_color_index) i, rgb);
|
||||
- info_ptr->palette[i].red = gx_color_value_to_byte(rgb[0]);
|
||||
- info_ptr->palette[i].green = gx_color_value_to_byte(rgb[1]);
|
||||
- info_ptr->palette[i].blue = gx_color_value_to_byte(rgb[2]);
|
||||
+ PALETTE[i].red = gx_color_value_to_byte(rgb[0]);
|
||||
+ PALETTE[i].green = gx_color_value_to_byte(rgb[1]);
|
||||
+ PALETTE[i].blue = gx_color_value_to_byte(rgb[2]);
|
||||
}
|
||||
+#if PNG_LIBPNG_VER >= 10500
|
||||
+ png_set_PLTE(png_ptr, info_ptr, PALETTE, num_colors);
|
||||
+#endif
|
||||
}
|
||||
/* add comment */
|
||||
strncpy(software_key, "Software", sizeof(software_key));
|
||||
sprintf(software_text, "%s %d.%02d", gs_product,
|
||||
(int)(gs_revision / 100), (int)(gs_revision % 100));
|
||||
- text_png.compression = -1; /* uncompressed */
|
||||
+ text_png.compression = PNG_TEXT_COMPRESSION_NONE; /* uncompressed */
|
||||
text_png.key = software_key;
|
||||
text_png.text = software_text;
|
||||
text_png.text_length = strlen(software_text);
|
||||
+#if PNG_LIBPNG_VER >= 10500
|
||||
+ png_set_text(png_ptr, info_ptr, &text_png, 1);
|
||||
+#else
|
||||
info_ptr->text = &text_png;
|
||||
info_ptr->num_text = 1;
|
||||
+#endif
|
||||
|
||||
/* write the file information */
|
||||
png_write_info(png_ptr, info_ptr);
|
||||
|
||||
+#if PNG_LIBPNG_VER < 10500
|
||||
/* don't write the comments twice */
|
||||
info_ptr->num_text = 0;
|
||||
info_ptr->text = NULL;
|
||||
+#endif
|
||||
|
||||
/* Write the contents of the image. */
|
||||
for (y = 0; y < height; y++) {
|
||||
@@ -395,7 +421,7 @@ png_print_page(gx_device_printer * pdev, FILE * file)
|
||||
png_write_end(png_ptr, info_ptr);
|
||||
|
||||
/* if you alloced the palette, free it here */
|
||||
- gs_free_object(mem, info_ptr->palette, "png palette");
|
||||
+ gs_free_object(mem, PALETTE, "png palette");
|
||||
|
||||
done:
|
||||
/* free the structures */
|
||||
diff --git a/base/Makefile.in b/base/Makefile.in
|
||||
index 5b7847d..85e1a32 100644
|
||||
--- a/base/Makefile.in
|
||||
+++ b/base/Makefile.in
|
||||
@@ -362,7 +362,7 @@ LDFLAGS=@LDFLAGS@ $(XLDFLAGS)
|
||||
# Solaris may need -lnsl -lsocket -lposix4.
|
||||
# (Libraries required by individual drivers are handled automatically.)
|
||||
|
||||
-EXTRALIBS=@LIBS@ @DYNAMIC_LIBS@ @FONTCONFIG_LIBS@
|
||||
+EXTRALIBS=@LIBS@ @DYNAMIC_LIBS@ @FONTCONFIG_LIBS@ @FT_LIBS@
|
||||
|
||||
# Define the standard libraries to search at the end of linking.
|
||||
# Most platforms require -lpthread for the POSIX threads library;
|
||||
|
||||
|
|
Loading…
Reference in a new issue