5508e3db86cfb1f6f7494b7065a4784624fc0589
[apps/pfixtools.git] / Makefile
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 REGENTS AND CONTRIBUTORS ``AS IS'' AND   #
20 #  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE     #
21 #  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR        #
22 #  PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS    #
23 #  BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR    #
24 #  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF      #
25 #  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS  #
26 #  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN   #
27 #  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)   #
28 #  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF    #
29 #  THE POSSIBILITY OF SUCH DAMAGE.                                           #
30 ##############################################################################
31
32 all:
33
34 LDFLAGS += -Wl,--warn-common
35
36 include mk/cflags.mk
37 include mk/tc.mk
38
39 CFLAGS += --std=gnu99 -D_GNU_SOURCE
40 prefix ?= /usr/local
41
42 PROGRAMS = postlicyd pfix-srsd
43 LIBS     = lib
44 TESTS    = tst-rbl
45
46 GENERATED = tokens.h tokens.c
47
48 lib_SOURCES = str.c buffer.c common.c epoll.c server.c $(GENERATED)
49
50 postlicyd_SOURCES = greylist.c rbl.c main-postlicyd.c lib.a
51 postlicyd_LIBADD  = $(TC_LIBS)
52
53 pfix-srsd_SOURCES = main-srsd.c lib.a
54 pfix-srsd_LIBADD  = -lsrs2
55
56 tst-rbl_SOURCES = tst-rbl.c
57
58 install: all
59         install -d $(DESTDIR)$(prefix)/sbin
60         install $(PROGRAMS) $(DESTDIR)$(prefix)/sbin
61         install -d $(DESTDIR)/etc/pfixtools
62
63 # RULES ###################################################################{{{
64
65 all: $(GENERATED) $(PROGRAMS) | $(GENERATED)
66
67 clean:
68         $(RM) $(LIBS:=.a) $(PROGRAMS) $(TESTS) .*.o .*.dep
69
70 distclean: clean
71         $(RM) $(GENERATED)
72
73 tags: .tags
74 .tags: $(shell git ls-files | egrep '\.[hc]$$')
75         ctags -o $@ $^
76
77 headers: HEADACHEOPTS=-c mk/headache.cfg -h mk/COPYING
78 headers:
79         @which headache > /dev/null || \
80                 ( echo "package headache not installed" ; exit 1 )
81         @git ls-files | egrep '(\.h|\.c|Makefile|*\.mk)$$' | xargs -t headache $(HEADACHEOPTS)
82
83 %.h: %.sh
84         ./$< $@ || ($(RM) $@; exit 1)
85
86 %.c: %.sh
87         ./$< $@ || ($(RM) $@; exit 1)
88
89 .%.o: %.c Makefile
90         $(shell test -d $(@D) || mkdir -p $(@D))
91         $(CC) $(CFLAGS) -MMD -MT ".$*.dep $@" -MF .$*.dep -g -c -o $@ $<
92
93 .%.dep: .%.o
94
95 .SECONDEXPANSION:
96
97 $(LIBS:=.a): $$(patsubst %.c,.%.o,$$($$(patsubst %.a,%,$$@)_SOURCES)) Makefile
98         $(RM) $@
99         $(AR) rcs $@ $(filter %.o,$^)
100
101 $(PROGRAMS) $(TESTS): $$(patsubst %.c,.%.o,$$($$@_SOURCES)) Makefile common.ld
102         $(CC) -o $@ $(filter %.ld,$^) $(filter %.o,$^) $(LDFLAGS) $($@_LIBADD) $(filter %.a,$^)
103
104 -include $(foreach p,$(PROGRAMS) $(TESTS),$(patsubst %.c,.%.dep,$(filter %.c,$($p_SOURCES))))
105
106 ###########################################################################}}}