250 lines
8.2 KiB
Ruby
250 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;
|
|
|