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