#
# Empire - A multi-player, client/server Internet based war game.
-# Copyright (C) 1986-2009, Dave Pare, Jeff Bailey, Thomas Ruschak,
+# Copyright (C) 1986-2010, Dave Pare, Jeff Bailey, Thomas Ruschak,
# Ken Stevens, Steve McClure
#
# This program is free software; you can redistribute it and/or modify
# This makefile was inspired by `Recursive Make Considered Harmful',
# Peter Miller, 1997.
-# http://www.pcug.org.au/~millerp/rmch/recu-make-cons-harm.html
+# http://miller.emu.id.au/pmiller/books/rmch/
# Recursively expanded variables are occasionally useful, but can be
# slow and tricky. Do not use them gratuitously. If you don't
builtindir := $(datadir)/empire/builtin
einfodir := $(datadir)/empire/info.nr
ehtmldir := $(datadir)/empire/info.html
+client/w32 := arpa/inet.h netdb.h netinet/in.h sys/time.h sys/socket.h \
+sys/uio.h unistd.h w32io.c w32sockets.c w32types.h
+
+# Abbreviate make output
+# Run make with a V=1 parameter for full output.
+ifneq ($(origin V),command line)
+V:=
+endif
+# $(call quiet-command COMMAND,ABBREV) runs COMMAND, but prints only ABBREV.
+# Recursively expanded so that variables in COMMAND and ABBREV work.
+ifneq ($V$(findstring s,$(MAKEFLAGS)),)
+quiet-command = $1
+else
+quiet-command = @echo $2 && $1
+endif
# How to substitute Autoconf output variables
# Recursively expanded so that $@ and $< work.
ifeq ($(empthread),Windows) # really: W32, regardless of thread package
libs += lib/libw32.a
+$(client): lib/libw32.a
endif
# Cleanliness
.PHONY: clean
clean:
- rm -f $(clean)
+ $(call quiet-command,rm -f $(clean),CLEAN)
.PHONY: distclean
distclean: clean
- rm -rf $(distclean) $(cli_distgen)
+ $(call quiet-command,rm -rf $(distclean) $(cli_distgen),DISTCLEAN)
.PHONY: install
install: all installdirs
# addition to %.o.
ifeq ($(how_to_dep),fast)
%.o: %.c
- $(COMPILE.c) -MT $@ -MMD -MP -MF $(@:.o=.d) $(OUTPUT_OPTION) $< \
- || { rm -f $(@:.o=.d) $@; false; }
+ $(call quiet-command,$(COMPILE.c) -MT $@ -MMD -MP -MF $(@:.o=.d) \
+ $(OUTPUT_OPTION) $< || { rm -f $(@:.o=.d) $@; false; },CC $@)
# Why the rm? If gcc's preprocessor chokes, it leaves an empty
# dependency file behind, and doesn't touch the object file. If an
# old object file exists, and is newer than the .c file, make will
endif
ifeq ($(how_to_dep),depcomp)
%.o: %.c
- source='$<' object='$@' depfile='$(@:.o=.d)' $(CCDEPMODE) $(depcomp) \
- $(COMPILE.c) $(OUTPUT_OPTION) $<
+ $(call quiet-command,source='$<' object='$@' depfile='$(@:.o=.d)' \
+ $(CCDEPMODE) $(depcomp) $(COMPILE.c) $(OUTPUT_OPTION) $<,CC $@)
endif
# Cancel the rule to compile %.c straight to %, it interferes with
# automatic dependency generation
%: %.c
-# Work around MinGW Make's broken built-in link rule:
%$(EXEEXT): %.o
- $(LINK.o) $^ $(LOADLIBES) $(LDLIBS) -o $@
+ $(call quiet-command,$(LINK.o) $^ $(LOADLIBES) $(LDLIBS) -o $@,LINK $@)
info.nr/%: info/%.t
- $(NROFF) $(filter %.MAC, $^) $< | $(AWK) -f $(filter %/Blank.awk, $^) >$@
-# Pipes in make are a pain. Catch obvious errors:
- @test -s $@
+ $(call quiet-command,$(NROFF) $(filter %.MAC, $^) $< | $(AWK) -f $(filter %/Blank.awk, $^) >$@ && test -s $@,NROFF $@)
+# Pipes in make are a pain. The "test -s" catches obvious errors.
info.html/%.html: info/%.t
perl $(filter %.pl, $^) $< >$@
# Compilation
$(server): $(filter src/server/% src/lib/commands/% src/lib/player/% src/lib/subs/% src/lib/update/%, $(obj)) $(empth_obj) $(empth_lib) $(libs)
- $(LINK.o) $^ $(LOADLIBES) $(LDLIBS) -o $@
+ $(call quiet-command,$(LINK.o) $^ $(LOADLIBES) $(LDLIBS) -o $@,LINK $@)
$(client): $(filter src/client/%, $(obj)) src/lib/global/version.o
- $(LINK.o) $^ $(LOADLIBES) $(LDLIBS) -o $@
+ $(call quiet-command,$(LINK.o) $^ $(LOADLIBES) $(LDLIBS) -o $@,LINK $@)
$(util): $(libs)
lib/libw32.a: $(filter src/lib/w32/%, $(obj))
$(libs) $(empth_lib):
- $(AR) rc $@ $?
+ $(call quiet-command,$(AR) rc $@ $?,AR $@)
$(RANLIB) $@
# Info formatting
$(notdir $(filter src/client/%, $(src)) $(cli_distgen)) \
-C $(srcdir)/include proto.h version.h \
-C $(srcdir)/src/lib/global version.c \
+ -C $(srcdir)/src/lib $(addprefix w32/, $(client/w32)) \
-C $(srcdir)/man empire.6 \
-C $(srcdir) COPYING INSTALL install-sh
./config.status --recheck
src/lib/global/path.c src/client/ipglob.c: %: %.in GNUmakefile Make.mk
- $(subst.in) <$< >$@
+ $(call quiet-command,$(subst.in) <$< >$@,GEN $@)
# Make files for standalone client distribution