diff options
Diffstat (limited to 'Library/Formula')
| -rw-r--r-- | Library/Formula/ghostscript.rb | 197 |
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; + |
