-#\r
-# c-ares Makefile for djgpp/gcc/Watt-32\r
-# By Gisle Vanem <giva@bgnett.no> 2004.\r
-#\r
-.SUFFIXES: .exe\r
-\r
-WATT32_ROOT = $(subst \,/,$(WATT_ROOT))\r
-\r
-CC = gcc\r
-CFLAGS = -O2 -Wall -DWATT32 -Dselect=select_s -I$(WATT32_ROOT)/inc\r
-LDFLAGS = -s\r
-EX_LIBS = $(WATT32_ROOT)/lib/libwatt.a\r
-\r
-SOURCE = ares_cancel.c ares_destroy.c ares_expand_name.c ares_expand_string.c ares_fds.c \\r
- ares_free_hostent.c ares_free_string.c ares_gethostbyaddr.c ares_gethostbyname.c \\r
- ares_init.c ares_mkquery.c ares_parse_a_reply.c ares_parse_ptr_reply.c \\r
- ares_process.c ares_query.c ares_search.c ares_send.c ares_strerror.c \\r
- ares_timeout.c ares__close_sockets.c ares__get_hostent.c ares__read_line.c \\r
- ares_version.c\r
-\r
-OBJ_DIR = djgpp\r
-\r
-OBJECTS = $(addprefix $(OBJ_DIR)/, $(SOURCE:.c=.o))\r
-\r
-\r
-all: $(OBJ_DIR) libcares.a ahost.exe adig.exe\r
- @echo Welcome to c-ares.\r
-\r
-$(OBJ_DIR):\r
- - mkdir $(OBJ_DIR)\r
-\r
-libcares.a: $(OBJECTS)\r
- ar rs $@ $?\r
-\r
-ahost.exe: ahost.c libcares.a\r
- $(CC) $(LDFLAGS) $(CFLAGS) -o $@ $^ $(EX_LIBS)\r
-\r
-adig.exe: adig.c libcares.a\r
- $(CC) $(LDFLAGS) $(CFLAGS) -o $@ $^ $(EX_LIBS)\r
-\r
-clean:\r
- rm -f $(OBJECTS) libcares.a\r
-\r
-vclean realclean: clean\r
- rm -f ahost.exe adig.exe depend.dj\r
- - rmdir $(OBJ_DIR)\r
-\r
-$(OBJ_DIR)/%.o: %.c\r
- $(CC) $(CFLAGS) -o $@ -c $<\r
- @echo\r
-\r
-depend:\r
- $(CC) -MM $(CFLAGS) $(SOURCE) | \\r
- sed -e 's/^\([a-zA-Z0-9_-]*\.o:\)/$$(OBJ_DIR)\/\1/' > depend.dj\r
-\r
--include depend.dj\r
+#
+# c-ares Makefile for djgpp/gcc/Watt-32.
+# By Gisle Vanem <gvanem@yahoo.no> 2004 - 2020.
+#
+include src/lib/Makefile.inc
+
+CSOURCES := $(addprefix src/lib/, $(CSOURCES))
+CSOURCES := $(filter-out src/lib/windows_port.c, $(CSOURCES))
+
+VPATH = src/lib src/tools
+
+#
+# Root directory for Waterloo tcp/ip.
+# WATT_ROOT should be set during Watt-32 install.
+#
+WATT32_ROOT = $(realpath $(WATT_ROOT))
+WATT32_LIB = $(WATT32_ROOT)/lib/libwatt.a
+
+OBJ_DIR = djgpp
+
+CFLAGS = -g -O2 -I./include -I./src/lib \
+ -I$(WATT32_ROOT)/inc -Wall \
+ -DWATT32 -DHAVE_CONFIG_H \
+ -Dselect=select_s
+
+LDFLAGS = -s
+
+ifeq ($(OS),Windows_NT)
+ #
+ # Windows hosted djgpp cross compiler. Get it from:
+ # https://github.com/andrewwutw/build-djgpp/releases
+ #
+ DJ_PREFIX ?= c:/some-path/djgpp/bin/i586-pc-msdosdjgpp-
+ CC = $(DJ_PREFIX)gcc
+
+else
+ #
+ # The normal djgpp 'gcc' for MSDOS.
+ #
+ CC = gcc
+endif
+
+OBJECTS = $(addprefix $(OBJ_DIR)/, \
+ $(notdir $(CSOURCES:.c=.o)))
+
+GENERATED = src/lib/ares_config.h \
+ include/ares_build.h
+
+TARGETS = libcares.a acountry.exe adig.exe ahost.exe
+
+.SECONDARY: $(OBJ_DIR)/ares_getopt.o
+
+all: $(OBJ_DIR) $(GENERATED) $(TARGETS)
+ @echo Welcome to c-ares.
+
+libcares.a: $(OBJECTS)
+ ar rs $@ $(OBJECTS)
+
+src/lib/ares_config.h: src/lib/config-dos.h
+ cp --update $< $@
+
+include/ares_build.h: include/ares_build.h.dist
+ cp --update $< $@
+
+%.exe: src/tools/%.c $(OBJ_DIR)/ares_getopt.o libcares.a
+ $(call compile_and_link, $@, $^ $(WATT32_LIB))
+
+# Clean generated files and objects.
+#
+clean:
+ - rm -f depend.dj $(GENERATED) $(OBJ_DIR)/*.o
+ - rmdir $(OBJ_DIR)
+
+# Clean everything
+#
+realclean vclean: clean
+ - rm -f $(TARGETS) $(TARGETS:.exe=.map)
+
+$(OBJ_DIR):
+ - mkdir $@
+
+$(OBJ_DIR)/%.o: %.c
+ $(CC) $(CFLAGS) -o $@ -c $<
+ @echo
+
+define compile_and_link
+ $(CC) -o $(1) $(CFLAGS) $(LDFLAGS) -Wl,--print-map,--sort-common $(2) > $(1:.exe=.map)
+ @echo
+endef
+
+DEP_REPLACE = sed -e 's@\(.*\)\.o: @\n$$(OBJ_DIR)\/\1.o: @' \
+ -e 's@$(WATT32_ROOT)@$$(WATT32_ROOT)@g'
+
+#
+# One may have to do 'make -f Makefile.dj clean' first in case
+# a foreign 'curl_config.h' is making trouble.
+#
+depend: $(GENERATED) Makefile.dj
+ $(CC) -MM $(CFLAGS) $(CSOURCES) | $(DEP_REPLACE) > depend.dj
+
+-include depend.dj
+