]>
Commit | Line | Data |
---|---|---|
36230329 NS |
1 | # Nathan's generic Makefile -*- mode:Makefile -*- |
2 | # Copyright (C) 2019-2020 Nathan Sidwell, nathan@acm.org | |
3 | # License: Apache v2.0 | |
4 | ||
36230329 NS |
5 | srcdir := @srcdir@ |
6 | prefix := @prefix@ | |
7 | exec_prefix := @exec_prefix@ | |
8 | bindir := @bindir@ | |
9 | libdir := @libdir@ | |
10 | includedir := @includedir@ | |
e2aa8a5f NS |
11 | # Linker options |
12 | LDFLAGS := @LDFLAGS@ | |
13 | LIBS := @LIBS@ | |
36230329 NS |
14 | |
15 | # We have to place the -I paths last, so that building will see -I paths to us | |
16 | CXX := $(filter-out -I%,@CXX@) | |
17 | AR := @AR@ | |
626b63d6 | 18 | RANLIB := @RANLIB@ |
36230329 NS |
19 | INSTALL := $(srcdir)/build-aux/install-sh |
20 | ||
21 | # C++ compiler options | |
22 | CXXFLAGS := @CXXFLAGS@ | |
23 | CXXINC := $(filter -I%,@CXX@) | |
d1ad55c4 | 24 | CXXOPTS := $(CXXFLAGS) @PICFLAG@ |
e2aa8a5f | 25 | |
36230329 NS |
26 | ifneq (@EXCEPTIONS@,yes) |
27 | CXXOPTS += -fno-exceptions -fno-rtti | |
28 | endif | |
36230329 NS |
29 | |
30 | # Config | |
31 | CXXOPTS += $(filter-out -DHAVE_CONFIG_H,@DEFS@) -include config.h | |
32 | ||
33 | # Linker options | |
251c72a6 | 34 | LDFLAGS := @LDFLAGS@ @LD_PICFLAG@ |
36230329 NS |
35 | LIBS := @LIBS@ |
36 | ||
37 | # Per-source & per-directory compile flags (warning: recursive) | |
38 | SRC_CXXFLAGS = $(CXXFLAGS$(patsubst $(srcdir)%,%,$1)) \ | |
39 | $(if $(filter-out $(srcdir)/,$1),\ | |
40 | $(call $0,$(dir $(patsubst %/,%,$1)))) | |
41 | ||
42 | ifneq ($(MAINTAINER),) | |
43 | override MAINTAINER += $1 | |
44 | endif | |
45 | ifeq (@MAINTAINER@,yes) | |
46 | MAINTAINER = $2 | |
47 | else | |
48 | MAINTAINER = \# --enable-maintainer-mode to rebuild $1, or make MAINTAINER=touch | |
49 | endif | |
50 | ||
51 | vpath %.in $(srcdir) | |
52 | vpath %.cc $(srcdir) | |
53 | ||
54 | .SUFFIXES: .o .cc | |
55 | ||
56 | %.o: %.cc | |
57 | @mkdir -p $(dir $@) | |
58 | $(CXX) $(strip $(CXXOPTS) $(call SRC_CXXFLAGS,$<) $(CXXINC)) \ | |
59 | -MMD -MP -MF ${@:.o=.d} -c -o $@ $< | |
60 | ||
e2aa8a5f | 61 | all:: Makefile |
36230329 | 62 | |
7a71ea4d ML |
63 | mostlyclean:: |
64 | ||
e2aa8a5f | 65 | clean:: Makefile |
36230329 | 66 | |
e2aa8a5f NS |
67 | # FIXME: Delete |
68 | revision.stamp: $(srcdir)/. | |
39ab2e4c | 69 | @revision=`git -C $(srcdir) rev-parse HEAD 2>/dev/null` ;\ |
36230329 NS |
70 | if test -n "$$revision" ;\ |
71 | then revision=git-$$revision ;\ | |
72 | if git -C $(srcdir) status --porcelain 2>/dev/null | grep -vq '^ ' ;\ | |
39ab2e4c | 73 | then revision=$${revision}M ;\ |
36230329 NS |
74 | fi ;\ |
75 | else revision=unknown ;\ | |
76 | fi ;\ | |
77 | echo $$revision > $@ | |
78 | ||
79 | revision: revision.stamp | |
80 | @cmp -s $< $@ || cp -f $< $@ | |
81 | ||
7a71ea4d ML |
82 | mostlyclean:: |
83 | ||
84 | clean:: mostlyclean | |
36230329 NS |
85 | rm -f revision.stamp revision |
86 | ||
87 | distclean:: clean | |
88 | rm -f config.log config.status | |
36230329 | 89 | |
e2aa8a5f | 90 | $(srcdir)/configure: $(srcdir)/configure.ac $(srcdir)/config.m4 |
36230329 NS |
91 | $(call MAINTAINER,$@,cd $(@D) && autoconf -W all,error) |
92 | ||
e2aa8a5f | 93 | $(srcdir)/config.h.in: $(srcdir)/configure.ac $(srcdir)/config.m4 |
36230329 NS |
94 | $(call MAINTAINER,$@,cd $(@D) && autoheader -f -W all,error) |
95 | ||
96 | config.h: config.status config.h.in | |
97 | ./$< --header=$@ | |
98 | touch $@ | |
99 | ||
100 | ifeq ($(filter %clean,$(MAKECMDGOALS)),) | |
e2aa8a5f | 101 | Makefile: config.status Makefile.in |
36230329 NS |
102 | ./$< --file=$@ |
103 | touch $@ | |
104 | endif | |
105 | ||
106 | config.status: $(srcdir)/configure $(srcdir)/config.h.in | |
107 | if test -x $@; then ./$@ -recheck; else $< @configure_args@; fi | |
108 | ||
7a71ea4d ML |
109 | mostlyclean:: |
110 | ||
111 | clean:: mostlyclean | |
112 | rm -f $(shell find $(srcdir) -name '*~') | |
113 | ||
36230329 NS |
114 | distclean:: clean |
115 | rm -f config.h | |
116 | ||
117 | maintainer-clean:: distclean | |
118 | rm -f $(srcdir)/config.h.in | |
119 | ||
7a71ea4d | 120 | .PHONY: all check clean distclean maintainer-clean mostlyclean |
36230329 | 121 | |
e2aa8a5f NS |
122 | CXXFLAGS/ := -I$(srcdir) |
123 | LIBCODY.O := buffer.o client.o fatal.o netclient.o netserver.o \ | |
124 | resolver.o packet.o server.o | |
125 | ||
126 | all:: libcody.a | |
127 | ||
128 | libcody.a: $(LIBCODY.O) | |
129 | $(AR) -cr $@ $^ | |
130 | $(RANLIB) $@ | |
131 | ||
7a71ea4d ML |
132 | mostlyclean:: |
133 | ||
134 | clean:: mostlyclean | |
e2aa8a5f NS |
135 | rm -f $(LIBCODY.O) $(LIBCODY.O:.o=.d) |
136 | rm -f libcody.a | |
137 | ||
138 | CXXFLAGS/fatal.cc = -DSRCDIR='"$(srcdir)"' | |
139 | ||
140 | fatal.o: Makefile revision | |
141 | ||
142 | install:: | |
143 | $(INSTALL) -d $(libdir) $(includedir) | |
144 | $(INSTALL) libcody.a $(libdir) | |
145 | $(INSTALL) $(srcdir)/cody.hh $(includedir) | |
36230329 | 146 | |
e2aa8a5f NS |
147 | ifeq ($(filter clean%,$(MAKECMDGOALS)),) |
148 | -include $(LIBCODY.O:.o=.d) | |
36230329 | 149 | endif |