diff options
author | Gisle Vanem <gisle.vanem@gmail.com> | 2020-12-27 11:49:26 +0100 |
---|---|---|
committer | Jay Satiro <raysatiro@yahoo.com> | 2021-01-27 22:08:57 -0500 |
commit | 3611f6a41e3059654085307fa5a3011912f255f6 (patch) | |
tree | f487ed27e32760e9d050e975b67c2283d3ba810a /packages | |
parent | 73d743cfadb0b800d15a6a68ceb4fd5e22fdabd7 (diff) | |
download | curl-3611f6a41e3059654085307fa5a3011912f255f6.tar.gz |
build: fix djgpp builds
- Update build instructions in packages/DOS/README
- Extend 'VPATH' with 'vquic' and 'vssh'.
- Allow 'Makefile.dist' to build both 'lib' and 'src'.
- Allow using the Windows hosted djgpp cross compiler to build for MSDOS
under Windows.
- 'USE_SSL' -> 'USE_OPENSSL'
- Added a 'link_EXE' macro. Etc, etc.
- Linking 'curl.exe' needs '$(CURLX_CFILES)' too.
- Do not pick-up '../lib/djgpp/*.o' files. Recompile locally.
- Generate a gzipped 'tool_hugehelp.c' if 'USE_ZLIB=1'.
- Remove 'djgpp-clean'
- Adapt to new C-ares directory structure
- Use conditional variable assignments
Clarify the 'conditional variable assignment' in 'common.dj'.
Closes https://github.com/curl/curl/pull/6382
Diffstat (limited to 'packages')
-rw-r--r-- | packages/DOS/README | 8 | ||||
-rw-r--r-- | packages/DOS/common.dj | 114 |
2 files changed, 97 insertions, 25 deletions
diff --git a/packages/DOS/README b/packages/DOS/README index 5278f2c13..cc9da379e 100644 --- a/packages/DOS/README +++ b/packages/DOS/README @@ -1,7 +1,9 @@ Gisle Vanem made curl build fine on DOS (and MingW) with djgpp, OpenSSL and his Watt-32 stack. -'make djgpp' in the root curl dir should build it fine. +'make -f Makefile.dist djgpp' in the root curl dir should build it fine. +Or enter 'lib' and do a 'make -f Makefile.dj clean all' to first delete +'lib/curl_config.h' which is possibly from a previous incompatible Windows-build. Note 1: djgpp 2.04 beta has a sscanf() bug so the URL parsing isn't done properly. Use djgpp 2.03 until they fix it. @@ -9,3 +11,7 @@ Note 1: djgpp 2.04 beta has a sscanf() bug so the URL parsing isn't Note 2: Compile Watt-32 (and OpenSSL) with the same version of djgpp. Otherwise things go wrong because things like FS-extensions and errnos have been changed between releases. + +Note 3: Several 'USE_x' variables in 'common.dj' are on the 'USE_x ?= 0' + form (conditional variable assignment). So one can build like this: + c:\curl\lib> make -f makefile.dj USE_OPENSSL=1 USE_ZLIB=1 clean all diff --git a/packages/DOS/common.dj b/packages/DOS/common.dj index 0eecd8a62..a629fdb8d 100644 --- a/packages/DOS/common.dj +++ b/packages/DOS/common.dj @@ -24,12 +24,10 @@ # # Assumes you've unpacked curl with long-file names # I.e use "set LFN=y" before untaring on Win9x/XP. -# Requires sed, yacc, rm and the usual stuff. +# Requires sed, rm and the usual stuff. # # Define TOPDIR before including this file. -.SUFFIXES: .exe .y - MAKEFILE = Makefile.dj OBJ_DIR = djgpp @@ -61,42 +59,62 @@ else DS = \$(NOTHING) endif +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 + # # 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_OPENSSL ?= 0 # -# Use zlib for contents encoding +# Use zlib for contents encoding. Needed for 'USE_OPENSSL=1' too. # -USE_ZLIB = 0 +USE_ZLIB ?= 0 # # Use libidn for international domain names # -USE_IDNA = 0 +USE_IDNA ?= 0 # # Use Watt-32 IPv6 stack (only IPv6 name resolution working at the moment) # -USE_IPV6 = 0 +USE_IPV6 ?= 0 # # Use C-Ares resolver library # -USE_ARES = 0 +USE_ARES ?= 0 # # Enable debug code in libcurl/curl # -USE_DEBUG = 0 +USE_DEBUG ?= 0 # # Enable memory tracking code in libcurl/curl # -USE_CURLDEBUG = 0 +USE_CURLDEBUG ?= 0 + +# +# Generate a .map file in 'link_EXE' macro +# +MAKE_MAP_FILE ?= 0 default: all @@ -104,20 +122,40 @@ 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 = e:/net/openssl.099 -ZLIB_ROOT = $(DJDIR)/contrib/zlib -LIBIDN_ROOT = $(TOPDIR)/../IDN/libidn -ARES_ROOT = $(TOPDIR)/ares - -CC = gcc -YACC = bison -y +WATT32_ROOT = $(realpath $(WATT_ROOT)) +OPENSSL_ROOT ?= $(TOPDIR)/../crypto/OpenSSL +ZLIB_ROOT ?= e:/djgpp/contrib/zlib +LIBIDN_ROOT ?= $(TOPDIR)/../IDN/libidn +ARES_ROOT ?= $(TOPDIR)/../DNS/c-ares CFLAGS = -g -O2 -I. -I$(TOPDIR)/include -I$(TOPDIR)/lib \ -I$(WATT32_ROOT)/inc -Wall -DHAVE_CONFIG_H -ifeq ($(USE_SSL),1) - CFLAGS += -DUSE_OPENSSL -I$(OPENSSL_ROOT) +ifeq ($(USE_OPENSSL),1) + CFLAGS += -DUSE_OPENSSL -I$(OPENSSL_ROOT)/include + + # + # Squelch the warnings on deprecated functions. + # + CFLAGS += -DOPENSSL_SUPPRESS_DEPRECATED + + # + # Use some of these too? + # + # CFLAGS += -DUSE_TLS_SRP=1 \ + # -DHAVE_ENGINE_LOAD_BUILTIN_ENGINES \ + # -DHAVE_OPENSSL_PKCS12_H \ + # -DHAVE_SSLV2_CLIENT_METHOD \ + # -DOPENSSL_NO_DEPRECATED + + # + # 'libcomm.a' is normally 'libcommon.a'. But to keep it 8+3 clean, it's + # shortened to 'libcomm.a'. The official OpenSSL build was recently changed + # and this "Common" library was added for several of the Crypto Providers. + # + OPENSSL_LIBS = $(OPENSSL_ROOT)/lib/libssl.a \ + $(OPENSSL_ROOT)/lib/libcrypt.a \ + $(OPENSSL_ROOT)/lib/libcomm.a endif ifeq ($(USE_ZLIB),1) @@ -129,7 +167,7 @@ ifeq ($(USE_IPV6),1) endif ifeq ($(USE_ARES),1) - CFLAGS += -DUSE_ARES -I$(ARES_ROOT) + CFLAGS += -DUSE_ARES -I$(ARES_ROOT)/include endif ifeq ($(USE_IDNA),1) @@ -152,6 +190,34 @@ $(OBJ_DIR)/%.o: %.c $(CC) $(CFLAGS) -o $@ -c $< @echo +# +# Link-EXE macro: +# $(1): the .exe +# $(2): the .o-files and libraries +# +ifeq ($(MAKE_MAP_FILE),1) + define link_EXE + $(CC) -o $(1) $(LDFLAGS) -Wl,--print-map,--sort-common $(2) > $(1:.exe=.map) + endef +else + define link_EXE + $(CC) $(LDFLAGS) -o $(1) $(2) + endef +endif + +$(TOPDIR)/docs/curl.1: $(wildcard $(TOPDIR)/docs/cmdline-opts/*.d) + cd $(TOPDIR)/docs/cmdline-opts; \ + perl gen.pl mainpage > ../$(TOPDIR)/docs/curl.1 + +DEP_REPLACE = sed -e 's@\(.*\)\.o: @\n$$(OBJ_DIR)\/\1.o: @' \ + -e 's@$(ARES_ROOT)@$$(ARES_ROOT)@g' \ + -e 's@$(OPENSSL_ROOT)@$$(OPENSSL_ROOT)@g' \ + -e 's@$(WATT32_ROOT)@$$(WATT32_ROOT)@g' \ + -e 's@$(ZLIB_ROOT)@$$(ZLIB_ROOT)@g' + +# +# One may have to do 'make -f Makefile.dj clean' first in case +# a foreign 'curl_config.h' is making trouble. +# depend: $(DEPEND_PREREQ) $(MAKEFILE) - $(CC) -MM $(CFLAGS) $(CSOURCES) | \ - sed -e 's/^\([a-zA-Z0-9_-]*\.o:\)/$$(OBJ_DIR)\/\1/' > depend.dj + $(CC) -MM $(CFLAGS) $(CSOURCES) | $(DEP_REPLACE) > depend.dj |