`Makefile.mk` supported MS-DOS and Amiga, but `./configure` also
supported them in a better tested and more flexible way.
This patch also adds CMake support for MS-DOS/DJGPP and Amiga OS 3.
`Makefile.mk` was not maintained. Delete it in favour of first-tier
build methods.
Also include some non-MS-DOS/AmigaOS-specific tidy-up, see details at
the end of this message.
Details:
- fix/silence all MS-DOS/DJGPP build warnings and issues.
- add MS-DOS support to cmake.
- default to `ENABLE_THREADED_RESOLVER=OFF` for MS-DOS.
- add support for `WATT_ROOT`.
- use static libcurl with MS-DOS.
- fixup default CMake suffixes/prefixes for DJGPP.
- disable hidden symbols for MS-DOS. Not supported on MS-DOS.
- opt-in MS-DOS into `USE_UNIX_SOCKETS`.
- improve MS-DOS support in autotools.
- default to `--disable-threaded-resolver` for MS-DOS.
- make sure to use `close_s()` (from Watt-32) with autotools and cmake.
`Makefile.mk` used it before this patch.
- GHA: add DJGPP cmake (~30s) and autotools (~60s) build jobs.
Also build tests and examples with cmake.
- improve AmigaOS support in autotools:
- configure: detect `CloseSocket()` when it's a macro.
- configure: fix `IoctlSocket` detection on AmigaOS.
- curl-amissl.m4: pass AmiSSL libs to tests/servers.
- add AmigaOS3 support to cmake:
- cmake: fix `HAVE_IOCTLSOCKET_CAMEL` and
`HAVE_IOCTLSOCKET_CAMEL_FIONBIO` detections.
- set necessary system libs.
- add AmiSSL support.
- inet_ntop, inet_pton: fix using it for AmigaOS. cmake detects them,
and they did not compile with AmigaOS.
- cmake: better sync `gethostname` detection with autotools.
Fixes detection for AmigaOS, where `gethostname` is a macro.
- cmake: fix `sys/utime.h` detection on AmigaOS.
- cmake: force-disable `getaddrinfo` for AmigaOS.
- cmake: tweak threading and static/shared default for AmigaOS.
- cmake: rely on manual variable `AMIGA` to enable the platform.
- GHA: add AmigaOS cmake and autotools (~45s) jobs.
Also build tests and examples with cmake.
- INSTALL: update MS-DOS and AmigaOS build instructions.
- amigaos: fix `-Wpointer-sign` and
`zero or negative size array '_args'` in `Printf()`.
- amigaos: fix `-Wpointer-sign`
- amigaos: fix `-Wredundant-decls` `errno` and `h_errno`.
- amigaos: brute-force silence `lseek()` size warnings.
- amigaos: server/resolve: silence `-Wdiscarded-qualifiers`.
- amigaos: server/resolve: fix `-Wpointer-sign`.
- amigaos: fix `CURL_SA_FAMILY_T` type.
- nonblock: prefer `HAVE_IOCTLSOCKET_CAMEL_FIONBIO` for AmigaOS.
`ioctl` is also detected, but fails when used. Make the above override
it for a successful build.
Authored-by: Darren Banfi
Fixes #15537
Closes #15603
- tftpd: prefer `HAVE_IOCTLSOCKET_CAMEL_FIONBIO` for AmigaOS.
- tftpd: tidy-up conditional code.
- curl: set stack size to 16384 for AmigaOS3/4
Overriding the default 4096.
Suggested-by: Darren Banfi
Ref: https://github.com/curl/curl/pull/15543#issuecomment-2498783123
Ref: https://wiki.amigaos.net/wiki/Controlling_Application_Stack
- functypes.h: fix `SEND_QUAL_ARG2` for AmigaOS.
- tftp: add missing cast in sendto() call for AmigaOS.
- getinfo: fix warning with AmigaOS.
- tool_operate: silence warning with AmigaOS
- amigaos: fix building libtests due to missing `RLIMIT_NOFILE`.
- curl_gethostname: silence warning for AmigaOS.
- ftp: silence `-Wtype-limits` for AmigaOS.
- libtest: fix timeval initialization for AmigaOS.
- examples: fix `timeval` initialization for AmigaOS.
- examples: silence warning for AmigaOS.
- configure: fix IPv6 detection for cross-builds.
- netrc: fix to build with AmigaOS cleanly.
- buildinfo: detect and add `DOS` tag for MS-DOS builds.
- buildinfo: add `AMIGA` to buildinfo.txt in auttools.
- build: move `USE_WATT32` macro definition to cmake/configure.
Non-MS-DOS/AmigeOS-specific tidy-ups:
- configure: sync `sa_family_t` detection with cmake.
- configure: sync `ADDRESS_FAMILY` detection signals with cmake.
- doh: use `CURL_SA_FAMILY_T`.
- lib: drop mingw-specific `CURL_SA_FAMILY_T` workaround.
- cmake: extend instead of override check-specific
configurations/requirements.
This allows to honor global requirements added earlier.
Necessary for AmigaOS for example.
- cmake: omit warning on disabled IPv6 for MS-DOS and AmigaOS.
No IPv6 support on these platforms. Also sync with autotools.
- lib1960: use libcurl `inet_pton()` wrapper.
- cmake: detect LibreSSL (to match autotools).
- cmake: say the specific OpenSSL flavour detected.
- hostip: add missing `HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID` guard.
- lib: simplify classic mac feature guards.
Follow-up to a8861b6ccd #9764
Closes #15543
172 lines
5.5 KiB
Makefile
172 lines
5.5 KiB
Makefile
#***************************************************************************
|
|
# _ _ ____ _
|
|
# Project ___| | | | _ \| |
|
|
# / __| | | | |_) | |
|
|
# | (__| |_| | _ <| |___
|
|
# \___|\___/|_| \_\_____|
|
|
#
|
|
# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
|
|
#
|
|
# This software is licensed as described in the file COPYING, which
|
|
# you should have received as part of this distribution. The terms
|
|
# are also available at https://curl.se/docs/copyright.html.
|
|
#
|
|
# You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
|
# copies of the Software, and permit persons to whom the Software is
|
|
# furnished to do so, under the terms of the COPYING file.
|
|
#
|
|
# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
|
# KIND, either express or implied.
|
|
#
|
|
# SPDX-License-Identifier: curl
|
|
#
|
|
###########################################################################
|
|
AUTOMAKE_OPTIONS = foreign nostdinc
|
|
|
|
CMAKE_DIST = CMakeLists.txt curl_config.h.cmake
|
|
|
|
CHECKSRC_DIST = .checksrc vauth/.checksrc vquic/.checksrc vssh/.checksrc \
|
|
vtls/.checksrc
|
|
|
|
EXTRA_DIST = config-win32.h config-win32ce.h config-plan9.h \
|
|
config-riscos.h config-mac.h curl_config.h.in libcurl.rc \
|
|
config-win32ce.h config-os400.h setup-os400.h \
|
|
$(CMAKE_DIST) setup-win32.h Makefile.soname optiontable.pl libcurl.def \
|
|
$(CHECKSRC_DIST)
|
|
|
|
lib_LTLIBRARIES = libcurl.la
|
|
|
|
if BUILD_UNITTESTS
|
|
noinst_LTLIBRARIES = libcurlu.la
|
|
else
|
|
noinst_LTLIBRARIES =
|
|
endif
|
|
|
|
# This might hold -Werror
|
|
CFLAGS += @CURL_CFLAG_EXTRAS@
|
|
|
|
# Specify our include paths here, and do it relative to $(top_srcdir) and
|
|
# $(top_builddir), to ensure that these paths which belong to the library
|
|
# being currently built and tested are searched before the library which
|
|
# might possibly already be installed in the system.
|
|
#
|
|
# $(top_srcdir)/include is for libcurl's external include files
|
|
# $(top_builddir)/lib is for libcurl's generated lib/curl_config.h file
|
|
# $(top_srcdir)/lib for libcurl's lib/curl_setup.h and other "private" files
|
|
|
|
AM_CPPFLAGS = -I$(top_srcdir)/include \
|
|
-I$(top_builddir)/lib \
|
|
-I$(top_srcdir)/lib
|
|
|
|
# Prevent LIBS from being used for all link targets
|
|
LIBS = $(BLANK_AT_MAKETIME)
|
|
|
|
include Makefile.soname
|
|
|
|
AM_CPPFLAGS += -DBUILDING_LIBCURL
|
|
AM_LDFLAGS =
|
|
AM_CFLAGS =
|
|
|
|
# Makefile.inc provides the CSOURCES and HHEADERS defines
|
|
include Makefile.inc
|
|
|
|
if USE_UNITY
|
|
# Keep these separate to avoid duplicate definitions when linking libtests
|
|
# in static mode.
|
|
curl_EXCLUDE = curl_threads.c timediff.c warnless.c
|
|
if DEBUGBUILD
|
|
# We must compile these sources separately to avoid memdebug.h redefinitions
|
|
# applying to them.
|
|
curl_EXCLUDE += memdebug.c curl_multibyte.c
|
|
endif
|
|
libcurl_unity.c: $(top_srcdir)/scripts/mk-unity.pl $(CSOURCES)
|
|
@PERL@ $(top_srcdir)/scripts/mk-unity.pl $(srcdir) $(CSOURCES) --exclude $(curl_EXCLUDE) > libcurl_unity.c
|
|
|
|
nodist_libcurl_la_SOURCES = libcurl_unity.c
|
|
libcurl_la_SOURCES = $(curl_EXCLUDE)
|
|
nodist_libcurlu_la_SOURCES = libcurl_unity.c
|
|
libcurlu_la_SOURCES = $(curl_EXCLUDE)
|
|
CLEANFILES = libcurl_unity.c
|
|
else
|
|
libcurl_la_SOURCES = $(CSOURCES) $(HHEADERS)
|
|
libcurlu_la_SOURCES = $(CSOURCES) $(HHEADERS)
|
|
endif
|
|
|
|
libcurl_la_CPPFLAGS_EXTRA =
|
|
libcurl_la_LDFLAGS_EXTRA =
|
|
libcurl_la_CFLAGS_EXTRA =
|
|
|
|
if CURL_LT_SHLIB_USE_VERSION_INFO
|
|
libcurl_la_LDFLAGS_EXTRA += $(VERSIONINFO)
|
|
endif
|
|
|
|
if CURL_LT_SHLIB_USE_NO_UNDEFINED
|
|
libcurl_la_LDFLAGS_EXTRA += -no-undefined
|
|
endif
|
|
|
|
if CURL_LT_SHLIB_USE_MIMPURE_TEXT
|
|
libcurl_la_LDFLAGS_EXTRA += -mimpure-text
|
|
endif
|
|
|
|
if CURL_LT_SHLIB_USE_VERSIONED_SYMBOLS
|
|
libcurl_la_LDFLAGS_EXTRA += -Wl,--version-script=libcurl.vers
|
|
else
|
|
# if symbol-hiding is enabled, hide them!
|
|
if DOING_CURL_SYMBOL_HIDING
|
|
libcurl_la_LDFLAGS_EXTRA += -export-symbols-regex '^curl_.*'
|
|
endif
|
|
endif
|
|
|
|
if USE_CPPFLAG_CURL_STATICLIB
|
|
libcurl_la_CPPFLAGS_EXTRA += -DCURL_STATICLIB
|
|
else
|
|
if HAVE_WINDRES
|
|
libcurl_la_SOURCES += $(LIB_RCFILES)
|
|
$(LIB_RCFILES): $(top_srcdir)/include/curl/curlver.h
|
|
endif
|
|
endif
|
|
|
|
if DOING_CURL_SYMBOL_HIDING
|
|
libcurl_la_CPPFLAGS_EXTRA += -DCURL_HIDDEN_SYMBOLS
|
|
libcurl_la_CFLAGS_EXTRA += $(CFLAG_CURL_SYMBOL_HIDING)
|
|
endif
|
|
|
|
libcurl_la_CPPFLAGS = $(AM_CPPFLAGS) $(libcurl_la_CPPFLAGS_EXTRA)
|
|
libcurl_la_LDFLAGS = $(AM_LDFLAGS) $(libcurl_la_LDFLAGS_EXTRA) $(CURL_LDFLAGS_LIB) $(LIBCURL_PC_LIBS_PRIVATE)
|
|
libcurl_la_CFLAGS = $(AM_CFLAGS) $(libcurl_la_CFLAGS_EXTRA)
|
|
|
|
libcurlu_la_CPPFLAGS = $(AM_CPPFLAGS) -DCURL_STATICLIB -DUNITTESTS
|
|
libcurlu_la_LDFLAGS = $(AM_LDFLAGS) -static $(LIBCURL_PC_LIBS_PRIVATE)
|
|
libcurlu_la_CFLAGS = $(AM_CFLAGS)
|
|
|
|
CHECKSRC = $(CS_$(V))
|
|
CS_0 = @echo " RUN " $@;
|
|
CS_1 =
|
|
CS_ = $(CS_0)
|
|
|
|
checksrc:
|
|
$(CHECKSRC)(@PERL@ $(top_srcdir)/scripts/checksrc.pl -D$(srcdir) \
|
|
-W$(srcdir)/curl_config.h $(srcdir)/*.[ch] $(srcdir)/vauth/*.[ch] \
|
|
$(srcdir)/vtls/*.[ch] $(srcdir)/vquic/*.[ch] $(srcdir)/vssh/*.[ch])
|
|
|
|
if DEBUGBUILD
|
|
# for debug builds, we scan the sources on all regular make invokes
|
|
all-local: checksrc
|
|
endif
|
|
|
|
# disable the tests that are mostly causing false positives
|
|
TIDYFLAGS=-checks=-clang-analyzer-security.insecureAPI.strcpy,-clang-analyzer-optin.performance.Padding,-clang-analyzer-valist.Uninitialized,-clang-analyzer-core.NonNullParamChecker,-clang-analyzer-core.NullDereference -quiet
|
|
|
|
TIDY:=clang-tidy
|
|
|
|
tidy:
|
|
$(TIDY) $(CSOURCES) $(TIDYFLAGS) -- $(AM_CPPFLAGS) $(CPPFLAGS) -DHAVE_CONFIG_H
|
|
|
|
optiontable:
|
|
perl optiontable.pl < $(top_srcdir)/include/curl/curl.h > easyoptions.c
|
|
|
|
if HAVE_WINDRES
|
|
.rc.lo:
|
|
$(LIBTOOL) --tag=RC --mode=compile $(RC) -I$(top_srcdir)/include $(RCFLAGS) -i $< -o $@
|
|
endif
|