]> granicus.if.org Git - ejabberd/blob - Makefile.in
Merge pull request #3069 from nosnilmot/jwt-custom-jid-field
[ejabberd] / Makefile.in
1 REBAR = @ESCRIPT@ rebar
2 INSTALL = @INSTALL@
3 SED = @SED@
4 ERL = @ERL@
5
6 prefix = @prefix@
7 exec_prefix = @exec_prefix@
8
9 DESTDIR =
10
11 # /etc/ejabberd/
12 ETCDIR = $(DESTDIR)@sysconfdir@/ejabberd
13
14 # /bin/
15 BINDIR = $(DESTDIR)@bindir@
16
17 # /sbin/
18 SBINDIR = $(DESTDIR)@sbindir@
19
20 # /lib/
21 LIBDIR =  $(DESTDIR)@libdir@
22
23 # /lib/ejabberd/
24 EJABBERDDIR = $(DESTDIR)@libdir@/ejabberd
25
26 # /share/doc/ejabberd
27 PACKAGE_TARNAME = @PACKAGE_TARNAME@
28 datarootdir = @datarootdir@
29 DOCDIR = $(DESTDIR)@docdir@
30
31 # /usr/lib/ejabberd/ebin/
32 BEAMDIR = $(EJABBERDDIR)/ebin
33
34 # /usr/lib/ejabberd/include/
35 INCLUDEDIR = $(EJABBERDDIR)/include
36
37 # /usr/lib/ejabberd/priv/
38 PRIVDIR = $(EJABBERDDIR)/priv
39
40 # /usr/lib/ejabberd/priv/bin
41 PBINDIR = $(PRIVDIR)/bin
42
43 # /usr/lib/ejabberd/priv/lib
44 SODIR = $(PRIVDIR)/lib
45
46 # /usr/lib/ejabberd/priv/msgs
47 MSGSDIR = $(PRIVDIR)/msgs
48
49 # /usr/lib/ejabberd/priv/css
50 CSSDIR = $(PRIVDIR)/css
51
52 # /usr/lib/ejabberd/priv/img
53 IMGDIR = $(PRIVDIR)/img
54
55 # /usr/lib/ejabberd/priv/js
56 JSDIR = $(PRIVDIR)/js
57
58 # /usr/lib/ejabberd/priv/sql
59 SQLDIR = $(PRIVDIR)/sql
60
61 # /usr/lib/ejabberd/priv/lua
62 LUADIR = $(PRIVDIR)/lua
63
64 # /var/lib/ejabberd/
65 SPOOLDIR = $(DESTDIR)@localstatedir@/lib/ejabberd
66
67 # /var/lock/ejabberdctl
68 CTLLOCKDIR = $(DESTDIR)@localstatedir@/lock/ejabberdctl
69
70 # /var/lib/ejabberd/.erlang.cookie
71 COOKIEFILE = $(SPOOLDIR)/.erlang.cookie
72
73 # /var/log/ejabberd/
74 LOGDIR = $(DESTDIR)@localstatedir@/log/ejabberd
75
76 INSTALLUSER=@INSTALLUSER@
77 # if no user was enabled, don't set privileges or ownership
78 ifeq ($(INSTALLUSER),)
79   O_USER=
80   G_USER=
81   CHOWN_COMMAND=echo
82   CHOWN_OUTPUT=/dev/null
83   INIT_USER=root
84 else
85   O_USER=-o $(INSTALLUSER)
86   G_USER=-g $(INSTALLUSER)
87   CHOWN_COMMAND=chown
88   CHOWN_OUTPUT=&1
89   INIT_USER=$(INSTALLUSER)
90 endif
91 # if no group was enabled, don't set privileges or ownership
92 INSTALLGROUP=@INSTALLGROUP@
93 ifneq ($(INSTALLGROUP),)
94   G_USER=-g $(INSTALLGROUP)
95 endif
96
97 all: deps src
98
99 deps: deps/.got
100
101 deps/.got:
102         rm -rf deps/.got
103         rm -rf deps/.built
104         mkdir -p deps
105         $(REBAR) get-deps && :> deps/.got
106
107 deps/.built: deps/.got
108         $(REBAR) configure-deps
109         $(REBAR) compile && :> deps/.built
110
111 src: deps/.built
112         $(REBAR) skip_deps=true compile
113
114 update:
115         rm -rf deps/.got
116         rm -rf deps/.built
117         $(REBAR) update-deps && :> deps/.got
118
119 xref: all
120         $(REBAR) skip_deps=true xref
121
122 hooks: all
123         tools/hook_deps.sh ebin
124
125 options: all
126         tools/opt_types.sh ejabberd_option ebin
127
128 translations:
129         tools/prepare-tr.sh
130
131 edoc:
132         $(ERL) -noinput +B -eval \
133         'case edoc:application(ejabberd, ".", []) of ok -> halt(0); error -> halt(1) end.'
134
135 JOIN_PATHS=$(if $(wordlist 2,1000,$(1)),$(firstword $(1))/$(call JOIN_PATHS,$(wordlist 2,1000,$(1))),$(1))
136
137 VERSIONED_DEP=$(if $(DEP_$(1)_VERSION),$(DEP_$(1)_VERSION),$(1))
138
139 ELIXIR_TO_DEST=$(LIBDIR) $(call VERSIONED_DEP,$(word 2,$(1))) $(wordlist 5,1000,$(1))
140 DEPS_TO_DEST=$(LIBDIR) $(call VERSIONED_DEP,$(word 2,$(1))) $(wordlist 3,1000,$(1))
141 MAIN_TO_DEST=$(LIBDIR) $(call VERSIONED_DEP,ejabberd) $(1)
142 TO_DEST_SINGLE=$(if $(subst XdepsX,,X$(word 1,$(1))X),$(call MAIN_TO_DEST,$(1)),$(if $(subst XlibX,,X$(word 3,$(1))X),$(call DEPS_TO_DEST,$(1)),$(call ELIXIR_TO_DEST,$(1))))
143 TO_DEST=$(foreach path,$(1),$(call JOIN_PATHS,$(call TO_DEST_SINGLE,$(subst /, ,$(path)))))
144
145 FILTER_DIRS=$(foreach path,$(1),$(if $(wildcard $(path)/*),,$(path)))
146 FILES_WILDCARD=$(call FILTER_DIRS,$(foreach w,$(1),$(wildcard $(w))))
147
148 ifeq ($(MAKECMDGOALS),copy-files-sub)
149
150 DEPS:=$(sort $(shell $(REBAR) -q list-deps|$(SED) -ne '/ TAG / s/ .*// p; / REV / s/ .*// p; / BRANCH / s/ .*// p'))
151
152 DEPS_FILES=$(call FILES_WILDCARD,$(foreach DEP,$(DEPS),deps/$(DEP)/ebin/*.beam deps/$(DEP)/ebin/*.app deps/$(DEP)/priv/* deps/$(DEP)/priv/lib/* deps/$(DEP)/priv/bin/* deps/$(DEP)/include/*.hrl deps/$(DEP)/COPY* deps/$(DEP)/LICENSE* deps/$(DEP)/lib/*/ebin/*.beam deps/$(DEP)/lib/*/ebin/*.app))
153
154 BINARIES=deps/epam/priv/bin/epam deps/eimp/priv/bin/eimp deps/fs/priv/mac_listener
155
156 DEPS_FILES_FILTERED=$(filter-out $(BINARIES) deps/elixir/ebin/elixir.app,$(DEPS_FILES))
157 DEPS_DIRS=$(sort deps/ $(foreach DEP,$(DEPS),deps/$(DEP)/) $(dir $(DEPS_FILES)))
158
159 MAIN_FILES=$(filter-out %/configure.beam,$(call FILES_WILDCARD,ebin/*.beam ebin/*.app priv/msgs/*.msg priv/css/*.css priv/img/*.png priv/js/*.js priv/lib/* include/*.hrl COPYING))
160 MAIN_DIRS=$(sort $(dir $(MAIN_FILES)) priv/bin priv/sql priv/lua)
161
162 define DEP_VERSION_template
163 DEP_$(1)_VERSION:=$(shell $(SED) -e '/vsn/!d;s/.*, *"/$(1)-/;s/".*//' $(2) 2>/dev/null)
164 endef
165
166 DELETE_TARGET_SO=$(if $(subst X.soX,,X$(suffix $(1))X),,rm -f $(call TO_DEST,$(1));)
167
168 $(foreach DEP,$(DEPS),$(eval $(call DEP_VERSION_template,$(DEP),deps/$(DEP)/ebin/$(DEP).app)))
169 $(eval $(call DEP_VERSION_template,ejabberd,ebin/ejabberd.app))
170
171 define COPY_template
172 $(call TO_DEST,$(1)): $(1) $(call TO_DEST,$(dir $(1))) ; $(call DELETE_TARGET_SO, $(1)) $$(INSTALL) -m 644 $(1) $(call TO_DEST,$(1))
173 endef
174
175 define COPY_BINARY_template
176 $(call TO_DEST,$(1)): $(1) $(call TO_DEST,$(dir $(1))) ; rm -f $(call TO_DEST,$(1)); $$(INSTALL) -m 755 $$(O_USER) $(1) $(call TO_DEST,$(1))
177 endef
178
179 $(foreach file,$(DEPS_FILES_FILTERED) $(MAIN_FILES),$(eval $(call COPY_template,$(file))))
180
181 $(foreach file,$(BINARIES),$(eval $(call COPY_BINARY_template,$(file))))
182
183 $(sort $(call TO_DEST,$(MAIN_DIRS) $(DEPS_DIRS))):
184         $(INSTALL) -d $@
185
186 $(call TO_DEST,priv/sql/lite.sql): sql/lite.sql $(call TO_DEST,priv/sql)
187         $(INSTALL) -m 644 $< $@
188
189 $(call TO_DEST,priv/bin/captcha.sh): tools/captcha.sh $(call TO_DEST,priv/bin)
190         $(INSTALL) -m 755 $(O_USER) $< $@
191
192 $(call TO_DEST,priv/lua/redis_sm.lua): priv/lua/redis_sm.lua $(call TO_DEST,priv/lua)
193         $(INSTALL) -m 644 $< $@
194
195 copy-files-sub2: $(call TO_DEST,$(DEPS_FILES) $(MAIN_FILES) priv/bin/captcha.sh priv/sql/lite.sql priv/lua/redis_sm.lua)
196
197 .PHONY: $(call TO_DEST,$(DEPS_FILES) $(MAIN_DIRS) $(DEPS_DIRS))
198
199 endif
200
201 copy-files:
202         $(MAKE) copy-files-sub
203
204 copy-files-sub: copy-files-sub2
205
206 install: all copy-files
207         #
208         # Configuration files
209         $(INSTALL) -d -m 750 $(G_USER) $(ETCDIR)
210         [ -f $(ETCDIR)/ejabberd.yml ] \
211                 && $(INSTALL) -b -m 640 $(G_USER) ejabberd.yml.example $(ETCDIR)/ejabberd.yml-new \
212                 || $(INSTALL) -b -m 640 $(G_USER) ejabberd.yml.example $(ETCDIR)/ejabberd.yml
213         $(SED) -e "s*{{rootdir}}*@prefix@*g" \
214                 -e "s*{{installuser}}*@INSTALLUSER@*g" \
215                 -e "s*{{bindir}}*@bindir@*g" \
216                 -e "s*{{libdir}}*@libdir@*g" \
217                 -e "s*{{sysconfdir}}*@sysconfdir@*g" \
218                 -e "s*{{localstatedir}}*@localstatedir@*g" \
219                 -e "s*{{docdir}}*@docdir@*g" \
220                 -e "s*{{erl}}*@ERL@*g" \
221                 -e "s*{{epmd}}*@EPMD@*g" ejabberdctl.template \
222                 > ejabberdctl.example
223         [ -f $(ETCDIR)/ejabberdctl.cfg ] \
224                 && $(INSTALL) -b -m 640 $(G_USER) ejabberdctl.cfg.example $(ETCDIR)/ejabberdctl.cfg-new \
225                 || $(INSTALL) -b -m 640 $(G_USER) ejabberdctl.cfg.example $(ETCDIR)/ejabberdctl.cfg
226         $(INSTALL) -b -m 644 $(G_USER) inetrc $(ETCDIR)/inetrc
227         #
228         # Administration script
229         [ -d $(SBINDIR) ] || $(INSTALL) -d -m 755 $(SBINDIR)
230         $(INSTALL) -m 550 $(G_USER) ejabberdctl.example $(SBINDIR)/ejabberdctl
231         # Elixir binaries
232         [ -d $(BINDIR) ] || $(INSTALL) -d -m 755 $(BINDIR)
233         [ -f deps/elixir/bin/iex ] && $(INSTALL) -m 550 $(G_USER) deps/elixir/bin/iex $(BINDIR)/iex || true
234         [ -f deps/elixir/bin/elixir ] && $(INSTALL) -m 550 $(G_USER) deps/elixir/bin/elixir $(BINDIR)/elixir || true
235         [ -f deps/elixir/bin/mix ] && $(INSTALL) -m 550 $(G_USER) deps/elixir/bin/mix $(BINDIR)/mix || true
236         #
237         # Init script
238         $(SED) -e "s*@ctlscriptpath@*$(SBINDIR)*g" \
239                 -e "s*@installuser@*$(INIT_USER)*g" ejabberd.init.template \
240                 > ejabberd.init
241         chmod 755 ejabberd.init
242         #
243         # Service script
244         $(SED) -e "s*@ctlscriptpath@*$(SBINDIR)*g" ejabberd.service.template \
245                 > ejabberd.service
246         chmod 644 ejabberd.service
247         #
248         # Spool directory
249         $(INSTALL) -d -m 750 $(O_USER) $(SPOOLDIR)
250         $(CHOWN_COMMAND) -R @INSTALLUSER@ $(SPOOLDIR) >$(CHOWN_OUTPUT)
251         chmod -R 750 $(SPOOLDIR)
252         [ ! -f $(COOKIEFILE) ] || { $(CHOWN_COMMAND) @INSTALLUSER@ $(COOKIEFILE) >$(CHOWN_OUTPUT) ; chmod 400 $(COOKIEFILE) ; }
253         #
254         # ejabberdctl lock directory
255         $(INSTALL) -d -m 750 $(O_USER) $(CTLLOCKDIR)
256         $(CHOWN_COMMAND) -R @INSTALLUSER@ $(CTLLOCKDIR) >$(CHOWN_OUTPUT)
257         chmod -R 750 $(CTLLOCKDIR)
258         #
259         # Log directory
260         $(INSTALL) -d -m 750 $(O_USER) $(LOGDIR)
261         $(CHOWN_COMMAND) -R @INSTALLUSER@ $(LOGDIR) >$(CHOWN_OUTPUT)
262         chmod -R 750 $(LOGDIR)
263         #
264         # Documentation
265         $(INSTALL) -d $(DOCDIR)
266         [ -f doc/guide.html ] \
267                 && $(INSTALL) -m 644 doc/guide.html $(DOCDIR) \
268                 || echo "Documentation not included in sources"
269         $(INSTALL) -m 644 COPYING $(DOCDIR)
270
271 uninstall: uninstall-binary
272
273 uninstall-binary:
274         rm -f  $(SBINDIR)/ejabberdctl
275         rm -f  $(BINDIR)/iex
276         rm -f  $(BINDIR)/elixir
277         rm -f  $(BINDIR)/mix
278         rm -fr $(DOCDIR)
279         rm -f  $(BEAMDIR)/*.beam
280         rm -f  $(BEAMDIR)/*.app
281         rm -fr $(BEAMDIR)
282         rm -f  $(INCLUDEDIR)/*.hrl
283         rm -fr $(INCLUDEDIR)
284         rm -fr $(PBINDIR)
285         rm -f  $(SODIR)/*.so
286         rm -fr $(SODIR)
287         rm -f  $(MSGSDIR)/*.msg
288         rm -fr $(MSGSDIR)
289         rm -f  $(CSSDIR)/*.css
290         rm -fr $(CSSDIR)
291         rm -f  $(IMGDIR)/*.png
292         rm -fr $(IMGDIR)
293         rm -f  $(JSDIR)/*.js
294         rm -fr $(JSDIR)
295         rm -f  $(SQLDIR)/*.sql
296         rm -fr $(SQLDIR)
297         rm -fr $(LUADIR)/*.lua
298         rm -fr $(LUADIR)
299         rm -fr $(PRIVDIR)
300         rm -fr $(EJABBERDDIR)
301
302 uninstall-all: uninstall-binary
303         rm -rf $(ETCDIR)
304         rm -rf $(EJABBERDDIR)
305         rm -rf $(SPOOLDIR)
306         rm -rf $(CTLLOCKDIR)
307         rm -rf $(LOGDIR)
308
309 clean:
310         rm -rf deps/.got
311         rm -rf deps/.built
312         rm -rf test/*.beam
313         $(REBAR) clean
314
315 clean-rel:
316         rm -rf rel/ejabberd
317
318 distclean: clean clean-rel
319         rm -f config.status
320         rm -f config.log
321         rm -rf autom4te.cache
322         rm -rf deps
323         rm -rf ebin
324         rm -f Makefile
325         rm -f vars.config
326         rm -f src/ejabberd.app.src
327         [ ! -f ../ChangeLog ] || rm -f ../ChangeLog
328
329 rel: all
330         $(REBAR) generate
331
332 TAGS:
333         etags *.erl
334
335 Makefile: Makefile.in
336
337 deps := $(wildcard deps/*/ebin)
338
339 dialyzer/erlang.plt:
340         @mkdir -p dialyzer
341         @dialyzer --build_plt --output_plt dialyzer/erlang.plt \
342         -o dialyzer/erlang.log --apps kernel stdlib sasl crypto \
343         public_key ssl mnesia inets odbc compiler erts \
344         os_mon asn1 syntax_tools; \
345         status=$$? ; if [ $$status -ne 2 ]; then exit $$status; else exit 0; fi
346
347 dialyzer/deps.plt:
348         @mkdir -p dialyzer
349         @dialyzer --build_plt --output_plt dialyzer/deps.plt \
350         -o dialyzer/deps.log $(deps); \
351         status=$$? ; if [ $$status -ne 2 ]; then exit $$status; else exit 0; fi
352
353 dialyzer/ejabberd.plt:
354         @mkdir -p dialyzer
355         @dialyzer --build_plt --output_plt dialyzer/ejabberd.plt \
356         -o dialyzer/ejabberd.log ebin; \
357         status=$$? ; if [ $$status -ne 2 ]; then exit $$status; else exit 0; fi
358
359 erlang_plt: dialyzer/erlang.plt
360         @dialyzer --plt dialyzer/erlang.plt --check_plt -o dialyzer/erlang.log; \
361         status=$$? ; if [ $$status -ne 2 ]; then exit $$status; else exit 0; fi
362
363 deps_plt: dialyzer/deps.plt
364         @dialyzer --plt dialyzer/deps.plt --check_plt -o dialyzer/deps.log; \
365         status=$$? ; if [ $$status -ne 2 ]; then exit $$status; else exit 0; fi
366
367 ejabberd_plt: dialyzer/ejabberd.plt
368         @dialyzer --plt dialyzer/ejabberd.plt --check_plt -o dialyzer/ejabberd.log; \
369         status=$$? ; if [ $$status -ne 2 ]; then exit $$status; else exit 0; fi
370
371 dialyzer: erlang_plt deps_plt ejabberd_plt
372         @dialyzer --plts dialyzer/*.plt --no_check_plt \
373         --get_warnings -o dialyzer/error.log ebin; \
374         status=$$? ; if [ $$status -ne 2 ]; then exit $$status; else exit 0; fi
375
376 test:
377         @echo "************************** NOTICE ***************************************"
378         @cat test/README
379         @echo "*************************************************************************"
380         @cd priv && ln -sf ../sql
381         $(REBAR) skip_deps=true ct
382
383 .PHONY: src edoc dialyzer Makefile TAGS clean clean-rel distclean rel \
384         install uninstall uninstall-binary uninstall-all translations deps test \
385         quicktest erlang_plt deps_plt ejabberd_plt xref hooks options