2463
by Dan Winship
Use Makefile.glib to build marshallers |
1 |
# -*- Mode: makefile -*-
|
2 |
#
|
|
3 |
# Work-in-progress...
|
|
4 |
# See https://bugzilla.gnome.org/show_bug.cgi?id=654395
|
|
5 |
||
6 |
_GLIB_CLEANFILES = |
|
7 |
_GLIB_DISTCLEANFILES = |
|
8 |
||
9 |
_GLIB_V_GEN = $(_glib_v_gen_$(V)) |
|
10 |
_glib_v_gen_ = $(_glib_v_gen_$(AM_DEFAULT_VERBOSITY)) |
|
11 |
_glib_v_gen_0 = @echo " GEN " $(subst .stamp,,$@); |
|
12 |
||
13 |
||
14 |
### glib-genmarshal
|
|
15 |
||
16 |
_GLIB_MARSHAL_GENERATED = $(subst .h,,$(filter %marshal.h,$(GLIB_GENERATED))) |
|
17 |
||
18 |
_glib_marshal_prefix = $(subst marshal,,$(subst _marshal,,$(subst -,_,$(notdir $(1)))))_marshal |
|
19 |
_glib_marshal_sources_var = $(subst -,_,$(notdir $(1)))_sources |
|
20 |
_glib_marshal_sources = $(filter-out %.h,$(filter-out $(GLIB_GENERATED),$($(_glib_marshal_sources_var)))) |
|
21 |
||
22 |
define _glib_make_genmarshal_rules
|
|
23 |
$(if $(_glib_marshal_sources),,$(error Need to define $(_glib_marshal_sources_var) for $(1).[ch])) |
|
24 |
||
25 |
$(1).list.stamp: $(_glib_marshal_sources) |
|
26 |
$$(_GLIB_V_GEN) LC_ALL=C sed -ne 's/.*_$(_glib_marshal_prefix)_\([_A-Z]*\).*/\1/p' $$^ | sort -u | sed -e 's/__/:/' -e 's/_/,/g' > $(1).list.tmp && \ |
|
27 |
(cmp -s $(1).list.tmp $(1).list || cp $(1).list.tmp $(1).list) && \ |
|
28 |
rm -f $(1).list.tmp && \ |
|
29 |
echo timestamp > $$@ |
|
30 |
||
31 |
$(1).list: $(1).list.stamp |
|
32 |
@true |
|
33 |
||
34 |
$(1).h: $(1).list |
|
35 |
$$(_GLIB_V_GEN) $$(GLIB_GENMARSHAL) \ |
|
36 |
--prefix=_$(_glib_marshal_prefix) --header \ |
|
37 |
$$(GLIB_GENMARSHAL_H_FLAGS) \ |
|
38 |
$$($(_glib_marshal_prefix)_GENMARSHAL_H_FLAGS) \ |
|
39 |
$$< > $$@.tmp && \ |
|
40 |
mv $$@.tmp $$@ |
|
41 |
||
42 |
$(1).c: $(1).list |
|
43 |
$$(_GLIB_V_GEN) (echo "#include \"$$(subst .c,.h,$$(@F))\""; $$(GLIB_GENMARSHAL) \ |
|
44 |
--prefix=_$(_glib_marshal_prefix) --body \ |
|
45 |
$$(GLIB_GENMARSHAL_C_FLAGS) \ |
|
46 |
$$($(_glib_marshal_prefix)_GENMARSHAL_C_FLAGS) \ |
|
47 |
$$< ) > $$@.tmp && \ |
|
48 |
mv $$@.tmp $$@ |
|
49 |
||
50 |
_GLIB_CLEANFILES += $(1).list.stamp $(1).list |
|
51 |
_GLIB_DISTCLEANFILES += $(1).h $(1).c |
|
52 |
endef
|
|
53 |
||
54 |
$(foreach f,$(_GLIB_MARSHAL_GENERATED),$(eval $(call _glib_make_genmarshal_rules,$f))) |
|
55 |
||
56 |
||
57 |
### glib-mkenums
|
|
58 |
||
59 |
_GLIB_ENUM_TYPES_GENERATED = $(subst .h,,$(filter %enum-types.h %enumtypes.h,$(GLIB_GENERATED))) |
|
60 |
||
61 |
_glib_enum_types_prefix = $(subst -,_,$(notdir $(1))) |
|
62 |
_glib_enum_types_guard = __$(shell LC_ALL=C echo $(_glib_enum_types_prefix) | tr 'a-z' 'A-Z')_H__ |
|
63 |
_glib_enum_types_sources_var = $(_glib_enum_types_prefix)_sources |
|
64 |
_glib_enum_types_sources = $(filter-out $(GLIB_GENERATED),$($(_glib_enum_types_sources_var))) |
|
65 |
_glib_enum_types_h_sources = $(filter %.h,$(_glib_enum_types_sources)) |
|
66 |
||
67 |
define _glib_make_mkenums_rules
|
|
68 |
$(if $(_glib_enum_types_sources),,$(error Need to define $(_glib_enum_types_sources_var) for $(1).[ch])) |
|
69 |
||
70 |
$(1).h.stamp: $(_glib_enum_types_h_sources) |
|
71 |
$$(_GLIB_V_GEN) $$(GLIB_MKENUMS) \ |
|
72 |
--fhead "/* Generated by glib-mkenums. Do not edit */\n\n#ifndef $(_glib_enum_types_guard)\n#define $(_glib_enum_types_guard)\n\n" \ |
|
73 |
$$(GLIB_MKENUMS_H_FLAGS) \ |
|
74 |
$$($(_glib_enum_types_prefix)_MKENUMS_H_FLAGS) \ |
|
75 |
--fhead "#include <glib-object.h>\n\nG_BEGIN_DECLS\n" \ |
|
76 |
--vhead "GType @enum_name@_get_type (void) G_GNUC_CONST;\n#define @ENUMPREFIX@_TYPE_@ENUMSHORT@ (@enum_name@_get_type ())\n" \ |
|
77 |
--ftail "G_END_DECLS\n\n#endif /* $(_glib_enum_types_guard) */" \ |
|
78 |
$$^ > $(1).h.tmp && \ |
|
79 |
(cmp -s $(1).h.tmp $(1).h || cp $(1).h.tmp $(1).h) && \ |
|
80 |
rm -f $(1).h.tmp && \ |
|
81 |
echo timestamp > $$@ |
|
82 |
||
83 |
$(1).h: $(1).h.stamp |
|
84 |
@true |
|
85 |
||
86 |
$(1).c.stamp: $(_glib_enum_types_h_sources) |
|
87 |
$$(_GLIB_V_GEN) $$(GLIB_MKENUMS) \ |
|
88 |
--fhead "/* Generated by glib-mkenums. Do not edit */\n\n#include \"$(notdir $(1)).h\"\n" \ |
|
89 |
$$(GLIB_MKENUMS_C_FLAGS) \ |
|
90 |
$$($(_glib_enum_types_prefix)_MKENUMS_C_FLAGS) \ |
|
91 |
--fhead "$$(foreach f,$$(^F),\n#include \"$$(f)\")\n\n" \ |
|
92 |
--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" \ |
|
93 |
--vprod " { @VALUENAME@, \"@VALUENAME@\", \"@valuenick@\" },\n" \ |
|
94 |
--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" \ |
|
95 |
$$^ > $(1).c.tmp && \ |
|
96 |
(cmp -s $(1).c.tmp $(1).c || cp $(1).c.tmp $(1).c) && \ |
|
97 |
rm -f $(1).c.tmp && \ |
|
98 |
echo timestamp > $$@ |
|
99 |
||
100 |
$(1).c: $(1).c.stamp |
|
101 |
@true |
|
102 |
||
103 |
_GLIB_CLEANFILES += $(1).h.stamp $(1).c.stamp |
|
104 |
_GLIB_DISTCLEANFILES += $(1).h $(1).c $(1).h.stamp $(1).c.stamp |
|
105 |
endef
|
|
106 |
||
107 |
$(foreach f,$(_GLIB_ENUM_TYPES_GENERATED),$(eval $(call _glib_make_mkenums_rules,$f))) |
|
108 |
||
109 |
||
110 |
### glib-compile-schemas
|
|
111 |
||
112 |
_GLIB_ENUMS_XML_GENERATED = $(filter %.enums.xml,$(GLIB_GENERATED)) |
|
113 |
_GLIB_GSETTINGS_SCHEMA_FILES = $(filter %.gschema.xml,$(gsettingsschema_DATA)) |
|
114 |
_GLIB_GSETTINGS_VALID_FILES = $(subst .xml,.valid,$(_GLIB_GSETTINGS_SCHEMA_FILES)) |
|
115 |
||
116 |
_glib_enums_xml_prefix = $(subst .,_,$(notdir $(1))) |
|
117 |
_glib_enums_xml_sources_var = $(_glib_enums_xml_prefix)_sources |
|
118 |
_glib_enums_xml_sources = $(filter-out $(GLIB_GENERATED),$($(_glib_enums_xml_sources_var))) |
|
119 |
_glib_enums_xml_namespace = $(subst .enums.xml,,$(notdir $(1))) |
|
120 |
||
121 |
define _glib_make_enums_xml_rule
|
|
122 |
$(if $(_glib_enums_xml_sources),,$(error Need to define $(_glib_enums_xml_sources_var) for $(1))) |
|
123 |
||
124 |
$(1): $(_glib_enums_xml_sources) |
|
125 |
$$(_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>" $$^ > $$@.tmp && mv $$@.tmp $$@ |
|
126 |
endef
|
|
127 |
||
128 |
_GLIB_V_CHECK = $(_glib_v_check_$(V)) |
|
129 |
_glib_v_check_ = $(_glib_v_check_$(AM_DEFAULT_VERBOSITY)) |
|
130 |
_glib_v_check_0 = @echo " CHECK " $(subst .valid,.xml,$@); |
|
131 |
||
132 |
define _glib_make_schema_validate_rule
|
|
133 |
$(subst .xml,.valid,$(1)): $(_GLIB_ENUMS_XML_GENERATED) $(1) |
|
134 |
$$(_GLIB_V_CHECK) $$(GLIB_COMPILE_SCHEMAS) --strict --dry-run $$(addprefix --schema-file=,$$^) && touch $$@ |
|
135 |
endef
|
|
136 |
||
137 |
define _glib_make_schema_rules
|
|
138 |
all-am: $(_GLIB_GSETTINGS_VALID_FILES) |
|
139 |
||
140 |
install-data-am: glib-install-schemas-hook |
|
141 |
||
142 |
glib-install-schemas-hook: install-gsettingsschemaDATA |
|
143 |
@test -n "$(GSETTINGS_DISABLE_SCHEMAS_COMPILE)$(DESTDIR)" || (echo $(GLIB_COMPILE_SCHEMAS) $(gsettingsschemadir); $(GLIB_COMPILE_SCHEMAS) $(gsettingsschemadir)) |
|
144 |
||
145 |
uninstall-am: glib-uninstall-schemas-hook |
|
146 |
||
147 |
glib-uninstall-schemas-hook: uninstall-gsettingsschemaDATA |
|
148 |
@test -n "$(GSETTINGS_DISABLE_SCHEMAS_COMPILE)$(DESTDIR)" || (echo $(GLIB_COMPILE_SCHEMAS) $(gsettingsschemadir); $(GLIB_COMPILE_SCHEMAS) $(gsettingsschemadir)) |
|
149 |
||
150 |
.PHONY: glib-install-schemas-hook glib-uninstall-schemas-hook |
|
151 |
endef
|
|
152 |
||
153 |
_GLIB_CLEANFILES += $(_GLIB_ENUMS_XML_GENERATED) $(_GLIB_GSETTINGS_VALID_FILES) |
|
154 |
||
155 |
$(foreach f,$(_GLIB_ENUMS_XML_GENERATED),$(eval $(call _glib_make_enums_xml_rule,$f))) |
|
156 |
$(foreach f,$(_GLIB_GSETTINGS_SCHEMA_FILES),$(eval $(call _glib_make_schema_validate_rule,$f))) |
|
157 |
$(if $(_GLIB_GSETTINGS_SCHEMA_FILES),$(eval $(_glib_make_schema_rules))) |
|
158 |
||
159 |
||
160 |
### Cleanup
|
|
161 |
.PHONY: clean-glib distclean-glib |
|
162 |
||
163 |
clean-am: clean-glib |
|
164 |
clean-glib: |
|
165 |
$(if $(strip $(_GLIB_CLEANFILES)),-rm -f $(_GLIB_CLEANFILES)) |
|
166 |
||
167 |
distclean-am: distclean-glib |
|
168 |
distclean-glib: |
|
169 |
$(if $(strip $(_GLIB_DISTCLEANFILES)),-rm -f $(_GLIB_DISTCLEANFILES)) |