CC ?= cc AR ?= ar RANLIB ?= ranlib OBJCOPY ?= objcopy INSTALL ?= install PREFIX ?= /usr/local DPIDIR ?= $(PREFIX)/lib/dillo/dpi DESTDIR ?= BUILD ?= build CFLAGS ?= -O2 -std=c99 -Wall -Wextra -Wpedantic CPPFLAGS ?= LDFLAGS ?= PKG_CONFIG ?= pkg-config CURL_CFLAGS ?= $(shell $(PKG_CONFIG) --cflags libcurl 2>/dev/null) CURL_LIBS ?= $(shell $(PKG_CONFIG) --libs libcurl 2>/dev/null || echo -lcurl) SODIUM_CFLAGS ?= $(shell $(PKG_CONFIG) --cflags libsodium 2>/dev/null) SODIUM_LIBS ?= $(shell $(PKG_CONFIG) --libs libsodium 2>/dev/null || echo -lsodium) CPPFLAGS += -Iinc -DSLEEP_SALT -DDAT_BUILD_DIR=\"$(BUILD)\" -DDAT_NETWORK_PROTOCOL=\"$(shell tr -d '\r\n' < NETWORK_PROTOCOL)\" $(CURL_CFLAGS) $(SODIUM_CFLAGS) LIBS = $(SODIUM_LIBS) $(CURL_LIBS) -lm -ldl LIB_SOURCES = src/base32768.c src/cable.c src/cable_feed.c src/dat.c src/dat_browse.c src/dat_dns.c src/dat_fetch.c src/dat_walk.c src/dat_net.c src/dat_wire.c src/dat_session.c \ src/cesspool.c src/sleep.c src/sleep_tree.c src/sleep_bitfield.c \ src/sleep_proto.c src/sleep_crypto.c src/sleep_writer.c \ src/sleep_feed.c src/sleep_proof.c src/sleep_replication.c src/sleep_utp.c LIB_OBJECTS = $(patsubst src/%.c,$(BUILD)/%.o,$(LIB_SOURCES)) $(BUILD)/sleep_verify_lib.o DEPFILES = $(LIB_OBJECTS:.o=.d) $(BUILD)/s7.d .PHONY: all clean install install-user all: $(BUILD)/dat.dpi $(BUILD): mkdir -p $@ $(BUILD)/%.o: src/%.c | $(BUILD) $(CC) $(CPPFLAGS) $(CFLAGS) -MMD -MP -c $< -o $@ $(BUILD)/sleep_verify_lib.o: src/sleep_verify.c | $(BUILD) $(CC) $(CPPFLAGS) $(CFLAGS) -DSLEEP_VERIFY_NO_MAIN -MMD -MP -c $< -o $@ # S7 is used only as a parser for archive .scm metadata. Rename its optional # command-line entry point so the DPI owns the process main(). $(BUILD)/s7.o: src/s7.c | $(BUILD) $(CC) $(CPPFLAGS) $(CFLAGS) -w -MMD -MP -c $< -o $@ $(BUILD)/dpi_s7.o: $(BUILD)/s7.o $(OBJCOPY) --redefine-sym main=dat_dpi_s7_standalone_main $< $@ $(BUILD)/libdatdpi.a: $(LIB_OBJECTS) $(AR) rcs $@ $(LIB_OBJECTS) $(RANLIB) $@ $(BUILD)/dat.dpi: src/dat_dpi.c src/dat_dpi_icons.h $(BUILD)/libdatdpi.a $(BUILD)/dpi_s7.o $(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) src/dat_dpi.c $(BUILD)/libdatdpi.a $(BUILD)/dpi_s7.o $(LIBS) -o $@ install: $(BUILD)/dat.dpi $(INSTALL) -d "$(DESTDIR)$(DPIDIR)/dat" $(INSTALL) -m 755 $(BUILD)/dat.dpi "$(DESTDIR)$(DPIDIR)/dat/dat.dpi" $(INSTALL) -d "$(DESTDIR)$(PREFIX)/share/doc/dat-dpi" $(INSTALL) -m 644 README.md "$(DESTDIR)$(PREFIX)/share/doc/dat-dpi/README.md" install-user: $(BUILD)/dat.dpi $(INSTALL) -d "$(HOME)/.dillo/dpi/dat" $(INSTALL) -m 755 $(BUILD)/dat.dpi "$(HOME)/.dillo/dpi/dat/dat.dpi" @if ! test -f "$(HOME)/.dillo/dpidrc"; then printf '%s\n' 'dpi_dir=$(DPIDIR)' > "$(HOME)/.dillo/dpidrc"; fi @if ! grep -q '^proto\.dat=' "$(HOME)/.dillo/dpidrc"; then printf '%s\n' 'proto.dat=dat/dat.dpi' >> "$(HOME)/.dillo/dpidrc"; fi clean: rm -rf "$(BUILD)" -include $(DEPFILES)