-
Notifications
You must be signed in to change notification settings - Fork 284
/
rules.mk
157 lines (127 loc) · 6.73 KB
/
rules.mk
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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
# libEtPan! -- a mail stuff library
#
# Copyright (C) 2007 g10 Code GmbH
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
# 3. Neither the name of the libEtPan! project nor the names of its
# contributors may be used to endorse or promote products derived
# from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
# Description of the build system
# ===============================
# The build system uses automake and autoconf mostly in the usual way.
# A typical work flow for working with the SVN version would be:
# $ autoreconf
# $ ./configure --enable-maintainer-mode
# $ make
# All Makefile.am files must contain:
# include $(top_srcdir)/rules.mk
# If BUILT_SOURCES are desired, they need to be defined *after* the
# above include by a += directive, for example:
# BUILT_SOURCES += foo.h
# This is because rules.mk defines BUILT_SOURCES for its own purposes.
# Header Link Farm
# ================
# The public header files of libetpan are scattered throughout the
# source tree and defined by libetpaninclude_HEADERS automake variables.
# (The corresponding libetpanincludedir is defined in rules.mk). Before
# building anything else in the project, we prepare a header link farm
# in include/libetpan (this directory will be created). The header link
# farm is generated automatically when any Makefile (or other
# configure-generated file) is modified, for example by editing
# Makefile.am in maintainer mode. This ensures that all modifications
# to libetpaninclude_HEADERS variables are picked up properly.
# The header link farm is built using the BUILT_SOURCES mechanism of
# automake, which means that it will only be built by "make all", "make
# check" and "make install". This means that eithr of these commands
# needs to be used before targeting individual project files works. If
# the header link farm should be generated or updated manually, the
# following command can be used in the *top-level build directory*:
# $ rm stamp-prepare; make stamp-prepare
# Public header files are defined by libetpaninclude_HEADERS variables.
etpanincludedir = $(includedir)/libetpan
# We add a recursive target "prepare" which creates the desired links
# in include/libetpan from libetpan include files scattered throughout
# the source. See also README.rules.
# We hook into the BUILT_SOURCES mechanism of automake, see Section
# "Built sources" in the automake manual for details.
BUILT_SOURCES = $(top_builddir)/stamp-prepare
# The stamp file depends on all files generated by configure. This
# naturally includes all Makefiles which define
# libetpaninclude_HEADERS variables for public header files, which are
# the files we want. There are some more files in this list, but we
# don't mind regenerating the header link farm a bit more often than
# necessary. Usually you won't notice a difference as
# configure-generated files are updated very rarely.
$(top_builddir)/stamp-prepare: $(cfg_files)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) stamp-prepare-target
touch $(top_builddir)/stamp-prepare
# This target should only be invoked in the top level directory (ie
# indirectly through $(top_builddir)/stamp-prepare). It is
# responsible for updating the header link farm. First, the header
# link farm is deleted by invoking the clean target in the include
# directory. Then the header link farm is (re-)generated by
# exploiting the recursive targets mechanism provided by automake.
# Note that this is exploiting automake internals (automake currently
# provides no official hooks for recursive targets).
stamp-prepare-target: $(cfg_files)
cd include && $(MAKE) $(AM_MAKEFLAGS) clean
$(MAKE) $(AM_MAKEFLAGS) RECURSIVE_TARGETS=prepare-recursive prepare
touch stamp-prepare
# Leaf directories (without SUBDIRS) do not have a target
# $(RECURSIVE_TARGETS), so we need to terminate prepare-recursive for
# them here.
prepare-recursive:
# The standard prepare target first recurses, and then calls the
# individual rules.
prepare: prepare-recursive prepare-am
# The local prepare rules are first rules internal to this file
# rules.mk, and second rules local to a single Makefile.am file. The
# internal rules here create symbolic links for each installed public
# header file of libetpan under $(top_builddir)/include/libetpan/.
prepare-am: prepare-local
@if test "$(etpaninclude_HEADERS)" != ""; then \
echo "$(mkinstalldirs) $(top_builddir)/include/libetpan/"; \
$(mkinstalldirs) $(top_builddir)/include/libetpan/;\
echo "cd $(top_builddir)/include/libetpan/"; \
cd $(top_builddir)/include/libetpan/ \
&& for hdr in $(etpaninclude_HEADERS) list_end; do \
if test $${hdr} != list_end; then \
if test -e $(abs_srcdir)/$${hdr}; then \
echo "$(LN_S) -f $(abs_srcdir)/$${hdr} ."; \
$(LN_S) -f $(abs_srcdir)/$${hdr} .; \
else \
echo "$(LN_S) -f $(abs_builddir)/$${hdr} ."; \
$(LN_S) -f $(abs_builddir)/$${hdr} .; \
fi; \
fi; \
done; \
fi
# Use this target to extend the prepare rules in a single Makefile.am.
prepare-local:
# Copyright 2007 g10 Code GmbH
# This file is free software; as a special exception the author gives
# unlimited permission to copy and/or distribute it, with or without
# modifications, as long as this notice is preserved.
# This file is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.