aboutsummaryrefslogtreecommitdiffstats
path: root/Library/Formula
diff options
context:
space:
mode:
authorCharlieRoot2011-07-23 00:01:57 +0400
committerAdam Vandenberg2011-08-04 09:29:50 -0700
commitd609d46595d89569a7860ddbb756ef84751b3397 (patch)
treed224976d9e57b678242a22c4ce6f17069d72c14d /Library/Formula
parenta96eaab4b0d3edf486f316781151d804abb81912 (diff)
downloadhomebrew-d609d46595d89569a7860ddbb756ef84751b3397.tar.bz2
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>
Diffstat (limited to 'Library/Formula')
-rw-r--r--Library/Formula/ghostscript.rb197
1 files changed, 196 insertions, 1 deletions
diff --git a/Library/Formula/ghostscript.rb b/Library/Formula/ghostscript.rb
index d193bf754..9f17167c0 100644
--- a/Library/Formula/ghostscript.rb
+++ b/Library/Formula/ghostscript.rb
@@ -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;
+