Merge "chan_misdn: Fix a few issues causing compile errors"
[asterisk/asterisk.git] / Makefile.moddir_rules
index e96342e..a92b0d8 100644 (file)
@@ -1,5 +1,5 @@
 #
-# Asterisk -- A telephony toolkit for Linux.
+# Asterisk -- An open source telephony toolkit.
 #
 # Makefile rules for subdirectories containing modules
 #
@@ -60,7 +60,29 @@ endif
 # is used to collect the required flags for a module... which can
 # then be used any place they are required.
 
-MOD_ASTCFLAGS=-DAST_MODULE=\"$(1)\" $(MENUSELECT_OPTS_$(1):%=-D%) $(foreach dep,$(MENUSELECT_DEPENDS_$(1)),$(value $(dep)_INCLUDE))
+MOD_ASTCFLAGS=\
+       -DAST_MODULE=\"$(1)\" \
+       -DAST_MODULE_SELF_SYM=__internal_$(1)_self \
+       $(MENUSELECT_OPTS_$(1):%=-D%) \
+       $(foreach dep,$(MENUSELECT_DEPENDS_$(1)),$(value $(dep)_INCLUDE))
+
+define MOD_ADD_SOURCE
+$$(if $$(filter $(1),$$(EMBEDDED_MODS)),modules.link,$(1).so): $$(subst $(3),$(5),$(2))
+$$(subst $(3),$(5),$(2)): _ASTCFLAGS+=$$(call MOD_ASTCFLAGS,$(1))
+.$(1).moduleinfo: MODULEINFO_EXTRA_OUTPUT=" $$(addprefix $$(SUBDIR)/,$$(subst $(3),$(5),$(2)) $$(subst $(3),$(4),$(2)))"
+# The use of wildcard ensures that 'make menuselect' will not fail for modules that
+# require additional source downloads.
+.$(1).moduleinfo: $(wildcard $(2))
+
+clean:: clean-$(1)$(3)
+
+clean-$(1)$(3):
+       rm -f $$(subst $(3),$(4),$(2)) $$(subst $(3),$(5),$(2)) $$(subst $(3),$(6),$(2)) $$(subst $(3),$(7),$(2))
+
+endef
+
+MOD_ADD_C=$(eval $(call MOD_ADD_SOURCE,$(1),$(2),.c,.i,.o,.gcda,.gcno))
+MOD_ADD_CC=$(eval $(call MOD_ADD_SOURCE,$(1),$(2),.cc,.ii,.oo,.gcda,.gcno))
 
 $(addsuffix .oo,$(CC_MODS)) $(addsuffix .o,$(C_MODS)): \
        _ASTCFLAGS+=$(call MOD_ASTCFLAGS,$*)
@@ -118,11 +140,12 @@ clean::
        rm -f *.so *.o *.oo *.eo *.i *.ii
        rm -f .*.d
        rm -f *.s *.i
+       rm -f *.gcda *.gcno
        rm -f modules.link
 
 install:: all
        @echo "Installing modules from `basename $(CURDIR)`..."
-       @for x in $(LOADABLE_MODS:%=%.so); do $(INSTALL) -m 755 $$x "$(DESTDIR)$(MODULES_DIR)" ; done
+       @for x in $(LOADABLE_MODS:%=%.so); do $(INSTALL) -m 755 $$x "$(DESTDIR)$(ASTMODDIR)" ; done
 
 uninstall::
 
@@ -132,13 +155,13 @@ dist-clean::
        rm -f *.exports
 
 .%.moduleinfo: %.c
-       @echo "<member name=\"$*\" displayname=\"$(shell $(GREP) -e AST_MODULE_INFO $< | head -n 1 | cut -d '"' -f 2)\" remove_on_change=\"$(SUBDIR)/$*.o $(SUBDIR)/$*.so\">" > $@
-       $(AWK) -f $(ASTTOPDIR)/build_tools/get_moduleinfo $< >> $@
+       @echo "<member name=\"$*\" displayname=\"$(shell $(GREP) -e AST_MODULE_INFO $< | head -n 1 | cut -d '"' -f 2)\" remove_on_change=\"$(SUBDIR)/$*.o $(SUBDIR)/$*.i $(SUBDIR)/$*.so$(MODULEINFO_EXTRA_OUTPUT)\">" > $@
+       $(AWK) -f $(ASTTOPDIR)/build_tools/get_moduleinfo $^ >> $@
        echo "</member>" >> $@
 
 .%.moduleinfo: %.cc
-       @echo "<member name=\"$*\" displayname=\"$(shell $(GREP) -e AST_MODULE_INFO $< | head -n 1 | cut -d '"' -f 2)\" remove_on_change=\"$(SUBDIR)/$*.oo $(SUBDIR)/$*.so\">" > $@
-       $(AWK) -f $(ASTTOPDIR)/build_tools/get_moduleinfo $< >> $@
+       @echo "<member name=\"$*\" displayname=\"$(shell $(GREP) -e AST_MODULE_INFO $< | head -n 1 | cut -d '"' -f 2)\" remove_on_change=\"$(SUBDIR)/$*.oo $(SUBDIR)/$*.ii $(SUBDIR)/$*.so$(MODULEINFO_EXTRA_OUTPUT)\">" > $@
+       $(AWK) -f $(ASTTOPDIR)/build_tools/get_moduleinfo $^ >> $@
        echo "</member>" >> $@
 
 .moduleinfo:: $(addsuffix .moduleinfo,$(addprefix .,$(sort $(ALL_C_MODS) $(ALL_CC_MODS))))