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