aboutsummaryrefslogtreecommitdiffstats
path: root/Library/Formula
diff options
context:
space:
mode:
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;
+