commit 10ff02dc03d7be9fa2e49596bfbe4e468cca6bac Author: Carl Worth Date: Thu Jul 27 12:19:41 2006 -0700 Don't compile type1 or truetype subsetting unless freetype is available (bug 7538) More specifically, we only compile this functionality if the Ft_Load_Sfnt_Table function is available. With this change it should be possible to build and use the PDF, SVG, and PS backends even without freetype, (for example on win32). The only change will be that the PDF and PS output will only include type3 fonts. An improved change for later would be to fix the type1 and truetype subsetting to work with any font backend rather than only with freetype. diff --git a/configure.in b/configure.in index 9e48511..5356d8e 100644 --- a/configure.in +++ b/configure.in @@ -419,8 +419,6 @@ CAIRO_BACKEND_ENABLE(ft, FreeType font, ft_LIBS="$FREETYPE_LIBS $FONTCONFIG_LIBS" ]) -have_ft_load_sfnt_table=no - if test "x$use_ft" = "xyes"; then temp_save_libs="$LIBS" temp_save_cflags="$CFLAGS" @@ -434,13 +432,15 @@ if test "x$use_ft" = "xyes"; then AC_DEFINE_UNQUOTED(HAVE_FT_BITMAP_SIZE_Y_PPEM,$HAVE_FT_BITMAP_SIZE_Y_PPEM, [FT_Bitmap_Size structure includes y_ppem field]) - AC_CHECK_FUNC(FT_Load_Sfnt_Table, have_ft_load_sfnt_table=yes) + AC_CHECK_FUNCS(FT_Load_Sfnt_Table, have_ft_load_sfnt_table=yes, have_ft_load_sfnt_table=no) AC_CHECK_FUNCS(FT_GlyphSlot_Embolden) LIBS="$temp_save_libs" CFLAGS="$temp_save_cflags" fi +AM_CONDITIONAL(HAVE_FT_LOAD_SFNT_TABLE, test "x$have_ft_load_sfnt_table" = "xyes") + dnl =========================================================================== AC_CHECK_HEADERS([pthread.h], have_pthread=yes, have_pthread=no) @@ -449,31 +449,23 @@ AM_CONDITIONAL(HAVE_PTHREAD, test "x$hav dnl =========================================================================== CAIRO_BACKEND_ENABLE(ps, PostScript, ps, PS_SURFACE, auto, [], [ - if test x"$have_ft_load_sfnt_table" != "xyes" ; then - use_ps="no (requires FreeType 2.1.4 or newer)" - else - # The postscript backend requires zlib. - AC_CHECK_LIB(z, compress, - [AC_CHECK_HEADER(zlib.h, [], - [use_ps="no (requires zlib http://www.gzip.org/zlib/)"])], - [use_ps="no (requires zlib http://www.gzip.org/zlib/)"]) - ps_NONPKGCONFIG_LIBS=-lz - fi + # The postscript backend requires zlib. + AC_CHECK_LIB(z, compress, + [AC_CHECK_HEADER(zlib.h, [], + [use_ps="no (requires zlib http://www.gzip.org/zlib/)"])], + [use_ps="no (requires zlib http://www.gzip.org/zlib/)"]) + ps_NONPKGCONFIG_LIBS=-lz ]) dnl =========================================================================== CAIRO_BACKEND_ENABLE(pdf, PDF, pdf, PDF_SURFACE, auto, [], [ - if test x"$have_ft_load_sfnt_table" != "xyes" ; then - use_pdf="no (requires FreeType 2.1.4 or newer)" - else - # The pdf backend requires zlib. - AC_CHECK_LIB(z, compress, - [AC_CHECK_HEADER(zlib.h, [], - [use_ps="no (requires zlib http://www.gzip.org/zlib/)"])], - [use_ps="no (requires zlib http://www.gzip.org/zlib/)"]) - pdf_NONPKGCONFIG_LIBS=-lz - fi + # The pdf backend requires zlib. + AC_CHECK_LIB(z, compress, + [AC_CHECK_HEADER(zlib.h, [], + [use_ps="no (requires zlib http://www.gzip.org/zlib/)"])], + [use_ps="no (requires zlib http://www.gzip.org/zlib/)"]) + pdf_NONPKGCONFIG_LIBS=-lz ]) test_pdf=no @@ -494,11 +486,7 @@ AM_CONDITIONAL(CAIRO_HAS_MULTI_PAGE_SURF dnl =========================================================================== -CAIRO_BACKEND_ENABLE(svg, SVG, svg, SVG_SURFACE, auto, [], [ - if test x"$have_ft_load_sfnt_table" != "xyes" ; then - use_svg="no (requires FreeType 2.1.4 or newer)" - fi -]) +CAIRO_BACKEND_ENABLE(svg, SVG, svg, SVG_SURFACE, auto, [], []) if test "x$use_svg" = "xyes"; then PKG_CHECK_MODULES(LIBRSVG, librsvg-2.0 gdk-2.0, [test_svg=yes], [test_svg=no]) diff --git a/src/Makefile.am b/src/Makefile.am index f490607..157e61d 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -1,10 +1,14 @@ font_subset_sources = \ - cairo-font-subset.c \ cairo-font-subset-private.h \ - cairo-type1-subset.c \ cairo-scaled-font-subsets.c \ cairo-scaled-font-subsets-private.h +if HAVE_FT_LOAD_SFNT_TABLE +font_subset_sources += \ + cairo-font-subset.c \ + cairo-type1-subset.c +endif + backend_pkgconfigs = if CAIRO_HAS_PS_SURFACE diff --git a/src/cairo-pdf-surface.c b/src/cairo-pdf-surface.c index aaf71c7..5f11fe8 100644 --- a/src/cairo-pdf-surface.c +++ b/src/cairo-pdf-surface.c @@ -40,7 +40,6 @@ #include "cairoint.h" #include "cairo-pdf.h" #include "cairo-pdf-test.h" #include "cairo-scaled-font-subsets-private.h" -#include "cairo-ft-private.h" #include "cairo-paginated-surface-private.h" #include "cairo-path-fixed-private.h" #include "cairo-output-stream-private.h" @@ -1586,6 +1585,10 @@ _cairo_pdf_surface_write_pages (cairo_pd "endobj\r\n"); } +/* XXX: We should fix the type1 and truetype subsetting to work with + * any font backend instead of requiring freetype. + */ +#if HAVE_FT_LOAD_SFNT_TABLE static cairo_status_t _cairo_pdf_surface_emit_type1_font_subset (cairo_pdf_surface_t *surface, cairo_scaled_font_subset_t *font_subset) @@ -1796,6 +1799,7 @@ _cairo_pdf_surface_emit_truetype_font_su return CAIRO_STATUS_SUCCESS; } +#endif static cairo_int_status_t _cairo_pdf_surface_emit_outline_glyph (cairo_pdf_surface_t *surface, @@ -2026,6 +2030,10 @@ _cairo_pdf_surface_emit_font_subset (cai cairo_pdf_surface_t *surface = closure; cairo_status_t status; +/* XXX: We should fix the type1 and truetype subsetting to work with + * any font backend instead of requireing freetype. + */ +#if HAVE_FT_LOAD_SFNT_TABLE status = _cairo_pdf_surface_emit_type1_font_subset (surface, font_subset); if (status != CAIRO_INT_STATUS_UNSUPPORTED) return; @@ -2033,6 +2041,7 @@ _cairo_pdf_surface_emit_font_subset (cai status = _cairo_pdf_surface_emit_truetype_font_subset (surface, font_subset); if (status != CAIRO_INT_STATUS_UNSUPPORTED) return; +#endif status = _cairo_pdf_surface_emit_type3_font_subset (surface, font_subset); if (status != CAIRO_INT_STATUS_UNSUPPORTED) diff --git a/src/cairo-ps-surface.c b/src/cairo-ps-surface.c index 3856aa2..cbcc201 100644 --- a/src/cairo-ps-surface.c +++ b/src/cairo-ps-surface.c @@ -43,9 +43,9 @@ #include "cairo-ps-test.h" #include "cairo-scaled-font-subsets-private.h" #include "cairo-paginated-surface-private.h" #include "cairo-meta-surface-private.h" -#include "cairo-ft-private.h" #include "cairo-output-stream-private.h" +#include #include #include @@ -385,6 +385,10 @@ _cairo_ps_surface_emit_header (cairo_ps_ } } +/* XXX: We should fix the type1 and truetype subsetting to work with + * any font backend instead of requiring freetype. + */ +#if HAVE_FT_LOAD_SFNT_TABLE static cairo_status_t _cairo_ps_surface_emit_type1_font_subset (cairo_ps_surface_t *surface, cairo_scaled_font_subset_t *font_subset) @@ -481,6 +485,7 @@ _cairo_ps_surface_emit_truetype_font_sub return CAIRO_STATUS_SUCCESS; } +#endif static cairo_int_status_t _cairo_ps_surface_emit_outline_glyph_data (cairo_ps_surface_t *surface, @@ -663,6 +668,10 @@ _cairo_ps_surface_emit_font_subset (cair cairo_ps_surface_t *surface = closure; cairo_status_t status; +/* XXX: We should fix the type1 and truetype subsetting to work with + * any font backend instead of requiring freetype. + */ +#if HAVE_FT_LOAD_SFNT_TABLE status = _cairo_ps_surface_emit_type1_font_subset (surface, font_subset); if (status != CAIRO_INT_STATUS_UNSUPPORTED) return; @@ -670,6 +679,7 @@ _cairo_ps_surface_emit_font_subset (cair status = _cairo_ps_surface_emit_truetype_font_subset (surface, font_subset); if (status != CAIRO_INT_STATUS_UNSUPPORTED) return; +#endif status = _cairo_ps_surface_emit_type3_font_subset (surface, font_subset); if (status != CAIRO_INT_STATUS_UNSUPPORTED) diff --git a/src/cairo-svg-surface.c b/src/cairo-svg-surface.c index b391506..efb8ae4 100644 --- a/src/cairo-svg-surface.c +++ b/src/cairo-svg-surface.c @@ -42,7 +42,6 @@ #include "cairoint.h" #include "cairo-svg.h" #include "cairo-svg-test.h" #include "cairo-path-fixed-private.h" -#include "cairo-ft-private.h" #include "cairo-meta-surface-private.h" #include "cairo-paginated-surface-private.h" #include "cairo-scaled-font-subsets-private.h"