| # 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@ @LD_PICFLAG@ | |
| 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 | |
| mostlyclean:: | |
| 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=$${revision}M ;\ | |
| fi ;\ | |
| else revision=unknown ;\ | |
| fi ;\ | |
| echo $$revision > $@ | |
| revision: revision.stamp | |
| @cmp -s $< $@ || cp -f $< $@ | |
| mostlyclean:: | |
| clean:: mostlyclean | |
| 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 | |
| mostlyclean:: | |
| clean:: mostlyclean | |
| rm -f $(shell find $(srcdir) -name '*~') | |
| distclean:: clean | |
| rm -f config.h | |
| maintainer-clean:: distclean | |
| rm -f $(srcdir)/config.h.in | |
| .PHONY: all check clean distclean maintainer-clean mostlyclean | |
| 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) $@ | |
| mostlyclean:: | |
| clean:: mostlyclean | |
| 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 |