1
0
mirror of https://github.com/moparisthebest/curl synced 2025-03-01 09:51:46 -05:00

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
This commit is contained in:
Gisle Vanem 2020-12-27 11:49:26 +01:00 committed by Jay Satiro
parent 73d743cfad
commit 3611f6a41e
4 changed files with 112 additions and 34 deletions

View File

@ -26,7 +26,7 @@
# #
DEPEND_PREREQ = curl_config.h DEPEND_PREREQ = curl_config.h
VPATH = vtls vauth VPATH = vtls vauth vquic vssh
TOPDIR = .. TOPDIR = ..
include ../packages/DOS/common.dj include ../packages/DOS/common.dj

View File

@ -1,7 +1,9 @@
Gisle Vanem made curl build fine on DOS (and MingW) with djgpp, OpenSSL and his Gisle Vanem made curl build fine on DOS (and MingW) with djgpp, OpenSSL and his
Watt-32 stack. 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 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. 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. Note 2: Compile Watt-32 (and OpenSSL) with the same version of djgpp.
Otherwise things go wrong because things like FS-extensions and Otherwise things go wrong because things like FS-extensions and
errnos have been changed between releases. 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

View File

@ -24,12 +24,10 @@
# #
# Assumes you've unpacked curl with long-file names # Assumes you've unpacked curl with long-file names
# I.e use "set LFN=y" before untaring on Win9x/XP. # 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. # Define TOPDIR before including this file.
.SUFFIXES: .exe .y
MAKEFILE = Makefile.dj MAKEFILE = Makefile.dj
OBJ_DIR = djgpp OBJ_DIR = djgpp
@ -61,42 +59,62 @@ else
DS = \$(NOTHING) DS = \$(NOTHING)
endif 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 # OpenSSL is available from www.openssl.org and builds okay
# with djgpp/Watt-32. Set to 0 if you don't need https URLs # with djgpp/Watt-32. Set to 0 if you don't need https URLs
# (reduces curl.exe with approx 700 kB) # (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 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 Watt-32 IPv6 stack (only IPv6 name resolution working at the moment)
# #
USE_IPV6 = 0 USE_IPV6 ?= 0
# #
# Use C-Ares resolver library # Use C-Ares resolver library
# #
USE_ARES = 0 USE_ARES ?= 0
# #
# Enable debug code in libcurl/curl # Enable debug code in libcurl/curl
# #
USE_DEBUG = 0 USE_DEBUG ?= 0
# #
# Enable memory tracking code in libcurl/curl # 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 default: all
@ -104,20 +122,40 @@ default: all
# Root directory for Waterloo tcp/ip etc. Change to suite. # Root directory for Waterloo tcp/ip etc. Change to suite.
# WATT_ROOT should be set during Watt-32 install. # WATT_ROOT should be set during Watt-32 install.
# #
WATT32_ROOT = $(subst \,/,$(WATT_ROOT)) WATT32_ROOT = $(realpath $(WATT_ROOT))
OPENSSL_ROOT = e:/net/openssl.099 OPENSSL_ROOT ?= $(TOPDIR)/../crypto/OpenSSL
ZLIB_ROOT = $(DJDIR)/contrib/zlib ZLIB_ROOT ?= e:/djgpp/contrib/zlib
LIBIDN_ROOT = $(TOPDIR)/../IDN/libidn LIBIDN_ROOT ?= $(TOPDIR)/../IDN/libidn
ARES_ROOT = $(TOPDIR)/ares ARES_ROOT ?= $(TOPDIR)/../DNS/c-ares
CC = gcc
YACC = bison -y
CFLAGS = -g -O2 -I. -I$(TOPDIR)/include -I$(TOPDIR)/lib \ CFLAGS = -g -O2 -I. -I$(TOPDIR)/include -I$(TOPDIR)/lib \
-I$(WATT32_ROOT)/inc -Wall -DHAVE_CONFIG_H -I$(WATT32_ROOT)/inc -Wall -DHAVE_CONFIG_H
ifeq ($(USE_SSL),1) ifeq ($(USE_OPENSSL),1)
CFLAGS += -DUSE_OPENSSL -I$(OPENSSL_ROOT) 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 endif
ifeq ($(USE_ZLIB),1) ifeq ($(USE_ZLIB),1)
@ -129,7 +167,7 @@ ifeq ($(USE_IPV6),1)
endif endif
ifeq ($(USE_ARES),1) ifeq ($(USE_ARES),1)
CFLAGS += -DUSE_ARES -I$(ARES_ROOT) CFLAGS += -DUSE_ARES -I$(ARES_ROOT)/include
endif endif
ifeq ($(USE_IDNA),1) ifeq ($(USE_IDNA),1)
@ -152,6 +190,34 @@ $(OBJ_DIR)/%.o: %.c
$(CC) $(CFLAGS) -o $@ -c $< $(CC) $(CFLAGS) -o $@ -c $<
@echo @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) depend: $(DEPEND_PREREQ) $(MAKEFILE)
$(CC) -MM $(CFLAGS) $(CSOURCES) | \ $(CC) -MM $(CFLAGS) $(CSOURCES) | $(DEP_REPLACE) > depend.dj
sed -e 's/^\([a-zA-Z0-9_-]*\.o:\)/$$(OBJ_DIR)\/\1/' > depend.dj

View File

@ -29,13 +29,15 @@ DEPEND_PREREQ = # tool_hugehelp.c
TOPDIR = .. TOPDIR = ..
vpath %.c ../lib
include ../packages/DOS/common.dj include ../packages/DOS/common.dj
include Makefile.inc include Makefile.inc
CSOURCES = $(CURL_CFILES) CSOURCES = $(CURL_CFILES) $(CURLX_CFILES)
ifeq ($(USE_SSL),1) ifeq ($(USE_OPENSSL),1)
EX_LIBS += $(OPENSSL_ROOT)/lib/libssl.a $(OPENSSL_ROOT)/lib/libcrypt.a EX_LIBS += $(OPENSSL_LIBS)
endif endif
ifeq ($(USE_ARES),1) ifeq ($(USE_ARES),1)
@ -54,7 +56,7 @@ endif
EX_LIBS += $(WATT32_ROOT)/lib/libwatt.a EX_LIBS += $(WATT32_ROOT)/lib/libwatt.a
PROGRAM = curl.exe PROGRAM = curl.exe
OBJECTS += $(addprefix $(OBJ_DIR)/, $(CSOURCES:.c=.o)) OBJECTS = $(addprefix $(OBJ_DIR)/, $(notdir $(CSOURCES:.c=.o)))
all: $(OBJ_DIR) $(PROGRAM) all: $(OBJ_DIR) $(PROGRAM)
@echo Welcome to curl @echo Welcome to curl
@ -64,10 +66,14 @@ $(PROGRAM): $(OBJECTS) ../lib/libcurl.a
# #
# groff 1.18+ requires "-P -c" # groff 1.18+ requires "-P -c"
# If 'USE_ZLIB = 1', create a compressed help-file.
# #
tool_hugehelp.c: ../docs/MANUAL ../docs/curl.1 mkhelp.pl ifeq ($(USE_ZLIB),1)
groff -Tascii -man ../docs/curl.1 | \ COMPRESS_OPT = -c
perl -w mkhelp.pl ../docs/MANUAL > $@ endif
tool_hugehelp.c: ../docs/curl.1 mkhelp.pl Makefile.dj
groff -Tascii -man $< | perl -w mkhelp.pl $(COMPRESS_OPT) $< > $@
# clean generated files # clean generated files
# #