pfix-srsd: add a -I option
[apps/pfixtools.git] / mk / common.mk
1 ##############################################################################
2 #          pfixtools: a collection of postfix related tools                  #
3 #          ~~~~~~~~~                                                         #
4 #  ________________________________________________________________________  #
5 #                                                                            #
6 #  Redistribution and use in source and binary forms, with or without        #
7 #  modification, are permitted provided that the following conditions        #
8 #  are met:                                                                  #
9 #                                                                            #
10 #  1. Redistributions of source code must retain the above copyright         #
11 #     notice, this list of conditions and the following disclaimer.          #
12 #  2. Redistributions in binary form must reproduce the above copyright      #
13 #     notice, this list of conditions and the following disclaimer in the    #
14 #     documentation and/or other materials provided with the distribution.   #
15 #  3. The names of its contributors may not be used to endorse or promote    #
16 #     products derived from this software without specific prior written     #
17 #     permission.                                                            #
18 #                                                                            #
19 #  THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTORS ``AS IS'' AND ANY EXPRESS   #
20 #  OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED         #
21 #  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE    #
22 #  DISCLAIMED.  IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY         #
23 #  DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL        #
24 #  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS   #
25 #  OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)     #
26 #  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,       #
27 #  STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN  #
28 #  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE           #
29 #  POSSIBILITY OF SUCH DAMAGE.                                               #
30 #                                                                            #
31 #   Copyright (c) 2006-2008 the Authors                                      #
32 #   see AUTHORS and source files for details                                 #
33 ##############################################################################
34
35 __DIR__:=$(realpath $(dir $(lastword $(MAKEFILE_LIST))))
36
37 include $(__DIR__)/cflags.mk
38
39 prefix      ?= /usr/local
40 LDFLAGSBASE += $(if $(DARWIN),-L/opt/local/lib,-Wl,-warn-common)
41 CFLAGSBASE  += --std=gnu99 -I../ -I../common $(if $(DARWIN),-I/opt/local/include,)
42 ASCIIDOC     = asciidoc -f $(__DIR__)/asciidoc.conf -d manpage \
43                -apft_version=$(shell git-describe)
44 XMLTO        = xmlto -m $(__DIR__)/callouts.xsl
45 MAN_SECTIONS = 1 2 3 4 5 6 7 8 9
46
47 INSTALL_PROGS = $(addprefix install-,$(PROGRAMS))
48
49 all: $(GENERATED) $(LIBS) $(PROGRAMS)
50
51 DOCS_SRC  = $(foreach s,$(MAN_SECTIONS),$(patsubst %.$(s),%.txt,$(filter %.$(s),$(DOCS))))
52 DOCS_HTML = $(DOCS_SRC:.txt=.html)
53 DOCS_XML  = $(DOCS_SRC:.txt=.xml)
54 doc: $(DOCS) $(DOCS_HTML)
55
56 install: all $(INSTALL_PROGS) install-doc
57
58 install-doc: doc
59         $(if $(DOCS),\
60             set -e\
61             $(foreach s,$(MAN_SECTIONS),\
62                 $(foreach m,$(filter %.$(s),$(DOCS)),\
63                     ; install -d $(DESTDIR)$(prefix)/share/man/man$(s)/ \
64                     ; install $(m) $(DESTDIR)$(prefix)/share/man/man$(s)/ \
65         )))
66         $(if $(DOCS_HTML),install $(DOCS_HTML) $(DESTDIR)$(prefix)/share/doc/pfixtools)
67
68 $(INSTALL_PROGS): install-%:
69         install $* $(DESTDIR)$(prefix)/sbin
70
71 clean:
72         $(RM) $(LIBS:=.a) $(PROGRAMS) $(TESTS) .*.o .*.dep
73         $(RM) $(DOCS) $(DOCS_XML) $(DOCS_HTML)
74
75 distclean: clean
76         $(RM) $(GENERATED)
77
78 tags: .tags
79 .tags: $(shell git ls-files | egrep '\.[hc]$$')
80         ctags -o $@ $^
81
82 headers: HEADACHEOPTS=-c mk/headache.cfg -h mk/COPYING
83 headers:
84         @which headache > /dev/null || \
85                 ( echo "package headache not installed" ; exit 1 )
86         @git ls-files | egrep '(\.h|\.c|Makefile|*\.mk)$$' | xargs -t headache $(HEADACHEOPTS)
87
88 %.h: %.sh
89         ./$< $@ || ($(RM) $@; exit 1)
90
91 %.c: %.sh
92         ./$< $@ || ($(RM) $@; exit 1)
93
94 .%.o: %.c Makefile
95         $(shell test -d $(@D) || mkdir -p $(@D))
96         $(CC) $(CFLAGS) -MMD -MT ".$*.dep $@" -MF .$*.dep -g -c -o $@ $<
97
98 .%.dep: .%.o
99
100 $(LIBS): %: %.a
101
102 $(DOCS_HTML): %.html: %.txt
103         $(ASCIIDOC) -b xhtml11 -o $@ $<
104
105 $(DOCS_XML): %.xml: %.txt
106         $(ASCIIDOC) -b docbook -o $@ $<
107
108 %.1 %.2 %.3 %.4 %.5 %.6 %.7 %.8 %.9: %.xml
109         $(XMLTO) man $<
110
111 .SECONDEXPANSION:
112
113 $(LIBS:=.a): $$(patsubst %.c,.%.o,$$($$(patsubst %.a,%,$$@)_SOURCES)) Makefile
114         $(RM) $@
115         $(AR) rcs $@ $(filter %.o,$^)
116
117 $(PROGRAMS) $(TESTS): $$(patsubst %.c,.%.o,$$($$@_SOURCES)) Makefile
118         $(CC) -o $@ $(filter %.o,$^) $(LDFLAGS) $($@_LIBADD) $(filter %.a,$^)
119
120 $(DOCS):
121
122 -include $(foreach p,$(PROGRAMS) $(TESTS),$(patsubst %.c,.%.dep,$(filter %.c,$($p_SOURCES))))
123
124 .PHONY: install-doc install-dir $(INSTALL_PROGS)