619bec9327
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>
249 lines
8.2 KiB
Ruby
249 lines
8.2 KiB
Ruby
require 'formula'
|
|
|
|
class GhostscriptFonts < Formula
|
|
url 'http://downloads.sourceforge.net/project/gs-fonts/gs-fonts/8.11%20%28base%2035%2C%20GPL%29/ghostscript-fonts-std-8.11.tar.gz'
|
|
homepage 'http://sourceforge.net/projects/gs-fonts/'
|
|
md5 '6865682b095f8c4500c54b285ff05ef6'
|
|
end
|
|
|
|
class Ghostscript < Formula
|
|
url 'http://downloads.ghostscript.com/public/ghostscript-9.02.tar.bz2'
|
|
homepage 'http://www.ghostscript.com/'
|
|
md5 'f67151444bd56a7904579fc75a083dd6'
|
|
|
|
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
|
|
renames = [ "jpeg", "libpng", "zlib", "jasper", "expat", "tiff" ]
|
|
renames << "freetype" if 10.7 <= MACOS_VERSION
|
|
renames.each do |lib|
|
|
mv lib, "#{lib}_local"
|
|
end
|
|
end
|
|
|
|
def install
|
|
ENV.libpng
|
|
ENV.deparallelize
|
|
# O4 takes an ungodly amount of time
|
|
ENV.O3
|
|
# ghostscript configure ignores LDFLAGs apparently
|
|
ENV['LIBS']="-L/usr/X11/lib"
|
|
|
|
move_included_source_copies
|
|
|
|
system "./configure", "--prefix=#{prefix}", "--disable-debug",
|
|
# the cups component adamantly installs to /usr so fuck it
|
|
"--disable-cups",
|
|
"--disable-compile-inits",
|
|
"--disable-gtk"
|
|
|
|
# versioned stuff in main tree is pointless for us
|
|
inreplace 'Makefile', '/$(GS_DOT_VERSION)', ''
|
|
system "make install"
|
|
|
|
GhostscriptFonts.new.brew do
|
|
Dir.chdir '..'
|
|
(share+'ghostscript').install 'fonts'
|
|
end
|
|
|
|
(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;
|
|
|