From ebb5eb57b7cab7e5fc4b3215969a459f49d95fbb Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Mon, 22 Sep 2008 21:18:09 -0400 Subject: [PATCH] Generate build/Makefile.win32.features --- Makefile.am | 10 ++++++- boilerplate/Makefile.am | 7 ++--- build/Makefile.win32.common | 6 ++-- build/aclocal.makefile.m4 | 57 +++++++++++++++++++++++++++---------- build/configure.ac.features | 5 +++- src/Makefile.am | 8 ++++-- 6 files changed, 67 insertions(+), 26 deletions(-) diff --git a/Makefile.am b/Makefile.am index d875c3b8f..fd1b223c9 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,5 +1,14 @@ include $(top_srcdir)/build/Makefile.am.common +EXTRA_DIST += \ + Makefile.win32 \ + build/Makefile.win32.common \ + build/Makefile.win32.features \ + $(NULL) +MAINTAINERCLEANFILES += \ + $(srcdir)/build/Makefile.win32.features \ + $(NULL) + ACLOCAL_AMFLAGS = -I build DIST_SUBDIRS = src doc util boilerplate test perf @@ -33,7 +42,6 @@ EXTRA_DIST += \ COPYING-MPL-1.1 \ HACKING \ INSTALL \ - Makefile.win32 \ NEWS \ PORTING_GUIDE \ README \ diff --git a/boilerplate/Makefile.am b/boilerplate/Makefile.am index 80e3e6ddc..70911acf0 100644 --- a/boilerplate/Makefile.am +++ b/boilerplate/Makefile.am @@ -3,6 +3,9 @@ include $(top_srcdir)/build/Makefile.am.common include $(srcdir)/Makefile.am.features +EXTRA_DIST += Makefile.win32 Makefile.win32.features +MAINTAINERCLEANFILES += $(srcdir)/Makefile.win32.features + AM_CPPFLAGS = \ -I$(srcdir) \ -I$(top_builddir)/src \ @@ -10,10 +13,6 @@ AM_CPPFLAGS = \ $(CAIRO_CFLAGS) \ $(NULL) -EXTRA_DIST += Makefile.win32 -EXTRA_DIST += Makefile.win32.config -MAINTAINERCLEANFILES += $(srcdir)/Makefile.win32.config - EXTRA_LTLIBRARIES += libcairoboilerplate.la libcairoboilerplate_la_SOURCES = \ diff --git a/build/Makefile.win32.common b/build/Makefile.win32.common index 09cafa9be..46effba0a 100644 --- a/build/Makefile.win32.common +++ b/build/Makefile.win32.common @@ -1,3 +1,4 @@ +include $(top_srcdir)/build/Makefile.win32.features CC := cl LINK := link @@ -8,8 +9,9 @@ else OPT := -O2 endif -PIXMAN_CFLAGS := -I../../pixman/pixman -PIXMAN_LIBS := ../../pixman/pixman/$(CFG)/pixman-1.lib +PIXMAN_DIR = $(top_srcdir)/../pixman +PIXMAN_CFLAGS := -I$(PIXMAN_DIR)/pixman +PIXMAN_LIBS := $(PIXMAN_DIR)/pixman/$(CFG)/pixman-1.lib EXE_LDFLAGS = libpng.lib zlib.lib gdi32.lib msimg32.lib user32.lib diff --git a/build/aclocal.makefile.m4 b/build/aclocal.makefile.m4 index df24c0853..70777810d 100644 --- a/build/aclocal.makefile.m4 +++ b/build/aclocal.makefile.m4 @@ -19,7 +19,7 @@ m4_define([cr_feature_tag], dnl =========================================================================== dnl -dnl CAIRO_INIT_MAKEFILES() +dnl CAIRO_INIT_MAKEFILES([AUX-DIR]) dnl dnl Sets up automake and win32 conditionals for all features dnl @@ -34,8 +34,8 @@ AC_DEFUN([CAIRO_INIT_MAKEFILES], AM_CONDITIONAL(cr_feature_tag, [test "x$use_]cr_feature[" = xyes])dnl ])dnl - dnl An empty line per feature for readability - CAIRO_MAKEFILE_ACCUMULATE_FEATURE(*,*,*,*,[])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 =========================================================================== @@ -43,34 +43,38 @@ dnl =========================================================================== m4_define([_CAIRO_MAKEFILES])dnl dnl -dnl CAIRO_CONFIG_MAKEFILE(TAG, DIR) +dnl CAIRO_CONFIG_MAKEFILE(TAG, DIR, [SUFFIX], [HEADER]) dnl -dnl Create DIR/Makefile.*.features files +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])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])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])dnl + CAIRO_CONFIG_MAKEFILE_PRIVATE_AMAKE([$1], [$2], [$3], [$4])dnl ])dnl dnl -dnl CAIRO_CONFIG_MAKEFILE_PRIVATE(TAG, DIR) +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. @@ -81,8 +85,8 @@ AC_DEFUN([CAIRO_CONFIG_MAKEFILE_PRIVATE], [m4_fatal([Makefile `$1' already registered])])dnl m4_define([cr_make_$1_dir],[$2])dnl - CAIRO_CONFIG_MAKEFILE_PRIVATE_AMAKE([$1],[$2])dnl - CAIRO_CONFIG_MAKEFILE_PRIVATE_WIN32([$1],[$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 @@ -94,10 +98,10 @@ AC_DEFUN([CAIRO_CONFIG_MAKEFILE_PRIVATE_AMAKE], m4_define([cr_make_$1_dir_any],[$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_AMAKE, m4_newline, m4_default([$4],[[# Generated by configure. Do not edit.]])m4_newline)dnl dnl Generate - CAIRO_CONFIG_COMMANDS([$srcdir/$2/Makefile.am.features], + 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 @@ -111,10 +115,10 @@ AC_DEFUN([CAIRO_CONFIG_MAKEFILE_PRIVATE_WIN32], m4_define([cr_make_$1_dir_any],[$2])dnl dnl Accumulators - CAIRO_ACCUMULATORS_REGISTER(MAKEFILE_$1_WIN32, m4_newline, [# Generated by configure. Do not edit.]m4_newline[ifeq ($(top_srcdir),)]m4_newline[include Makefile.sources]m4_newline[else]m4_newline[include $(top_srcdir)/$2/Makefile.sources]m4_newline[endif]m4_newline)dnl + 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/$2/Makefile.win32.features], + 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 @@ -125,6 +129,29 @@ m4_define([_CAIRO_MAKEFILE_CHECK], 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 diff --git a/build/configure.ac.features b/build/configure.ac.features index 13b7edebf..e9d8f22cc 100644 --- a/build/configure.ac.features +++ b/build/configure.ac.features @@ -56,9 +56,12 @@ dnl dnl Generate {src,boilerplate}/Makefile.{am,win32}.config dnl -CAIRO_INIT_MAKEFILES() +CAIRO_INIT_MAKEFILES([build]) CAIRO_CONFIG_MAKEFILE([cairo], [src])dnl CAIRO_CONFIG_MAKEFILE([cairo_boilerplate], [boilerplate])dnl +CAIRO_MAKEFILE_INCLUDE(*,[Makefile.sources])dnl +dnl An empty line per feature for readability +CAIRO_MAKEFILE_ACCUMULATE_FEATURE(*,*,*,*,[])dnl dnl Collect list of all supported public headers diff --git a/src/Makefile.am b/src/Makefile.am index ebe501f71..83eee4c98 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -3,6 +3,9 @@ include $(top_srcdir)/build/Makefile.am.common include $(srcdir)/Makefile.am.features +EXTRA_DIST += Makefile.win32 Makefile.win32.features +MAINTAINERCLEANFILES += $(srcdir)/Makefile.win32.features + AM_CPPFLAGS = -I$(srcdir) $(CAIRO_CFLAGS) if OS_WIN32 @@ -10,9 +13,8 @@ export_symbols = -export-symbols cairo.def cairo_def_dependency = cairo.def endif -EXTRA_DIST += Makefile.win32 -EXTRA_DIST += cairo-supported-features.h cairo-features-win32.h Makefile.win32.config -MAINTAINERCLEANFILES += cairo-supported-features.h $(srcdir)/cairo-features-win32.h $(srcdir)/Makefile.win32.config +EXTRA_DIST += cairo-supported-features.h cairo-features-win32.h +MAINTAINERCLEANFILES += cairo-supported-features.h $(srcdir)/cairo-features-win32.h $(top_builddir)/config.h: $(top_srcdir)/config.h.in cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) config.h