dnl dnl These are the facilities for generating Makefile.am.config and dnl Makefile.win32.config files. dnl dnl dnl CAIRO_FEATURE_HOOK_REGISTER_WIN32(WHAT, COMMANDS) dnl dnl Like CAIRO_FEATURE_HOOK_REGISTER but only applies to features that dnl are by default enabled on win32 build system and match WHAT. dnl AC_DEFUN([CAIRO_FEATURE_HOOK_REGISTER_WIN32], [dnl dnl builtin features CAIRO_FEATURE_HOOK_REGISTER([*], always, [$1], [$2])dnl dnl recommended features CAIRO_FEATURE_HOOK_REGISTER([*], yes, [$1], [$2])dnl dnl native win32 features CAIRO_FEATURE_HOOK_REGISTER([*], auto, [$1], [m4_bmatch(cr_feature, [win32], [$2])])dnl ])dnl dnl =========================================================================== dnl dnl Define cr_feature_tag ala other cr_feature_* macros dnl Expands to CAIRO_HAS_FEATURE_ID dnl m4_define([_CAIRO_BUILD_FEATURE_TAG_NORMALIZED], [CAIRO_HAS_[$1]m4_bmatch([$1],[$2$],,[$2])])dnl m4_define([_CAIRO_BUILD_FEATURE_TAG], [_CAIRO_BUILD_FEATURE_TAG_NORMALIZED(AS_TR_CPP([$1]),AS_TR_CPP(m4_ifval([$2],[ $2])))])dnl m4_define([cr_feature_tag], [_CAIRO_BUILD_FEATURE_TAG(cr_feature,cr_feature_what)])dnl dnl =========================================================================== dnl dnl CAIRO_INIT_MAKEFILES() dnl dnl Sets up automake and win32 conditionals for all features dnl AC_DEFUN([CAIRO_INIT_MAKEFILES], [dnl dnl Allow feature tags in the output m4_pattern_allow(^CAIRO_HAS_)dnl dnl Automake conditionals for all features CAIRO_FEATURE_HOOK_REGISTER(*,*,*, [dnl AM_CONDITIONAL(cr_feature_tag, [test "x$use_]cr_feature[" = xyes])dnl ])dnl dnl Turn win32 features on CAIRO_FEATURE_HOOK_REGISTER_WIN32(*, [_CAIRO_MAKEFILES_WIN32_DEFINE_FEATURE])dnl ])dnl m4_define([_CAIRO_MAKEFILES_WIN32_DEFINE_FEATURE], [ m4_foreach_w([cr_makefile], _CAIRO_MAKEFILES, [dnl CAIRO_ACCUMULATE_UNQUOTED_UNCHECKED([MAKEFILE_]cr_makefile[_WIN32], [cr_feature_tag = 1])dnl ])dnl ])dnl dnl =========================================================================== m4_define([_CAIRO_MAKEFILES])dnl dnl dnl CAIRO_CONFIG_MAKEFILE(TAG, DIR) dnl dnl Create DIR/Makefile.*.config files dnl TAG is a TAG used by other CAIRO_MAKEFILE_* macros to append to these dnl Makefile's. dnl AC_DEFUN([CAIRO_CONFIG_MAKEFILE], [dnl m4_append_uniq([_CAIRO_MAKEFILES], [$1], [ ],, [m4_fatal([Makefile `$1' already registered])])dnl dnl Remember directory for this makefile tag m4_define([cr_make_$1_dir],[$2])dnl dnl Accumulators CAIRO_ACCUMULATORS_REGISTER(MAKEFILE_$1_AMAKE, m4_newline, [# Generated by configure. Do not edit.]m4_newline[include $(top_srcdir)/$2/Makefile.sources]m4_newline)dnl CAIRO_ACCUMULATORS_REGISTER(MAKEFILE_$1_WIN32, m4_newline, [# Generated by configure. Do not edit.]m4_newline[include Makefile.sources]m4_newline)dnl dnl Generate CAIRO_CONFIG_COMMANDS([$srcdir/$2/Makefile.am.config], [echo "$CAIRO_MAKEFILE_$1_AMAKE"], [CAIRO_MAKEFILE_$1_AMAKE='$CAIRO_MAKEFILE_$1_AMAKE'])dnl CAIRO_CONFIG_COMMANDS([$srcdir/$2/Makefile.win32.config], [echo "$CAIRO_MAKEFILE_$1_WIN32"], [CAIRO_MAKEFILE_$1_WIN32='$CAIRO_MAKEFILE_$1_WIN32'])dnl ])dnl m4_define([_CAIRO_MAKEFILE_CHECK], [dnl m4_ifdef([cr_make_$1_dir],,[m4_fatal([Makefile `]$1[' not defined.])])dnl ])dnl m4_pattern_allow([cr_make_tmp]) dnl dnl CAIRO_MAKEFILE_ACCUMULATE(TAG, CONTENT) dnl dnl Accumulates CONTENT to Makefile's for TAG. If TAG is *, dnl CONTENT is added to all Makefile's. dnl AC_DEFUN([CAIRO_MAKEFILE_ACCUMULATE], [dnl m4_if([$1],[*],,[_CAIRO_MAKEFILE_CHECK([$1])])dnl m4_foreach_w([cr_makefile], m4_if([$1],[*],_CAIRO_MAKEFILES,[$1]), [dnl m4_pushdef([cr_make_acc_contents],[$2])dnl cr_make_tmp=_CAIRO_SH_ESCAPE(cr_make_acc_contents(cr_makefile)) m4_popdef([cr_make_acc_contents])dnl CAIRO_ACCUMULATE_UNQUOTED_UNCHECKED([MAKEFILE_]cr_makefile[_AMAKE], [$cr_make_tmp])dnl CAIRO_ACCUMULATE_UNQUOTED_UNCHECKED([MAKEFILE_]cr_makefile[_WIN32], [$cr_make_tmp])dnl ])dnl ])dnl m4_define([_CAIRO_MAKEFILE_ACCUMULATE_FEATURE], [dnl m4_case([$2], [*],, [yes], [CAIRO_ACCUMULATE([$1], [$3])], [no], [CAIRO_ACCUMULATE([$1], [$3]m4_newline[$4])], [m4_fatal([Invalid ENABLED value `]$2['])])dnl CAIRO_ACCUMULATE_UNQUOTED_UNCHECKED([$1], [$6])dnl m4_case([$2], [*],, [yes], [CAIRO_ACCUMULATE([$1], [$5])], [no], [CAIRO_ACCUMULATE([$1], [$5])], [m4_fatal([Invalid ENABLED value `]$2['])])dnl ])dnl dnl dnl CAIRO_MAKEFILE_ACCUMULATE_FEATURE(TAG, ENABLED, DEFAULT, WHAT, CONTENT) dnl dnl Accumulates CONTENT to Makefile's for TAG for each feature matching dnl ENABLED, DEFAULT, and WHAT. Those parameters are similar to those dnl passed to CAIRO_FEATURE_HOOK_REGISTER. dnl If TAG is *, CONTENT is added to all Makefile's. dnl AC_DEFUN([CAIRO_MAKEFILE_ACCUMULATE_FEATURE], [dnl m4_if([$1],[*],,[_CAIRO_MAKEFILE_CHECK([$1])])dnl m4_append([cr_make_acc_counter],[1],[])dnl m4_define([cr_make_acc_contents]m4_len(cr_make_acc_counter), [$5])dnl CAIRO_FEATURE_HOOK_REGISTER(*,[$3],[$4], [dnl m4_foreach_w([cr_makefile], m4_if([$1],[*],_CAIRO_MAKEFILES,[$1]), [dnl cr_make_tmp=_CAIRO_SH_ESCAPE(cr_make_acc_contents]]m4_len(cr_make_acc_counter)([[cr_makefile,]][$][1],[$][2],[$][3],[$][4])[[) _CAIRO_MAKEFILE_ACCUMULATE_FEATURE( [MAKEFILE_]cr_makefile[_AMAKE], [$2], [if ]cr_feature_tag, [else], [endif], [$cr_make_tmp])dnl _CAIRO_MAKEFILE_ACCUMULATE_FEATURE( [MAKEFILE_]cr_makefile[_WIN32], [$2], [ifeq ($(]cr_feature_tag[),1)], [else], [endif], [$cr_make_tmp])dnl ])dnl ])dnl ])dnl m4_define([cr_make_acc_counter])dnl