Makefile.glib 7.1 KB

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