#
# Common defines for curl (djgpp/Watt-32)
#
# Assumes you've unpacked cURL with short-file names
# I.e use "set LFN=n" before untaring on Win9x/XP.
# Requires sed, yacc, rm and the usual stuff.
#

.SUFFIXES: .exe .y

MAKEFILE = Makefile.dj
OBJ_DIR = djgpp

#
# OpenSSL is available from www.openssl.org and builds okay
# with djgpp/Watt-32. Set to 0 if you don't need https URLs
# (reduces curl.exe with approx 700 kB)
#
USE_SSL = 0

#
# Use zlib for contents encoding
#
USE_ZLIB = 0

#
# Use libidn for international domain names
#
USE_IDNA = 0

#
# Use Watt-32 IPv6 stack (only IPv6 name resolution working at the moment)
#
USE_IPV6 = 0

#
# Use C-Ares resolver library
# This conflicts with USE_IPV6=1
#
USE_ARES = 0

#
# Enable debug code in libcurl/curl
#
USE_DEBUG = 0

default: all

#
# Root directory for Waterloo tcp/ip etc. Change to suite.
# WATT_ROOT should be set during Watt-32 install.
#
WATT32_ROOT  = $(subst \,/,$(WATT_ROOT))
OPENSSL_ROOT = /net/openssl.098
ZLIB_ROOT    = /djgpp/contrib/zlib
LIBIDN_ROOT  = ../../IDN/libidn
ARES_ROOT    = ../ares

CC   = gcc
YACC = bison -y

CFLAGS = -g -O2 -I. -I../include -I../lib -I$(WATT32_ROOT)/inc -Wall -DHAVE_CONFIG_H

ifeq ($(USE_SSL),1)
  CFLAGS += -DUSE_SSLEAY -I$(OPENSSL_ROOT)
endif

ifeq ($(USE_ZLIB),1)
  CFLAGS += -DUSE_ZLIB -I$(ZLIB_ROOT)
endif

ifeq ($(USE_IPV6),1)
  CFLAGS += -DENABLE_IPV6
endif

ifeq ($(USE_ARES),1)
  CFLAGS += -DUSE_ARES -I$(ARES_ROOT)
endif

ifeq ($(USE_IDNA),1)
  CFLAGS   += -DHAVE_LIBIDN -DHAVE_IDN_FREE_H -DHAVE_IDN_FREE -DHAVE_TLD_H \
              -DHAVE_TLD_STRERROR -I$(LIBIDN_ROOT)/lib
endif

ifeq ($(USE_DEBUG),1)
  CFLAGS += -DDEBUG=1 -DCURLDEBUG #-DMALLOCDEBUG=1 -DDPRINTF_DEBUG2=1
endif

$(OBJ_DIR):
	mkdir $(OBJ_DIR)

$(OBJ_DIR)/%.o: %.c
	$(CC) $(CFLAGS) -o $@ -c $<
	@echo

#
# Generated dependencies; Due to some hacks in gcc 2.95+ and djgpp 2.03
# we must prevent "$(DJDIR)/bin/../include/sys/version.h" from beeing
# included in dependency output (or else this makefile cannot be used on
# another machine). We therefore use a special 'specs' file during
# pre-processing.
#
MM_SPECS = ./specs.dj

depend: $(DEPEND_PREREQ)
	@echo Generating dependencies..
	@copy $(MAKEFILE) Makefile.bak
	@echo "*cpp: %(cpp_cpu) %{posix:-D_POSIX_SOURCE} -remap" > $(MM_SPECS)
	sed -e "/^# DO NOT DELETE THIS LINE/,$$d" < Makefile.bak > $(MAKEFILE)
	echo "# DO NOT DELETE THIS LINE"                        >> $(MAKEFILE)
	$(CC) -MM -specs=$(MM_SPECS) $(CFLAGS) $(CSOURCES) | \
	sed -e 's/^\([a-zA-Z0-9_-]*\.o:\)/$$(OBJ_DIR)\/\1/'    >> $(MAKEFILE)
	rm -f $(MM_SPECS)

