#
# Empire - A multi-player, client/server Internet based war game.
-# Copyright (C) 1986-2009, Dave Pare, Jeff Bailey, Thomas Ruschak,
-# Ken Stevens, Steve McClure
+# Copyright (C) 1986-2011, Dave Pare, Jeff Bailey, Thomas Ruschak,
+# Ken Stevens, Steve McClure, Markus Armbruster
#
-# This program is free software; you can redistribute it and/or modify
+# Empire is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
+# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
# ---
#
# Make.mk: The real Makefile, included by GNUmakefile
#
# Known contributors to this file:
-# Markus Armbruster, 2005-2009
+# Markus Armbruster, 2005-2011
#
# 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 := sys/uio.h w32io.c w32types.h
+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.
# Dependencies:
deps := $(obj:.o=.d)
# Library archives:
-libs := $(addprefix lib/, libcommon.a libas.a libgen.a libglobal.a)
+libs := $(addprefix lib/, libcommon.a libgen.a libglobal.a)
# Programs:
util := $(addprefix src/util/, $(addsuffix $(EXEEXT), empdump empsched fairland files pconfig))
client := src/client/empire$(EXEEXT)
# Formatted info:
info.nr := $(addprefix info.nr/, $(info))
info.html := $(addprefix info.html/, $(addsuffix .html, $(info)))
+info.all := $(info.nr) $(info.html) info.ps
# Conditionally generated files:
empth_obj := src/lib/empthread/io.o
# Each generated file should be in one of the following sets.
# Removed by clean:
clean := $(obj) $(deps) $(libs) $(util) $(client) $(server) $(tsubj) \
-$(ttop) $(info.nr) $(info.html) $(empth_obj) $(empth_lib)
+$(ttop) $(info.all) $(empth_obj) $(empth_lib)
# Removed by distclean:
distclean := $(ac) $(mk)
# Distributed by dist-source from $(srcdir):
.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/libas.a: $(filter src/lib/as/%, $(obj))
lib/libcommon.a: $(filter src/lib/common/%, $(obj))
lib/libgen.a: $(filter src/lib/gen/%, $(obj))
lib/libglobal.a: $(filter src/lib/global/%, $(obj))
lib/libw32.a: $(filter src/lib/w32/%, $(obj))
$(libs) $(empth_lib):
- $(AR) rc $@ $?
+ $(call quiet-command,$(AR) rc $@ $?,AR $@)
$(RANLIB) $@
# Info formatting
$(tarball) $(TARNAME)-info-text-$(VERSION) -C info.nr $(info)
$(tarball) $(TARNAME)-info-html-$(VERSION) -C info.html $(addsuffix .html, $(info))
+# Dependencies
+
ifneq ($(deps),)
-include $(deps)
endif
./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