#
include Make.inc
+MFLAGS += --no-print-directory
-.PHONY: all clean install
-
-SUBDIRS = $(LTDL_SUBDIRS) src raddb scripts doc
-WHAT_TO_MAKE = all
+# The version of GNU Make is too old, don't use it (.FEATURES variable was
+# wad added in 3.81)
+ifndef .FEATURES
+$(error The build system requires GNU Make 3.81 or later.)
+endif
-all:
- @$(MAKE) $(MFLAGS) WHAT_TO_MAKE=$@ common
+export DESTDIR := $(R)
-clean:
- @$(MAKE) $(MFLAGS) WHAT_TO_MAKE=$@ common
- @rm -f *~
+# And over-ride all of the other magic.
+include scripts/boiler.mk
-.PHONY: tests
-tests:
+test: build.raddb
+ @$(MAKE) -C raddb/certs
@$(MAKE) -C src/tests tests
#
# we make sure DESTDIR is defined.
#
export DESTDIR := $(R)
-install:
- $(INSTALL) -d -m 755 $(R)$(sbindir)
- $(INSTALL) -d -m 755 $(R)$(bindir)
- $(INSTALL) -d -m 755 $(R)$(raddbdir)
- $(INSTALL) -d -m 755 $(R)$(mandir)
- $(INSTALL) -d -m 755 $(R)$(RUNDIR)
- $(INSTALL) -d -m 700 $(R)$(logdir)
- $(INSTALL) -d -m 700 $(R)$(radacctdir)
- $(INSTALL) -d -m 755 $(R)$(datadir)
- $(INSTALL) -d -m 755 $(R)$(dictdir)
- for i in 1 5 8; do \
- $(INSTALL) -d -m 755 $(R)$(mandir)/man$$i; \
- for p in man/man$$i/*.$$i; do \
- $(INSTALL) -m 644 $$p $(R)$(mandir)/man$$i; \
- done \
- done
- @$(MAKE) $(MFLAGS) WHAT_TO_MAKE=$@ common
- @echo "Installing dictionary files in $(R)$(dictdir)"; \
- cd share; \
- for i in dictionary*; do \
- $(INSTALL) -m 644 $$i $(R)$(dictdir); \
- done
- $(LIBTOOL) --finish $(R)$(libdir)
+
+.PHONY: install.bindir
+install.bindir:
+ @[ -d $(R)$(bindir) ] || $(INSTALL) -d -m 755 $(R)$(bindir)
+
+.PHONY: install.sbindir
+install.sbindir:
+ @[ -d $(R)$(sbindir) ] || $(INSTALL) -d -m 755 $(R)$(sbindir)
+
+.PHONY: install.dirs
+install.dirs: install.bindir install.sbindir
+ @$(INSTALL) -d -m 755 $(R)$(mandir)
+ @$(INSTALL) -d -m 755 $(R)$(RUNDIR)
+ @$(INSTALL) -d -m 700 $(R)$(logdir)
+ @$(INSTALL) -d -m 700 $(R)$(radacctdir)
+ @$(INSTALL) -d -m 755 $(R)$(datadir)
+ @$(INSTALL) -d -m 755 $(R)$(dictdir)
+
+DICTIONARIES := $(wildcard share/dictionary*)
+install.share: $(addprefix $(R)$(dictdir)/,$(notdir $(DICTIONARIES)))
+
+$(R)$(dictdir)/%: share/%
+ @echo INSTALL $(notdir $<)
+ @$(INSTALL) -m 644 $< $@
+
+MANFILES := $(wildcard man/man*/*.?)
+install.man: $(subst man/,$(R)$(mandir)/,$(MANFILES))
+
+$(R)$(mandir)/%: man/%
+ @echo INSTALL $(notdir $<)
+ @$(INSTALL) -m 644 $< $@
+
+install: install.dirs install.share install.man
ifneq ($(RADMIN),)
ifneq ($(RGROUP),)
endif
endif
-common:
- @for dir in $(SUBDIRS); do \
- echo "Making $(WHAT_TO_MAKE) in $$dir..."; \
- $(MAKE) $(MFLAGS) -C $$dir $(WHAT_TO_MAKE) || exit $$?; \
- done
-
distclean: clean
- rm -f config.cache config.log config.status libtool \
+ @rm -f config.cache config.log config.status libtool \
src/include/radpaths.h src/include/stamp-h \
libltdl/config.log libltdl/config.status \
libltdl/libtool
- -find . ! -name configure.in -name \*.in -print | \
+ @-find . ! -name configure.in -name \*.in -print | \
sed 's/\.in$$//' | \
while read file; do rm -f $$file; done
- -find src/modules -name config.mak | \
+ @-find src/modules -name config.mak | \
while read file; do rm -f $$file; done
- -find src/modules -name config.h | \
+ @-find src/modules -name config.h | \
while read file; do rm -f $$file; done
######################################################################
# Automatic remaking rules suggested by info:autoconf#Automatic_Remaking
#
######################################################################
-reconfig: configure src/include/autoconf.h.in
+CONFIG_FILES := $(wildcard src/modules/rlm_*/configure.in src/modules/rlm_*/*/*/configure.in)
+
+$(CONFIG_FILES):
+ @echo "Making reconfig in $(dir $@)..."
+ @cd $(dir $@) && $(AUTOCONF) -I $(top_builddir)
+ @if grep AC_CONFIG_HEADERS $@ >/dev/null; then\
+ cd $(dir $@) && $(AUTOHEADER); \
+ fi
+
+
+.PHONY: reconfig
+reconfig:
+ @$(MAKE) $(MFLAGS) -C src reconfig
+ @$(MAKE) configure
+ @$(MAKE) src/include/autoconf.h.in
configure: configure.in aclocal.m4
$(AUTOCONF)
-# autoheader might not change autoconf.h.in, so touch a stamp file
-src/include/autoconf.h.in: src/include/stamp-h.in
-src/include/stamp-h.in: configure.in
+.PHONY: src/include/autoconf.h.in
+src/include/autoconf.h.in:
$(AUTOHEADER)
- echo timestamp > src/include/stamp-h.in
-
-src/include/autoconf.h: src/include/stamp-h
-src/include/stamp-h: src/include/autoconf.h.in config.status
- ./config.status
config.status: configure
./config.status --recheck
# BEFORE running this command!
#
######################################################################
-freeradius-server-$(RADIUSD_VERSION).tar.gz: .git
- git archive --format=tar --prefix=freeradius-server-$(RADIUSD_VERSION)/ stable | gzip > $@
+freeradius-server-$(RADIUSD_VERSION_STRING).tar.gz: .git
+ git archive --format=tar --prefix=freeradius-server-$(RADIUSD_VERSION_STRING)/ stable | gzip > $@
-freeradius-server-$(RADIUSD_VERSION).tar.gz.sig: freeradius-server-$(RADIUSD_VERSION).tar.gz
+freeradius-server-$(RADIUSD_VERSION_STRING).tar.gz.sig: freeradius-server-$(RADIUSD_VERSION_STRING).tar.gz
gpg --default-key aland@freeradius.org -b $<
-freeradius-server-$(RADIUSD_VERSION).tar.bz2: .git
- git archive --format=tar --prefix=freeradius-server-$(RADIUSD_VERSION)/ stable | bzip2 > $@
+freeradius-server-$(RADIUSD_VERSION_STRING).tar.bz2: .git
+ git archive --format=tar --prefix=freeradius-server-$(RADIUSD_VERSION_STRING)/ stable | bzip2 > $@
-freeradius-server-$(RADIUSD_VERSION).tar.bz2.sig: freeradius-server-$(RADIUSD_VERSION).tar.bz2
+freeradius-server-$(RADIUSD_VERSION_STRING).tar.bz2.sig: freeradius-server-$(RADIUSD_VERSION_STRING).tar.bz2
gpg --default-key aland@freeradius.org -b $<
# high-level targets
.PHONY: dist-check
dist-check: redhat/freeradius.spec suse/freeradius.spec debian/changelog
- @if [ `grep ^Version: redhat/freeradius.spec | sed 's/.*://;s/ //'` != "$(RADIUSD_VERSION)" ]; then \
+ @if [ `grep ^Version: redhat/freeradius.spec | sed 's/.*://;s/ //'` != "$(RADIUSD_VERSION_STRING)" ]; then \
+ cat redhat/freeradius.spec | sed 's/^Version: .*/Version: $(RADIUSD_VERSION_STRING)/' > redhat/.foo; \
+ mv redhat/.foo redhat/freeradius.spec; \
echo redhat/freeradius.spec 'Version' needs to be updated; \
exit 1; \
fi
- @if [ `grep ^Version: suse/freeradius.spec | sed 's/.*://;s/ //'` != "$(RADIUSD_VERSION)" ]; then \
+ @if [ `grep ^Version: suse/freeradius.spec | sed 's/.*://;s/ //'` != "$(RADIUSD_VERSION_STRING)" ]; then \
+ cat suse/freeradius.spec | sed 's/^Version: .*/Version: $(RADIUSD_VERSION_STRING)/' > suse/.foo; \
+ mv suse/.foo suse/freeradius.spec; \
echo suse/freeradius.spec 'Version' needs to be updated; \
exit 1; \
fi
- @if [ `head -n 1 debian/changelog | sed 's/.*(//;s/-0).*//;s/-1).*//;'` != "$(RADIUSD_VERSION)" ]; then \
+ @if [ `head -n 1 debian/changelog | sed 's/.*(//;s/-0).*//;s/-1).*//;'` != "$(RADIUSD_VERSION_STRING)" ]; then \
echo debian/changelog needs to be updated; \
exit 1; \
fi
-dist: dist-check freeradius-server-$(RADIUSD_VERSION).tar.gz freeradius-server-$(RADIUSD_VERSION).tar.bz2
+dist: dist-check freeradius-server-$(RADIUSD_VERSION_STRING).tar.gz freeradius-server-$(RADIUSD_VERSION_STRING).tar.bz2
-dist-sign: freeradius-server-$(RADIUSD_VERSION).tar.gz.sig freeradius-server-$(RADIUSD_VERSION).tar.bz2.sig
+dist-sign: freeradius-server-$(RADIUSD_VERSION_STRING).tar.gz.sig freeradius-server-$(RADIUSD_VERSION_STRING).tar.bz2.sig
-dist-publish: freeradius-server-$(RADIUSD_VERSION).tar.gz.sig freeradius-server-$(RADIUSD_VERSION).tar.gz freeradius-server-$(RADIUSD_VERSION).tar.gz.sig freeradius-server-$(RADIUSD_VERSION).tar.bz2 freeradius-server-$(RADIUSD_VERSION).tar.gz.sig freeradius-server-$(RADIUSD_VERSION).tar.bz2.sig
+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
scp $^ freeradius.org@ns5.freeradius.org:public_ftp
scp $^ freeradius.org@www.tr.freeradius.org:public_ftp
# Note that we do NOT do the tagging here! We just print out what
# to do!
#
-dist-tag: freeradius-server-$(RADIUSD_VERSION).tar.gz freeradius-server-$(RADIUSD_VERSION).tar.bz2
- @echo "git tag release_`echo $(RADIUSD_VERSION) | tr .- __`"
+dist-tag: freeradius-server-$(RADIUSD_VERSION_STRING).tar.gz freeradius-server-$(RADIUSD_VERSION_STRING).tar.bz2
+ @echo "git tag release_`echo $(RADIUSD_VERSION_STRING) | tr .- __`"
#
# Build a debian package
.PHONY: deb
deb:
fakeroot dpkg-buildpackage -b -uc
+
+# Developer checks
+.PHONY: warnings
+warnings:
+ @(make clean all 2>&1) | egrep -v '^/|deprecated|^In file included|: In function| from |^HEADER|^CC|^LINK' > warnings.txt
+ @wc -l warnings.txt