build: Move marshallers and enum types rules out

The rules to create signal marshallers and enumeration GTypes are
usually copied and pasted all over different projects, though they
are pretty generic and, given a little bit of parametrization, can
be put in separate Makefile.am files and included whenever needed.
This commit is contained in:
Emmanuele Bassi 2009-10-13 17:27:19 +01:00
parent 0e33c10048
commit 46b736f42e
4 changed files with 106 additions and 56 deletions

View File

@ -2,6 +2,8 @@ NULL =
EXTRA_DIST = \ EXTRA_DIST = \
Makefile.am.silent \ Makefile.am.silent \
Makefile.am.marshal \
Makefile.am.enums \
dolt.m4 \ dolt.m4 \
introspection.m4 \ introspection.m4 \
gtk-doc.m4 \ gtk-doc.m4 \

View File

@ -0,0 +1,43 @@
# Rules for generating enumeration types using glib-mkenums
#
# Define:
# glib_enum_h = header template file
# glib_enum_c = source template file
# glib_enum_headers = list of headers to parse
#
# before including Makefile.am.enums. You will also need to have
# the following targets already defined:
#
# CLEANFILES
# DISTCLEANFILES
# BUILT_SOURCES
# EXTRA_DIST
#
# Author: Emmanuele Bassi <ebassi@linux.intel.com>
enum_tmpl_h=$(glib_enum_h:.h=.h.in)
enum_tmpl_c=$(glib_enum_c:.c=.c.in)
CLEANFILES += stamp-enum-types
DISTCLEANFILES += $(glib_enum_h) $(glib_enum_c)
BUILT_SOURCES += $(glib_enum_h) $(glib_enum_c)
EXTRA_DIST += $(enum_tmpl_h) $(enum_tmpl_c)
stamp-enum-types: $(glib_enum_headers)
$(QUIET_GEN)$(GLIB_MKENUMS) \
--template $(enum_tmpl_h) \
$(glib_enum_headers) > xgen-eh \
&& (cmp -s xgen-eh $(glib_enum_h) || cp -f xgen-eh $(glib_enum_h)) \
&& rm -f xgen-eh \
&& echo timestamp > $(@F)
$(glib_enum_h): stamp-enum-types
@true
$(glib_enum_c): $(glib_enum_h)
$(QUIET_GEN)$(GLIB_MKENUMS) \
--template $(enum_tmpl_c) \
$(glib_enum_headers) > xgen-ec \
&& cp -f xgen-ec $(glib_enum_c) \
&& rm -f xgen-ec

View File

@ -0,0 +1,44 @@
# Rules for generating marshal files using glib-genmarshal
#
# Define:
# glib_marshal_list = marshal list file
# glib_marshal_prefix = prefix for marshal functions
#
# before including Makefile.am.marshal. You will also need to have
# the following targets already defined:
#
# CLEANFILES
# DISTCLEANFILES
# BUILT_SOURCES
# EXTRA_DIST
#
# Author: Emmanuele Bassi <ebassi@linux.intel.com>
marshal_h = $(glib_marshal_list:.list=.h)
marshal_c = $(glib_marshal_list:.list=.c)
CLEANFILES += stamp-marshal
DISTCLEANFILES += $(marshal_h) $(marshal_c)
BUILT_SOURCES += $(marshal_h) $(marshal_c)
EXTRA_DIST += $(glib_marshal_list)
stamp-marshal: $(glib_marshal_list)
$(QUIET_GEN)$(GLIB_GENMARSHAL) \
--prefix=$(glib_marshal_prefix) \
--header \
$(glib_marshal_list) > xgen-mh \
&& (cmp -s xgen-mh $(marshal_h) || cp -f xgen-mh $(marshal_h)) \
&& rm -f xgen-mh \
&& echo timestamp > $(@F)
$(marshal_h): stamp-marshal
@true
$(marshal_c): $(marshal_h)
$(QUIET_GEN)(echo "#include \"$(marshal_h)\"" ; \
$(GLIB_GENMARSHAL) \
--prefix=$(glib_marshal_prefix) \
--body \
$(glib_marshal_list)) > xgen-mc \
&& cp xgen-mc $(marshal_c) \
&& rm -f xgen-mc

View File

@ -16,10 +16,11 @@ DIST_SUBDIRS = pango glx eglx eglnative cogl sdl json osx x11 win32 fruity
target = $(clutterbackend) target = $(clutterbackend)
MARSHALFILES = clutter-marshal.c clutter-marshal.h # common definitions
ENUMFILES = clutter-enum-types.c clutter-enum-types.h CLEANFILES =
STAMPFILES = stamp-clutter-marshal.h stamp-clutter-enum-types.h DISTCLEANFILES =
EXTRA_DIST =
BUILT_SOURCES =
INCLUDES = \ INCLUDES = \
-I$(top_srcdir) \ -I$(top_srcdir) \
-I$(top_srcdir)/clutter/cogl \ -I$(top_srcdir)/clutter/cogl \
@ -46,8 +47,6 @@ LDADD = \
-rpath $(libdir) \ -rpath $(libdir) \
$(NULL) $(NULL)
BUILT_SOURCES = $(MARSHALFILES) $(ENUMFILES)
# please, keep this sorted alphabetically # please, keep this sorted alphabetically
source_h = \ source_h = \
$(srcdir)/clutter-actor.h \ $(srcdir)/clutter-actor.h \
@ -100,44 +99,16 @@ source_h = \
$(top_builddir)/clutter/clutter-version.h \ $(top_builddir)/clutter/clutter-version.h \
$(NULL) $(NULL)
clutter-marshal.h: stamp-clutter-marshal.h # glib-genmarshal rules
@true glib_marshal_list = $(srcdir)/clutter-marshal.list
stamp-clutter-marshal.h: clutter-marshal.list glib_marshal_prefix = clutter_marshal
$(QUIET_GEN)$(GLIB_GENMARSHAL) \ include $(top_srcdir)/build/autotools/Makefile.am.marshal
--prefix=clutter_marshal \
--header \
$(srcdir)/clutter-marshal.list > xgen-cmh \
&& (cmp -s xgen-cmh clutter-marshal.h || cp xgen-cmh clutter-marshal.h ) \
&& rm -f xgen-cmh \
&& echo timestamp > $(@F)
clutter-marshal.c: clutter-marshal.h Makefile # glib-mkenums rules
$(QUIET_GEN)( echo "#include \"clutter-marshal.h\"" ; \ glib_enum_h = clutter-enum-types.h
$(GLIB_GENMARSHAL) \ glib_enum_c = clutter-enum-types.c
--prefix=clutter_marshal \ glib_enum_headers = $(source_h)
--body \ include $(top_srcdir)/build/autotools/Makefile.am.enums
$(srcdir)/clutter-marshal.list --body ) >> xgen-cmc \
&& cp xgen-cmc clutter-marshal.c \
&& rm -f xgen-cmc
clutter-enum-types.h: stamp-clutter-enum-types.h
@true
stamp-clutter-enum-types.h: $(source_h) Makefile
$(QUIET_GEN)( $(GLIB_MKENUMS) \
--template $(srcdir)/clutter-enum-types.h.in \
$(source_h) ) >> xgen-ceth && \
(cmp -s xgen-ceth clutter-enum-types.h || cp xgen-ceth clutter-enum-types.h) && \
rm -f xgen-ceth && \
echo timestamp > $(@F)
clutter-enum-types.c: clutter-enum-types.h
$(QUIET_GEN)( $(GLIB_MKENUMS) \
--template $(srcdir)/clutter-enum-types.c.in \
$(source_h) ) >> xgen-cetc && \
cp xgen-cetc clutter-enum-types.c && \
rm -f xgen-cetc
CLEANFILES = $(STAMPFILES)
# please, keep this sorted alphabetically # please, keep this sorted alphabetically
source_c = \ source_c = \
@ -239,6 +210,9 @@ clutter_HEADERS = \
$(top_builddir)/clutter/clutter-enum-types.h \ $(top_builddir)/clutter/clutter-enum-types.h \
$(top_srcdir)/clutter/clutter.h $(top_srcdir)/clutter/clutter.h
DISTCLEANFILES += clutter-version.h
EXTRA_DIST += clutter-version.h.in
if HAVE_INTROSPECTION if HAVE_INTROSPECTION
BUILT_GIRSOURCES = BUILT_GIRSOURCES =
@ -322,16 +296,3 @@ typelibs_DATA = $(BUILT_GIRSOURCES:.gir=.typelib)
CLEANFILES += $(BUILT_GIRSOURCES) $(typelibs_DATA) CLEANFILES += $(BUILT_GIRSOURCES) $(typelibs_DATA)
endif endif
DISTCLEANFILES = \
$(ENUMFILES) \
$(MARSHALFILES) \
clutter-version.h \
$(NULL)
EXTRA_DIST = \
clutter-marshal.list \
clutter-version.h.in \
clutter-enum-types.h.in \
clutter-enum-types.c.in \
$(NULL)