| # Nathan's generic Makefile -*- mode:Makefile -*- |
| # Copyright (C) 2019-2020 Nathan Sidwell, nathan@acm.org |
| # License: Apache v2.0 |
| |
| srcdir := @srcdir@ |
| prefix := @prefix@ |
| exec_prefix := @exec_prefix@ |
| bindir := @bindir@ |
| libdir := @libdir@ |
| includedir := @includedir@ |
| # Linker options |
| LDFLAGS := @LDFLAGS@ |
| LIBS := @LIBS@ |
| |
| # We have to place the -I paths last, so that building will see -I paths to us |
| CXX := $(filter-out -I%,@CXX@) |
| AR := @AR@ |
| RANLIB := @RANLIB@ |
| INSTALL := $(srcdir)/build-aux/install-sh |
| |
| # C++ compiler options |
| CXXFLAGS := @CXXFLAGS@ |
| CXXINC := $(filter -I%,@CXX@) |
| CXXOPTS := $(CXXFLAGS) @PICFLAG@ |
| |
| ifneq (@EXCEPTIONS@,yes) |
| CXXOPTS += -fno-exceptions -fno-rtti |
| endif |
| |
| # Config |
| CXXOPTS += $(filter-out -DHAVE_CONFIG_H,@DEFS@) -include config.h |
| |
| # Linker options |
| LDFLAGS := @LDFLAGS@ |
| LIBS := @LIBS@ |
| |
| # Per-source & per-directory compile flags (warning: recursive) |
| SRC_CXXFLAGS = $(CXXFLAGS$(patsubst $(srcdir)%,%,$1)) \ |
| $(if $(filter-out $(srcdir)/,$1),\ |
| $(call $0,$(dir $(patsubst %/,%,$1)))) |
| |
| ifneq ($(MAINTAINER),) |
| override MAINTAINER += $1 |
| endif |
| ifeq (@MAINTAINER@,yes) |
| MAINTAINER = $2 |
| else |
| MAINTAINER = \# --enable-maintainer-mode to rebuild $1, or make MAINTAINER=touch |
| endif |
| |
| vpath %.in $(srcdir) |
| vpath %.cc $(srcdir) |
| |
| .SUFFIXES: .o .cc |
| |
| %.o: %.cc |
| @mkdir -p $(dir $@) |
| $(CXX) $(strip $(CXXOPTS) $(call SRC_CXXFLAGS,$<) $(CXXINC)) \ |
| -MMD -MP -MF ${@:.o=.d} -c -o $@ $< |
| |
| all:: Makefile |
| |
| clean:: Makefile |
| |
| # FIXME: Delete |
| revision.stamp: $(srcdir)/. |
| @revision=$$(git -C $(srcdir) rev-parse HEAD 2>/dev/null) ;\ |
| if test -n "$$revision" ;\ |
| then revision=git-$$revision ;\ |
| if git -C $(srcdir) status --porcelain 2>/dev/null | grep -vq '^ ' ;\ |
| then revision+=M ;\ |
| fi ;\ |
| else revision=unknown ;\ |
| fi ;\ |
| echo $$revision > $@ |
| |
| revision: revision.stamp |
| @cmp -s $< $@ || cp -f $< $@ |
| |
| clean:: |
| rm -f revision.stamp revision |
| |
| distclean:: clean |
| rm -f config.log config.status |
| |
| $(srcdir)/configure: $(srcdir)/configure.ac $(srcdir)/config.m4 |
| $(call MAINTAINER,$@,cd $(@D) && autoconf -W all,error) |
| |
| $(srcdir)/config.h.in: $(srcdir)/configure.ac $(srcdir)/config.m4 |
| $(call MAINTAINER,$@,cd $(@D) && autoheader -f -W all,error) |
| |
| config.h: config.status config.h.in |
| ./$< --header=$@ |
| touch $@ |
| |
| ifeq ($(filter %clean,$(MAKECMDGOALS)),) |
| Makefile: config.status Makefile.in |
| ./$< --file=$@ |
| touch $@ |
| endif |
| |
| config.status: $(srcdir)/configure $(srcdir)/config.h.in |
| if test -x $@; then ./$@ -recheck; else $< @configure_args@; fi |
| |
| distclean:: clean |
| rm -f config.h |
| |
| maintainer-clean:: distclean |
| rm -f $(srcdir)/config.h.in |
| |
| clean:: |
| rm -f $(shell find $(srcdir) -name '*~') |
| |
| .PHONY: all check clean distclean maintainer-clean |
| |
| CXXFLAGS/ := -I$(srcdir) |
| LIBCODY.O := buffer.o client.o fatal.o netclient.o netserver.o \ |
| resolver.o packet.o server.o |
| |
| all:: libcody.a |
| |
| libcody.a: $(LIBCODY.O) |
| $(AR) -cr $@ $^ |
| $(RANLIB) $@ |
| |
| clean:: |
| rm -f $(LIBCODY.O) $(LIBCODY.O:.o=.d) |
| rm -f libcody.a |
| |
| CXXFLAGS/fatal.cc = -DSRCDIR='"$(srcdir)"' |
| |
| fatal.o: Makefile revision |
| |
| install:: |
| $(INSTALL) -d $(libdir) $(includedir) |
| $(INSTALL) libcody.a $(libdir) |
| $(INSTALL) $(srcdir)/cody.hh $(includedir) |
| |
| ifeq ($(filter clean%,$(MAKECMDGOALS)),) |
| -include $(LIBCODY.O:.o=.d) |
| endif |