blob: b8b45a2e3103562b5eba21c8ada27226f7c850e0 [file] [log] [blame]
# 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