# The default target of this Makefile is... all:: # Section starts with '###'. # # Define V=1 to have a more verbose compile. ### Defaults BASIC_CFLAGS = -std=c99 -Wall -I./argparse BASIC_LDFLAGS = -lm -lsodium # Guard against environment variables LIB_H = LIB_OBJS = DEP_LIBS = # Having this variable in your environment would break pipelines because you # case "cd" to echo its destination to stdout. unexport CDPATH ### Configurations uname_S := $(shell sh -c 'uname -s 2>/dev/null || echo not') uname_M := $(shell sh -c 'uname -m 2>/dev/null || echo not') uname_O := $(shell sh -c 'uname -o 2>/dev/null || echo not') uname_R := $(shell sh -c 'uname -r 2>/dev/null || echo not') uname_P := $(shell sh -c 'uname -p 2>/dev/null || echo not') uname_V := $(shell sh -c 'uname -v 2>/dev/null || echo not') # CFLAGS and LDFLAGS are for users to override CFLAGS ?= -g -O2 -Wall LDFLAGS ?= STRIP ?= strip # We use ALL_* variants ALL_CFLAGS = $(BASIC_CFLAGS) $(CFLAGS) ALL_LDFLAGS = $(BASIC_LDFLAGS) $(LDFLAGS) ifdef PREFIX prefix = $(PREFIX) else prefix = /usr/local endif bindir = $(prefix)/bin sbindir = $(prefix)/sbin sharedir = $(prefix)/share mandir = share/man infodir = share/info export prefix bindir sbindir sharedir CC = cc RM = rm -rf INSTALL = install ifeq ($(uname_S),Linux) ALL_LDFLAGS += -lrt endif ifeq ($(uname_S),OpenBSD) BASIC_LDFLAGS += -levent_core else BASIC_LDFLAGS += -levent endif ifneq ($(findstring $(MAKEFLAGS),s), s) ifndef V QUIET_CC = @echo ' ' CC $@; QUIET_AR = @echo ' ' AR $@; QUIET_LINK = @echo ' ' LINK $@; QUIET_GEN = @echo ' ' GEN $@; endif endif # configuration generated by ./configure script -include config.mak.autogen # manual configuration -include config.mak ### Dependencies LIB_H = dnscrypt.h udp_request.h edns.h logger.h argparse/argparse.h LIB_OBJS += dnscrypt.o LIB_OBJS += udp_request.o LIB_OBJS += tcp_request.o LIB_OBJS += edns.o LIB_OBJS += logger.o LIB_OBJS += rfc1035.o LIB_OBJS += safe_rw.o LIB_OBJS += cert.o LIB_OBJS += pidfile.o LIB_OBJS += debug.o LIB_OBJS += fpst.o LIB_OBJS += block.o DEP_LIBS += argparse/libargparse.a ### Automatically dependencies rules OBJECTS := $(LIB_OBJS) main.o ifndef COMPUTE_HEADER_DEPENDENCIES COMPUTE_HEADER_DEPENDENCIES = auto endif ifeq ($(COMPUTE_HEADER_DEPENDENCIES),auto) dep_check = $(shell $(CC) \ -c -MF /dev/null -MMD -MP -x c /dev/null -o /dev/null 2>&1; \ echo $$?) ifeq ($(dep_check),0) override COMPUTE_HEADER_DEPENDENCIES = yes else override COMPUTE_HEADER_DEPENDENCIES = no endif endif ifeq ($(COMPUTE_HEADER_DEPENDENCIES),yes) USE_COMPUTED_HEADER_DEPENDENCIES = YesPlease else ifneq ($(COMPUTE_HEADER_DEPENDENCIES),no) $(error please set COMPUTE_HEADER_DEPENDENCIES to yes, no, or auto \ (not "$(COMPUTE_HEADER_DEPENDENCIES)")) endif endif dep_files := $(foreach f,$(OBJECTS),$(dir $f).depend/$(notdir $f).d) dep_dirs := $(addsuffix .depend,$(sort $(dir $(OBJECTS)))) ifeq ($(COMPUTE_HEADER_DEPENDENCIES),yes) $(dep_dirs): @mkdir -p $@ missing_dep_dirs := $(filter-out $(wildcard $(dep_dirs)),$(dep_dirs)) dep_file = $(dir $@).depend/$(notdir $@).d dep_args = -MF $(dep_file) -MMD -MP endif ifdef USE_COMPUTED_HEADER_DEPENDENCIES # Take advantage of gcc's on-the-fly dependency generation # See . dep_files_present := $(wildcard $(dep_files)) ifneq ($(dep_files_present),) include $(dep_files_present) endif else $(OBJECTS): $(LIB_H) endif ### Build rules configure: configure.ac $(QUIET_GEN)autoconf -o $@ $< ifdef AUTOCONFIGURED config.status: configure $(QUIET_GEN)if test -f config.status; then \ ./config.status --recheck; \ else \ ./configure; \ fi reconfigure config.mak.autogen: config.status $(QUIET_LINK)./config.status .PHONY: reconfigure # This is a convenience target. endif argparse/libargparse.a: argparse/argparse.h @$(MAKE) -C argparse libargparse.a argparse/argparse.h: git submodule update --init argparse $(LIB_OBJS): $(LIB_H) TRACK_CFLAGS = $(CC):$(subst ','\'',$(ALL_CFLAGS)) MAIN-CFLAGS: FORCE @FLAGS='$(TRACK_CFLAGS)'; \ if test x"$$FLAGS" != x"`cat MAIN-CFLAGS 2>/dev/null`"; then \ echo "$$FLAGS" > $@; \ fi TRACK_LDFLAGS = $(subst ','\'',$(ALL_LDFLAGS)) MAIN-LDFLAGS: FORCE @FLAGS='$(TRACK_LDFLAGS)'; \ if test x"$$FLAGS" != x"`cat MAIN-LDFLAGS 2>/dev/null`"; then \ echo "$$FLAGS" > $@; \ fi $(OBJECTS): %.o: %.c $(missing_dep_dirs) MAIN-CFLAGS $(QUIET_CC)$(CC) -o $*.o -c $(dep_args) $(ALL_CFLAGS) $< dnscrypt-wrapper: $(OBJECTS) $(DEP_LIBS) MAIN-LDFLAGS $(QUIET_LINK)$(CC) -o $@ $(filter %.o %.a,$^) $(ALL_LDFLAGS) main.o: version.h all:: dnscrypt-wrapper version.h: FORCE @./gen-version.sh install: all $(INSTALL) -d -m 755 '$(DESTDIR)$(sbindir)' $(INSTALL) -p dnscrypt-wrapper '$(DESTDIR)$(sbindir)' uninstall: $(RM) $(sbindir)/dnscrypt-wrapper clean: $(RM) dnscrypt-wrapper $(RM) $(LIB_OBJS) make -C argparse clean .PHONY: all install uninstall clean FORCE