You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
libetpan/rules.mk

158 lines
6.7 KiB
Makefile

12 years ago
# 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 ../../$(subdir)/$${hdr}; then \
echo "$(LN_S) -f ../../$(subdir)/$${hdr} ."; \
$(LN_S) -f ../../$(subdir)/$${hdr} .; \
else \
echo "$(LN_S) -f ../../$(subdir)/$(srcdir)/$${hdr} ."; \
$(LN_S) -f ../../$(subdir)/$(srcdir)/$${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.