## $Id: Makefile 7488 2005-12-25 00:26:08Z eagle $
include Makefile.global
## All installation directories except for $(PATHRUN), which has a
## different mode than the rest.
INSTDIRS = $(PATHNEWS) $(PATHBIN) $(PATHAUTH) $(PATHAUTHRESOLV) \
$(PATHAUTHPASSWD) $(PATHCONTROL) $(PATHFILTER) \
$(PATHRNEWS) $(PATHDB) $(PATHDOC) $(PATHETC) $(PATHLIB) \
$(PATHMAN) $(MAN1) $(MAN3) $(MAN5) $(MAN8) $(PATHSPOOL) \
$(PATHTMP) $(PATHARCHIVE) $(PATHARTICLES) $(PATHINCOMING) \
$(PATHINBAD) $(PATHTAPE) $(PATHOVERVIEW) $(PATHOUTGOING) \
$(PATHLOG) $(PATHLOG)/OLD $(PATHINCLUDE)
## LIBDIRS are built before PROGDIRS, make update runs in all UPDATEDIRS,
## and make install runs in all ALLDIRS. Nothing runs in test except the
## test target itself and the clean targets. Currently, include is built
## before anything else but nothing else runs in it except clean targets.
LIBDIRS = include lib storage history
PROGDIRS = innd nnrpd innfeed control expire frontends backends authprogs \
scripts
UPDATEDIRS = $(LIBDIRS) $(PROGDIRS) doc
ALLDIRS = $(UPDATEDIRS) samples site
CLEANDIRS = $(ALLDIRS) include tests
## The directory name and tar file to use when building a release.
TARDIR = inn-$(VERSION)
TARFILE = $(TARDIR).tar
## The directory to use when building a snapshot.
SNAPDIR = inn-$(SNAPSHOT)-$(SNAPDATE)
## DISTDIRS gets all directories from the MANIFEST, and DISTFILES gets all
## regular files. Anything not listed in the MANIFEST will not be included
## in a distribution. These are arguments to sed.
DISTDIRS = -e 1,2d -e '/(Directory)/!d' -e 's/ .*//' -e 's;^;$(TARDIR)/;'
SNAPDIRS = -e 1,2d -e '/(Directory)/!d' -e 's/ .*//' -e 's;^;$(SNAPDIR)/;'
DISTFILES = -e 1,2d -e '/(Directory)/d' -e 's/ .*//'
## Major target -- build everything. Rather than just looping through
## all the directories, use a set of parallel rules so that make -j can
## work on more than one directory at a time.
all: all-include all-libraries all-programs
cd doc && $(MAKE) all
cd samples && $(MAKE) all
cd site && $(MAKE) all
all-libraries: all-lib all-storage all-history
all-include: ; cd include && $(MAKE) all
all-lib: all-include ; cd lib && $(MAKE) all
all-storage: all-lib ; cd storage && $(MAKE) library
all-history: all-storage ; cd history && $(MAKE) all
all-programs: all-innd all-nnrpd all-innfeed all-control all-expire \
all-frontends all-backends all-authprogs all-scripts \
all-store-util
all-authprogs: all-lib ; cd authprogs && $(MAKE) all
all-backends: all-libraries ; cd backends && $(MAKE) all
all-control: ; cd control && $(MAKE) all
all-expire: all-libraries ; cd expire && $(MAKE) all
all-frontends: all-libraries ; cd frontends && $(MAKE) all
all-innd: all-libraries ; cd innd && $(MAKE) all
all-innfeed: all-libraries ; cd innfeed && $(MAKE) all
all-nnrpd: all-libraries ; cd nnrpd && $(MAKE) all
all-scripts: ; cd scripts && $(MAKE) all
all-store-util: all-libraries ; cd storage && $(MAKE) programs
## If someone tries to run make before running configure, tell them to run
## configure first.
Makefile.global:
@echo 'Run ./configure before running make. See INSTALL for details.'
@exit 1
## Installation rules. make install installs everything; make update only
## updates the binaries, scripts, and documentation and leaves config
## files alone.
install: directories
@for D in $(ALLDIRS) ; do \
echo '' ; \
cd $$D && $(MAKE) install || exit 1 ; cd .. ; \
done
@echo ''
@echo 'If this is a first-time installation, a minimal active file and'
@echo 'history database have been installed. Do not forget to update'
@echo 'your cron entries and configure INN. See INSTALL for more'
@echo 'information.'
@echo ''
directories:
@chmod +x support/install-sh
for D in $(INSTDIRS) ; do \
support/install-sh $(OWNER) -m 0755 -d $(D)$$D ; \
done
support/install-sh $(OWNER) -m 0750 -d $(D)$(PATHRUN)
update:
@chmod +x support/install-sh
@for D in $(UPDATEDIRS) ; do \
echo '' ; \
cd $$D && $(MAKE) install || exit 1 ; cd .. ; \
done
$(PATHBIN)/innupgrade $(PATHETC)
## Install a certificate for TLS/SSL support.
cert:
$(SSLBIN)/openssl req -new -x509 -nodes \
-out $(PATHLIB)/cert.pem -days 366 \
-keyout $(PATHLIB)/key.pem
chown $(NEWSUSER) $(PATHLIB)/cert.pem
chgrp $(NEWSGROUP) $(PATHLIB)/cert.pem
chmod 640 $(PATHLIB)/cert.pem
chown $(NEWSUSER) $(PATHLIB)/key.pem
chgrp $(NEWSGROUP) $(PATHLIB)/key.pem
chmod 600 $(PATHLIB)/key.pem
## Cleanup targets. clean deletes all compilation results but leaves the
## configure results. distclean or clobber removes everything not part of
## the distribution tarball. maintclean removes some additional files
## created as part of the release process.
clean:
@for D in $(CLEANDIRS) ; do \
echo '' ; \
cd $$D && $(MAKE) clean || exit 1 ; cd .. ; \
done
clobber realclean distclean:
@for D in $(CLEANDIRS) ; do \
echo '' ; \
cd $$D && $(MAKE) $(FLAGS) clobber && cd .. ; \
done
@echo ''
rm -f LIST.* Makefile.global TAGS tags config.cache config.log
rm -f config.status libtool support/fixscript
maintclean: distclean
rm -rf $(TARDIR)
rm -f CHANGES ChangeLog inn*.tar.gz
## Other generic targets.
depend tags ctags profiled:
@for D in $(ALLDIRS) ; do \
echo '' ; \
cd $$D && $(MAKE) $@ || exit 1 ; cd .. ; \
done
TAGS etags:
etags */*.c */*.h */*/*.c */*/*.h
## Run the test suite.
check test tests:
cd tests && $(MAKE) test
## For maintainers, build the entire source base with warnings enabled.
warnings:
$(MAKE) COPT="$(WARNINGS) $(COPT)" all
## Make a release. We create a release by recreating the directory
## structure and then copying over all files listed in the MANIFEST. If it
## isn't in the MANIFEST, it doesn't go into the release. We also update
## the version information in Makefile.global.in to remove the prerelease
## designation and update all timestamps to the date the release is made.
release: ChangeLog
rm -rf $(TARDIR)
rm -f inn*.tar.gz
mkdir $(TARDIR)
for d in `sed $(DISTDIRS) MANIFEST` ; do mkdir -p $$d ; done
for f in `sed $(DISTFILES) MANIFEST` ; do \
cp $$f $(TARDIR)/$$f || exit 1 ; \
done
sed 's/= prerelease/=/' < Makefile.global.in \
> $(TARDIR)/Makefile.global.in
cp ChangeLog $(TARDIR)
find $(TARDIR) -type f -print | xargs touch -t `date +%m%d%H%M.%S`
tar cf $(TARFILE) $(TARDIR)
$(GZIP) -9 $(TARFILE)
## Generate the ChangeLog using support/mkchangelog. This should only be
## run by a maintainer since it depends on cvs log working and also
## requires cvs2cl be available somewhere.
ChangeLog:
$(PERL) support/mkchangelog
## Check the MANIFEST against the files present in the current tree,
## building a list with find and running diff between the lists.
check-manifest:
sed -e 1,2d -e 's/ .*//' MANIFEST > LIST.manifest
$(PERL) support/mkmanifest > LIST.real
diff -u LIST.manifest LIST.real
## Make a snapshot. This is like making a release, except that we don't do
## the ChangeLog thing and we don't change the version number. We also
## assume that SNAPSHOT has been set to the appropriate current branch.
snapshot:
rm -rf $(SNAPDIR)
rm -f inn*.tar.gz
mkdir $(SNAPDIR)
set -e ; for d in `sed $(SNAPDIRS) MANIFEST` ; do mkdir -p $$d ; done
set -e ; for f in `sed $(DISTFILES) MANIFEST` ; do \
cp $$f $(SNAPDIR)/$$f ; \
done
cp README.snapshot $(SNAPDIR)/
sed 's/= prerelease/= $(SNAPDATE) snapshot/' \
Makefile.global.in > $(SNAPDIR)/Makefile.global.in
find $(SNAPDIR) -type f -print | xargs touch -t `date +%m%d%H%M.%S`
tar cf $(SNAPDIR).tar $(SNAPDIR)
$(GZIP) -9 $(SNAPDIR).tar
syntax highlighted by Code2HTML, v. 0.9.1