| dnl |
| dnl These are the facilities for generating Makefile.am.features and |
| dnl Makefile.win32.features files. |
| 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([AUX-DIR]) |
| 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 non-builtin features |
| CAIRO_FEATURE_HOOK_REGISTER(*,!always,*, |
| [dnl |
| AM_CONDITIONAL(cr_feature_tag, [test "x$use_]cr_feature[" = xyes])dnl |
| ])dnl |
| |
| CAIRO_CONFIG_MAKEFILE_PRIVATE_WIN32([_],[$1],[],[[# Generated by configure. Modify to customize.]])dnl |
| CAIRO_MAKEFILE_ACCUMULATE_FEATURE([_],*,!always,*,[cr_feature_tag=m4_if(cr_feature_default,[yes],1,[m4_bmatch(cr_feature,[win32],1,0)])])dnl |
| ])dnl |
| |
| dnl =========================================================================== |
| |
| m4_define([_CAIRO_MAKEFILES])dnl |
| |
| dnl |
| dnl CAIRO_CONFIG_MAKEFILE(TAG, DIR, [SUFFIX], [HEADER]) |
| dnl |
| dnl Create DIR/Makefile.{am,win32}.SUFFIX files |
| dnl TAG is a TAG used by other CAIRO_MAKEFILE_* macros to append to these |
| dnl Makefile's. |
| dnl |
| dnl HEADER is appended at the top of the Makefile's. If HEADER is not |
| dnl set, the generic "Generated by configure. Do not edit." comment |
| dnl is added. |
| dnl |
| AC_DEFUN([CAIRO_CONFIG_MAKEFILE], |
| [dnl |
| m4_append_uniq([_CAIRO_MAKEFILES], [$1], [ ])dnl |
| CAIRO_CONFIG_MAKEFILE_PRIVATE([$1], [$2], [$3], [$4])dnl |
| ])dnl |
| |
| dnl Like CAIRO_CONFIG_MAKEFILE but only generate win32 makefile |
| AC_DEFUN([CAIRO_CONFIG_MAKEFILE_WIN32], |
| [dnl |
| m4_append_uniq([_CAIRO_MAKEFILES], [$1], [ ])dnl |
| CAIRO_CONFIG_MAKEFILE_PRIVATE_WIN32([$1], [$2], [$3], [$4])dnl |
| ])dnl |
| |
| dnl Like CAIRO_CONFIG_MAKEFILE but only generate automake makefile |
| AC_DEFUN([CAIRO_CONFIG_MAKEFILE_AMAKE], |
| [dnl |
| m4_append_uniq([_CAIRO_MAKEFILES], [$1], [ ])dnl |
| CAIRO_CONFIG_MAKEFILE_PRIVATE_AMAKE([$1], [$2], [$3], [$4])dnl |
| ])dnl |
| |
| dnl |
| dnl CAIRO_CONFIG_MAKEFILE_PRIVATE(TAG, DIR, [SUFFIX], [HEADER]) |
| dnl |
| dnl Like CAIRO_CONFIG_MAKEFILE but this makefile tag won't match |
| dnl against '*' in makefile accumulators. |
| dnl |
| AC_DEFUN([CAIRO_CONFIG_MAKEFILE_PRIVATE], |
| [dnl |
| m4_ifdef([cr_make_$1_dir], |
| [m4_fatal([Makefile `$1' already registered])])dnl |
| m4_define([cr_make_$1_dir],[$2])dnl |
| |
| CAIRO_CONFIG_MAKEFILE_PRIVATE_AMAKE([$1], [$2], [$3], [$4])dnl |
| CAIRO_CONFIG_MAKEFILE_PRIVATE_WIN32([$1], [$2], [$3], [$4])dnl |
| ])dnl |
| |
| dnl Like CAIRO_CONFIG_MAKEFILE_PRIVATE but only generate automake makefile |
| AC_DEFUN([CAIRO_CONFIG_MAKEFILE_PRIVATE_AMAKE], |
| [dnl |
| m4_ifdef([cr_make_$1_dir_amake], |
| [m4_fatal([Automake makefile `$1' already registered])])dnl |
| m4_define([cr_make_$1_dir_amake],[$2])dnl |
| m4_define([cr_make_$1_dir_any],[$2])dnl |
| |
| dnl Accumulators |
| CAIRO_ACCUMULATORS_REGISTER(MAKEFILE_$1_AMAKE, m4_newline, m4_default([$4],[[# Generated by configure. Do not edit.]])m4_newline)dnl |
| |
| dnl Generate |
| CAIRO_CONFIG_COMMANDS([$srcdir/]m4_if([$2],[.],,[$2/])[Makefile.am.]m4_default([$3],[features]), |
| [echo "$CAIRO_MAKEFILE_$1_AMAKE"], |
| [CAIRO_MAKEFILE_$1_AMAKE='$CAIRO_MAKEFILE_$1_AMAKE'])dnl |
| ])dnl |
| |
| dnl Like CAIRO_CONFIG_MAKEFILE_PRIVATE but only generate win32 makefile |
| AC_DEFUN([CAIRO_CONFIG_MAKEFILE_PRIVATE_WIN32], |
| [dnl |
| m4_ifdef([cr_make_$1_dir_win32], |
| [m4_fatal([Win32 makefile `$1' already registered])])dnl |
| m4_define([cr_make_$1_dir_win32],[$2])dnl |
| m4_define([cr_make_$1_dir_any],[$2])dnl |
| |
| dnl Accumulators |
| CAIRO_ACCUMULATORS_REGISTER(MAKEFILE_$1_WIN32, m4_newline, m4_default([$4],[[# Generated by configure. Do not edit.]])m4_newline)dnl |
| |
| dnl Generate |
| CAIRO_CONFIG_COMMANDS([$srcdir/]m4_if([$2],[.],,[$2/])[Makefile.win32.]m4_default([$3],[features]), |
| [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_any],,[m4_fatal([Makefile `]$1[' not defined.])])dnl |
| ])dnl |
| |
| |
| dnl |
| dnl CAIRO_MAKEFILE_INCLUDE(TAG, FILE) |
| dnl |
| dnl Include FILE from Makefile's for TAG. FILE should be placed |
| dnl relative to directory for TAG. If TAG is *, FILE is included from |
| dnl all Makefile's. |
| dnl |
| AC_DEFUN([CAIRO_MAKEFILE_INCLUDE], |
| [dnl |
| m4_if([$1],[*],,[_CAIRO_MAKEFILE_CHECK([$1])])dnl |
| m4_foreach_w([cr_makefile], m4_if([$1],[*],_CAIRO_MAKEFILES,[$1]), |
| [dnl |
| m4_ifdef([cr_make_]cr_makefile[_dir_amake],dnl |
| [CAIRO_ACCUMULATE([MAKEFILE_]cr_makefile[_AMAKE],[include $(top_srcdir)/cr_make_]cr_makefile[_dir_amake/$2]m4_newline)] |
| )dnl |
| m4_ifdef([cr_make_]cr_makefile[_dir_win32],dnl |
| [CAIRO_ACCUMULATE([MAKEFILE_]cr_makefile[_WIN32],[ifeq ($(top_srcdir),)]m4_newline[include $2]m4_newline[else]m4_newline[include $(top_srcdir)/cr_make_]cr_makefile[_dir_win32/$2]m4_newline[endif]m4_newline)] |
| )dnl |
| ])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 |
| m4_ifdef([cr_make_]cr_makefile[_dir_amake],dnl |
| [CAIRO_ACCUMULATE_UNQUOTED_UNCHECKED([MAKEFILE_]cr_makefile[_AMAKE], [$cr_make_tmp])] |
| )dnl |
| m4_ifdef([cr_make_]cr_makefile[_dir_win32],dnl |
| [CAIRO_ACCUMULATE_UNQUOTED_UNCHECKED([MAKEFILE_]cr_makefile[_WIN32], [$cr_make_tmp])] |
| )dnl |
| ])dnl |
| ])dnl |
| |
| m4_define([_CAIRO_MAKEFILE_ACCUMULATE_FEATURE], |
| [dnl |
| dnl Don't do a conditional for default=always features |
| m4_pushdef([cr_mk_acc_feat_enabled],m4_if([$2],[yes],[m4_if(cr_feature_default,[always],[*],[$2])],[$2]))dnl |
| m4_case(cr_mk_acc_feat_enabled, |
| [*],, |
| [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(cr_mk_acc_feat_enabled, |
| [*],, |
| [yes], [CAIRO_ACCUMULATE([$1], [$5])], |
| [no], [CAIRO_ACCUMULATE([$1], [$5])], |
| [m4_fatal([Invalid ENABLED value `]$2['])])dnl |
| m4_popdef([cr_mk_acc_feat_enabled])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])[[) |
| m4_ifdef([cr_make_]cr_makefile[_dir_amake], |
| [_CAIRO_MAKEFILE_ACCUMULATE_FEATURE( |
| [MAKEFILE_]cr_makefile[_AMAKE], |
| [$2], |
| [if ]cr_feature_tag, [else], [endif], |
| [$cr_make_tmp]) |
| ])dnl |
| m4_ifdef([cr_make_]cr_makefile[_dir_win32], |
| [_CAIRO_MAKEFILE_ACCUMULATE_FEATURE( |
| [MAKEFILE_]cr_makefile[_WIN32], |
| [$2], |
| [ifeq ($(]cr_feature_tag[),1)], [else], [endif], |
| [$cr_make_tmp])dnl |
| ])dnl |
| ])dnl |
| ])dnl |
| ])dnl |
| |
| m4_define([cr_make_acc_counter])dnl |