homebrew-core/Formula/ghostscript.rb

250 lines
8.2 KiB
Ruby
Raw Normal View History

require 'formula'
2011-03-10 05:11:03 +00:00
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
2011-03-10 05:11:03 +00:00
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|
2010-05-13 05:43:42 +00:00
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 '..'
2010-08-08 17:20:15 +00:00
(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;