1242 lines
42 KiB
Makefile
1242 lines
42 KiB
Makefile
|
# Top-level Makefile(.in) for distcc
|
||
|
|
||
|
# Copyright (C) 2002, 2003, 2004 by Martin Pool
|
||
|
|
||
|
# Note that distcc no longer uses automake, but this file is still
|
||
|
# structured in a somewhat similar way.
|
||
|
|
||
|
## VARIABLES
|
||
|
|
||
|
PACKAGE = @PACKAGE_NAME@
|
||
|
VERSION = @PACKAGE_VERSION@
|
||
|
PACKAGE_TARNAME = @PACKAGE_TARNAME@
|
||
|
SHELL = @SHELL@
|
||
|
|
||
|
# These autoconf variables may contain recursive Make expansions, and
|
||
|
# so they have to be done here rather than written into config.h.
|
||
|
|
||
|
CFLAGS = @CFLAGS@
|
||
|
WERROR_CFLAGS = @WERROR_CFLAGS@
|
||
|
PYTHON_CFLAGS = @PYTHON_CFLAGS@
|
||
|
POPT_CFLAGS = @POPT_CFLAGS@
|
||
|
POPT_INCLUDES = @POPT_INCLUDES@
|
||
|
|
||
|
LDFLAGS = @LDFLAGS@
|
||
|
CC = @CC@
|
||
|
CPP = @CPP@
|
||
|
# We add a few cppflags. -Isrc is so that config.h can be found in the build
|
||
|
# directory. It is before I"$(srcdir)/src" to reflect VPATH semantics.
|
||
|
CPPFLAGS = @CPPFLAGS@ ${DIR_DEFS} \
|
||
|
-Isrc -I"$(srcdir)/src" -I"$(srcdir)/lzo" $(POPT_INCLUDES)
|
||
|
|
||
|
PYTHON = @PYTHON@
|
||
|
|
||
|
srcdir = @srcdir@
|
||
|
top_srcdir = @top_srcdir@
|
||
|
builddir = @builddir@
|
||
|
top_builddir = @top_builddir@
|
||
|
VPATH = @srcdir@
|
||
|
prefix = @prefix@
|
||
|
exec_prefix = @exec_prefix@
|
||
|
|
||
|
bindir = @bindir@
|
||
|
sbindir = @sbindir@
|
||
|
libexecdir = @libexecdir@
|
||
|
datarootdir = @datarootdir@
|
||
|
datadir = @datadir@
|
||
|
sysconfdir = @sysconfdir@
|
||
|
sharedstatedir = @sharedstatedir@
|
||
|
localstatedir = @localstatedir@
|
||
|
libdir = @libdir@
|
||
|
mandir = @mandir@
|
||
|
includedir = @includedir@
|
||
|
oldincludedir = /usr/include
|
||
|
docdir = @docdir@
|
||
|
pkgdatadir = $(datadir)/@PACKAGE_NAME@
|
||
|
|
||
|
include_server_builddir = $(builddir)/_include_server
|
||
|
|
||
|
# These must be done from here, not from autoconf, because they can
|
||
|
# contain variable expansions written in Make syntax. Ew.
|
||
|
DIR_DEFS = -DLIBDIR="\"${libdir}\"" -DSYSCONFDIR="\"${sysconfdir}\"" -DPKGDATADIR="\"${pkgdatadir}\""
|
||
|
|
||
|
# arguments to pkgconfig
|
||
|
GNOME_PACKAGES = @GNOME_PACKAGES@
|
||
|
GNOME_CFLAGS = @GNOME_CFLAGS@
|
||
|
GNOME_LIBS = @GNOME_LIBS@
|
||
|
|
||
|
LIBS = @LIBS@
|
||
|
|
||
|
DESTDIR =
|
||
|
|
||
|
INSTALL = @INSTALL@
|
||
|
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||
|
INSTALL_DATA = @INSTALL_DATA@
|
||
|
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||
|
|
||
|
# RESTRICTED_PATH is a colon separated list of directory names. It
|
||
|
# contains the locations of 'make', 'sh', 'gcc', and 'python' for use
|
||
|
# in installation tests. This path is used to avoid confusion caused
|
||
|
# by distcc masquerades on the normal path. See the
|
||
|
# 'maintainer-check-no-set-path' target.
|
||
|
RESTRICTED_PATH = /usr/local/bin:/bin:/usr/bin
|
||
|
|
||
|
# The DISTCC_INSTALLATION variable is a colon separated list of
|
||
|
# directory names of possible locations for the installation to be
|
||
|
# checked. Change the value of this variable to @bindir@ to check the
|
||
|
# installation at the location determined by 'configure'.
|
||
|
DISTCC_INSTALLATION = $(RESTRICTED_PATH)
|
||
|
|
||
|
dist_files = \
|
||
|
src/config.h.in \
|
||
|
$(dist_lzo) \
|
||
|
$(dist_contrib) \
|
||
|
$(dist_patches) \
|
||
|
$(dist_common) \
|
||
|
$(MEN) \
|
||
|
$(pkgdoc_DOCS) \
|
||
|
$(example_DOCS) \
|
||
|
$(popt_EXTRA) $(popt_SRC) $(popt_HEADERS) \
|
||
|
$(SRC) $(HEADERS) \
|
||
|
$(update_distcc_symlinks_PY) \
|
||
|
$(test_SOURCE) \
|
||
|
$(bench_PY) \
|
||
|
$(include_server_PY) \
|
||
|
$(dist_include_server_SH) \
|
||
|
$(include_server_SRC) \
|
||
|
$(check_include_server_DATA) \
|
||
|
$(check_include_server_PY) \
|
||
|
$(conf_files) \
|
||
|
$(default_files) \
|
||
|
$(dist_extra) \
|
||
|
$(gnome_data)
|
||
|
|
||
|
dist_dirs = m4 include_server/test_data
|
||
|
|
||
|
dist_lzo = lzo/minilzo.c \
|
||
|
lzo/minilzo.h \
|
||
|
lzo/lzoconf.h \
|
||
|
lzo/lzodefs.h \
|
||
|
lzo/.stamp-conf.in
|
||
|
|
||
|
dist_contrib = contrib/distcc-absolutify \
|
||
|
contrib/distcc.sh \
|
||
|
contrib/distccd-init \
|
||
|
contrib/distccd-on-servers \
|
||
|
contrib/dmake \
|
||
|
contrib/make-j \
|
||
|
contrib/netpwd \
|
||
|
contrib/stage-cc-wrapper.patch \
|
||
|
contrib/redhat/init \
|
||
|
contrib/redhat/logrotate \
|
||
|
contrib/redhat/sysconfig \
|
||
|
contrib/redhat/xinetd
|
||
|
|
||
|
dist_include_server_SH = \
|
||
|
pump.in
|
||
|
|
||
|
bench_PY = bench/Build.py \
|
||
|
bench/Project.py \
|
||
|
bench/ProjectDefs.py \
|
||
|
bench/Summary.py \
|
||
|
bench/actions.py \
|
||
|
bench/benchmark.py \
|
||
|
bench/buildutil.py \
|
||
|
bench/compiler.py \
|
||
|
bench/statistics.py
|
||
|
|
||
|
pkgdoc_DOCS = AUTHORS COPYING NEWS \
|
||
|
README README.pump \
|
||
|
INSTALL \
|
||
|
TODO \
|
||
|
doc/protocol-1.txt doc/status-1.txt \
|
||
|
doc/protocol-2.txt \
|
||
|
doc/protocol-3.txt doc/protocol-3-impl.txt \
|
||
|
doc/protocol-gssapi.txt \
|
||
|
doc/reporting-bugs.txt \
|
||
|
survey.txt
|
||
|
|
||
|
example_DOCS = \
|
||
|
doc/example/README \
|
||
|
doc/example/default \
|
||
|
doc/example/hosts.allow \
|
||
|
doc/example/services \
|
||
|
doc/example/init doc/example/init-suse \
|
||
|
doc/example/logrotate \
|
||
|
doc/example/xinetd \
|
||
|
|
||
|
include_server_PY = \
|
||
|
include_server/basics.py \
|
||
|
include_server/cache_basics.py \
|
||
|
include_server/compiler_defaults.py \
|
||
|
include_server/compress_files.py \
|
||
|
include_server/include_analyzer.py \
|
||
|
include_server/include_analyzer_memoizing_node.py \
|
||
|
include_server/include_server.py \
|
||
|
include_server/macro_eval.py \
|
||
|
include_server/mirror_path.py \
|
||
|
include_server/parse_command.py \
|
||
|
include_server/parse_file.py \
|
||
|
include_server/run.py \
|
||
|
include_server/setup.py \
|
||
|
include_server/statistics.py
|
||
|
|
||
|
include_server_SRC = \
|
||
|
include_server/c_extensions/distcc_pump_c_extensions_module.c
|
||
|
|
||
|
update_distcc_symlinks_PY = update-distcc-symlinks.py
|
||
|
|
||
|
# These are included in the distribution but not installed anywhere.
|
||
|
dist_extra = \
|
||
|
README.packaging ChangeLog \
|
||
|
packaging/RedHat/rpm.spec \
|
||
|
packaging/RedHat/logrotate.d/distcc \
|
||
|
packaging/RedHat/init.d/distcc \
|
||
|
packaging/RedHat/xinetd.d/distcc \
|
||
|
packaging/deb.sh \
|
||
|
packaging/rpm.sh \
|
||
|
packaging/googlecode_upload.py
|
||
|
|
||
|
|
||
|
mkinstalldirs = $(SHELL) $(srcdir)/mkinstalldirs
|
||
|
man1dir = $(mandir)/man1
|
||
|
man8dir = $(mandir)/man8
|
||
|
|
||
|
test_SOURCE = test/comfychair.py \
|
||
|
test/onetest.py \
|
||
|
test/testdistcc.py \
|
||
|
find_c_extension.sh
|
||
|
|
||
|
dist_common = Makefile.in install-sh configure configure.ac \
|
||
|
config.guess config.sub mkinstalldirs autogen.sh
|
||
|
|
||
|
# It seems a bit unnecessary to ship patches in the released tarballs.
|
||
|
# People who are so keen as to apply unsupported patches ought to use
|
||
|
# CVS, or at least get them from the list.
|
||
|
dist_patches =
|
||
|
|
||
|
TAR = tar
|
||
|
GZIP_BIN = gzip
|
||
|
# This is set on the environment, and automatically read by gzip.
|
||
|
# This way we always get best compression, even when gzip is run in a
|
||
|
# script we call, rather than being called by us directly.
|
||
|
GZIP = -9v
|
||
|
BZIP2_BIN = bzip2
|
||
|
|
||
|
distdir = $(PACKAGE_TARNAME)-$(VERSION)
|
||
|
tarball = $(PACKAGE_TARNAME)-$(VERSION).tar
|
||
|
tarball_bz2 = $(tarball).bz2
|
||
|
tarball_gz = $(tarball).gz
|
||
|
tarball_sig_bz2 = $(tarball_bz2).asc
|
||
|
tarball_sig_gz = $(tarball_gz).asc
|
||
|
distnews = $(PACKAGE_TARNAME)-$(VERSION).NEWS
|
||
|
|
||
|
rpm_glob_pattern = "$(PACKAGE)"*[-_.]"$(VERSION)"[-_.]*.rpm
|
||
|
deb_glob_pattern = "$(PACKAGE)"*[-_.]"$(VERSION)"[-_.]*.deb
|
||
|
|
||
|
common_obj = src/arg.o src/argutil.o \
|
||
|
src/cleanup.o src/compress.o \
|
||
|
src/trace.o src/util.o src/io.o src/exec.o \
|
||
|
src/rpc.o src/tempfile.o src/bulk.o src/help.o src/filename.o \
|
||
|
src/lock.o \
|
||
|
src/netutil.o \
|
||
|
src/pump.o \
|
||
|
src/sendfile.o \
|
||
|
src/safeguard.o src/snprintf.o src/timeval.o \
|
||
|
src/dotd.o \
|
||
|
src/hosts.o src/hostfile.o \
|
||
|
src/implicit.o src/loadfile.o \
|
||
|
lzo/minilzo.o \
|
||
|
@ZEROCONF_COMMON_OBJS@ \
|
||
|
@AUTH_COMMON_OBJS@
|
||
|
|
||
|
distcc_obj = src/backoff.o \
|
||
|
src/climasq.o src/clinet.o src/clirpc.o \
|
||
|
src/compile.o src/cpp.o \
|
||
|
src/distcc.o \
|
||
|
src/remote.o \
|
||
|
src/ssh.o src/state.o src/strip.o \
|
||
|
src/timefile.o src/traceenv.o \
|
||
|
src/include_server_if.o \
|
||
|
src/where.o \
|
||
|
@ZEROCONF_DISTCC_OBJS@ \
|
||
|
@AUTH_DISTCC_OBJS@ \
|
||
|
src/emaillog.o \
|
||
|
$(common_obj)
|
||
|
|
||
|
distccd_obj = src/access.o \
|
||
|
src/daemon.o src/dopt.o src/dparent.o src/dsignal.o \
|
||
|
src/ncpus.o \
|
||
|
src/prefork.o \
|
||
|
src/stringmap.o \
|
||
|
src/serve.o src/setuid.o src/srvnet.o src/srvrpc.o src/state.o \
|
||
|
src/stats.o \
|
||
|
src/fix_debug_info.o \
|
||
|
@ZEROCONF_DISTCCD_OBJS@ \
|
||
|
@AUTH_DISTCCD_OBJS@ \
|
||
|
$(common_obj) @BUILD_POPT@
|
||
|
|
||
|
lsdistcc_obj = src/lsdistcc.o \
|
||
|
src/clinet.o src/io.o src/netutil.o src/trace.o src/util.o \
|
||
|
src/rslave.o src/snprintf.o \
|
||
|
lzo/minilzo.o
|
||
|
|
||
|
# Objects that need to be linked in to build monitors
|
||
|
mon_obj = \
|
||
|
src/cleanup.o \
|
||
|
src/filename.o \
|
||
|
src/io.o \
|
||
|
src/mon.o \
|
||
|
src/netutil.o \
|
||
|
src/argutil.o \
|
||
|
src/rpc.o \
|
||
|
src/snprintf.o src/state.o \
|
||
|
src/tempfile.o src/trace.o src/traceenv.o \
|
||
|
src/util.o
|
||
|
|
||
|
gnome_obj = src/history.o src/mon-gnome.o \
|
||
|
src/renderer.o
|
||
|
|
||
|
h_exten_obj = src/h_exten.o $(common_obj)
|
||
|
h_issource_obj = src/h_issource.o $(common_obj)
|
||
|
h_scanargs_obj = src/h_scanargs.o $(common_obj)
|
||
|
h_hosts_obj = src/h_hosts.o $(common_obj)
|
||
|
h_argvtostr_obj = src/h_argvtostr.o $(common_obj)
|
||
|
h_strip_obj = src/h_strip.o $(common_obj) src/strip.o
|
||
|
h_parsemask_obj = src/h_parsemask.o $(common_obj) src/access.o
|
||
|
h_sa2str_obj = src/h_sa2str.o $(common_obj) src/srvnet.o src/access.o
|
||
|
h_ccvers_obj = src/h_ccvers.o $(common_obj)
|
||
|
h_dotd_obj = src/h_dotd.o $(common_obj)
|
||
|
h_fix_debug_info = src/h_fix_debug_info.o $(common_obj)
|
||
|
h_compile_obj = src/h_compile.o $(common_obj) src/compile.o src/timefile.o \
|
||
|
src/backoff.o src/emaillog.o src/remote.o src/clinet.o \
|
||
|
src/clirpc.o src/include_server_if.o src/state.o src/where.o \
|
||
|
src/ssh.o src/strip.o src/cpp.o @AUTH_DISTCC_OBJS@
|
||
|
h_getline_obj = src/h_getline.o $(common_obj)
|
||
|
|
||
|
# All source files, for the purposes of building the distribution
|
||
|
SRC = src/stats.c \
|
||
|
src/access.c src/arg.c src/argutil.c \
|
||
|
src/auth_common.c src/auth_distcc.c src/auth_distccd.c \
|
||
|
src/backoff.c src/bulk.c \
|
||
|
src/cleanup.c \
|
||
|
src/climasq.c src/clinet.c src/clirpc.c src/compile.c \
|
||
|
src/compress.c src/cpp.c \
|
||
|
src/daemon.c src/distcc.c src/dsignal.c \
|
||
|
src/dopt.c src/dparent.c src/exec.c src/filename.c \
|
||
|
src/h_argvtostr.c \
|
||
|
src/h_exten.c src/h_hosts.c src/h_issource.c src/h_parsemask.c \
|
||
|
src/h_sa2str.c src/h_scanargs.c src/h_strip.c \
|
||
|
src/h_dotd.c src/h_compile.c src/h_getline.c \
|
||
|
src/help.c src/history.c src/hosts.c src/hostfile.c \
|
||
|
src/implicit.c src/io.c \
|
||
|
src/loadfile.c src/lock.c \
|
||
|
src/mon.c src/mon-notify.c src/mon-text.c \
|
||
|
src/mon-gnome.c \
|
||
|
src/ncpus.c src/netutil.c \
|
||
|
src/prefork.c src/pump.c \
|
||
|
src/remote.c src/renderer.c src/rpc.c \
|
||
|
src/safeguard.c src/sendfile.c src/setuid.c src/serve.c \
|
||
|
src/snprintf.c src/state.c \
|
||
|
src/srvnet.c src/srvrpc.c src/ssh.c \
|
||
|
src/stringmap.c src/strip.c \
|
||
|
src/tempfile.c src/timefile.c \
|
||
|
src/timeval.c src/traceenv.c \
|
||
|
src/trace.c src/util.c src/where.c \
|
||
|
src/lsdistcc.c src/rslave.c \
|
||
|
src/dotd.c src/include_server_if.c \
|
||
|
src/emaillog.c \
|
||
|
src/fix_debug_info.c \
|
||
|
src/zeroconf.c src/zeroconf-reg.c src/gcc-id.c
|
||
|
|
||
|
|
||
|
HEADERS = src/stats.h \
|
||
|
src/access.h \
|
||
|
src/auth.h \
|
||
|
src/bulk.h \
|
||
|
src/clinet.h src/compile.h \
|
||
|
src/daemon.h \
|
||
|
src/distcc.h src/dopt.h src/exitcode.h \
|
||
|
src/fix_debug_info.h \
|
||
|
src/hosts.h src/implicit.h \
|
||
|
src/mon.h \
|
||
|
src/netutil.h \
|
||
|
src/renderer.h src/rpc.h \
|
||
|
src/snprintf.h src/state.h \
|
||
|
src/stringmap.h \
|
||
|
src/timefile.h src/timeval.h src/trace.h \
|
||
|
src/types.h \
|
||
|
src/util.h \
|
||
|
src/exec.h src/lock.h src/where.h src/srvnet.h \
|
||
|
src/rslave.h \
|
||
|
src/dotd.h src/include_server_if.h \
|
||
|
src/emaillog.h \
|
||
|
src/va_copy.h \
|
||
|
src/zeroconf.h
|
||
|
|
||
|
conf_dir = packaging/RedHat/conf
|
||
|
conf_files = $(conf_dir)/hosts \
|
||
|
$(conf_dir)/clients.allow \
|
||
|
$(conf_dir)/commands.allow.sh
|
||
|
default_dir = packaging/RedHat/default
|
||
|
default_files = $(default_dir)/distcc
|
||
|
|
||
|
man1_MEN = man/distcc.1 man/distccd.1 man/distccmon-text.1 \
|
||
|
man/lsdistcc.1 man/pump.1 man/include_server.1
|
||
|
man_HTML = man/distcc_1.html man/distccd_1.html man/distccmon_text_1.html \
|
||
|
man/lsdistcc_1.html man/pump_1.html man/include_server_1.html
|
||
|
MEN = $(man1_MEN)
|
||
|
|
||
|
gnome_data = gnome/distccmon-gnome-icon.png \
|
||
|
gnome/distccmon-gnome.desktop
|
||
|
|
||
|
popt_OBJS=popt/findme.o popt/popt.o popt/poptconfig.o \
|
||
|
popt/popthelp.o popt/poptparse.o
|
||
|
|
||
|
popt_SRC=popt/findme.c popt/popt.c popt/poptconfig.c \
|
||
|
popt/popthelp.c popt/poptparse.c
|
||
|
|
||
|
popt_HEADERS = popt/findme.h popt/popt.h popt/poptint.h popt/system.h
|
||
|
|
||
|
popt_EXTRA = popt/README.popt popt/.stamp-conf.in
|
||
|
|
||
|
|
||
|
# You might think that distccd ought to be in sbin, because it's a
|
||
|
# daemon. It is a grey area. However, the Linux Filesystem Hierarchy
|
||
|
# Standard (FHS 2.2) says that sbin is for programs "used exclusively
|
||
|
# by the system administrator".
|
||
|
|
||
|
# distccd will often be used by non-root users, and when we support
|
||
|
# ssh it will be somewhat important that it be found in their default
|
||
|
# path. Therefore on balance it seems better to put it in bin/.
|
||
|
|
||
|
# Package maintainers can override this if absolutely necessary, but I
|
||
|
# would prefer that they do not. -- mbp
|
||
|
|
||
|
bin_PROGRAMS = \
|
||
|
distcc@EXEEXT@ \
|
||
|
distccd@EXEEXT@ \
|
||
|
distccmon-text@EXEEXT@ \
|
||
|
lsdistcc@EXEEXT@ \
|
||
|
@GNOME_BIN@
|
||
|
|
||
|
sbin_PROGRAMS = \
|
||
|
update-distcc-symlinks
|
||
|
|
||
|
check_PROGRAMS = \
|
||
|
h_argvtostr@EXEEXT@ \
|
||
|
h_exten@EXEEXT@ \
|
||
|
h_fix_debug_info@EXEEXT@ \
|
||
|
h_hosts@EXEEXT@ \
|
||
|
h_issource@EXEEXT@ \
|
||
|
h_parsemask@EXEEXT@ \
|
||
|
h_sa2str@EXEEXT@ \
|
||
|
h_scanargs@EXEEXT@ \
|
||
|
h_strip@EXEEXT@ \
|
||
|
h_dotd@EXEEXT@ \
|
||
|
h_compile@EXEEXT@ \
|
||
|
h_getline@EXEEXT@
|
||
|
|
||
|
check_include_server_PY = \
|
||
|
include_server/c_extensions_test.py \
|
||
|
include_server/include_server_test.py \
|
||
|
include_server/macro_eval_test.py \
|
||
|
include_server/mirror_path_test.py \
|
||
|
include_server/parse_command_test.py \
|
||
|
include_server/parse_file_test.py \
|
||
|
include_server/include_analyzer_test.py \
|
||
|
include_server/include_analyzer_memoizing_node_test.py \
|
||
|
include_server/basics_test.py
|
||
|
|
||
|
|
||
|
######################################################################
|
||
|
## IMPLICIT BUILD rules
|
||
|
|
||
|
.SUFFIXES: .html .latte .o .c
|
||
|
|
||
|
.c.o:
|
||
|
$(CC) $(CPPFLAGS) $(WERROR_CFLAGS) $(CFLAGS) -o $@ -c $<
|
||
|
|
||
|
|
||
|
######################################################################
|
||
|
## OVERALL targets
|
||
|
|
||
|
.PHONY: all include-server
|
||
|
|
||
|
## NOTE: "all" must be the first (default) rule, aside from patterns.
|
||
|
|
||
|
all: $(bin_PROGRAMS) $(sbin_PROGRAMS) pump include-server
|
||
|
|
||
|
# src/config.h.in is used by config.status
|
||
|
Makefile: Makefile.in src/config.h.in config.status
|
||
|
./config.status
|
||
|
|
||
|
|
||
|
######################################################################
|
||
|
## BUILD targets
|
||
|
|
||
|
# We would like to detect when config.h.in has changed: this should trigger
|
||
|
# config.status to be rerun. But if the config.h file actually does not change
|
||
|
# as a result of running config.status (a feature of autoconf), then
|
||
|
# config.status will be rerun every time. That's confusing. So, the rule
|
||
|
#
|
||
|
# src/config.h: src/config.h.in
|
||
|
# ./config.status
|
||
|
#
|
||
|
# is not sufficient.
|
||
|
|
||
|
src/config.h: src/config.h.stamp
|
||
|
|
||
|
src/config.h.stamp: src/config.h.in
|
||
|
echo "path: $$PATH"
|
||
|
./config.status
|
||
|
touch src/config.h.stamp
|
||
|
|
||
|
pump: pump.in config.status
|
||
|
./config.status
|
||
|
|
||
|
# Grab the dependency files generated by gcc's -MD option.
|
||
|
-include */*.d
|
||
|
|
||
|
# Disable some warnings for popt/*.c.
|
||
|
$(popt_OBJS): CFLAGS += $(POPT_CFLAGS)
|
||
|
|
||
|
distcc@EXEEXT@: $(distcc_obj)
|
||
|
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(distcc_obj) $(LIBS)
|
||
|
|
||
|
distccd@EXEEXT@: $(distccd_obj)
|
||
|
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(distccd_obj) $(LIBS)
|
||
|
|
||
|
distccmon-text@EXEEXT@: $(mon_obj) src/mon-text.o
|
||
|
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(mon_obj) src/mon-text.o $(LIBS)
|
||
|
|
||
|
lsdistcc@EXEEXT@: $(lsdistcc_obj)
|
||
|
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(lsdistcc_obj) $(LIBS)
|
||
|
|
||
|
update-distcc-symlinks: $(update_distcc_symlinks_PY)
|
||
|
cp $< $@
|
||
|
|
||
|
h_exten@EXEEXT@: $(h_exten_obj)
|
||
|
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(h_exten_obj) $(LIBS)
|
||
|
|
||
|
h_issource@EXEEXT@: $(h_issource_obj)
|
||
|
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(h_issource_obj) $(LIBS)
|
||
|
|
||
|
h_sa2str@EXEEXT@: $(h_sa2str_obj)
|
||
|
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(h_sa2str_obj) $(LIBS)
|
||
|
|
||
|
h_scanargs@EXEEXT@: $(h_scanargs_obj)
|
||
|
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(h_scanargs_obj) $(LIBS)
|
||
|
|
||
|
h_hosts@EXEEXT@: $(h_hosts_obj)
|
||
|
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(h_hosts_obj) $(LIBS)
|
||
|
|
||
|
h_argvtostr@EXEEXT@: $(h_argvtostr_obj)
|
||
|
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(h_argvtostr_obj) $(LIBS)
|
||
|
|
||
|
h_parsemask@EXEEXT@: $(h_parsemask_obj)
|
||
|
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(h_parsemask_obj) $(LIBS)
|
||
|
|
||
|
h_strip@EXEEXT@: $(h_strip_obj)
|
||
|
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(h_strip_obj) $(LIBS)
|
||
|
|
||
|
h_ccvers@EXEEXT@: $(h_ccvers_obj)
|
||
|
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(h_ccvers_obj) $(LIBS)
|
||
|
|
||
|
h_dotd@EXEEXT@: $(h_dotd_obj)
|
||
|
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(h_dotd_obj) $(LIBS)
|
||
|
|
||
|
h_fix_debug_info@EXEEXT@: $(h_fix_debug_info)
|
||
|
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(h_fix_debug_info) $(LIBS)
|
||
|
|
||
|
h_compile@EXEEXT@: $(h_compile_obj)
|
||
|
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(h_compile_obj) $(LIBS)
|
||
|
|
||
|
h_getline@EXEEXT@: $(h_getline_obj)
|
||
|
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(h_getline_obj) $(LIBS)
|
||
|
|
||
|
|
||
|
src/h_fix_debug_info.o: src/fix_debug_info.c
|
||
|
$(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) \
|
||
|
-DTEST \
|
||
|
$(srcdir)/src/fix_debug_info.c
|
||
|
|
||
|
src/mon-gnome.o: src/mon-gnome.c
|
||
|
$(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) \
|
||
|
$(GNOME_CFLAGS) \
|
||
|
$(srcdir)/src/mon-gnome.c
|
||
|
|
||
|
src/renderer.o: src/renderer.c
|
||
|
$(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) \
|
||
|
$(GNOME_CFLAGS) \
|
||
|
$(srcdir)/src/renderer.c
|
||
|
|
||
|
distccmon-gnome@EXEEXT@: $(mon_obj) $(gnome_obj)
|
||
|
$(CC) -o $@ $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) \
|
||
|
$(mon_obj) $(gnome_obj) \
|
||
|
$(LIBS) $(GNOME_CFLAGS) $(GNOME_LIBS)
|
||
|
|
||
|
# The include-server is a python app, so we use Python's build system. We pass
|
||
|
# the distcc version, the source location, the CPP flags (for location of the
|
||
|
# includes), and the build location.
|
||
|
include-server:
|
||
|
if test -z "$(PYTHON)"; then \
|
||
|
echo "Not building $@: No suitable python found"; \
|
||
|
else \
|
||
|
mkdir -p "$(include_server_builddir)" && \
|
||
|
DISTCC_VERSION="$(VERSION)" \
|
||
|
SRCDIR="$(srcdir)" \
|
||
|
CFLAGS="$(CFLAGS) $(PYTHON_CFLAGS)" \
|
||
|
CPPFLAGS="$(CPPFLAGS)" \
|
||
|
$(PYTHON) "$(srcdir)/include_server/setup.py" \
|
||
|
build \
|
||
|
--build-base="$(include_server_builddir)" \
|
||
|
--build-temp="$(include_server_builddir)"; \
|
||
|
fi
|
||
|
|
||
|
|
||
|
######################################################################
|
||
|
## DIST TARGETS
|
||
|
|
||
|
.PHONY: dist distcheck dist-sign dist-files
|
||
|
|
||
|
# The sub-targets copy (and if necessary, build) various files that
|
||
|
# have to go into the tarball. They also create necessary directories
|
||
|
# -- bear in mind that they might be run in parallel.
|
||
|
|
||
|
# This looks a bit gross to me, but it's not as bad as it might be :-/
|
||
|
|
||
|
# TODO(csilvers): add 'make rpm' and 'make deb'.
|
||
|
|
||
|
dist:
|
||
|
-rm -fr "$(distdir)"
|
||
|
$(MAKE) dist-files
|
||
|
$(TAR) cf "$(tarball)" "$(distdir)"
|
||
|
$(GZIP_BIN) --help >/dev/null && \
|
||
|
$(GZIP_BIN) -fc "$(tarball)" > "$(tarball_gz)"
|
||
|
$(BZIP2_BIN) --help 2>/dev/null && \
|
||
|
$(BZIP2_BIN) -vfc "$(tarball)" > "$(tarball_bz2)"
|
||
|
rm -f "$(tarball)"
|
||
|
rm -fr "$(distdir)"
|
||
|
cp "$(srcdir)/NEWS" "$(distnews)"
|
||
|
|
||
|
# We create two new directories: one for the build and one to install,
|
||
|
# and make sure we can build and install from different directories
|
||
|
# than the source directory. Then we run a "make distclean" and
|
||
|
# verify it got rid of everything not in the tarball by deleting every
|
||
|
# file mentioned in the tarball, and then making sure nothing is left.
|
||
|
distcheck: dist
|
||
|
[ ! -d +distcheck ] || chmod -R u+w +distcheck
|
||
|
rm -rf '+distcheck'
|
||
|
mkdir '+distcheck'
|
||
|
cd '+distcheck' && $(GZIP_BIN) -d < "../$(tarball_gz)" | $(TAR) xvf -
|
||
|
mkdir "+distcheck/$(distdir)/_build"
|
||
|
mkdir "+distcheck/$(distdir)/_inst"
|
||
|
chmod -R a-w +distcheck
|
||
|
chmod u+w "+distcheck/$(distdir)/_build" "+distcheck/$(distdir)/_inst"
|
||
|
dc_install_base=`cd "+distcheck/$(distdir)/_inst" && pwd` \
|
||
|
&& cd "+distcheck/$(distdir)/_build" \
|
||
|
&& ../configure --srcdir=.. --prefix="$$dc_install_base" \
|
||
|
&& $(MAKE) && $(MAKE) maintainer-check \
|
||
|
&& $(MAKE) install \
|
||
|
&& $(MAKE) DISTCC_INSTALLATION="$$dc_install_base/bin" \
|
||
|
maintainer-installcheck \
|
||
|
&& $(MAKE) distclean
|
||
|
chmod -R u+w +distcheck
|
||
|
test `find "+distcheck/$(distdir)/_build" -type f -print | wc -l` -eq 0 \
|
||
|
|| { echo "ERROR: files left in build-dir after distclean:"; \
|
||
|
find "+distcheck/$(distdir)/_build" -type f -print; \
|
||
|
rm -rf '+distcheck'; \
|
||
|
exit 1; }
|
||
|
rm -rf '+distcheck'
|
||
|
|
||
|
dist-sign:
|
||
|
gpg -a --detach-sign "$(tarball_bz2)"
|
||
|
|
||
|
# For the dirs we copy, we don't want to copy control files like '.cvs'.
|
||
|
# We use find for this; if 'find' doesn't work, just don't worry about it.
|
||
|
dist-files: $(dist_files)
|
||
|
for f in $(dist_files) $(dist_dirs); do \
|
||
|
mkdir -p "$(distdir)"/`dirname "$$f"` || exit 1; \
|
||
|
cp -pR "$(srcdir)/$$f" "$(distdir)/$$f" 2>/dev/null || \
|
||
|
cp -pR "$$f" "$(distdir)/$$f" || exit 1; \
|
||
|
done
|
||
|
for f in $(dist_dirs); do \
|
||
|
find "$(distdir)/$$f" -name '.[^.]*' -exec rm -rf \{\} \; -prune ; \
|
||
|
done
|
||
|
|
||
|
|
||
|
######################################################################
|
||
|
## BUILD manual targets
|
||
|
|
||
|
man/distcc_1.html: man/distcc.1
|
||
|
troff2html -man "$(srcdir)"/man/distcc.1 > $@
|
||
|
|
||
|
man/distccd_1.html: man/distccd.1
|
||
|
troff2html -man "$(srcdir)"/man/distccd.1 > $@
|
||
|
|
||
|
man/distccmon_text_1.html: man/distccmon-text.1
|
||
|
troff2html -man "$(srcdir)"/man/distccmon-text.1 > $@
|
||
|
|
||
|
man/lsdistcc_1.html: man/lsdistcc.1
|
||
|
troff2html -man "$(srcdir)"/man/lsdistcc.1 > $@
|
||
|
|
||
|
man/pump_1.html: man/pump.1
|
||
|
troff2html -man "$(srcdir)"/man/pump.1 > $@
|
||
|
|
||
|
man/include_server_1.html: man/include_server.1
|
||
|
troff2html -man "$(srcdir)"/man/include_server.1 > $@
|
||
|
|
||
|
######################################################################
|
||
|
## CHECK targets for code that has been build.
|
||
|
|
||
|
.PHONY: check_programs
|
||
|
.PHONY: maintainer-check-no-set-path distcc-maintainer-check
|
||
|
.PHONY: include-server-maintainer-check pump-maintainer-check
|
||
|
.PHONY: maintainer-check
|
||
|
.PHONY: check
|
||
|
.PHONY: lzo-check valgrind-check single-test pump-single-test
|
||
|
|
||
|
check_programs: $(check_PROGRAMS) $(bin_PROGRAMS)
|
||
|
|
||
|
TESTDISTCC_OPTS =
|
||
|
|
||
|
# This target is for internal use by distcc-maintainer-check and
|
||
|
# distcc-installcheck. These rules differ only in their choice of the value of
|
||
|
# PATH to use. PATH must be set appropriately so that python, distcc binaries,
|
||
|
# gcc, and those of the check_PROGRAMS, can be found on PATH. This is done in
|
||
|
# the call of this target through use of the variable RESTRICTED_PATH.
|
||
|
#
|
||
|
# The more prominent of these conditions are checked explicitly checked below.
|
||
|
#
|
||
|
# TODO(klarlund): the outermost if assumes that the include-server target may be
|
||
|
# satisfied w/o actually building an include server (or rather the C extension);
|
||
|
# this logic needs to be verified or amended.
|
||
|
maintainer-check-no-set-path:
|
||
|
@if ! $(PYTHON) -c 'import sys; print(sys.version)'; then \
|
||
|
echo "WARNING: python not found; tests skipped"; \
|
||
|
else \
|
||
|
if ! $(CC) --version 2>/dev/null; then \
|
||
|
echo "Could not find CC on the restricted path used to avoid"; \
|
||
|
echo "confusion caused by distcc masquerades on the normal path."; \
|
||
|
echo "PATH is currently '$$PATH'."; \
|
||
|
echo "Please change RESTRICTED_PATH to change this PATH value."; \
|
||
|
exit 1; \
|
||
|
fi; \
|
||
|
$(PYTHON) "$(srcdir)/test/testdistcc.py" $(TESTDISTCC_OPTS); \
|
||
|
fi
|
||
|
|
||
|
distcc-maintainer-check: check_programs
|
||
|
$(MAKE) PATH="`pwd`:$(RESTRICTED_PATH)" \
|
||
|
TESTDISTCC_OPTS="$(TESTDISTCC_OPTS)" maintainer-check-no-set-path
|
||
|
|
||
|
# If the include server extension module was built, then run the tests include
|
||
|
# server. TODO(klarlund): the outermost if assumes that the include-server
|
||
|
# target may be satisfied w/o actually building an include server (or rather the
|
||
|
# C extension); this logic needs to be verified or amended.
|
||
|
# TODO(csilvers): keep track of failures instead of exiting on the first one.
|
||
|
include-server-maintainer-check: include-server
|
||
|
@if ! test -d "$(include_server_builddir)"; then \
|
||
|
echo "Skipped include-server check"; \
|
||
|
else \
|
||
|
CURDIR=`pwd`; \
|
||
|
include_server_loc=`"$(srcdir)/find_c_extension.sh" "$(builddir)"`; \
|
||
|
test $$? = 0 || (echo 'Could not locate extension.' 1>&2 && exit 1); \
|
||
|
cd "$(srcdir)/include_server"; \
|
||
|
for p in $(check_include_server_PY); do \
|
||
|
p_base=`basename "$$p"`; \
|
||
|
echo "Running:" \
|
||
|
"PYTHONPATH=$$CURDIR/$$include_server_loc:$$PYTHONPATH $(PYTHON) $$p_base"; \
|
||
|
if PYTHONPATH="$$CURDIR/$$include_server_loc:$$PYTHONPATH" $(PYTHON) "$$p_base" \
|
||
|
> "$$CURDIR/$(tempdir)/$$p_base.out" 2>&1; then \
|
||
|
echo "PASS"; \
|
||
|
rm "$$CURDIR/$(tempdir)/$$p_base.out"; \
|
||
|
else \
|
||
|
echo "FAIL"; cat "$$CURDIR/$(tempdir)/$$p_base.out"; exit 1; \
|
||
|
fi; \
|
||
|
done; \
|
||
|
fi
|
||
|
|
||
|
# Do distcc-maintainer-check in pump-mode, if possible.
|
||
|
pump-maintainer-check: pump include-server check_programs
|
||
|
@if [ -d "$(include_server_builddir)" ]; then \
|
||
|
DISTCC_HOSTS='<invalid>,cpp,lzo' \
|
||
|
"$(builddir)/pump" \
|
||
|
$(MAKE) \
|
||
|
RESTRICTED_PATH="$(RESTRICTED_PATH)" \
|
||
|
TESTDISTCC_OPTS="--pump $(TESTDISTCC_OPTS)" \
|
||
|
distcc-maintainer-check; \
|
||
|
fi
|
||
|
|
||
|
# Do distcc-maintainer-check, for non-pumped distcc, and try the include_server
|
||
|
# check to check the include server's behavior, if applicable. If the include
|
||
|
# server exists, then carry out distcc-maintainer-check in pump-mode.
|
||
|
maintainer-check: distcc-maintainer-check include-server-maintainer-check \
|
||
|
pump-maintainer-check
|
||
|
|
||
|
check:
|
||
|
@if test -n "$(PYTHON)"; then \
|
||
|
$(MAKE) maintainer-check; \
|
||
|
elif test -n "$(PYTHON)"; then \
|
||
|
echo "WARNING: pump-mode not being tested"; \
|
||
|
$(MAKE) distcc-maintainer-check; \
|
||
|
else \
|
||
|
echo "Cannot run tests: python binary not found"; \
|
||
|
false; \
|
||
|
fi
|
||
|
|
||
|
# Runs the tests in lzo-mode.
|
||
|
lzo-check:
|
||
|
$(MAKE) TESTDISTCC_OPTS=--lzo maintainer-check
|
||
|
|
||
|
# Runs the tests with valgrind.
|
||
|
valgrind-check:
|
||
|
$(MAKE) TESTDISTCC_OPTS=--valgrind maintainer-check
|
||
|
|
||
|
# The following target is useful for running a single test at a time.
|
||
|
# Sample usage:
|
||
|
# make TESTNAME=Lsdistcc_Case single-test
|
||
|
# make TESTNAME=Lsdistcc_Case TESTDISTCC_OPTS=--valgrind single-test
|
||
|
TESTNAME = NoDetachDaemon_Case # Override this with the desired test.
|
||
|
single-test: check_programs
|
||
|
PATH="`pwd`:$(RESTRICTED_PATH)" \
|
||
|
$(PYTHON) "$(srcdir)/test/onetest.py" $(TESTDISTCC_OPTS) $(TESTNAME)
|
||
|
|
||
|
# Run a single test in pump-mode.
|
||
|
pump-single-test: pump include-server check_programs
|
||
|
DISTCC_HOSTS='<invalid>,cpp,lzo' \
|
||
|
"$(builddir)/pump" \
|
||
|
$(MAKE) \
|
||
|
RESTRICTED_PATH="$(RESTRICTED_PATH)" \
|
||
|
TESTDISTCC_OPTS="--pump $(TESTDISTCC_OPTS)" \
|
||
|
single-test
|
||
|
|
||
|
######################################################################
|
||
|
## CHECK targets for code that has been installed.
|
||
|
|
||
|
.PHONY: pump-installcheck distcc-installcheck maintainer-installcheck
|
||
|
.PHONY: installcheck verify-binaries-installcheck daemon-installcheck
|
||
|
|
||
|
# Verify that DISTCC_INSTALLATION contains the expected set of binaries.
|
||
|
verify-binaries-installcheck:
|
||
|
@echo "Locating binaries in" \
|
||
|
"DISTCC_INSTALLATION='$(DISTCC_INSTALLATION)'"
|
||
|
@echo "To use installation in @bindir@, remake with" \
|
||
|
"argument 'DISTCC_INSTALLATION=@bindir@'."
|
||
|
@echo "Make sure all paths below are where you expect them to be:"
|
||
|
@echo "**********************************************************"
|
||
|
@for p in $(bin_PROGRAMS); do \
|
||
|
if ! PATH="$(DISTCC_INSTALLATION)" `which which` "$$p"; then \
|
||
|
echo "Binary '$$p' could not be found in DISTCC_INSTALLATION."; \
|
||
|
exit 1; \
|
||
|
fi; \
|
||
|
done
|
||
|
@echo "**********************************************************"
|
||
|
|
||
|
# Lookup distcc programs to be checked in $(DISTCC_INSTALLATION). The
|
||
|
# check_PROGRAMS binaries, however, are to be found in $(builddir).
|
||
|
distcc-installcheck: $(check_PROGRAMS)
|
||
|
BUILDDIR=`cd "$(builddir)" && pwd`; \
|
||
|
PATH="$(DISTCC_INSTALLATION):$$BUILDDIR:$(RESTRICTED_PATH)" \
|
||
|
TESTDISTCC_OPTS="$(TESTDISTCC_OPTS)" \
|
||
|
$(MAKE) maintainer-check-no-set-path
|
||
|
|
||
|
# Check the installation to see whether pump-mode works.
|
||
|
pump-installcheck:
|
||
|
which_loc=`which which`; \
|
||
|
pump_loc=`PATH="$(DISTCC_INSTALLATION)" "$$which_loc" pump`; \
|
||
|
DISTCC_HOSTS='<invalid>,cpp,lzo' \
|
||
|
"$$pump_loc" \
|
||
|
$(MAKE) DISTCC_INSTALLATION="$(DISTCC_INSTALLATION)" \
|
||
|
RESTRICTED_PATH="$(RESTRICTED_PATH)" \
|
||
|
TESTDISTCC_OPTS=--pump distcc-installcheck; \
|
||
|
|
||
|
# "make maintainer-installcheck" verifies the currently installed version in
|
||
|
# RESTRICTED_PATH. It does not have the "install" target as a dependency so
|
||
|
# that you can can check an installation that is installed via some different
|
||
|
# method (e.g. rpm or debian package). You must specify the location of such an
|
||
|
# installation by overriding the value of DISTCC_INSTALLATION.
|
||
|
#
|
||
|
# The maintainer-installcheck does not run the include server unit tests;
|
||
|
# but the integration tests in 'test' are run in pump mode.
|
||
|
maintainer-installcheck: verify-binaries-installcheck distcc-installcheck \
|
||
|
pump-installcheck
|
||
|
|
||
|
installcheck:
|
||
|
@if test -n "$(PYTHON)"; then \
|
||
|
$(MAKE) maintainer-installcheck; \
|
||
|
elif test -n "$(PYTHON)"; then \
|
||
|
echo "WARNING: pump-mode not being tested"; \
|
||
|
$(MAKE) distcc-maintainer-installcheck; \
|
||
|
else \
|
||
|
echo "Cannot run install-tests: python binary not found"; \
|
||
|
false; \
|
||
|
fi
|
||
|
|
||
|
# This tests that the distcc daemon is running, and that it and distcc
|
||
|
# and the pump script have been installed correctly, by compiling a simple
|
||
|
# hello world program with distcc and distcc-pump.
|
||
|
# This can be used after "make install-deb".
|
||
|
#
|
||
|
# This uses distcc from your PATH and (for the first test)
|
||
|
# may use DISTCC_HOSTS from your environment or /etc/distcc/hosts.
|
||
|
#
|
||
|
# This test might fail if the --allow options passed to distccd
|
||
|
# (which may be set in the /etc/distcc/clients.allow file)
|
||
|
# do not include 127.0.0.1.
|
||
|
daemon-installcheck:
|
||
|
mkdir -p _testtmp/daemon-installcheck && \
|
||
|
cd _testtmp/daemon-installcheck && \
|
||
|
echo '#include <stdio.h>' > hello.c && \
|
||
|
echo 'int main(void) { puts("hello world"); return 0; }' >> hello.c && \
|
||
|
rm -f hello.o && \
|
||
|
DISTCC_FALLBACK=0 distcc $(CC) $(CFLAGS) -c hello.c -o hello.o && \
|
||
|
test -f hello.o && \
|
||
|
rm -f hello.o && \
|
||
|
DISTCC_POTENTIAL_HOSTS=127.0.0.1 DISTCC_FALLBACK=0 \
|
||
|
pump distcc $(CC) $(CFLAGS) -c hello.c -o hello.o && \
|
||
|
test -f hello.o
|
||
|
|
||
|
######################################################################
|
||
|
## BENCHMARK targets
|
||
|
|
||
|
.PHONY: benchmark
|
||
|
|
||
|
benchmark:
|
||
|
@echo "The distcc macro-benchmark uses your existing distcc installation"
|
||
|
@if [ -n "$$DISTCC_HOSTS" ]; \
|
||
|
then echo "DISTCC_HOSTS=\"$$DISTCC_HOSTS\""; \
|
||
|
else echo "You must set up servers and set DISTCC_HOSTS before running the benchmark"; \
|
||
|
exit 1; \
|
||
|
fi
|
||
|
@echo "This benchmark may download a lot of source files, and it takes a "
|
||
|
@echo "long time to run. Interrupt now if you want."
|
||
|
@echo
|
||
|
@echo "Pass BENCH_ARGS to make to specify which benchmarks to run."
|
||
|
@echo
|
||
|
@sleep 5
|
||
|
cd bench && $(PYTHON) benchmark.py $(BENCH_ARGS)
|
||
|
|
||
|
|
||
|
######################################################################
|
||
|
## CLEAN targets
|
||
|
|
||
|
.PHONY: clean clean-autoconf clean-lzo clean-include-server
|
||
|
.PHONY: maintainer-clean maintainer-clean-autoconf distclean distclean-autoconf
|
||
|
|
||
|
# Also clean binaries which are optionally built. Also remove .d files; old ones
|
||
|
# may confuse 'make'.
|
||
|
clean: clean-autoconf clean-lzo clean-include-server
|
||
|
rm -f src/*.[od] popt/*.[od]
|
||
|
rm -f test/*.pyc
|
||
|
rm -f $(check_PROGRAMS) $(bin_PROGRAMS) $(sbin_PROGRAMS)
|
||
|
rm -f `echo $(man1_MEN) | sed -e 's/ /.gz /g' -e 's/$$/.gz/'`
|
||
|
rm -f $(man_HTML)
|
||
|
rm -f distccmon-gnome
|
||
|
rm -rf _testtmp # produced by test/testdistcc.py and daemon-installcheck
|
||
|
rm -rf +distcheck
|
||
|
rm -rf "$(include_server_builddir)"
|
||
|
|
||
|
clean-autoconf:
|
||
|
rm -f config.cache config.log
|
||
|
|
||
|
clean-lzo:
|
||
|
rm -f lzo/*.[od] lzo/testmini
|
||
|
|
||
|
|
||
|
clean-include-server:
|
||
|
if test -n "$(PYTHON)"; then \
|
||
|
DISTCC_VERSION="$(VERSION)" \
|
||
|
SRCDIR="$(srcdir)" \
|
||
|
CFLAGS="$(CFLAGS) $(PYTHON_CFLAGS)" \
|
||
|
CPPFLAGS="$(CPPFLAGS)" \
|
||
|
$(PYTHON) "$(srcdir)/include_server/setup.py" \
|
||
|
clean \
|
||
|
--build-base="$(include_server_builddir)" \
|
||
|
--build-temp="$(include_server_builddir)"; \
|
||
|
fi
|
||
|
|
||
|
maintainer-clean: distclean \
|
||
|
maintainer-clean-autoconf clean
|
||
|
|
||
|
# configure and co are distributed, but not in CVS
|
||
|
maintainer-clean-autoconf:
|
||
|
rm -f configure src/config.h.in
|
||
|
|
||
|
distclean-autoconf:
|
||
|
rm -f Makefile src/config.h src/config.h.stamp pump
|
||
|
rm -f popt/.stamp-conf lzo/.stamp-conf
|
||
|
rm -f config.status config.cache config.log aclocal.m4
|
||
|
rm -rf autom4te.cache
|
||
|
|
||
|
distclean: distclean-autoconf clean
|
||
|
|
||
|
|
||
|
######################################################################
|
||
|
## MAINTAINER targets
|
||
|
|
||
|
.PHONY: man-html upload-man upload-dist rpm deb install-deb
|
||
|
|
||
|
man-html: $(man_HTML)
|
||
|
mkdir -p doc/web/man
|
||
|
cp -f $(man_HTML) doc/web/man
|
||
|
|
||
|
upload-man: man-html
|
||
|
svn commit doc/web/man
|
||
|
|
||
|
# When uploading the package, we try to update the website as well.
|
||
|
# However, that's just best-effort, and if we can't (because, say, we
|
||
|
# don't have troff2html installed), we just upload the tarballs.
|
||
|
upload-dist: alldist
|
||
|
-$(MAKE) upload-man
|
||
|
"$(srcdir)/packaging/googlecode_upload.py" \
|
||
|
"$(tarball_gz)" \
|
||
|
"$(tarball_bz2)" \
|
||
|
packaging/$(rpm_glob_pattern) \
|
||
|
packaging/$(deb_glob_pattern)
|
||
|
|
||
|
rpm: dist packaging/rpm.sh packaging/RedHat/rpm.spec
|
||
|
cd packaging && ./rpm.sh $(PACKAGE) $(VERSION)
|
||
|
|
||
|
# This uses the output of 'make rpm' to convert rpm files to deb files
|
||
|
deb: rpm packaging/deb.sh
|
||
|
cd packaging && ./deb.sh $(PACKAGE) $(VERSION) *.rpm
|
||
|
|
||
|
# We copy .deb files to /tmp to avoid problems with NFS root_squash.
|
||
|
install-deb: deb
|
||
|
tmpdir=`mktemp -d /tmp/distcc-install-deb-XXXXXX` && \
|
||
|
cp packaging/*.deb $$tmpdir && \
|
||
|
cd "$$tmpdir" && \
|
||
|
sudo dpkg -i $(deb_glob_pattern) && \
|
||
|
rm -rf $$tmpdir
|
||
|
|
||
|
# deb creates rpm files first, which in turn creates .gz files
|
||
|
alldist: deb
|
||
|
@echo dist files created:
|
||
|
@ls -1 "$(tarball_gz)" "$(tarball_bz2)"
|
||
|
@ls -1 packaging/$(rpm_glob_pattern)
|
||
|
@ls -1 packaging/$(deb_glob_pattern)
|
||
|
|
||
|
### INSTALL (and UNINSTALL) targets
|
||
|
|
||
|
.PHONY: showpaths install install-programs install-include-server
|
||
|
.PHONY: install-man install-doc install-example install-gnome-data
|
||
|
.PHONY: install-conf
|
||
|
|
||
|
# TODO: Allow root directory to be overridden for use in building
|
||
|
# packages.
|
||
|
|
||
|
showpaths:
|
||
|
@echo "'make install' will install distcc as follows:"
|
||
|
@echo " man pages $(DESTDIR)$(man1dir)"
|
||
|
@echo " documents $(DESTDIR)$(docdir)"
|
||
|
@echo " programs $(DESTDIR)$(bindir)"
|
||
|
@echo " sbin programs $(DESTDIR)$(sbindir)"
|
||
|
@echo " system configuration $(DESTDIR)$(sysconfdir)"
|
||
|
@echo " shared data files $(DESTDIR)$(pkgdatadir)"
|
||
|
|
||
|
|
||
|
# install-sh can't handle multiple arguments, but we don't need any
|
||
|
# tricky features so mkinstalldirs and cp will do
|
||
|
|
||
|
install: showpaths install-doc install-man install-programs \
|
||
|
install-include-server install-example @INSTALL_GNOME@ install-conf
|
||
|
|
||
|
install-programs: $(bin_PROGRAMS) $(sbin_PROGRAMS)
|
||
|
$(mkinstalldirs) "$(DESTDIR)$(bindir)"
|
||
|
$(mkinstalldirs) "$(DESTDIR)$(sbindir)"
|
||
|
for p in $(bin_PROGRAMS); do \
|
||
|
$(INSTALL_PROGRAM) "$$p" "$(DESTDIR)$(bindir)" || exit 1; \
|
||
|
done
|
||
|
for p in $(sbin_PROGRAMS); do \
|
||
|
$(INSTALL_PROGRAM) "$$p" "$(DESTDIR)$(sbindir)" || exit 1; \
|
||
|
done
|
||
|
|
||
|
# See comments for the include-server target. Also, we work around an issue in
|
||
|
# the change_root function of distutils/utils.py that turns the absolute prefix
|
||
|
# into a relative reference if the root is the empty string: we absolutize the
|
||
|
# destination directory in order to substitute '/' for the empty prefix (the
|
||
|
# default) when defining the '--root' parameter.
|
||
|
# The final complex issue involves installing pump. pump wants to
|
||
|
# know the installed-location of include_server.py. The only way to
|
||
|
# tell is to have setup.py install it, and then look what it says (via
|
||
|
# the --record output). So when installing pump, we look at the
|
||
|
# --record output and modify the installed pump to have that location.
|
||
|
# Note: --record output is inconsistent (buggy?) and sometimes leaves out
|
||
|
# the leading slash in $prefix, even though we require prefix start with
|
||
|
# a slash. We use sed to add it back in at cp time.
|
||
|
# Also, on Cygwin the --record output is in DOS text file format (CR LF
|
||
|
# line endings), so we need to convert it from DOS text file format to
|
||
|
# Unix text file format (LF line endings); we use sed for that too.
|
||
|
install-include-server: include-server pump
|
||
|
if test -z "$(PYTHON)"; then \
|
||
|
echo "Not building $@: No suitable python found"; \
|
||
|
else \
|
||
|
mkdir -p "$(include_server_builddir)" && \
|
||
|
DESTDIR=`cd "$(DESTDIR)/" && pwd` && \
|
||
|
DISTCC_VERSION="$(VERSION)" \
|
||
|
SRCDIR="$(srcdir)" \
|
||
|
CFLAGS="$(CFLAGS) $(PYTHON_CFLAGS)" \
|
||
|
CPPFLAGS="$(CPPFLAGS)" \
|
||
|
$(PYTHON) "$(srcdir)/include_server/setup.py" \
|
||
|
build \
|
||
|
--build-base="$(include_server_builddir)" \
|
||
|
--build-temp="$(include_server_builddir)" \
|
||
|
install \
|
||
|
--prefix="$(prefix)" \
|
||
|
--record="$(include_server_builddir)/install.log.pre" \
|
||
|
--root="$$DESTDIR" \
|
||
|
|| exit 1; \
|
||
|
sed -e '/^[^\/]/ s,^,/,' \
|
||
|
-e 's/\r$$//' \
|
||
|
"$(include_server_builddir)/install.log.pre" \
|
||
|
> "$(include_server_builddir)/install.log"; \
|
||
|
if test -n "$(PYTHON_INSTALL_RECORD)"; then \
|
||
|
cp -f "$(include_server_builddir)/install.log" "$(PYTHON_INSTALL_RECORD)"; \
|
||
|
fi; \
|
||
|
$(mkinstalldirs) "$(DESTDIR)$(bindir)" && \
|
||
|
INCLUDE_SERVER=`grep '/include_server.py$$' "$(include_server_builddir)/install.log"` && \
|
||
|
sed "s,^include_server='',include_server='$$INCLUDE_SERVER'," \
|
||
|
pump > "$(include_server_builddir)/pump" && \
|
||
|
$(INSTALL_PROGRAM) "$(include_server_builddir)/pump" "$(DESTDIR)$(bindir)"; \
|
||
|
fi
|
||
|
|
||
|
install-man: $(man1_MEN)
|
||
|
$(mkinstalldirs) "$(DESTDIR)$(man1dir)"
|
||
|
for p in $(man1_MEN); do \
|
||
|
if $(GZIP_BIN) --help >/dev/null; then \
|
||
|
mkdir -p "`dirname $$p`"; \
|
||
|
if [ -e "$(DESTDIR)$(man1dir)$$p" ]; then rm -fv "$(DESTDIR)$(man1dir)$$p"; fi; \
|
||
|
$(GZIP_BIN) < "$(srcdir)/$$p" > "$$p.gz"; \
|
||
|
$(INSTALL_DATA) "$$p.gz" "$(DESTDIR)$(man1dir)" || exit 1; \
|
||
|
else \
|
||
|
echo "Warning: no working gzip, installing man pages uncompressed" 1>&2; \
|
||
|
if [ -e "$(DESTDIR)$(man1dir)$$p.gz" ]; then rm -fv "$(DESTDIR)$(man1dir)$$p.gz"; fi; \
|
||
|
$(INSTALL_DATA) "$(srcdir)/$$p" "$(DESTDIR)$(man1dir)" || exit 1; \
|
||
|
fi; \
|
||
|
done
|
||
|
|
||
|
install-doc: $(pkgdoc_DOCS)
|
||
|
$(mkinstalldirs) "$(DESTDIR)$(docdir)"
|
||
|
for p in $(pkgdoc_DOCS); do \
|
||
|
$(INSTALL_DATA) "$(srcdir)/$$p" "$(DESTDIR)$(docdir)" || exit 1; \
|
||
|
done
|
||
|
|
||
|
install-example: $(example_DOCS)
|
||
|
$(mkinstalldirs) "$(DESTDIR)$(docdir)/example"
|
||
|
for p in $(example_DOCS); do \
|
||
|
$(INSTALL_DATA) "$(srcdir)/$$p" "$(DESTDIR)$(docdir)/example" || exit 1; \
|
||
|
done
|
||
|
|
||
|
install-gnome-data: $(gnome_data)
|
||
|
$(mkinstalldirs) "$(DESTDIR)$(pkgdatadir)"
|
||
|
for p in $(gnome_data); do \
|
||
|
$(INSTALL_DATA) "$$p" "$(DESTDIR)$(pkgdatadir)" || exit 1; \
|
||
|
done
|
||
|
|
||
|
install-conf: $(conf_files) $(default_files)
|
||
|
$(mkinstalldirs) "$(DESTDIR)$(sysconfdir)/distcc"
|
||
|
$(mkinstalldirs) "$(DESTDIR)$(sysconfdir)/default"
|
||
|
@for p in $(conf_files); do \
|
||
|
base=`basename $$p`; \
|
||
|
target="$(DESTDIR)$(sysconfdir)/distcc/$$base"; \
|
||
|
if test -e "$$target"; then \
|
||
|
echo "******************************************"; \
|
||
|
echo "*** Configuration file '$$target'"; \
|
||
|
echo "*** already exists; not installing '$$p'."; \
|
||
|
else \
|
||
|
echo "$(INSTALL_DATA) $(srcdir)/$$p $$target"; \
|
||
|
$(INSTALL_DATA) "$(srcdir)/$$p" "$$target" \
|
||
|
|| exit 1; \
|
||
|
fi; \
|
||
|
done
|
||
|
@for p in $(default_files); do \
|
||
|
base=`basename $$p`; \
|
||
|
target="$(DESTDIR)$(sysconfdir)/default/$$base"; \
|
||
|
if test -e "$$target"; then \
|
||
|
echo "******************************************"; \
|
||
|
echo "*** Configuration file '$$target'"; \
|
||
|
echo "*** already exists; not installing '$$p'."; \
|
||
|
else \
|
||
|
echo "$(INSTALL_DATA) $(srcdir)/$$p $$target"; \
|
||
|
$(INSTALL_DATA) "$(srcdir)/$$p" "$$target" \
|
||
|
|| exit 1; \
|
||
|
fi; \
|
||
|
done
|
||
|
|
||
|
# For best results, uninstall-example has to run before uninstall-doc,
|
||
|
# so we clean up the doc subdirectory before cleaning up doc itself.
|
||
|
|
||
|
uninstall: uninstall-man uninstall-programs @UNINSTALL_GNOME@ \
|
||
|
uninstall-include-server uninstall-example uninstall-doc uninstall-conf
|
||
|
|
||
|
uninstall-programs:
|
||
|
for p in $(bin_PROGRAMS) pump; do \
|
||
|
file="$(DESTDIR)$(bindir)/`basename $$p`"; \
|
||
|
if [ -e "$$file" ]; then rm -fv "$$file"; fi \
|
||
|
done
|
||
|
for p in $(sbin_PROGRAMS); do \
|
||
|
file="$(DESTDIR)$(sbindir)/`basename $$p`"; \
|
||
|
if [ -e "$$file" ]; then rm -fv "$$file"; fi \
|
||
|
done
|
||
|
-[ "`basename $(bindir)`" = "$(PACKAGE)" ] && rmdir "$(DESTDIR)$(bindir)"
|
||
|
-[ "`basename $(sbindir)`" = "$(PACKAGE)" ] && rmdir "$(DESTDIR)$(sbindir)"
|
||
|
|
||
|
# There's no setup.py --uninstall. :-( So I depend on
|
||
|
# PYTHON_INSTALL_RECORD being set. If it was used at --install time,
|
||
|
# I can use it again to uninstall.
|
||
|
uninstall-include-server:
|
||
|
if [ -e "$(PYTHON_INSTALL_RECORD)" ]; then \
|
||
|
cat "$(PYTHON_INSTALL_RECORD)" | xargs rm -fv; \
|
||
|
cat "$(PYTHON_INSTALL_RECORD)" | sed 's/py$/pyc/' | xargs rm -fv; \
|
||
|
cat "$(PYTHON_INSTALL_RECORD)" | sed 's/py$/pyo/' | xargs rm -fv; \
|
||
|
else \
|
||
|
echo "Cannot uninstall include-server: no PYTHON_INSTALL_RECORD"; \
|
||
|
fi
|
||
|
|
||
|
uninstall-man:
|
||
|
for p in $(man1_MEN); do \
|
||
|
file="$(DESTDIR)$(man1dir)/`basename $$p`"; \
|
||
|
if [ -e "$$file" ]; then rm -fv "$$file"; fi \
|
||
|
if [ -e "$$file.gz" ]; then rm -fv "$$file.gz"; fi \
|
||
|
done
|
||
|
-[ "`basename $(man1dir)`" = "$(PACKAGE)" ] && rmdir "$(DESTDIR)$(man1dir)"
|
||
|
|
||
|
uninstall-doc:
|
||
|
for p in $(pkgdoc_DOCS); do \
|
||
|
file="$(DESTDIR)$(docdir)/`basename $$p`"; \
|
||
|
if [ -e "$$file" ]; then rm -fv "$$file"; fi \
|
||
|
done
|
||
|
-[ "`basename $(docdir)`" = "$(PACKAGE)" ] && rmdir "$(DESTDIR)$(docdir)"
|
||
|
|
||
|
uninstall-example:
|
||
|
for p in $(example_DOCS); do \
|
||
|
file="$(DESTDIR)$(docdir)/example/`basename $$p`"; \
|
||
|
if [ -e "$$file" ]; then rm -fv "$$file"; fi \
|
||
|
done
|
||
|
-rmdir "$(DESTDIR)$(docdir)/example"
|
||
|
|
||
|
uninstall-gnome-data:
|
||
|
for p in $(gnome_data); do \
|
||
|
file="$(DESTDIR)$(pkgdir)/`basename $$p`"; \
|
||
|
if [ -e "$$file" ]; then rm -fv "$$file"; fi \
|
||
|
done
|
||
|
-[ `basename $(pkgdir)` = $(PACKAGE) ] && rmdir "$(DESTDIR)$(pkgdir)"
|
||
|
|
||
|
uninstall-conf:
|
||
|
for p in $(conf_files); do \
|
||
|
file="$(DESTDIR)$(sysconfdir)/distcc/`basename $$p`"; \
|
||
|
if [ -e "$$file" ]; then rm -fv "$$file"; fi \
|
||
|
done
|
||
|
-rmdir "$(DESTDIR)$(sysconfdir)/distcc"
|
||
|
for p in $(default_files); do \
|
||
|
file="$(DESTDIR)$(sysconfdir)/default/`basename $$p`";\
|
||
|
if [ -e "$$file" ]; then rm -fv "$$file"; fi \
|
||
|
done
|
||
|
|
||
|
tags: $(SRC) $(HEADERS)
|
||
|
ctags --defines --globals --typedefs-and-c++ --no-warn $(SRC) $(HEADERS)
|
||
|
|
||
|
TAGS: $(SRC) $(HEADERS)
|
||
|
etags --declarations $(SRC) $(HEADERS)
|