Test script to verify that timezone cache is properly removed on zonefile alteration.
[asterisk/asterisk.git] / Makefile.moddir_rules
1 #
2 # Asterisk -- A telephony toolkit for Linux.
3
4 # Makefile rules for subdirectories containing modules
5 #
6 # Copyright (C) 2006, Digium, Inc.
7 #
8 # Kevin P. Fleming <kpfleming@digium.com>
9 #
10 # This program is free software, distributed under the terms of
11 # the GNU General Public License
12 #
13
14 # Makefile rules for building modules.
15
16 # In most cases, we set target-specific variables for certain targets
17 # (remember that they apply recursively to prerequisites).
18 # Also note that we can only set one variable per rule, so we have to
19 # repeat the left hand side to set multiple variables.
20
21 ifeq ($(findstring LOADABLE_MODULES,$(MENUSELECT_CFLAGS)),)
22   _ASTCFLAGS+=${GC_CFLAGS}
23 endif
24
25 ifneq ($(findstring STATIC_BUILD,$(MENUSELECT_CFLAGS)),)
26   STATIC_BUILD=-static
27 endif
28
29 include $(ASTTOPDIR)/Makefile.rules
30
31 # If MODULE_PREFIX is defined, use it to run the standard functions to set
32 # C_MODS, CC_MODS, LOADABLE_MODS and EMBEDDED_MODS.
33 # Each word of MODULE_PREFIX is a prefix for filenames that we consider
34 # valid C or CC modules (eg. app, func ...). Note that the underscore
35 # is added here, and does not need to be in MODULE_PREFIX
36 #
37 # Use MODULE_EXCLUDE to specify additional modules to exclude.
38
39 ifneq ($(MODULE_PREFIX),)
40     ALL_C_MODS:=
41     ALL_CC_MODS:=
42     ALL_C_MODS+=$(foreach p,$(MODULE_PREFIX),$(patsubst %.c,%,$(wildcard $(p)_*.c)))
43     ALL_CC_MODS+=$(foreach p,$(MODULE_PREFIX),$(patsubst %.cc,%,$(wildcard $(p)_*.cc)))
44 endif
45  
46 C_MODS:=$(filter-out $(MENUSELECT_$(MENUSELECT_CATEGORY)),$(ALL_C_MODS))
47 CC_MODS:=$(filter-out $(MENUSELECT_$(MENUSELECT_CATEGORY)),$(ALL_CC_MODS))
48
49 ifneq ($(findstring $(MENUSELECT_CATEGORY),$(MENUSELECT_EMBED)),)
50     EMBEDDED_MODS:=$(C_MODS) $(CC_MODS)
51 else
52     LOADABLE_MODS:=$(C_MODS) $(CC_MODS)
53 endif
54
55 # Both C++ and C++ sources need their module name in AST_MODULE
56 # We also pass whatever _INCLUDE list is generated by menuselect
57 # (they are stored in file 'makeopts')
58
59 $(addsuffix .oo,$(CC_MODS)) $(addsuffix .o,$(C_MODS)):  \
60         _ASTCFLAGS+= -DAST_MODULE=\"$*\" $(MENUSELECT_OPTS_$*:%=-D%) $(foreach dep,$(MENUSELECT_DEPENDS_$*),$(value $(dep)_INCLUDE))
61
62 ifeq ($(findstring $(OSARCH), mingw32 cygwin ),)
63    # don't define -fPIC on mingw32 and cygwin, it is the default
64    $(LOADABLE_MODS:%=%.so): _ASTCFLAGS+=-fPIC
65 endif
66
67 # For loadable modules, pass _LIB and _LDFLAGS from menuselect.
68 $(LOADABLE_MODS:%=%.so): LIBS+=$(foreach dep,$(MENUSELECT_DEPENDS_$*),$(value $(dep)_LIB))
69 $(LOADABLE_MODS:%=%.so): _ASTLDFLAGS+=$(foreach dep,$(MENUSELECT_DEPENDS_$*),$(value $(dep)_LDFLAGS))
70
71 $(EMBEDDED_MODS:%=%.o): _ASTCFLAGS+=-DEMBEDDED_MODULE=$*
72
73 $(addsuffix .so,$(filter $(LOADABLE_MODS),$(C_MODS))): %.so: %.o
74 $(addsuffix .so,$(filter $(LOADABLE_MODS),$(CC_MODS))): %.so: %.oo
75
76 modules.link: $(addsuffix .eo,$(filter $(EMBEDDED_MODS),$(C_MODS)))
77
78 .PHONY: clean uninstall _all moduleinfo makeopts
79
80 ifneq ($(LOADABLE_MODS),)
81 _all: $(LOADABLE_MODS:%=%.so)
82 ifneq ($(findstring $(OSARCH), mingw32 cygwin ),)
83   # linker options and extra libraries for cygwin
84   SOLINK=-Wl,--out-implib=lib$@.a -shared
85   LIBS+=-L$(ASTTOPDIR)/main -lasterisk -L$(ASTTOPDIR)/res $($@_LIBS)
86   # additional libraries in res/
87 endif
88 endif
89
90 ifneq ($(EMBEDDED_MODS),)
91 _all: modules.link
92 __embed_ldscript:
93         @echo "../$(SUBDIR)/modules.link"
94 __embed_ldflags:
95         @echo "$(foreach mod,$(filter $(EMBEDDED_MODS),$(C_MODS)),$(foreach dep,$(MENUSELECT_DEPENDS_$(mod)),$(dep)_LDFLAGS))"
96         @echo "$(foreach mod,$(filter $(EMBEDDED_MODS),$(CC_MODS)),$(foreach dep,$(MENUSELECT_DEPENDS_$(mod)),$(dep)_LDFLAGS))"
97 __embed_libs:
98         @echo "$(foreach mod,$(filter $(EMBEDDED_MODS),$(C_MODS)),$(foreach dep,$(MENUSELECT_DEPENDS_$(mod)),$(dep)_LIB))"
99         @echo "$(foreach mod,$(filter $(EMBEDDED_MODS),$(CC_MODS)),$(foreach dep,$(MENUSELECT_DEPENDS_$(mod)),$(dep)_LIB))"
100 else
101 __embed_ldscript:
102 __embed_ldflags:
103 __embed_libs:
104 endif
105
106 modules.link:
107         @rm -f $@
108         @for file in $(patsubst %,$(SUBDIR)/%,$(filter %.eo,$^)); do echo "INPUT (../$${file})" >> $@; done
109         @for file in $(patsubst %,$(SUBDIR)/%,$(filter-out %.eo,$^)); do echo "INPUT (../$${file})" >> $@; done
110
111 clean::
112         rm -f *.so *.o *.oo *.eo *.i *.ii
113         rm -f .*.d
114         rm -f *.s *.i
115         rm -f modules.link
116
117 install:: all
118         @echo "Installing modules from `basename $(CURDIR)`..."
119         @for x in $(LOADABLE_MODS:%=%.so); do $(INSTALL) -m 755 $$x $(DESTDIR)$(MODULES_DIR) ; done
120
121 uninstall::
122
123 dist-clean::
124         rm -f .*.moduleinfo .moduleinfo
125         rm -f .*.makeopts .makeopts
126
127 .%.moduleinfo: %.c
128         @echo "<member name=\"$*\" displayname=\"$(shell $(GREP) -e AST_MODULE_INFO $< | head -n 1 | cut -d '"' -f 2)\" remove_on_change=\"$(SUBDIR)/$*.o $(SUBDIR)/$*.so\">" > $@
129         $(AWK) -f $(ASTTOPDIR)/build_tools/get_moduleinfo $< >> $@
130         echo "</member>" >> $@
131
132 .%.moduleinfo: %.cc
133         @echo "<member name=\"$*\" displayname=\"$(shell $(GREP) -e AST_MODULE_INFO $< | head -n 1 | cut -d '"' -f 2)\" remove_on_change=\"$(SUBDIR)/$*.oo $(SUBDIR)/$*.so\">" > $@
134         $(AWK) -f $(ASTTOPDIR)/build_tools/get_moduleinfo $< >> $@
135         echo "</member>" >> $@
136
137 .moduleinfo:: $(addsuffix .moduleinfo,$(addprefix .,$(ALL_C_MODS) $(ALL_CC_MODS)))
138         @echo "<category name=\"MENUSELECT_$(MENUSELECT_CATEGORY)\" displayname=\"$(MENUSELECT_DESCRIPTION)\" remove_on_change=\"$(SUBDIR)/modules.link\">" > $@
139         @cat $^ >> $@
140         @echo "</category>" >> $@
141
142 moduleinfo: .moduleinfo
143         @cat $<
144
145 .%.makeopts: %.c
146         @$(AWK) -f $(ASTTOPDIR)/build_tools/get_makeopts $< > $@
147
148 .%.makeopts: %.cc
149         @$(AWK) -f $(ASTTOPDIR)/build_tools/get_makeopts $< > $@
150
151 .makeopts:: $(addsuffix .makeopts,$(addprefix .,$(ALL_C_MODS) $(ALL_CC_MODS)))
152         @cat $^ > $@
153
154 makeopts: .makeopts
155         @cat $<
156
157 ifneq ($(wildcard .*.d),)
158    include .*.d
159 endif