File: Makefile

package info (click to toggle)
exim4 4.99.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 26,092 kB
  • sloc: ansic: 119,253; sh: 4,071; xml: 2,112; perl: 918; makefile: 532
file content (131 lines) | stat: -rw-r--r-- 4,741 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
# Top-level makefile for Exim; handles creating a build directory with
# appropriate links, and then creating and running the main makefile in that
# directory.

# Copyright (c) The Exim Maintainers 2022 - 2025
# Copyright (c) University of Cambridge, 1995 - 2018
# SPDX-License-Identifier: GPL-2.0-or-later
# See the file NOTICE for conditions of use and distribution.

# IRIX make uses the shell that is in the SHELL variable, which often defaults
# to csh, so put this in to make it use the Bourne shell. In systems where
# /bin/sh is not a Bourne-compatible shell, this line will have to be edited,
# or "make" must be called with a different SHELL= setting.

SHELL=/bin/sh
RM_COMMAND=/bin/rm

# The buildname defaults to "<os-type>-<arch-type>". It can be
# overridden by the "build" parameter when invoking make (e.g. make
# build=xxx) This does not provide an override for the OS type and
# architecture type used during the build process; they still have to be
# used for the OS-specific files. To override them, you can set the
# shell variables OSTYPE and ARCHTYPE when running make.
#
# EXIM_BUILD_SUFFIX gets appended to the buildname.  (This enables
# parallel builds on a file system shared among different Linux distros
# (same os-type, same arch-type). The ../test/runtest script honours the
# EXIM_BUILD_SUFFIX when searching the Exim binary.)

buildname=$${build:-`$(SHELL) scripts/os-type`-`$(SHELL) scripts/arch-type`}$${EXIM_BUILD_SUFFIX:+.$$EXIM_BUILD_SUFFIX}

# The default target checks for the existence of Local/Makefile, that the main
# makefile is built and up-to-date, and then it runs it.
# If Local/Makefile-<buildname> exists, it is read too.

all: Local/Makefile configure
	@cd build-$(buildname); $(MAKE) SHELL=$(SHELL) $(MFLAGS)

# This pair for the convenience of of the Debian maintainers
exim utils: Local/Makefile configure
	@cd build-$(buildname); $(MAKE) SHELL=$(SHELL) $(MFLAGS) $@

# For testsuite builds
exim_openssl exim_gnutls: Local/Makefile configure
	@cd build-$(buildname); $(MAKE) SHELL=$(SHELL) $(MFLAGS) $@

Local/Makefile:
	@echo ""
	@echo "*** Please create Local/Makefile by copying src/EDITME and making"
	@echo "*** appropriate changes for your site."
	@echo ""
	@test ! -d Local && mkdir Local
	@false

# This is separated off so that "make build-directory" can be obeyed on
# its own if necessary.
# XXX would be nice to get this rebuilt if scripts/MakeLinks changes

build-directory:
	@builddir=build-$(buildname); \
	case "$$builddir" in *UnKnown*) exit 1;; esac; \
	$(SHELL) -c "test -d $$builddir -a -r $$builddir/version.c || \
	  (mkdir $$builddir; cd $$builddir; $(SHELL) ../scripts/MakeLinks)";

checks:
	$(SHELL) scripts/source_checks

# The "configure" target ensures that the build directory exists, then arranges
# to build the main makefile from inside the build directory, by calling the
# Configure-Makefile script. This does its own dependency checking because of
# the optional files.

configure: checks build-directory \
		scripts/lookups-Makefile scripts/drivers-Makefile
	@cd build-$(buildname); \
	  build=$(build) $(SHELL) ../scripts/Configure-Makefile

# The "makefile" target forces a rebuild of the makefile (as opposed to
# "configure", which doesn't force it).

makefile: build-directory
	@cd build-$(buildname); $(RM_COMMAND) -f Makefile; \
	  build=$(build) $(SHELL) ../scripts/Configure-Makefile

# The installation commands are kept in a separate script, which expects
# to be run from inside the build directory.

install:        all
		@cd build-$(buildname); \
		build=$(build) $(SHELL) ../scripts/exim_install $(INSTALL_ARG)

# For testing only; the version number is a dummy.
# The build for release is done by the release-process script "mk_exim_release"

doc:	FRC
	cd ../doc/doc-docbook; $(MAKE) EXIM_VER=0 everything

# Tidy-up targets

clean_exim:; cd build-$(buildname); \
	$(RM_COMMAND) -f *.o; \
	for d in lookups auths routers transports miscmods; do \
		$(RM_COMMAND) -f $$d/*.{o,a,so}; \
	done; \
	$(RM_COMMAND) -fr dynmodules

clean_doc: FRC
	cd ../doc/doc-docbook; \
	$(RM_COMMAND) -f {filter,spec}*.{pdf,ps,txt,html,xml}

clean:	clean_exim clean_doc
	@echo ""; echo '*** "make clean" just removes all .o and .a files'
	@echo '*** Use "make makefile" to force a rebuild of the makefile'
	@echo ""

distclean: clean_doc
	$(RM_COMMAND) -rf build-* cscope*

cscope.files: FRC
	echo "-q" > $@
	echo "-p3" >> $@
	-bd=build-$(buildname); [ -d $$bd ] && echo -e "$$bd/config.h\n$$bd/Makefile" >> $@
	find src Local OS exim_monitor -name "*.[cshyl]" -print \
		    -o -name "os.[ch]*" -print \
		    -o -name "*akefile*" -print \
		    -o -name config.h.defaults -print \
		    -o -name EDITME -print >> $@

FRC:

# End of top-level makefile