X-Git-Url: https://git.exim.org/users/jgh/exim.git/blobdiff_plain/8eb9f5bd19da786f304f79b8f24381bbb4829310..df88d501afa127937c60832388a75553626c8926:/src/OS/Makefile-Base diff --git a/src/OS/Makefile-Base b/src/OS/Makefile-Base index 98f3ec3e1..de387e027 100644 --- a/src/OS/Makefile-Base +++ b/src/OS/Makefile-Base @@ -1,5 +1,3 @@ -# $Cambridge: exim/src/OS/Makefile-Base,v 1.13 2008/01/16 13:44:45 nm4 Exp $ - # This file is the basis of the main makefile for Exim and friends. The # makefile at the top level arranges to build the main makefile by calling # scripts/Configure-Makefile from within the build directory. This @@ -34,7 +32,7 @@ FE = $(FULLECHO) # up-to-date. Then the os-specific source files and the C configuration file # are set up, and finally it goes to the main Exim target. -all: $(EDITME) checklocalmake Makefile os.h os.c config.h allexim +all: $(EDITME) checklocalmake Makefile os.h os.c config.h version.h allexim checklocalmake: @if $(SHELL) $(SCRIPTS)/newer $(EDITME)-$(OSTYPE) $(EDITME) || \ @@ -96,7 +94,7 @@ config.h: Makefile buildconfig ../src/config.h.defaults $(EDITME) # therefore always be run, even if the files exist. This shouldn't in fact be a # problem, but it does no harm. Other make programs will just ignore this. -.PHONY: all allexim buildauths buildlookups buildrouters \ +.PHONY: all allexim buildauths buildlookups buildpdkim buildrouters \ buildtransports checklocalmake clean @@ -109,7 +107,7 @@ allexim: config.h $(EXIM_MONITOR) exicyclog exinext exiwhat \ exim_checkaccess \ exim_dbmbuild exim_dumpdb exim_fixdb exim_tidydb exim_lock \ buildlookups buildrouters buildtransports \ - buildauths exim + buildauths buildpdkim exim # Targets for special-purpose configuration header builders @@ -132,10 +130,12 @@ exicyclog: Makefile config.h ../src/exicyclog.src -e "s?EXICYCLOG_MAX?$(EXICYCLOG_MAX)?" \ -e "s?COMPRESS_COMMAND?$(COMPRESS_COMMAND)?" \ -e "s?COMPRESS_SUFFIX?$(COMPRESS_SUFFIX)?" \ - -e "s?CHOWN_COMMAND?$(CHOWN_COMMAND)?" \ -e "s?CHGRP_COMMAND?$(CHGRP_COMMAND)?" \ + -e "s?CHMOD_COMMAND?$(CHMOD_COMMAND)?" \ + -e "s?CHOWN_COMMAND?$(CHOWN_COMMAND)?" \ -e "s?MV_COMMAND?$(MV_COMMAND)?" \ -e "s?RM_COMMAND?$(RM_COMMAND)?" \ + -e "s?TOUCH_COMMAND?$(TOUCH_COMMAND)?" \ ../src/exicyclog.src > exicyclog-t @mv exicyclog-t exicyclog @chmod a+x exicyclog @@ -298,35 +298,32 @@ convert4r4: Makefile ../src/convert4r4.src OBJ_WITH_CONTENT_SCAN = malware.o mime.o regex.o spam.o spool_mbox.o OBJ_WITH_OLD_DEMIME = demime.o -OBJ_EXPERIMENTAL = bmi_spam.o spf.o srs.o dk.o dkim-exim.o +OBJ_EXPERIMENTAL = bmi_spam.o spf.o srs.o dcc.o # Targets for final binaries; the main one has a build number which is # updated each time. We don't bother with that for the auxiliaries. +OBJ_LOOKUPS = lookups/lf_quote.o lookups/lf_check_file.o lookups/lf_sqlperform.o + OBJ_EXIM = acl.o child.o crypt16.o daemon.o dbfn.o debug.o deliver.o \ directory.o dns.o drtables.o enq.o exim.o expand.o filter.o \ - filtertest.o globals.o \ + filtertest.o globals.o dkim.o \ header.o host.o ip.o log.o lss.o match.o moan.o \ os.o parse.o queue.o \ rda.o readconf.o receive.o retry.o rewrite.o rfc2047.o \ route.o search.o sieve.o smtp_in.o smtp_out.o spool_in.o spool_out.o \ store.o string.o tls.o tod.o transport.o tree.o verify.o \ + $(OBJ_LOOKUPS) \ local_scan.o $(EXIM_PERL) $(OBJ_WITH_CONTENT_SCAN) \ $(OBJ_WITH_OLD_DEMIME) $(OBJ_EXPERIMENTAL) -exim: lookups/lookups.a auths/auths.a \ +exim: lookups/lookups.a auths/auths.a pdkim/pdkim.a \ routers/routers.a transports/transports.a \ - $(OBJ_EXIM) version.c - @echo " " - awk '{ print ($$1+1) }' cnumber.h > cnumber.temp - rm -f cnumber.h; mv cnumber.temp cnumber.h - @echo "$(CC) version.c" - $(FE)$(CC) -c $(CFLAGS) $(INCLUDE) $(IPV6_INCLUDE) $(TLS_INCLUDE) version.c - rm -f exim + $(OBJ_EXIM) version.o @echo "$(LNCC) -o exim" $(FE)$(PURIFY) $(LNCC) -o exim $(LFLAGS) $(OBJ_EXIM) version.o \ routers/routers.a transports/transports.a lookups/lookups.a \ - auths/auths.a \ + auths/auths.a pdkim/pdkim.a \ $(LIBRESOLV) $(LIBS) $(LIBS_EXIM) $(IPV6_LIBS) $(EXTRALIBS) \ $(EXTRALIBS_EXIM) $(DBMLIB) $(LOOKUP_LIBS) $(AUTH_LIBS) \ $(PERL_LIBS) $(TLS_LIBS) $(PCRE_LIBS) $(LDFLAGS) @@ -358,10 +355,10 @@ exim_dumpdb: $(OBJ_DUMPDB) OBJ_FIXDB = exim_fixdb.o util-os.o util-store.o -exim_fixdb: $(OBJ_FIXDB) +exim_fixdb: $(OBJ_FIXDB) auths/auths.a @echo "$(LNCC) -o exim_fixdb" $(FE)$(LNCC) $(CFLAGS) $(INCLUDE) -o exim_fixdb $(LFLAGS) $(OBJ_FIXDB) \ - $(LIBS) $(EXTRALIBS) $(DBMLIB) + auths/auths.a $(LIBS) $(EXTRALIBS) $(DBMLIB) @if [ x"$(STRIP_COMMAND)" != x"" ]; then \ echo $(STRIP_COMMAND) exim_fixdb; \ $(STRIP_COMMAND) exim_fixdb; \ @@ -458,6 +455,15 @@ PHDRS = ../config.h ../dbfunctions.h ../dbstuff.h ../exim.h ../functions.h ../gl .c.o:; @echo "$(CC) $*.c" $(FE)$(CC) -c $(CFLAGS) -I. $(INCLUDE) $(IPV6_INCLUDE) $(TLS_INCLUDE) $*.c +# Update Exim's version information and build the version object. + +version.h:: + @../scripts/reversion + +cnumber.h: version.h + +version.o: $(HDRS) cnumber.h version.h version.c + # This is the dummy module for use by test compiles of individual modules. It # contains functions such as log_write() that may be called from bits of Exim # in the tested code. @@ -525,7 +531,7 @@ util-os.o: $(HDRS) os.c # The local scan module depends only on its own special header, and is compiled # from a source whose location is set by configuration. -local_scan.o: Makefile local_scan.h ../$(LOCAL_SCAN_SOURCE) +local_scan.o: Makefile config.h local_scan.h ../$(LOCAL_SCAN_SOURCE) @echo "$(CC) local_scan.c" $(FE)$(CC) -c $(CFLAGS) -I. $(INCLUDE) -o local_scan.o ../$(LOCAL_SCAN_SOURCE) @@ -576,7 +582,7 @@ tod.o: $(HDRS) tod.c transport.o: $(HDRS) transport.c tree.o: $(HDRS) tree.c verify.o: $(HDRS) verify.c - +dkim.o: $(HDRS) dkim.c # Dependencies for WITH_CONTENT_SCAN modules @@ -597,8 +603,7 @@ demime.o: $(HDRS) demime.c bmi_spam.o: $(HDRS) bmi_spam.c spf.o: $(HDRS) spf.h spf.c srs.o: $(HDRS) srs.h srs.c -dk.o: $(HDRS) dk.h dk.c -dkim-exim.o: $(HDRS) dkim-exim.h dkim-exim.c +dcc.o: $(HDRS) dcc.h dcc.c # The module containing tables of available lookups, routers, auths, and # transports must be rebuilt if any of them are. However, because the makefiles @@ -610,6 +615,11 @@ dkim-exim.o: $(HDRS) dkim-exim.h dkim-exim.c drtables.o: $(HDRS) drtables.c +# We depend upon object files built as part of building the lookups library +# When using parallel make, we don't have the dependency to force building +# in the sub-directory unless we force that dependency: + +$(OBJ_LOOKUPS): buildlookups # The exim monitor's private modules - the sources live in a private # subdirectory. The final binary combines the private modules with some @@ -633,50 +643,48 @@ $(MONBIN): $(HDRS) ../exim_monitor/`echo $@ | sed 's/o$$/c/'` -# Targets for the various libraries that Exim uses. This coding is tedious, -# because different versions of "make" behave in different ways with regard -# to rebuilding. If these target names are of the form pcre/libpcre.a, for -# example, then a forcing mechanism is required to get them obeyed each time. -# That's fine on Solaris and other systems; the rebuilding of the exim target -# happens only if the libraries are actually rebuilt. However, on IRIX, if -# the target is forced, the exim target gets unnecessarily rebuilt even if -# the .a file is not. Contrariwise, if we use dummy names, they don't interact -# with the building of exim (and eximon.bin), but for libpcre Exim doesn't get -# rebuilt when it should. (For the others it does, because they remove -# drtables.o when they rebuild.) To get round this, we forcibly remove the -# binary when it needs to be rebuilt. +# Targets for the various libraries that Exim uses. # The lookups library. -buildlookups: - @cd lookups; $(MAKE) SHELL=$(SHELL) AR="$(AR)" $(MFLAGS) CC="$(CC)" CFLAGS="$(CFLAGS)" \ - FE="$(FE)" RANLIB="$(RANLIB)" RM_COMMAND="$(RM_COMMAND)" HDRS="$(PHDRS)" \ - INCLUDE="$(INCLUDE) $(IPV6_INCLUDE) $(TLS_INCLUDE) $(LOOKUP_INCLUDE)"; \ - echo " " +buildlookups lookups/lookups.a: config.h version.h + @cd lookups && $(MAKE) SHELL=$(SHELL) AR="$(AR)" $(MFLAGS) CC="$(CC)" CFLAGS="$(CFLAGS)" \ + CFLAGS_DYNAMIC="$(CFLAGS_DYNAMIC)" HDRS="../version.h $(PHDRS)" \ + FE="$(FE)" RANLIB="$(RANLIB)" RM_COMMAND="$(RM_COMMAND)" \ + INCLUDE="$(INCLUDE) $(IPV6_INCLUDE) $(TLS_INCLUDE) $(LOOKUP_INCLUDE)" + @echo " " # The routers library. -buildrouters: - @cd routers; $(MAKE) SHELL=$(SHELL) AR="$(AR)" $(MFLAGS) CC="$(CC)" CFLAGS="$(CFLAGS)" \ +buildrouters routers/routers.a: config.h + @cd routers && $(MAKE) SHELL=$(SHELL) AR="$(AR)" $(MFLAGS) CC="$(CC)" CFLAGS="$(CFLAGS)" \ FE="$(FE)" RANLIB="$(RANLIB)" RM_COMMAND="$(RM_COMMAND)" HDRS="$(PHDRS)" \ - INCLUDE="$(INCLUDE) $(IPV6_INCLUDE) $(TLS_INCLUDE)"; \ - echo " " + INCLUDE="$(INCLUDE) $(IPV6_INCLUDE) $(TLS_INCLUDE)" + @echo " " # The transports library. -buildtransports: - @cd transports; $(MAKE) SHELL=$(SHELL) AR="$(AR)" $(MFLAGS) CC="$(CC)" CFLAGS="$(CFLAGS)" \ +buildtransports transports/transports.a: config.h + @cd transports && $(MAKE) SHELL=$(SHELL) AR="$(AR)" $(MFLAGS) CC="$(CC)" CFLAGS="$(CFLAGS)" \ FE="$(FE)" RANLIB="$(RANLIB)" RM_COMMAND="$(RM_COMMAND)" HDRS="$(PHDRS)" \ - INCLUDE="$(INCLUDE) $(IPV6_INCLUDE) $(TLS_INCLUDE)"; \ - echo " " + INCLUDE="$(INCLUDE) $(IPV6_INCLUDE) $(TLS_INCLUDE)" + @echo " " # The library of authorization modules -buildauths: - @cd auths; $(MAKE) SHELL=$(SHELL) AR="$(AR)" $(MFLAGS) CC="$(CC)" CFLAGS="$(CFLAGS)" \ +buildauths auths/auths.a: config.h + @cd auths && $(MAKE) SHELL=$(SHELL) AR="$(AR)" $(MFLAGS) CC="$(CC)" CFLAGS="$(CFLAGS)" \ + FE="$(FE)" RANLIB="$(RANLIB)" RM_COMMAND="$(RM_COMMAND)" HDRS="$(PHDRS)" \ + INCLUDE="$(INCLUDE) $(IPV6_INCLUDE) $(TLS_INCLUDE)" + @echo " " + +# The PDKIM library + +buildpdkim pdkim/pdkim.a: config.h + @cd pdkim && $(MAKE) SHELL=$(SHELL) AR="$(AR)" $(MFLAGS) CC="$(CC)" CFLAGS="$(CFLAGS)" \ FE="$(FE)" RANLIB="$(RANLIB)" RM_COMMAND="$(RM_COMMAND)" HDRS="$(PHDRS)" \ - INCLUDE="$(INCLUDE) $(IPV6_INCLUDE) $(TLS_INCLUDE)"; \ - echo " " + INCLUDE="$(INCLUDE) $(IPV6_INCLUDE) $(TLS_INCLUDE)" + @echo " " # The "clean", "install", and "makefile" targets just pass themselves back to # the main Exim makefile. These targets will be obeyed only if "make" is obeyed