From: Jan Nieuwenhuizen Date: Thu, 17 Jun 2004 00:17:57 +0000 (+0000) Subject: * scm/framework-gnome.scm: Add pango decoders. X-Git-Tag: release/2.2.3~1^2~20 X-Git-Url: https://git.donarmstrong.com/?p=lilypond.git;a=commitdiff_plain;h=bf79f6426e9c1bed311ab88bec13aee3376f6916 * scm/framework-gnome.scm: Add pango decoders. * lily/include/pangofc-afm-decoder.hh: * lily/pangofc-afm-decoder.cc: New file. * lily/lily-guile.cc (ly:pango-add-afm-decoder): New function. * configure.in: Check for pango. * stepmake/aclocal.m4 (PKG_CHECK_MODULES): New function (from autoconf). (STEPMAKE_GTK2, STEPMAKE_PANGO): New function. * config.make.in (USER_CFLAGS, USER_LDLAGS): Update. --- diff --git a/ChangeLog b/ChangeLog index 914ca80f20..76778c0377 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,20 @@ +2004-06-17 Jan Nieuwenhuizen + + * scm/framework-gnome.scm: Add pango decoders. + + * lily/include/pangofc-afm-decoder.hh: + * lily/pangofc-afm-decoder.cc: New file. + + * lily/lily-guile.cc (ly:pango-add-afm-decoder): New function. + + * configure.in: Check for pango. + + * stepmake/aclocal.m4 (PKG_CHECK_MODULES): New function (from + autoconf). + (STEPMAKE_GTK2, STEPMAKE_PANGO): New function. + + * config.make.in (USER_CFLAGS, USER_LDLAGS): Update. + 2004-06-17 Han-Wen Nienhuys * Documentation/user/tutorial.itely (Integrating text and music): @@ -18,7 +35,7 @@ 2004-06-15 Jan Nieuwenhuizen - * buildscripts/guile-gnome.sh: Pick-up user-installe pango. + * buildscripts/guile-gnome.sh: Pick-up user-installed pango. 2004-06-15 Han-Wen Nienhuys diff --git a/autogen.sh b/autogen.sh index ef2afec2d7..6678367b65 100755 --- a/autogen.sh +++ b/autogen.sh @@ -3,6 +3,9 @@ srcdir=`dirname $0` +case $1 in + --noconf*) NOCONFIGURE=true;; +esac if [ ! -f aclocal.m4 -o stepmake/aclocal.m4 -nt aclocal.m4 ]; then echo "stepmake/aclocal.m4 is newer. Copying file." diff --git a/config.hh.in b/config.hh.in index 96ede6ebae..fe37006e49 100644 --- a/config.hh.in +++ b/config.hh.in @@ -91,3 +91,6 @@ #define GUILE_PATCH_LEVEL 0 #endif #endif + +/* define if you have pango_fc_font_map_add_decoder_find_func */ +#define HAVE_PANGO_FC_FONT_MAP_ADD_DECODER_FIND_FUNC 0 diff --git a/config.make.in b/config.make.in index 1724a5fad5..55ff72debc 100644 --- a/config.make.in +++ b/config.make.in @@ -7,10 +7,10 @@ MISSING_REQUIRED = @REQUIRED@ package-depth = @package_depth@ -USER_CFLAGS = @CFLAGS@ @CPPFLAGS@ @GUILE_CFLAGS@ -USER_CXXFLAGS = @CXXFLAGS@ @CPPFLAGS@ @GUILE_CFLAGS@ +USER_CFLAGS = @CFLAGS@ @CPPFLAGS@ @GUILE_CFLAGS@ @PANGO_CFLAGS@ +USER_CXXFLAGS = @CXXFLAGS@ @CPPFLAGS@ @GUILE_CFLAGS@ @PANGO_CFLAGS@ USER_LDFLAGS = @LDFLAGS@ @GUILE_LDFLAGS@ -EXTRA_LIBES = @EXTRA_LIBES@ @LIBS@ +EXTRA_LIBES = @EXTRA_LIBES@ @LIBS@ @PANGO_LIBS@ PACKAGE = @PACKAGE@ package = @package@ diff --git a/configure.in b/configure.in index ec0618de7a..9014e5c6d9 100644 --- a/configure.in +++ b/configure.in @@ -58,6 +58,17 @@ AC_FUNC_VPRINTF AC_CHECK_FUNCS([gettext isinf memmem snprintf vsnprintf gettext]) +# This is developer only anyway, help pkgconfig a bit +export PKG_CONFIG_PATH +PKG_CONFIG_PATH=/usr/lib/pkgconfig:$PKG_CONFIG_PATH +PKG_CONFIG_PATH=/opt/gnome/lib/pkgconfig:$PKG_CONFIG_PATH +PKG_CONFIG_PATH=$HOME/usr/pkg/gnome/lib/pkgconfig:$PKG_CONFIG_PATH +PKG_CONFIG_PATH=$HOME/usr/pkg/pango/lib/pkgconfig:$PKG_CONFIG_PATH + +#STEPMAKE_FREETYPE2 +STEPMAKE_GTK2 +STEPMAKE_PANGO + ## Optional tools for building documentation, website, extra fonts. # guile executable for some scripts diff --git a/lily/include/pangofc-afm-decoder.hh b/lily/include/pangofc-afm-decoder.hh new file mode 100644 index 0000000000..b9fb6162f3 --- /dev/null +++ b/lily/include/pangofc-afm-decoder.hh @@ -0,0 +1,88 @@ +/* + pangofc-afm-decoder.h -- + + source file of the GNU LilyPond music typesetter + + Copyright (C) 2004 Jan Nieuwenhuizen + + Note: in C and with explicit LPGL header for easier use with PANGO + outside of LilyPond. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#ifndef __PANGOFC_AFM_DECODER_H__ +#define __PANGOFC_AFM_DECODER_H__ + +#include "config.h" +#ifdef HAVE_PANGO_FC_FONT_MAP_ADD_DECODER_FIND_FUNC + +/* Note: in C and with explicit header for use outside of LilyPond. */ + +#include + +G_BEGIN_DECLS + +#define PANGO_TYPE_FC_AFM_DECODER (pango_fc_afm_decoder_get_type ()) +#define PANGO_FC_AFM_DECODER(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_FC_AFM_DECODER, PangoFcAfmDecoder)) +#define PANGO_IS_FC_AFM_DECODER(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_TYPE_FC_AFM_DECODER)) + +#define PANGO_FC_AFM_DECODER_CLASS(clss) (G_TYPE_CHECK_CLASS_CAST ((clss), PANGO_TYPE_FC_AFM_DECODER, PangoFcAfmDecoderClass)) +#define PANGO_IS_FC_AFM_DECODER_CLASS(clss) (G_TYPE_CHECK_CLASS_TYPE ((clss), PANGO_TYPE_FC_AFM_DECODER)) +#define PANGO_FC_AFM_DECODER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), PANGO_TYPE_FC_AFM_DECODER, PangoFcAfmDecoderClass)) + +typedef struct _PangoFcAfmDecoder PangoFcAfmDecoder; +typedef struct _PangoFcAfmDecoderClass PangoFcAfmDecoderClass; +typedef struct _PangoFcAfmDecoderPrivate PangoFcAfmDecoderPrivate; + + +/** + * PangoFcAfmDecoder: + * + * #PangoFcAfmDecoder implements an PangoFcDecoder for fonts + * with an afm mapping. + **/ +struct _PangoFcAfmDecoder +{ + PangoFcDecoder parent_instance; + + /*< private >*/ + PangoFcAfmDecoderPrivate *priv; +}; + +PangoFcAfmDecoder *pango_fc_afm_decoder_new (void); +PangoFcDecoder *pango_fc_afm_find_decoder (FcPattern *pattern, gpointer user_data); +void pango_fc_afm_add_decoder (char const *family_name); + +/** + * PangoFcAfmDecoderClass: + * @read_afm: Read afm mapping for #fcfont. + * + * Class structure for #PangoFcAfmDecoder. + **/ +struct _PangoFcAfmDecoderClass +{ + /*< private >*/ + PangoFcDecoderClass parent_class; + + /*< public >*/ + void (*read_afm) (PangoFcAfmDecoder *self, PangoFcFont *fcfont); +}; + +G_END_DECLS + +#endif /* HAVE_PANGO_FC_FONT_MAP_ADD_DECODER_FIND_FUNC */ + +#endif /* __PANGOFC_AFM_DECODER_H__ */ diff --git a/lily/lily-guile.cc b/lily/lily-guile.cc index c21e7e7a43..5c9d9b6b21 100644 --- a/lily/lily-guile.cc +++ b/lily/lily-guile.cc @@ -134,24 +134,20 @@ ly_scm2string (SCM s) char * ly_scm2newstr (SCM str, size_t *lenp) { - char *new_str; - size_t len; - SCM_ASSERT_TYPE (ly_c_string_p (str), str, SCM_ARG1, __FUNCTION__, "string"); - len = SCM_STRING_LENGTH (str); - new_str = (char *) malloc ((len + 1) * sizeof (char)); - - if (new_str == NULL) - return NULL; - - memcpy (new_str, SCM_STRING_CHARS (str), len); - new_str[len] = '\0'; - - if (lenp != NULL) - *lenp = len; + size_t len = SCM_STRING_LENGTH (str); + if (char *new_str = (char *) malloc ((len + 1) * sizeof (char))) + { + memcpy (new_str, SCM_STRING_CHARS (str), len); + new_str[len] = '\0'; - return new_str; + if (lenp) + *lenp = len; + + return new_str; + } + return 0; } SCM @@ -776,9 +772,26 @@ alist_to_hashq (SCM alist) /* Debugging mem leaks: */ -LY_DEFINE (ly_protects, "ly:protects", 0, 0, 0, (), +LY_DEFINE (ly_protects, "ly:protects", + 0, 0, 0, (), "Return hash of protected objects.") { return scm_protects; } #endif + + +#ifdef HAVE_PANGO_FC_FONT_MAP_ADD_DECODER_FIND_FUNC + +#include "pangofc-afm-decoder.hh" + +LY_DEFINE (ly_pango_add_afm_decoder, "ly:pango-add-afm-decoder", + 1, 0, 0, (SCM font_family), + "Add pango afm decoder for FONT-FAMILY.") +{ + SCM_ASSERT_TYPE (ly_c_string_p (font_family), font_family, SCM_ARG1, __FUNCTION__, "font_family"); + pango_fc_afm_add_decoder (ly_scm2newstr (font_family, 0)); + return SCM_UNSPECIFIED; +} + +#endif diff --git a/lily/pangofc-afm-decoder.cc b/lily/pangofc-afm-decoder.cc new file mode 100644 index 0000000000..184418bfbf --- /dev/null +++ b/lily/pangofc-afm-decoder.cc @@ -0,0 +1,312 @@ +/* + pango-afm-decoder.c -- AFM fontencoding for Pango fontconfig + + source file of the GNU LilyPond music typesetter + + Copyright (C) 2004 Jan Nieuwenhuizen + + Note: in C and with explicit LPGL header for easier use with PANGO + outside of LilyPond. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#include "config.h" +#ifdef HAVE_PANGO_FC_FONT_MAP_ADD_DECODER_FIND_FUNC + +/* Need to access to PangoFcFont.full_pattern. */ +#define PANGO_ENABLE_BACKEND + +#include +#include +#include +#include +#include + +#include "pangofc-afm-decoder.hh" + +#ifdef DEBUG_PANGO_AFM +#include +#define dprintf(args...) fprintf (stderr, args) +#else +#define dprintf(args...) +#endif + +struct _PangoFcAfmDecoderPrivate +{ + GString encoding[256]; + //GString file_name; + char const *file_name; + PangoFcFont *fc_font; +}; + +static void pango_fc_afm_decoder_init (PangoFcAfmDecoder *fontmap); +static void pango_fc_afm_decoder_class_init (PangoFcAfmDecoderClass *clss); +static void pango_fc_afm_decoder_finalize (GObject *object); + +static FcCharSet *pango_fc_afm_get_charset (PangoFcFont *fcfont); +static PangoGlyph pango_fc_afm_get_glyph (PangoFcFont *fcfont, guint32 wc); +static void pango_fc_afm_decoder_set_file_name (PangoFcAfmDecoder *self, char const *file_name); + +static PangoFcDecoderClass *parent_class; + +#if 0 +/* ugly warning */ +G_DEFINE_TYPE (PangoFcAfmDecoder, pango_fc_afm_decoder, PANGO_TYPE_FC_DECODER); +#else +GType +pango_fc_afm_decoder_get_type (void) +{ + static GType object_type = 0; + + if (!object_type) + { + static const GTypeInfo object_info = + { + sizeof (PangoFcAfmDecoderClass), + (GBaseInitFunc) 0, + (GBaseFinalizeFunc) 0, + (GClassInitFunc) pango_fc_afm_decoder_class_init, + 0, /* class_finalize */ + 0, /* class_data */ + sizeof (PangoFcAfmDecoder), + 0, /* n_preallocs */ + (GInstanceInitFunc) pango_fc_afm_decoder_init, + 0, /* value table */ + }; + + object_type = g_type_register_static (PANGO_TYPE_FC_DECODER, + "PangoFcAfmDecoder", + &object_info, (GTypeFlags)0); + } + + return object_type; +} +#endif + +static void +pango_fc_afm_decoder_init (PangoFcAfmDecoder *fcafmdecoder) +{ + PangoFcAfmDecoderPrivate *priv = fcafmdecoder->priv; + priv = fcafmdecoder->priv + = G_TYPE_INSTANCE_GET_PRIVATE (fcafmdecoder, + PANGO_TYPE_FC_AFM_DECODER, + PangoFcAfmDecoderPrivate); + /* + init members + */ +} + +static void +pango_fc_afm_decoder_class_init (PangoFcAfmDecoderClass *clss) +{ + GObjectClass *object_class = G_OBJECT_CLASS (clss); + object_class->finalize = pango_fc_afm_decoder_finalize; + g_type_class_add_private (object_class, sizeof (PangoFcAfmDecoderPrivate)); + + PangoFcDecoderClass *parent_class = PANGO_FC_DECODER_CLASS (clss); + parent_class->get_charset = pango_fc_afm_get_charset; + parent_class->get_glyph = pango_fc_afm_get_glyph; +} + +static void +pango_fc_afm_decoder_finalize (GObject *object) +{ +#if 0 + PangoFcAfmDecoder *fcafmdecoder = PANGO_FC_AFM_DECODER (object); + PangoFcAfmDecoderPrivate *priv = fcafmdecoder->priv; +#endif + + /* + destroy members + */ + G_OBJECT_CLASS (parent_class)->finalize (object); +} + +static FcCharSet * +pango_fc_afm_get_charset (PangoFcFont *fcfont) +{ + //dprintf ("get charset: %s\n", fcfont->font_pattern); + dprintf ("get charset: \n"); +#if 0 + FcCharSet *charset = 0; + FcPatternGetCharSet (fcfont->font_pattern, FC_CHARSET, 0, &charset); +#else + /* Return plain, undecoded charset. + TODO: + - actually read AFM? + - caching? + - PUA mapping ? */ + (void) fcfont; + int i; + FcChar32 chr = 0; + FcCharSet *charset = FcCharSetCreate (); + for (i = 0; i < 256; i++) + if (!FcCharSetAddChar (charset, chr++)) + return 0; +#endif + return charset; +} + +static PangoGlyph +pango_fc_afm_get_glyph (PangoFcFont *fcfont, guint32 wc) +{ +#if 0 + XftFont *xft_font; + xft_font = XftFontOpenPattern (GDK_DISPLAY (), + FcPatternDuplicate (fcfont->font_pattern)); + PangoGlyph g = XftCharIndex (0, xft_font, wc); + dprintf ("get glyph! 0x%x --> 0x%x\n", wc, (unsigned)g); +#else + /* TODO: + - PUA mapping? + + Shortcut PUA mapping/AFM reading: The Feta charsets are encoded + without any gaps, starting at 0x21. *grin* */ + (void) fcfont; + return wc - 0x21; +#endif +} + +static void +pango_fc_afm_decoder_set_file_name (PangoFcAfmDecoder *self, + char const *file_name) +{ + self->priv->file_name = file_name; +} + +PangoFcAfmDecoder * +pango_fc_afm_decoder_new (void) +{ + return PANGO_FC_AFM_DECODER (g_object_new (PANGO_TYPE_FC_AFM_DECODER, 0)); +} + +PangoFcDecoder * +pango_fc_afm_find_decoder (FcPattern *pattern, gpointer user_data) +{ + FcChar8 *family_name; + + if (FcPatternGetString (pattern, FC_FAMILY, 0, &family_name) + == FcResultMatch) + { + dprintf ("Family name: %s\n", family_name); + dprintf ("user_data: %s\n", (char const*) user_data); + + if (!strcasecmp ((char const*) family_name, (char const*) user_data)) + { + PangoFcAfmDecoder *afm = pango_fc_afm_decoder_new (); + char const *file_name = "feta20.afm"; + pango_fc_afm_decoder_set_file_name (afm, file_name); + dprintf ("Adding decoder: %s\n", file_name); + return PANGO_FC_DECODER (afm); + } + } + return 0; +} + +void +pango_fc_afm_add_decoder (char const *family_name) +{ + PangoFcFontMap *fc_map + = PANGO_FC_FONT_MAP (pango_xft_get_font_map (GDK_DISPLAY (), 0)); + + pango_fc_font_map_add_decoder_find_func (fc_map, pango_fc_afm_find_decoder, + (gpointer)family_name, 0); +} + +#ifdef PANGO_FC_AFM_DECODER_TEST + +#include +#include +#include +#include +#include + +#include "pangofc-afm-decoder.h" + +#define CANVAS_WIDTH 600 +#define CANVAS_HEIGHT 300 + +static void +exit_clicked (GtkWidget *widget, gpointer data) +{ + gtk_widget_destroy (GTK_WIDGET (data)); + gtk_main_quit (); +} + +static gint +delete_event (GtkWidget *widget, GdkEvent *event, gpointer data) +{ + gtk_widget_destroy (widget); + gtk_main_quit (); + return TRUE; +} + +GnomeCanvas * +make_canvas (int width, int height) +{ + GtkWidget *window = gtk_window_new (GTK_WINDOW_TOPLEVEL); + GtkWidget *vbox = gtk_vbox_new (FALSE, 0); + GtkWidget *canvas = gnome_canvas_new (); + GtkWidget *hbox = gtk_hbox_new (TRUE, 0); + GtkWidget *button = gtk_button_new_with_label ("Exit"); + + gtk_container_add (GTK_CONTAINER (window), vbox); + gtk_widget_set_size_request (canvas, width, height); + gtk_box_pack_start (GTK_BOX (vbox), canvas, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0); + + gtk_signal_connect (GTK_OBJECT (button), "clicked", + (GtkSignalFunc) exit_clicked, window); + + gtk_signal_connect (GTK_OBJECT (window), "delete_event", + (GtkSignalFunc) delete_event, 0); + + gtk_widget_show_all (window); + return GNOME_CANVAS (canvas); +} + +#define gnome_canvas_text(x, y, font, text) \ + gnome_canvas_item_new (root, text_item, "x", x, "y", y, "font", font, \ + "text", text, "anchor", GTK_ANCHOR_SOUTH_WEST, \ + "fill_color", "black", 0) + +int +main (int argc, char **argv) +{ + gtk_init (&argc, &argv); + GnomeCanvas *canvas = make_canvas (CANVAS_WIDTH, CANVAS_HEIGHT); + + /* Register GNU LilyPond FETA AFM decoders. */ + pango_fc_afm_add_decoder ("lilypond-feta"); + pango_fc_afm_add_decoder ("lilypond-braces"); + pango_fc_afm_add_decoder ("lilypond-dyn"); + pango_fc_afm_add_decoder ("lilypond-parmesan"); + + int text_item = gnome_canvas_text_get_type (); + GnomeCanvasGroup *root = gnome_canvas_root (canvas); + char const *g_clef_utf8 = "\302\220"; + + gnome_canvas_text (45.0, 122.5, "LilyPond-feta-nummer 16", "3"); + gnome_canvas_text (45.0, 142.5, "LilyPond-feta-nummer, r 16", "4"); + gnome_canvas_text (10.0, 142.0, "LilyPond-feta, 32", g_clef_utf8); + + gtk_main (); + return 0; +} +#endif /* PANGO_FC_AFM_DECODER_TEST */ + +#endif /* HAVE_PANGO_FC_FONT_MAP_ADD_DECODER_FIND_FUNC */ diff --git a/scm/framework-gnome.scm b/scm/framework-gnome.scm index fb1c34914e..bc62a7aa22 100644 --- a/scm/framework-gnome.scm +++ b/scm/framework-gnome.scm @@ -139,7 +139,13 @@ ;; ugh. The GOOPS doc promises this is called automagically. (initialize go) - + + (map ly:pango-add-afm-decoder + '("lilypond-feta" + "lilypond-braces" + "lilypond-dyn" + "lilypond-parmesan")) + (dump-page go 0) ;; ugh diff --git a/stepmake/aclocal.m4 b/stepmake/aclocal.m4 index e1d0b37af1..a592a8ab0d 100644 --- a/stepmake/aclocal.m4 +++ b/stepmake/aclocal.m4 @@ -1014,3 +1014,91 @@ AC_DEFUN(STEPMAKE_WARN, [ ]) +dnl PKG_CHECK_MODULES(GSTUFF, gtk+-2.0 >= 1.3 glib = 1.3.4, action-if, action-not) +dnl defines GSTUFF_LIBS, GSTUFF_CFLAGS, see pkg-config man page +dnl also defines GSTUFF_PKG_ERRORS on error +AC_DEFUN(PKG_CHECK_MODULES, [ + succeeded=no + + if test -z "$PKG_CONFIG"; then + AC_PATH_PROG(PKG_CONFIG, pkg-config, no) + fi + + if test "$PKG_CONFIG" = "no" ; then + echo "*** The pkg-config script could not be found. Make sure it is" + echo "*** in your path, or set the PKG_CONFIG environment variable" + echo "*** to the full path to pkg-config." + echo "*** Or see http://www.freedesktop.org/software/pkgconfig to get pkg-config." + else + PKG_CONFIG_MIN_VERSION=0.9.0 + if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then + AC_MSG_CHECKING(for $2) + + if $PKG_CONFIG --exists "$2" ; then + AC_MSG_RESULT(yes) + succeeded=yes + + AC_MSG_CHECKING($1_CFLAGS) + $1_CFLAGS=`$PKG_CONFIG --cflags "$2"` + AC_MSG_RESULT($$1_CFLAGS) + + AC_MSG_CHECKING($1_LIBS) + $1_LIBS=`$PKG_CONFIG --libs "$2"` + AC_MSG_RESULT($$1_LIBS) + else + $1_CFLAGS="" + $1_LIBS="" + ## If we have a custom action on failure, don't print errors, but + ## do set a variable so people can do so. + $1_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$2"` + ifelse([$4], ,echo $$1_PKG_ERRORS,) + fi + + AC_SUBST($1_CFLAGS) + AC_SUBST($1_LIBS) + else + echo "*** Your version of pkg-config is too old. You need version $PKG_CONFIG_MIN_VERSION or newer." + echo "*** See http://www.freedesktop.org/software/pkgconfig" + fi + fi + + if test $succeeded = yes; then + ifelse([$3], , :, [$3]) + else + ifelse([$4], , AC_MSG_ERROR([Library requirements ($2) not met; consider adjusting the PKG_CONFIG_PATH environment variable if your libraries are in a nonstandard prefix so pkg-config can find them.]), [$4]) + fi +]) + + +AC_DEFUN(STEPMAKE_FREETYPE2, [ + PKG_CHECK_MODULES(FREETYPE2, freetype2 >= 0, have_freetype2=true, true) + if $have_freetype2 ; then + AC_DEFINE(HAVE_FREETYPE2) + AC_SUBST(FREETYPE2_CFLAGS) + AC_SUBST(FREETYPE2_LIBS) + fi +]) + +AC_DEFUN(STEPMAKE_GTK2, [ + PKG_CHECK_MODULES(GTK2, gtk+-2.0 >= 2.4.0, have_gtk2=true, true) + if $have_gtk2 ; then + AC_DEFINE(HAVE_GTK2) + AC_SUBST(GTK2_CFLAGS) + AC_SUBST(GTK2_LIBS) + fi +]) + +AC_DEFUN(STEPMAKE_PANGO, [ + PKG_CHECK_MODULES(PANGO, pango >= 1.5.0, have_pango_cvs=true, true) + if $have_pango_cvs ; then + AC_DEFINE(HAVE_PANGO_CVS) + PANGO_CFLAGS="$PANGO_CFLAGS $GTK2_CFLAGS" + PANGO_LIBS="$PANGO_LIBS $GTK2_LIBS" + CPPFLAGS="$PANGO_CFLAGS $CPPFLAGS" + LIBS="$PANGO_LIBS $LIBS" + AC_CHECK_HEADERS([pango/pangofc-fontmap.h]) + AC_CHECK_FUNCS([pango_fc_font_map_add_decoder_find_func]) + AC_SUBST(PANGO_CFLAGS) + AC_SUBST(PANGO_LIBS) +fi +]) diff --git a/stepmake/autogen.sh b/stepmake/autogen.sh index ef2afec2d7..6678367b65 100755 --- a/stepmake/autogen.sh +++ b/stepmake/autogen.sh @@ -3,6 +3,9 @@ srcdir=`dirname $0` +case $1 in + --noconf*) NOCONFIGURE=true;; +esac if [ ! -f aclocal.m4 -o stepmake/aclocal.m4 -nt aclocal.m4 ]; then echo "stepmake/aclocal.m4 is newer. Copying file."