First attempt at integrating Travis
[freeradius.git] / Makefile
1 #
2 # Makefile
3 #
4 #               NOTE: This top-level Makefile must not
5 #               use GNU-make extensions. The lower ones can.
6 #
7 # Version:      $Id$
8 #
9
10 include Make.inc
11 MFLAGS += --no-print-directory
12
13 # The version of GNU Make is too old, don't use it (.FEATURES variable was
14 # wad added in 3.81)
15 ifndef .FEATURES
16 $(error The build system requires GNU Make 3.81 or later.)
17 endif
18
19 export DESTDIR := $(R)
20
21 # And over-ride all of the other magic.
22 include scripts/boiler.mk
23
24 # These are not yet converted to the new system
25 SUBDIRS         = $(wildcard raddb)
26
27 .PHONY: test
28 test:
29         @$(MAKE) -C src/tests tests
30
31 #
32 # The $(R) is a magic variable not defined anywhere in this source.
33 # It's purpose is to allow an admin to create an installation 'tar'
34 # file *without* actually installing it.  e.g.:
35 #
36 #  $ R=/home/root/tmp make install
37 #  $ cd /home/root/tmp
38 #  $ tar -cf ~/freeradius-package.tar *
39 #
40 # The 'tar' file can then be un-tar'd on any similar machine.  It's a
41 # cheap way of creating packages, without using a package manager.
42 # Many of the platform-specific packaging tools use the $(R) variable
43 # when creating their packages.
44 #
45 # For compatibility with typical GNU packages (e.g. as seen in libltdl),
46 # we make sure DESTDIR is defined.
47 #
48 export DESTDIR := $(R)
49
50 .PHONY: install.bindir
51 install.bindir:
52         @[ -d $(R)$(bindir) ] || $(INSTALL) -d -m 755 $(R)$(bindir)
53
54 .PHONY: install.sbindir
55 install.sbindir:
56         @[ -d $(R)$(sbindir) ] || $(INSTALL) -d -m 755 $(R)$(sbindir)
57
58 .PHONY: install.raddbdir
59 install.raddbdir:
60         @[ -d $(R)$(raddbdir) ] || $(INSTALL) -d -m 755 $(R)$(raddbdir)
61
62 .PHONY: install.dirs
63 install.dirs: install.bindir install.sbindir
64         @$(INSTALL) -d -m 755   $(R)$(mandir)
65         @$(INSTALL) -d -m 755   $(R)$(RUNDIR)
66         @$(INSTALL) -d -m 700   $(R)$(logdir)
67         @$(INSTALL) -d -m 700   $(R)$(radacctdir)
68         @$(INSTALL) -d -m 755   $(R)$(datadir)
69         @$(INSTALL) -d -m 755   $(R)$(dictdir)
70
71 DICTIONARIES := $(wildcard share/dictionary*)
72 install.share: $(addprefix $(R)$(dictdir)/,$(notdir $(DICTIONARIES)))
73
74 $(R)$(dictdir)/%: share/%
75         @echo INSTALL $(notdir $<)
76         @$(INSTALL) -m 644 $< $@
77
78 MANFILES := $(wildcard man/man*/*.?)
79 install.man: $(subst man/,$(R)$(mandir)/,$(MANFILES))
80
81 $(R)$(mandir)/%: man/%
82         @echo INSTALL $(notdir $<)
83         @$(INSTALL) -m 644 $< $@
84
85 install: install.dirs install.share install.man
86
87 install:
88         @$(MAKE) $(MFLAGS) WHAT_TO_MAKE=$@ common
89
90 ifneq ($(RADMIN),)
91 ifneq ($(RGROUP),)
92 .PHONY: install-chown
93 install-chown:
94         chown -R $(RADMIN)   $(R)$(raddbdir)
95         chgrp -R $(RGROUP)   $(R)$(raddbdir)
96         chmod u=rwx,g=rx,o=  `find $(R)$(raddbdir) -type d -print`
97         chmod u=rw,g=r,o=    `find $(R)$(raddbdir) -type f -print`
98         chown -R $(RADMIN)   $(R)$(logdir)
99         chgrp -R $(RGROUP)   $(R)$(logdir)
100         find $(R)$(logdir) -type d -exec chmod u=rwx,g=rwx,o= {} \;
101         find $(R)$(logdir) -type d -exec chmod g+s {} \;
102         find $(R)$(logdir) -type f -exec chmod u=rw,g=rw,o= {} \;
103         chown -R $(RADMIN)   $(R)$(RUNDIR)
104         chgrp -R $(RGROUP)   $(R)$(RUNDIR)
105         find $(R)$(RUNDIR) -type d -exec chmod u=rwx,g=rwx,o= {} \;
106         find $(R)$(RUNDIR) -type d -exec chmod g+s {} \;
107         find $(R)$(RUNDIR) -type f -exec chmod u=rw,g=rw,o= {} \;
108 endif
109 endif
110
111 .PHONY: common $(SUBDIRS)
112
113 #
114 #  We need to convert these directories to boilermake!
115 #
116 all:
117         @$(MAKE) $(MFLAGS) WHAT_TO_MAKE=$@ common
118
119 common: $(SUBDIRS)
120
121 $(SUBDIRS):
122         @echo "Making $(WHAT_TO_MAKE) in $@..."
123         @$(MAKE) $(MFLAGS) -C $@ $(WHAT_TO_MAKE)
124
125 distclean: clean
126         @rm -f config.cache config.log config.status libtool \
127                 src/include/radpaths.h src/include/stamp-h \
128                 libltdl/config.log libltdl/config.status \
129                 libltdl/libtool
130         @-find . ! -name configure.in -name \*.in -print | \
131                 sed 's/\.in$$//' | \
132                 while read file; do rm -f $$file; done
133         @-find src/modules -name config.mak | \
134                 while read file; do rm -f $$file; done
135         @-find src/modules -name config.h | \
136                 while read file; do rm -f $$file; done
137
138 ######################################################################
139 #
140 #  Automatic remaking rules suggested by info:autoconf#Automatic_Remaking
141 #
142 ######################################################################
143 .PHONY: reconfig
144 reconfig:
145         @$(MAKE) $(MFLAGS) -C src reconfig
146         @$(MAKE) configure
147         @$(MAKE) src/include/autoconf.h.in
148
149 configure: configure.in aclocal.m4
150         $(AUTOCONF)
151
152 .PHONY: src/include/autoconf.h.in
153 src/include/autoconf.h.in:
154         $(AUTOHEADER)
155
156 config.status: configure
157         ./config.status --recheck
158
159 configure.in:
160
161 .PHONY: check-includes
162 check-includes:
163         scripts/min-includes.pl `find . -name "*.c" -print`
164
165 TAGS:
166         etags `find src -type f -name '*.[ch]' -print`
167
168 #
169 #  Make test certificates.
170 #
171 .PHONY: certs
172 certs:
173         @cd raddb/certs && $(MAKE)
174
175 ######################################################################
176 #
177 #  Make a release.
178 #
179 #  Note that "Make.inc" has to be updated with the release number
180 #  BEFORE running this command!
181 #
182 ######################################################################
183 freeradius-server-$(RADIUSD_VERSION_STRING).tar.gz: .git
184         git archive --format=tar --prefix=freeradius-server-$(RADIUSD_VERSION_STRING)/ stable | gzip > $@
185
186 freeradius-server-$(RADIUSD_VERSION_STRING).tar.gz.sig: freeradius-server-$(RADIUSD_VERSION_STRING).tar.gz
187         gpg --default-key aland@freeradius.org -b $<
188
189 freeradius-server-$(RADIUSD_VERSION_STRING).tar.bz2: .git
190         git archive --format=tar --prefix=freeradius-server-$(RADIUSD_VERSION_STRING)/ stable | bzip2 > $@
191
192 freeradius-server-$(RADIUSD_VERSION_STRING).tar.bz2.sig: freeradius-server-$(RADIUSD_VERSION_STRING).tar.bz2
193         gpg --default-key aland@freeradius.org -b $<
194
195 # high-level targets
196 .PHONY: dist-check
197 dist-check: redhat/freeradius.spec suse/freeradius.spec debian/changelog
198         @if [ `grep ^Version: redhat/freeradius.spec | sed 's/.*://;s/ //'` != "$(RADIUSD_VERSION_STRING)" ]; then \
199                 cat redhat/freeradius.spec | sed 's/^Version: .*/Version: $(RADIUSD_VERSION_STRING)/' > redhat/.foo; \
200                 mv redhat/.foo redhat/freeradius.spec; \
201                 echo redhat/freeradius.spec 'Version' needs to be updated; \
202                 exit 1; \
203         fi
204         @if [ `grep ^Version: suse/freeradius.spec | sed 's/.*://;s/ //'` != "$(RADIUSD_VERSION_STRING)" ]; then \
205                 cat suse/freeradius.spec | sed 's/^Version: .*/Version: $(RADIUSD_VERSION_STRING)/' > suse/.foo; \
206                 mv suse/.foo suse/freeradius.spec; \
207                 echo suse/freeradius.spec 'Version' needs to be updated; \
208                 exit 1; \
209         fi
210         @if [ `head -n 1 debian/changelog | sed 's/.*(//;s/-0).*//;s/-1).*//;'`  != "$(RADIUSD_VERSION_STRING)" ]; then \
211                 echo debian/changelog needs to be updated; \
212                 exit 1; \
213         fi
214
215 dist: dist-check freeradius-server-$(RADIUSD_VERSION_STRING).tar.gz freeradius-server-$(RADIUSD_VERSION_STRING).tar.bz2
216
217 dist-sign: freeradius-server-$(RADIUSD_VERSION_STRING).tar.gz.sig freeradius-server-$(RADIUSD_VERSION_STRING).tar.bz2.sig
218
219 dist-publish: freeradius-server-$(RADIUSD_VERSION_STRING).tar.gz.sig freeradius-server-$(RADIUSD_VERSION_STRING).tar.gz freeradius-server-$(RADIUSD_VERSION_STRING).tar.gz.sig freeradius-server-$(RADIUSD_VERSION_STRING).tar.bz2 freeradius-server-$(RADIUSD_VERSION_STRING).tar.gz.sig freeradius-server-$(RADIUSD_VERSION_STRING).tar.bz2.sig
220         scp $^ freeradius.org@ns5.freeradius.org:public_ftp
221         scp $^ freeradius.org@www.tr.freeradius.org:public_ftp
222
223 #
224 #  Note that we do NOT do the tagging here!  We just print out what
225 #  to do!
226 #
227 dist-tag: freeradius-server-$(RADIUSD_VERSION_STRING).tar.gz freeradius-server-$(RADIUSD_VERSION_STRING).tar.bz2
228         @echo "git tag release_`echo $(RADIUSD_VERSION_STRING) | tr .- __`"
229
230 #
231 #       Build a debian package
232 #
233 .PHONY: deb
234 deb:
235         fakeroot dpkg-buildpackage -b -uc
236
237 # Developer checks
238 .PHONY: warnings
239 warnings:
240         @(make clean all 2>&1) | egrep -v '^/|deprecated|^In file included|: In function|   from |^HEADER|^CC|^LINK' > warnings.txt
241         @wc -l warnings.txt