blob: d0a00b911c25a1c5bd3beac3ec899923d3dc7a35 [file] [log] [blame]
# glib-build.mk contains support for using the various
# code/data-building binaries installed by glib: glib-mkenums,
# glib-genmarshal, glib-compile-schemas, and glib-compile-resources.
# (It does not currently contain support for gdbus-codegen.)
# GLIB-MKENUMS
#
# glib-build.mk will automatically build/update "foo-enum-types.c" and
# "foo-enum-types.h" (or "fooenumtypes.c" and "fooenumtypes.h") as
# needed, if there is an appropriate $(foo_enum_types_sources) /
# $(fooenumtypes_sources) variable indicating the source files to read
# enums from.
#
# For your convenience, any .c files or glib-build.mk-generated
# sources in the _sources variable will be ignored. This means you can
# usually just set it to the value of your library/program's _HEADERS
# and/or _SOURCES variables, even if those variables contain
# "foo-enum-types.h", etc.
#
# 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 certain glib-mkenums
# options. In particular, you can do things like:
#
# GLIB_MKENUMS_C_FLAGS = --fhead "\#define FOO_ENABLE_UNSTABLE_API"
#
# (The backslash is necessary to keep make from thinking the "#" is
# the start of a comment.)
#
# Note that enums files should not be disted (since the set of
# available enum types may depend on configure-time options, and they
# can always be generated at build time anyway), so the generated
# files should be added to a "nodist_" SOURCES variable. You do not
# need to add the generated files to BUILT_SOURCES or CLEANFILES;
# glib-build.mk will cause them to be built and cleaned at the correct
# times (but note that it does not actually modify BUILT_SOURCES or
# CLEANFILES). You may want to add "foo-enum-types.h",
# "foo-enum-types.c", "foo-enum-types.h.stamp", and
# "foo-enum-types.c.stamp" to your .gitignore.
# GLIB-GENMARSHAL
#
# NOTE: the use of explicit marshallers is somewhat deprecated.
# Consider using g_cclosure_marshal_generic() instead.
#
# glib-build.mk will automatically build/update "foo-marshal.c" and
# "foo-marshal.h" (or "foomarshal.c" and "foomarshal.h") as needed, if
# there is an appropriate $(foo_marshal_sources) /
# $(foomarshal_sources) variable indicating the source files to use.
# You do not need to explicitly manage the list of marshallers;
# glib-build.mk will automatically generate a "foo-marshal.list" file
# containing all "_foo_marshal_*" functions referenced from
# $(foo_marshal_sources), and will then regenerate the .c and .h files
# whenever the list changes.
#
# For your convenience, any .h files or glib-build.mk-generated files
# in the _sources variable 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",
# etc.
#
# 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 certain
# glib-genmarshal options.
#
# Note that marshal files should not be disted (since the set of
# required marshallers may depend on configure-time options, and they
# can always be generated at build time anyway), so the generated
# files should be added to a "nodist_" SOURCES variable. You do not
# need to add the generated files to BUILT_SOURCES or CLEANFILES;
# glib-build.mk will cause them to be built and cleaned at the correct
# times (but note that it does not actually modify BUILT_SOURCES or
# CLEANFILES). You may want to add "foo-marshal.h", "foo-marshal.c",
# "foo-marshal.list", and "foo-marshal.list.stamp" to your .gitignore.
# GLIB-COMPILE-SCHEMAS
#
# Any foo.gschemas.xml files listed in gsettingsschema_DATA will be
# validated before installation, and normally will be compiled after
# installation. (If you include the GLIB_GSETTINGS rule from
# gsettings.m4 in your configure.ac, then glib-build.mk will obey the
# "--disable-schema-compile" flag just like the older GLIB_GSETTINGS
# code did.)
#
# glib-build.mk will automatically build/update any
# "org.foo.bar.enums.xml" files in gsettingsschema_DATA, if there is
# an appropriate $(org_foo_bar_enums_xml_sources) variable indicating
# the source files to use. All enums files will automatically be built
# before any schema files are validated.
# GLIB-COMPILE-RESOURCES
#
# glib-build.mk will automatically build/update "foo-resources.h"
# and/or "foo-resources.c" (or "fooresources.h" and/or
# "fooresources.c") as needed, if there is an appropriate
# $(foo_resources_sources) / $(fooresources_sources) variable
# indicating the source .gresource.xml file to use.
#
# If you specify both a .c and a .h file, glib-build.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 "foo.gresource" file by
# specifying $(foo_gresource_sources).
#
# 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.
#
# Although there may be situations where you want to dist a resource
# file and not dist its sources, glib-build.mk does not currently
# support this; generated resource files should be added to a
# "nodist_" SOURCES variable. glib-build.mk will ensure that the .xml
# file and any files it includes will get disted.
#
# You do not need to add resource files to BUILT_SOURCES or
# CLEANFILES; glib-build.mk will cause them to be built and cleaned at
# the correct time (but note that it does not actually modify
# BUILT_SOURCES or CLEANFILES). You may want to add "foo-resources.c" /
# "foo-resources.h" / "foo.gresource" to .gitignore.
###
# 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_all_sources contains every file that is (directly or
# indirectly) part of any _SOURCES variable in Makefile.am. We use
# this to find the files we need to generate rules for. (We can't just
# use '%' rules to build things because then the .stamp files get
# treated as "intermediate files" by make, and then things don't
# always get rebuilt when we need them to be.)
#
# Likewise, _glib_all_data contains all of the installed data files.
# (ie, all of the "foodir_DATA" variables, but not "INSTALL_DATA" or
# "install_sh_DATA", which are unrelated).
#
# ($(sort) is used here (and in many other places below) only for its
# side effect of removing duplicates.)
_glib_all_sources = $(sort $(foreach var,$(filter %_SOURCES,$(.VARIABLES)),$($(var))))
_glib_all_data = $(sort $(foreach var,$(filter-out INSTALL_DATA install_sh_DATA,$(filter %_DATA,$(.VARIABLES))),$($(var))))
# We can't add our generated files to BUILT_SOURCES because that would
# create recursion with _glib_all_sources. So we implement our own
# equivalent rules.
_glib_built_sources =
all: _glib-ensure-built-sources
check: _glib-ensure-built-sources
install: _glib-ensure-built-sources
# We add dependencies to this rule in the various generators below; we
# can't just make the rule depend on $(_glib_built_sources) because
# that value won't have been computed yet at the point when make
# figures out rule dependencies.
_glib-ensure-built-sources:
# We want to make "clean-am" depend on "_glib-clean". But if automake
# sees us doing that, it will think we're trying to *override*
# clean-am, and so it won't output the actual clean-am rule. So we
# hide from automake by prefacing the rule with ":::", and then use
# $(eval) to get make to apply it.
define _glib_clean_am_hidden
:::clean-am: _glib-clean
endef
$(eval $(subst :::,,$(_glib_clean_am_hidden)))
_glib-clean:
@$(if $(strip $(_glib_clean_files)),rm -f $(sort $(_glib_clean_files)),:)
_glib_clean_files =
# OTOH, we DO want automake to see us using dist-hook, since otherwise
# it won't generate the rules that use it.
dist-hook: _glib-dist
# We have to use $(realpath) here so that "x" and "./x" will be
# recognized as duplicates by $(sort), since the cp will fail if given
# the same file twice.
_glib-dist: _glib-ensure-built-sources
@$(if $(strip $(_glib_dist_files)),cp -p $(sort $(realpath $(_glib_dist_files))) $(distdir)/,:)
### GLIB-MKENUMS
# 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)
# _glib_enum_types_h_sources = the .h files in $(_glib_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_built_sources) $(1).h,$($(_glib_enum_types_sources_var)))
_glib_enum_types_h_sources = $(filter %.h,$(_glib_enum_types_sources))
# _glib_all_enum_types contains the basenames (eg, "fooenumtypes",
# "bar-enum-types") of all enum-types files known to the Makefile.
# _glib_generated_enum_types contains only the ones being generated by
# glib-build.mk.
_glib_all_enum_types = $(subst .h,,$(notdir $(filter %enum-types.h %enumtypes.h,$(_glib_all_sources))))
_glib_generated_enum_types = $(foreach f,$(_glib_all_enum_types),$(if $(strip $(call _glib_enum_types_sources,$f)),$f))
# _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" to
# _glib_clean_files. So we hide the macro by prefixing each line with
# ":::", as with _glib_clean_am_hidden above.
# We have to include "Makefile" in the dependencies so that the
# outputs get regenerated when you remove files from
# foo_enum_types_sources. (This is especially important for
# foo-enum-types.h, which might otherwise try to #include files that
# no longer exist.).
# Several of the variables/macros in the rule use double $$, so they
# get expanded when *running* the rule rather than when *generating*
# it, because they use _glib_built_sources, which won't be up-to-date
# when the rule is initially generated
define _glib_make_mkenums_rules_hidden
:::$(1).h.stamp: $$(call _glib_enum_types_h_sources,$(1)) Makefile
::: $$(_GLIB_V_GEN) $$(GLIB_MKENUMS) \
::: --fhead "/* Generated by glib-mkenums. Do not edit */\n\n" \
::: --fhead "#ifndef $(_glib_enum_types_guard)\n" \
::: --fhead "#define $(_glib_enum_types_guard)\n\n" \
::: $$(GLIB_MKENUMS_H_FLAGS) \
::: $$($(_glib_enum_types_prefix)_MKENUMS_H_FLAGS) \
::: --fhead "#include <glib-object.h>\n\n" \
::: --fhead "G_BEGIN_DECLS\n" \
::: --vhead "GType @enum_name@_get_type (void) G_GNUC_CONST;\n" \
::: --vhead "#define @ENUMPREFIX@_TYPE_@ENUMSHORT@ (@enum_name@_get_type ())\n\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: $$(call _glib_enum_types_h_sources,$(1)) Makefile
::: $$(_GLIB_V_GEN) $$(GLIB_MKENUMS) \
::: --fhead "/* Generated by glib-mkenums. Do not edit */\n\n" \
::: --fhead "#ifdef HAVE_CONFIG_H\n" \
::: --fhead "#include \"config.h\"\n" \
::: --fhead "#endif\n\n" \
::: --fhead "#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" \
::: --vhead "@enum_name@_get_type (void)\n" \
::: --vhead "{\n" \
::: --vhead " static volatile gsize g_define_type_id__volatile = 0;\n\n" \
::: --vhead " if (g_once_init_enter (&g_define_type_id__volatile))\n" \
::: --vhead " {\n" \
::: --vhead " static const G@Type@Value values[] = {\n" \
::: --vprod " { @VALUENAME@, \"@VALUENAME@\", \"@valuenick@\" },\n" \
::: --vtail " { 0, NULL, NULL }\n" \
::: --vtail " };\n" \
::: --vtail " GType g_define_type_id =\n" \
::: --vtail " g_@type@_register_static (g_intern_static_string (\"@EnumName@\"), values);\n" \
::: --vtail " g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);\n" \
::: --vtail " }\n\n" \
::: --vtail " return g_define_type_id__volatile;\n" \
::: --vtail "}\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
:::
:::_glib_clean_files += $(1).c $(1).h $(1).c.stamp $(1).h.stamp
:::_glib_built_sources += $(1).c $(1).h
:::_glib-ensure-built-sources: $(1).c $(1).h
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_generated_enum_types),$(eval $(call _glib_make_mkenums_rules,$f)))
### GLIB-GENMARSHAL
# see the comments in the glib-mkenums section for details of how this all works
_glib_marshal_file_prefix = $(subst -,_,$(notdir $(1)))
_glib_marshal_symbol_prefix = $(subst marshal,,$(subst _marshal,,$(subst -,_,$(notdir $(1)))))_marshal
_glib_marshal_sources_var = $(_glib_marshal_file_prefix)_sources
_glib_marshal_sources = $(filter-out $(_glib_built_sources) $(1).c,$($(_glib_marshal_sources_var)))
_glib_marshal_c_sources = $(filter %.c,$(_glib_marshal_sources))
_glib_all_marshal = $(subst .h,,$(notdir $(filter %marshal.h,$(_glib_all_sources))))
_glib_generated_marshal = $(foreach f,$(_glib_all_marshal),$(if $(strip $(call _glib_marshal_sources,$f)),$f))
define _glib_make_genmarshal_rules_hidden
:::$(1).list.stamp: $$(call _glib_marshal_c_sources,$(1)) Makefile
::: $$(_GLIB_V_GEN) LC_ALL=C sed -ne 's/.*_$(_glib_marshal_symbol_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_symbol_prefix) --header \
::: $$(GLIB_GENMARSHAL_H_FLAGS) \
::: $$($(_glib_marshal_symbol_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_symbol_prefix) --body \
::: $$(GLIB_GENMARSHAL_C_FLAGS) \
::: $$($(_glib_marshal_symbol_prefix)_GENMARSHAL_C_FLAGS) \
::: $$< ) > $$@.tmp && \
::: mv $$@.tmp $$@
:::
:::_glib_clean_files += $(1).c $(1).h $(1).list $(1).list.stamp
:::_glib_built_sources += $(1).c $(1).h
:::_glib-ensure-built-sources: $(1).c $(1).h
endef
_glib_make_genmarshal_rules = $(subst :::,,$(_glib_make_genmarshal_rules_hidden))
$(foreach f,$(_glib_generated_marshal),$(eval $(call _glib_make_genmarshal_rules,$f)))
# GLIB-COMPILE-SCHEMAS
# see the comments in the glib-mkenums section for details of how this all works
_GLIB_ENUMS_XML_GENERATED = $(filter %.enums.xml,$(gsettingsschema_DATA))
_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_built_sources),$($(_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
::: $$(_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))
_glib_clean_files += $(_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
# see the comments in the glib-mkenums section for details of how this all works
_glib_resources_c_file_prefix = $(subst -,_,$(notdir $(1)))
_glib_resources_c_symbol_prefix = $(subst resources,,$(subst _resources,,$(subst -,_,$(notdir $(1)))))
_glib_resources_c_sources_var = $(_glib_resources_c_file_prefix)_sources
_glib_resources_c_sources = $($(_glib_resources_c_sources_var))
_glib_resources_c_deps = $(shell $(GLIB_COMPILE_RESOURCES) --sourcedir=$(srcdir) --generate-dependencies $(srcdir)/$(_glib_resources_c_sources))
_glib_all_ch_resources = $(subst .h,,$(notdir $(filter %resources.h,$(_glib_all_sources))))
_glib_generated_ch_resources = $(foreach f,$(_glib_all_ch_resources),$(if $(strip $(call _glib_resources_c_sources,$f)),$f))
_glib_all_c_resources = $(filter-out $(_glib_all_ch_resources),$(subst .c,,$(notdir $(filter %resources.c,$(_glib_all_sources)))))
_glib_generated_c_resources = $(foreach f,$(_glib_all_c_resources),$(if $(strip $(call _glib_resources_c_sources,$f)),$f))
define _glib_make_h_resources_rules_hidden
:::$(1).h: $(_glib_resources_c_sources) $(_glib_resources_c_deps)
::: $$(_GLIB_V_GEN) $$(GLIB_COMPILE_RESOURCES) \
::: --target=$$@ --sourcedir="$(srcdir)" \
::: --generate-header $(2) \
::: --c-name $(_glib_resources_c_symbol_prefix) \
::: $$(GLIB_COMPILE_RESOURCES_FLAGS) \
::: $$($(_glib_resources_c_file_prefix)_COMPILE_RESOURCES_FLAGS) \
::: $$<
:::
:::_glib_clean_files += $(1).h
:::_glib_built_sources += $(1).h
:::_glib-ensure-built-sources: $(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_sources) $(_glib_resources_c_deps)
::: $$(_GLIB_V_GEN) $$(GLIB_COMPILE_RESOURCES) \
::: --target=$$@ --sourcedir="$(srcdir)" \
::: --generate-source $(2) \
::: --c-name $(_glib_resources_c_symbol_prefix) \
::: $$(GLIB_COMPILE_RESOURCES_FLAGS) \
::: $$($(_glib_resources_c_file_prefix)_COMPILE_RESOURCES_FLAGS) \
::: $$<
:::
:::_glib_dist_files += $(_glib_resources_c_sources) $(_glib_resources_c_deps)
:::_glib_clean_files += $(1).c
:::_glib_built_sources += $(1).c
:::_glib-ensure-built-sources: $(1).c
endef
_glib_make_c_resources_rules = $(subst :::,,$(_glib_make_c_resources_rules_hidden))
$(foreach f,$(_glib_generated_ch_resources),$(eval $(call _glib_make_h_resources_rules,$f,--manual-register)))
$(foreach f,$(_glib_generated_ch_resources),$(eval $(call _glib_make_c_resources_rules,$f,--manual-register)))
$(foreach f,$(_glib_generated_c_resources),$(eval $(call _glib_make_c_resources_rules,$f,)))
_glib_resources_standalone_prefix = $(subst -,_,$(notdir $(1)))_gresource
_glib_resources_standalone_sources_var = $(_glib_resources_standalone_prefix)_sources
_glib_resources_standalone_sources = $($(_glib_resources_standalone_sources_var))
_glib_resources_standalone_deps = $(shell $(GLIB_COMPILE_RESOURCES) --sourcedir=$(srcdir) --generate-dependencies $(srcdir)/$(_glib_resources_standalone_sources))
_glib_all_standalone_resources = $(subst .gresource,,$(notdir $(filter %.gresource,$(_glib_all_data))))
_glib_generated_standalone_resources = $(foreach f,$(_glib_all_standalone_resources),$(if $(strip $(call _glib_resources_standalone_sources,$f)),$f))
define _glib_make_standalone_resources_rules_hidden
:::$(1).gresource: $(_glib_resources_standalone_sources) $(_glib_resources_standalone_deps)
::: $$(_GLIB_V_GEN) $$(GLIB_COMPILE_RESOURCES) \
::: --target=$$@ --sourcedir="$(srcdir)" \
::: $$(GLIB_COMPILE_RESOURCES_FLAGS) \
::: $$($(_glib_resources_standalone_prefix)_COMPILE_RESOURCES_FLAGS) \
::: $$<
:::
:::_glib_dist_files += $(_glib_resources_standalone_sources) $(_glib_resources_standalone_deps)
:::_glib_clean_files += $(1).gresource
:::_glib_built_sources += $(1).gresource
:::_glib-ensure-built-sources: $(1).gresource
endef
_glib_make_standalone_resources_rules = $(subst :::,,$(_glib_make_standalone_resources_rules_hidden))
$(foreach f,$(_glib_generated_standalone_resources),$(eval $(call _glib_make_standalone_resources_rules,$f)))