[glib/wip/danw/glib.mk: 2/3] glib.mk: Add enumtypes, marshal, schemas, and resources rules
- From: Dan Winship <danw src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glib/wip/danw/glib.mk: 2/3] glib.mk: Add enumtypes, marshal, schemas, and resources rules
- Date: Tue, 6 Aug 2013 13:02:37 +0000 (UTC)
commit 0deafa61fc07aa8cb8bfd7a46fe013a2d981714a
Author: Dan Winship <danw gnome org>
Date: Fri May 27 14:11:22 2011 -0400
glib.mk: Add enumtypes, marshal, schemas, and resources rules
Add rules to glib.mk to generate enumtypes files, marshallers,
gsettings schemas, and resource files, so that people don't have to
copy and paste the rules into every project's Makefile.am
https://bugzilla.gnome.org/show_bug.cgi?id=654395
.gitignore | 1 +
Makefile.am | 3 +
configure.ac | 12 ++
gio/Makefile.am | 29 ++---
gio/gioenumtypes.c.template | 38 -----
gio/gioenumtypes.h.template | 24 ---
gio/tests/.gitignore | 2 +-
gio/tests/Makefile.am | 26 ++--
glib-2.0.pc.in | 1 +
glib.mk | 327 ++++++++++++++++++++++++++++++++++++++++
m4macros/glib-2.0.m4 | 38 +++++
tests/gobject/.gitignore | 1 +
tests/gobject/Makefile.am | 41 +-----
tests/gobject/accumulator.c | 6 +-
tests/gobject/testmarshal.list | 4 -
15 files changed, 413 insertions(+), 140 deletions(-)
---
diff --git a/.gitignore b/.gitignore
index f80afbc..bd545bf 100644
--- a/.gitignore
+++ b/.gitignore
@@ -21,6 +21,7 @@ TAGS
*.test
*.log
*.trs
+*.stamp
# autofoo stuff here
compile
diff --git a/Makefile.am b/Makefile.am
index a156f85..e69b56d 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -99,6 +99,9 @@ endif
$(pkgconfig_DATA): config.status
+makedir = $(datadir)/glib-2.0
+dist_make_DATA = Makefile.glib
+
# build documentation when doing distcheck
DISTCHECK_CONFIGURE_FLAGS = --enable-debug --enable-gtk-doc --enable-man --disable-maintainer-mode
diff --git a/configure.ac b/configure.ac
index dbe48ef..6ce6bc0 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2704,8 +2704,20 @@ AS_IF([ test $cross_compiling = yes ], [
if test x$GLIB_COMPILE_RESOURCES = xno; then
AC_MSG_ERROR(Could not find a glib-compile-resources in your PATH)
fi
+],[
+ GLIB_GENMARSHAL='$(top_builddir)/gobject/glib-genmarshal'
+ GLIB_COMPILE_SCHEMAS='$(top_builddir)/gio/glib-compile-schemas'
+ GLIB_COMPILE_RESOURCES='$(top_builddir)/gio/glib-compile-resources'
])
+dnl ************************************
+dnl *** Internal GLIB_MAKEFILE usage ***
+dnl ************************************
+GLIB_MAKEFILE='$(top_srcdir)/Makefile.glib'
+AC_SUBST(GLIB_MAKEFILE)
+GLIB_MKENUMS='$(top_builddir)/gobject/glib-mkenums'
+AC_SUBST(GLIB_MKENUMS)
+
dnl **************************
dnl *** Checks for gtk-doc ***
dnl **************************
diff --git a/gio/Makefile.am b/gio/Makefile.am
index 33d5885..8bcf632 100644
--- a/gio/Makefile.am
+++ b/gio/Makefile.am
@@ -32,6 +32,8 @@ AM_CFLAGS = $(GLIB_WARN_CFLAGS)
lib_LTLIBRARIES = libgio-2.0.la
+gioenumtypes_sources = $(gioinclude_HEADERS)
+
gdbus_headers = \
gdbusauthobserver.h \
gcredentials.h \
@@ -510,7 +512,8 @@ libgio_2_0_la_DEPENDENCIES = $(gio_win32_res) $(gio_def) $(platform_deps)
gio-win32-res.o: gio.rc
$(WINDRES) gio.rc $@
-gio_headers = \
+gioincludedir=$(includedir)/glib-2.0/gio/
+gioinclude_HEADERS = \
gappinfo.h \
gasyncinitable.h \
gasyncresult.h \
@@ -549,6 +552,7 @@ gio_headers = \
gio.h \
giotypes.h \
gioenums.h \
+ gioenumtypes.h \
gioerror.h \
giomodule.h \
gioscheduler.h \
@@ -612,25 +616,22 @@ gio_headers = \
$(gdbus_headers) \
$(NULL)
-gioincludedir=$(includedir)/glib-2.0/gio/
-gioinclude_HEADERS = \
- $(gio_headers) \
- gioenumtypes.h
-
# these sources (also mentioned above) are generated.
BUILT_SOURCES += \
gconstructor_as_data.h \
- gioenumtypes.h \
- gioenumtypes.c \
gdbus-daemon-generated.c \
gdbus-daemon-generated.h \
gnetworking.h \
+ $(GLIB_GENERATED) \
$(NULL)
+GLIB_GENERATED += \
+ gioenumtypes.h \
+ gioenumtypes.c
+GLIB_MKENUMS_H_FLAGS = --vhead "GLIB_AVAILABLE_IN_ALL\n"
+
EXTRA_DIST += \
data-to-c.pl \
- gioenumtypes.h.template \
- gioenumtypes.c.template \
makefile.msc \
gio.rc.in \
gschema.dtd \
@@ -654,14 +655,6 @@ DISTCLEANFILES += \
all-local: gio-public-headers.txt
-gioenumtypes.h: $(gio_headers) gioenumtypes.h.template
- $(AM_V_GEN) $(top_builddir)/gobject/glib-mkenums --template $(filter %.template,$^) $(filter-out
%.template,$^) > \
- gioenumtypes.h.tmp && mv gioenumtypes.h.tmp gioenumtypes.h
-
-gioenumtypes.c: $(gio_headers) gioenumtypes.c.template
- $(AM_V_GEN) $(top_builddir)/gobject/glib-mkenums --template $(filter %.template,$^) $(filter-out
%.template,$^) > \
- gioenumtypes.c.tmp && mv gioenumtypes.c.tmp gioenumtypes.c
-
gio-2.0.lib: libgio-2.0.la gio.def
lib -machine:@LIB_EXE_MACHINE_FLAG@ -name:libgio-2.0-$(LT_CURRENT_MINUS_AGE).dll
-def:$(builddir)/gio.def -out:$@
diff --git a/gio/tests/.gitignore b/gio/tests/.gitignore
index fd12e88..46b2a11 100644
--- a/gio/tests/.gitignore
+++ b/gio/tests/.gitignore
@@ -88,7 +88,6 @@ network-monitor
org.gtk.test.enums.xml
permission
pollable
-plugin-resources.c
proxy
proxy-test
readwrite
@@ -110,6 +109,7 @@ test.gresource
test2-resources.c
test3-resources.c
test3-resources.h
+test4-resources.c
tls-certificate
tls-interaction
unix-fd
diff --git a/gio/tests/Makefile.am b/gio/tests/Makefile.am
index ca195c8..497c985 100644
--- a/gio/tests/Makefile.am
+++ b/gio/tests/Makefile.am
@@ -1,4 +1,5 @@
include $(top_srcdir)/glib.mk
+BUILT_SOURCES += $(GLIB_GENERATED)
dist_uninstalled_test_data =
test_ltlibraries =
@@ -411,7 +412,7 @@ nodist_resources_SOURCES = test2-resources.c test3-resources.c test3-resources.h
resources_DEPENDENCIES = test.gresource
test_ltlibraries += libresourceplugin.la
-libresourceplugin_la_SOURCES = resourceplugin.c plugin-resources.c
+libresourceplugin_la_SOURCES = resourceplugin.c test4-resources.c
libresourceplugin_la_LDFLAGS = -avoid-version -module -export-dynamic $(no_undefined)
libresourceplugin_la_LIBADD = $(LDADD)
@@ -434,18 +435,13 @@ endif
resources.o: test3-resources.h
-test2-resources.c: test2.gresource.xml Makefile $(shell $(glib_compile_resources) --sourcedir=$(srcdir)
--generate-dependencies $(srcdir)/test2.gresource.xml)
- $(AM_V_GEN) $(glib_compile_resources) --target=$@ --sourcedir=$(srcdir) --generate-source --c-name
_g_test2 $<
+GLIB_GENERATED += \
+ test.gresource \
+ test2-resources.c \
+ test3-resources.c \
+ test3-resources.h \
+ test4-resources.c
-test3-resources.h test3-resources.c: test3.gresource.xml Makefile $(shell $(glib_compile_resources)
--sourcedir=$(srcdir) --generate-dependencies $(srcdir)/test3.gresource.xml)
- $(AM_V_GEN) $(glib_compile_resources) --target=$@ --sourcedir=$(srcdir) --generate --c-name _g_test2
--manual-register $<
-
-plugin-resources.c: test4.gresource.xml Makefile $(shell $(glib_compile_resources) --sourcedir=$(srcdir)
--generate-dependencies $(srcdir)/test4.gresource.xml)
- $(AM_V_GEN) $(glib_compile_resources) --target=$@ --sourcedir=$(srcdir) --generate-source --c-name
_g_plugin $<
-
-test.gresource: test.gresource.xml Makefile $(shell $(glib_compile_resources) --sourcedir=$(srcdir)
--generate-dependencies $(srcdir)/test.gresource.xml)
- $(AM_V_GEN) $(glib_compile_resources) --target=$@ --sourcedir=$(srcdir) $<
-
-EXTRA_DIST += test.gresource.xml test1.txt test2.gresource.xml test2.txt test3.gresource.xml test3.txt
test4.gresource.xml
-
-CLEANFILES += test2-resources.c test3-resources.[ch] plugin-resources.c test.gresource
+test2_resources_COMPILE_RESOURCES_FLAGS = --c-name _g_test2
+test3_resources_COMPILE_RESOURCES_FLAGS = --c-name _g_test3
+test4_resources_COMPILE_RESOURCES_FLAGS = --c-name _g_plugin
diff --git a/glib-2.0.pc.in b/glib-2.0.pc.in
index 4a8898e..9a9ee41 100644
--- a/glib-2.0.pc.in
+++ b/glib-2.0.pc.in
@@ -6,6 +6,7 @@ includedir= includedir@
glib_genmarshal=glib-genmarshal
gobject_query=gobject-query
glib_mkenums=glib-mkenums
+glib_makefile= datadir@/glib-2.0/Makefile.glib
Name: GLib
Description: C Utility Library
diff --git a/glib.mk b/glib.mk
index 75ac2c6..330cdea 100644
--- a/glib.mk
+++ b/glib.mk
@@ -14,6 +14,7 @@ DISTCLEANFILES =
MAINTAINERCLEANFILES =
EXTRA_DIST =
TEST_PROGS =
+GLIB_GENERATED =
installed_test_LTLIBRARIES =
installed_test_PROGRAMS =
@@ -223,3 +224,329 @@ installed_test_meta_DATA = $(installed_testcases:=.test)
CLEANFILES += $(installed_test_meta_DATA)
endif
+
+
+# This is like AM_V_GEN, except that it strips ".stamp" from its output
+_GLIB_V_GEN = $(_glib_v_gen_$(V))
+_glib_v_gen_ = $(_glib_v_gen_$(AM_DEFAULT_VERBOSITY))
+_glib_v_gen_0 = @echo " GEN " $(subst .stamp,,$@);
+
+
+# glib-mkenums support
+#
+# To generate enum type registrations, add files with names ending
+# in "-enum-types.[ch]" or "enumtypes.[ch]" to GLIB_GENERATED:
+#
+# GLIB_GENERATED += foo-enum-types.h foo-enum-types.c
+# foo_enum_types_sources = aaa.h bbb.h ccc.h ddd.h
+#
+# glib.mk will create a list all of the enum/flags types declared in
+# $(foo_enum_type_sources), and will rebuild
+# foo-enum-types.c/foo-enum-types.h whenever that list changes. (No
+# template files are required.)
+#
+# For your convenience, any .c files or $(GLIB_GENERATED) files in
+# $(foo_enum_types_sources) will be ignored. This means you can
+# usually set foo_enum_types_sources to the value of your
+# library/program's _HEADERS and/or _SOURCES variables, even if that
+# contains foo-enum-types.h.
+#
+# You can set GLIB_MKENUMS_H_FLAGS and GLIB_MKENUMS_C_FLAGS (or an
+# appropriate file-specific variable, eg
+# foo_enum_types_MKENUMS_H_FLAGS) to set/override glib-mkenums
+# options. In particular, you can do:
+#
+# GLIB_MKENUMS_C_FLAGS = --fhead "\#define FOO_I_KNOW_THIS_IS_UNSTABLE"
+#
+# (The backslash is necessary to keep make from thinking the "#" is
+# the start of a comment.)
+
+
+# _GLIB_ENUM_TYPES_GENERATED contains the basenames (eg, "foo-enum-types")
+# of all the enum-type-related files to be generated.
+_GLIB_ENUM_TYPES_GENERATED = $(subst .h,,$(filter %enum-types.h %enumtypes.h,$(GLIB_GENERATED)))
+
+# These are used as macros (with the value of $(1) inherited from the "caller")
+# _glib_enum_types_prefix("foo-enum-types") = "foo_enum_types"
+# _glib_enum_types_guard("foo-enum-types") = "__FOO_ENUM_TYPES_H__"
+# _glib_enum_types_sources_var("foo-enum_types") = "foo_enum_types_sources"
+# _glib_enum_types_sources = the filtered value of $(foo_enum_types_sources_var)
+# _glib_enum_types_h_sources = the .h files in $(foo_enum_types_sources)
+_glib_enum_types_prefix = $(subst -,_,$(notdir $(1)))
+_glib_enum_types_guard = __$(shell LC_ALL=C echo $(_glib_enum_types_prefix) | tr 'a-z' 'A-Z')_H__
+_glib_enum_types_sources_var = $(_glib_enum_types_prefix)_sources
+_glib_enum_types_sources = $(filter-out $(GLIB_GENERATED),$($(_glib_enum_types_sources_var)))
+_glib_enum_types_h_sources = $(filter %.h,$(_glib_enum_types_sources))
+
+# _glib_make_mkenums_rules is a multi-line macro that outputs a set of
+# rules for a single .h/.c pair (whose basename is $(1)). automake
+# doesn't recognize GNU make's define/endef syntax, so if we defined
+# the macro directly, it would try to, eg, add the literal
+# "$(1).h.stamp" to CLEANFILES. So we hide the macro by prefixing each
+# line with ":::", and then use $(subst) to extract the actual rule.
+
+# We have to include "Makefile" in the dependencies so that the
+# outputs get regenerated when you remove files from
+# foo_enum_types_sources as well. (This is especially important for
+# foo-enum-types.h, which might otherwise try to #include files that
+# no longer exist.).
+
+define _glib_make_mkenums_rules_hidden
+:::$(1).h.stamp: $(_glib_enum_types_h_sources) Makefile
+::: $$(if $(_glib_enum_types_sources),,$$(error Need to define $(_glib_enum_types_sources_var) for
$(1).[ch])) \
+::: $$(_GLIB_V_GEN) $$(GLIB_MKENUMS) \
+::: --fhead "/* Generated by glib-mkenums. Do not edit */\n\n#ifndef
$(_glib_enum_types_guard)\n#define $(_glib_enum_types_guard)\n\n" \
+::: $$(GLIB_MKENUMS_H_FLAGS) \
+::: $$($(_glib_enum_types_prefix)_MKENUMS_H_FLAGS) \
+::: --fhead "#include <glib-object.h>\n\nG_BEGIN_DECLS\n" \
+::: --vhead "GType @enum_name _get_type (void) G_GNUC_CONST;\n#define @ENUMPREFIX
_TYPE_@ENUMSHORT@ (@enum_name _get_type ())\n" \
+::: --ftail "G_END_DECLS\n\n#endif /* $(_glib_enum_types_guard) */" \
+::: $$(filter-out Makefile, $$^) > $(1).h.tmp && \
+::: (cmp -s $(1).h.tmp $(1).h || cp $(1).h.tmp $(1).h) && \
+::: rm -f $(1).h.tmp && \
+::: echo timestamp > $$@
+:::
+:::$(1).h: $(1).h.stamp
+::: @true
+:::
+:::$(1).c.stamp: $(_glib_enum_types_h_sources) Makefile
+::: $$(_GLIB_V_GEN) $$(GLIB_MKENUMS) \
+::: --fhead "/* Generated by glib-mkenums. Do not edit */\n\n#ifdef HAVE_CONFIG_H\n#include
\"config.h\"\n#endif\n\n#include \"$(notdir $(1)).h\"\n" \
+::: $$(GLIB_MKENUMS_C_FLAGS) \
+::: $$($(_glib_enum_types_prefix)_MKENUMS_C_FLAGS) \
+::: --fhead "$$(foreach f,$$(filter-out Makefile,$$(^F)),\n#include \"$$(f)\")\n\n" \
+::: --vhead "GType\n enum_name@_get_type (void)\n{\n static volatile gsize
g_define_type_id__volatile = 0;\n\n if (g_once_init_enter (&g_define_type_id__volatile))\n {\n
static const G Type@Value values[] = {\n" \
+::: --vprod " { @VALUENAME@, \"@VALUENAME \", \"@valuenick \" },\n" \
+::: --vtail " { 0, NULL, NULL }\n };\n GType g_define_type_id =\n g_
type@_register_static (g_intern_static_string (\"@EnumName \"), values);\n g_once_init_leave
(&g_define_type_id__volatile, g_define_type_id);\n }\n\n return g_define_type_id__volatile;\n}\n" \
+::: $$(filter-out Makefile, $$^) > $(1).c.tmp && \
+::: (cmp -s $(1).c.tmp $(1).c || cp $(1).c.tmp $(1).c) && \
+::: rm -f $(1).c.tmp && \
+::: echo timestamp > $$@
+:::
+:::$(1).c: $(1).c.stamp
+::: @true
+:::
+:::CLEANFILES += $(1).h.stamp $(1).c.stamp
+:::DISTCLEANFILES += $(1).h $(1).c $(1).h.stamp $(1).c.stamp
+endef
+_glib_make_mkenums_rules = $(subst :::,,$(_glib_make_mkenums_rules_hidden))
+
+# Run _glib_make_mkenums_rules for each set of generated files
+$(foreach f,$(_GLIB_ENUM_TYPES_GENERATED),$(eval $(call _glib_make_mkenums_rules,$f)))
+
+
+# glib-genmarshal support
+#
+# To generate signal marshallers, add files with names ending in
+# "marshal.h" and "marshal.c" to GLIB_GENERATED:
+#
+# GLIB_GENERATED += foo-marshal.h foo-marshal.c
+# foo_marshal_sources = aaa.c bbb.c ccc.c ddd.c
+#
+# glib.mk will then generate a foo-marshal.list file containing
+# all _foo_marshal_* functions referenced by $(foo_marshal_sources),
+# and will rebuild foo-marshal.c/foo-marshal.h whenever the list
+# changes.
+#
+# For your convenience, any .h files or $(GLIB_GENERATED) files in
+# $(foo_marshal_sources) will be ignored. This means you can usually just
+# set foo_marshal_sources to the value of your library/program's
+# _SOURCES variable, even if that variable contains foo-marshal.c.
+#
+# You can set GLIB_GENMARSHAL_H_FLAGS and GLIB_GENMARSHAL_C_FLAGS (or
+# an appropriate file-specific variable, eg
+# foo_marshal_GENMARSHAL_H_FLAGS) to set/override glib-genmarshal
+# options.
+
+# see the comments in the glib-mkenums section for details of how this all works
+_GLIB_MARSHAL_GENERATED = $(subst .h,,$(filter %marshal.h,$(GLIB_GENERATED)))
+
+_glib_marshal_prefix = $(subst marshal,,$(subst _marshal,,$(subst -,_,$(notdir $(1)))))_marshal
+_glib_marshal_sources_var = $(subst -,_,$(notdir $(1)))_sources
+_glib_marshal_sources = $(filter-out %.h,$(filter-out $(GLIB_GENERATED),$($(_glib_marshal_sources_var))))
+
+define _glib_make_genmarshal_rules_hidden
+:::$(1).list.stamp: $(_glib_marshal_sources) Makefile
+::: $$(if $(_glib_marshal_sources),,$$(error Need to define $(_glib_marshal_sources_var) for $(1).[ch])) \
+::: $$(_GLIB_V_GEN) LC_ALL=C sed -ne 's/.*_$(_glib_marshal_prefix)_\([_A-Z]*\).*/\1/p' $$(filter-out
Makefile, $$^) | sort -u | sed -e 's/__/:/' -e 's/_/,/g' > $(1).list.tmp && \
+::: (cmp -s $(1).list.tmp $(1).list || cp $(1).list.tmp $(1).list) && \
+::: rm -f $(1).list.tmp && \
+::: echo timestamp > $$@
+:::
+:::$(1).list: $(1).list.stamp
+::: @true
+:::
+:::$(1).h: $(1).list
+::: $$(_GLIB_V_GEN) $$(GLIB_GENMARSHAL) \
+::: --prefix=_$(_glib_marshal_prefix) --header \
+::: $$(GLIB_GENMARSHAL_H_FLAGS) \
+::: $$($(_glib_marshal_prefix)_GENMARSHAL_H_FLAGS) \
+::: $$< > $$ tmp && \
+::: mv $$ tmp $$@
+:::
+:::$(1).c: $(1).list
+::: $$(_GLIB_V_GEN) (echo "#include \"$$(subst .c,.h,$$(@F))\""; $$(GLIB_GENMARSHAL) \
+::: --prefix=_$(_glib_marshal_prefix) --body \
+::: $$(GLIB_GENMARSHAL_C_FLAGS) \
+::: $$($(_glib_marshal_prefix)_GENMARSHAL_C_FLAGS) \
+::: $$< ) > $$ tmp && \
+::: mv $$ tmp $$@
+:::
+:::CLEANFILES += $(1).list.stamp $(1).list
+:::DISTCLEANFILES += $(1).h $(1).c
+endef
+_glib_make_genmarshal_rules = $(subst :::,,$(_glib_make_genmarshal_rules_hidden))
+
+$(foreach f,$(_GLIB_MARSHAL_GENERATED),$(eval $(call _glib_make_genmarshal_rules,$f)))
+
+
+# glib-compile-schemas support
+#
+# Any foo.gschemas.xml files listed in gsettingsschema_DATA will be
+# validated before installation, and (if --disable-schemas-compile was
+# not passed) compiled after installation.
+#
+# To build an enums file, add it to GLIB_GENERATED (in addition to
+# gsettingsschema_DATA):
+#
+# GLIB_GENERATED += org.gnome.foo.enums.xml
+# org_gnome_foo_enums_xml_sources = aaa.h bbb.h ccc.h ddd.h
+#
+# All enums files will be built before any schema files are validated.
+
+# see the comments in the glib-mkenums section for details of how this all works
+_GLIB_ENUMS_XML_GENERATED = $(filter %.enums.xml,$(GLIB_GENERATED))
+_GLIB_GSETTINGS_SCHEMA_FILES = $(filter %.gschema.xml,$(gsettingsschema_DATA))
+_GLIB_GSETTINGS_VALID_FILES = $(subst .xml,.valid,$(_GLIB_GSETTINGS_SCHEMA_FILES))
+
+_glib_enums_xml_prefix = $(subst .,_,$(notdir $(1)))
+_glib_enums_xml_sources_var = $(_glib_enums_xml_prefix)_sources
+_glib_enums_xml_sources = $(filter-out $(GLIB_GENERATED),$($(_glib_enums_xml_sources_var)))
+_glib_enums_xml_namespace = $(subst .enums.xml,,$(notdir $(1)))
+
+define _glib_make_enums_xml_rule_hidden
+:::$(1): $(_glib_enums_xml_sources) Makefile
+::: $$(if $(_glib_enums_xml_sources),,$$(error Need to define $(_glib_enums_xml_sources_var) for $(1))) \
+::: $$(_GLIB_V_GEN) $$(GLIB_MKENUMS) --comments '<!-- @comment@ -->' --fhead "<schemalist>" --vhead "
<@type@ id='$(_glib_enums_xml_namespace) EnumName@'>" --vprod " <value nick='@valuenick@'
value='@valuenum@'/>" --vtail " </@type@>" --ftail "</schemalist>" $$(filter-out Makefile, $$^) > $$ tmp &&
mv $$ tmp $$@
+endef
+_glib_make_enums_xml_rule = $(subst :::,,$(_glib_make_enums_xml_rule_hidden))
+
+_GLIB_V_CHECK = $(_glib_v_check_$(V))
+_glib_v_check_ = $(_glib_v_check_$(AM_DEFAULT_VERBOSITY))
+_glib_v_check_0 = @echo " CHECK " $(subst .valid,.xml,$@);
+
+define _glib_make_schema_validate_rule_hidden
+:::$(subst .xml,.valid,$(1)): $(_GLIB_ENUMS_XML_GENERATED) $(1)
+::: $$(_GLIB_V_CHECK) $$(GLIB_COMPILE_SCHEMAS) --strict --dry-run $$(addprefix --schema-file=,$$^) &&
touch $$@
+endef
+_glib_make_schema_validate_rule = $(subst :::,,$(_glib_make_schema_validate_rule_hidden))
+
+define _glib_make_schema_rules_hidden
+:::all-am: $(_GLIB_GSETTINGS_VALID_FILES)
+:::
+:::install-data-am: glib-install-schemas-hook
+:::
+:::glib-install-schemas-hook: install-gsettingsschemaDATA
+::: @test -n "$(GSETTINGS_DISABLE_SCHEMAS_COMPILE)$(DESTDIR)" || (echo $(GLIB_COMPILE_SCHEMAS)
$(gsettingsschemadir); $(GLIB_COMPILE_SCHEMAS) $(gsettingsschemadir))
+:::
+:::uninstall-am: glib-uninstall-schemas-hook
+:::
+:::glib-uninstall-schemas-hook: uninstall-gsettingsschemaDATA
+::: @test -n "$(GSETTINGS_DISABLE_SCHEMAS_COMPILE)$(DESTDIR)" || (echo $(GLIB_COMPILE_SCHEMAS)
$(gsettingsschemadir); $(GLIB_COMPILE_SCHEMAS) $(gsettingsschemadir))
+:::
+:::.PHONY: glib-install-schemas-hook glib-uninstall-schemas-hook
+endef
+_glib_make_schema_rules = $(subst :::,,$(_glib_make_schema_rules_hidden))
+
+CLEANFILES += $(_GLIB_ENUMS_XML_GENERATED) $(_GLIB_GSETTINGS_VALID_FILES)
+
+$(foreach f,$(_GLIB_ENUMS_XML_GENERATED),$(eval $(call _glib_make_enums_xml_rule,$f)))
+$(foreach f,$(_GLIB_GSETTINGS_SCHEMA_FILES),$(eval $(call _glib_make_schema_validate_rule,$f)))
+$(if $(_GLIB_GSETTINGS_SCHEMA_FILES),$(eval $(_glib_make_schema_rules)))
+
+
+# glib-compile-resources support
+#
+# To compile resources, add files with names ending in
+# "resources.h" and "resources.c" to GLIB_GENERATED:
+#
+# GLIB_GENERATED += foo-resources.h foo-resources.c
+#
+# glib.mk will then compile "foo.gresource.xml" into the named files,
+# creating a method foo_get_resource(). glib.mk will figure out the
+# resource's dependencies automatically, and add the dependency files
+# to EXTRA_DIST.
+#
+# If you specify both a .c and a .h file, glib.mk will compile the
+# resource with the --manual-register flag. If you specify only a .c
+# file, it will not.
+#
+# Alternatively, you can build a standalone resource file by doing:
+#
+# GLIB_GENERATED += foo.gresource
+#
+# You can set GLIB_COMPILE_RESOURCES_FLAGS (or an appropriate
+# file-specific variable, eg foo_resources_COMPILE_RESOURCES_FLAGS or
+# foo_gresource_COMPILE_RESOURCES_FLAGS) to set/override
+# glib-compile-resources options.
+
+_GLIB_RESOURCES_CH_GENERATED = $(subst .h,,$(filter %resources.h,$(GLIB_GENERATED)))
+_GLIB_RESOURCES_C_GENERATED = $(filter-out $(_GLIB_RESOURCES_CH_GENERATED),$(subst .c,,$(filter
%resources.c,$(GLIB_GENERATED))))
+
+_glib_resources_c_prefix = $(subst resources,,$(subst _resources,,$(subst -,_,$(notdir $(1)))))
+_glib_resources_c_xml = $(subst resources,,$(subst -resources,,$(1))).gresource.xml
+_glib_resources_c_sources = $(shell $(GLIB_COMPILE_RESOURCES) --sourcedir=$(srcdir) --generate-dependencies
$(_glib_resources_c_xml))
+
+define _glib_make_h_resources_rules_hidden
+:::$(1).h: $(_glib_resources_c_xml) $(_glib_resources_c_sources)
+::: $$(_GLIB_V_GEN) $$(GLIB_COMPILE_RESOURCES) \
+::: --target=$$@ --sourcedir="$(srcdir)" \
+::: --generate-header $(2) \
+::: --c-name $(_glib_resources_c_prefix) \
+::: $$(GLIB_COMPILE_RESOURCES_FLAGS) \
+::: $$($(_glib_resources_c_prefix)_resources_COMPILE_RESOURCES_FLAGS) \
+::: $$<
+:::
+:::DISTCLEANFILES += $(1).h
+endef
+_glib_make_h_resources_rules = $(subst :::,,$(_glib_make_h_resources_rules_hidden))
+
+define _glib_make_c_resources_rules_hidden
+:::$(1).c: $(_glib_resources_c_xml) $(_glib_resources_c_sources)
+::: $$(_GLIB_V_GEN) $$(GLIB_COMPILE_RESOURCES) \
+::: --target=$$@ --sourcedir="$(srcdir)" \
+::: --generate-source $(2) \
+::: --c-name $(_glib_resources_c_prefix) \
+::: $$(GLIB_COMPILE_RESOURCES_FLAGS) \
+::: $$($(_glib_resources_c_prefix)_resources_COMPILE_RESOURCES_FLAGS) \
+::: $$<
+:::
+:::DISTCLEANFILES += $(1).c
+:::EXTRA_DIST += $(_glib_resources_c_xml) $(_glib_resources_c_sources)
+endef
+_glib_make_c_resources_rules = $(subst :::,,$(_glib_make_c_resources_rules_hidden))
+
+$(foreach f,$(_GLIB_RESOURCES_CH_GENERATED),$(eval $(call
_glib_make_h_resources_rules,$f,--manual-register)))
+$(foreach f,$(_GLIB_RESOURCES_CH_GENERATED),$(eval $(call
_glib_make_c_resources_rules,$f,--manual-register)))
+$(foreach f,$(_GLIB_RESOURCES_C_GENERATED),$(eval $(call _glib_make_c_resources_rules,$f,)))
+
+_GLIB_RESOURCES_STANDALONE_GENERATED = $(subst .gresource,,$(filter %.gresource,$(GLIB_GENERATED)))
+
+_glib_resources_standalone_prefix = $(subst -,_,$(notdir $(1)))
+_glib_resources_standalone_xml = $(1).gresource.xml
+_glib_resources_standalone_sources = $(shell $(GLIB_COMPILE_RESOURCES) --sourcedir=$(srcdir)
--generate-dependencies $(_glib_resources_standalone_xml))
+
+define _glib_make_standalone_resources_rules_hidden
+:::$(1).gresource: $(_glib_resources_standalone_xml) $(_glib_resources_standalone_sources)
+::: $$(_GLIB_V_GEN) $$(GLIB_COMPILE_RESOURCES) \
+::: --target=$$@ --sourcedir="$(srcdir)" \
+::: $$(GLIB_COMPILE_RESOURCES_FLAGS) \
+::: $$($(_glib_resources_standalone_prefix)_COMPILE_RESOURCES_FLAGS) \
+::: $$<
+:::
+:::CLEANFILES += $(1).gresource
+:::EXTRA_DIST += $(_glib_resources_standalone_xml) $(_glib_resources_standalone_sources)
+endef
+_glib_make_standalone_resources_rules = $(subst :::,,$(_glib_make_standalone_resources_rules_hidden))
+
+$(foreach f,$(_GLIB_RESOURCES_STANDALONE_GENERATED),$(eval $(call _glib_make_standalone_resources_rules,$f)))
diff --git a/m4macros/glib-2.0.m4 b/m4macros/glib-2.0.m4
index 0507b76..d5c08a7 100644
--- a/m4macros/glib-2.0.m4
+++ b/m4macros/glib-2.0.m4
@@ -1,6 +1,44 @@
# Configure paths for GLIB
# Owen Taylor 1997-2001
+dnl GLIB_CONFIG([MODULES [, MIN-VERSION [, MAX-VERSION]]])
+dnl Test for GLIB (and error out if it's not available). Define
+dnl GLIB_CFLAGS and GLIB_LIBS, GLIB_MAKEFILE, and variables for
+dnl various glib developer tools (eg, GLIB_GENMARSHAL). If
+dnl gmodule, gobject, or gio is specified in MODULES, pass to
+dnl pkg-config. If MIN-VERSION is set, it will be passed to
+dnl pkg-config, and also used to set GLIB_VERSION_MIN_REQUIRED.
+dnl If MAX-VERSION is set, it will be used to set
+dnl GLIB_VERSION_MAX_ALLOWED.
+dnl
+AC_DEFUN([GLIB_CONFIG],
+[dnl
+ glib_config_modules="$1"
+ glib_config_min_version=ifelse([$2], ,2.35.5,$2)
+ glib_config_max_version="$3"
+
+ AM_PATH_GLIB_2_0([$glib_config_min_version], , [AC_MSG_ERROR([GLIB not found])], [$glib_config_modules])
+
+ if test -n "$glib_config_min_version"; then
+ GLIB_CFLAGS="$GLIB_CFLAGS -DGLIB_VERSION_MIN_REQUIRED=`echo $glib_config_min_version | sed -e
's/\([[0-9]]*\)\.\([[0-9]]*\).*/GLIB_VERSION_\1_\2/'`"
+ fi
+ if test -n "$glib_config_max_version"; then
+ GLIB_CFLAGS="$GLIB_CFLAGS -DGLIB_VERSION_MAX_ALLOWED=`echo $glib_config_max_version | sed -e
's/\([[0-9]]*\)\.\([[0-9]]*\).*/GLIB_VERSION_\1_\2/'`"
+ fi
+
+ GLIB_GENMARSHAL=`$PKG_CONFIG --variable=glib_genmarshal glib-2.0`
+ GLIB_MKENUMS=`$PKG_CONFIG --variable=glib_mkenums glib-2.0`
+ GLIB_MAKEFILE=`$PKG_CONFIG --variable=glib_makefile glib-2.0`
+ GLIB_COMPILE_RESOURCES=glib-compile-resources
+
+ AC_SUBST(GLIB_GENMARSHAL)
+ AC_SUBST(GLIB_MKENUMS)
+ AC_SUBST(GLIB_MAKEFILE)
+ AC_SUBST(GLIB_COMPILE_RESOURCES)
+
+ GLIB_GSETTINGS
+])
+
dnl AM_PATH_GLIB_2_0([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND [, MODULES]]]])
dnl Test for GLIB, and define GLIB_CFLAGS and GLIB_LIBS, if gmodule, gobject,
dnl gthread, or gio is specified in MODULES, pass to pkg-config
diff --git a/tests/gobject/.gitignore b/tests/gobject/.gitignore
index 96ea26a..2df2a8e 100644
--- a/tests/gobject/.gitignore
+++ b/tests/gobject/.gitignore
@@ -12,3 +12,4 @@ performance
performance-threaded
references
singleton
+testmarshal.list
diff --git a/tests/gobject/Makefile.am b/tests/gobject/Makefile.am
index 152637b..6c64570 100644
--- a/tests/gobject/Makefile.am
+++ b/tests/gobject/Makefile.am
@@ -46,42 +46,9 @@ if ENABLE_TIMELOOP
installed_test_programs += timeloop-closure
endif
-if CROSS_COMPILING
- glib_genmarshal=$(GLIB_GENMARSHAL)
-else
- glib_genmarshal=$(top_builddir)/gobject/glib-genmarshal
-endif
-
-testmarshal.h: stamp-testmarshal.h
- @true
-stamp-testmarshal.h: @REBUILD@ testmarshal.list $(glib_genmarshal)
- $(AM_V_GEN) $(glib_genmarshal) --prefix=test_marshal $(srcdir)/testmarshal.list --header >> xgen-gmh \
- && (cmp -s xgen-gmh testmarshal.h 2>/dev/null || cp xgen-gmh testmarshal.h) \
- && rm -f xgen-gmh xgen-gmh~ \
- && echo timestamp > $@
-testmarshal.c: @REBUILD@ testmarshal.h testmarshal.list $(glib_genmarshal)
- $(AM_V_GEN) (echo "#include \"testmarshal.h\""; $(glib_genmarshal) --prefix=test_marshal
$(srcdir)/testmarshal.list --body) >> xgen-gmc \
- && cp xgen-gmc testmarshal.c \
- && rm -f xgen-gmc xgen-gmc~
-
-BUILT_SOURCES += testmarshal.h testmarshal.c
-CLEANFILES += stamp-testmarshal.h
+GLIB_GENERATED += testmarshal.h testmarshal.c
+BUILT_SOURCES += $(GLIB_GENERATED)
+testmarshal_sources = $(accumulator_SOURCES) $(defaultiface_SOURCES) $(dynamictype_SOURCES)
EXTRA_DIST += \
- testcommon.h \
- testmarshal.list
-
-BUILT_EXTRA_DIST += \
- testmarshal.h \
- testmarshal.c
-
-dist-hook: $(BUILT_EXTRA_DIST)
- files='$(BUILT_EXTRA_DIST)'; \
- for f in $$files; do \
- if test -f $$f; then d=.; else d=$(srcdir); fi; \
- cp $$d/$$f $(distdir) || exit 1; done
-
-distclean-local:
- if test $(srcdir) = .; then :; else \
- rm -f $(BUILT_EXTRA_DIST); \
- fi
+ testcommon.h
diff --git a/tests/gobject/accumulator.c b/tests/gobject/accumulator.c
index f8a6c12..905cc50 100644
--- a/tests/gobject/accumulator.c
+++ b/tests/gobject/accumulator.c
@@ -227,21 +227,21 @@ test_object_class_init (TestObjectClass *class)
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (TestObjectClass, test_signal1),
test_signal1_accumulator, NULL,
- test_marshal_STRING__INT,
+ _test_marshal_STRING__INT,
G_TYPE_STRING, 1, G_TYPE_INT);
g_signal_new ("test-signal2",
G_OBJECT_CLASS_TYPE (class),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (TestObjectClass, test_signal2),
g_signal_accumulator_true_handled, NULL,
- test_marshal_BOOLEAN__INT,
+ _test_marshal_BOOLEAN__INT,
G_TYPE_BOOLEAN, 1, G_TYPE_INT);
g_signal_new ("test-signal3",
G_OBJECT_CLASS_TYPE (class),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (TestObjectClass, test_signal3),
test_signal3_accumulator, NULL,
- test_marshal_VARIANT__POINTER,
+ _test_marshal_VARIANT__POINTER,
G_TYPE_VARIANT, 1, G_TYPE_POINTER);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]