libs: updated to cURL 7.58.0

This commit is contained in:
Remy Marquis 2018-02-04 18:52:34 +01:00
parent 50a596810d
commit f8b65b2e41
1097 changed files with 77819 additions and 29045 deletions

11086
curl/CHANGES

File diff suppressed because it is too large Load Diff

View File

@ -93,3 +93,32 @@ macro(CURL_INTERNAL_TEST_RUN CURL_TEST)
endif(${CURL_TEST}_COMPILE AND NOT ${CURL_TEST}) endif(${CURL_TEST}_COMPILE AND NOT ${CURL_TEST})
endif() endif()
endmacro(CURL_INTERNAL_TEST_RUN) endmacro(CURL_INTERNAL_TEST_RUN)
macro(CURL_NROFF_CHECK)
find_program(NROFF NAMES gnroff nroff)
if(NROFF)
# Need a way to write to stdin, this will do
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/nroff-input.txt" "test")
# Tests for a valid nroff option to generate a manpage
foreach(_MANOPT "-man" "-mandoc")
execute_process(COMMAND "${NROFF}" ${_MANOPT}
OUTPUT_VARIABLE NROFF_MANOPT_OUTPUT
INPUT_FILE "${CMAKE_CURRENT_BINARY_DIR}/nroff-input.txt"
ERROR_QUIET)
# Save the option if it was valid
if(NROFF_MANOPT_OUTPUT)
message("Found *nroff option: -- ${_MANOPT}")
set(NROFF_MANOPT ${_MANOPT})
set(NROFF_USEFUL ON)
break()
endif()
endforeach()
# No need for the temporary file
file(REMOVE "${CMAKE_CURRENT_BINARY_DIR}/nroff-input.txt")
if(NOT NROFF_USEFUL)
message(WARNING "Found no *nroff option to get plaintext from man pages")
endif()
else()
message(WARNING "Found no *nroff program")
endif()
endmacro(CURL_NROFF_CHECK)

View File

@ -32,9 +32,9 @@ int main(void) {
if(curl_cv_recv) if(curl_cv_recv)
if(NOT DEFINED curl_cv_func_recv_args OR "${curl_cv_func_recv_args}" STREQUAL "unknown") if(NOT DEFINED curl_cv_func_recv_args OR "${curl_cv_func_recv_args}" STREQUAL "unknown")
foreach(recv_retv "int" "ssize_t" ) foreach(recv_retv "int" "ssize_t" )
foreach(recv_arg1 "int" "ssize_t" "SOCKET") foreach(recv_arg1 "SOCKET" "int" )
foreach(recv_arg2 "void *" "char *") foreach(recv_arg2 "char *" "void *" )
foreach(recv_arg3 "size_t" "int" "socklen_t" "unsigned int") foreach(recv_arg3 "int" "size_t" "socklen_t" "unsigned int")
foreach(recv_arg4 "int" "unsigned int") foreach(recv_arg4 "int" "unsigned int")
if(NOT curl_cv_func_recv_done) if(NOT curl_cv_func_recv_done)
unset(curl_cv_func_recv_test CACHE) unset(curl_cv_func_recv_test CACHE)
@ -96,9 +96,9 @@ int main(void) {
if(curl_cv_send) if(curl_cv_send)
if(NOT DEFINED curl_cv_func_send_args OR "${curl_cv_func_send_args}" STREQUAL "unknown") if(NOT DEFINED curl_cv_func_send_args OR "${curl_cv_func_send_args}" STREQUAL "unknown")
foreach(send_retv "int" "ssize_t" ) foreach(send_retv "int" "ssize_t" )
foreach(send_arg1 "int" "ssize_t" "SOCKET") foreach(send_arg1 "SOCKET" "int" "ssize_t" )
foreach(send_arg2 "const void *" "void *" "char *" "const char *") foreach(send_arg2 "const char *" "const void *" "void *" "char *")
foreach(send_arg3 "size_t" "int" "socklen_t" "unsigned int") foreach(send_arg3 "int" "size_t" "socklen_t" "unsigned int")
foreach(send_arg4 "int" "unsigned int") foreach(send_arg4 "int" "unsigned int")
if(NOT curl_cv_func_send_done) if(NOT curl_cv_func_send_done)
unset(curl_cv_func_send_test CACHE) unset(curl_cv_func_send_test CACHE)

View File

@ -0,0 +1,26 @@
if(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt")
message(FATAL_ERROR "Cannot find install manifest: @CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt")
endif(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt")
if (NOT DEFINED CMAKE_INSTALL_PREFIX)
set (CMAKE_INSTALL_PREFIX "@CMAKE_INSTALL_PREFIX@")
endif ()
message(${CMAKE_INSTALL_PREFIX})
file(READ "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt" files)
string(REGEX REPLACE "\n" ";" files "${files}")
foreach(file ${files})
message(STATUS "Uninstalling $ENV{DESTDIR}${file}")
if(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}")
exec_program(
"@CMAKE_COMMAND@" ARGS "-E remove \"$ENV{DESTDIR}${file}\""
OUTPUT_VARIABLE rm_out
RETURN_VALUE rm_retval
)
if(NOT "${rm_retval}" STREQUAL 0)
message(FATAL_ERROR "Problem when removing $ENV{DESTDIR}${file}")
endif(NOT "${rm_retval}" STREQUAL 0)
else(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}")
message(STATUS "File $ENV{DESTDIR}${file} does not exist.")
endif(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}")
endforeach(file)

View File

@ -0,0 +1,59 @@
get_filename_component(_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH)
if(NOT CURL_FIND_COMPONENTS)
set(CURL_FIND_COMPONENTS curl libcurl)
if(CURL_FIND_REQUIRED)
set(CURL_FIND_REQUIRED_curl TRUE)
set(CURL_FIND_REQUIRED_libcurl TRUE)
endif()
endif()
set(_curl_missing_components)
foreach(_comp ${CURL_FIND_COMPONENTS})
if(EXISTS "${_DIR}/${_comp}-target.cmake")
include("${_DIR}/${_comp}-target.cmake")
set(CURL_${_comp}_FOUND TRUE)
else()
set(CURL_${_comp}_FOUND FALSE)
if(CURL_FIND_REQUIRED_${_comp})
set(CURL_FOUND FALSE)
list(APPEND _curl_missing_components ${_comp})
endif()
endif()
endforeach()
if(_curl_missing_components)
set(CURL_NOT_FOUND_MESSAGE "Following required components not found: " ${_curl_missing_components})
else()
if(TARGET CURL::libcurl)
string(TOUPPER "${CMAKE_BUILD_TYPE}" _curl_current_config)
if(NOT _curl_current_config)
set(_curl_current_config "NOCONFIG")
endif()
get_target_property(_curl_configurations CURL::libcurl IMPORTED_CONFIGURATIONS)
list(FIND _curl_configurations "${_curl_current_config}" _i)
if(_i LESS 0)
set(_curl_config "RELEASE")
list(FIND _curl_configurations "${_curl_current_config}" _i)
if(_i LESS 0)
set(_curl_config "NOCONFIG")
list(FIND _curl_configurations "${_curl_current_config}" _i)
endif()
endif()
if(_i LESS 0)
set(_curl_current_config "") # let CMake pick config at random
else()
set(_curl_current_config "_${_curl_current_config}")
endif()
get_target_property(CURL_INCLUDE_DIRS CURL::libcurl INTERFACE_INCLUDE_DIRECTORIES)
get_target_property(CURL_LIBRARIES CURL::libcurl "LOCATION${_curl_current_config}")
set(_curl_current_config)
set(_curl_configurations)
set(_i)
endif()
endif()
unset(_curl_missing_components)

View File

@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___ # | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____| # \___|\___/|_| \_\_____|
# #
# Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al. # Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, et al.
# #
# This software is licensed as described in the file COPYING, which # This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms # you should have received as part of this distribution. The terms
@ -38,11 +38,12 @@
# To check: # To check:
# (From Daniel Stenberg) The cmake build selected to run gcc with -fPIC on my box while the plain configure script did not. # (From Daniel Stenberg) The cmake build selected to run gcc with -fPIC on my box while the plain configure script did not.
# (From Daniel Stenberg) The gcc command line use neither -g nor any -O options. As a developer, I also treasure our configure scripts's --enable-debug option that sets a long range of "picky" compiler options. # (From Daniel Stenberg) The gcc command line use neither -g nor any -O options. As a developer, I also treasure our configure scripts's --enable-debug option that sets a long range of "picky" compiler options.
cmake_minimum_required(VERSION 2.8 FATAL_ERROR) cmake_minimum_required(VERSION 2.8.12 FATAL_ERROR)
set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMake;${CMAKE_MODULE_PATH}") set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMake;${CMAKE_MODULE_PATH}")
include(Utilities) include(Utilities)
include(Macros) include(Macros)
include(CMakeDependentOption) include(CMakeDependentOption)
include(CheckCCompilerFlag)
project( CURL C ) project( CURL C )
@ -72,20 +73,36 @@ set(OS "\"${CMAKE_SYSTEM_NAME}\"")
include_directories(${PROJECT_BINARY_DIR}/include/curl) include_directories(${PROJECT_BINARY_DIR}/include/curl)
include_directories( ${CURL_SOURCE_DIR}/include ) include_directories( ${CURL_SOURCE_DIR}/include )
option(CURL_WERROR "Turn compiler warnings into errors" OFF)
option(PICKY_COMPILER "Enable picky compiler options" ON)
option(BUILD_CURL_EXE "Set to ON to build curl executable." ON) option(BUILD_CURL_EXE "Set to ON to build curl executable." ON)
option(CURL_STATICLIB "Set to ON to build libcurl with static linking." OFF) option(CURL_STATICLIB "Set to ON to build libcurl with static linking." OFF)
option(ENABLE_ARES "Set to ON to enable c-ares support" OFF) option(ENABLE_ARES "Set to ON to enable c-ares support" OFF)
if(WIN32) if(WIN32)
CMAKE_DEPENDENT_OPTION(ENABLE_THREADED_RESOLVER option(CURL_STATIC_CRT "Set to ON to build libcurl with static CRT on Windows (/MT)." OFF)
"Set to ON to enable threaded DNS lookup" option(ENABLE_INET_PTON "Set to OFF to prevent usage of inet_pton when building against modern SDKs while still requiring compatibility with older Windows versions, such as Windows XP, Windows Server 2003 etc." ON)
ON "NOT ENABLE_ARES"
OFF)
else()
option(ENABLE_THREADED_RESOLVER "Set to ON to enable POSIX threaded DNS lookup" OFF)
endif() endif()
CMAKE_DEPENDENT_OPTION(ENABLE_THREADED_RESOLVER "Set to ON to enable threaded DNS lookup"
ON "NOT ENABLE_ARES"
OFF)
option(ENABLE_DEBUG "Set to ON to enable curl debug features" OFF) option(ENABLE_DEBUG "Set to ON to enable curl debug features" OFF)
option(ENABLE_CURLDEBUG "Set to ON to build with TrackMemory feature enabled" OFF) option(ENABLE_CURLDEBUG "Set to ON to build with TrackMemory feature enabled" OFF)
if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_CLANG)
if (PICKY_COMPILER)
foreach (_CCOPT -pedantic -Wall -W -Wpointer-arith -Wwrite-strings -Wunused -Wshadow -Winline -Wnested-externs -Wmissing-declarations -Wmissing-prototypes -Wno-long-long -Wfloat-equal -Wno-multichar -Wsign-compare -Wundef -Wno-format-nonliteral -Wendif-labels -Wstrict-prototypes -Wdeclaration-after-statement -Wstrict-aliasing=3 -Wcast-align -Wtype-limits -Wold-style-declaration -Wmissing-parameter-type -Wempty-body -Wclobbered -Wignored-qualifiers -Wconversion -Wno-sign-conversion -Wvla -Wdouble-promotion -Wno-system-headers)
# surprisingly, CHECK_C_COMPILER_FLAG needs a new variable to store each new
# test result in.
CHECK_C_COMPILER_FLAG(${_CCOPT} OPT${_CCOPT})
if(OPT${_CCOPT})
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${_CCOPT}")
endif()
endforeach()
endif(PICKY_COMPILER)
endif(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_CLANG)
if (ENABLE_DEBUG) if (ENABLE_DEBUG)
# DEBUGBUILD will be defined only for Debug builds # DEBUGBUILD will be defined only for Debug builds
if(NOT CMAKE_VERSION VERSION_LESS 3.0) if(NOT CMAKE_VERSION VERSION_LESS 3.0)
@ -100,13 +117,12 @@ if (ENABLE_CURLDEBUG)
set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS CURLDEBUG) set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS CURLDEBUG)
endif() endif()
# For debug libs and exes, add "-d" postfix
set(CMAKE_DEBUG_POSTFIX "-d" CACHE STRING "Set debug library postfix")
# initialize CURL_LIBS # initialize CURL_LIBS
set(CURL_LIBS "") set(CURL_LIBS "")
if(ENABLE_THREADED_RESOLVER AND ENABLE_ARES)
message(FATAL_ERROR "Options ENABLE_THREADED_RESOLVER and ENABLE_ARES are mutually exclusive")
endif()
if(ENABLE_ARES) if(ENABLE_ARES)
set(USE_ARES 1) set(USE_ARES 1)
find_package(CARES REQUIRED) find_package(CARES REQUIRED)
@ -114,11 +130,6 @@ if(ENABLE_ARES)
set(CURL_LIBS ${CURL_LIBS} ${CARES_LIBRARY}) set(CURL_LIBS ${CURL_LIBS} ${CARES_LIBRARY})
endif() endif()
if(MSVC)
option(BUILD_RELEASE_DEBUG_DIRS "Set OFF to build each configuration to a separate directory" OFF)
mark_as_advanced(BUILD_RELEASE_DEBUG_DIRS)
endif()
include(CurlSymbolHiding) include(CurlSymbolHiding)
option(HTTP_ONLY "disables all protocols except HTTP (This overrides all CURL_DISABLE_* options)" OFF) option(HTTP_ONLY "disables all protocols except HTTP (This overrides all CURL_DISABLE_* options)" OFF)
@ -176,8 +187,6 @@ option(CURL_DISABLE_CRYPTO_AUTH "to disable cryptographic authentication" OFF)
mark_as_advanced(CURL_DISABLE_CRYPTO_AUTH) mark_as_advanced(CURL_DISABLE_CRYPTO_AUTH)
option(CURL_DISABLE_VERBOSE_STRINGS "to disable verbose strings" OFF) option(CURL_DISABLE_VERBOSE_STRINGS "to disable verbose strings" OFF)
mark_as_advanced(CURL_DISABLE_VERBOSE_STRINGS) mark_as_advanced(CURL_DISABLE_VERBOSE_STRINGS)
option(DISABLED_THREADSAFE "Set to explicitly specify we don't want to use thread-safe functions" OFF)
mark_as_advanced(DISABLED_THREADSAFE)
option(ENABLE_IPV6 "Define if you want to enable IPv6 support" ON) option(ENABLE_IPV6 "Define if you want to enable IPv6 support" ON)
mark_as_advanced(ENABLE_IPV6) mark_as_advanced(ENABLE_IPV6)
if(ENABLE_IPV6 AND NOT WIN32) if(ENABLE_IPV6 AND NOT WIN32)
@ -194,48 +203,45 @@ if(ENABLE_IPV6 AND NOT WIN32)
endif() endif()
endif() endif()
option(ENABLE_MANUAL "to provide the built-in manual" ON) CURL_NROFF_CHECK()
unset(USE_MANUAL CACHE) # TODO: cache NROFF/NROFF_MANOPT/USE_MANUAL vars?
if(ENABLE_MANUAL)
find_program(NROFF NAMES gnroff nroff)
if(NROFF)
# Need a way to write to stdin, this will do
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/nroff-input.txt" "test")
# Tests for a valid nroff option to generate a manpage
foreach(_MANOPT "-man" "-mandoc")
execute_process(COMMAND "${NROFF}" ${_MANOPT}
OUTPUT_VARIABLE NROFF_MANOPT_OUTPUT
INPUT_FILE "${CMAKE_CURRENT_BINARY_DIR}/nroff-input.txt"
ERROR_QUIET)
# Save the option if it was valid
if(NROFF_MANOPT_OUTPUT)
message("Found *nroff option: -- ${_MANOPT}")
set(NROFF_MANOPT ${_MANOPT})
set(USE_MANUAL 1)
break()
endif()
endforeach()
# No need for the temporary file
file(REMOVE "${CMAKE_CURRENT_BINARY_DIR}/nroff-input.txt")
if(NOT USE_MANUAL)
message(WARNING "Found no *nroff option to get plaintext from man pages")
endif()
else()
message(WARNING "Found no *nroff program")
endif()
endif()
# Required for building manual, docs, tests
find_package(Perl) find_package(Perl)
CMAKE_DEPENDENT_OPTION(ENABLE_MANUAL "to provide the built-in manual"
ON "NROFF_USEFUL;PERL_FOUND"
OFF)
if(NOT PERL_FOUND)
message(STATUS "Perl not found, testing disabled.")
set(BUILD_TESTING OFF)
endif()
if(ENABLE_MANUAL)
set(USE_MANUAL ON)
endif()
# We need ansi c-flags, especially on HP # We need ansi c-flags, especially on HP
set(CMAKE_C_FLAGS "${CMAKE_ANSI_CFLAGS} ${CMAKE_C_FLAGS}") set(CMAKE_C_FLAGS "${CMAKE_ANSI_CFLAGS} ${CMAKE_C_FLAGS}")
set(CMAKE_REQUIRED_FLAGS ${CMAKE_ANSI_CFLAGS}) set(CMAKE_REQUIRED_FLAGS ${CMAKE_ANSI_CFLAGS})
if(CURL_STATIC_CRT)
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /MT")
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /MTd")
endif()
# Disable warnings on Borland to avoid changing 3rd party code. # Disable warnings on Borland to avoid changing 3rd party code.
if(BORLAND) if(BORLAND)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -w-") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -w-")
endif(BORLAND) endif(BORLAND)
if(CURL_WERROR)
if(MSVC_VERSION)
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /WX")
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /WX")
else()
# this assumes clang or gcc style options
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror")
endif()
endif(CURL_WERROR)
# If we are on AIX, do the _ALL_SOURCE magic # If we are on AIX, do the _ALL_SOURCE magic
if(${CMAKE_SYSTEM_NAME} MATCHES AIX) if(${CMAKE_SYSTEM_NAME} MATCHES AIX)
set(_ALL_SOURCE 1) set(_ALL_SOURCE 1)
@ -258,19 +264,14 @@ if(WIN32)
endif(WIN32) endif(WIN32)
if(ENABLE_THREADED_RESOLVER) if(ENABLE_THREADED_RESOLVER)
find_package(Threads REQUIRED)
if(WIN32) if(WIN32)
set(USE_THREADS_WIN32 ON) set(USE_THREADS_WIN32 ON)
else() else()
check_include_file_concat("pthread.h" HAVE_PTHREAD_H) set(USE_THREADS_POSIX ${CMAKE_USE_PTHREADS_INIT})
if(HAVE_PTHREAD_H) set(HAVE_PTHREAD_H ${CMAKE_USE_PTHREADS_INIT})
set(CMAKE_THREAD_PREFER_PTHREAD 1)
find_package(Threads)
if(CMAKE_USE_PTHREADS_INIT)
set(CURL_LIBS ${CURL_LIBS} ${CMAKE_THREAD_LIBS_INIT})
set(USE_THREADS_POSIX 1)
endif()
endif()
endif() endif()
set(CURL_LIBS ${CURL_LIBS} ${CMAKE_THREAD_LIBS_INIT})
endif() endif()
# Check for all needed libraries # Check for all needed libraries
@ -365,7 +366,6 @@ if(CMAKE_USE_OPENSSL)
check_include_file("openssl/engine.h" HAVE_OPENSSL_ENGINE_H) check_include_file("openssl/engine.h" HAVE_OPENSSL_ENGINE_H)
check_include_file("openssl/err.h" HAVE_OPENSSL_ERR_H) check_include_file("openssl/err.h" HAVE_OPENSSL_ERR_H)
check_include_file("openssl/pem.h" HAVE_OPENSSL_PEM_H) check_include_file("openssl/pem.h" HAVE_OPENSSL_PEM_H)
check_include_file("openssl/pkcs12.h" HAVE_OPENSSL_PKCS12_H)
check_include_file("openssl/rsa.h" HAVE_OPENSSL_RSA_H) check_include_file("openssl/rsa.h" HAVE_OPENSSL_RSA_H)
check_include_file("openssl/ssl.h" HAVE_OPENSSL_SSL_H) check_include_file("openssl/ssl.h" HAVE_OPENSSL_SSL_H)
check_include_file("openssl/x509.h" HAVE_OPENSSL_X509_H) check_include_file("openssl/x509.h" HAVE_OPENSSL_X509_H)
@ -737,7 +737,6 @@ check_include_file_concat("ifaddrs.h" HAVE_IFADDRS_H)
check_include_file_concat("io.h" HAVE_IO_H) check_include_file_concat("io.h" HAVE_IO_H)
check_include_file_concat("krb.h" HAVE_KRB_H) check_include_file_concat("krb.h" HAVE_KRB_H)
check_include_file_concat("libgen.h" HAVE_LIBGEN_H) check_include_file_concat("libgen.h" HAVE_LIBGEN_H)
check_include_file_concat("limits.h" HAVE_LIMITS_H)
check_include_file_concat("locale.h" HAVE_LOCALE_H) check_include_file_concat("locale.h" HAVE_LOCALE_H)
check_include_file_concat("net/if.h" HAVE_NET_IF_H) check_include_file_concat("net/if.h" HAVE_NET_IF_H)
check_include_file_concat("netdb.h" HAVE_NETDB_H) check_include_file_concat("netdb.h" HAVE_NETDB_H)
@ -795,50 +794,6 @@ if(NOT HAVE_SIZEOF_SSIZE_T)
endif(NOT HAVE_SIZEOF_SSIZE_T) endif(NOT HAVE_SIZEOF_SSIZE_T)
# off_t is sized later, after the HAVE_FILE_OFFSET_BITS test # off_t is sized later, after the HAVE_FILE_OFFSET_BITS test
# Different sizeofs, etc.
# define CURL_SIZEOF_LONG 4
# define CURL_TYPEOF_CURL_OFF_T long long
# define CURL_FORMAT_CURL_OFF_T "lld"
# define CURL_FORMAT_CURL_OFF_TU "llu"
# define CURL_FORMAT_OFF_T "%lld"
# define CURL_SIZEOF_CURL_OFF_T 8
# define CURL_SUFFIX_CURL_OFF_T LL
# define CURL_SUFFIX_CURL_OFF_TU ULL
set(CURL_SIZEOF_LONG ${SIZEOF_LONG})
if(SIZEOF_LONG EQUAL 8)
set(CURL_TYPEOF_CURL_OFF_T long)
set(CURL_SIZEOF_CURL_OFF_T 8)
set(CURL_FORMAT_CURL_OFF_T "ld")
set(CURL_FORMAT_CURL_OFF_TU "lu")
set(CURL_FORMAT_OFF_T "%ld")
set(CURL_SUFFIX_CURL_OFF_T L)
set(CURL_SUFFIX_CURL_OFF_TU UL)
endif(SIZEOF_LONG EQUAL 8)
if(SIZEOF_LONG_LONG EQUAL 8)
set(CURL_TYPEOF_CURL_OFF_T "long long")
set(CURL_SIZEOF_CURL_OFF_T 8)
set(CURL_FORMAT_CURL_OFF_T "lld")
set(CURL_FORMAT_CURL_OFF_TU "llu")
set(CURL_FORMAT_OFF_T "%lld")
set(CURL_SUFFIX_CURL_OFF_T LL)
set(CURL_SUFFIX_CURL_OFF_TU ULL)
endif(SIZEOF_LONG_LONG EQUAL 8)
if(NOT CURL_TYPEOF_CURL_OFF_T)
set(CURL_TYPEOF_CURL_OFF_T ${ssize_t})
set(CURL_SIZEOF_CURL_OFF_T ${SIZEOF_SSIZE_T})
# TODO: need adjustment here.
set(CURL_FORMAT_CURL_OFF_T "ld")
set(CURL_FORMAT_CURL_OFF_TU "lu")
set(CURL_FORMAT_OFF_T "%ld")
set(CURL_SUFFIX_CURL_OFF_T L)
set(CURL_SUFFIX_CURL_OFF_TU LU)
endif(NOT CURL_TYPEOF_CURL_OFF_T)
if(HAVE_SIZEOF_LONG_LONG) if(HAVE_SIZEOF_LONG_LONG)
set(HAVE_LONGLONG 1) set(HAVE_LONGLONG 1)
set(HAVE_LL 1) set(HAVE_LL 1)
@ -918,13 +873,26 @@ check_symbol_exists(ftruncate "${CURL_INCLUDES}" HAVE_FTRUNCATE)
check_symbol_exists(getprotobyname "${CURL_INCLUDES}" HAVE_GETPROTOBYNAME) check_symbol_exists(getprotobyname "${CURL_INCLUDES}" HAVE_GETPROTOBYNAME)
check_symbol_exists(getrlimit "${CURL_INCLUDES}" HAVE_GETRLIMIT) check_symbol_exists(getrlimit "${CURL_INCLUDES}" HAVE_GETRLIMIT)
check_symbol_exists(setlocale "${CURL_INCLUDES}" HAVE_SETLOCALE) check_symbol_exists(setlocale "${CURL_INCLUDES}" HAVE_SETLOCALE)
check_symbol_exists(setmode "${CURL_INCLUDES}" HAVE_SETMODE)
check_symbol_exists(setrlimit "${CURL_INCLUDES}" HAVE_SETRLIMIT) check_symbol_exists(setrlimit "${CURL_INCLUDES}" HAVE_SETRLIMIT)
check_symbol_exists(fcntl "${CURL_INCLUDES}" HAVE_FCNTL) check_symbol_exists(fcntl "${CURL_INCLUDES}" HAVE_FCNTL)
check_symbol_exists(ioctl "${CURL_INCLUDES}" HAVE_IOCTL) check_symbol_exists(ioctl "${CURL_INCLUDES}" HAVE_IOCTL)
check_symbol_exists(setsockopt "${CURL_INCLUDES}" HAVE_SETSOCKOPT) check_symbol_exists(setsockopt "${CURL_INCLUDES}" HAVE_SETSOCKOPT)
check_function_exists(mach_absolute_time HAVE_MACH_ABSOLUTE_TIME)
# symbol exists in win32, but function does not. # symbol exists in win32, but function does not.
check_function_exists(inet_pton HAVE_INET_PTON) if(WIN32)
if(ENABLE_INET_PTON)
check_function_exists(inet_pton HAVE_INET_PTON)
# _WIN32_WINNT_VISTA (0x0600)
add_definitions(-D_WIN32_WINNT=0x0600)
else()
# _WIN32_WINNT_WINXP (0x0501)
add_definitions(-D_WIN32_WINNT=0x0501)
endif()
else()
check_function_exists(inet_pton HAVE_INET_PTON)
endif()
check_symbol_exists(fsetxattr "${CURL_INCLUDES}" HAVE_FSETXATTR) check_symbol_exists(fsetxattr "${CURL_INCLUDES}" HAVE_FSETXATTR)
if(HAVE_FSETXATTR) if(HAVE_FSETXATTR)
@ -996,6 +964,13 @@ if(HAVE_FILE_OFFSET_BITS)
set(CMAKE_REQUIRED_FLAGS "-D_FILE_OFFSET_BITS=64") set(CMAKE_REQUIRED_FLAGS "-D_FILE_OFFSET_BITS=64")
endif(HAVE_FILE_OFFSET_BITS) endif(HAVE_FILE_OFFSET_BITS)
check_type_size("off_t" SIZEOF_OFF_T) check_type_size("off_t" SIZEOF_OFF_T)
# include this header to get the type
set(CMAKE_REQUIRED_INCLUDES "${CURL_SOURCE_DIR}/include")
set(CMAKE_EXTRA_INCLUDE_FILES "curl/system.h")
check_type_size("curl_off_t" SIZEOF_CURL_OFF_T)
set(CMAKE_EXTRA_INCLUDE_FILES "")
set(CMAKE_REQUIRED_FLAGS) set(CMAKE_REQUIRED_FLAGS)
foreach(CURL_TEST foreach(CURL_TEST
@ -1111,7 +1086,7 @@ else()
set(CURL_SIZEOF_CURL_SOCKLEN_T ${SIZEOF_INT}) set(CURL_SIZEOF_CURL_SOCKLEN_T ${SIZEOF_INT})
endif() endif()
# TODO test which of these headers are required for the typedefs used in curlbuild.h # TODO test which of these headers are required
if(WIN32) if(WIN32)
set(CURL_PULL_WS2TCPIP_H ${HAVE_WS2TCPIP_H}) set(CURL_PULL_WS2TCPIP_H ${HAVE_WS2TCPIP_H})
else() else()
@ -1126,11 +1101,6 @@ include(CMake/OtherTests.cmake)
add_definitions(-DHAVE_CONFIG_H) add_definitions(-DHAVE_CONFIG_H)
# For windows, do not allow the compiler to use default target (Vista).
if(WIN32)
add_definitions(-D_WIN32_WINNT=0x0501)
endif(WIN32)
# For windows, all compilers used by cmake should support large files # For windows, all compilers used by cmake should support large files
if(WIN32) if(WIN32)
set(USE_WIN32_LARGE_FILES ON) set(USE_WIN32_LARGE_FILES ON)
@ -1138,6 +1108,11 @@ endif(WIN32)
if(MSVC) if(MSVC)
add_definitions(-D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE) add_definitions(-D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE)
if(CMAKE_C_FLAGS MATCHES "/W[0-4]")
string(REGEX REPLACE "/W[0-4]" "/W4" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
else(CMAKE_C_FLAGS MATCHES "/W[0-4]")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /W4")
endif(CMAKE_C_FLAGS MATCHES "/W[0-4]")
endif(MSVC) endif(MSVC)
# Ugly (but functional) way to include "Makefile.inc" by transforming it (= regenerate it). # Ugly (but functional) way to include "Makefile.inc" by transforming it (= regenerate it).
@ -1156,8 +1131,18 @@ function(TRANSFORM_MAKEFILE_INC INPUT_FILE OUTPUT_FILE)
endfunction() endfunction()
add_subdirectory(docs) if(WIN32 AND NOT CYGWIN)
set(CURL_INSTALL_CMAKE_DIR CMake)
else()
set(CURL_INSTALL_CMAKE_DIR lib/cmake/curl)
endif()
if(USE_MANUAL)
add_subdirectory(docs)
endif()
add_subdirectory(lib) add_subdirectory(lib)
if(BUILD_CURL_EXE) if(BUILD_CURL_EXE)
add_subdirectory(src) add_subdirectory(src)
endif() endif()
@ -1261,7 +1246,7 @@ set(LDFLAGS "${CMAKE_SHARED_LINKER_FLAGS}")
set(LIBCURL_LIBS "") set(LIBCURL_LIBS "")
set(libdir "${CMAKE_INSTALL_PREFIX}/lib") set(libdir "${CMAKE_INSTALL_PREFIX}/lib")
foreach(_lib ${CMAKE_C_IMPLICIT_LINK_LIBRARIES} ${CURL_LIBS}) foreach(_lib ${CMAKE_C_IMPLICIT_LINK_LIBRARIES} ${CURL_LIBS})
if(_lib MATCHES ".*/.*") if(_lib MATCHES ".*/.*" OR _lib MATCHES "^-")
set(LIBCURL_LIBS "${LIBCURL_LIBS} ${_lib}") set(LIBCURL_LIBS "${LIBCURL_LIBS} ${_lib}")
else() else()
set(LIBCURL_LIBS "${LIBCURL_LIBS} -l${_lib}") set(LIBCURL_LIBS "${LIBCURL_LIBS} -l${_lib}")
@ -1297,17 +1282,30 @@ if(NOT CURL_CONFIG_HAS_BEEN_RUN_BEFORE)
set(CURL_CONFIG_HAS_BEEN_RUN_BEFORE 1 CACHE INTERNAL "Flag to track whether this is the first time running CMake or if CMake has been configured before") set(CURL_CONFIG_HAS_BEEN_RUN_BEFORE 1 CACHE INTERNAL "Flag to track whether this is the first time running CMake or if CMake has been configured before")
endif() endif()
# Installation. # install headers
# First, install generated curlbuild.h
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/include/curl/curlbuild.h"
DESTINATION include/curl )
# Next, install other headers excluding curlbuild.h
install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/include/curl" install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/include/curl"
DESTINATION include DESTINATION include
FILES_MATCHING PATTERN "*.h" FILES_MATCHING PATTERN "*.h")
PATTERN "curlbuild.h" EXCLUDE)
include(CMakePackageConfigHelpers)
write_basic_package_version_file(
"${PROJECT_BINARY_DIR}/curl-config-version.cmake"
VERSION ${CURL_VERSION}
COMPATIBILITY SameMajorVersion
)
configure_file(CMake/curl-config.cmake
"${PROJECT_BINARY_DIR}/curl-config.cmake"
COPYONLY
)
install(
FILES ${PROJECT_BINARY_DIR}/curl-config.cmake
${PROJECT_BINARY_DIR}/curl-config-version.cmake
DESTINATION ${CURL_INSTALL_CMAKE_DIR}
)
# Workaround for MSVS10 to avoid the Dialog Hell # Workaround for MSVS10 to avoid the Dialog Hell
# FIXME: This could be removed with future version of CMake. # FIXME: This could be removed with future version of CMake.
if(MSVC_VERSION EQUAL 1600) if(MSVC_VERSION EQUAL 1600)
@ -1316,3 +1314,14 @@ if(MSVC_VERSION EQUAL 1600)
file(APPEND "${CURL_SLN_FILENAME}" "\n# This should be regenerated!\n") file(APPEND "${CURL_SLN_FILENAME}" "\n# This should be regenerated!\n")
endif() endif()
endif() endif()
if(NOT TARGET uninstall)
configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/CMake/cmake_uninstall.cmake.in
${CMAKE_CURRENT_BINARY_DIR}/CMake/cmake_uninstall.cmake
IMMEDIATE @ONLY)
add_custom_target(uninstall
COMMAND ${CMAKE_COMMAND} -P
${CMAKE_CURRENT_BINARY_DIR}/CMake/cmake_uninstall.cmake)
endif()

View File

@ -1,6 +1,6 @@
COPYRIGHT AND PERMISSION NOTICE COPYRIGHT AND PERMISSION NOTICE
Copyright (c) 1996 - 2017, Daniel Stenberg, <daniel@haxx.se>, and many Copyright (c) 1996 - 2018, Daniel Stenberg, <daniel@haxx.se>, and many
contributors, see the THANKS file. contributors, see the THANKS file.
All rights reserved. All rights reserved.

View File

@ -126,15 +126,6 @@ if test ! -z $SDK32; then
pwd pwd
lipo libcurl.framework/${FRAMEWORK_VERSION}/libcurl32 libcurl.framework/${FRAMEWORK_VERSION}/libcurl64 -create -output libcurl.framework/${FRAMEWORK_VERSION}/libcurl lipo libcurl.framework/${FRAMEWORK_VERSION}/libcurl32 libcurl.framework/${FRAMEWORK_VERSION}/libcurl64 -create -output libcurl.framework/${FRAMEWORK_VERSION}/libcurl
rm libcurl.framework/${FRAMEWORK_VERSION}/libcurl32 libcurl.framework/${FRAMEWORK_VERSION}/libcurl64 rm libcurl.framework/${FRAMEWORK_VERSION}/libcurl32 libcurl.framework/${FRAMEWORK_VERSION}/libcurl64
cp libcurl.framework/${FRAMEWORK_VERSION}/Headers/curl/curlbuild.h libcurl.framework/${FRAMEWORK_VERSION}/Headers/curl/curlbuild32.h
cp include/curl/curlbuild.h libcurl.framework/${FRAMEWORK_VERSION}/Headers/curl/curlbuild64.h
cat >libcurl.framework/${FRAMEWORK_VERSION}/Headers/curl/curlbuild.h <<EOF
#ifdef __LP64__
#include "curl/curlbuild64.h"
#else
#include "curl/curlbuild32.h"
#endif
EOF
fi fi
pwd pwd

View File

@ -27,10 +27,11 @@ ACLOCAL_AMFLAGS = -I m4
CMAKE_DIST = CMakeLists.txt CMake/CMakeConfigurableFile.in \ CMAKE_DIST = CMakeLists.txt CMake/CMakeConfigurableFile.in \
CMake/CurlTests.c CMake/FindGSS.cmake CMake/OtherTests.cmake \ CMake/CurlTests.c CMake/FindGSS.cmake CMake/OtherTests.cmake \
CMake/Platforms/WindowsCache.cmake CMake/Utilities.cmake \ CMake/Platforms/WindowsCache.cmake CMake/Utilities.cmake \
include/curl/curlbuild.h.cmake CMake/Macros.cmake \ CMake/Macros.cmake \
CMake/CurlSymbolHiding.cmake CMake/FindCARES.cmake \ CMake/CurlSymbolHiding.cmake CMake/FindCARES.cmake \
CMake/FindLibSSH2.cmake CMake/FindNGHTTP2.cmake \ CMake/FindLibSSH2.cmake CMake/FindNGHTTP2.cmake \
CMake/FindMbedTLS.cmake CMake/FindMbedTLS.cmake CMake/cmake_uninstall.cmake.in \
CMake/curl-config.cmake
VC6_LIBTMPL = projects/Windows/VC6/lib/libcurl.tmpl VC6_LIBTMPL = projects/Windows/VC6/lib/libcurl.tmpl
VC6_LIBDSP = projects/Windows/VC6/lib/libcurl.dsp.dist VC6_LIBDSP = projects/Windows/VC6/lib/libcurl.dsp.dist
@ -95,6 +96,13 @@ VC14_SRCTMPL = projects/Windows/VC14/src/curl.tmpl
VC14_SRCVCXPROJ = projects/Windows/VC14/src/curl.vcxproj.dist VC14_SRCVCXPROJ = projects/Windows/VC14/src/curl.vcxproj.dist
VC14_SRCVCXPROJ_DEPS = $(VC14_SRCTMPL) Makefile.am src/Makefile.inc VC14_SRCVCXPROJ_DEPS = $(VC14_SRCTMPL) Makefile.am src/Makefile.inc
VC15_LIBTMPL = projects/Windows/VC15/lib/libcurl.tmpl
VC15_LIBVCXPROJ = projects/Windows/VC15/lib/libcurl.vcxproj.dist
VC15_LIBVCXPROJ_DEPS = $(VC15_LIBTMPL) Makefile.am lib/Makefile.inc
VC15_SRCTMPL = projects/Windows/VC15/src/curl.tmpl
VC15_SRCVCXPROJ = projects/Windows/VC15/src/curl.vcxproj.dist
VC15_SRCVCXPROJ_DEPS = $(VC15_SRCTMPL) Makefile.am src/Makefile.inc
VC_DIST = projects/README \ VC_DIST = projects/README \
projects/build-openssl.bat \ projects/build-openssl.bat \
projects/build-wolfssl.bat \ projects/build-wolfssl.bat \
@ -134,6 +142,11 @@ VC_DIST = projects/README \
projects/Windows/VC14/lib/libcurl.vcxproj.filters \ projects/Windows/VC14/lib/libcurl.vcxproj.filters \
projects/Windows/VC14/src/curl.sln \ projects/Windows/VC14/src/curl.sln \
projects/Windows/VC14/src/curl.vcxproj.filters \ projects/Windows/VC14/src/curl.vcxproj.filters \
projects/Windows/VC15/curl-all.sln \
projects/Windows/VC15/lib/libcurl.sln \
projects/Windows/VC15/lib/libcurl.vcxproj.filters \
projects/Windows/VC15/src/curl.sln \
projects/Windows/VC15/src/curl.vcxproj.filters \
projects/generate.bat \ projects/generate.bat \
projects/wolfssl_options.h \ projects/wolfssl_options.h \
projects/wolfssl_override.props projects/wolfssl_override.props
@ -150,12 +163,12 @@ CLEANFILES = $(VC6_LIBDSP) $(VC6_SRCDSP) $(VC7_LIBVCPROJ) $(VC7_SRCVCPROJ) \
$(VC71_LIBVCPROJ) $(VC71_SRCVCPROJ) $(VC8_LIBVCPROJ) $(VC8_SRCVCPROJ) \ $(VC71_LIBVCPROJ) $(VC71_SRCVCPROJ) $(VC8_LIBVCPROJ) $(VC8_SRCVCPROJ) \
$(VC9_LIBVCPROJ) $(VC9_SRCVCPROJ) $(VC10_LIBVCXPROJ) $(VC10_SRCVCXPROJ) \ $(VC9_LIBVCPROJ) $(VC9_SRCVCPROJ) $(VC10_LIBVCXPROJ) $(VC10_SRCVCXPROJ) \
$(VC11_LIBVCXPROJ) $(VC11_SRCVCXPROJ) $(VC12_LIBVCXPROJ) $(VC12_SRCVCXPROJ) \ $(VC11_LIBVCXPROJ) $(VC11_SRCVCXPROJ) $(VC12_LIBVCXPROJ) $(VC12_SRCVCXPROJ) \
$(VC14_LIBVCXPROJ) $(VC14_SRCVCXPROJ) $(VC14_LIBVCXPROJ) $(VC14_SRCVCXPROJ) $(VC15_LIBVCXPROJ) $(VC15_SRCVCXPROJ)
bin_SCRIPTS = curl-config bin_SCRIPTS = curl-config
SUBDIRS = lib docs src include SUBDIRS = lib src
DIST_SUBDIRS = $(SUBDIRS) tests packages scripts DIST_SUBDIRS = $(SUBDIRS) tests packages scripts include docs
pkgconfigdir = $(libdir)/pkgconfig pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = libcurl.pc pkgconfig_DATA = libcurl.pc
@ -170,7 +183,7 @@ dist-hook:
(distit=`find $(srcdir) -name "*.dist" | grep -v ./ares/`; \ (distit=`find $(srcdir) -name "*.dist" | grep -v ./ares/`; \
for file in $$distit; do \ for file in $$distit; do \
strip=`echo $$file | sed -e s/^$(srcdir)// -e s/\.dist//`; \ strip=`echo $$file | sed -e s/^$(srcdir)// -e s/\.dist//`; \
cp $$file $(distdir)$$strip; \ cp -p $$file $(distdir)$$strip; \
done) done)
html: html:
@ -216,15 +229,6 @@ examples:
check-docs: check-docs:
@(cd docs/libcurl; $(MAKE) check) @(cd docs/libcurl; $(MAKE) check)
# This is a hook to have 'make clean' also clean up the docs and the tests
# dir. The extra check for the Makefiles being present is necessary because
# 'make distcheck' will make clean first in these directories _before_ it runs
# this hook.
clean-local:
@(if test -f tests/Makefile; then cd tests; $(MAKE) clean; fi)
@(if test -f docs/Makefile; then cd docs; $(MAKE) clean; fi)
#
# Build source and binary rpms. For rpm-3.0 and above, the ~/.rpmmacros # Build source and binary rpms. For rpm-3.0 and above, the ~/.rpmmacros
# must contain the following line: # must contain the following line:
# %_topdir /home/loic/local/rpm # %_topdir /home/loic/local/rpm
@ -276,11 +280,13 @@ cygwinbin:
install-data-hook: install-data-hook:
cd include && $(MAKE) install cd include && $(MAKE) install
cd docs && $(MAKE) install cd docs && $(MAKE) install
cd docs/libcurl && $(MAKE) install
# We extend the standard uninstall with a custom hook: # We extend the standard uninstall with a custom hook:
uninstall-hook: uninstall-hook:
cd include && $(MAKE) uninstall cd include && $(MAKE) uninstall
cd docs && $(MAKE) uninstall cd docs && $(MAKE) uninstall
cd docs/libcurl && $(MAKE) uninstall
ca-bundle: lib/mk-ca-bundle.pl ca-bundle: lib/mk-ca-bundle.pl
@echo "generating a fresh ca-bundle.crt" @echo "generating a fresh ca-bundle.crt"
@ -304,7 +310,8 @@ vc-ide: $(VC6_LIBDSP_DEPS) $(VC6_SRCDSP_DEPS) $(VC7_LIBVCPROJ_DEPS) \
$(VC8_LIBVCPROJ_DEPS) $(VC8_SRCVCPROJ_DEPS) $(VC9_LIBVCPROJ_DEPS) \ $(VC8_LIBVCPROJ_DEPS) $(VC8_SRCVCPROJ_DEPS) $(VC9_LIBVCPROJ_DEPS) \
$(VC9_SRCVCPROJ_DEPS) $(VC10_LIBVCXPROJ_DEPS) $(VC10_SRCVCXPROJ_DEPS) \ $(VC9_SRCVCPROJ_DEPS) $(VC10_LIBVCXPROJ_DEPS) $(VC10_SRCVCXPROJ_DEPS) \
$(VC11_LIBVCXPROJ_DEPS) $(VC11_SRCVCXPROJ_DEPS) $(VC12_LIBVCXPROJ_DEPS) \ $(VC11_LIBVCXPROJ_DEPS) $(VC11_SRCVCXPROJ_DEPS) $(VC12_LIBVCXPROJ_DEPS) \
$(VC12_SRCVCXPROJ_DEPS) $(VC14_LIBVCXPROJ_DEPS) $(VC14_SRCVCXPROJ_DEPS) $(VC12_SRCVCXPROJ_DEPS) $(VC14_LIBVCXPROJ_DEPS) $(VC14_SRCVCXPROJ_DEPS) \
$(VC15_LIBVCXPROJ_DEPS) $(VC15_SRCVCXPROJ_DEPS)
@(win32_lib_srcs='$(LIB_CFILES)'; \ @(win32_lib_srcs='$(LIB_CFILES)'; \
win32_lib_hdrs='$(LIB_HFILES) config-win32.h'; \ win32_lib_hdrs='$(LIB_HFILES) config-win32.h'; \
win32_lib_rc='$(LIB_RCFILES)'; \ win32_lib_rc='$(LIB_RCFILES)'; \
@ -614,4 +621,24 @@ function gen_element(type, dir, file)\
-v src_rc="$$win32_src_rc" \ -v src_rc="$$win32_src_rc" \
-v src_x_srcs="$$sorted_src_x_srcs" \ -v src_x_srcs="$$sorted_src_x_srcs" \
-v src_x_hdrs="$$sorted_src_x_hdrs" \ -v src_x_hdrs="$$sorted_src_x_hdrs" \
"$$awk_code" $(srcdir)/$(VC14_SRCTMPL) > $(VC14_SRCVCXPROJ) || { exit 1; };) "$$awk_code" $(srcdir)/$(VC14_SRCTMPL) > $(VC14_SRCVCXPROJ) || { exit 1; }; \
\
echo "generating '$(VC15_LIBVCXPROJ)'"; \
awk -v proj_type=vcxproj \
-v lib_srcs="$$sorted_lib_srcs" \
-v lib_hdrs="$$sorted_lib_hdrs" \
-v lib_rc="$$win32_lib_rc" \
-v lib_vauth_srcs="$$sorted_lib_vauth_srcs" \
-v lib_vauth_hdrs="$$sorted_lib_vauth_hdrs" \
-v lib_vtls_srcs="$$sorted_lib_vtls_srcs" \
-v lib_vtls_hdrs="$$sorted_lib_vtls_hdrs" \
"$$awk_code" $(srcdir)/$(VC15_LIBTMPL) > $(VC15_LIBVCXPROJ) || { exit 1; }; \
\
echo "generating '$(VC15_SRCVCXPROJ)'"; \
awk -v proj_type=vcxproj \
-v src_srcs="$$sorted_src_srcs" \
-v src_hdrs="$$sorted_src_hdrs" \
-v src_rc="$$win32_src_rc" \
-v src_x_srcs="$$sorted_src_x_srcs" \
-v src_x_hdrs="$$sorted_src_x_hdrs" \
"$$awk_code" $(srcdir)/$(VC15_SRCTMPL) > $(VC15_SRCVCXPROJ) || { exit 1; };)

View File

@ -1,7 +1,7 @@
# Makefile.in generated by automake 1.15 from Makefile.am. # Makefile.in generated by automake 1.15.1 from Makefile.am.
# @configure_input@ # @configure_input@
# Copyright (C) 1994-2014 Free Software Foundation, Inc. # Copyright (C) 1994-2017 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation # This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it, # gives unlimited permission to copy and/or distribute it,
@ -43,7 +43,7 @@
# | (__| |_| | _ <| |___ # | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____| # \___|\___/|_| \_\_____|
# #
# Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al. # Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, et al.
# #
# This software is licensed as described in the file COPYING, which # This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms # you should have received as part of this distribution. The terms
@ -169,8 +169,7 @@ DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \
am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
configure.lineno config.status.lineno configure.lineno config.status.lineno
mkinstalldirs = $(install_sh) -d mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/lib/curl_config.h \ CONFIG_HEADER = $(top_builddir)/lib/curl_config.h
$(top_builddir)/include/curl/curlbuild.h
CONFIG_CLEAN_FILES = curl-config libcurl.pc CONFIG_CLEAN_FILES = curl-config libcurl.pc
CONFIG_CLEAN_VPATH_FILES = CONFIG_CLEAN_VPATH_FILES =
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
@ -319,8 +318,11 @@ CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@ CFLAGS = @CFLAGS@
CFLAG_CURL_SYMBOL_HIDING = @CFLAG_CURL_SYMBOL_HIDING@ CFLAG_CURL_SYMBOL_HIDING = @CFLAG_CURL_SYMBOL_HIDING@
CODE_COVERAGE_CFLAGS = @CODE_COVERAGE_CFLAGS@ CODE_COVERAGE_CFLAGS = @CODE_COVERAGE_CFLAGS@
CODE_COVERAGE_CPPFLAGS = @CODE_COVERAGE_CPPFLAGS@
CODE_COVERAGE_CXXFLAGS = @CODE_COVERAGE_CXXFLAGS@
CODE_COVERAGE_ENABLED = @CODE_COVERAGE_ENABLED@ CODE_COVERAGE_ENABLED = @CODE_COVERAGE_ENABLED@
CODE_COVERAGE_LDFLAGS = @CODE_COVERAGE_LDFLAGS@ CODE_COVERAGE_LDFLAGS = @CODE_COVERAGE_LDFLAGS@
CODE_COVERAGE_LIBS = @CODE_COVERAGE_LIBS@
CONFIGURE_OPTIONS = @CONFIGURE_OPTIONS@ CONFIGURE_OPTIONS = @CONFIGURE_OPTIONS@
CPP = @CPP@ CPP = @CPP@
CPPFLAGS = @CPPFLAGS@ CPPFLAGS = @CPPFLAGS@
@ -346,7 +348,9 @@ CURL_DISABLE_TFTP = @CURL_DISABLE_TFTP@
CURL_LT_SHLIB_VERSIONED_FLAVOUR = @CURL_LT_SHLIB_VERSIONED_FLAVOUR@ CURL_LT_SHLIB_VERSIONED_FLAVOUR = @CURL_LT_SHLIB_VERSIONED_FLAVOUR@
CURL_NETWORK_AND_TIME_LIBS = @CURL_NETWORK_AND_TIME_LIBS@ CURL_NETWORK_AND_TIME_LIBS = @CURL_NETWORK_AND_TIME_LIBS@
CURL_NETWORK_LIBS = @CURL_NETWORK_LIBS@ CURL_NETWORK_LIBS = @CURL_NETWORK_LIBS@
CURL_WITH_MULTI_SSL = @CURL_WITH_MULTI_SSL@
CYGPATH_W = @CYGPATH_W@ CYGPATH_W = @CYGPATH_W@
DEFAULT_SSL_BACKEND = @DEFAULT_SSL_BACKEND@
DEFS = @DEFS@ DEFS = @DEFS@
DEPDIR = @DEPDIR@ DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@ DLLTOOL = @DLLTOOL@
@ -363,6 +367,7 @@ FGREP = @FGREP@
GCOV = @GCOV@ GCOV = @GCOV@
GENHTML = @GENHTML@ GENHTML = @GENHTML@
GREP = @GREP@ GREP = @GREP@
HAVE_BROTLI = @HAVE_BROTLI@
HAVE_GNUTLS_SRP = @HAVE_GNUTLS_SRP@ HAVE_GNUTLS_SRP = @HAVE_GNUTLS_SRP@
HAVE_LDAP_SSL = @HAVE_LDAP_SSL@ HAVE_LDAP_SSL = @HAVE_LDAP_SSL@
HAVE_LIBZ = @HAVE_LIBZ@ HAVE_LIBZ = @HAVE_LIBZ@
@ -420,6 +425,7 @@ REQUIRE_LIB_DEPS = @REQUIRE_LIB_DEPS@
SED = @SED@ SED = @SED@
SET_MAKE = @SET_MAKE@ SET_MAKE = @SET_MAKE@
SHELL = @SHELL@ SHELL = @SHELL@
SSL_BACKENDS = @SSL_BACKENDS@
SSL_ENABLED = @SSL_ENABLED@ SSL_ENABLED = @SSL_ENABLED@
SSL_LIBS = @SSL_LIBS@ SSL_LIBS = @SSL_LIBS@
STRIP = @STRIP@ STRIP = @STRIP@
@ -432,6 +438,7 @@ USE_DARWINSSL = @USE_DARWINSSL@
USE_GNUTLS = @USE_GNUTLS@ USE_GNUTLS = @USE_GNUTLS@
USE_GNUTLS_NETTLE = @USE_GNUTLS_NETTLE@ USE_GNUTLS_NETTLE = @USE_GNUTLS_NETTLE@
USE_LIBRTMP = @USE_LIBRTMP@ USE_LIBRTMP = @USE_LIBRTMP@
USE_LIBSSH = @USE_LIBSSH@
USE_LIBSSH2 = @USE_LIBSSH2@ USE_LIBSSH2 = @USE_LIBSSH2@
USE_MBEDTLS = @USE_MBEDTLS@ USE_MBEDTLS = @USE_MBEDTLS@
USE_NGHTTP2 = @USE_NGHTTP2@ USE_NGHTTP2 = @USE_NGHTTP2@
@ -505,10 +512,11 @@ ACLOCAL_AMFLAGS = -I m4
CMAKE_DIST = CMakeLists.txt CMake/CMakeConfigurableFile.in \ CMAKE_DIST = CMakeLists.txt CMake/CMakeConfigurableFile.in \
CMake/CurlTests.c CMake/FindGSS.cmake CMake/OtherTests.cmake \ CMake/CurlTests.c CMake/FindGSS.cmake CMake/OtherTests.cmake \
CMake/Platforms/WindowsCache.cmake CMake/Utilities.cmake \ CMake/Platforms/WindowsCache.cmake CMake/Utilities.cmake \
include/curl/curlbuild.h.cmake CMake/Macros.cmake \ CMake/Macros.cmake \
CMake/CurlSymbolHiding.cmake CMake/FindCARES.cmake \ CMake/CurlSymbolHiding.cmake CMake/FindCARES.cmake \
CMake/FindLibSSH2.cmake CMake/FindNGHTTP2.cmake \ CMake/FindLibSSH2.cmake CMake/FindNGHTTP2.cmake \
CMake/FindMbedTLS.cmake CMake/FindMbedTLS.cmake CMake/cmake_uninstall.cmake.in \
CMake/curl-config.cmake
VC6_LIBTMPL = projects/Windows/VC6/lib/libcurl.tmpl VC6_LIBTMPL = projects/Windows/VC6/lib/libcurl.tmpl
VC6_LIBDSP = projects/Windows/VC6/lib/libcurl.dsp.dist VC6_LIBDSP = projects/Windows/VC6/lib/libcurl.dsp.dist
@ -564,6 +572,12 @@ VC14_LIBVCXPROJ_DEPS = $(VC14_LIBTMPL) Makefile.am lib/Makefile.inc
VC14_SRCTMPL = projects/Windows/VC14/src/curl.tmpl VC14_SRCTMPL = projects/Windows/VC14/src/curl.tmpl
VC14_SRCVCXPROJ = projects/Windows/VC14/src/curl.vcxproj.dist VC14_SRCVCXPROJ = projects/Windows/VC14/src/curl.vcxproj.dist
VC14_SRCVCXPROJ_DEPS = $(VC14_SRCTMPL) Makefile.am src/Makefile.inc VC14_SRCVCXPROJ_DEPS = $(VC14_SRCTMPL) Makefile.am src/Makefile.inc
VC15_LIBTMPL = projects/Windows/VC15/lib/libcurl.tmpl
VC15_LIBVCXPROJ = projects/Windows/VC15/lib/libcurl.vcxproj.dist
VC15_LIBVCXPROJ_DEPS = $(VC15_LIBTMPL) Makefile.am lib/Makefile.inc
VC15_SRCTMPL = projects/Windows/VC15/src/curl.tmpl
VC15_SRCVCXPROJ = projects/Windows/VC15/src/curl.vcxproj.dist
VC15_SRCVCXPROJ_DEPS = $(VC15_SRCTMPL) Makefile.am src/Makefile.inc
VC_DIST = projects/README \ VC_DIST = projects/README \
projects/build-openssl.bat \ projects/build-openssl.bat \
projects/build-wolfssl.bat \ projects/build-wolfssl.bat \
@ -603,6 +617,11 @@ VC_DIST = projects/README \
projects/Windows/VC14/lib/libcurl.vcxproj.filters \ projects/Windows/VC14/lib/libcurl.vcxproj.filters \
projects/Windows/VC14/src/curl.sln \ projects/Windows/VC14/src/curl.sln \
projects/Windows/VC14/src/curl.vcxproj.filters \ projects/Windows/VC14/src/curl.vcxproj.filters \
projects/Windows/VC15/curl-all.sln \
projects/Windows/VC15/lib/libcurl.sln \
projects/Windows/VC15/lib/libcurl.vcxproj.filters \
projects/Windows/VC15/src/curl.sln \
projects/Windows/VC15/src/curl.vcxproj.filters \
projects/generate.bat \ projects/generate.bat \
projects/wolfssl_options.h \ projects/wolfssl_options.h \
projects/wolfssl_override.props projects/wolfssl_override.props
@ -619,11 +638,11 @@ CLEANFILES = $(VC6_LIBDSP) $(VC6_SRCDSP) $(VC7_LIBVCPROJ) $(VC7_SRCVCPROJ) \
$(VC71_LIBVCPROJ) $(VC71_SRCVCPROJ) $(VC8_LIBVCPROJ) $(VC8_SRCVCPROJ) \ $(VC71_LIBVCPROJ) $(VC71_SRCVCPROJ) $(VC8_LIBVCPROJ) $(VC8_SRCVCPROJ) \
$(VC9_LIBVCPROJ) $(VC9_SRCVCPROJ) $(VC10_LIBVCXPROJ) $(VC10_SRCVCXPROJ) \ $(VC9_LIBVCPROJ) $(VC9_SRCVCPROJ) $(VC10_LIBVCXPROJ) $(VC10_SRCVCXPROJ) \
$(VC11_LIBVCXPROJ) $(VC11_SRCVCXPROJ) $(VC12_LIBVCXPROJ) $(VC12_SRCVCXPROJ) \ $(VC11_LIBVCXPROJ) $(VC11_SRCVCXPROJ) $(VC12_LIBVCXPROJ) $(VC12_SRCVCXPROJ) \
$(VC14_LIBVCXPROJ) $(VC14_SRCVCXPROJ) $(VC14_LIBVCXPROJ) $(VC14_SRCVCXPROJ) $(VC15_LIBVCXPROJ) $(VC15_SRCVCXPROJ)
bin_SCRIPTS = curl-config bin_SCRIPTS = curl-config
SUBDIRS = lib docs src include SUBDIRS = lib src
DIST_SUBDIRS = $(SUBDIRS) tests packages scripts DIST_SUBDIRS = $(SUBDIRS) tests packages scripts include docs
pkgconfigdir = $(libdir)/pkgconfig pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = libcurl.pc pkgconfig_DATA = libcurl.pc
LIB_VAUTH_CFILES = vauth/vauth.c vauth/cleartext.c vauth/cram.c \ LIB_VAUTH_CFILES = vauth/vauth.c vauth/cleartext.c vauth/cram.c \
@ -651,14 +670,15 @@ LIB_CFILES = file.c timeval.c base64.c hostip.c progress.c formdata.c \
http_digest.c md4.c md5.c http_negotiate.c inet_pton.c strtoofft.c \ http_digest.c md4.c md5.c http_negotiate.c inet_pton.c strtoofft.c \
strerror.c amigaos.c hostasyn.c hostip4.c hostip6.c hostsyn.c \ strerror.c amigaos.c hostasyn.c hostip4.c hostip6.c hostsyn.c \
inet_ntop.c parsedate.c select.c tftp.c splay.c strdup.c socks.c \ inet_ntop.c parsedate.c select.c tftp.c splay.c strdup.c socks.c \
ssh.c curl_addrinfo.c socks_gssapi.c socks_sspi.c \ ssh.c ssh-libssh.c curl_addrinfo.c socks_gssapi.c socks_sspi.c \
curl_sspi.c slist.c nonblock.c curl_memrchr.c imap.c pop3.c smtp.c \ curl_sspi.c slist.c nonblock.c curl_memrchr.c imap.c pop3.c smtp.c \
pingpong.c rtsp.c curl_threads.c warnless.c hmac.c curl_rtmp.c \ pingpong.c rtsp.c curl_threads.c warnless.c hmac.c curl_rtmp.c \
openldap.c curl_gethostname.c gopher.c idn_win32.c \ openldap.c curl_gethostname.c gopher.c idn_win32.c \
http_proxy.c non-ascii.c asyn-ares.c asyn-thread.c curl_gssapi.c \ http_proxy.c non-ascii.c asyn-ares.c asyn-thread.c curl_gssapi.c \
http_ntlm.c curl_ntlm_wb.c curl_ntlm_core.c curl_sasl.c rand.c \ http_ntlm.c curl_ntlm_wb.c curl_ntlm_core.c curl_sasl.c rand.c \
curl_multibyte.c hostcheck.c conncache.c pipeline.c dotdot.c \ curl_multibyte.c hostcheck.c conncache.c pipeline.c dotdot.c \
x509asn1.c http2.c smb.c curl_endian.c curl_des.c system_win32.c x509asn1.c http2.c smb.c curl_endian.c curl_des.c system_win32.c \
mime.c sha256.c setopt.c curl_path.c
LIB_HFILES = arpa_telnet.h netrc.h file.h timeval.h hostip.h progress.h \ LIB_HFILES = arpa_telnet.h netrc.h file.h timeval.h hostip.h progress.h \
formdata.h cookie.h http.h sendf.h ftp.h url.h dict.h if2ip.h \ formdata.h cookie.h http.h sendf.h ftp.h url.h dict.h if2ip.h \
@ -677,7 +697,8 @@ LIB_HFILES = arpa_telnet.h netrc.h file.h timeval.h hostip.h progress.h \
curl_sasl.h curl_multibyte.h hostcheck.h conncache.h \ curl_sasl.h curl_multibyte.h hostcheck.h conncache.h \
curl_setup_once.h multihandle.h setup-vms.h pipeline.h dotdot.h \ curl_setup_once.h multihandle.h setup-vms.h pipeline.h dotdot.h \
x509asn1.h http2.h sigpipe.h smb.h curl_endian.h curl_des.h \ x509asn1.h http2.h sigpipe.h smb.h curl_endian.h curl_des.h \
curl_printf.h system_win32.h rand.h curl_printf.h system_win32.h rand.h mime.h curl_sha256.h setopt.h \
curl_path.h
LIB_RCFILES = libcurl.rc LIB_RCFILES = libcurl.rc
CSOURCES = $(LIB_CFILES) $(LIB_VAUTH_CFILES) $(LIB_VTLS_CFILES) CSOURCES = $(LIB_CFILES) $(LIB_VAUTH_CFILES) $(LIB_VTLS_CFILES)
@ -721,7 +742,6 @@ CURL_CFILES = \
tool_libinfo.c \ tool_libinfo.c \
tool_main.c \ tool_main.c \
tool_metalink.c \ tool_metalink.c \
tool_mfiles.c \
tool_msgs.c \ tool_msgs.c \
tool_operate.c \ tool_operate.c \
tool_operhlp.c \ tool_operhlp.c \
@ -762,7 +782,6 @@ CURL_HFILES = \
tool_libinfo.h \ tool_libinfo.h \
tool_main.h \ tool_main.h \
tool_metalink.h \ tool_metalink.h \
tool_mfiles.h \
tool_msgs.h \ tool_msgs.h \
tool_operate.h \ tool_operate.h \
tool_operhlp.h \ tool_operhlp.h \
@ -1066,7 +1085,7 @@ distdir: $(DISTFILES)
! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
|| chmod -R a+r "$(distdir)" || chmod -R a+r "$(distdir)"
dist-gzip: distdir dist-gzip: distdir
tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz tardir=$(distdir) && $(am__tar) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).tar.gz
$(am__post_remove_distdir) $(am__post_remove_distdir)
dist-bzip2: distdir dist-bzip2: distdir
@ -1092,7 +1111,7 @@ dist-shar: distdir
@echo WARNING: "Support for shar distribution archives is" \ @echo WARNING: "Support for shar distribution archives is" \
"deprecated." >&2 "deprecated." >&2
@echo WARNING: "It will be removed altogether in Automake 2.0" >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2
shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz shar $(distdir) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).shar.gz
$(am__post_remove_distdir) $(am__post_remove_distdir)
dist-zip: distdir dist-zip: distdir
@ -1110,7 +1129,7 @@ dist dist-all:
distcheck: dist distcheck: dist
case '$(DIST_ARCHIVES)' in \ case '$(DIST_ARCHIVES)' in \
*.tar.gz*) \ *.tar.gz*) \
GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).tar.gz | $(am__untar) ;;\
*.tar.bz2*) \ *.tar.bz2*) \
bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
*.tar.lz*) \ *.tar.lz*) \
@ -1120,7 +1139,7 @@ distcheck: dist
*.tar.Z*) \ *.tar.Z*) \
uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
*.shar.gz*) \ *.shar.gz*) \
GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\
*.zip*) \ *.zip*) \
unzip $(distdir).zip ;;\ unzip $(distdir).zip ;;\
esac esac
@ -1230,7 +1249,7 @@ maintainer-clean-generic:
@echo "it deletes files that may require special tools to rebuild." @echo "it deletes files that may require special tools to rebuild."
clean: clean-recursive clean: clean-recursive
clean-am: clean-generic clean-libtool clean-local mostlyclean-am clean-am: clean-generic clean-libtool mostlyclean-am
distclean: distclean-recursive distclean: distclean-recursive
-rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f $(am__CONFIG_DISTCLEAN_FILES)
@ -1301,9 +1320,9 @@ uninstall-am: uninstall-binSCRIPTS uninstall-pkgconfigDATA
.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \
am--refresh check check-am clean clean-cscope clean-generic \ am--refresh check check-am clean clean-cscope clean-generic \
clean-libtool clean-local cscope cscopelist-am ctags ctags-am \ clean-libtool cscope cscopelist-am ctags ctags-am dist \
dist dist-all dist-bzip2 dist-gzip dist-hook dist-lzip \ dist-all dist-bzip2 dist-gzip dist-hook dist-lzip dist-shar \
dist-shar dist-tarZ dist-xz dist-zip distcheck distclean \ dist-tarZ dist-xz dist-zip distcheck distclean \
distclean-generic distclean-libtool distclean-tags \ distclean-generic distclean-libtool distclean-tags \
distcleancheck distdir distuninstallcheck dvi dvi-am html \ distcleancheck distdir distuninstallcheck dvi dvi-am html \
html-am info info-am install install-am install-binSCRIPTS \ html-am info info-am install install-am install-binSCRIPTS \
@ -1329,7 +1348,7 @@ dist-hook:
(distit=`find $(srcdir) -name "*.dist" | grep -v ./ares/`; \ (distit=`find $(srcdir) -name "*.dist" | grep -v ./ares/`; \
for file in $$distit; do \ for file in $$distit; do \
strip=`echo $$file | sed -e s/^$(srcdir)// -e s/\.dist//`; \ strip=`echo $$file | sed -e s/^$(srcdir)// -e s/\.dist//`; \
cp $$file $(distdir)$$strip; \ cp -p $$file $(distdir)$$strip; \
done) done)
html: html:
@ -1370,15 +1389,6 @@ examples:
check-docs: check-docs:
@(cd docs/libcurl; $(MAKE) check) @(cd docs/libcurl; $(MAKE) check)
# This is a hook to have 'make clean' also clean up the docs and the tests
# dir. The extra check for the Makefiles being present is necessary because
# 'make distcheck' will make clean first in these directories _before_ it runs
# this hook.
clean-local:
@(if test -f tests/Makefile; then cd tests; $(MAKE) clean; fi)
@(if test -f docs/Makefile; then cd docs; $(MAKE) clean; fi)
#
# Build source and binary rpms. For rpm-3.0 and above, the ~/.rpmmacros # Build source and binary rpms. For rpm-3.0 and above, the ~/.rpmmacros
# must contain the following line: # must contain the following line:
# %_topdir /home/loic/local/rpm # %_topdir /home/loic/local/rpm
@ -1430,11 +1440,13 @@ cygwinbin:
install-data-hook: install-data-hook:
cd include && $(MAKE) install cd include && $(MAKE) install
cd docs && $(MAKE) install cd docs && $(MAKE) install
cd docs/libcurl && $(MAKE) install
# We extend the standard uninstall with a custom hook: # We extend the standard uninstall with a custom hook:
uninstall-hook: uninstall-hook:
cd include && $(MAKE) uninstall cd include && $(MAKE) uninstall
cd docs && $(MAKE) uninstall cd docs && $(MAKE) uninstall
cd docs/libcurl && $(MAKE) uninstall
ca-bundle: lib/mk-ca-bundle.pl ca-bundle: lib/mk-ca-bundle.pl
@echo "generating a fresh ca-bundle.crt" @echo "generating a fresh ca-bundle.crt"
@ -1458,7 +1470,8 @@ vc-ide: $(VC6_LIBDSP_DEPS) $(VC6_SRCDSP_DEPS) $(VC7_LIBVCPROJ_DEPS) \
$(VC8_LIBVCPROJ_DEPS) $(VC8_SRCVCPROJ_DEPS) $(VC9_LIBVCPROJ_DEPS) \ $(VC8_LIBVCPROJ_DEPS) $(VC8_SRCVCPROJ_DEPS) $(VC9_LIBVCPROJ_DEPS) \
$(VC9_SRCVCPROJ_DEPS) $(VC10_LIBVCXPROJ_DEPS) $(VC10_SRCVCXPROJ_DEPS) \ $(VC9_SRCVCPROJ_DEPS) $(VC10_LIBVCXPROJ_DEPS) $(VC10_SRCVCXPROJ_DEPS) \
$(VC11_LIBVCXPROJ_DEPS) $(VC11_SRCVCXPROJ_DEPS) $(VC12_LIBVCXPROJ_DEPS) \ $(VC11_LIBVCXPROJ_DEPS) $(VC11_SRCVCXPROJ_DEPS) $(VC12_LIBVCXPROJ_DEPS) \
$(VC12_SRCVCXPROJ_DEPS) $(VC14_LIBVCXPROJ_DEPS) $(VC14_SRCVCXPROJ_DEPS) $(VC12_SRCVCXPROJ_DEPS) $(VC14_LIBVCXPROJ_DEPS) $(VC14_SRCVCXPROJ_DEPS) \
$(VC15_LIBVCXPROJ_DEPS) $(VC15_SRCVCXPROJ_DEPS)
@(win32_lib_srcs='$(LIB_CFILES)'; \ @(win32_lib_srcs='$(LIB_CFILES)'; \
win32_lib_hdrs='$(LIB_HFILES) config-win32.h'; \ win32_lib_hdrs='$(LIB_HFILES) config-win32.h'; \
win32_lib_rc='$(LIB_RCFILES)'; \ win32_lib_rc='$(LIB_RCFILES)'; \
@ -1768,7 +1781,27 @@ function gen_element(type, dir, file)\
-v src_rc="$$win32_src_rc" \ -v src_rc="$$win32_src_rc" \
-v src_x_srcs="$$sorted_src_x_srcs" \ -v src_x_srcs="$$sorted_src_x_srcs" \
-v src_x_hdrs="$$sorted_src_x_hdrs" \ -v src_x_hdrs="$$sorted_src_x_hdrs" \
"$$awk_code" $(srcdir)/$(VC14_SRCTMPL) > $(VC14_SRCVCXPROJ) || { exit 1; };) "$$awk_code" $(srcdir)/$(VC14_SRCTMPL) > $(VC14_SRCVCXPROJ) || { exit 1; }; \
\
echo "generating '$(VC15_LIBVCXPROJ)'"; \
awk -v proj_type=vcxproj \
-v lib_srcs="$$sorted_lib_srcs" \
-v lib_hdrs="$$sorted_lib_hdrs" \
-v lib_rc="$$win32_lib_rc" \
-v lib_vauth_srcs="$$sorted_lib_vauth_srcs" \
-v lib_vauth_hdrs="$$sorted_lib_vauth_hdrs" \
-v lib_vtls_srcs="$$sorted_lib_vtls_srcs" \
-v lib_vtls_hdrs="$$sorted_lib_vtls_hdrs" \
"$$awk_code" $(srcdir)/$(VC15_LIBTMPL) > $(VC15_LIBVCXPROJ) || { exit 1; }; \
\
echo "generating '$(VC15_SRCVCXPROJ)'"; \
awk -v proj_type=vcxproj \
-v src_srcs="$$sorted_src_srcs" \
-v src_hdrs="$$sorted_src_hdrs" \
-v src_rc="$$win32_src_rc" \
-v src_x_srcs="$$sorted_src_x_srcs" \
-v src_x_hdrs="$$sorted_src_x_hdrs" \
"$$awk_code" $(srcdir)/$(VC15_SRCTMPL) > $(VC15_SRCVCXPROJ) || { exit 1; };)
# Tell versions [3.59,3.63) of GNU make to not export all variables. # Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded. # Otherwise a system limit (for SysV at least) may be exceeded.

View File

@ -1,132 +1,100 @@
Curl and libcurl 7.54.1 Curl and libcurl 7.58.0
Public curl releases: 166 Public curl releases: 172
Command line options: 207 Command line options: 211
curl_easy_setopt() options: 245 curl_easy_setopt() options: 249
Public functions in libcurl: 61 Public functions in libcurl: 74
Contributors: 1571 Contributors: 1685
This release includes the following changes: This release includes the following changes:
o curl: show the libcurl release date in --version output [32] o new libssh-powered SSH SCP/SFTP back-end
o curl-config: add --ssl-backends [10]
This release includes the following bugfixes: This release includes the following bugfixes:
o CVE-2017-9502: file: URL buffer overflow [65] o http2: fix incorrect trailer buffer size [40]
o openssl: fix memory leak in servercert o http: prevent custom Authorization headers in redirects [55]
o tests: remove the html and PDF versions from the tarball o travis: add boringssl build [1]
o mbedtls: enable NTLM (& SMB) even if MD4 support is unavailable o examples/xmlstream.c: don't switch off CURL_GLOBAL_SSL [2]
o typecheck-gcc: handle function pointers properly [1] o SSL: Avoid magic allocation of SSL backend specific data [3]
o llist: no longer uses malloc [2] o lib: don't export all symbols, just everything curl_* [4]
o gnutls: removed some code when --disable-verbose is configured o libssh2: send the correct CURLE error code on scp file not found
o lib: fix maybe-uninitialized warnings o libssh2: return CURLE_UPLOAD_FAILED on failure to upload
o multi: clarify condition in curl_multi_wait [3] o openssl: enable pkcs12 in boringssl builds [5]
o schannel: Don't treat encrypted partial record as pending data [4] o libssh2: remove dead code from SSH_SFTP_QUOTE [6]
o configure: fix the -ldl check for openssl, add -lpthread check [5] o sasl_getmesssage: make sure we have a long enough string to pass [7]
o configure: accept -Og and -Ofast GCC flags [6] o conncache: fix several lock issues [8]
o Makefile: avoid use of GNU-specific form of $< [7] o threaded-shared-conn.c: new example
o if2ip: fix -Wcast-align warning o conncache: only allow multiplexing within same multi handle [9]
o configure: stop prepending to LDFLAGS, CPPFLAGS [8] o configure: check for netinet/in6.h [11]
o curl: set a 100K buffer size by default [9] o URL: tolerate backslash after drive letter for FILE: [12]
o typecheck-gcc: fix _curl_is_slist_info [10] o openldap: add commented out debug possibilities [13]
o nss: do not leak PKCS #11 slot while loading a key [11] o include: get netinet/in.h before linux/tcp.h [14]
o nss: load libnssckbi.so if no other trust is specified [12] o CONNECT: keep close connection flag in http_connect_state struct [15]
o examples: ftpuploadfrommem.c [13] o BINDINGS: another PostgreSQL client
o url: declare get_protocol_family() static [14] o curl: limit -# update frequency for unknown total size [16]
o examples/cookie_interface.c: changed to example.com o configure: add AX_CODE_COVERAGE only if using gcc [17]
o test1443: test --remote-time o curl.h: remove incorrect comment about ERRORBUFFER
o curl: use utimes instead of obsolescent utime when available o openssl: improve data-pending check for https proxy [18]
o url: fixed a memory leak on OOM while setting CURLOPT_BUFFERSIZE o curl: remove __EMX__ #ifdefs [19]
o curl_rtmp: fix missing-variable-declarations warnings o CURLOPT_PRIVATE.3: fix grammar [20]
o tests: fixed OOM handling of unit tests to abort test o sftp: allow quoted commands to use relative paths [21]
o curl_setup: Ensure no more than one IDN lib is enabled [15] o CURLOPT_DNS_CACHE_TIMEOUT.3: see also CURLOPT_RESOLVE
o tool: Fix missing prototype warnings for CURL_DOES_CONVERSIONS [16] o RESOLVE: output verbose text when trying to set a duplicate name
o CURLOPT_BUFFERSIZE: 1024 bytes is now the minimum size [17] o openssl: Disable file buffering for Win32 SSLKEYLOGFILE [22]
o curl: non-boolean command line args reject --no- prefixes [18] o multi_done: prune DNS cache [23]
o telnet: Write full buffer instead of byte-by-byte [19] o tests: update .gitignore for libtests
o typecheck-gcc: add missing string options [20] o tests: mark data files as non-executable in git
o typecheck-gcc: add support for CURLINFO_SOCKET [21] o CURLOPT_DNS_LOCAL_IP4.3: fixed the "SEE ALSO" to not self-reference
o opt man pages: they all have examples now o curl.1: documented two missing valid exit codes
o curl_setup_once: use SEND_QUAL_ARG2 for swrite [22] o curl.1: mention http:// and https:// as valid proxy prefixes
o test557: set a known good numeric locale o vtls: replaced getenv() with curl_getenv() [24]
o schannel: return a more specific error code for SEC_E_UNTRUSTED_ROOT o setopt: less *or equal* than INT_MAX/1000 should be fine [25]
o tests/server: make string literals const o examples/smtp-mail.c: use separate defines for options and mail
o runtests: use -R for random order [23] o curl: support >256 bytes warning messsages [26]
o unit1305: fix compiler warning o conncache: fix a return code
o curl_slist_append.3: clarify a NULL input creates a new list o krb5: fix a potential access of uninitialized memory
o tests/server: run checksrc by default in debug-builds o rand: add a clang-analyzer work-around
o tests: fix -Wcast-qual warnings o CURLOPT_READFUNCTION.3: refer to argument with correct name [27]
o runtests.pl: simplify the datacheck read section o brotli: allow compiling with version 0.6.0
o curl: remove --environment and tool_writeenv.c [24] o content_encoding: rework zlib_inflate [28]
o buildconf: fix hang on IRIX [25] o curl_easy_reset: release mime-related data [29]
o tftp: silence bad-function-cast warning o examples/rtsp: fix error handling macros [30]
o asyn-thread: fix unused macro warnings o build-openssl.bat: Added support for VC15
o tool_parsecfg: fix -Wcast-qual warning o build-wolfssl.bat: Added support for VC15
o sendrecv: fix MinGW-w64 warning o build: Added Visual Studio 2017 project files
o test537: use correct variable type [26] o winbuild: Added support for VC15
o rand: treat fake entropy the same regardless of endianness [27] o curl: Support size modifiers for --max-filesize [32]
o curl: generate the --help output [28] o examples/cacertinmem: ignore cert-already-exists error [33]
o tests: removed redundant --trace-ascii arguments o brotli: data at the end of content can be lost [34]
o multi: assign IDs to all timers and make each timer singleton o curl_version_info.3: call the argument 'age' [35]
o multi: use a fixed array of timers instead of malloc [29] o openssl: fix memory leak of SSLKEYLOGFILE filename
o mbedtls: Support server renegotiation request [30] o build: remove HAVE_LIMITS_H check [36]
o pipeline: fix mistakenly trying to pipeline POSTs [31] o --mail-rcpt: fix short-text description
o lib510: don't write past the end of the buffer if it's too small o scripts: allow all perl scripts to be run directly [37]
o CURLOPT_HTTPPROXYTUNNEL.3: clarify, add example o progress: calculate transfer speed on milliseconds if possible [38]
o SecureTransport/DarwinSSL: Implement public key pinning [33] o system.h: check __LONG_MAX__ for defining curl_off_t [31]
o curl.1: clarify --config o easy: fix connection ownership in curl_easy_pause [39]
o curl_sasl: fix build error with CURL_DISABLE_CRYPTO_AUTH + USE_NTLM [34] o setopt: reintroduce non-static Curl_vsetopt() for OS400 support [41]
o darwinssl: Fix exception when processing a client-side certificate [35] o setopt: fix SSLVERSION to allow CURL_SSLVERSION_MAX_ values [42]
o curl.1: mention --oauth2-bearer's <token> argument o configure.ac: append extra linker flags instead of prepending them [43]
o mkhelp.pl: do not add current time into curl binary [36] o HTTP: bail out on negative Content-Length: values [44]
o asiohiper.cpp / evhiperfifo.c: deal with negative timerfunction input [37] o docs: comment about CURLE_READ_ERROR returned by curl_mime_filedata
o ssh: fix memory leak in disconnect due to timeout [38] o mime: clone mime tree upon easy handle duplication [45]
o tests: stabilize test 1034 [39] o openssl: enable SSLKEYLOGFILE support by default [46]
o cmake: auto detection of CURL_CA_BUNDLE/CURL_CA_PATH [40] o smtp/pop3/imap_get_message: decrease the data length too... [47]
o assert: avoid, use DEBUGASSERT instead [41] o CURLOPT_TCP_NODELAY.3: fix typo [48]
o LDAP: using ldap_bind_s on Windows with methods [42] o SMB: fix numeric constant suffix and variable types [49]
o redirect: store the "would redirect to" URL when max redirs is reached [43] o ftp-wildcard: fix matching an empty string with "*[^a]" [50]
o winbuild: fix the nghttp2 build [44] o curl_fnmatch: only allow 5 '*' sections in a single pattern
o examples: fix -Wimplicit-fallthrough warnings o openssl: fix potential memory leak in SSLKEYLOGFILE logic
o time: fix type conversions and compiler warnings [45] o SSH: Fix state machine for ssh-agent authentication [51]
o mbedtls: fix variable shadow warning o examples/url2file.c: add missing curl_global_cleanup() call [52]
o test557: fix ubsan runtime error due to int left shift [46] o http2: don't close connection when single transfer is stopped [53]
o transfer: init the infilesize from the postfields [47] o libcurl-env.3: first version
o docs: clarify NO_PROXY further [48] o curl: progress bar refresh, get width using ioctl() [54]
o build-wolfssl: Sync config with wolfSSL 3.11 o CONNECT_TO: fail attempt to set an IPv6 numerical without IPv6 support [56]
o curl-compilers.m4: enable -Wshift-sign-overflow for clang [49]
o example/externalsocket.c: make it use CLOSESOCKETFUNCTION too
o lib574.c: use correct callback proto
o lib583: fix compiler warning
o curl-compilers.m4: fix compiler_num for clang [50]
o typecheck-gcc.h: separate getinfo slist checks from other pointers [51]
o typecheck-gcc.h: check CURLINFO_TLS_SSL_PTR and CURLINFO_TLS_SESSION
o typecheck-gcc.h: check CURLINFO_CERTINFO [52]
o build: provide easy code coverage measuring [53]
o test1537: dedicated tests of the URL (un)escape API calls [54]
o curl_endian: remove unused functions [55]
o test1538: verify the libcurl strerror API calls
o MD(4|5): silence cast-align clang warning
o dedotdot: fixed output for ".." and "." only input [56]
o cyassl: define build macros before including ssl.h [57]
o updatemanpages.pl: error out on too old git version
o curl_sasl: fix unused-variable warning
o x509asn1: fix implicit-fallthrough warning with GCC 7
o libtest: fix implicit-fallthrough warnings with GCC 7
o BINDINGS: add Ring binding [58]
o curl_ntlm_core: pass unsigned char to toupper
o test1262: verify ftp download with -z for "if older than this"
o test1521: test all curl_easy_setopt options [59]
o typecheck-gcc: allow CURLOPT_STDERR to be NULL too
o metalink: remove unused printf() argument
o file: make speedcheck use current time for checks [60]
o configure: fix link with librtmp when specifying path [61]
o examples/multi-uv.c: fix deprecated symbol [62]
o cmake: Fix inconsistency regarding mbed TLS include directory [63]
o setopt: check CURLOPT_ADDRESS_SCOPE option range
o gitignore: ignore all vim swap files [64]
o urlglob: fix division by zero
o libressl: OCSP and intermediate certs workaround no longer needed [66]
This release includes the following known bugs: This release includes the following known bugs:
@ -135,85 +103,78 @@ This release includes the following known bugs:
This release would not have looked like this without help, code, reports and This release would not have looked like this without help, code, reports and
advice from friends like these: advice from friends like these:
Akhil Kedia, Alan Jenkins, Anatol Belski, Bernhard M. Wiedemann, ahodesuka on github, Andreas Schneider, Basuke Suzuki, Brad Spencer,
Brian Childs, canavan at github, Chris Carlmar, Dan Fandrich, Chester Liu, cmfrolick on github, Craig de Stigter, Daniel Stenberg,
Daniel Stenberg, Edward Thomson, Gisle Vanem, GwanYeong Kim, Dan Johnson, David Benjamin, Dima Tisnek, Dimitrios Apostolou,
Helmut K. C. Tessarek, Joel Depooter, jonrumsey at github, Kai Engert, Dmitry Kostjuchenko, Dominik Hölzl, Elliot Saba, Frank Gevaerts, Gisle Vanem,
Kamil Dudka, Kevin Ji, Lloyd Fournier, Mahmoud Samir Fayed, Marcel Raad, guitared on github, Jan Ehrhardt, Johannes Schindelin, John DeHelian,
Martin Kepplinger, Max Dymond, Michael Kaufmann, Nick Zitzmann, Paul Harris, John Hascall, jonrumsey on github, jungle-boogie on github, Kartik Mahajan,
Phil Crump, Piotr Dobrogost, Ray Satiro, Richard Hsu, Ron Eldor, Martin Galvan, Matthew Kerwin, Mattias Fornander, Max Dymond, Michael Felt,
Ryuichi KAWAMATA, Sergei Nikulov, Simon Warta, stootill at github, Michael Gmelin, Michael Kaufmann, Mikalai Ananenka, Nikos Mavrogiannopoulos,
Stuart Henderson, TheAssassin at github, Thomas Klausner, Travis Burtrum, Oleg Pudeyev, Patrick Dawson, Patrick Monnerat, Per Malmberg, Pete Lomax,
Vincas Razma, wyattoday at github, Rainer Canavan, Randall S. Becker, Ray Satiro, Richard Alcock, Robert Kolcun,
(41 contributors) Sean MacLennan, Stanislav Zidek, Stepan Broz, Steve Holme,
Thomas van Hesteren, Tomas Mraz, W. Mark Kubacki, XhstormR on github,
Zachary Seguin, Zhouyihai Ding,
(54 contributors)
Thanks! (and sorry if I forgot to mention someone) Thanks! (and sorry if I forgot to mention someone)
References to bug reports and discussions on issues: References to bug reports and discussions on issues:
[1] = https://curl.haxx.se/bug/?i=1403 [1] = https://curl.haxx.se/bug/?i=2118
[2] = https://curl.haxx.se/bug/?i=1435 [2] = https://curl.haxx.se/mail/lib-2017-12/0000.html
[3] = https://curl.haxx.se/bug/?i=1439 [3] = https://curl.haxx.se/bug/?i=2119
[4] = https://curl.haxx.se/bug/?i=1392 [4] = https://curl.haxx.se/bug/?i=2127
[5] = https://curl.haxx.se/bug/?i=1427 [5] = https://curl.haxx.se/bug/?i=2134
[6] = https://curl.haxx.se/bug/?i=1440 [6] = https://curl.haxx.se/bug/?i=2143
[7] = https://curl.haxx.se/bug/?i=1432 [7] = https://curl.haxx.se/bug/?i=2150
[8] = https://curl.haxx.se/bug/?i=1420 [8] = https://curl.haxx.se/bug/?i=2132
[9] = https://curl.haxx.se/bug/?i=1446 [9] = https://curl.haxx.se/bug/?i=2152
[10] = https://curl.haxx.se/bug/?i=1447 [10] = https://curl.haxx.se/bug/?i=2128
[11] = https://bugzilla.redhat.com/1444860 [11] = https://curl.haxx.se/bug/?i=2146
[12] = https://curl.haxx.se/bug/?i=1414 [12] = https://curl.haxx.se/bug/?i=2154
[13] = https://curl.haxx.se/bug/?i=1451 [13] = https://curl.haxx.se/bug/?i=2159
[14] = https://curl.haxx.se/mail/lib-2017-04/0127.html [14] = https://curl.haxx.se/bug/?i=2160
[15] = https://github.com/curl/curl/issues/1441#issuecomment-297689856 [15] = https://curl.haxx.se/bug/?i=2088
[16] = https://curl.haxx.se/bug/?i=1460 [16] = https://curl.haxx.se/bug/?i=2158
[17] = https://curl.haxx.se/bug/?i=1449 [17] = https://curl.haxx.se/bug/?i=2076
[18] = https://curl.haxx.se/bug/?i=1453 [18] = https://curl.haxx.se/bug/?i=1916
[19] = https://curl.haxx.se/bug/?i=1389 [19] = https://curl.haxx.se/bug/?i=2166
[20] = https://curl.haxx.se/bug/?i=1452 [20] = https://curl.haxx.se/bug/?i=2168
[21] = https://curl.haxx.se/bug/?i=1452 [21] = https://curl.haxx.se/bug/?i=1900
[22] = https://curl.haxx.se/bug/?i=1464 [22] = https://github.com/curl/curl/pull/1346#issuecomment-350530901
[23] = https://curl.haxx.se/bug/?i=1466 [23] = https://curl.haxx.se/bug/?i=2169
[24] = https://curl.haxx.se/bug/?i=1463 [24] = https://curl.haxx.se/bug/?i=2171
[25] = https://curl.haxx.se/bug/?i=1471 [25] = https://curl.haxx.se/bug/?i=2173
[26] = https://curl.haxx.se/bug/?i=1469 [26] = https://curl.haxx.se/bug/?i=2174
[27] = https://curl.haxx.se/bug/?i=1315 [27] = https://curl.haxx.se/bug/?i=2175
[28] = https://curl.haxx.se/bug/?i=1465 [28] = https://curl.haxx.se/bug/?i=2068
[29] = https://curl.haxx.se/bug/?i=1472 [29] = https://curl.haxx.se/mail/lib-2017-12/0060.html
[30] = https://curl.haxx.se/bug/?i=1475 [30] = https://curl.haxx.se/bug/?i=2185
[31] = https://curl.haxx.se/bug/?i=1481 [31] = https://curl.haxx.se/bug/?i=2216
[32] = https://curl.haxx.se/bug/?i=1474 [32] = https://curl.haxx.se/bug/?i=2179
[33] = https://curl.haxx.se/bug/?i=1400 [33] = https://curl.haxx.se/mail/lib-2017-12/0057.html
[34] = https://curl.haxx.se/bug/?i=1487 [34] = https://curl.haxx.se/bug/?i=2194
[35] = https://curl.haxx.se/bug/?i=1450 [35] = https://curl.haxx.se/mail/lib-2017-12/0074.html
[36] = https://curl.haxx.se/bug/?i=1490 [36] = https://curl.haxx.se/bug/?i=2215
[37] = https://curl.haxx.se/bug/?i=1253 [37] = https://curl.haxx.se/bug/?i=2222
[38] = https://curl.haxx.se/bug/?i=1479 [38] = https://curl.haxx.se/bug/?i=2200
[39] = https://curl.haxx.se/bug/?i=1488 [39] = https://curl.haxx.se/bug/?i=2217
[40] = https://curl.haxx.se/bug/?i=1461 [40] = https://curl.haxx.se/docs/adv_2018-824a.html
[41] = https://curl.haxx.se/bug/?i=1504 [41] = https://curl.haxx.se/bug/?i=2230
[42] = https://curl.haxx.se/bug/?i=878 [42] = https://curl.haxx.se/bug/?i=2225
[43] = https://curl.haxx.se/bug/?i=1489 [43] = https://curl.haxx.se/bug/?i=2234
[44] = https://curl.haxx.se/bug/?i=1321 [44] = https://curl.haxx.se/bug/?i=2212
[45] = https://curl.haxx.se/bug/?i=1499 [45] = https://curl.haxx.se/bug/?i=2235
[46] = https://curl.haxx.se/bug/?i=1516 [46] = https://curl.haxx.se/bug/?i=2210
[47] = https://curl.haxx.se/bug/?i=1294 [47] = https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=5206
[48] = https://curl.haxx.se/bug/?i=1208 [48] = https://curl.haxx.se/bug/?i=2239
[49] = https://curl.haxx.se/bug/?i=1516 [49] = https://curl.haxx.se/bug/?i=2211
[50] = https://curl.haxx.se/bug/?i=1522 [50] = https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=5251
[51] = https://curl.haxx.se/bug/?i=1524 [51] = https://curl.haxx.se/bug/?i=2248
[52] = https://curl.haxx.se/bug/?i=846 [52] = https://curl.haxx.se/bug/?i=2245
[53] = https://curl.haxx.se/bug/?i=1528 [53] = https://curl.haxx.se/bug/?i=2237
[54] = https://curl.haxx.se/bug/?i=1530 [54] = https://curl.haxx.se/bug/?i=2242
[55] = https://curl.haxx.se/bug/?i=1529 [55] = https://curl.haxx.se/docs/adv_2018-b3bf.html
[56] = https://curl.haxx.se/bug/?i=1532 [56] = https://curl.haxx.se/mail/lib-2018-01/0087.html
[57] = https://curl.haxx.se/bug/?i=1536
[58] = https://curl.haxx.se/bug/?i=1539
[59] = https://curl.haxx.se/bug/?i=1543
[60] = https://curl.haxx.se/bug/?i=1550
[61] = https://curl.haxx.se/mail/lib-2017-06/0017.html
[62] = https://curl.haxx.se/bug/?i=1557
[63] = https://curl.haxx.se/bug/?i=1541
[64] = https://curl.haxx.se/bug/?i=1561
[65] = https://curl.haxx.se/docs/adv_20170614.html
[66] = https://curl.haxx.se/mail/lib-2017-06/0038.html

369
curl/acinclude.m4 Normal file → Executable file
View File

@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___ # | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____| # \___|\___/|_| \_\_____|
# #
# Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al. # Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, et al.
# #
# This software is licensed as described in the file COPYING, which # This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms # you should have received as part of this distribution. The terms
@ -199,8 +199,6 @@ AC_DEFUN([CURL_CHECK_HEADER_WINDOWS], [
yes) yes)
AC_DEFINE_UNQUOTED(HAVE_WINDOWS_H, 1, AC_DEFINE_UNQUOTED(HAVE_WINDOWS_H, 1,
[Define to 1 if you have the windows.h header file.]) [Define to 1 if you have the windows.h header file.])
AC_DEFINE_UNQUOTED(WIN32_LEAN_AND_MEAN, 1,
[Define to avoid automatic inclusion of winsock.h])
;; ;;
esac esac
]) ])
@ -790,8 +788,8 @@ AC_DEFUN([CURL_CHECK_LIBS_LDAP], [
# #
for x_nlibs in '' "$u_libs" \ for x_nlibs in '' "$u_libs" \
'-lldap' \ '-lldap' \
'-llber -lldap' \
'-lldap -llber' \ '-lldap -llber' \
'-llber -lldap' \
'-lldapssl -lldapx -lldapsdk' \ '-lldapssl -lldapx -lldapsdk' \
'-lldapsdk -lldapx -lldapssl' ; do '-lldapsdk -lldapx -lldapssl' ; do
if test "$curl_cv_ldap_LIBS" = "unknown"; then if test "$curl_cv_ldap_LIBS" = "unknown"; then
@ -1084,7 +1082,11 @@ AC_DEFUN([CURL_CHECK_FUNC_GETNAMEINFO], [
#endif #endif
#define GNICALLCONV #define GNICALLCONV
#endif #endif
extern int GNICALLCONV getnameinfo($gni_arg1, $gni_arg2, extern int GNICALLCONV
#ifdef __ANDROID__
__attribute__((overloadable))
#endif
getnameinfo($gni_arg1, $gni_arg2,
char *, $gni_arg46, char *, $gni_arg46,
char *, $gni_arg46, char *, $gni_arg46,
$gni_arg7); $gni_arg7);
@ -1388,6 +1390,9 @@ AC_DEFUN([CURL_CHECK_FUNC_RECV], [
#define RECVCALLCONV #define RECVCALLCONV
#endif #endif
extern $recv_retv RECVCALLCONV extern $recv_retv RECVCALLCONV
#ifdef __ANDROID__
__attribute__((overloadable))
#endif
recv($recv_arg1, $recv_arg2, $recv_arg3, $recv_arg4); recv($recv_arg1, $recv_arg2, $recv_arg3, $recv_arg4);
]],[[ ]],[[
$recv_arg1 s=0; $recv_arg1 s=0;
@ -1522,6 +1527,9 @@ AC_DEFUN([CURL_CHECK_FUNC_SEND], [
#define SENDCALLCONV #define SENDCALLCONV
#endif #endif
extern $send_retv SENDCALLCONV extern $send_retv SENDCALLCONV
#ifdef __ANDROID__
__attribute__((overloadable))
#endif
send($send_arg1, $send_arg2, $send_arg3, $send_arg4); send($send_arg1, $send_arg2, $send_arg3, $send_arg4);
]],[[ ]],[[
$send_arg1 s=0; $send_arg1 s=0;
@ -2076,29 +2084,8 @@ _EOF
]) ])
dnl CURL_CONFIGURE_LONG
dnl -------------------------------------------------
dnl Find out the size of long as reported by sizeof() and define
dnl CURL_SIZEOF_LONG as appropriate to be used in template file
dnl include/curl/curlbuild.h.in to properly configure the library.
dnl The size of long is a build time characteristic and as such
dnl must be recorded in curlbuild.h
AC_DEFUN([CURL_CONFIGURE_LONG], [
if test -z "$ac_cv_sizeof_long" ||
test "$ac_cv_sizeof_long" -eq "0"; then
AC_MSG_ERROR([cannot find out size of long.])
fi
CURL_DEFINE_UNQUOTED([CURL_SIZEOF_LONG], [$ac_cv_sizeof_long])
])
dnl CURL_CONFIGURE_CURL_SOCKLEN_T dnl CURL_CONFIGURE_CURL_SOCKLEN_T
dnl ------------------------------------------------- dnl -------------------------------------------------
dnl Find out suitable curl_socklen_t data type definition and size, making
dnl appropriate definitions for template file include/curl/curlbuild.h.in
dnl to properly configure and use the library.
dnl
dnl The need for the curl_socklen_t definition arises mainly to properly dnl The need for the curl_socklen_t definition arises mainly to properly
dnl interface HP-UX systems which on one hand have a typedef'ed socklen_t dnl interface HP-UX systems which on one hand have a typedef'ed socklen_t
dnl data type which is 32 or 64-Bit wide depending on the data model being dnl data type which is 32 or 64-Bit wide depending on the data model being
@ -2222,10 +2209,6 @@ AC_DEFUN([CURL_CONFIGURE_CURL_SOCKLEN_T], [
dnl CURL_CONFIGURE_PULL_SYS_POLL dnl CURL_CONFIGURE_PULL_SYS_POLL
dnl ------------------------------------------------- dnl -------------------------------------------------
dnl Find out if system header file sys/poll.h must be included by the
dnl external interface, making appropriate definitions for template file
dnl include/curl/curlbuild.h.in to properly configure and use the library.
dnl
dnl The need for the sys/poll.h inclusion arises mainly to properly dnl The need for the sys/poll.h inclusion arises mainly to properly
dnl interface AIX systems which define macros 'events' and 'revents'. dnl interface AIX systems which define macros 'events' and 'revents'.
@ -2378,11 +2361,15 @@ AC_DEFUN([CURL_CHECK_FUNC_SELECT], [
long tv_usec; long tv_usec;
}; };
#endif #endif
extern $sel_retv SELECTCALLCONV select($sel_arg1, extern $sel_retv SELECTCALLCONV
$sel_arg234, #ifdef __ANDROID__
$sel_arg234, __attribute__((overloadable))
$sel_arg234, #endif
$sel_arg5); select($sel_arg1,
$sel_arg234,
$sel_arg234,
$sel_arg234,
$sel_arg5);
]],[[ ]],[[
$sel_arg1 nfds=0; $sel_arg1 nfds=0;
$sel_arg234 rfds=0; $sel_arg234 rfds=0;
@ -2717,292 +2704,6 @@ AC_HELP_STRING([--without-ca-fallback], [Don't use the built in CA store of the
fi fi
]) ])
dnl DO_CURL_OFF_T_CHECK (TYPE, SIZE)
dnl -------------------------------------------------
dnl Internal macro for CURL_CONFIGURE_CURL_OFF_T
AC_DEFUN([DO_CURL_OFF_T_CHECK], [
AC_REQUIRE([CURL_INCLUDES_INTTYPES])dnl
if test "$curl_typeof_curl_off_t" = "unknown" && test ! -z "$1"; then
tmp_includes=""
tmp_source=""
tmp_fmt=""
case XC_SH_TR_SH([$1]) in
int64_t)
tmp_includes="$curl_includes_inttypes"
tmp_source="char f@<:@@:>@ = PRId64;"
tmp_fmt="PRId64"
;;
int32_t)
tmp_includes="$curl_includes_inttypes"
tmp_source="char f@<:@@:>@ = PRId32;"
tmp_fmt="PRId32"
;;
int16_t)
tmp_includes="$curl_includes_inttypes"
tmp_source="char f@<:@@:>@ = PRId16;"
tmp_fmt="PRId16"
;;
esac
AC_COMPILE_IFELSE([
AC_LANG_PROGRAM([[
$tmp_includes
typedef $1 curl_off_t;
typedef char dummy_arr[sizeof(curl_off_t) == $2 ? 1 : -1];
]],[[
$tmp_source
curl_off_t dummy;
]])
],[
if test -z "$tmp_fmt"; then
curl_typeof_curl_off_t="$1"
curl_sizeof_curl_off_t="$2"
else
CURL_CHECK_DEF([$tmp_fmt], [$curl_includes_inttypes], [silent])
AS_VAR_PUSHDEF([tmp_HaveFmtDef], [curl_cv_have_def_$tmp_fmt])dnl
AS_VAR_PUSHDEF([tmp_FmtDef], [curl_cv_def_$tmp_fmt])dnl
if test AS_VAR_GET(tmp_HaveFmtDef) = "yes"; then
curl_format_curl_off_t=AS_VAR_GET(tmp_FmtDef)
curl_typeof_curl_off_t="$1"
curl_sizeof_curl_off_t="$2"
fi
AS_VAR_POPDEF([tmp_FmtDef])dnl
AS_VAR_POPDEF([tmp_HaveFmtDef])dnl
fi
])
fi
])
dnl DO_CURL_OFF_T_SUFFIX_CHECK (TYPE)
dnl -------------------------------------------------
dnl Internal macro for CURL_CONFIGURE_CURL_OFF_T
AC_DEFUN([DO_CURL_OFF_T_SUFFIX_CHECK], [
AC_REQUIRE([CURL_INCLUDES_INTTYPES])dnl
AC_MSG_CHECKING([constant suffix string for curl_off_t])
#
curl_suffix_curl_off_t="unknown"
curl_suffix_curl_off_tu="unknown"
#
case XC_SH_TR_SH([$1]) in
long_long | __longlong | __longlong_t)
tst_suffixes="LL::"
;;
long)
tst_suffixes="L::"
;;
int)
tst_suffixes="::"
;;
__int64 | int64_t)
tst_suffixes="LL:i64::"
;;
__int32 | int32_t)
tst_suffixes="L:i32::"
;;
__int16 | int16_t)
tst_suffixes="L:i16::"
;;
*)
AC_MSG_ERROR([unexpected data type $1])
;;
esac
#
old_IFS=$IFS; IFS=':'
for tmp_ssuf in $tst_suffixes ; do
IFS=$old_IFS
if test "x$curl_suffix_curl_off_t" = "xunknown"; then
case $tmp_ssuf in
i64 | i32 | i16)
tmp_usuf="u$tmp_ssuf"
;;
LL | L)
tmp_usuf="U$tmp_ssuf"
;;
*)
tmp_usuf=""
;;
esac
AC_COMPILE_IFELSE([
AC_LANG_PROGRAM([[
$curl_includes_inttypes
typedef $1 new_t;
]],[[
new_t s1;
new_t s2;
s1 = -10$tmp_ssuf ;
s2 = 20$tmp_ssuf ;
if(s1 > s2)
return 1;
]])
],[
curl_suffix_curl_off_t="$tmp_ssuf"
curl_suffix_curl_off_tu="$tmp_usuf"
])
fi
done
IFS=$old_IFS
#
if test "x$curl_suffix_curl_off_t" = "xunknown"; then
AC_MSG_ERROR([cannot find constant suffix string for curl_off_t.])
else
AC_MSG_RESULT([$curl_suffix_curl_off_t])
AC_MSG_CHECKING([constant suffix string for unsigned curl_off_t])
AC_MSG_RESULT([$curl_suffix_curl_off_tu])
fi
#
])
dnl CURL_CONFIGURE_CURL_OFF_T
dnl -------------------------------------------------
dnl Find out suitable curl_off_t data type definition and associated
dnl items, and make the appropriate definitions used in template file
dnl include/curl/curlbuild.h.in to properly configure the library.
AC_DEFUN([CURL_CONFIGURE_CURL_OFF_T], [
AC_REQUIRE([CURL_INCLUDES_INTTYPES])dnl
#
AC_BEFORE([$0],[AC_SYS_LARGEFILE])dnl
AC_BEFORE([$0],[CURL_CONFIGURE_REENTRANT])dnl
AC_BEFORE([$0],[CURL_CHECK_AIX_ALL_SOURCE])dnl
#
if test -z "$SED"; then
AC_MSG_ERROR([SED not set. Cannot continue without SED being set.])
fi
#
AC_CHECK_SIZEOF(long)
AC_CHECK_SIZEOF(void*)
#
if test -z "$ac_cv_sizeof_long" ||
test "$ac_cv_sizeof_long" -eq "0"; then
AC_MSG_ERROR([cannot find out size of long.])
fi
if test -z "$ac_cv_sizeof_voidp" ||
test "$ac_cv_sizeof_voidp" -eq "0"; then
AC_MSG_ERROR([cannot find out size of void*.])
fi
#
x_LP64_long=""
x_LP32_long=""
#
if test "$ac_cv_sizeof_long" -eq "8" &&
test "$ac_cv_sizeof_voidp" -ge "8"; then
x_LP64_long="long"
elif test "$ac_cv_sizeof_long" -eq "4" &&
test "$ac_cv_sizeof_voidp" -ge "4"; then
x_LP32_long="long"
fi
#
dnl DO_CURL_OFF_T_CHECK results are stored in next 3 vars
#
curl_typeof_curl_off_t="unknown"
curl_sizeof_curl_off_t="unknown"
curl_format_curl_off_t="unknown"
curl_format_curl_off_tu="unknown"
#
if test "$curl_typeof_curl_off_t" = "unknown"; then
AC_MSG_CHECKING([for 64-bit curl_off_t data type])
for t8 in \
"$x_LP64_long" \
'int64_t' \
'__int64' \
'long long' \
'__longlong' \
'__longlong_t' ; do
DO_CURL_OFF_T_CHECK([$t8], [8])
done
AC_MSG_RESULT([$curl_typeof_curl_off_t])
fi
if test "$curl_typeof_curl_off_t" = "unknown"; then
AC_MSG_CHECKING([for 32-bit curl_off_t data type])
for t4 in \
"$x_LP32_long" \
'int32_t' \
'__int32' \
'int' ; do
DO_CURL_OFF_T_CHECK([$t4], [4])
done
AC_MSG_RESULT([$curl_typeof_curl_off_t])
fi
if test "$curl_typeof_curl_off_t" = "unknown"; then
AC_MSG_ERROR([cannot find data type for curl_off_t.])
fi
#
AC_MSG_CHECKING([size of curl_off_t])
AC_MSG_RESULT([$curl_sizeof_curl_off_t])
#
AC_MSG_CHECKING([formatting string directive for curl_off_t])
if test "$curl_format_curl_off_t" != "unknown"; then
x_pull_headers="yes"
curl_format_curl_off_t=`echo "$curl_format_curl_off_t" | "$SED" 's/[["]]//g'`
curl_format_curl_off_tu=`echo "$curl_format_curl_off_t" | "$SED" 's/i$/u/'`
curl_format_curl_off_tu=`echo "$curl_format_curl_off_tu" | "$SED" 's/d$/u/'`
curl_format_curl_off_tu=`echo "$curl_format_curl_off_tu" | "$SED" 's/D$/U/'`
else
x_pull_headers="no"
case XC_SH_TR_SH([$curl_typeof_curl_off_t]) in
long_long | __longlong | __longlong_t)
curl_format_curl_off_t="lld"
curl_format_curl_off_tu="llu"
;;
long)
curl_format_curl_off_t="ld"
curl_format_curl_off_tu="lu"
;;
int)
curl_format_curl_off_t="d"
curl_format_curl_off_tu="u"
;;
__int64)
curl_format_curl_off_t="I64d"
curl_format_curl_off_tu="I64u"
;;
__int32)
curl_format_curl_off_t="I32d"
curl_format_curl_off_tu="I32u"
;;
__int16)
curl_format_curl_off_t="I16d"
curl_format_curl_off_tu="I16u"
;;
*)
AC_MSG_ERROR([cannot find print format string for curl_off_t.])
;;
esac
fi
AC_MSG_RESULT(["$curl_format_curl_off_t"])
#
AC_MSG_CHECKING([formatting string directive for unsigned curl_off_t])
AC_MSG_RESULT(["$curl_format_curl_off_tu"])
#
DO_CURL_OFF_T_SUFFIX_CHECK([$curl_typeof_curl_off_t])
#
if test "$x_pull_headers" = "yes"; then
if test "x$ac_cv_header_sys_types_h" = "xyes"; then
CURL_DEFINE_UNQUOTED([CURL_PULL_SYS_TYPES_H])
fi
if test "x$ac_cv_header_stdint_h" = "xyes"; then
CURL_DEFINE_UNQUOTED([CURL_PULL_STDINT_H])
fi
if test "x$ac_cv_header_inttypes_h" = "xyes"; then
CURL_DEFINE_UNQUOTED([CURL_PULL_INTTYPES_H])
fi
fi
#
CURL_DEFINE_UNQUOTED([CURL_TYPEOF_CURL_OFF_T], [$curl_typeof_curl_off_t])
CURL_DEFINE_UNQUOTED([CURL_FORMAT_CURL_OFF_T], ["$curl_format_curl_off_t"])
CURL_DEFINE_UNQUOTED([CURL_FORMAT_CURL_OFF_TU], ["$curl_format_curl_off_tu"])
CURL_DEFINE_UNQUOTED([CURL_FORMAT_OFF_T], ["%$curl_format_curl_off_t"])
CURL_DEFINE_UNQUOTED([CURL_SIZEOF_CURL_OFF_T], [$curl_sizeof_curl_off_t])
CURL_DEFINE_UNQUOTED([CURL_SUFFIX_CURL_OFF_T], [$curl_suffix_curl_off_t])
CURL_DEFINE_UNQUOTED([CURL_SUFFIX_CURL_OFF_TU], [$curl_suffix_curl_off_tu])
#
])
dnl CURL_CHECK_WIN32_LARGEFILE dnl CURL_CHECK_WIN32_LARGEFILE
dnl ------------------------------------------------- dnl -------------------------------------------------
dnl Check if curl's WIN32 large file will be used dnl Check if curl's WIN32 large file will be used
@ -3243,3 +2944,29 @@ AC_DEFUN([CURL_MAC_CFLAGS], [
fi fi
]) ])
dnl CURL_SUPPORTS_BUILTIN_AVAILABLE
dnl
dnl Check to see if the compiler supports __builtin_available. This built-in
dnl compiler function first appeared in Apple LLVM 9.0.0. It's so new that, at
dnl the time this macro was written, the function was not yet documented. Its
dnl purpose is to return true if the code is running under a certain OS version
dnl or later.
AC_DEFUN([CURL_SUPPORTS_BUILTIN_AVAILABLE], [
AC_MSG_CHECKING([to see if the compiler supports __builtin_available()])
AC_COMPILE_IFELSE([
AC_LANG_PROGRAM([[
#include <stdlib.h>
]],[[
if (__builtin_available(macOS 10.8, iOS 5.0, *)) {}
]])
],[
AC_MSG_RESULT([yes])
AC_DEFINE_UNQUOTED(HAVE_BUILTIN_AVAILABLE, 1,
[Define to 1 if you have the __builtin_available function.])
],[
AC_MSG_RESULT([no])
])
])

46
curl/aclocal.m4 vendored
View File

@ -1,6 +1,6 @@
# generated automatically by aclocal 1.15 -*- Autoconf -*- # generated automatically by aclocal 1.15.1 -*- Autoconf -*-
# Copyright (C) 1996-2014 Free Software Foundation, Inc. # Copyright (C) 1996-2017 Free Software Foundation, Inc.
# This file is free software; the Free Software Foundation # This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it, # gives unlimited permission to copy and/or distribute it,
@ -20,7 +20,7 @@ You have another version of autoconf. It may work, but is not guaranteed to.
If you have problems, you may need to regenerate the build system entirely. If you have problems, you may need to regenerate the build system entirely.
To do so, use the procedure documented by the package, typically 'autoreconf'.])]) To do so, use the procedure documented by the package, typically 'autoreconf'.])])
# Copyright (C) 2002-2014 Free Software Foundation, Inc. # Copyright (C) 2002-2017 Free Software Foundation, Inc.
# #
# This file is free software; the Free Software Foundation # This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it, # gives unlimited permission to copy and/or distribute it,
@ -35,7 +35,7 @@ AC_DEFUN([AM_AUTOMAKE_VERSION],
[am__api_version='1.15' [am__api_version='1.15'
dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
dnl require some minimum version. Point them to the right macro. dnl require some minimum version. Point them to the right macro.
m4_if([$1], [1.15], [], m4_if([$1], [1.15.1], [],
[AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
]) ])
@ -51,14 +51,14 @@ m4_define([_AM_AUTOCONF_VERSION], [])
# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
# This function is AC_REQUIREd by AM_INIT_AUTOMAKE. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
[AM_AUTOMAKE_VERSION([1.15])dnl [AM_AUTOMAKE_VERSION([1.15.1])dnl
m4_ifndef([AC_AUTOCONF_VERSION], m4_ifndef([AC_AUTOCONF_VERSION],
[m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
# AM_AUX_DIR_EXPAND -*- Autoconf -*- # AM_AUX_DIR_EXPAND -*- Autoconf -*-
# Copyright (C) 2001-2014 Free Software Foundation, Inc. # Copyright (C) 2001-2017 Free Software Foundation, Inc.
# #
# This file is free software; the Free Software Foundation # This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it, # gives unlimited permission to copy and/or distribute it,
@ -110,7 +110,7 @@ am_aux_dir=`cd "$ac_aux_dir" && pwd`
# AM_CONDITIONAL -*- Autoconf -*- # AM_CONDITIONAL -*- Autoconf -*-
# Copyright (C) 1997-2014 Free Software Foundation, Inc. # Copyright (C) 1997-2017 Free Software Foundation, Inc.
# #
# This file is free software; the Free Software Foundation # This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it, # gives unlimited permission to copy and/or distribute it,
@ -141,7 +141,7 @@ AC_CONFIG_COMMANDS_PRE(
Usually this means the macro was only invoked conditionally.]]) Usually this means the macro was only invoked conditionally.]])
fi])]) fi])])
# Copyright (C) 1999-2014 Free Software Foundation, Inc. # Copyright (C) 1999-2017 Free Software Foundation, Inc.
# #
# This file is free software; the Free Software Foundation # This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it, # gives unlimited permission to copy and/or distribute it,
@ -332,7 +332,7 @@ _AM_SUBST_NOTMAKE([am__nodep])dnl
# Generate code to set up dependency tracking. -*- Autoconf -*- # Generate code to set up dependency tracking. -*- Autoconf -*-
# Copyright (C) 1999-2014 Free Software Foundation, Inc. # Copyright (C) 1999-2017 Free Software Foundation, Inc.
# #
# This file is free software; the Free Software Foundation # This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it, # gives unlimited permission to copy and/or distribute it,
@ -408,7 +408,7 @@ AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
# Do all the work for Automake. -*- Autoconf -*- # Do all the work for Automake. -*- Autoconf -*-
# Copyright (C) 1996-2014 Free Software Foundation, Inc. # Copyright (C) 1996-2017 Free Software Foundation, Inc.
# #
# This file is free software; the Free Software Foundation # This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it, # gives unlimited permission to copy and/or distribute it,
@ -605,7 +605,7 @@ for _am_header in $config_headers :; do
done done
echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
# Copyright (C) 2001-2014 Free Software Foundation, Inc. # Copyright (C) 2001-2017 Free Software Foundation, Inc.
# #
# This file is free software; the Free Software Foundation # This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it, # gives unlimited permission to copy and/or distribute it,
@ -626,7 +626,7 @@ if test x"${install_sh+set}" != xset; then
fi fi
AC_SUBST([install_sh])]) AC_SUBST([install_sh])])
# Copyright (C) 2003-2014 Free Software Foundation, Inc. # Copyright (C) 2003-2017 Free Software Foundation, Inc.
# #
# This file is free software; the Free Software Foundation # This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it, # gives unlimited permission to copy and/or distribute it,
@ -648,7 +648,7 @@ AC_SUBST([am__leading_dot])])
# Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # Add --enable-maintainer-mode option to configure. -*- Autoconf -*-
# From Jim Meyering # From Jim Meyering
# Copyright (C) 1996-2014 Free Software Foundation, Inc. # Copyright (C) 1996-2017 Free Software Foundation, Inc.
# #
# This file is free software; the Free Software Foundation # This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it, # gives unlimited permission to copy and/or distribute it,
@ -683,7 +683,7 @@ AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
# Check to see how 'make' treats includes. -*- Autoconf -*- # Check to see how 'make' treats includes. -*- Autoconf -*-
# Copyright (C) 2001-2014 Free Software Foundation, Inc. # Copyright (C) 2001-2017 Free Software Foundation, Inc.
# #
# This file is free software; the Free Software Foundation # This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it, # gives unlimited permission to copy and/or distribute it,
@ -733,7 +733,7 @@ rm -f confinc confmf
# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*-
# Copyright (C) 1997-2014 Free Software Foundation, Inc. # Copyright (C) 1997-2017 Free Software Foundation, Inc.
# #
# This file is free software; the Free Software Foundation # This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it, # gives unlimited permission to copy and/or distribute it,
@ -772,7 +772,7 @@ fi
# Helper functions for option handling. -*- Autoconf -*- # Helper functions for option handling. -*- Autoconf -*-
# Copyright (C) 2001-2014 Free Software Foundation, Inc. # Copyright (C) 2001-2017 Free Software Foundation, Inc.
# #
# This file is free software; the Free Software Foundation # This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it, # gives unlimited permission to copy and/or distribute it,
@ -801,7 +801,7 @@ AC_DEFUN([_AM_SET_OPTIONS],
AC_DEFUN([_AM_IF_OPTION], AC_DEFUN([_AM_IF_OPTION],
[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
# Copyright (C) 1999-2014 Free Software Foundation, Inc. # Copyright (C) 1999-2017 Free Software Foundation, Inc.
# #
# This file is free software; the Free Software Foundation # This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it, # gives unlimited permission to copy and/or distribute it,
@ -848,7 +848,7 @@ AC_LANG_POP([C])])
# For backward compatibility. # For backward compatibility.
AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])])
# Copyright (C) 2001-2014 Free Software Foundation, Inc. # Copyright (C) 2001-2017 Free Software Foundation, Inc.
# #
# This file is free software; the Free Software Foundation # This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it, # gives unlimited permission to copy and/or distribute it,
@ -867,7 +867,7 @@ AC_DEFUN([AM_RUN_LOG],
# Check to make sure that the build environment is sane. -*- Autoconf -*- # Check to make sure that the build environment is sane. -*- Autoconf -*-
# Copyright (C) 1996-2014 Free Software Foundation, Inc. # Copyright (C) 1996-2017 Free Software Foundation, Inc.
# #
# This file is free software; the Free Software Foundation # This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it, # gives unlimited permission to copy and/or distribute it,
@ -948,7 +948,7 @@ AC_CONFIG_COMMANDS_PRE(
rm -f conftest.file rm -f conftest.file
]) ])
# Copyright (C) 2009-2014 Free Software Foundation, Inc. # Copyright (C) 2009-2017 Free Software Foundation, Inc.
# #
# This file is free software; the Free Software Foundation # This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it, # gives unlimited permission to copy and/or distribute it,
@ -1008,7 +1008,7 @@ AC_SUBST([AM_BACKSLASH])dnl
_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl
]) ])
# Copyright (C) 2001-2014 Free Software Foundation, Inc. # Copyright (C) 2001-2017 Free Software Foundation, Inc.
# #
# This file is free software; the Free Software Foundation # This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it, # gives unlimited permission to copy and/or distribute it,
@ -1036,7 +1036,7 @@ fi
INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
AC_SUBST([INSTALL_STRIP_PROGRAM])]) AC_SUBST([INSTALL_STRIP_PROGRAM])])
# Copyright (C) 2006-2014 Free Software Foundation, Inc. # Copyright (C) 2006-2017 Free Software Foundation, Inc.
# #
# This file is free software; the Free Software Foundation # This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it, # gives unlimited permission to copy and/or distribute it,
@ -1055,7 +1055,7 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
# Check how to create a tarball. -*- Autoconf -*- # Check how to create a tarball. -*- Autoconf -*-
# Copyright (C) 2004-2014 Free Software Foundation, Inc. # Copyright (C) 2004-2017 Free Software Foundation, Inc.
# #
# This file is free software; the Free Software Foundation # This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it, # gives unlimited permission to copy and/or distribute it,

View File

@ -306,7 +306,6 @@ for fname in .deps \
configure \ configure \
configurehelp.pm \ configurehelp.pm \
curl-config \ curl-config \
curlbuild.h \
depcomp \ depcomp \
libcares.pc \ libcares.pc \
libcurl.pc \ libcurl.pc \

View File

@ -6,7 +6,7 @@ rem * / __| | | | |_) | |
rem * | (__| |_| | _ <| |___ rem * | (__| |_| | _ <| |___
rem * \___|\___/|_| \_\_____| rem * \___|\___/|_| \_\_____|
rem * rem *
rem * Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al. rem * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, et al.
rem * rem *
rem * This software is licensed as described in the file COPYING, which rem * This software is licensed as described in the file COPYING, which
rem * you should have received as part of this distribution. The terms rem * you should have received as part of this distribution. The terms
@ -73,7 +73,6 @@ rem
echo Generating prerequisite files echo Generating prerequisite files
call :generate call :generate
if errorlevel 4 goto nogencurlbuild
if errorlevel 3 goto nogenhugehelp if errorlevel 3 goto nogenhugehelp
if errorlevel 2 goto nogenmakefile if errorlevel 2 goto nogenmakefile
if errorlevel 1 goto warning if errorlevel 1 goto warning
@ -83,7 +82,6 @@ rem
echo Removing prerequisite files echo Removing prerequisite files
call :clean call :clean
if errorlevel 3 goto nocleancurlbuild
if errorlevel 2 goto nocleanhugehelp if errorlevel 2 goto nocleanhugehelp
if errorlevel 1 goto nocleanmakefile if errorlevel 1 goto nocleanmakefile
) )
@ -98,7 +96,6 @@ rem 0 - success
rem 1 - success with simplified tool_hugehelp.c rem 1 - success with simplified tool_hugehelp.c
rem 2 - failed to generate Makefile rem 2 - failed to generate Makefile
rem 3 - failed to generate tool_hugehelp.c rem 3 - failed to generate tool_hugehelp.c
rem 4 - failed to generate curlbuild.h
rem rem
:generate :generate
if "%OS%" == "Windows_NT" setlocal if "%OS%" == "Windows_NT" setlocal
@ -126,16 +123,6 @@ rem
) )
cmd /c exit 0 cmd /c exit 0
rem Create curlbuild.h
echo * %CD%\include\curl\curlbuild.h
if exist include\curl\curlbuild.h.dist (
copy /Y include\curl\curlbuild.h.dist include\curl\curlbuild.h 1>NUL 2>&1
if errorlevel 1 (
if "%OS%" == "Windows_NT" endlocal
exit /B 4
)
)
rem Setup c-ares git tree rem Setup c-ares git tree
if exist ares\buildconf.bat ( if exist ares\buildconf.bat (
echo. echo.
@ -160,7 +147,6 @@ rem
rem 0 - success rem 0 - success
rem 1 - failed to clean Makefile rem 1 - failed to clean Makefile
rem 2 - failed to clean tool_hugehelp.c rem 2 - failed to clean tool_hugehelp.c
rem 3 - failed to clean curlbuild.h
rem rem
:clean :clean
rem Remove Makefile rem Remove Makefile
@ -181,15 +167,6 @@ rem
) )
) )
rem Remove curlbuild.h
echo * %CD%\include\curl\curlbuild.h
if exist include\curl\curlbuild.h (
del include\curl\curlbuild.h 2>NUL
if exist include\curl\curlbuild.h (
exit /B 3
)
)
exit /B exit /B
rem Function to generate src\tool_hugehelp.c rem Function to generate src\tool_hugehelp.c
@ -304,11 +281,6 @@ rem
echo Error: Unable to generate src\tool_hugehelp.c echo Error: Unable to generate src\tool_hugehelp.c
goto error goto error
:nogencurlbuild
echo.
echo Error: Unable to generate include\curl\curlbuild.h
goto error
:nocleanmakefile :nocleanmakefile
echo. echo.
echo Error: Unable to clean Makefile echo Error: Unable to clean Makefile
@ -319,11 +291,6 @@ rem
echo Error: Unable to clean src\tool_hugehelp.c echo Error: Unable to clean src\tool_hugehelp.c
goto error goto error
:nocleancurlbuild
echo.
echo Error: Unable to clean include\curl\curlbuild.h
goto error
:warning :warning
echo. echo.
echo Warning: The curl manual could not be integrated in the source. This means when echo Warning: The curl manual could not be integrated in the source. This means when

113
curl/config.guess vendored
View File

@ -1,8 +1,8 @@
#! /bin/sh #! /bin/sh
# Attempt to guess a canonical system name. # Attempt to guess a canonical system name.
# Copyright 1992-2016 Free Software Foundation, Inc. # Copyright 1992-2017 Free Software Foundation, Inc.
timestamp='2016-10-02' timestamp='2017-11-07'
# This file is free software; you can redistribute it and/or modify it # This file is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by # under the terms of the GNU General Public License as published by
@ -15,7 +15,7 @@ timestamp='2016-10-02'
# General Public License for more details. # General Public License for more details.
# #
# You should have received a copy of the GNU General Public License # You should have received a copy of the GNU General Public License
# along with this program; if not, see <http://www.gnu.org/licenses/>. # along with this program; if not, see <https://www.gnu.org/licenses/>.
# #
# As a special exception to the GNU General Public License, if you # As a special exception to the GNU General Public License, if you
# distribute this file as part of a program that contains a # distribute this file as part of a program that contains a
@ -27,7 +27,7 @@ timestamp='2016-10-02'
# Originally written by Per Bothner; maintained since 2000 by Ben Elliston. # Originally written by Per Bothner; maintained since 2000 by Ben Elliston.
# #
# You can get the latest version of this script from: # You can get the latest version of this script from:
# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess # https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess
# #
# Please send patches to <config-patches@gnu.org>. # Please send patches to <config-patches@gnu.org>.
@ -39,7 +39,7 @@ Usage: $0 [OPTION]
Output the configuration name of the system \`$me' is run on. Output the configuration name of the system \`$me' is run on.
Operation modes: Options:
-h, --help print this help, then exit -h, --help print this help, then exit
-t, --time-stamp print date of last modification, then exit -t, --time-stamp print date of last modification, then exit
-v, --version print version number, then exit -v, --version print version number, then exit
@ -50,7 +50,7 @@ version="\
GNU config.guess ($timestamp) GNU config.guess ($timestamp)
Originally written by Per Bothner. Originally written by Per Bothner.
Copyright 1992-2016 Free Software Foundation, Inc. Copyright 1992-2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@ -244,6 +244,9 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'` UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'`
echo ${UNAME_MACHINE_ARCH}-unknown-libertybsd${UNAME_RELEASE} echo ${UNAME_MACHINE_ARCH}-unknown-libertybsd${UNAME_RELEASE}
exit ;; exit ;;
*:MidnightBSD:*:*)
echo ${UNAME_MACHINE}-unknown-midnightbsd${UNAME_RELEASE}
exit ;;
*:ekkoBSD:*:*) *:ekkoBSD:*:*)
echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
exit ;; exit ;;
@ -259,6 +262,9 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
*:Sortix:*:*) *:Sortix:*:*)
echo ${UNAME_MACHINE}-unknown-sortix echo ${UNAME_MACHINE}-unknown-sortix
exit ;; exit ;;
*:Redox:*:*)
echo ${UNAME_MACHINE}-unknown-redox
exit ;;
alpha:OSF1:*:*) alpha:OSF1:*:*)
case $UNAME_RELEASE in case $UNAME_RELEASE in
*4.0) *4.0)
@ -315,15 +321,6 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
exitcode=$? exitcode=$?
trap '' 0 trap '' 0
exit $exitcode ;; exit $exitcode ;;
Alpha\ *:Windows_NT*:*)
# How do we know it's Interix rather than the generic POSIX subsystem?
# Should we change UNAME_MACHINE based on the output of uname instead
# of the specific Alpha model?
echo alpha-pc-interix
exit ;;
21064:Windows_NT:50:3)
echo alpha-dec-winnt3.5
exit ;;
Amiga*:UNIX_System_V:4.0:*) Amiga*:UNIX_System_V:4.0:*)
echo m68k-unknown-sysv4 echo m68k-unknown-sysv4
exit ;; exit ;;
@ -485,13 +482,13 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
#endif #endif
#if defined (host_mips) && defined (MIPSEB) #if defined (host_mips) && defined (MIPSEB)
#if defined (SYSTYPE_SYSV) #if defined (SYSTYPE_SYSV)
printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); printf ("mips-mips-riscos%ssysv\\n", argv[1]); exit (0);
#endif #endif
#if defined (SYSTYPE_SVR4) #if defined (SYSTYPE_SVR4)
printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); printf ("mips-mips-riscos%ssvr4\\n", argv[1]); exit (0);
#endif #endif
#if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); printf ("mips-mips-riscos%sbsd\\n", argv[1]); exit (0);
#endif #endif
#endif #endif
exit (-1); exit (-1);
@ -614,7 +611,7 @@ EOF
*:AIX:*:*) *:AIX:*:*)
echo rs6000-ibm-aix echo rs6000-ibm-aix
exit ;; exit ;;
ibmrt:4.4BSD:*|romp-ibm:BSD:*) ibmrt:4.4BSD:*|romp-ibm:4.4BSD:*)
echo romp-ibm-bsd4.4 echo romp-ibm-bsd4.4
exit ;; exit ;;
ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and
@ -635,8 +632,8 @@ EOF
9000/[34678]??:HP-UX:*:*) 9000/[34678]??:HP-UX:*:*)
HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
case "${UNAME_MACHINE}" in case "${UNAME_MACHINE}" in
9000/31? ) HP_ARCH=m68000 ;; 9000/31?) HP_ARCH=m68000 ;;
9000/[34]?? ) HP_ARCH=m68k ;; 9000/[34]??) HP_ARCH=m68k ;;
9000/[678][0-9][0-9]) 9000/[678][0-9][0-9])
if [ -x /usr/bin/getconf ]; then if [ -x /usr/bin/getconf ]; then
sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
@ -749,7 +746,7 @@ EOF
{ echo "$SYSTEM_NAME"; exit; } { echo "$SYSTEM_NAME"; exit; }
echo unknown-hitachi-hiuxwe2 echo unknown-hitachi-hiuxwe2
exit ;; exit ;;
9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:*)
echo hppa1.1-hp-bsd echo hppa1.1-hp-bsd
exit ;; exit ;;
9000/8??:4.3bsd:*:*) 9000/8??:4.3bsd:*:*)
@ -758,7 +755,7 @@ EOF
*9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
echo hppa1.0-hp-mpeix echo hppa1.0-hp-mpeix
exit ;; exit ;;
hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) hp7??:OSF1:*:* | hp8?[79]:OSF1:*:*)
echo hppa1.1-hp-osf echo hppa1.1-hp-osf
exit ;; exit ;;
hp8??:OSF1:*:*) hp8??:OSF1:*:*)
@ -837,10 +834,11 @@ EOF
UNAME_PROCESSOR=`/usr/bin/uname -p` UNAME_PROCESSOR=`/usr/bin/uname -p`
case ${UNAME_PROCESSOR} in case ${UNAME_PROCESSOR} in
amd64) amd64)
echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; UNAME_PROCESSOR=x86_64 ;;
*) i386)
echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; UNAME_PROCESSOR=i586 ;;
esac esac
echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
exit ;; exit ;;
i*:CYGWIN*:*) i*:CYGWIN*:*)
echo ${UNAME_MACHINE}-pc-cygwin echo ${UNAME_MACHINE}-pc-cygwin
@ -854,10 +852,6 @@ EOF
*:MSYS*:*) *:MSYS*:*)
echo ${UNAME_MACHINE}-pc-msys echo ${UNAME_MACHINE}-pc-msys
exit ;; exit ;;
i*:windows32*:*)
# uname -m includes "-pc" on this system.
echo ${UNAME_MACHINE}-mingw32
exit ;;
i*:PW*:*) i*:PW*:*)
echo ${UNAME_MACHINE}-pc-pw32 echo ${UNAME_MACHINE}-pc-pw32
exit ;; exit ;;
@ -873,27 +867,12 @@ EOF
echo ia64-unknown-interix${UNAME_RELEASE} echo ia64-unknown-interix${UNAME_RELEASE}
exit ;; exit ;;
esac ;; esac ;;
[345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
echo i${UNAME_MACHINE}-pc-mks
exit ;;
8664:Windows_NT:*)
echo x86_64-pc-mks
exit ;;
i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
# How do we know it's Interix rather than the generic POSIX subsystem?
# It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
# UNAME_MACHINE based on the output of uname instead of i386?
echo i586-pc-interix
exit ;;
i*:UWIN*:*) i*:UWIN*:*)
echo ${UNAME_MACHINE}-pc-uwin echo ${UNAME_MACHINE}-pc-uwin
exit ;; exit ;;
amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
echo x86_64-unknown-cygwin echo x86_64-unknown-cygwin
exit ;; exit ;;
p*:CYGWIN*:*)
echo powerpcle-unknown-cygwin
exit ;;
prep*:SunOS:5.*:*) prep*:SunOS:5.*:*)
echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
exit ;; exit ;;
@ -1096,7 +1075,7 @@ EOF
i*86:*DOS:*:*) i*86:*DOS:*:*)
echo ${UNAME_MACHINE}-pc-msdosdjgpp echo ${UNAME_MACHINE}-pc-msdosdjgpp
exit ;; exit ;;
i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) i*86:*:4.*:*)
UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
@ -1303,14 +1282,21 @@ EOF
if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then
if [ "$CC_FOR_BUILD" != no_compiler_found ]; then if [ "$CC_FOR_BUILD" != no_compiler_found ]; then
if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
(CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
grep IS_64BIT_ARCH >/dev/null grep IS_64BIT_ARCH >/dev/null
then then
case $UNAME_PROCESSOR in case $UNAME_PROCESSOR in
i386) UNAME_PROCESSOR=x86_64 ;; i386) UNAME_PROCESSOR=x86_64 ;;
powerpc) UNAME_PROCESSOR=powerpc64 ;; powerpc) UNAME_PROCESSOR=powerpc64 ;;
esac esac
fi fi
# On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc
if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \
(CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
grep IS_PPC >/dev/null
then
UNAME_PROCESSOR=powerpc
fi
fi fi
elif test "$UNAME_PROCESSOR" = i386 ; then elif test "$UNAME_PROCESSOR" = i386 ; then
# Avoid executing cc on OS X 10.9, as it ships with a stub # Avoid executing cc on OS X 10.9, as it ships with a stub
@ -1334,15 +1320,18 @@ EOF
*:QNX:*:4*) *:QNX:*:4*)
echo i386-pc-qnx echo i386-pc-qnx
exit ;; exit ;;
NEO-?:NONSTOP_KERNEL:*:*) NEO-*:NONSTOP_KERNEL:*:*)
echo neo-tandem-nsk${UNAME_RELEASE} echo neo-tandem-nsk${UNAME_RELEASE}
exit ;; exit ;;
NSE-*:NONSTOP_KERNEL:*:*) NSE-*:NONSTOP_KERNEL:*:*)
echo nse-tandem-nsk${UNAME_RELEASE} echo nse-tandem-nsk${UNAME_RELEASE}
exit ;; exit ;;
NSR-?:NONSTOP_KERNEL:*:*) NSR-*:NONSTOP_KERNEL:*:*)
echo nsr-tandem-nsk${UNAME_RELEASE} echo nsr-tandem-nsk${UNAME_RELEASE}
exit ;; exit ;;
NSX-*:NONSTOP_KERNEL:*:*)
echo nsx-tandem-nsk${UNAME_RELEASE}
exit ;;
*:NonStop-UX:*:*) *:NonStop-UX:*:*)
echo mips-compaq-nonstopux echo mips-compaq-nonstopux
exit ;; exit ;;
@ -1414,16 +1403,28 @@ EOF
exit ;; exit ;;
esac esac
echo "$0: unable to guess system type" >&2
case "${UNAME_MACHINE}:${UNAME_SYSTEM}" in
mips:Linux | mips64:Linux)
# If we got here on MIPS GNU/Linux, output extra information.
cat >&2 <<EOF
NOTE: MIPS GNU/Linux systems require a C compiler to fully recognize
the system type. Please install a C compiler and try again.
EOF
;;
esac
cat >&2 <<EOF cat >&2 <<EOF
$0: unable to guess system type
This script (version $timestamp), has failed to recognize the This script (version $timestamp), has failed to recognize the
operating system you are using. If your script is old, overwrite operating system you are using. If your script is old, overwrite *all*
config.guess and config.sub with the latest versions from: copies of config.guess and config.sub with the latest versions from:
http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess
and and
http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub
If $0 has already been updated, send the following data and any If $0 has already been updated, send the following data and any
information you think might be pertinent to config-patches@gnu.org to information you think might be pertinent to config-patches@gnu.org to
@ -1455,7 +1456,7 @@ EOF
exit 1 exit 1
# Local variables: # Local variables:
# eval: (add-hook 'write-file-hooks 'time-stamp) # eval: (add-hook 'write-file-functions 'time-stamp)
# time-stamp-start: "timestamp='" # time-stamp-start: "timestamp='"
# time-stamp-format: "%:y-%02m-%02d" # time-stamp-format: "%:y-%02m-%02d"
# time-stamp-end: "'" # time-stamp-end: "'"

69
curl/config.sub vendored
View File

@ -1,8 +1,8 @@
#! /bin/sh #! /bin/sh
# Configuration validation subroutine script. # Configuration validation subroutine script.
# Copyright 1992-2016 Free Software Foundation, Inc. # Copyright 1992-2017 Free Software Foundation, Inc.
timestamp='2016-11-04' timestamp='2017-11-23'
# This file is free software; you can redistribute it and/or modify it # This file is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by # under the terms of the GNU General Public License as published by
@ -15,7 +15,7 @@ timestamp='2016-11-04'
# General Public License for more details. # General Public License for more details.
# #
# You should have received a copy of the GNU General Public License # You should have received a copy of the GNU General Public License
# along with this program; if not, see <http://www.gnu.org/licenses/>. # along with this program; if not, see <https://www.gnu.org/licenses/>.
# #
# As a special exception to the GNU General Public License, if you # As a special exception to the GNU General Public License, if you
# distribute this file as part of a program that contains a # distribute this file as part of a program that contains a
@ -33,7 +33,7 @@ timestamp='2016-11-04'
# Otherwise, we print the canonical config type on stdout and succeed. # Otherwise, we print the canonical config type on stdout and succeed.
# You can get the latest version of this script from: # You can get the latest version of this script from:
# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub # https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub
# This file is supposed to be the same for all GNU packages # This file is supposed to be the same for all GNU packages
# and recognize all the CPU types, system types and aliases # and recognize all the CPU types, system types and aliases
@ -57,7 +57,7 @@ Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS
Canonicalize a configuration name. Canonicalize a configuration name.
Operation modes: Options:
-h, --help print this help, then exit -h, --help print this help, then exit
-t, --time-stamp print date of last modification, then exit -t, --time-stamp print date of last modification, then exit
-v, --version print version number, then exit -v, --version print version number, then exit
@ -67,7 +67,7 @@ Report bugs and patches to <config-patches@gnu.org>."
version="\ version="\
GNU config.sub ($timestamp) GNU config.sub ($timestamp)
Copyright 1992-2016 Free Software Foundation, Inc. Copyright 1992-2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@ -229,9 +229,6 @@ case $os in
-ptx*) -ptx*)
basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
;; ;;
-windowsnt*)
os=`echo $os | sed -e 's/windowsnt/winnt/'`
;;
-psos*) -psos*)
os=-psos os=-psos
;; ;;
@ -263,7 +260,7 @@ case $basic_machine in
| fido | fr30 | frv | ft32 \ | fido | fr30 | frv | ft32 \
| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
| hexagon \ | hexagon \
| i370 | i860 | i960 | ia64 \ | i370 | i860 | i960 | ia16 | ia64 \
| ip2k | iq2000 \ | ip2k | iq2000 \
| k1om \ | k1om \
| le32 | le64 \ | le32 | le64 \
@ -315,7 +312,7 @@ case $basic_machine in
| ubicom32 \ | ubicom32 \
| v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \
| visium \ | visium \
| we32k \ | wasm32 \
| x86 | xc16x | xstormy16 | xtensa \ | x86 | xc16x | xstormy16 | xtensa \
| z8k | z80) | z8k | z80)
basic_machine=$basic_machine-unknown basic_machine=$basic_machine-unknown
@ -388,7 +385,7 @@ case $basic_machine in
| h8300-* | h8500-* \ | h8300-* | h8500-* \
| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
| hexagon-* \ | hexagon-* \
| i*86-* | i860-* | i960-* | ia64-* \ | i*86-* | i860-* | i960-* | ia16-* | ia64-* \
| ip2k-* | iq2000-* \ | ip2k-* | iq2000-* \
| k1om-* \ | k1om-* \
| le32-* | le64-* \ | le32-* | le64-* \
@ -446,6 +443,7 @@ case $basic_machine in
| v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \
| vax-* \ | vax-* \
| visium-* \ | visium-* \
| wasm32-* \
| we32k-* \ | we32k-* \
| x86-* | x86_64-* | xc16x-* | xps100-* \ | x86-* | x86_64-* | xc16x-* | xps100-* \
| xstormy16-* | xtensa*-* \ | xstormy16-* | xtensa*-* \
@ -641,7 +639,7 @@ case $basic_machine in
basic_machine=rs6000-bull basic_machine=rs6000-bull
os=-bosx os=-bosx
;; ;;
dpx2* | dpx2*-bull) dpx2*)
basic_machine=m68k-bull basic_machine=m68k-bull
os=-sysv3 os=-sysv3
;; ;;
@ -903,7 +901,7 @@ case $basic_machine in
basic_machine=v70-nec basic_machine=v70-nec
os=-sysv os=-sysv
;; ;;
next | m*-next ) next | m*-next)
basic_machine=m68k-next basic_machine=m68k-next
case $os in case $os in
-nextstep* ) -nextstep* )
@ -948,6 +946,9 @@ case $basic_machine in
nsr-tandem) nsr-tandem)
basic_machine=nsr-tandem basic_machine=nsr-tandem
;; ;;
nsx-tandem)
basic_machine=nsx-tandem
;;
op50n-* | op60c-*) op50n-* | op60c-*)
basic_machine=hppa1.1-oki basic_machine=hppa1.1-oki
os=-proelf os=-proelf
@ -1243,6 +1244,9 @@ case $basic_machine in
basic_machine=a29k-wrs basic_machine=a29k-wrs
os=-vxworks os=-vxworks
;; ;;
wasm32)
basic_machine=wasm32-unknown
;;
w65*) w65*)
basic_machine=w65-wdc basic_machine=w65-wdc
os=-none os=-none
@ -1251,6 +1255,9 @@ case $basic_machine in
basic_machine=hppa1.1-winbond basic_machine=hppa1.1-winbond
os=-proelf os=-proelf
;; ;;
x64)
basic_machine=x86_64-pc
;;
xbox) xbox)
basic_machine=i686-pc basic_machine=i686-pc
os=-mingw32 os=-mingw32
@ -1358,8 +1365,8 @@ esac
if [ x"$os" != x"" ] if [ x"$os" != x"" ]
then then
case $os in case $os in
# First match some system type aliases # First match some system type aliases that might get confused
# that might get confused with valid system types. # with valid system types.
# -solaris* is a basic system type, with this one exception. # -solaris* is a basic system type, with this one exception.
-auroraux) -auroraux)
os=-auroraux os=-auroraux
@ -1379,9 +1386,9 @@ case $os in
-gnu/linux*) -gnu/linux*)
os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
;; ;;
# First accept the basic system types. # Now accept the basic system types.
# The portable systems comes first. # The portable systems comes first.
# Each alternative MUST END IN A *, to match a version number. # Each alternative MUST end in a * to match a version number.
# -sysv* is not here because it comes later, after sysvr4. # -sysv* is not here because it comes later, after sysvr4.
-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
| -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\
@ -1397,7 +1404,7 @@ case $os in
| -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
| -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
| -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
| -chorusos* | -chorusrdb* | -cegcc* \ | -chorusos* | -chorusrdb* | -cegcc* | -glidix* \
| -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
| -midipix* | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ | -midipix* | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \
| -linux-newlib* | -linux-musl* | -linux-uclibc* \ | -linux-newlib* | -linux-musl* | -linux-uclibc* \
@ -1409,7 +1416,7 @@ case $os in
| -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
| -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
| -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* \ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* \
| -onefs* | -tirtos* | -phoenix* | -fuchsia*) | -onefs* | -tirtos* | -phoenix* | -fuchsia* | -redox*)
# Remember, each alternative MUST END IN *, to match a version number. # Remember, each alternative MUST END IN *, to match a version number.
;; ;;
-qnx*) -qnx*)
@ -1484,7 +1491,7 @@ case $os in
-nova*) -nova*)
os=-rtmk-nova os=-rtmk-nova
;; ;;
-ns2 ) -ns2)
os=-nextstep2 os=-nextstep2
;; ;;
-nsk*) -nsk*)
@ -1539,6 +1546,19 @@ case $os in
-dicos*) -dicos*)
os=-dicos os=-dicos
;; ;;
-pikeos*)
# Until real need of OS specific support for
# particular features comes up, bare metal
# configurations are quite functional.
case $basic_machine in
arm*)
os=-eabi
;;
*)
os=-elf
;;
esac
;;
-nacl*) -nacl*)
;; ;;
-ios) -ios)
@ -1638,6 +1658,9 @@ case $basic_machine in
sparc-* | *-sun) sparc-* | *-sun)
os=-sunos4.1.1 os=-sunos4.1.1
;; ;;
pru-*)
os=-elf
;;
*-be) *-be)
os=-beos os=-beos
;; ;;
@ -1683,7 +1706,7 @@ case $basic_machine in
m88k-omron*) m88k-omron*)
os=-luna os=-luna
;; ;;
*-next ) *-next)
os=-nextstep os=-nextstep
;; ;;
*-sequent) *-sequent)
@ -1818,7 +1841,7 @@ echo $basic_machine$os
exit exit
# Local variables: # Local variables:
# eval: (add-hook 'write-file-hooks 'time-stamp) # eval: (add-hook 'write-file-functions 'time-stamp)
# time-stamp-start: "timestamp='" # time-stamp-start: "timestamp='"
# time-stamp-format: "%:y-%02m-%02d" # time-stamp-format: "%:y-%02m-%02d"
# time-stamp-end: "'" # time-stamp-end: "'"

3247
curl/configure vendored

File diff suppressed because it is too large Load Diff

461
curl/configure.ac Normal file → Executable file
View File

@ -36,7 +36,7 @@ This configure script may be copied, distributed and modified under the
terms of the curl license; see COPYING for more details]) terms of the curl license; see COPYING for more details])
AC_CONFIG_SRCDIR([lib/urldata.h]) AC_CONFIG_SRCDIR([lib/urldata.h])
AC_CONFIG_HEADERS(lib/curl_config.h include/curl/curlbuild.h) AC_CONFIG_HEADERS(lib/curl_config.h)
AC_CONFIG_MACRO_DIR([m4]) AC_CONFIG_MACRO_DIR([m4])
AM_MAINTAINER_MODE AM_MAINTAINER_MODE
m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
@ -51,7 +51,6 @@ CURL_CHECK_OPTION_ARES
CURL_CHECK_OPTION_RT CURL_CHECK_OPTION_RT
XC_CHECK_PATH_SEPARATOR XC_CHECK_PATH_SEPARATOR
AX_CODE_COVERAGE
# #
# save the configure arguments # save the configure arguments
@ -121,14 +120,16 @@ AC_SUBST([AR])
AC_SUBST(libext) AC_SUBST(libext)
dnl Remove non-configure distributed curlbuild.h
if test -f ${srcdir}/include/curl/curlbuild.h; then
rm -f ${srcdir}/include/curl/curlbuild.h
fi
dnl figure out the libcurl version dnl figure out the libcurl version
CURLVERSION=`$SED -ne 's/^#define LIBCURL_VERSION "\(.*\)".*/\1/p' ${srcdir}/include/curl/curlver.h` CURLVERSION=`$SED -ne 's/^#define LIBCURL_VERSION "\(.*\)".*/\1/p' ${srcdir}/include/curl/curlver.h`
XC_CHECK_PROG_CC XC_CHECK_PROG_CC
dnl Check if gcc is being used before adding AX_CODE_COVERAGE
AS_IF([ test "$GCC" = "yes" ], [AX_CODE_COVERAGE],
# not using GCC so pass a test below - CODE_COVERAGE_ENABLED_TRUE is not zero length
CODE_COVERAGE_ENABLED_TRUE='#'
)
XC_AUTOMAKE XC_AUTOMAKE
AC_MSG_CHECKING([curl version]) AC_MSG_CHECKING([curl version])
AC_MSG_RESULT($CURLVERSION) AC_MSG_RESULT($CURLVERSION)
@ -153,6 +154,7 @@ dnl initialize all the info variables
curl_ssl_msg="no (--with-{ssl,gnutls,nss,polarssl,mbedtls,cyassl,axtls,winssl,darwinssl} )" curl_ssl_msg="no (--with-{ssl,gnutls,nss,polarssl,mbedtls,cyassl,axtls,winssl,darwinssl} )"
curl_ssh_msg="no (--with-libssh2)" curl_ssh_msg="no (--with-libssh2)"
curl_zlib_msg="no (--with-zlib)" curl_zlib_msg="no (--with-zlib)"
curl_brotli_msg="no (--with-brotli)"
curl_gss_msg="no (--with-gssapi)" curl_gss_msg="no (--with-gssapi)"
curl_tls_srp_msg="no (--enable-tls-srp)" curl_tls_srp_msg="no (--enable-tls-srp)"
curl_res_msg="default (--enable-ares / --enable-threaded-resolver)" curl_res_msg="default (--enable-ares / --enable-threaded-resolver)"
@ -170,7 +172,7 @@ curl_verbose_msg="enabled (--disable-verbose)"
curl_mtlnk_msg="no (--with-libmetalink)" curl_mtlnk_msg="no (--with-libmetalink)"
curl_psl_msg="no (--with-libpsl)" curl_psl_msg="no (--with-libpsl)"
init_ssl_msg=${curl_ssl_msg} ssl_backends=
dnl dnl
dnl Save some initial values the user might have provided dnl Save some initial values the user might have provided
@ -188,9 +190,6 @@ AC_DEFINE_UNQUOTED(OS, "${host}", [cpu-machine-OS])
dnl Checks for programs. dnl Checks for programs.
dnl Our curl_off_t internal and external configure settings
CURL_CONFIGURE_CURL_OFF_T
dnl This defines _ALL_SOURCE for AIX dnl This defines _ALL_SOURCE for AIX
CURL_CHECK_AIX_ALL_SOURCE CURL_CHECK_AIX_ALL_SOURCE
@ -359,6 +358,7 @@ esac
CURL_CHECK_WIN32_LARGEFILE CURL_CHECK_WIN32_LARGEFILE
CURL_MAC_CFLAGS CURL_MAC_CFLAGS
CURL_SUPPORTS_BUILTIN_AVAILABLE
dnl ************************************************************ dnl ************************************************************
dnl switch off particular protocols dnl switch off particular protocols
@ -371,6 +371,7 @@ AC_HELP_STRING([--disable-http],[Disable HTTP support]),
no) no)
AC_MSG_RESULT(no) AC_MSG_RESULT(no)
AC_DEFINE(CURL_DISABLE_HTTP, 1, [to disable HTTP]) AC_DEFINE(CURL_DISABLE_HTTP, 1, [to disable HTTP])
disable_http="yes"
AC_MSG_WARN([disable HTTP disables FTP over proxy and RTSP]) AC_MSG_WARN([disable HTTP disables FTP over proxy and RTSP])
AC_SUBST(CURL_DISABLE_HTTP, [1]) AC_SUBST(CURL_DISABLE_HTTP, [1])
AC_DEFINE(CURL_DISABLE_RTSP, 1, [to disable RTSP]) AC_DEFINE(CURL_DISABLE_RTSP, 1, [to disable RTSP])
@ -981,6 +982,94 @@ dnl set variable for use in automakefile(s)
AM_CONDITIONAL(HAVE_LIBZ, test x"$AMFIXLIB" = x1) AM_CONDITIONAL(HAVE_LIBZ, test x"$AMFIXLIB" = x1)
AC_SUBST(ZLIB_LIBS) AC_SUBST(ZLIB_LIBS)
dnl **********************************************************************
dnl Check for the presence of BROTLI decoder libraries and headers
dnl **********************************************************************
dnl Brotli project home page: https://github.com/google/brotli
dnl Default to compiler & linker defaults for BROTLI files & libraries.
OPT_BROTLI=off
AC_ARG_WITH(brotli,dnl
AC_HELP_STRING([--with-brotli=PATH],[Where to look for brotli, PATH points to the BROTLI installation; when possible, set the PKG_CONFIG_PATH environment variable instead of using this option])
AC_HELP_STRING([--without-brotli], [disable BROTLI]),
OPT_BROTLI=$withval)
if test X"$OPT_BROTLI" != Xno; then
dnl backup the pre-brotli variables
CLEANLDFLAGS="$LDFLAGS"
CLEANCPPFLAGS="$CPPFLAGS"
CLEANLIBS="$LIBS"
case "$OPT_BROTLI" in
yes)
dnl --with-brotli (without path) used
CURL_CHECK_PKGCONFIG(libbrotlidec)
if test "$PKGCONFIG" != "no" ; then
LIB_BROTLI=`$PKGCONFIG --libs-only-l libbrotlidec`
LD_BROTLI=`$PKGCONFIG --libs-only-L libbrotlidec`
CPP_BROTLI=`$PKGCONFIG --cflags-only-I libbrotlidec`
version=`$PKGCONFIG --modversion libbrotlidec`
DIR_BROTLI=`echo $LD_BROTLI | $SED -e 's/-L//'`
fi
;;
off)
dnl no --with-brotli option given, just check default places
;;
*)
dnl use the given --with-brotli spot
PREFIX_BROTLI=$OPT_BROTLI
;;
esac
dnl if given with a prefix, we set -L and -I based on that
if test -n "$PREFIX_BROTLI"; then
LIB_BROTLI="-lbrotlidec"
LD_BROTLI=-L${PREFIX_BROTLI}/lib$libsuff
CPP_BROTLI=-I${PREFIX_BROTLI}/include
DIR_BROTLI=${PREFIX_BROTLI}/lib$libsuff
fi
LDFLAGS="$LDFLAGS $LD_BROTLI"
CPPFLAGS="$CPPFLAGS $CPP_BROTLI"
LIBS="$LIB_BROTLI $LIBS"
AC_CHECK_LIB(brotlidec, BrotliDecoderDecompress)
AC_CHECK_HEADERS(brotli/decode.h,
curl_brotli_msg="enabled (libbrotlidec)"
HAVE_BROTLI=1
AC_DEFINE(HAVE_BROTLI, 1, [if BROTLI is in use])
AC_SUBST(HAVE_BROTLI, [1])
)
if test X"$OPT_BROTLI" != Xoff &&
test "$HAVE_BROTLI" != "1"; then
AC_MSG_ERROR([BROTLI libs and/or directories were not found where specified!])
fi
if test "$HAVE_BROTLI" = "1"; then
if test -n "$DIR_BROTLI"; then
dnl when the brotli shared libs were found in a path that the run-time
dnl linker doesn't search through, we need to add it to LD_LIBRARY_PATH
dnl to prevent further configure tests to fail due to this
if test "x$cross_compiling" != "xyes"; then
LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$DIR_BROTLI"
export LD_LIBRARY_PATH
AC_MSG_NOTICE([Added $DIR_BROTLI to LD_LIBRARY_PATH])
fi
fi
else
dnl no brotli, revert back to clean variables
LDFLAGS=$CLEANLDFLAGS
CPPFLAGS=$CLEANCPPFLAGS
LIBS=$CLEANLIBS
fi
fi
dnl ********************************************************************** dnl **********************************************************************
dnl Check for LDAP dnl Check for LDAP
dnl ********************************************************************** dnl **********************************************************************
@ -1123,6 +1212,9 @@ if test "$ipv6" = yes; then
#include <ws2tcpip.h> #include <ws2tcpip.h>
#else #else
#include <netinet/in.h> #include <netinet/in.h>
#if defined (__TANDEM)
# include <netinet/in6.h>
#endif
#endif] , #endif] ,
struct sockaddr_in6 s; s.sin6_scope_id = 0; , have_sin6_scope_id=yes) struct sockaddr_in6 s; s.sin6_scope_id = 0; , have_sin6_scope_id=yes)
if test "$have_sin6_scope_id" = yes; then if test "$have_sin6_scope_id" = yes; then
@ -1340,6 +1432,41 @@ else
CPPFLAGS="$save_CPPFLAGS" CPPFLAGS="$save_CPPFLAGS"
fi fi
build_libstubgss=no
if test x"$want_gss" = "xyes"; then
build_libstubgss=yes
fi
AM_CONDITIONAL(BUILD_STUB_GSS, test "x$build_libstubgss" = "xyes")
dnl -------------------------------------------------------------
dnl parse --with-default-ssl-backend so it can be validated below
dnl -------------------------------------------------------------
DEFAULT_SSL_BACKEND=no
VALID_DEFAULT_SSL_BACKEND=
AC_ARG_WITH(default-ssl-backend,
AC_HELP_STRING([--with-default-ssl-backend=NAME],[Use NAME as default SSL backend])
AC_HELP_STRING([--without-default-ssl-backend],[Use implicit default SSL backend]),
[DEFAULT_SSL_BACKEND=$withval])
case "$DEFAULT_SSL_BACKEND" in
no)
dnl --without-default-ssl-backend option used
;;
default|yes)
dnl --with-default-ssl-backend option used without name
AC_MSG_ERROR([The name of the default SSL backend is required.])
;;
*)
dnl --with-default-ssl-backend option used with name
AC_SUBST(DEFAULT_SSL_BACKEND)
dnl needs to be validated below
VALID_DEFAULT_SSL_BACKEND=no
;;
esac
dnl **********************************************************************
dnl ------------------------------------------------- dnl -------------------------------------------------
dnl check winssl option before other SSL libraries dnl check winssl option before other SSL libraries
dnl ------------------------------------------------- dnl -------------------------------------------------
@ -1351,13 +1478,15 @@ AC_HELP_STRING([--without-winssl], [disable Windows native SSL/TLS]),
OPT_WINSSL=$withval) OPT_WINSSL=$withval)
AC_MSG_CHECKING([whether to enable Windows native SSL/TLS (Windows native builds only)]) AC_MSG_CHECKING([whether to enable Windows native SSL/TLS (Windows native builds only)])
if test "$curl_ssl_msg" = "$init_ssl_msg"; then if test -z "$ssl_backends" -o "x$OPT_WINSSL" != xno; then
ssl_msg=
if test "x$OPT_WINSSL" != "xno" && if test "x$OPT_WINSSL" != "xno" &&
test "x$curl_cv_native_windows" = "xyes"; then test "x$curl_cv_native_windows" = "xyes"; then
AC_MSG_RESULT(yes) AC_MSG_RESULT(yes)
AC_DEFINE(USE_SCHANNEL, 1, [to enable Windows native SSL/TLS support]) AC_DEFINE(USE_SCHANNEL, 1, [to enable Windows native SSL/TLS support])
AC_SUBST(USE_SCHANNEL, [1]) AC_SUBST(USE_SCHANNEL, [1])
curl_ssl_msg="enabled (Windows-native)" ssl_msg="Windows-native"
test schannel != "$DEFAULT_SSL_BACKEND" || VALID_DEFAULT_SSL_BACKEND=yes
WINSSL_ENABLED=1 WINSSL_ENABLED=1
# --with-winssl implies --enable-sspi # --with-winssl implies --enable-sspi
AC_DEFINE(USE_WINDOWS_SSPI, 1, [to enable SSPI support]) AC_DEFINE(USE_WINDOWS_SSPI, 1, [to enable SSPI support])
@ -1367,6 +1496,7 @@ if test "$curl_ssl_msg" = "$init_ssl_msg"; then
else else
AC_MSG_RESULT(no) AC_MSG_RESULT(no)
fi fi
test -z "$ssl_msg" || ssl_backends="${ssl_backends:+$ssl_backends, }$ssl_msg"
else else
AC_MSG_RESULT(no) AC_MSG_RESULT(no)
fi fi
@ -1378,18 +1508,20 @@ AC_HELP_STRING([--without-darwinssl], [disable Apple OS native SSL/TLS]),
OPT_DARWINSSL=$withval) OPT_DARWINSSL=$withval)
AC_MSG_CHECKING([whether to enable Apple OS native SSL/TLS]) AC_MSG_CHECKING([whether to enable Apple OS native SSL/TLS])
if test "$curl_ssl_msg" = "$init_ssl_msg"; then if test -z "$ssl_backends" -o "x$OPT_DARWINSSL" != xno; then
if test "x$OPT_DARWINSSL" != "xno" && if test "x$OPT_DARWINSSL" != "xno" &&
test -d "/System/Library/Frameworks/Security.framework"; then test -d "/System/Library/Frameworks/Security.framework"; then
AC_MSG_RESULT(yes) AC_MSG_RESULT(yes)
AC_DEFINE(USE_DARWINSSL, 1, [to enable Apple OS native SSL/TLS support]) AC_DEFINE(USE_DARWINSSL, 1, [to enable Apple OS native SSL/TLS support])
AC_SUBST(USE_DARWINSSL, [1]) AC_SUBST(USE_DARWINSSL, [1])
curl_ssl_msg="enabled (Apple OS-native)" ssl_msg="Apple OS-native"
test darwinssl != "$DEFAULT_SSL_BACKEND" || VALID_DEFAULT_SSL_BACKEND=yes
DARWINSSL_ENABLED=1 DARWINSSL_ENABLED=1
LDFLAGS="$LDFLAGS -framework CoreFoundation -framework Security" LDFLAGS="$LDFLAGS -framework CoreFoundation -framework Security"
else else
AC_MSG_RESULT(no) AC_MSG_RESULT(no)
fi fi
test -z "$ssl_msg" || ssl_backends="${ssl_backends:+$ssl_backends, }$ssl_msg"
else else
AC_MSG_RESULT(no) AC_MSG_RESULT(no)
fi fi
@ -1407,7 +1539,10 @@ AC_HELP_STRING([--with-ssl=PATH],[Where to look for OpenSSL, PATH points to the
AC_HELP_STRING([--without-ssl], [disable OpenSSL]), AC_HELP_STRING([--without-ssl], [disable OpenSSL]),
OPT_SSL=$withval) OPT_SSL=$withval)
if test "$curl_ssl_msg" = "$init_ssl_msg" && test X"$OPT_SSL" != Xno; then if test -z "$ssl_backends" -o "x$OPT_SSL" != xno &&
test X"$OPT_SSL" != Xno; then
ssl_msg=
dnl backup the pre-ssl variables dnl backup the pre-ssl variables
CLEANLDFLAGS="$LDFLAGS" CLEANLDFLAGS="$LDFLAGS"
CLEANCPPFLAGS="$CPPFLAGS" CLEANCPPFLAGS="$CPPFLAGS"
@ -1521,7 +1656,7 @@ if test "$curl_ssl_msg" = "$init_ssl_msg" && test X"$OPT_SSL" != Xno; then
dnl still no, but what about with -ldl? dnl still no, but what about with -ldl?
AC_MSG_CHECKING([OpenSSL linking with -ldl]) AC_MSG_CHECKING([OpenSSL linking with -ldl])
LIBS="-ldl $LIBS" LIBS="$LIBS -ldl"
AC_TRY_LINK( AC_TRY_LINK(
[ [
#include <openssl/err.h> #include <openssl/err.h>
@ -1538,7 +1673,7 @@ if test "$curl_ssl_msg" = "$init_ssl_msg" && test X"$OPT_SSL" != Xno; then
dnl ok, so what about bouth -ldl and -lpthread? dnl ok, so what about bouth -ldl and -lpthread?
AC_MSG_CHECKING([OpenSSL linking with -ldl and -lpthread]) AC_MSG_CHECKING([OpenSSL linking with -ldl and -lpthread])
LIBS="-lpthread $LIBS" LIBS="$LIBS -lpthread"
AC_TRY_LINK( AC_TRY_LINK(
[ [
#include <openssl/err.h> #include <openssl/err.h>
@ -1588,7 +1723,8 @@ if test "$curl_ssl_msg" = "$init_ssl_msg" && test X"$OPT_SSL" != Xno; then
dnl Have the libraries--check for OpenSSL headers dnl Have the libraries--check for OpenSSL headers
AC_CHECK_HEADERS(openssl/x509.h openssl/rsa.h openssl/crypto.h \ AC_CHECK_HEADERS(openssl/x509.h openssl/rsa.h openssl/crypto.h \
openssl/pem.h openssl/ssl.h openssl/err.h, openssl/pem.h openssl/ssl.h openssl/err.h,
curl_ssl_msg="enabled (OpenSSL)" ssl_msg="OpenSSL"
test openssl != "$DEFAULT_SSL_BACKEND" || VALID_DEFAULT_SSL_BACKEND=yes
OPENSSL_ENABLED=1 OPENSSL_ENABLED=1
AC_DEFINE(USE_OPENSSL, 1, [if OpenSSL is in use])) AC_DEFINE(USE_OPENSSL, 1, [if OpenSSL is in use]))
@ -1602,16 +1738,13 @@ if test "$curl_ssl_msg" = "$init_ssl_msg" && test X"$OPT_SSL" != Xno; then
test $ac_cv_header_crypto_h = yes && test $ac_cv_header_crypto_h = yes &&
test $ac_cv_header_ssl_h = yes; then test $ac_cv_header_ssl_h = yes; then
dnl three matches dnl three matches
curl_ssl_msg="enabled (OpenSSL)" ssl_msg="OpenSSL"
OPENSSL_ENABLED=1 OPENSSL_ENABLED=1
fi fi
fi fi
fi fi
if test X"$OPENSSL_ENABLED" = X"1"; then if test X"$OPENSSL_ENABLED" != X"1"; then
dnl is there a pkcs12.h header present?
AC_CHECK_HEADERS(openssl/pkcs12.h)
else
LIBS="$CLEANLIBS" LIBS="$CLEANLIBS"
fi fi
@ -1653,7 +1786,7 @@ if test "$curl_ssl_msg" = "$init_ssl_msg" && test X"$OPT_SSL" != Xno; then
AC_MSG_RESULT([yes]) AC_MSG_RESULT([yes])
AC_DEFINE_UNQUOTED(HAVE_BORINGSSL, 1, AC_DEFINE_UNQUOTED(HAVE_BORINGSSL, 1,
[Define to 1 if using BoringSSL.]) [Define to 1 if using BoringSSL.])
curl_ssl_msg="enabled (BoringSSL)" ssl_msg="BoringSSL"
],[ ],[
AC_MSG_RESULT([no]) AC_MSG_RESULT([no])
]) ])
@ -1669,7 +1802,7 @@ if test "$curl_ssl_msg" = "$init_ssl_msg" && test X"$OPT_SSL" != Xno; then
AC_MSG_RESULT([yes]) AC_MSG_RESULT([yes])
AC_DEFINE_UNQUOTED(HAVE_LIBRESSL, 1, AC_DEFINE_UNQUOTED(HAVE_LIBRESSL, 1,
[Define to 1 if using libressl.]) [Define to 1 if using libressl.])
curl_ssl_msg="enabled (libressl)" ssl_msg="libressl"
],[ ],[
AC_MSG_RESULT([no]) AC_MSG_RESULT([no])
]) ])
@ -1689,6 +1822,7 @@ if test "$curl_ssl_msg" = "$init_ssl_msg" && test X"$OPT_SSL" != Xno; then
CURL_CHECK_OPENSSL_API CURL_CHECK_OPENSSL_API
fi fi
test -z "$ssl_msg" || ssl_backends="${ssl_backends:+$ssl_backends, }$ssl_msg"
fi fi
dnl ********************************************************************** dnl **********************************************************************
@ -1750,7 +1884,8 @@ AC_HELP_STRING([--with-gnutls=PATH],[where to look for GnuTLS, PATH points to th
AC_HELP_STRING([--without-gnutls], [disable GnuTLS detection]), AC_HELP_STRING([--without-gnutls], [disable GnuTLS detection]),
OPT_GNUTLS=$withval) OPT_GNUTLS=$withval)
if test "$curl_ssl_msg" = "$init_ssl_msg"; then if test -z "$ssl_backends" -o "x$OPT_GNUTLS" != xno; then
ssl_msg=
if test X"$OPT_GNUTLS" != Xno; then if test X"$OPT_GNUTLS" != Xno; then
@ -1824,7 +1959,8 @@ if test "$curl_ssl_msg" = "$init_ssl_msg"; then
AC_SUBST(USE_GNUTLS, [1]) AC_SUBST(USE_GNUTLS, [1])
GNUTLS_ENABLED=1 GNUTLS_ENABLED=1
USE_GNUTLS="yes" USE_GNUTLS="yes"
curl_ssl_msg="enabled (GnuTLS)" ssl_msg="GnuTLS"
test gnutls != "$DEFAULT_SSL_BACKEND" || VALID_DEFAULT_SSL_BACKEND=yes
], ],
[ [
LIBS="$CLEANLIBS" LIBS="$CLEANLIBS"
@ -1852,6 +1988,7 @@ if test "$curl_ssl_msg" = "$init_ssl_msg"; then
fi dnl GNUTLS not disabled fi dnl GNUTLS not disabled
test -z "$ssl_msg" || ssl_backends="${ssl_backends:+$ssl_backends, }$ssl_msg"
fi fi
dnl --- dnl ---
@ -1909,7 +2046,8 @@ AC_HELP_STRING([--with-polarssl=PATH],[where to look for PolarSSL, PATH points t
AC_HELP_STRING([--without-polarssl], [disable PolarSSL detection]), AC_HELP_STRING([--without-polarssl], [disable PolarSSL detection]),
OPT_POLARSSL=$withval) OPT_POLARSSL=$withval)
if test "$curl_ssl_msg" = "$init_ssl_msg"; then if test -z "$ssl_backends" -o "x$OPT_POLARSSL" != xno; then
ssl_msg=
if test X"$OPT_POLARSSL" != Xno; then if test X"$OPT_POLARSSL" != Xno; then
@ -1927,7 +2065,8 @@ if test "$curl_ssl_msg" = "$init_ssl_msg"; then
AC_SUBST(USE_POLARSSL, [1]) AC_SUBST(USE_POLARSSL, [1])
POLARSSL_ENABLED=1 POLARSSL_ENABLED=1
USE_POLARSSL="yes" USE_POLARSSL="yes"
curl_ssl_msg="enabled (PolarSSL)" ssl_msg="PolarSSL"
test polarssl != "$DEFAULT_SSL_BACKEND" || VALID_DEFAULT_SSL_BACKEND=yes
]) ])
fi fi
@ -1953,7 +2092,8 @@ if test "$curl_ssl_msg" = "$init_ssl_msg"; then
AC_SUBST(USE_POLARSSL, [1]) AC_SUBST(USE_POLARSSL, [1])
POLARSSL_ENABLED=1 POLARSSL_ENABLED=1
USE_POLARSSL="yes" USE_POLARSSL="yes"
curl_ssl_msg="enabled (PolarSSL)" ssl_msg="PolarSSL"
test polarssl != "$DEFAULT_SSL_BACKEND" || VALID_DEFAULT_SSL_BACKEND=yes
], ],
[ [
CPPFLAGS=$_cppflags CPPFLAGS=$_cppflags
@ -1981,6 +2121,7 @@ if test "$curl_ssl_msg" = "$init_ssl_msg"; then
fi dnl PolarSSL not disabled fi dnl PolarSSL not disabled
test -z "$ssl_msg" || ssl_backends="${ssl_backends:+$ssl_backends, }$ssl_msg"
fi fi
dnl ---------------------------------------------------- dnl ----------------------------------------------------
@ -1996,7 +2137,8 @@ AC_HELP_STRING([--with-mbedtls=PATH],[where to look for mbedTLS, PATH points to
AC_HELP_STRING([--without-mbedtls], [disable mbedTLS detection]), AC_HELP_STRING([--without-mbedtls], [disable mbedTLS detection]),
OPT_MBEDTLS=$withval) OPT_MBEDTLS=$withval)
if test "$curl_ssl_msg" = "$init_ssl_msg"; then if test -z "$ssl_backends" -o "x$OPT_MBEDTLS" != xno; then
ssl_msg=
if test X"$OPT_MBEDTLS" != Xno; then if test X"$OPT_MBEDTLS" != Xno; then
@ -2014,7 +2156,8 @@ if test "$curl_ssl_msg" = "$init_ssl_msg"; then
AC_SUBST(USE_MBEDTLS, [1]) AC_SUBST(USE_MBEDTLS, [1])
MBEDTLS_ENABLED=1 MBEDTLS_ENABLED=1
USE_MBEDTLS="yes" USE_MBEDTLS="yes"
curl_ssl_msg="enabled (mbedTLS)" ssl_msg="mbedTLS"
test mbedtls != "$DEFAULT_SSL_BACKEND" || VALID_DEFAULT_SSL_BACKEND=yes
], [], -lmbedx509 -lmbedcrypto) ], [], -lmbedx509 -lmbedcrypto)
fi fi
@ -2040,7 +2183,8 @@ if test "$curl_ssl_msg" = "$init_ssl_msg"; then
AC_SUBST(USE_MBEDTLS, [1]) AC_SUBST(USE_MBEDTLS, [1])
MBEDTLS_ENABLED=1 MBEDTLS_ENABLED=1
USE_MBEDTLS="yes" USE_MBEDTLS="yes"
curl_ssl_msg="enabled (mbedTLS)" ssl_msg="mbedTLS"
test mbedtls != "$DEFAULT_SSL_BACKEND" || VALID_DEFAULT_SSL_BACKEND=yes
], ],
[ [
CPPFLAGS=$_cppflags CPPFLAGS=$_cppflags
@ -2068,6 +2212,7 @@ if test "$curl_ssl_msg" = "$init_ssl_msg"; then
fi dnl mbedTLS not disabled fi dnl mbedTLS not disabled
test -z "$ssl_msg" || ssl_backends="${ssl_backends:+$ssl_backends, }$ssl_msg"
fi fi
dnl ---------------------------------------------------- dnl ----------------------------------------------------
@ -2084,7 +2229,8 @@ AC_HELP_STRING([--with-cyassl=PATH],[where to look for CyaSSL, PATH points to th
AC_HELP_STRING([--without-cyassl], [disable CyaSSL detection]), AC_HELP_STRING([--without-cyassl], [disable CyaSSL detection]),
OPT_CYASSL=$withval) OPT_CYASSL=$withval)
if test "$curl_ssl_msg" = "$init_ssl_msg"; then if test -z "$ssl_backends" -o "x$OPT_CYASSL" != xno; then
ssl_msg=
if test X"$OPT_CYASSL" != Xno; then if test X"$OPT_CYASSL" != Xno; then
@ -2106,7 +2252,8 @@ if test "$curl_ssl_msg" = "$init_ssl_msg"; then
AC_SUBST(USE_CYASSL, [1]) AC_SUBST(USE_CYASSL, [1])
CYASSL_ENABLED=1 CYASSL_ENABLED=1
USE_CYASSL="yes" USE_CYASSL="yes"
curl_ssl_msg="enabled (CyaSSL)" ssl_msg="CyaSSL"
test cyassl != "$DEFAULT_SSL_BACKEND" || VALID_DEFAULT_SSL_BACKEND=yes
]) ])
fi fi
@ -2132,7 +2279,8 @@ if test "$curl_ssl_msg" = "$init_ssl_msg"; then
AC_SUBST(USE_CYASSL, [1]) AC_SUBST(USE_CYASSL, [1])
CYASSL_ENABLED=1 CYASSL_ENABLED=1
USE_CYASSL="yes" USE_CYASSL="yes"
curl_ssl_msg="enabled (CyaSSL)" ssl_msg="CyaSSL"
test cyassl != "$DEFAULT_SSL_BACKEND" || VALID_DEFAULT_SSL_BACKEND=yes
], ],
[ [
CPPFLAGS=$_cppflags CPPFLAGS=$_cppflags
@ -2177,7 +2325,8 @@ if test "$curl_ssl_msg" = "$init_ssl_msg"; then
AC_SUBST(USE_CYASSL, [1]) AC_SUBST(USE_CYASSL, [1])
CYASSL_ENABLED=1 CYASSL_ENABLED=1
USE_CYASSL="yes" USE_CYASSL="yes"
curl_ssl_msg="enabled (WolfSSL)" ssl_msg="WolfSSL"
test cyassl != "$DEFAULT_SSL_BACKEND" || VALID_DEFAULT_SSL_BACKEND=yes
], ],
[ [
AC_MSG_RESULT(no) AC_MSG_RESULT(no)
@ -2231,6 +2380,7 @@ if test "$curl_ssl_msg" = "$init_ssl_msg"; then
fi dnl CyaSSL not disabled fi dnl CyaSSL not disabled
test -z "$ssl_msg" || ssl_backends="${ssl_backends:+$ssl_backends, }$ssl_msg"
fi fi
dnl ---------------------------------------------------- dnl ----------------------------------------------------
@ -2245,7 +2395,8 @@ AC_HELP_STRING([--with-nss=PATH],[where to look for NSS, PATH points to the inst
AC_HELP_STRING([--without-nss], [disable NSS detection]), AC_HELP_STRING([--without-nss], [disable NSS detection]),
OPT_NSS=$withval) OPT_NSS=$withval)
if test "$curl_ssl_msg" = "$init_ssl_msg"; then if test -z "$ssl_backends" -o "x$OPT_NSS" != xno; then
ssl_msg=
if test X"$OPT_NSS" != Xno; then if test X"$OPT_NSS" != Xno; then
@ -2320,7 +2471,8 @@ if test "$curl_ssl_msg" = "$init_ssl_msg"; then
AC_SUBST(USE_NSS, [1]) AC_SUBST(USE_NSS, [1])
USE_NSS="yes" USE_NSS="yes"
NSS_ENABLED=1 NSS_ENABLED=1
curl_ssl_msg="enabled (NSS)" ssl_msg="NSS"
test nss != "$DEFAULT_SSL_BACKEND" || VALID_DEFAULT_SSL_BACKEND=yes
], ],
[ [
LDFLAGS="$CLEANLDFLAGS" LDFLAGS="$CLEANLDFLAGS"
@ -2349,7 +2501,8 @@ if test "$curl_ssl_msg" = "$init_ssl_msg"; then
fi dnl NSS not disabled fi dnl NSS not disabled
fi dnl curl_ssl_msg = init_ssl_msg test -z "$ssl_msg" || ssl_backends="${ssl_backends:+$ssl_backends, }$ssl_msg"
fi
OPT_AXTLS=off OPT_AXTLS=off
@ -2358,7 +2511,8 @@ AC_HELP_STRING([--with-axtls=PATH],[Where to look for axTLS, PATH points to the
AC_HELP_STRING([--without-axtls], [disable axTLS]), AC_HELP_STRING([--without-axtls], [disable axTLS]),
OPT_AXTLS=$withval) OPT_AXTLS=$withval)
if test "$curl_ssl_msg" = "$init_ssl_msg"; then if test -z "$ssl_backends" -o "x$OPT_AXTLS" != xno; then
ssl_msg=
if test X"$OPT_AXTLS" != Xno; then if test X"$OPT_AXTLS" != Xno; then
dnl backup the pre-axtls variables dnl backup the pre-axtls variables
CLEANLDFLAGS="$LDFLAGS" CLEANLDFLAGS="$LDFLAGS"
@ -2392,7 +2546,8 @@ if test "$curl_ssl_msg" = "$init_ssl_msg"; then
AC_SUBST(USE_AXTLS, [1]) AC_SUBST(USE_AXTLS, [1])
AXTLS_ENABLED=1 AXTLS_ENABLED=1
USE_AXTLS="yes" USE_AXTLS="yes"
curl_ssl_msg="enabled (axTLS)" ssl_msg="axTLS"
test axtls != "$DEFAULT_SSL_BACKEND" || VALID_DEFAULT_SSL_BACKEND=yes
if test "x$cross_compiling" != "xyes"; then if test "x$cross_compiling" != "xyes"; then
LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$LIB_AXTLS" LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$LIB_AXTLS"
@ -2405,15 +2560,46 @@ if test "$curl_ssl_msg" = "$init_ssl_msg"; then
LIBS="$CLEANLIBS" LIBS="$CLEANLIBS"
]) ])
fi fi
test -z "$ssl_msg" || ssl_backends="${ssl_backends:+$ssl_backends, }$ssl_msg"
fi fi
if test "x$OPENSSL_ENABLED$GNUTLS_ENABLED$NSS_ENABLED$POLARSSL_ENABLED$MBEDTLS_ENABLED$AXTLS_ENABLED$CYASSL_ENABLED$WINSSL_ENABLED$DARWINSSL_ENABLED" = "x"; then case "x$OPENSSL_ENABLED$GNUTLS_ENABLED$NSS_ENABLED$POLARSSL_ENABLED$MBEDTLS_ENABLED$AXTLS_ENABLED$CYASSL_ENABLED$WINSSL_ENABLED$DARWINSSL_ENABLED" in
x)
AC_MSG_WARN([SSL disabled, you will not be able to use HTTPS, FTPS, NTLM and more.]) AC_MSG_WARN([SSL disabled, you will not be able to use HTTPS, FTPS, NTLM and more.])
AC_MSG_WARN([Use --with-ssl, --with-gnutls, --with-polarssl, --with-cyassl, --with-nss, --with-axtls, --with-winssl, or --with-darwinssl to address this.]) AC_MSG_WARN([Use --with-ssl, --with-gnutls, --with-polarssl, --with-cyassl, --with-nss, --with-axtls, --with-winssl, or --with-darwinssl to address this.])
else ;;
# SSL is enabled, genericly x1)
# one SSL backend is enabled
AC_SUBST(SSL_ENABLED) AC_SUBST(SSL_ENABLED)
SSL_ENABLED="1" SSL_ENABLED="1"
AC_MSG_NOTICE([built with one SSL backend])
;;
*)
# more than one SSL backend is enabled
AC_SUBST(SSL_ENABLED)
SSL_ENABLED="1"
AC_SUBST(CURL_WITH_MULTI_SSL)
CURL_WITH_MULTI_SSL="1"
AC_DEFINE(CURL_WITH_MULTI_SSL, 1, [built with multiple SSL backends])
AC_MSG_NOTICE([built with multiple SSL backends])
;;
esac
if test -n "$ssl_backends"; then
curl_ssl_msg="enabled ($ssl_backends)"
fi
if test no = "$VALID_DEFAULT_SSL_BACKEND"
then
if test -n "$SSL_ENABLED"
then
AC_MSG_ERROR([Default SSL backend $DEFAULT_SSL_BACKEND not enabled!])
else
AC_MSG_ERROR([Default SSL backend requires SSL!])
fi
elif test yes = "$VALID_DEFAULT_SSL_BACKEND"
then
AC_DEFINE_UNQUOTED([CURL_DEFAULT_SSL_BACKEND], ["$DEFAULT_SSL_BACKEND"], [Default SSL backend])
fi fi
dnl ********************************************************************** dnl **********************************************************************
@ -2539,8 +2725,15 @@ dnl Default to compiler & linker defaults for LIBSSH2 files & libraries.
OPT_LIBSSH2=off OPT_LIBSSH2=off
AC_ARG_WITH(libssh2,dnl AC_ARG_WITH(libssh2,dnl
AC_HELP_STRING([--with-libssh2=PATH],[Where to look for libssh2, PATH points to the LIBSSH2 installation; when possible, set the PKG_CONFIG_PATH environment variable instead of using this option]) AC_HELP_STRING([--with-libssh2=PATH],[Where to look for libssh2, PATH points to the LIBSSH2 installation; when possible, set the PKG_CONFIG_PATH environment variable instead of using this option])
AC_HELP_STRING([--without-libssh2], [disable LIBSSH2]), AC_HELP_STRING([--with-libssh2], [enable LIBSSH2]),
OPT_LIBSSH2=$withval) OPT_LIBSSH2=$withval, OPT_LIBSSH2=no)
OPT_LIBSSH=off
AC_ARG_WITH(libssh,dnl
AC_HELP_STRING([--with-libssh=PATH],[Where to look for libssh, PATH points to the LIBSSH installation; when possible, set the PKG_CONFIG_PATH environment variable instead of using this option])
AC_HELP_STRING([--with-libssh], [enable LIBSSH]),
OPT_LIBSSH=$withval, OPT_LIBSSH=no)
if test X"$OPT_LIBSSH2" != Xno; then if test X"$OPT_LIBSSH2" != Xno; then
dnl backup the pre-libssh2 variables dnl backup the pre-libssh2 variables
@ -2615,6 +2808,79 @@ if test X"$OPT_LIBSSH2" != Xno; then
CPPFLAGS=$CLEANCPPFLAGS CPPFLAGS=$CLEANCPPFLAGS
LIBS=$CLEANLIBS LIBS=$CLEANLIBS
fi fi
elif test X"$OPT_LIBSSH" != Xno; then
dnl backup the pre-libssh variables
CLEANLDFLAGS="$LDFLAGS"
CLEANCPPFLAGS="$CPPFLAGS"
CLEANLIBS="$LIBS"
case "$OPT_LIBSSH" in
yes)
dnl --with-libssh (without path) used
CURL_CHECK_PKGCONFIG(libssh)
if test "$PKGCONFIG" != "no" ; then
LIB_SSH=`$PKGCONFIG --libs-only-l libssh`
LD_SSH=`$PKGCONFIG --libs-only-L libssh`
CPP_SSH=`$PKGCONFIG --cflags-only-I libssh`
version=`$PKGCONFIG --modversion libssh`
DIR_SSH=`echo $LD_SSH | $SED -e 's/-L//'`
fi
;;
off)
dnl no --with-libssh option given, just check default places
;;
*)
dnl use the given --with-libssh spot
PREFIX_SSH=$OPT_LIBSSH
;;
esac
dnl if given with a prefix, we set -L and -I based on that
if test -n "$PREFIX_SSH"; then
LIB_SSH="-lssh"
LD_SSH=-L${PREFIX_SSH}/lib$libsuff
CPP_SSH=-I${PREFIX_SSH}/include
DIR_SSH=${PREFIX_SSH}/lib$libsuff
fi
LDFLAGS="$LDFLAGS $LD_SSH"
CPPFLAGS="$CPPFLAGS $CPP_SSH"
LIBS="$LIB_SSH $LIBS"
AC_CHECK_LIB(ssh, ssh_new)
AC_CHECK_HEADERS(libssh/libssh.h,
curl_ssh_msg="enabled (libSSH)"
LIBSSH_ENABLED=1
AC_DEFINE(USE_LIBSSH, 1, [if libSSH is in use])
AC_SUBST(USE_LIBSSH, [1])
)
if test X"$OPT_LIBSSH" != Xoff &&
test "$LIBSSH_ENABLED" != "1"; then
AC_MSG_ERROR([libSSH libs and/or directories were not found where specified!])
fi
if test "$LIBSSH_ENABLED" = "1"; then
if test -n "$DIR_SSH"; then
dnl when the libssh shared libs were found in a path that the run-time
dnl linker doesn't search through, we need to add it to LD_LIBRARY_PATH
dnl to prevent further configure tests to fail due to this
if test "x$cross_compiling" != "xyes"; then
LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$DIR_SSH"
export LD_LIBRARY_PATH
AC_MSG_NOTICE([Added $DIR_SSH to LD_LIBRARY_PATH])
fi
fi
else
dnl no libssh, revert back to clean variables
LDFLAGS=$CLEANLDFLAGS
CPPFLAGS=$CLEANCPPFLAGS
LIBS=$CLEANLIBS
fi
fi fi
dnl ********************************************************************** dnl **********************************************************************
@ -2714,7 +2980,9 @@ AC_HELP_STRING([--disable-versioned-symbols], [Disable versioned symbols in shar
AC_MSG_WARN([You need an ld version supporting the --version-script option]) AC_MSG_WARN([You need an ld version supporting the --version-script option])
else else
AC_MSG_RESULT(yes) AC_MSG_RESULT(yes)
if test "x$OPENSSL_ENABLED" = "x1"; then if test "x$CURL_WITH_MULTI_SSL" = "x1"; then
versioned_symbols_flavour="MULTISSL_"
elif test "x$OPENSSL_ENABLED" = "x1"; then
versioned_symbols_flavour="OPENSSL_" versioned_symbols_flavour="OPENSSL_"
elif test "x$GNUTLS_ENABLED" = "x1"; then elif test "x$GNUTLS_ENABLED" = "x1"; then
versioned_symbols_flavour="GNUTLS_" versioned_symbols_flavour="GNUTLS_"
@ -2786,6 +3054,7 @@ if test "$want_winidn" = "yes"; then
clean_LDFLAGS="$LDFLAGS" clean_LDFLAGS="$LDFLAGS"
clean_LIBS="$LIBS" clean_LIBS="$LIBS"
WINIDN_LIBS="-lnormaliz" WINIDN_LIBS="-lnormaliz"
WINIDN_CPPFLAGS="-DWINVER=0x0600"
# #
if test "$want_winidn_path" != "default"; then if test "$want_winidn_path" != "default"; then
dnl path has been specified dnl path has been specified
@ -2801,7 +3070,11 @@ if test "$want_winidn" = "yes"; then
# #
AC_MSG_CHECKING([if IdnToUnicode can be linked]) AC_MSG_CHECKING([if IdnToUnicode can be linked])
AC_LINK_IFELSE([ AC_LINK_IFELSE([
AC_LANG_FUNC_LINK_TRY([IdnToUnicode]) AC_LANG_PROGRAM([[
#include <windows.h>
]],[[
IdnToUnicode(0, NULL, 0, NULL, 0);
]])
],[ ],[
AC_MSG_RESULT([yes]) AC_MSG_RESULT([yes])
tst_links_winidn="yes" tst_links_winidn="yes"
@ -2958,6 +3231,12 @@ dnl Check for nghttp2
dnl ********************************************************************** dnl **********************************************************************
OPT_H2="yes" OPT_H2="yes"
if test "x$disable_http" = "xyes"; then
# without HTTP, nghttp2 is no use
OPT_H2="no"
fi
AC_ARG_WITH(nghttp2, AC_ARG_WITH(nghttp2,
AC_HELP_STRING([--with-nghttp2=PATH],[Enable nghttp2 usage]) AC_HELP_STRING([--with-nghttp2=PATH],[Enable nghttp2 usage])
AC_HELP_STRING([--without-nghttp2],[Disable nghttp2 usage]), AC_HELP_STRING([--without-nghttp2],[Disable nghttp2 usage]),
@ -3080,11 +3359,12 @@ AC_CHECK_HEADERS(
assert.h \ assert.h \
unistd.h \ unistd.h \
stdlib.h \ stdlib.h \
limits.h \
arpa/inet.h \ arpa/inet.h \
net/if.h \ net/if.h \
netinet/in.h \ netinet/in.h \
netinet/in6.h \
sys/un.h \ sys/un.h \
linux/tcp.h \
netinet/tcp.h \ netinet/tcp.h \
netdb.h \ netdb.h \
sys/sockio.h \ sys/sockio.h \
@ -3133,6 +3413,9 @@ dnl default includes
#ifdef HAVE_NETINET_IN_H #ifdef HAVE_NETINET_IN_H
#include <netinet/in.h> #include <netinet/in.h>
#endif #endif
#ifdef HAVE_NETINET_IN6_H
#include <netinet/in6.h>
#endif
#ifdef HAVE_SYS_UN_H #ifdef HAVE_SYS_UN_H
#include <sys/un.h> #include <sys/un.h>
#endif #endif
@ -3151,18 +3434,15 @@ AC_CHECK_SIZEOF(size_t)
AC_CHECK_SIZEOF(long) AC_CHECK_SIZEOF(long)
AC_CHECK_SIZEOF(int) AC_CHECK_SIZEOF(int)
AC_CHECK_SIZEOF(short) AC_CHECK_SIZEOF(short)
CURL_CONFIGURE_LONG
AC_CHECK_SIZEOF(time_t) AC_CHECK_SIZEOF(time_t)
AC_CHECK_SIZEOF(off_t) AC_CHECK_SIZEOF(off_t)
soname_bump=no o=$CPPFLAGS
if test x"$curl_cv_native_windows" != "xyes" && CPPFLAGS="-I$srcdir/include $CPPFLAGS"
test $ac_cv_sizeof_off_t -ne $curl_sizeof_curl_off_t; then AC_CHECK_SIZEOF(curl_off_t, unused , [
AC_MSG_WARN([This libcurl built is probably not ABI compatible with previous]) #include <curl/system.h>
AC_MSG_WARN([builds! You MUST read lib/README.curl_off_t to figure it out.]) ])
soname_bump=yes CPPFLAGS=$o
fi
AC_CHECK_TYPE(long long, AC_CHECK_TYPE(long long,
[AC_DEFINE(HAVE_LONGLONG, 1, [AC_DEFINE(HAVE_LONGLONG, 1,
@ -3279,23 +3559,19 @@ case $host in
;; ;;
esac esac
AC_CHECK_FUNCS([fork \ AC_CHECK_FUNCS([geteuid \
geteuid \
getpass_r \ getpass_r \
getppid \ getppid \
getprotobyname \
getpwuid \ getpwuid \
getpwuid_r \ getpwuid_r \
getrlimit \ getrlimit \
gettimeofday \ gettimeofday \
if_nametoindex \ if_nametoindex \
inet_addr \ mach_absolute_time \
perror \
pipe \ pipe \
setlocale \ setlocale \
setmode \ setmode \
setrlimit \ setrlimit \
uname \
utime \ utime \
utimes utimes
],[ ],[
@ -3400,11 +3676,8 @@ else
fi fi
AM_CONDITIONAL(BUILD_LIBHOSTNAME, test x$build_libhostname = xyes) AM_CONDITIONAL(BUILD_LIBHOSTNAME, test x$build_libhostname = xyes)
CURL_CHECK_OPTION_THREADED_RESOLVER if test "x$want_ares" != xyes; then
CURL_CHECK_OPTION_THREADED_RESOLVER
if test "x$want_thres" = xyes && test "x$want_ares" = xyes; then
AC_MSG_ERROR(
[Options --enable-threaded-resolver and --enable-ares are mutually exclusive])
fi fi
dnl ************************************************************ dnl ************************************************************
@ -3649,26 +3922,6 @@ dnl hiding of library internal symbols
dnl dnl
CURL_CONFIGURE_SYMBOL_HIDING CURL_CONFIGURE_SYMBOL_HIDING
dnl ************************************************************
dnl enforce SONAME bump
dnl
AC_MSG_CHECKING([whether to enforce SONAME bump])
AC_ARG_ENABLE(soname-bump,
AC_HELP_STRING([--enable-soname-bump],[Enable enforced SONAME bump])
AC_HELP_STRING([--disable-soname-bump],[Disable enforced SONAME bump]),
[ case "$enableval" in
yes) AC_MSG_RESULT(yes)
soname_bump=yes
;;
*)
AC_MSG_RESULT(no)
;;
esac ],
AC_MSG_RESULT($soname_bump)
)
AM_CONDITIONAL(SONAME_BUMP, test x$soname_bump = xyes)
dnl dnl
dnl All the library dependencies put into $LIB apply to libcurl only. dnl All the library dependencies put into $LIB apply to libcurl only.
dnl dnl
@ -3715,6 +3968,9 @@ fi
if test "x$HAVE_LIBZ" = "x1"; then if test "x$HAVE_LIBZ" = "x1"; then
SUPPORT_FEATURES="$SUPPORT_FEATURES libz" SUPPORT_FEATURES="$SUPPORT_FEATURES libz"
fi fi
if test "x$HAVE_BROTLI" = "x1"; then
SUPPORT_FEATURES="$SUPPORT_FEATURES brotli"
fi
if test "x$USE_ARES" = "x1" -o "x$USE_THREADS_POSIX" = "x1" \ if test "x$USE_ARES" = "x1" -o "x$USE_THREADS_POSIX" = "x1" \
-o "x$USE_THREADS_WIN32" = "x1"; then -o "x$USE_THREADS_WIN32" = "x1"; then
SUPPORT_FEATURES="$SUPPORT_FEATURES AsynchDNS" SUPPORT_FEATURES="$SUPPORT_FEATURES AsynchDNS"
@ -3765,6 +4021,10 @@ if test "x$USE_NGHTTP2" = "x1"; then
SUPPORT_FEATURES="$SUPPORT_FEATURES HTTP2" SUPPORT_FEATURES="$SUPPORT_FEATURES HTTP2"
fi fi
if test "x$CURL_WITH_MULTI_SSL" = "x1"; then
SUPPORT_FEATURES="$SUPPORT_FEATURES MultiSSL"
fi
if test "x$OPENSSL_ENABLED" = "x1" -o "x$GNUTLS_ENABLED" = "x1" \ if test "x$OPENSSL_ENABLED" = "x1" -o "x$GNUTLS_ENABLED" = "x1" \
-o "x$NSS_ENABLED" = "x1"; then -o "x$NSS_ENABLED" = "x1"; then
SUPPORT_FEATURES="$SUPPORT_FEATURES HTTPS-proxy" SUPPORT_FEATURES="$SUPPORT_FEATURES HTTPS-proxy"
@ -3841,6 +4101,10 @@ if test "x$USE_LIBSSH2" = "x1"; then
SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS SCP" SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS SCP"
SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS SFTP" SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS SFTP"
fi fi
if test "x$USE_LIBSSH" = "x1"; then
SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS SCP"
SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS SFTP"
fi
if test "x$CURL_DISABLE_RTSP" != "x1"; then if test "x$CURL_DISABLE_RTSP" != "x1"; then
SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS RTSP" SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS RTSP"
fi fi
@ -3872,6 +4136,9 @@ squeeze SUPPORT_PROTOCOLS
XC_CHECK_BUILD_FLAGS XC_CHECK_BUILD_FLAGS
SSL_BACKENDS=${ssl_backends}
AC_SUBST(SSL_BACKENDS)
if test "x$want_curldebug_assumed" = "xyes" && if test "x$want_curldebug_assumed" = "xyes" &&
test "x$want_curldebug" = "xyes" && test "x$USE_ARES" = "x1"; then test "x$want_curldebug" = "xyes" && test "x$USE_ARES" = "x1"; then
ac_configure_args="$ac_configure_args --enable-curldebug" ac_configure_args="$ac_configure_args --enable-curldebug"
@ -3928,6 +4195,7 @@ AC_MSG_NOTICE([Configured to build curl/libcurl:
SSL support: ${curl_ssl_msg} SSL support: ${curl_ssl_msg}
SSH support: ${curl_ssh_msg} SSH support: ${curl_ssh_msg}
zlib support: ${curl_zlib_msg} zlib support: ${curl_zlib_msg}
brotli support: ${curl_brotli_msg}
GSS-API support: ${curl_gss_msg} GSS-API support: ${curl_gss_msg}
TLS-SRP support: ${curl_tls_srp_msg} TLS-SRP support: ${curl_tls_srp_msg}
resolver: ${curl_res_msg} resolver: ${curl_res_msg}
@ -3951,14 +4219,3 @@ AC_MSG_NOTICE([Configured to build curl/libcurl:
HTTP2 support: ${curl_h2_msg} HTTP2 support: ${curl_h2_msg}
Protocols: ${SUPPORT_PROTOCOLS} Protocols: ${SUPPORT_PROTOCOLS}
]) ])
if test "x$soname_bump" = "xyes"; then
cat <<EOM
SONAME bump: yes - WARNING: this library will be built with the SONAME
number bumped due to (a detected) ABI breakage.
See lib/README.curl_off_t for details on this.
EOM
fi

View File

@ -6,7 +6,7 @@
# | (__| |_| | _ <| |___ # | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____| # \___|\___/|_| \_\_____|
# #
# Copyright (C) 2001 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al. # Copyright (C) 2001 - 2017, Daniel Stenberg, <daniel@haxx.se>, et al.
# #
# This software is licensed as described in the file COPYING, which # This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms # you should have received as part of this distribution. The terms
@ -44,6 +44,7 @@ Available values for OPTION include:
--libs library linking information --libs library linking information
--prefix curl install prefix --prefix curl install prefix
--protocols newline separated list of enabled protocols --protocols newline separated list of enabled protocols
--ssl-backends output the SSL backends libcurl was built to support
--static-libs static libcurl library linking information --static-libs static libcurl library linking information
--version output version information --version output version information
--vernum output the version information as a number (hexadecimal) --vernum output the version information as a number (hexadecimal)
@ -153,6 +154,9 @@ while test $# -gt 0; do
echo ${CURLLIBDIR}-lcurl echo ${CURLLIBDIR}-lcurl
fi fi
;; ;;
--ssl-backends)
echo "@SSL_BACKENDS@"
;;
--static-libs) --static-libs)
if test "X@ENABLE_STATIC@" != "Xno" ; then if test "X@ENABLE_STATIC@" != "Xno" ; then

View File

@ -1,9 +1,9 @@
#! /bin/sh #! /bin/sh
# depcomp - compile a program generating dependencies as side-effects # depcomp - compile a program generating dependencies as side-effects
scriptversion=2013-05-30.07; # UTC scriptversion=2016-01-11.22; # UTC
# Copyright (C) 1999-2014 Free Software Foundation, Inc. # Copyright (C) 1999-2017 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify # This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by # it under the terms of the GNU General Public License as published by
@ -786,6 +786,6 @@ exit 0
# eval: (add-hook 'write-file-hooks 'time-stamp) # eval: (add-hook 'write-file-hooks 'time-stamp)
# time-stamp-start: "scriptversion=" # time-stamp-start: "scriptversion="
# time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-format: "%:y-%02m-%02d.%02H"
# time-stamp-time-zone: "UTC" # time-stamp-time-zone: "UTC0"
# time-stamp-end: "; # UTC" # time-stamp-end: "; # UTC"
# End: # End:

View File

@ -65,7 +65,7 @@ Lua: [luacurl](http://luacurl.luaforge.net/) by Alexander Marinov, [Lua-cURL](ht
[Object-Pascal](http://www.tekool.com/opcurl) Free Pascal, Delphi and Kylix binding written by Christophe Espern. [Object-Pascal](http://www.tekool.com/opcurl) Free Pascal, Delphi and Kylix binding written by Christophe Espern.
[OCaml](http://opam.ocaml.org/packages/ocurl/) Written by Lars Nilsson and ygrek [OCaml](https://opam.ocaml.org/packages/ocurl/) Written by Lars Nilsson and ygrek
[Pascal](http://houston.quik.com/jkp/curlpas/) Free Pascal, Delphi and Kylix binding written by Jeffrey Pohlmeyer. [Pascal](http://houston.quik.com/jkp/curlpas/) Free Pascal, Delphi and Kylix binding written by Jeffrey Pohlmeyer.
@ -75,7 +75,7 @@ Bailiff and Bálint Szilakszi,
[PHP](https://php.net/curl) Originally written by Sterling Hughes [PHP](https://php.net/curl) Originally written by Sterling Hughes
[PostgreSQL](http://gborg.postgresql.org/project/pgcurl/projdisplay.php) Written by Gian Paolo Ciceri [PostgreSQL](https://github.com/pramsey/pgsql-http) - HTTP client for PostgreSQL
[Python](http://pycurl.io/) PycURL by Kjetil Jacobsen [Python](http://pycurl.io/) PycURL by Kjetil Jacobsen
@ -83,7 +83,7 @@ Bailiff and Bálint Szilakszi,
[Rexx](https://rexxcurl.sourceforge.io/) Written Mark Hessling [Rexx](https://rexxcurl.sourceforge.io/) Written Mark Hessling
[Ring](http://ring-lang.sourceforge.net/doc1.3/libcurl.html) RingLibCurl by Mahmoud Fayed [Ring](https://ring-lang.sourceforge.io/doc1.3/libcurl.html) RingLibCurl by Mahmoud Fayed
RPG, support for ILE/RPG on OS/400 is included in source distribution RPG, support for ILE/RPG on OS/400 is included in source distribution
@ -99,7 +99,7 @@ Ruby: [curb](http://curb.rubyforge.org/) written by Ross Bamford, [ruby-curl-mul
[Smalltalk](http://www.squeaksource.com/CurlPlugin/) Written by Danil Osipchuk [Smalltalk](http://www.squeaksource.com/CurlPlugin/) Written by Danil Osipchuk
[SP-Forth](http://spf.cvs.sourceforge.net/viewvc/spf/devel/~ac/lib/lin/curl/) Written by Andrey Cherezov [SP-Forth](https://sourceforge.net/p/spf/spf/ci/master/tree/devel/~ac/lib/lin/curl/) Written by Andrey Cherezov
[SPL](http://www.clifford.at/spl/) Written by Clifford Wolf [SPL](http://www.clifford.at/spl/) Written by Clifford Wolf

View File

@ -9,12 +9,13 @@ BUGS
1. Bugs 1. Bugs
1.1 There are still bugs 1.1 There are still bugs
1.2 Where to report 1.2 Where to report
1.3 What to report 1.3 Security bugs
1.4 libcurl problems 1.4 What to report
1.5 Who will fix the problems 1.5 libcurl problems
1.6 How to get a stack trace 1.6 Who will fix the problems
1.7 Bugs in libcurl bindings 1.7 How to get a stack trace
1.8 Bugs in old versions 1.8 Bugs in libcurl bindings
1.9 Bugs in old versions
2. Bug fixing procedure 2. Bug fixing procedure
2.1 What happens on first filing 2.1 What happens on first filing
@ -30,9 +31,8 @@ BUGS
1.1 There are still bugs 1.1 There are still bugs
Curl and libcurl have grown substantially since the beginning. At the time Curl and libcurl keep being developed. Adding features and changing code
of writing (January 2013), there are about 83,000 lines of source code, and means that bugs will sneak in, no matter how hard we try not to.
by the time you read this it has probably grown even more.
Of course there are lots of bugs left. And lots of misfeatures. Of course there are lots of bugs left. And lots of misfeatures.
@ -53,7 +53,24 @@ BUGS
If you feel you need to ask around first, find a suitable mailing list and If you feel you need to ask around first, find a suitable mailing list and
post there. The lists are available on https://curl.haxx.se/mail/ post there. The lists are available on https://curl.haxx.se/mail/
1.3 What to report 1.3 Security bugs
If you find a bug or problem in curl or libcurl that you think has a
security impact, for example a bug that can put users in danger or make them
vulnerable if the bug becomes public knowledge, then please report that bug
using our security development process.
Security related bugs or bugs that are suspected to have a security impact,
should be reported by email to curl-security@haxx.se so that they first can
be dealt with away from the public to minimize the harm and impact it will
have on existing users out there who might be using the vulnerable versions.
The curl project's process for handling security related issues is
documented here:
https://curl.haxx.se/dev/security.html
1.4 What to report
When reporting a bug, you should include all information that will help us When reporting a bug, you should include all information that will help us
understand what's wrong, what you expected to happen and how to repeat the understand what's wrong, what you expected to happen and how to repeat the
@ -85,7 +102,7 @@ BUGS
The address and how to subscribe to the mailing lists are detailed in the The address and how to subscribe to the mailing lists are detailed in the
MANUAL file. MANUAL file.
1.4 libcurl problems 1.5 libcurl problems
When you've written your own application with libcurl to perform transfers, When you've written your own application with libcurl to perform transfers,
it is even more important to be specific and detailed when reporting bugs. it is even more important to be specific and detailed when reporting bugs.
@ -105,7 +122,7 @@ BUGS
valgrind or similar before you post memory-related or "crashing" problems to valgrind or similar before you post memory-related or "crashing" problems to
us. us.
1.5 Who will fix the problems 1.6 Who will fix the problems
If the problems or bugs you describe are considered to be bugs, we want to If the problems or bugs you describe are considered to be bugs, we want to
have the problems fixed. have the problems fixed.
@ -124,7 +141,7 @@ BUGS
We get reports from many people every month and each report can take a We get reports from many people every month and each report can take a
considerable amount of time to really go to the bottom with. considerable amount of time to really go to the bottom with.
1.6 How to get a stack trace 1.7 How to get a stack trace
First, you must make sure that you compile all sources with -g and that you First, you must make sure that you compile all sources with -g and that you
don't 'strip' the final executable. Try to avoid optimizing the code as don't 'strip' the final executable. Try to avoid optimizing the code as
@ -144,7 +161,7 @@ BUGS
crashed. Include the stack trace with your detailed bug report. It'll help a crashed. Include the stack trace with your detailed bug report. It'll help a
lot. lot.
1.7 Bugs in libcurl bindings 1.8 Bugs in libcurl bindings
There will of course pop up bugs in libcurl bindings. You should then There will of course pop up bugs in libcurl bindings. You should then
primarily approach the team that works on that particular binding and see primarily approach the team that works on that particular binding and see
@ -154,7 +171,7 @@ BUGS
please convert your program over to plain C and follow the steps outlined please convert your program over to plain C and follow the steps outlined
above. above.
1.8 Bugs in old versions 1.9 Bugs in old versions
The curl project typically releases new versions every other month, and we The curl project typically releases new versions every other month, and we
fix several hundred bugs per year. For a huge table of releases, number of fix several hundred bugs per year. For a huge table of releases, number of
@ -169,7 +186,7 @@ BUGS
include the version number of the curl you're using when you experience the include the version number of the curl you're using when you experience the
issue. If that version number shows us that you're using an out-of-date issue. If that version number shows us that you're using an out-of-date
curl, you should also try out a modern curl version to see if the problem curl, you should also try out a modern curl version to see if the problem
persists or how/if it has changed in apperance. persists or how/if it has changed in appearance.
Even if you cannot immediately upgrade your application/system to run the Even if you cannot immediately upgrade your application/system to run the
latest curl version, you can most often at least run a test version or latest curl version, you can most often at least run a test version or
@ -273,8 +290,8 @@ BUGS
The issue and pull request trackers on https://github.com/curl/curl will The issue and pull request trackers on https://github.com/curl/curl will
only hold "active" entries (using a non-precise definition of what active only hold "active" entries (using a non-precise definition of what active
actually is, but they're at least not completely dead). Those that are actually is, but they're at least not completely dead). Those that are
abandonded or in other ways dormant will be closed and sometimes added to abandoned or in other ways dormant will be closed and sometimes added to
TODO and KNOWN_BUGS instead. TODO and KNOWN_BUGS instead.
This way, we only have "active" issues open on github. Irrelevant issues and This way, we only have "active" issues open on github. Irrelevant issues and
pull requests will not distract developes or casual visitors. pull requests will not distract developers or casual visitors.

View File

@ -250,7 +250,7 @@ libcurl was built to use. This is an attempt to list known cipher names.
## GSKit ## GSKit
Ciphers are internally defined as numeric codes (http://www.ibm.com/support/knowledgecenter/ssw_ibm_i_73/apis/gsk_attribute_set_buffer.htm), Ciphers are internally defined as numeric codes (https://www.ibm.com/support/knowledgecenter/ssw_ibm_i_73/apis/gsk_attribute_set_buffer.htm),
but libcurl maps them to the following case-insensitive names. but libcurl maps them to the following case-insensitive names.
### SSL2 cipher suites (insecure: disabled by default) ### SSL2 cipher suites (insecure: disabled by default)

View File

@ -28,5 +28,5 @@ reported by opening an issue or contacting one or more of the project
maintainers. maintainers.
This Code of Conduct is adapted from the [Contributor This Code of Conduct is adapted from the [Contributor
Covenant](http://contributor-covenant.org), version 1.1.0, available at Covenant](https://contributor-covenant.org/), version 1.1.0, available at
[http://contributor-covenant.org/version/1/1/0/](http://contributor-covenant.org/version/1/1/0/) [https://contributor-covenant.org/version/1/1/0/](https://contributor-covenant.org/version/1/1/0/)

View File

@ -157,14 +157,15 @@ lists.
Every pull request submitted will automatically be tested in several different Every pull request submitted will automatically be tested in several different
ways. Every pull request is verfied that: ways. Every pull request is verfied that:
- ... the code still builds, warning-free, on Linux and macOS, with both - ... it still builds, warning-free, on Linux and macOS, with both
clang and gcc clang and gcc
- ... the code still builds fine on Windows with several MSVC versions - ... it still builds fine on Windows with several MSVC versions
- ... the code still builds with cmake on Linux, with gcc and clang - ... it still builds with cmake on Linux, with gcc and clang
- ... the code follows rudimentary code style rules - ... it follows rudimentary code style rules
- ... the test suite still runs 100% fine - ... the test suite still runs 100% fine
- ... the release tarball (the "dist") still works - ... the release tarball (the "dist") still works
- ... the code coverage doesn't shrink drastically - ... it builds fine in-tree as well as out-of-tree
- ... code coverage doesn't shrink drastically
If the pull-request fails one of these tests, it will show up as a red X and If the pull-request fails one of these tests, it will show up as a red X and
you are expected to fix the problem. If you don't understand whan the issue is you are expected to fix the problem. If you don't understand whan the issue is

View File

@ -30,7 +30,6 @@ FAQ
2.2 Does curl work/build with other SSL libraries? 2.2 Does curl work/build with other SSL libraries?
2.3 Where can I find a copy of LIBEAY32.DLL? 2.3 Where can I find a copy of LIBEAY32.DLL?
2.4 Does curl support SOCKS (RFC 1928) ? 2.4 Does curl support SOCKS (RFC 1928) ?
2.5 Install libcurl for both 32bit and 64bit?
3. Usage Problems 3. Usage Problems
3.1 curl: (1) SSL is disabled, https: not supported 3.1 curl: (1) SSL is disabled, https: not supported
@ -163,7 +162,7 @@ FAQ
We pronounce curl with an initial k sound. It rhymes with words like girl We pronounce curl with an initial k sound. It rhymes with words like girl
and earl. This is a short WAV file to help you: and earl. This is a short WAV file to help you:
http://media.merriam-webster.com/soundc11/c/curl0001.wav https://media.merriam-webster.com/soundc11/c/curl0001.wav
There are numerous sub-projects and related projects that also use the word There are numerous sub-projects and related projects that also use the word
curl in the project names in various combinations, but you should take curl in the project names in various combinations, but you should take
@ -367,8 +366,8 @@ FAQ
Comprehensible explanations of the meaning of such numbers and how to obtain Comprehensible explanations of the meaning of such numbers and how to obtain
them (resp.) are here them (resp.) are here
http://www.bis.doc.gov/licensing/exportingbasics.htm https://www.bis.doc.gov/licensing/exportingbasics.htm
http://www.bis.doc.gov/licensing/do_i_needaneccn.html https://www.bis.doc.gov/licensing/do_i_needaneccn.html
An incomprehensible description of the two numbers above is here An incomprehensible description of the two numbers above is here
http://www.access.gpo.gov/bis/ear/pdf/ccl5-pt2.pdf http://www.access.gpo.gov/bis/ear/pdf/ccl5-pt2.pdf
@ -466,32 +465,6 @@ FAQ
Yes, SOCKS 4 and 5 are supported. Yes, SOCKS 4 and 5 are supported.
2.5 Install libcurl for both 32bit and 64bit?
In curl's configure procedure one of the regular include files gets created
with platform specific information. The file 'curl/curlbuild.h' in the
installed libcurl file tree is therefore somewhat tied to that particular
platform.
To allow applications to get built for either 32bit or 64bit you need to
install libcurl headers for both setups and unfortunately curl doesn't do
this automatically.
A commonly used procedure is this:
$ ./configure [32bit platform]
$ mv curl/curlbuild.h curl/curlbuild-32bit.h
$ ./configure [64bit platform]
$ mv curl/curlbuild.h curl/curlbuild-64bit.h
Then you make a toplevel curl/curlbuild.h replacement that only does this:
#ifdef IS_32BIT
#include "curlbuild-32bit.h"
else
#include "curlbuild-64bit.h"
#endif
3. Usage problems 3. Usage problems
@ -1445,7 +1418,7 @@ FAQ
timed out. timed out.
The most flexible way is by writing your own time-out logic and using The most flexible way is by writing your own time-out logic and using
CURLOPT_PROGRESSFUNCTION (perhaps in combination with other callbacks) and CURLOPT_XFERINFOFUNCTION (perhaps in combination with other callbacks) and
use that to figure out exactly when the right condition is met when the use that to figure out exactly when the right condition is met when the
transfer should get stopped. transfer should get stopped.

70
curl/docs/HELP-US.md Normal file
View File

@ -0,0 +1,70 @@
# How to get started helping out in the curl project
We are always in need of more help. If you are new to the project and are
looking for ways to contribute and help out, this document aims to give a few
good starting points.
A good idea is to start by subscribing to the [curl-library mailing
list](https://cool.haxx.se/mailman/listinfo/curl-library) to keep track of the
current discussion topics.
## Scratch your own itch
One of the best ways is to start working on any problems or issues you have
found yourself or perhaps got annoyed at in the past. It can be a spelling
error in an error text or a weirdly phrased section in a man page. Hunt it
down and report the bug. Or make your first pull request with a fix for that.
## Help wanted
In the issue tracker we occasionally mark bugs with [help
wanted](https://github.com/curl/curl/labels/help%20wanted), as a sign that the
bug is acknowledged to exist and that there's nobody known to work on this
issue for the moment. Those are bugs that are fine to "grab" and provide a
pull request for. The complexity level of these will of course vary, so pick
one that piques your interest.
## Work on known bugs
Some bugs are known and haven't yet received attention and work enough to get
fixed. We collect such known existing flaws in the
[KNOWN_BUGS](https://curl.haxx.se/docs/knownbugs.html) page. Many of them link
to the original bug report with some additional details, but some may also
have aged a bit and may require some verification that the bug still exists in
the same way and that what was said about it in the past is still valid.
## Fix autobuild problems
On the [autobuilds page](https://curl.haxx.se/dev/builds.html) we show a
collection of test results from the automatic curl build and tests that are
performed by volunteers. Fixing compiler warnings and errors shown there is
something we value greatly. Also, if you own or run systems or architectures
that aren't already tested in the autobuilds, we also appreciate more
volunteers running builds automatically to help us keep curl portable.
## TODO items
Ideas for features and functions that we have considered worthwhile to
implement and provide are kept in the
[TODO](https://curl.haxx.se/docs/todo.html) file. Some of the ideas are
rough. Some are well thought out. Some probably aren't really suitable
anymore.
Before you invest a lot of time on a TODO item, do bring it up for discussion
on the mailing list. For discussion on applicability but also for ideas and
brainstorming on specific ways to do the implementation etc.
## You decide
You can also come up with a completely new thing you think we should do. Or
not do. Or fix. Or add to the project. You then either bring it to the mailing
list first to see if people will shoot down the idea at once, or you bring a
first draft of the idea as a pull request and take the discussion there around
the specific implementation. Either way is fine.
## CONTRIBUTE
We offer [guidelines](https://curl.haxx.se/dev/contribute.html) that are
suitable to be familiar with before you decide to contribute to curl. If
you're used to open source development, you'll probably not find many
surprises in there.

View File

@ -275,3 +275,21 @@ August:
March: first real release supporting HTTP/2 March: first real release supporting HTTP/2
September: Web site had 245,000 unique visitors and served 236GB data September: Web site had 245,000 unique visitors and served 236GB data
2016
----
December: curl 7.52.0 introduced support for HTTPS-proxy!
2017
----
September: Added Multi-SSL support
The web site serves 3100 GB/month
Public curl releases: 169
Command line options: 211
curl_easy_setopt() options: 249
Public functions in libcurl: 74
Contributors: 1609

View File

@ -37,17 +37,6 @@ Current flaws in the curl CMake build
- Does't detect the correct strerror_r flavor when cross-compiling (issue #1123) - Does't detect the correct strerror_r flavor when cross-compiling (issue #1123)
Important notice
==================
If you got your curl sources from a distribution tarball, make sure to
delete the generic 'include/curl/curlbuild.h' file that comes with it:
rm -f curl/include/curl/curlbuild.h
The purpose of this file is to provide reasonable definitions for systems
where autoconfiguration is not available. CMake will create its own
version of this file in its build directory. If the "generic" version
is not deleted, weird build errors may occur on some systems.
Command Line CMake Command Line CMake
================== ==================
A CMake build of curl is similar to the autotools build of curl. It A CMake build of curl is similar to the autotools build of curl. It

View File

@ -222,6 +222,9 @@ subdirectory run following command from mentioned subdirectory:
In order to build sample program simplessl.c an SSL enabled libcurl is In order to build sample program simplessl.c an SSL enabled libcurl is
required, as well as the OpenSSL libeay32.lib and ssleay32.lib libraries. required, as well as the OpenSSL libeay32.lib and ssleay32.lib libraries.
In order to build sample program `sslbackend.c`, an SSL enabled libcurl
is required.
## Disabling Specific Protocols in Windows builds ## Disabling Specific Protocols in Windows builds
The configure utility, unfortunately, is not available for the Windows The configure utility, unfortunately, is not available for the Windows
@ -278,8 +281,8 @@ before including any libcurl header. Your program does not need the
`USE_LWIPSOCK` preprocessor definition which is for libcurl internals only. `USE_LWIPSOCK` preprocessor definition which is for libcurl internals only.
Compilation has been verified with [lwIP Compilation has been verified with [lwIP
1.4.0](http://download.savannah.gnu.org/releases/lwip/lwip-1.4.0.zip) and 1.4.0](https://download.savannah.gnu.org/releases/lwip/lwip-1.4.0.zip) and
[contrib-1.4.0](http://download.savannah.gnu.org/releases/lwip/contrib-1.4.0.zip). [contrib-1.4.0](https://download.savannah.gnu.org/releases/lwip/contrib-1.4.0.zip).
This BSD-style lwIP TCP/IP stack support must be considered experimental given This BSD-style lwIP TCP/IP stack support must be considered experimental given
that it has been verified that lwIP 1.4.0 still needs some polish, and libcurl that it has been verified that lwIP 1.4.0 still needs some polish, and libcurl

View File

@ -82,7 +82,7 @@ Dependencies
- zlib 1.1.4 - zlib 1.1.4
- libssh2 0.16 - libssh2 0.16
- c-ares 1.6.0 - c-ares 1.6.0
- libidn 0.4.1 - libidn2 2.0.0
- cyassl 2.0.0 - cyassl 2.0.0
- openldap 2.0 - openldap 2.0
- MIT Kerberos 1.2.4 - MIT Kerberos 1.2.4
@ -612,20 +612,6 @@ curlx
strtoll() (or equivalent) function exist on your platform. If `curl_off_t` strtoll() (or equivalent) function exist on your platform. If `curl_off_t`
is only a 32 bit number on your platform, this macro uses strtol(). is only a 32 bit number on your platform, this macro uses strtol().
`curlx_tvnow()`
---------------
returns a struct timeval for the current time.
`curlx_tvdiff()`
--------------
returns the difference between two timeval structs, in number of
milliseconds.
`curlx_tvdiff_secs()`
---------------------
returns the same as `curlx_tvdiff` but with full usec resolution (as a
double)
Future Future
------ ------
@ -656,29 +642,29 @@ Content Encoding
## About content encodings ## About content encodings
[HTTP/1.1][4] specifies that a client may request that a server encode its [HTTP/1.1][4] specifies that a client may request that a server encode its
response. This is usually used to compress a response using one of a set of response. This is usually used to compress a response using one (or more)
commonly available compression techniques. These schemes are 'deflate' (the encodings from a set of commonly available compression techniques. These
zlib algorithm), 'gzip' and 'compress'. A client requests that the server schemes include 'deflate' (the zlib algorithm), 'gzip' 'br' (brotli) and
perform an encoding by including an Accept-Encoding header in the request 'compress'. A client requests that the server perform an encoding by including
document. The value of the header should be one of the recognized tokens an Accept-Encoding header in the request document. The value of the header
'deflate', ... (there's a way to register new schemes/tokens, see sec 3.5 of should be one of the recognized tokens 'deflate', ... (there's a way to
the spec). A server MAY honor the client's encoding request. When a response register new schemes/tokens, see sec 3.5 of the spec). A server MAY honor
is encoded, the server includes a Content-Encoding header in the the client's encoding request. When a response is encoded, the server
response. The value of the Content-Encoding header indicates which scheme was includes a Content-Encoding header in the response. The value of the
used to encode the data. Content-Encoding header indicates which encodings were used to encode the
data, in the order in which they were applied.
A client may tell a server that it can understand several different encoding
schemes. In this case the server may choose any one of those and use it to
encode the response (indicating which one using the Content-Encoding header).
It's also possible for a client to attach priorities to different schemes so It's also possible for a client to attach priorities to different schemes so
that the server knows which it prefers. See sec 14.3 of RFC 2616 for more that the server knows which it prefers. See sec 14.3 of RFC 2616 for more
information on the Accept-Encoding header. information on the Accept-Encoding header. See sec [3.1.2.2 of RFC 7231][15]
for more information on the Content-Encoding header.
## Supported content encodings ## Supported content encodings
The 'deflate' and 'gzip' content encoding are supported by libcurl. Both The 'deflate', 'gzip' and 'br' content encodings are supported by libcurl.
regular and chunked transfers work fine. The zlib library is required for Both regular and chunked transfers work fine. The zlib library is required
this feature. for the 'deflate' and 'gzip' encodings, while the brotli decoding library is
for the 'br' encoding.
## The libcurl interface ## The libcurl interface
@ -688,14 +674,15 @@ Content Encoding
where string is the intended value of the Accept-Encoding header. where string is the intended value of the Accept-Encoding header.
Currently, libcurl only understands how to process responses that use the Currently, libcurl does support multiple encodings but only
"deflate" or "gzip" Content-Encoding, so the only values for understands how to process responses that use the "deflate", "gzip" and/or
[`CURLOPT_ACCEPT_ENCODING`][5] that will work (besides "identity," which does "br" content encodings, so the only values for [`CURLOPT_ACCEPT_ENCODING`][5]
nothing) are "deflate" and "gzip" If a response is encoded using the that will work (besides "identity," which does nothing) are "deflate",
"compress" or methods, libcurl will return an error indicating that the "gzip" and "br". If a response is encoded using the "compress" or methods,
response could not be decoded. If <string> is NULL no Accept-Encoding header libcurl will return an error indicating that the response could
is generated. If <string> is a zero-length string, then an Accept-Encoding not be decoded. If <string> is NULL no Accept-Encoding header is generated.
header containing all supported encodings will be generated. If <string> is a zero-length string, then an Accept-Encoding header
containing all supported encodings will be generated.
The [`CURLOPT_ACCEPT_ENCODING`][5] must be set to any non-NULL value for The [`CURLOPT_ACCEPT_ENCODING`][5] must be set to any non-NULL value for
content to be automatically decoded. If it is not set and the server still content to be automatically decoded. If it is not set and the server still
@ -1079,7 +1066,7 @@ for older and later versions as things don't change drastically that often.
[1]: https://curl.haxx.se/libcurl/c/curl_easy_setopt.html [1]: https://curl.haxx.se/libcurl/c/curl_easy_setopt.html
[2]: https://curl.haxx.se/libcurl/c/curl_easy_init.html [2]: https://curl.haxx.se/libcurl/c/curl_easy_init.html
[3]: http://c-ares.haxx.se/ [3]: https://c-ares.haxx.se/
[4]: https://tools.ietf.org/html/rfc7230 "RFC 7230" [4]: https://tools.ietf.org/html/rfc7230 "RFC 7230"
[5]: https://curl.haxx.se/libcurl/c/CURLOPT_ACCEPT_ENCODING.html [5]: https://curl.haxx.se/libcurl/c/CURLOPT_ACCEPT_ENCODING.html
[6]: https://curl.haxx.se/docs/manpage.html#--compressed [6]: https://curl.haxx.se/docs/manpage.html#--compressed
@ -1091,3 +1078,4 @@ for older and later versions as things don't change drastically that often.
[12]: https://curl.haxx.se/libcurl/c/curl_multi_fdset.html [12]: https://curl.haxx.se/libcurl/c/curl_multi_fdset.html
[13]: https://curl.haxx.se/libcurl/c/curl_multi_add_handle.html [13]: https://curl.haxx.se/libcurl/c/curl_multi_add_handle.html
[14]: https://curl.haxx.se/libcurl/c/curl_multi_info_read.html [14]: https://curl.haxx.se/libcurl/c/curl_multi_info_read.html
[15]: https://tools.ietf.org/html/rfc7231#section-3.1.2.2

View File

@ -18,7 +18,6 @@ problems may have been fixed or changed somewhat since this was written!
1.4 multipart formposts file name encoding 1.4 multipart formposts file name encoding
1.5 Expect-100 meets 417 1.5 Expect-100 meets 417
1.6 Unnecessary close when 401 received waiting for 100 1.6 Unnecessary close when 401 received waiting for 100
1.8 DNS timing is wrong for HTTP redirects
1.9 HTTP/2 frames while in the connection pool kill reuse 1.9 HTTP/2 frames while in the connection pool kill reuse
1.10 Strips trailing dot from host name 1.10 Strips trailing dot from host name
1.11 CURLOPT_SEEKFUNCTION not called with CURLFORM_STREAM 1.11 CURLOPT_SEEKFUNCTION not called with CURLFORM_STREAM
@ -83,6 +82,7 @@ problems may have been fixed or changed somewhat since this was written!
11.1 Curl leaks .onion hostnames in DNS 11.1 Curl leaks .onion hostnames in DNS
11.2 error buffer not set if connection to multiple addresses fails 11.2 error buffer not set if connection to multiple addresses fails
11.3 c-ares deviates from stock resolver on http://1346569778 11.3 c-ares deviates from stock resolver on http://1346569778
11.4 HTTP test server 'connection-monitor' problems
12. LDAP and OpenLDAP 12. LDAP and OpenLDAP
12.1 OpenLDAP hangs after returning results 12.1 OpenLDAP hangs after returning results
@ -140,12 +140,6 @@ problems may have been fixed or changed somewhat since this was written!
waiting for the the 100-continue response. waiting for the the 100-continue response.
https://curl.haxx.se/mail/lib-2008-08/0462.html https://curl.haxx.se/mail/lib-2008-08/0462.html
1.8 DNS timing is wrong for HTTP redirects
When extracting timing information after HTTP redirects, only the last
transfer's results are returned and not the totals:
https://github.com/curl/curl/issues/522
1.9 HTTP/2 frames while in the connection pool kill reuse 1.9 HTTP/2 frames while in the connection pool kill reuse
If the server sends HTTP/2 frames (like for example an HTTP/2 PING frame) to If the server sends HTTP/2 frames (like for example an HTTP/2 PING frame) to
@ -322,7 +316,6 @@ problems may have been fixed or changed somewhat since this was written!
The cmake build setup lacks several features that the autoconf build The cmake build setup lacks several features that the autoconf build
offers. This includes: offers. This includes:
- symbol hiding when the shared library is built
- use of correct soname for the shared library build - use of correct soname for the shared library build
- support for several TLS backends are missing - support for several TLS backends are missing
- the unit tests cause link failures in regular non-static builds - the unit tests cause link failures in regular non-static builds
@ -380,7 +373,7 @@ problems may have been fixed or changed somewhat since this was written!
libcurl fails to build with MIT Kerberos for Windows (KfW) due to KfW's libcurl fails to build with MIT Kerberos for Windows (KfW) due to KfW's
library header files exporting symbols/macros that should be kept private to library header files exporting symbols/macros that should be kept private to
the KfW library. See ticket #5601 at http://krbdev.mit.edu/rt/ the KfW library. See ticket #5601 at https://krbdev.mit.edu/rt/
6.3 NTLM in system context uses wrong name 6.3 NTLM in system context uses wrong name
@ -559,6 +552,13 @@ problems may have been fixed or changed somewhat since this was written!
See https://github.com/curl/curl/issues/893 See https://github.com/curl/curl/issues/893
11.4 HTTP test server 'connection-monitor' problems
The 'connection-monitor' feature of the sws HTTP test server doesn't work
properly if some tests are run in unexpected order. Like 1509 and then 1525.
See https://github.com/curl/curl/issues/868
12. LDAP and OpenLDAP 12. LDAP and OpenLDAP

View File

@ -15,6 +15,7 @@ MAIL ETIQUETTE
1.6 Handling trolls and spam 1.6 Handling trolls and spam
1.7 How to unsubscribe 1.7 How to unsubscribe
1.8 I posted, now what? 1.8 I posted, now what?
1.9 Your emails are public
2. Sending mail 2. Sending mail
2.1 Reply or New Mail 2.1 Reply or New Mail
@ -162,6 +163,27 @@ MAIL ETIQUETTE
chances are that people will ignore you at will and your chances to get chances are that people will ignore you at will and your chances to get
responses in the future will greatly diminish. responses in the future will greatly diminish.
1.9 Your emails are public
Your email, its contents and all its headers and the details in those
headers will be received by every subscriber of the mailing list that you
send your email to.
Your email as sent to a curl mailing list will end up in mail archives, on
the curl web site and elsewhere, for others to see and read. Today and in
the future. In addition to the archives, the mail is sent out to thousands
of individuals. There is no way to undo a sent email.
When sending emails to a curl mailing list, do not include sensitive
information such as user names and passwords; use fake ones, temporary ones
or just remove them completely from the mail. Note that this includes base64
encoded HTTP Basic auth headers.
This public nature of the curl mailing lists makes automaticly inserted mail
footers about mails being "private" or "only meant for the receipient" or
similar even more silly than usual. Because they are absolutely not private
when sent to a public mailing list.
2. Sending mail 2. Sending mail
@ -261,4 +283,3 @@ MAIL ETIQUETTE
Getting the solution posted also helps other users that experience the same Getting the solution posted also helps other users that experience the same
problem(s). They get to see (possibly in the web archives) that the problem(s). They get to see (possibly in the web archives) that the
suggested fixes actually has helped at least one person. suggested fixes actually has helped at least one person.

View File

@ -35,8 +35,8 @@ HTMLPAGES = $(GENHTMLPAGES) index.html
# Build targets in this file (.) before cmdline-opts to ensure that # Build targets in this file (.) before cmdline-opts to ensure that
# the curl.1 rule below runs first # the curl.1 rule below runs first
SUBDIRS = libcurl . cmdline-opts SUBDIRS = . cmdline-opts
DIST_SUBDIRS = $(SUBDIRS) examples DIST_SUBDIRS = $(SUBDIRS) examples libcurl
CLEANFILES = $(GENHTMLPAGES) $(PDFPAGES) $(MANDISTPAGES) curl.1 CLEANFILES = $(GENHTMLPAGES) $(PDFPAGES) $(MANDISTPAGES) curl.1
@ -46,7 +46,7 @@ EXTRA_DIST = MANUAL BUGS CONTRIBUTE.md FAQ FEATURES INTERNALS.md SSLCERTS.md
README.netware MAIL-ETIQUETTE HTTP-COOKIES.md SECURITY.md RELEASE-PROCEDURE \ README.netware MAIL-ETIQUETTE HTTP-COOKIES.md SECURITY.md RELEASE-PROCEDURE \
SSL-PROBLEMS.md HTTP2.md ROADMAP.md CODE_OF_CONDUCT.md CODE_STYLE.md \ SSL-PROBLEMS.md HTTP2.md ROADMAP.md CODE_OF_CONDUCT.md CODE_STYLE.md \
CHECKSRC.md CMakeLists.txt README.md CIPHERS.md INSTALL.cmake README.cmake \ CHECKSRC.md CMakeLists.txt README.md CIPHERS.md INSTALL.cmake README.cmake \
$(noinst_man_MANS) $(noinst_man_MANS) HELP-US.md
MAN2HTML= roffit $< >$@ MAN2HTML= roffit $< >$@
@ -81,3 +81,6 @@ pdf: $(PDFPAGES)
rm $$foo.ps; \ rm $$foo.ps; \
echo "converted $< to $@") echo "converted $< to $@")
distclean:
rm -f $(CLEANFILES)

View File

@ -1,7 +1,7 @@
# Makefile.in generated by automake 1.15 from Makefile.am. # Makefile.in generated by automake 1.15.1 from Makefile.am.
# @configure_input@ # @configure_input@
# Copyright (C) 1994-2014 Free Software Foundation, Inc. # Copyright (C) 1994-2017 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation # This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it, # gives unlimited permission to copy and/or distribute it,
@ -133,8 +133,7 @@ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4) $(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
mkinstalldirs = $(install_sh) -d mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/lib/curl_config.h \ CONFIG_HEADER = $(top_builddir)/lib/curl_config.h
$(top_builddir)/include/curl/curlbuild.h
CONFIG_CLEAN_FILES = CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES = CONFIG_CLEAN_VPATH_FILES =
AM_V_P = $(am__v_P_@AM_V@) AM_V_P = $(am__v_P_@AM_V@)
@ -266,8 +265,11 @@ CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@ CFLAGS = @CFLAGS@
CFLAG_CURL_SYMBOL_HIDING = @CFLAG_CURL_SYMBOL_HIDING@ CFLAG_CURL_SYMBOL_HIDING = @CFLAG_CURL_SYMBOL_HIDING@
CODE_COVERAGE_CFLAGS = @CODE_COVERAGE_CFLAGS@ CODE_COVERAGE_CFLAGS = @CODE_COVERAGE_CFLAGS@
CODE_COVERAGE_CPPFLAGS = @CODE_COVERAGE_CPPFLAGS@
CODE_COVERAGE_CXXFLAGS = @CODE_COVERAGE_CXXFLAGS@
CODE_COVERAGE_ENABLED = @CODE_COVERAGE_ENABLED@ CODE_COVERAGE_ENABLED = @CODE_COVERAGE_ENABLED@
CODE_COVERAGE_LDFLAGS = @CODE_COVERAGE_LDFLAGS@ CODE_COVERAGE_LDFLAGS = @CODE_COVERAGE_LDFLAGS@
CODE_COVERAGE_LIBS = @CODE_COVERAGE_LIBS@
CONFIGURE_OPTIONS = @CONFIGURE_OPTIONS@ CONFIGURE_OPTIONS = @CONFIGURE_OPTIONS@
CPP = @CPP@ CPP = @CPP@
CPPFLAGS = @CPPFLAGS@ CPPFLAGS = @CPPFLAGS@
@ -293,7 +295,9 @@ CURL_DISABLE_TFTP = @CURL_DISABLE_TFTP@
CURL_LT_SHLIB_VERSIONED_FLAVOUR = @CURL_LT_SHLIB_VERSIONED_FLAVOUR@ CURL_LT_SHLIB_VERSIONED_FLAVOUR = @CURL_LT_SHLIB_VERSIONED_FLAVOUR@
CURL_NETWORK_AND_TIME_LIBS = @CURL_NETWORK_AND_TIME_LIBS@ CURL_NETWORK_AND_TIME_LIBS = @CURL_NETWORK_AND_TIME_LIBS@
CURL_NETWORK_LIBS = @CURL_NETWORK_LIBS@ CURL_NETWORK_LIBS = @CURL_NETWORK_LIBS@
CURL_WITH_MULTI_SSL = @CURL_WITH_MULTI_SSL@
CYGPATH_W = @CYGPATH_W@ CYGPATH_W = @CYGPATH_W@
DEFAULT_SSL_BACKEND = @DEFAULT_SSL_BACKEND@
DEFS = @DEFS@ DEFS = @DEFS@
DEPDIR = @DEPDIR@ DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@ DLLTOOL = @DLLTOOL@
@ -310,6 +314,7 @@ FGREP = @FGREP@
GCOV = @GCOV@ GCOV = @GCOV@
GENHTML = @GENHTML@ GENHTML = @GENHTML@
GREP = @GREP@ GREP = @GREP@
HAVE_BROTLI = @HAVE_BROTLI@
HAVE_GNUTLS_SRP = @HAVE_GNUTLS_SRP@ HAVE_GNUTLS_SRP = @HAVE_GNUTLS_SRP@
HAVE_LDAP_SSL = @HAVE_LDAP_SSL@ HAVE_LDAP_SSL = @HAVE_LDAP_SSL@
HAVE_LIBZ = @HAVE_LIBZ@ HAVE_LIBZ = @HAVE_LIBZ@
@ -367,6 +372,7 @@ REQUIRE_LIB_DEPS = @REQUIRE_LIB_DEPS@
SED = @SED@ SED = @SED@
SET_MAKE = @SET_MAKE@ SET_MAKE = @SET_MAKE@
SHELL = @SHELL@ SHELL = @SHELL@
SSL_BACKENDS = @SSL_BACKENDS@
SSL_ENABLED = @SSL_ENABLED@ SSL_ENABLED = @SSL_ENABLED@
SSL_LIBS = @SSL_LIBS@ SSL_LIBS = @SSL_LIBS@
STRIP = @STRIP@ STRIP = @STRIP@
@ -379,6 +385,7 @@ USE_DARWINSSL = @USE_DARWINSSL@
USE_GNUTLS = @USE_GNUTLS@ USE_GNUTLS = @USE_GNUTLS@
USE_GNUTLS_NETTLE = @USE_GNUTLS_NETTLE@ USE_GNUTLS_NETTLE = @USE_GNUTLS_NETTLE@
USE_LIBRTMP = @USE_LIBRTMP@ USE_LIBRTMP = @USE_LIBRTMP@
USE_LIBSSH = @USE_LIBSSH@
USE_LIBSSH2 = @USE_LIBSSH2@ USE_LIBSSH2 = @USE_LIBSSH2@
USE_MBEDTLS = @USE_MBEDTLS@ USE_MBEDTLS = @USE_MBEDTLS@
USE_NGHTTP2 = @USE_NGHTTP2@ USE_NGHTTP2 = @USE_NGHTTP2@
@ -461,8 +468,8 @@ HTMLPAGES = $(GENHTMLPAGES) index.html
# Build targets in this file (.) before cmdline-opts to ensure that # Build targets in this file (.) before cmdline-opts to ensure that
# the curl.1 rule below runs first # the curl.1 rule below runs first
SUBDIRS = libcurl . cmdline-opts SUBDIRS = . cmdline-opts
DIST_SUBDIRS = $(SUBDIRS) examples DIST_SUBDIRS = $(SUBDIRS) examples libcurl
CLEANFILES = $(GENHTMLPAGES) $(PDFPAGES) $(MANDISTPAGES) curl.1 CLEANFILES = $(GENHTMLPAGES) $(PDFPAGES) $(MANDISTPAGES) curl.1
EXTRA_DIST = MANUAL BUGS CONTRIBUTE.md FAQ FEATURES INTERNALS.md SSLCERTS.md \ EXTRA_DIST = MANUAL BUGS CONTRIBUTE.md FAQ FEATURES INTERNALS.md SSLCERTS.md \
README.win32 RESOURCES TODO TheArtOfHttpScripting THANKS VERSIONS KNOWN_BUGS \ README.win32 RESOURCES TODO TheArtOfHttpScripting THANKS VERSIONS KNOWN_BUGS \
@ -470,7 +477,7 @@ EXTRA_DIST = MANUAL BUGS CONTRIBUTE.md FAQ FEATURES INTERNALS.md SSLCERTS.md
README.netware MAIL-ETIQUETTE HTTP-COOKIES.md SECURITY.md RELEASE-PROCEDURE \ README.netware MAIL-ETIQUETTE HTTP-COOKIES.md SECURITY.md RELEASE-PROCEDURE \
SSL-PROBLEMS.md HTTP2.md ROADMAP.md CODE_OF_CONDUCT.md CODE_STYLE.md \ SSL-PROBLEMS.md HTTP2.md ROADMAP.md CODE_OF_CONDUCT.md CODE_STYLE.md \
CHECKSRC.md CMakeLists.txt README.md CIPHERS.md INSTALL.cmake README.cmake \ CHECKSRC.md CMakeLists.txt README.md CIPHERS.md INSTALL.cmake README.cmake \
$(noinst_man_MANS) $(noinst_man_MANS) HELP-US.md
MAN2HTML = roffit $< >$@ MAN2HTML = roffit $< >$@
SUFFIXES = .1 .html .pdf SUFFIXES = .1 .html .pdf
@ -754,8 +761,6 @@ clean: clean-recursive
clean-am: clean-generic clean-libtool mostlyclean-am clean-am: clean-generic clean-libtool mostlyclean-am
distclean: distclean-recursive
-rm -f Makefile
distclean-am: clean-am distclean-generic distclean-tags distclean-am: clean-am distclean-generic distclean-tags
dvi: dvi-recursive dvi: dvi-recursive
@ -862,6 +867,9 @@ pdf: $(PDFPAGES)
rm $$foo.ps; \ rm $$foo.ps; \
echo "converted $< to $@") echo "converted $< to $@")
distclean:
rm -f $(CLEANFILES)
# Tell versions [3.59,3.63) of GNU make to not export all variables. # Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded. # Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT: .NOEXPORT:

View File

@ -83,10 +83,13 @@ Coming dates
Based on the description above, here are some planned release dates (at the Based on the description above, here are some planned release dates (at the
time of this writing): time of this writing):
- June 14, 2017 (version 7.54.1)
- August 9, 2017
- October 4, 2017
- November 29, 2017 - November 29, 2017
- January 24, 2018 - January 24, 2018
- March 21, 2018 - March 21, 2018
- May 16, 2018 - May 16, 2018
- July 11, 2018
- September 5, 2018
- October 31, 2018
- December 26, 2018
- February 20, 2019
- April 17, 2019

View File

@ -7,13 +7,13 @@
This document lists documents and standards used by curl. This document lists documents and standards used by curl.
RFC 959 - The FTP protocol RFC 959 - FTP Protocol
RFC 1635 - How to Use Anonymous FTP RFC 1635 - How to Use Anonymous FTP
RFC 1738 - Uniform Resource Locators RFC 1738 - Uniform Resource Locators
RFC 1777 - defines the LDAP protocol RFC 1777 - Lightweight Directory Access Protocol (LDAP)
RFC 1808 - Relative Uniform Resource Locators RFC 1808 - Relative Uniform Resource Locators
@ -23,9 +23,9 @@ This document lists documents and standards used by curl.
RFC 1951 - DEFLATE Compressed Data Format Specification RFC 1951 - DEFLATE Compressed Data Format Specification
RFC 1952 - gzip compression format RFC 1952 - GZIP File Format Specification
RFC 1959 - LDAP URL syntax RFC 1959 - LDAP URL Syntax
RFC 2045-2049 - Everything you need to know about MIME! (needed for form RFC 2045-2049 - Everything you need to know about MIME! (needed for form
based upload) based upload)
@ -40,11 +40,11 @@ This document lists documents and standards used by curl.
RFC 2183 - The Content-Disposition Header Field RFC 2183 - The Content-Disposition Header Field
RFC 2195 - CRAM-MD5 authentication RFC 2195 - CRAM-MD5 Authentication
RFC 2229 - A Dictionary Server Protocol RFC 2229 - A Dictionary Server Protocol
RFC 2255 - Newer LDAP URL syntax document. RFC 2255 - Newer LDAP URL Format
RFC 2231 - MIME Parameter Value and Encoded Word Extensions: RFC 2231 - MIME Parameter Value and Encoded Word Extensions:
Character Sets, Languages, and Continuations Character Sets, Languages, and Continuations
@ -70,14 +70,16 @@ This document lists documents and standards used by curl.
RFC 2818 - HTTP Over TLS (TLS is the successor to SSL) RFC 2818 - HTTP Over TLS (TLS is the successor to SSL)
RFC 2821 - SMTP protocol RFC 2821 - Simple Mail Transfer Protocol (SMTP)
RFC 2964 - Use of HTTP State Management RFC 2964 - Use of HTTP State Management
RFC 2965 - HTTP State Management Mechanism. Cookies. Obsoletes RFC2109 RFC 2965 - HTTP State Management Mechanism. Cookies. Obsoletes RFC2109
RFC 3207 - SMTP over TLS RFC 3207 - SMTP Over TLS
RFC 4616 - PLAIN authentication RFC 4616 - PLAIN Authentication
RFC 4954 - SMTP Authentication RFC 4954 - SMTP Authentication
RFC 7932 - Brotli Compressed Data Format

View File

@ -1,20 +1,14 @@
curl the next few years - perhaps curl the next few years - perhaps
================================= =================================
Roadmap of things Daniel Stenberg and Steve Holme want to work on next. It is Roadmap of things Daniel Stenberg wants to work on next. It is intended to
intended to serve as a guideline for others for information, feedback and serve as a guideline for others for information, feedback and possible
possible participation. participation.
QUIC QUIC
---- ----
The standardization process of QUIC has been taken to the IETF and can be See the [QUIC wiki page](https://github.com/curl/curl/wiki/QUIC).
followed on the [IETF QUIC Mailing
list](https://www.ietf.org/mailman/listinfo/quic). I'd like us to get on the
bandwagon. Ideally, this would be done with a separate library/project to
handle the binary/framing layer in a similar fashion to how HTTP/2 is
implemented. This, to allow other projects to benefit from the work and to
thus broaden the interest and chance of others to participate.
HTTP cookies HTTP cookies
------------ ------------
@ -34,85 +28,15 @@ SRV records
How to find services for specific domains/hosts. How to find services for specific domains/hosts.
curl_formadd()
--------------
make sure there's an easy handle passed in to `curl_formadd()`,
`curl_formget()` and `curl_formfree()` by adding replacement functions and
deprecating the old ones to allow custom mallocs and more.
Or perhaps even better: revamp the formpost API completely while we're at it
and making something that is easier to use and understand:
https://github.com/curl/curl/wiki/formpost-API-redesigned
Third-party SASL
----------------
Add support for third-party SASL libraries such as Cyrus SASL.
SASL authentication in LDAP
---------------------------
...
Simplify the SMTP email
-----------------------
Simplify the SMTP email interface so that programmers don't have to
construct the body of an email that contains all the headers, alternative
content, images and attachments - maintain raw interface so that
programmers that want to do this can
email capabilities
------------------
Allow the email protocols to return the capabilities before
authenticating. This will allow an application to decide on the best
authentication mechanism
Win32 pthreads
--------------
Allow Windows threading model to be replaced by Win32 pthreads port
dynamic buffer size
-------------------
Implement a dynamic buffer size to allow SFTP to use much larger buffers and
possibly allow the size to be customizable by applications. Use less memory
when handles are not in use?
New stuff - curl
----------------
1. Embed a language interpreter (lua?). For that middle ground where curl
isnt enough and a libcurl binding feels “too much”. Build-time conditional
of course.
2. Simplify the SMTP command line so that the headers and multi-part content
don't have to be constructed before calling curl
Improve Improve
------- -------
1. build for windows (considered hard by many users) 1. curl -h output (considered overwhelming to users).
2. curl -h output (considered overwhelming to users) 2. We have > 200 command line options, is there a way to redo things to
3. we have > 200 command line options, is there a way to redo things to
simplify or improve the situation as we are likely to keep adding simplify or improve the situation as we are likely to keep adding
features/options in the future too features/options in the future too.
4. authentication framework (consider merging HTTP and SASL authentication to 3. Perform some of the clean up from the TODO document, removing old
give one API for protocols to call)
5. Perform some of the clean up from the TODO document, removing old
definitions and such like that are currently earmarked to be removed years definitions and such like that are currently earmarked to be removed years
ago ago.
Remove
------
1. makefile.vc files as there is no point in maintaining two sets of Windows
makefiles. Note: These are currently being used by the Windows autobuilds

View File

@ -40,8 +40,11 @@ Alex Bligh
Alex Chan Alex Chan
Alex Fishman Alex Fishman
Alex Gruz Alex Gruz
Alex Malinovich
Alex McLellan Alex McLellan
Alex Neblett Alex Neblett
Alex Nichols
Alex Potapenko
Alex Rousskov Alex Rousskov
Alex Suykov Alex Suykov
Alex Vinnik Alex Vinnik
@ -59,11 +62,13 @@ Alexander Sinditskiy
Alexander Traud Alexander Traud
Alexander Zhuravlev Alexander Zhuravlev
Alexey Borzov Alexey Borzov
Alexey Melnichuk
Alexey Pesternikov Alexey Pesternikov
Alexey Simak Alexey Simak
Alexey Zakhlestin Alexey Zakhlestin
Alexis Carvalho Alexis Carvalho
Alexis La Goutte Alexis La Goutte
Alfonso Martone
Alfred Gebert Alfred Gebert
Allen Pulsifer Allen Pulsifer
Alona Rossen Alona Rossen
@ -86,11 +91,13 @@ Andreas Ntaflos
Andreas Olsson Andreas Olsson
Andreas Rieke Andreas Rieke
Andreas Roth Andreas Roth
Andreas Schneider
Andreas Schuldei Andreas Schuldei
Andreas Streichardt Andreas Streichardt
Andreas Wurf Andreas Wurf
Andrei Benea Andrei Benea
Andrei Cipu Andrei Cipu
Andrei Karas
Andrei Kurushin Andrei Kurushin
Andrei Sedoi Andrei Sedoi
Andrej E Baranov Andrej E Baranov
@ -101,6 +108,7 @@ Andrew Francis
Andrew Fuller Andrew Fuller
Andrew Krieger Andrew Krieger
Andrew Kurushin Andrew Kurushin
Andrew Lambert
Andrew Moise Andrew Moise
Andrew Robbins Andrew Robbins
Andrew Wansink Andrew Wansink
@ -129,6 +137,7 @@ Arkadiusz Miskiewicz
Armel Asselin Armel Asselin
Arnaud Compan Arnaud Compan
Arnaud Ebalard Arnaud Ebalard
Artak Galoyan
Arthur Murray Arthur Murray
Arve Knudsen Arve Knudsen
Arvid Norberg Arvid Norberg
@ -145,6 +154,7 @@ Balint Szilakszi
Barry Abrahamson Barry Abrahamson
Bart Whiteley Bart Whiteley
Bas Mevissen Bas Mevissen
Basuke Suzuki
Ben Boeckel Ben Boeckel
Ben Darnell Ben Darnell
Ben Greear Ben Greear
@ -157,6 +167,7 @@ Benjamin Gerard
Benjamin Gilbert Benjamin Gilbert
Benjamin Johnson Benjamin Johnson
Benjamin Kircher Benjamin Kircher
Benjamin Sergeant
Benoit Neil Benoit Neil
Benoit Sigoure Benoit Sigoure
Bernard Leak Bernard Leak
@ -171,6 +182,7 @@ Bill Egert
Bill Hoffman Bill Hoffman
Bill Middlecamp Bill Middlecamp
Bill Nagel Bill Nagel
Bill Pyne
Bjoern Sikora Bjoern Sikora
Bjorn Augustsson Bjorn Augustsson
Bjorn Reese Bjorn Reese
@ -224,6 +236,7 @@ Chandrakant Bagul
Charles Kerr Charles Kerr
Charles Romestant Charles Romestant
Chen Prog Chen Prog
Chester Liu
Chih-Chung Chang Chih-Chung Chang
Chris "Bob Bob" Chris "Bob Bob"
Chris Araman Chris Araman
@ -275,6 +288,7 @@ Cory Nelson
Craig A West Craig A West
Craig Davison Craig Davison
Craig Markwardt Craig Markwardt
Craig de Stigter
Cris Bailiff Cris Bailiff
Cristian Rodríguez Cristian Rodríguez
Curt Bogmine Curt Bogmine
@ -295,12 +309,14 @@ Dan Cristian
Dan Donahue Dan Donahue
Dan Fandrich Dan Fandrich
Dan Jacobson Dan Jacobson
Dan Johnson
Dan Locks Dan Locks
Dan McNulty Dan McNulty
Dan Nelson Dan Nelson
Dan Petitt Dan Petitt
Dan Torop Dan Torop
Dan Zitter Dan Zitter
Daniel Bankhead
Daniel Black Daniel Black
Daniel Cater Daniel Cater
Daniel Egger Daniel Egger
@ -308,6 +324,7 @@ Daniel Gustafsson
Daniel Hwang Daniel Hwang
Daniel Johnson Daniel Johnson
Daniel Kahn Gillmor Daniel Kahn Gillmor
Daniel Krügler
Daniel Lee Hwang Daniel Lee Hwang
Daniel Melani Daniel Melani
Daniel Mentz Daniel Mentz
@ -337,6 +354,7 @@ David Binderman
David Blaikie David Blaikie
David Byron David Byron
David Cohen David Cohen
David E. Narváez
David Eriksson David Eriksson
David Houlder David Houlder
David Hull David Hull
@ -347,6 +365,7 @@ David Kierznowski
David Kimdon David Kimdon
David Lang David Lang
David LeBlanc David LeBlanc
David Lord
David McCreedy David McCreedy
David Meyer David Meyer
David Odin David Odin
@ -376,16 +395,20 @@ Dima Barsky
Dima Tisnek Dima Tisnek
Dimitar Boevski Dimitar Boevski
Dimitre Dimitrov Dimitre Dimitrov
Dimitrios Apostolou
Dimitrios Siganos Dimitrios Siganos
Dimitris Sarris Dimitris Sarris
Dinar Dinar
Dirk Eddelbuettel Dirk Eddelbuettel
Dirk Feytons
Dirk Manske Dirk Manske
Dmitri Shubin Dmitri Shubin
Dmitri Tikhonov
Dmitriy Sergeyev Dmitriy Sergeyev
Dmitry Bartsevich Dmitry Bartsevich
Dmitry Eremin-Solenikov Dmitry Eremin-Solenikov
Dmitry Falko Dmitry Falko
Dmitry Kostjuchenko
Dmitry Kurochkin Dmitry Kurochkin
Dmitry Popov Dmitry Popov
Dmitry Rechkin Dmitry Rechkin
@ -408,6 +431,7 @@ Duane Cathey
Duncan Mac-Vicar Prett Duncan Mac-Vicar Prett
Dustin Boswell Dustin Boswell
Dusty Mabe Dusty Mabe
Dwarakanath Yadavalli
Dylan Ellicott Dylan Ellicott
Dylan Salisbury Dylan Salisbury
Dániel Bakai Dániel Bakai
@ -424,6 +448,7 @@ Eelco Dolstra
Eetu Ojanen Eetu Ojanen
Egon Eckert Egon Eckert
Eldar Zaitov Eldar Zaitov
Elliot Saba
Ellis Pritchard Ellis Pritchard
Elmira A Semenova Elmira A Semenova
Emanuele Bovisio Emanuele Bovisio
@ -458,6 +483,8 @@ Erwin Authried
Ethan Glasser Camp Ethan Glasser Camp
Eugene Kotlyarov Eugene Kotlyarov
Evan Jordan Evan Jordan
Even Rouault
Evert Pot
Evgeny Grin Evgeny Grin
Evgeny Turnaev Evgeny Turnaev
Eygene Ryabinkin Eygene Ryabinkin
@ -469,6 +496,7 @@ Fabrizio Ammollo
Fahim Chandurwala Fahim Chandurwala
Fedor Karpelevitch Fedor Karpelevitch
Feist Josselin Feist Josselin
Felix Kaiser
Felix Yan Felix Yan
Felix von Leitner Felix von Leitner
Feng Tu Feng Tu
@ -476,9 +504,11 @@ Fernando Muñoz
Flavio Medeiros Flavio Medeiros
Florian Schoppmann Florian Schoppmann
Florian Weimer Florian Weimer
Florin Petriuc
Forrest Cahoon Forrest Cahoon
Francisco Moraes Francisco Moraes
Francois Petitjean Francois Petitjean
Frank Denis
Frank Gevaerts Frank Gevaerts
Frank Hempel Frank Hempel
Frank Keeney Frank Keeney
@ -493,6 +523,7 @@ Fred New
Fred Noz Fred Noz
Fred Stluka Fred Stluka
Frederic Lepied Frederic Lepied
Frederik B
Fredrik Thulin Fredrik Thulin
Gabriel Kuri Gabriel Kuri
Gabriel Sjoberg Gabriel Sjoberg
@ -554,8 +585,10 @@ Gwenole Beauchesne
Gökhan Şengün Gökhan Şengün
Götz Babin-Ebell Götz Babin-Ebell
Hamish Mackenzie Hamish Mackenzie
Han Qiao
Hang Kin Lau Hang Kin Lau
Hang Su Hang Su
Hannes Magnusson
Hanno Böck Hanno Böck
Hanno Kranzhoff Hanno Kranzhoff
Hans Steegers Hans Steegers
@ -584,6 +617,7 @@ Howard Chu
Hubert Kario Hubert Kario
Hzhijun Hzhijun
Ian D Allen Ian D Allen
Ian Fette
Ian Ford Ian Ford
Ian Gulliver Ian Gulliver
Ian Lynagh Ian Lynagh
@ -607,12 +641,14 @@ Ishan SinghLevett
Ivan Avdeev Ivan Avdeev
Ivo Bellin Salarin Ivo Bellin Salarin
Jack Zhang Jack Zhang
Jackarain on github
Jacky Lam Jacky Lam
Jacob Meuser Jacob Meuser
Jacob Moshenko Jacob Moshenko
Jactry Zeng Jactry Zeng
Jad Chamcham Jad Chamcham
Jaime Fullaondo Jaime Fullaondo
Jakub Wilk
Jakub Zakrzewski Jakub Zakrzewski
James Atwill James Atwill
James Bursa James Bursa
@ -624,9 +660,11 @@ James Gallagher
James Griffiths James Griffiths
James Housley James Housley
James MacMillan James MacMillan
James Slaughter
Jamie Lokier Jamie Lokier
Jamie Newton Jamie Newton
Jamie Wilkinson Jamie Wilkinson
Jan Alexander Steffens
Jan Ehrhardt Jan Ehrhardt
Jan Koen Annot Jan Koen Annot
Jan Kunder Jan Kunder
@ -638,11 +676,13 @@ Jared Lundell
Jari Aalto Jari Aalto
Jari Sundell Jari Sundell
Jason Glasgow Jason Glasgow
Jason Juang
Jason Liu Jason Liu
Jason McDonald Jason McDonald
Jason S. Priebe Jason S. Priebe
Javier Barroso Javier Barroso
Javier G. Sogo Javier G. Sogo
Javier Sixto
Jay Austin Jay Austin
Jayesh A Shah Jayesh A Shah
Jaz Fresh Jaz Fresh
@ -669,6 +709,7 @@ Jeremy Friesner
Jeremy Huddleston Jeremy Huddleston
Jeremy Lin Jeremy Lin
Jeremy Pearson Jeremy Pearson
Jeremy Tan
Jeroen Koekkoek Jeroen Koekkoek
Jeroen Ooms Jeroen Ooms
Jerome Muffat-Meridol Jerome Muffat-Meridol
@ -678,6 +719,7 @@ Jerry Krinock
Jerry Wu Jerry Wu
Jes Badwal Jes Badwal
Jesper Jensen Jesper Jensen
Jesse Chisholm
Jesse Noller Jesse Noller
Jesse Tan Jesse Tan
Jie He Jie He
@ -706,10 +748,13 @@ Johannes Schindelin
John Bradshaw John Bradshaw
John Coffey John Coffey
John Crow John Crow
John David Anglin
John DeHelian
John Dennis John Dennis
John Dunn John Dunn
John E. Malmberg John E. Malmberg
John Gardiner Myers John Gardiner Myers
John Hascall
John Janssen John Janssen
John Joseph Bachir John Joseph Bachir
John Kelly John Kelly
@ -721,11 +766,13 @@ John Marino
John Marshall John Marshall
John McGowan John McGowan
John P. McCaskey John P. McCaskey
John Starks
John Suprock John Suprock
John Wanghui John Wanghui
John Wilkinson John Wilkinson
John-Mark Bell John-Mark Bell
Johnny Luong Johnny Luong
Jon DeVree
Jon Grubbs Jon Grubbs
Jon Nelson Jon Nelson
Jon Sargeant Jon Sargeant
@ -767,6 +814,7 @@ Julien Nabet
Julien Royer Julien Royer
Jun-ichiro itojun Hagino Jun-ichiro itojun Hagino
Jurij Smakov Jurij Smakov
Juro Bystricky
Justin Clift Justin Clift
Justin Ehlert Justin Ehlert
Justin Fletcher Justin Fletcher
@ -786,6 +834,7 @@ Kang Lin
Kang-Jin Lee Kang-Jin Lee
Karl Moerder Karl Moerder
Karol Pietrzak Karol Pietrzak
Kartik Mahajan
Kaspar Brand Kaspar Brand
Katie Wang Katie Wang
Kazuho Oku Kazuho Oku
@ -804,6 +853,7 @@ Kevin Ji
Kevin Lussier Kevin Lussier
Kevin Reed Kevin Reed
Kevin Roth Kevin Roth
Kevin Smith
Kim Minjoong Kim Minjoong
Kim Rinnewitz Kim Rinnewitz
Kim Vandry Kim Vandry
@ -817,6 +867,7 @@ Krishnendu Majumdar
Krister Johansen Krister Johansen
Kristian Gunstone Kristian Gunstone
Kristian Köhntopp Kristian Köhntopp
Kristiyan Tsaklev
Kurt Fankhauser Kurt Fankhauser
Kyle J. McKay Kyle J. McKay
Kyle L. Huff Kyle L. Huff
@ -837,6 +888,7 @@ Lars Torben Wilson
Lau Hang Kin Lau Hang Kin
Laurent Rabret Laurent Rabret
Lauri Kasanen Lauri Kasanen
Lawrence Wagerfield
Legoff Vincent Legoff Vincent
Lehel Bernadt Lehel Bernadt
Leif W Leif W
@ -863,6 +915,7 @@ Loic Dachary
Loren Kirkby Loren Kirkby
Luan Cestari Luan Cestari
Luca Altea Luca Altea
Luca Boccassi
Lucas Adamski Lucas Adamski
Lucas Pardue Lucas Pardue
Ludek Finstrle Ludek Finstrle
@ -888,6 +941,7 @@ Mamoru Tasaka
Mandy Wu Mandy Wu
Manfred Schwarb Manfred Schwarb
Manuel Massing Manuel Massing
Marc Aldorasi
Marc Boucher Marc Boucher
Marc Deslauriers Marc Deslauriers
Marc Doughty Marc Doughty
@ -933,6 +987,7 @@ Martijn Koster
Martin C. Martin Martin C. Martin
Martin Drasar Martin Drasar
Martin Frodl Martin Frodl
Martin Galvan
Martin Hager Martin Hager
Martin Hedenfalk Martin Hedenfalk
Martin Jansen Martin Jansen
@ -954,11 +1009,14 @@ Matt Kraai
Matt Veenstra Matt Veenstra
Matt Witherspoon Matt Witherspoon
Matt Wixson Matt Wixson
Matteo B.
Matteo Rocco Matteo Rocco
Matthew Blain Matthew Blain
Matthew Clarke Matthew Clarke
Matthew Hall Matthew Hall
Matthew Kerwin
Matthias Bolte Matthias Bolte
Mattias Fornander
Maurice Barnum Maurice Barnum
Mauro Iorio Mauro Iorio
Mauro Rappa Mauro Rappa
@ -978,6 +1036,8 @@ Michael Calmer
Michael Cronenworth Michael Cronenworth
Michael Curtis Michael Curtis
Michael Day Michael Day
Michael Felt
Michael Gmelin
Michael Goffioul Michael Goffioul
Michael Jahn Michael Jahn
Michael Jerris Michael Jerris
@ -1005,6 +1065,7 @@ Miguel Diaz
Mihai Ionescu Mihai Ionescu
Mikael Johansson Mikael Johansson
Mikael Sennerholm Mikael Sennerholm
Mikalai Ananenka
Mike Bytnar Mike Bytnar
Mike Crowe Mike Crowe
Mike Dobbs Mike Dobbs
@ -1040,17 +1101,20 @@ Neal Poole
Nehal J Wani Nehal J Wani
Neil Bowers Neil Bowers
Neil Dunbar Neil Dunbar
Neil Kolban
Neil Spring Neil Spring
Nic Roets Nic Roets
Nicholas Maniscalco Nicholas Maniscalco
Nick Draffen Nick Draffen
Nick Gimbrone Nick Gimbrone
Nick Humfrey Nick Humfrey
Nick Miyake
Nick Zitzmann Nick Zitzmann
Nico Baggus Nico Baggus
Nicolas Berloquin Nicolas Berloquin
Nicolas Croiset Nicolas Croiset
Nicolas François Nicolas François
Nicolas Morey-Chaisemartin
Niels van Tongeren Niels van Tongeren
Nikita Schmidt Nikita Schmidt
Nikitinskit Dmitriy Nikitinskit Dmitriy
@ -1072,6 +1136,7 @@ Ola Mork
Olaf Flebbe Olaf Flebbe
Olaf Stüben Olaf Stüben
Oleg Pudeyev Oleg Pudeyev
Oli Kingshott
Oliver Gondža Oliver Gondža
Oliver Graute Oliver Graute
Oliver Kuckertz Oliver Kuckertz
@ -1097,6 +1162,7 @@ Pat Ray
Patrice Guerin Patrice Guerin
Patricia Muscalu Patricia Muscalu
Patrick Bihan-Faou Patrick Bihan-Faou
Patrick Dawson
Patrick McManus Patrick McManus
Patrick Monnerat Patrick Monnerat
Patrick Rapin Patrick Rapin
@ -1118,13 +1184,19 @@ Paul Oliver
Paul Querna Paul Querna
Paul Saab Paul Saab
Pavel Cenek Pavel Cenek
Pavel Gushchin
Pavel Orehov Pavel Orehov
Pavel Pavlov
Pavel Raiskup Pavel Raiskup
Pavel Rochnyak
Pavol Markovic
Pawel A. Gajda Pawel A. Gajda
Pawel Kierski Pawel Kierski
Pedro Larroy Pedro Larroy
Pedro Neves Pedro Neves
Per Lundberg
Per Malmberg Per Malmberg
Pete Lomax
Peter Bray Peter Bray
Peter Forret Peter Forret
Peter Frühberger Peter Frühberger
@ -1132,10 +1204,12 @@ Peter Gal
Peter Heuchert Peter Heuchert
Peter Hjalmarsson Peter Hjalmarsson
Peter Korsgaard Peter Korsgaard
Peter Lamare
Peter Lamberg Peter Lamberg
Peter Laser Peter Laser
Peter O'Gorman Peter O'Gorman
Peter Pentchev Peter Pentchev
Peter Piekarski
Peter Silva Peter Silva
Peter Su Peter Su
Peter Sylvester Peter Sylvester
@ -1148,6 +1222,7 @@ Peteris Krumins
Petr Bahula Petr Bahula
Petr Novak Petr Novak
Petr Pisar Petr Pisar
Petr Voytsik
Phil Blundell Phil Blundell
Phil Crump Phil Crump
Phil Karn Phil Karn
@ -1191,6 +1266,7 @@ Ralf S. Engelschall
Ralph Beckmann Ralph Beckmann
Ralph Mitchell Ralph Mitchell
Ramana Mokkapati Ramana Mokkapati
Randall S. Becker
Randy Armstrong Randy Armstrong
Randy McMurchy Randy McMurchy
Ravi Pratap Ravi Pratap
@ -1215,6 +1291,7 @@ Ricardo Cadime
Rich Burridge Rich Burridge
Rich Gray Rich Gray
Rich Rauenzahn Rich Rauenzahn
Richard Alcock
Richard Archer Richard Archer
Richard Atterer Richard Atterer
Richard Bramante Richard Bramante
@ -1234,9 +1311,11 @@ Rick Jones
Rick Richardson Rick Richardson
Ricki Hirner Ricki Hirner
Rider Linden Rider Linden
Rob Cotrone
Rob Crittenden Rob Crittenden
Rob Davies Rob Davies
Rob Jones Rob Jones
Rob Sanders
Rob Stanzel Rob Stanzel
Rob Ward Rob Ward
Robert A. Monat Robert A. Monat
@ -1244,6 +1323,7 @@ Robert B. Harris
Robert D. Young Robert D. Young
Robert Foreman Robert Foreman
Robert Iakobashvili Robert Iakobashvili
Robert Kolcun
Robert Olson Robert Olson
Robert Schumann Robert Schumann
Robert Weaver Robert Weaver
@ -1279,9 +1359,12 @@ Ryan Chan
Ryan Nelson Ryan Nelson
Ryan Schmidt Ryan Schmidt
Ryan Scott Ryan Scott
Ryan Winograd
Ryuichi KAWAMATA Ryuichi KAWAMATA
Rémy Léone Rémy Léone
S. Moonesamy S. Moonesamy
SBKarr on github
Salah-Eddin Shaban
Salvador Dávila Salvador Dávila
Salvatore Sorrentino Salvatore Sorrentino
Sam Deane Sam Deane
@ -1308,6 +1391,7 @@ Scott Davis
Scott McCreary Scott McCreary
Sean Boudreau Sean Boudreau
Sean Burford Sean Burford
Sean MacLennan
Sebastian Mundry Sebastian Mundry
Sebastian Pohlschmidt Sebastian Pohlschmidt
Sebastian Rasmussen Sebastian Rasmussen
@ -1345,6 +1429,7 @@ Spork Schivago
Stadler Stephan Stadler Stephan
Stan van de Burgt Stan van de Burgt
Stanislav Ivochkin Stanislav Ivochkin
Stanislav Zidek
Stefan Bühler Stefan Bühler
Stefan Eissing Stefan Eissing
Stefan Esser Stefan Esser
@ -1355,6 +1440,7 @@ Stefan Teleman
Stefan Tomanek Stefan Tomanek
Stefan Ulrich Stefan Ulrich
Steinar H. Gunderson Steinar H. Gunderson
Stepan Broz
Stephan Bergmann Stephan Bergmann
Stephen Brokenshire Stephen Brokenshire
Stephen Collyer Stephen Collyer
@ -1404,9 +1490,11 @@ Thomas J. Moore
Thomas Klausner Thomas Klausner
Thomas L. Shinnick Thomas L. Shinnick
Thomas Lopatic Thomas Lopatic
Thomas Petazzoni
Thomas Ruecker Thomas Ruecker
Thomas Schwinge Thomas Schwinge
Thomas Tonino Thomas Tonino
Thomas van Hesteren
Thorsten Schöning Thorsten Schöning
Tiit Pikma Tiit Pikma
Till Maas Till Maas
@ -1424,6 +1512,7 @@ Tim Stack
Tim Starling Tim Starling
Timo Sirainen Timo Sirainen
Timotej Lazar Timotej Lazar
Timothe Litt
Timothy Polich Timothy Polich
Tinus van den Berg Tinus van den Berg
Tobias Markus Tobias Markus
@ -1442,12 +1531,14 @@ Tom Mattison
Tom Moers Tom Moers
Tom Mueller Tom Mueller
Tom Regner Tom Regner
Tom Seddon
Tom Sparrow Tom Sparrow
Tom Wright Tom Wright
Tom Zerucha Tom Zerucha
Tomas Hoger Tomas Hoger
Tomas Jakobsson Tomas Jakobsson
Tomas Mlcoch Tomas Mlcoch
Tomas Mraz
Tomas Pospisek Tomas Pospisek
Tomas Szepe Tomas Szepe
Tomas Tomecek Tomas Tomecek
@ -1520,7 +1611,9 @@ William Ahern
Wojciech Zwiefka Wojciech Zwiefka
Wouter Van Rooy Wouter Van Rooy
Wu Yongzheng Wu Yongzheng
Wyatt O'Day
Xavier Bouchoux Xavier Bouchoux
XhstormR on github
Xiangbin Li Xiangbin Li
Yaakov Selkowitz Yaakov Selkowitz
Yamada Yasuharu Yamada Yasuharu
@ -1538,19 +1631,33 @@ Yun SangHo
Yuriy Sosov Yuriy Sosov
Yves Arrouye Yves Arrouye
Yves Lejeune Yves Lejeune
Zachary Seguin
Zdenek Pavlas Zdenek Pavlas
Zekun Ni Zekun Ni
Zenju on github
Zhouyihai Ding
Zmey Petroff Zmey Petroff
Zvi Har'El Zvi Har'El
afrind on github afrind on github
ahodesuka on github
arainchik on github
asavah on github asavah on github
baumanj on github baumanj on github
bsammon on github bsammon on github
canavan at github canavan on github
cbartl on github
cmfrolick on github
destman on github
dkjjr89 on github dkjjr89 on github
dpull on github
eXeC64 on github eXeC64 on github
jonrumsey at github elelel on github
guitared on github
hsiao yi
imilli on github
jonrumsey on github jonrumsey on github
joshhe on github
jungle-boogie on github
jveazey on github jveazey on github
ka7 on github ka7 on github
kreshano on github kreshano on github
@ -1560,18 +1667,24 @@ madblobfish on github
marc-groundctl on github marc-groundctl on github
mccormickt12 on github mccormickt12 on github
mkzero on github mkzero on github
moohoorama on github
neex on github neex on github
neheb on github neheb on github
nk nk
nopjmp on github nopjmp on github
olesteban on github
omau on github
ovidiu-benea on github
paulharris on github
silveja1 on github silveja1 on github
stootill at github stootill on github
swalkaus at yahoo.com swalkaus at yahoo.com
tarek112 on github tarek112 on github
tommink[at]post.pl tommink[at]post.pl
vanillajonathan on github vanillajonathan on github
wmsch on github wmsch on github
wyattoday at github wyattoday on github
youngchopin on github
zelinchen on github zelinchen on github
İsmail Dönmez İsmail Dönmez
Štefan Kremeň Štefan Kremeň

View File

@ -25,8 +25,10 @@
1.7 Detect when called from within callbacks 1.7 Detect when called from within callbacks
1.8 CURLOPT_RESOLVE for any port number 1.8 CURLOPT_RESOLVE for any port number
1.9 Cache negative name resolves 1.9 Cache negative name resolves
1.10 auto-detect proxy
1.11 minimize dependencies with dynamically loaded modules 1.11 minimize dependencies with dynamically loaded modules
1.12 have form functions use CURL handle argument 1.12 updated DNS server while running
1.13 DNS-over-HTTPS
1.14 Typesafe curl_easy_setopt() 1.14 Typesafe curl_easy_setopt()
1.15 Monitor connections in the connection pool 1.15 Monitor connections in the connection pool
1.16 Try to URL encode given URL 1.16 Try to URL encode given URL
@ -37,7 +39,7 @@
1.21 API for URL parsing/splitting 1.21 API for URL parsing/splitting
1.23 Offer API to flush the connection pool 1.23 Offer API to flush the connection pool
1.24 TCP Fast Open for windows 1.24 TCP Fast Open for windows
1.25 Remove the generated include file 1.25 Expose tried IP addresses that failed
2. libcurl - multi interface 2. libcurl - multi interface
2.1 More non-blocking 2.1 More non-blocking
@ -57,6 +59,7 @@
4.5 ASCII support 4.5 ASCII support
4.6 GSSAPI via Windows SSPI 4.6 GSSAPI via Windows SSPI
4.7 STAT for LIST without data connection 4.7 STAT for LIST without data connection
4.8 Option to ignore private IP addresses in PASV response
5. HTTP 5. HTTP
5.1 Better persistency for HTTP 1.0 5.1 Better persistency for HTTP 1.0
@ -65,12 +68,8 @@
5.4 HTTP Digest using SHA-256 5.4 HTTP Digest using SHA-256
5.5 auth= in URLs 5.5 auth= in URLs
5.6 Refuse "downgrade" redirects 5.6 Refuse "downgrade" redirects
5.7 Brotli compression 5.7 QUIC
5.8 QUIC 5.8 Leave secure cookies alone
5.9 Improve formpost API
5.10 Leave secure cookies alone
5.11 Chunked transfer multipart formpost
5.12 OPTIONS *
6. TELNET 6. TELNET
6.1 ditch stdin 6.1 ditch stdin
@ -133,15 +132,14 @@
17.1 Multiplexing 17.1 Multiplexing
17.2 SFTP performance 17.2 SFTP performance
17.3 Support better than MD5 hostkey hash 17.3 Support better than MD5 hostkey hash
17.4 Support CURLOPT_PREQUOTE
18. Command line tool 18. Command line tool
18.1 sync 18.1 sync
18.2 glob posts 18.2 glob posts
18.3 prevent file overwriting 18.3 prevent file overwriting
18.4 simultaneous parallel transfers 18.4 simultaneous parallel transfers
18.5 provide formpost headers
18.6 warning when setting an option 18.6 warning when setting an option
18.7 warning when sending binary output to terminal
18.8 offer color-coded HTTP header output 18.8 offer color-coded HTTP header output
18.9 Choose the name of file in braces for complex URLs 18.9 Choose the name of file in braces for complex URLs
18.10 improve how curl works in a windows console window 18.10 improve how curl works in a windows console window
@ -211,7 +209,7 @@
1.5 get rid of PATH_MAX 1.5 get rid of PATH_MAX
Having code use and rely on PATH_MAX is not nice: Having code use and rely on PATH_MAX is not nice:
http://insanecoding.blogspot.com/2007/11/pathmax-simply-isnt.html https://insanecoding.blogspot.com/2007/11/pathmax-simply-isnt.html
Currently the SSH based code uses it a bit, but to remove PATH_MAX from there Currently the SSH based code uses it a bit, but to remove PATH_MAX from there
we need libssh2 to properly tell us when we pass in a too small buffer and we need libssh2 to properly tell us when we pass in a too small buffer and
@ -257,6 +255,18 @@
A name resolve that has failed is likely to fail when made again within a A name resolve that has failed is likely to fail when made again within a
short period of time. Currently we only cache positive responses. short period of time. Currently we only cache positive responses.
1.10 auto-detect proxy
libcurl could be made to detect the system proxy setup automatically and use
that. On Windows, macOS and Linux desktops for example.
The pull-request to use libproxy for this was deferred due to doubts on the
reliability of the dependency and how to use it:
https://github.com/curl/curl/pull/977
libdetectproxy is a (C++) library for detecting the proxy on Windows
https://github.com/paulharris/libdetectproxy
1.11 minimize dependencies with dynamically loaded modules 1.11 minimize dependencies with dynamically loaded modules
We can create a system with loadable modules/plug-ins, where these modules We can create a system with loadable modules/plug-ins, where these modules
@ -265,17 +275,24 @@
app/invoke/used protocols would be necessary to load. See app/invoke/used protocols would be necessary to load. See
https://github.com/curl/curl/issues/349 https://github.com/curl/curl/issues/349
1.12 have form functions use CURL handle argument 1.12 updated DNS server while running
curl_formadd() and curl_formget() both currently have no CURL handle If /etc/resolv.conf gets updated while a program using libcurl is running, it
argument, but both can use a callback that is set in the easy handle, and is may cause name resolves to fail unless res_init() is called. We should
thus curl_formget() with callback cannot function without first having consider calling res_init() + retry once unconditionally on all name resolve
curl_easy_perform() (or similar) called - which is hard to grasp and a design failures to mitigate against this. Firefox works like that. Note that Windows
mistake. doesn't have res_init() or an alternative.
The curl_formadd() design can probably also be reconsidered to make it easier https://github.com/curl/curl/issues/2251
to use and less error-prone. Probably easiest by splitting it into several
function calls. 1.13 DNS-over-HTTPS
By adding support for DNS-over-HTTPS curl could resolve host names using a
totally separate name server than the standard system resolver, while at the
same time doing so over a communication channel that enhances privacy and
security.
https://github.com/curl/curl/wiki/DNS-over-HTTPS
1.14 Typesafe curl_easy_setopt() 1.14 Typesafe curl_easy_setopt()
@ -369,32 +386,12 @@
Mac OS. Windows supports TCP Fast Open starting with Windows 10, version 1607 Mac OS. Windows supports TCP Fast Open starting with Windows 10, version 1607
and we should add support for it. and we should add support for it.
1.25 Remove the generated include file 1.25 Expose tried IP addresses that failed
When curl and libcurl are built, one of the public include files are When libcurl fails to connect to a host, it should be able to offer the
generated and is populated with a set of defines that are derevid from sizes application the list of IP addresses that were used in the attempt.
and constants for the particular target architecture that build is made. For
platforms that can select between 32 bit and 64 bit at build time, this
approach makes the libcurl build only create a set of public headers suitable
for one of the architectures and not both. If you build libcurl for such a
platform and you want to allow applications to get built using either 32/64
version, you must generate the libcurl headers once for each setup and you
must then add a replacement curl header that would itself select the correct
32 or 64 bit specific header as necessary.
Your curl/curl.h alternative could then look like (replace with suitable CPP
variable to check):
#ifdef ARCH_32bit
#include <curl32/curl.h>
#else /* ARCH_64bit */
#include <curl64/curl.h>
#endif
A fix would either (A) fix the 32/64 setup automatically or even better (B)
work away the architecture specific defines from the headers so that they can
be used for all architectures independently of what libcurl was built for.
https://github.com/curl/curl/issues/2126
2. libcurl - multi interface 2. libcurl - multi interface
@ -404,7 +401,6 @@
EWOULDBLOCK or similar. Blocking cases include: EWOULDBLOCK or similar. Blocking cases include:
- Name resolves on non-windows unless c-ares or the threaded resolver is used - Name resolves on non-windows unless c-ares or the threaded resolver is used
- HTTP proxy CONNECT operations
- SOCKS proxy handshakes - SOCKS proxy handshakes
- file:// transfers - file:// transfers
- TELNET transfers - TELNET transfers
@ -482,17 +478,23 @@
4.6 GSSAPI via Windows SSPI 4.6 GSSAPI via Windows SSPI
In addition to currently supporting the SASL GSSAPI mechanism (Kerberos V5) In addition to currently supporting the SASL GSSAPI mechanism (Kerberos V5)
via third-party GSS-API libraries, such as Heimdal or MIT Kerberos, also add via third-party GSS-API libraries, such as Heimdal or MIT Kerberos, also add
support for GSSAPI authentication via Windows SSPI. support for GSSAPI authentication via Windows SSPI.
4.7 STAT for LIST without data connection 4.7 STAT for LIST without data connection
Some FTP servers allow STAT for listing directories instead of using LIST, and Some FTP servers allow STAT for listing directories instead of using LIST,
the response is then sent over the control connection instead of as the and the response is then sent over the control connection instead of as the
otherwise usedw data connection: http://www.nsftools.com/tips/RawFTP.htm#STAT otherwise usedw data connection: http://www.nsftools.com/tips/RawFTP.htm#STAT
This is not detailed in any FTP specification. This is not detailed in any FTP specification.
4.8 Option to ignore private IP addresses in PASV response
Some servers respond with and some other FTP client implementations can
ignore private (RFC 1918 style) IP addresses when received in PASV responses.
To consider for libcurl as well. See https://github.com/curl/curl/issues/1455
5. HTTP 5. HTTP
@ -547,13 +549,7 @@ This is not detailed in any FTP specification.
Consider a way to tell curl to refuse to "downgrade" protocol with a redirect Consider a way to tell curl to refuse to "downgrade" protocol with a redirect
and/or possibly a bit that refuses redirect to change protocol completely. and/or possibly a bit that refuses redirect to change protocol completely.
5.7 Brotli compression 5.7 QUIC
Brotli compression performs better than gzip and is being implemented by
browsers and servers widely. The algorithm: https://github.com/google/brotli
The Firefox bug: https://bugzilla.mozilla.org/show_bug.cgi?id=366559
5.8 QUIC
The standardization process of QUIC has been taken to the IETF and can be The standardization process of QUIC has been taken to the IETF and can be
followed on the [IETF QUIC Mailing followed on the [IETF QUIC Mailing
@ -563,46 +559,13 @@ This is not detailed in any FTP specification.
implemented. This, to allow other projects to benefit from the work and to implemented. This, to allow other projects to benefit from the work and to
thus broaden the interest and chance of others to participate. thus broaden the interest and chance of others to participate.
5.9 Improve formpost API 5.8 Leave secure cookies alone
Revamp the formpost API and making something that is easier to use and
understand:
https://github.com/curl/curl/wiki/formpost-API-redesigned
5.10 Leave secure cookies alone
Non-secure origins (HTTP sites) should not be allowed to set or modify Non-secure origins (HTTP sites) should not be allowed to set or modify
cookies with the 'secure' property: cookies with the 'secure' property:
https://tools.ietf.org/html/draft-ietf-httpbis-cookie-alone-01 https://tools.ietf.org/html/draft-ietf-httpbis-cookie-alone-01
5.11 Chunked transfer multipart formpost
For a case where the file is being made during the upload is progressing
(like passed on stdin to the curl tool), we cannot know the size before-hand
and we rather not read the entire thing into memory before it can start the
upload.
https://github.com/curl/curl/issues/1139
5.12 OPTIONS *
HTTP defines an OPTIONS method that can be sent with an asterisk option like
"OPTIONS *" to ask about options from the server and not a specific URL
resource. https://tools.ietf.org/html/rfc7230#section-5.3.4
libcurl as it currently works will always sent HTTP methods with a path that
starts with a slash so there's no way for an application to send a proper
"OPTIONS *" using libcurl. This should be fixed.
I can't think of any other non-slash paths we should support so it will
probably make sense to add a new boolean option for issuign an "OPTIONS *"
request. CURLOPT_OPTIONSASTERISK perhaps (and a corresponding command line
option)?
See https://github.com/curl/curl/issues/1280
6. TELNET 6. TELNET
@ -906,6 +869,10 @@ that doesn't exist on the server, just like --ftp-create-dirs.
SHA-1 is also being deprecated these days so we should consider workign with SHA-1 is also being deprecated these days so we should consider workign with
libssh2 to instead offer support for SHA-256 or similar. libssh2 to instead offer support for SHA-256 or similar.
17.4 Support CURLOPT_PREQUOTE
The two other QUOTE options are supported for SFTP, but this was left out for
unknown reasons!
18. Command line tool 18. Command line tool
@ -941,31 +908,12 @@ that doesn't exist on the server, just like --ftp-create-dirs.
Using the multi interface would also allow properly using parallel transfers Using the multi interface would also allow properly using parallel transfers
with HTTP/2 and supporting HTTP/2 server push from the command line. with HTTP/2 and supporting HTTP/2 server push from the command line.
18.5 provide formpost headers
Extending the capabilities of the multipart formposting. How about leaving
the ';type=foo' syntax as it is and adding an extra tag (headers) which
works like this: curl -F "coolfiles=@fil1.txt;headers=@fil1.hdr" where
fil1.hdr contains extra headers like
Content-Type: text/plain; charset=KOI8-R"
Content-Transfer-Encoding: base64
X-User-Comment: Please don't use browser specific HTML code
which should overwrite the program reasonable defaults (plain/text,
8bit...)
18.6 warning when setting an option 18.6 warning when setting an option
Display a warning when libcurl returns an error when setting an option. Display a warning when libcurl returns an error when setting an option.
This can be useful to tell when support for a particular feature hasn't been This can be useful to tell when support for a particular feature hasn't been
compiled into the library. compiled into the library.
18.7 warning when sending binary output to terminal
Provide a way that prompts the user for confirmation before binary data is
sent to the terminal, much in the style 'less' does it.
18.8 offer color-coded HTTP header output 18.8 offer color-coded HTTP header output
By offering different color output on the header name and the header By offering different color output on the header name and the header

View File

@ -1,7 +1,7 @@
# Makefile.in generated by automake 1.15 from Makefile.am. # Makefile.in generated by automake 1.15.1 from Makefile.am.
# @configure_input@ # @configure_input@
# Copyright (C) 1994-2014 Free Software Foundation, Inc. # Copyright (C) 1994-2017 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation # This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it, # gives unlimited permission to copy and/or distribute it,
@ -135,8 +135,7 @@ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4) $(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
mkinstalldirs = $(install_sh) -d mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/lib/curl_config.h \ CONFIG_HEADER = $(top_builddir)/lib/curl_config.h
$(top_builddir)/include/curl/curlbuild.h
CONFIG_CLEAN_FILES = CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES = CONFIG_CLEAN_VPATH_FILES =
AM_V_P = $(am__v_P_@AM_V@) AM_V_P = $(am__v_P_@AM_V@)
@ -178,8 +177,11 @@ CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@ CFLAGS = @CFLAGS@
CFLAG_CURL_SYMBOL_HIDING = @CFLAG_CURL_SYMBOL_HIDING@ CFLAG_CURL_SYMBOL_HIDING = @CFLAG_CURL_SYMBOL_HIDING@
CODE_COVERAGE_CFLAGS = @CODE_COVERAGE_CFLAGS@ CODE_COVERAGE_CFLAGS = @CODE_COVERAGE_CFLAGS@
CODE_COVERAGE_CPPFLAGS = @CODE_COVERAGE_CPPFLAGS@
CODE_COVERAGE_CXXFLAGS = @CODE_COVERAGE_CXXFLAGS@
CODE_COVERAGE_ENABLED = @CODE_COVERAGE_ENABLED@ CODE_COVERAGE_ENABLED = @CODE_COVERAGE_ENABLED@
CODE_COVERAGE_LDFLAGS = @CODE_COVERAGE_LDFLAGS@ CODE_COVERAGE_LDFLAGS = @CODE_COVERAGE_LDFLAGS@
CODE_COVERAGE_LIBS = @CODE_COVERAGE_LIBS@
CONFIGURE_OPTIONS = @CONFIGURE_OPTIONS@ CONFIGURE_OPTIONS = @CONFIGURE_OPTIONS@
CPP = @CPP@ CPP = @CPP@
CPPFLAGS = @CPPFLAGS@ CPPFLAGS = @CPPFLAGS@
@ -205,7 +207,9 @@ CURL_DISABLE_TFTP = @CURL_DISABLE_TFTP@
CURL_LT_SHLIB_VERSIONED_FLAVOUR = @CURL_LT_SHLIB_VERSIONED_FLAVOUR@ CURL_LT_SHLIB_VERSIONED_FLAVOUR = @CURL_LT_SHLIB_VERSIONED_FLAVOUR@
CURL_NETWORK_AND_TIME_LIBS = @CURL_NETWORK_AND_TIME_LIBS@ CURL_NETWORK_AND_TIME_LIBS = @CURL_NETWORK_AND_TIME_LIBS@
CURL_NETWORK_LIBS = @CURL_NETWORK_LIBS@ CURL_NETWORK_LIBS = @CURL_NETWORK_LIBS@
CURL_WITH_MULTI_SSL = @CURL_WITH_MULTI_SSL@
CYGPATH_W = @CYGPATH_W@ CYGPATH_W = @CYGPATH_W@
DEFAULT_SSL_BACKEND = @DEFAULT_SSL_BACKEND@
DEFS = @DEFS@ DEFS = @DEFS@
DEPDIR = @DEPDIR@ DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@ DLLTOOL = @DLLTOOL@
@ -222,6 +226,7 @@ FGREP = @FGREP@
GCOV = @GCOV@ GCOV = @GCOV@
GENHTML = @GENHTML@ GENHTML = @GENHTML@
GREP = @GREP@ GREP = @GREP@
HAVE_BROTLI = @HAVE_BROTLI@
HAVE_GNUTLS_SRP = @HAVE_GNUTLS_SRP@ HAVE_GNUTLS_SRP = @HAVE_GNUTLS_SRP@
HAVE_LDAP_SSL = @HAVE_LDAP_SSL@ HAVE_LDAP_SSL = @HAVE_LDAP_SSL@
HAVE_LIBZ = @HAVE_LIBZ@ HAVE_LIBZ = @HAVE_LIBZ@
@ -279,6 +284,7 @@ REQUIRE_LIB_DEPS = @REQUIRE_LIB_DEPS@
SED = @SED@ SED = @SED@
SET_MAKE = @SET_MAKE@ SET_MAKE = @SET_MAKE@
SHELL = @SHELL@ SHELL = @SHELL@
SSL_BACKENDS = @SSL_BACKENDS@
SSL_ENABLED = @SSL_ENABLED@ SSL_ENABLED = @SSL_ENABLED@
SSL_LIBS = @SSL_LIBS@ SSL_LIBS = @SSL_LIBS@
STRIP = @STRIP@ STRIP = @STRIP@
@ -291,6 +297,7 @@ USE_DARWINSSL = @USE_DARWINSSL@
USE_GNUTLS = @USE_GNUTLS@ USE_GNUTLS = @USE_GNUTLS@
USE_GNUTLS_NETTLE = @USE_GNUTLS_NETTLE@ USE_GNUTLS_NETTLE = @USE_GNUTLS_NETTLE@
USE_LIBRTMP = @USE_LIBRTMP@ USE_LIBRTMP = @USE_LIBRTMP@
USE_LIBSSH = @USE_LIBSSH@
USE_LIBSSH2 = @USE_LIBSSH2@ USE_LIBSSH2 = @USE_LIBSSH2@
USE_MBEDTLS = @USE_MBEDTLS@ USE_MBEDTLS = @USE_MBEDTLS@
USE_NGHTTP2 = @USE_NGHTTP2@ USE_NGHTTP2 = @USE_NGHTTP2@
@ -362,7 +369,8 @@ top_srcdir = @top_srcdir@
AUTOMAKE_OPTIONS = foreign no-dependencies AUTOMAKE_OPTIONS = foreign no-dependencies
MANPAGE = $(top_builddir)/docs/curl.1 MANPAGE = $(top_builddir)/docs/curl.1
DPAGES = abstract-unix-socket.d anyauth.d append.d basic.d cacert.d capath.d cert.d \ DPAGES = abstract-unix-socket.d anyauth.d append.d basic.d cacert.d capath.d cert.d \
cert-status.d cert-type.d ciphers.d compressed.d config.d \ cert-status.d cert-type.d ciphers.d compressed.d compressed-ssh.d \
config.d \
connect-timeout.d connect-to.d continue-at.d cookie.d cookie-jar.d \ connect-timeout.d connect-to.d continue-at.d cookie.d cookie-jar.d \
create-dirs.d crlf.d crlfile.d data-ascii.d data-binary.d data.d \ create-dirs.d crlf.d crlfile.d data-ascii.d data-binary.d data.d \
data-raw.d data-urlencode.d delegation.d digest.d disable.d \ data-raw.d data-urlencode.d delegation.d digest.d disable.d \
@ -394,6 +402,7 @@ DPAGES = abstract-unix-socket.d anyauth.d append.d basic.d cacert.d capath.d cer
remote-name-all.d remote-name.d remote-time.d request.d resolve.d \ remote-name-all.d remote-name.d remote-time.d request.d resolve.d \
retry-connrefused.d retry.d retry-delay.d retry-max-time.d sasl-ir.d \ retry-connrefused.d retry.d retry-delay.d retry-max-time.d sasl-ir.d \
service-name.d show-error.d silent.d socks4a.d socks4.d socks5.d \ service-name.d show-error.d silent.d socks4a.d socks4.d socks5.d \
socks5-basic.d socks5-gssapi.d \
socks5-gssapi-nec.d socks5-gssapi-service.d socks5-hostname.d \ socks5-gssapi-nec.d socks5-gssapi-service.d socks5-hostname.d \
speed-limit.d speed-time.d ssl-allow-beast.d ssl.d ssl-no-revoke.d \ speed-limit.d speed-time.d ssl-allow-beast.d ssl.d ssl-no-revoke.d \
ssl-reqd.d sslv2.d sslv3.d stderr.d suppress-connect-headers.d \ ssl-reqd.d sslv2.d sslv3.d stderr.d suppress-connect-headers.d \
@ -403,7 +412,7 @@ DPAGES = abstract-unix-socket.d anyauth.d append.d basic.d cacert.d capath.d cer
tlsauthtype.d tlspassword.d tlsuser.d tlsv1.0.d tlsv1.1.d tlsv1.2.d \ tlsauthtype.d tlspassword.d tlsuser.d tlsv1.0.d tlsv1.1.d tlsv1.2.d \
tlsv1.3.d tlsv1.d trace-ascii.d trace.d trace-time.d tr-encoding.d \ tlsv1.3.d tlsv1.d trace-ascii.d trace.d trace-time.d tr-encoding.d \
unix-socket.d upload-file.d url.d use-ascii.d user-agent.d user.d \ unix-socket.d upload-file.d url.d use-ascii.d user-agent.d user.d \
verbose.d version.d write-out.d xattr.d verbose.d version.d write-out.d xattr.d request-target.d
OTHERPAGES = page-footer page-header OTHERPAGES = page-footer page-header
EXTRA_DIST = $(DPAGES) MANPAGE.md gen.pl $(OTHERPAGES) CMakeLists.txt EXTRA_DIST = $(DPAGES) MANPAGE.md gen.pl $(OTHERPAGES) CMakeLists.txt

View File

@ -1,7 +1,8 @@
# Shared between Makefile.am and CMakeLists.txt # Shared between Makefile.am and CMakeLists.txt
DPAGES = abstract-unix-socket.d anyauth.d append.d basic.d cacert.d capath.d cert.d \ DPAGES = abstract-unix-socket.d anyauth.d append.d basic.d cacert.d capath.d cert.d \
cert-status.d cert-type.d ciphers.d compressed.d config.d \ cert-status.d cert-type.d ciphers.d compressed.d compressed-ssh.d \
config.d \
connect-timeout.d connect-to.d continue-at.d cookie.d cookie-jar.d \ connect-timeout.d connect-to.d continue-at.d cookie.d cookie-jar.d \
create-dirs.d crlf.d crlfile.d data-ascii.d data-binary.d data.d \ create-dirs.d crlf.d crlfile.d data-ascii.d data-binary.d data.d \
data-raw.d data-urlencode.d delegation.d digest.d disable.d \ data-raw.d data-urlencode.d delegation.d digest.d disable.d \
@ -33,6 +34,7 @@ DPAGES = abstract-unix-socket.d anyauth.d append.d basic.d cacert.d capath.d cer
remote-name-all.d remote-name.d remote-time.d request.d resolve.d \ remote-name-all.d remote-name.d remote-time.d request.d resolve.d \
retry-connrefused.d retry.d retry-delay.d retry-max-time.d sasl-ir.d \ retry-connrefused.d retry.d retry-delay.d retry-max-time.d sasl-ir.d \
service-name.d show-error.d silent.d socks4a.d socks4.d socks5.d \ service-name.d show-error.d silent.d socks4a.d socks4.d socks5.d \
socks5-basic.d socks5-gssapi.d \
socks5-gssapi-nec.d socks5-gssapi-service.d socks5-hostname.d \ socks5-gssapi-nec.d socks5-gssapi-service.d socks5-hostname.d \
speed-limit.d speed-time.d ssl-allow-beast.d ssl.d ssl-no-revoke.d \ speed-limit.d speed-time.d ssl-allow-beast.d ssl.d ssl-no-revoke.d \
ssl-reqd.d sslv2.d sslv3.d stderr.d suppress-connect-headers.d \ ssl-reqd.d sslv2.d sslv3.d stderr.d suppress-connect-headers.d \
@ -42,6 +44,6 @@ DPAGES = abstract-unix-socket.d anyauth.d append.d basic.d cacert.d capath.d cer
tlsauthtype.d tlspassword.d tlsuser.d tlsv1.0.d tlsv1.1.d tlsv1.2.d \ tlsauthtype.d tlspassword.d tlsuser.d tlsv1.0.d tlsv1.1.d tlsv1.2.d \
tlsv1.3.d tlsv1.d trace-ascii.d trace.d trace-time.d tr-encoding.d \ tlsv1.3.d tlsv1.d trace-ascii.d trace.d trace-time.d tr-encoding.d \
unix-socket.d upload-file.d url.d use-ascii.d user-agent.d user.d \ unix-socket.d upload-file.d url.d use-ascii.d user-agent.d user.d \
verbose.d version.d write-out.d xattr.d verbose.d version.d write-out.d xattr.d request-target.d
OTHERPAGES = page-footer page-header OTHERPAGES = page-footer page-header

View File

@ -1,5 +1,5 @@
Long: cacert Long: cacert
Arg: <CA certificate> Arg: <file>
Help: CA certificate to verify peer against Help: CA certificate to verify peer against
Protocols: TLS Protocols: TLS
--- ---

View File

@ -0,0 +1,7 @@
Long: compressed-ssh
Help: Enable SSH compression
Protocols: SCP SFTP
Added: 7.56.0
---
Enables built-in SSH compression.
This is a request, not an order; the server may or may not do it.

View File

@ -5,14 +5,17 @@ Added: 7.49.0
See-also: resolve header See-also: resolve header
--- ---
For a request to the given HOST:PORT pair, connect to For a request to the given HOST1:PORT1 pair, connect to HOST2:PORT2 instead.
CONNECT-TO-HOST:CONNECT-TO-PORT instead. This option is suitable to direct This option is suitable to direct requests at a specific server, e.g. at a
requests at a specific server, e.g. at a specific cluster node in a cluster of specific cluster node in a cluster of servers. This option is only used to
servers. This option is only used to establish the network connection. It establish the network connection. It does NOT affect the hostname/port that is
does NOT affect the hostname/port that is used for TLS/SSL (e.g. SNI, used for TLS/SSL (e.g. SNI, certificate verification) or for the application
certificate verification) or for the application protocols. "host" and "port" protocols. "HOST1" and "PORT1" may be the empty string, meaning "any
may be the empty string, meaning "any host/port". "connect-to-host" and host/port". "HOST2" and "PORT2" may also be the empty string, meaning "use the
"connect-to-port" may also be the empty string, meaning "use the request's request's original host/port".
original host/port".
A "host" specified to this option is compared as a string, so it needs to
match the name used in request URL. It can be either numerical such as
"127.0.0.1" or the full host name such as "example.org".
This option can be used many times to add many connect rules. This option can be used many times to add many connect rules.

View File

@ -1,6 +1,6 @@
Long: form-string Long: form-string
Help: Specify HTTP multipart POST data Help: Specify multipart MIME data
Protocols: HTTP Protocols: HTTP SMTP IMAP
Arg: <name=string> Arg: <name=string>
See-also: form See-also: form
--- ---

View File

@ -1,28 +1,36 @@
Long: form Long: form
Short: F Short: F
Arg: <name=content> Arg: <name=content>
Help: Specify HTTP multipart POST data Help: Specify multipart MIME data
Protocols: HTTP Protocols: HTTP SMTP IMAP
Mutexed: data head upload Mutexed: data head upload
--- ---
This lets curl emulate a filled-in form in which a user has pressed the submit For HTTP protocol family, this lets curl emulate a filled-in form in which a
button. This causes curl to POST data using the Content-Type user has pressed the submit button. This causes curl to POST data using the
multipart/form-data according to RFC 2388. This enables uploading of binary Content-Type multipart/form-data according to RFC 2388.
For SMTP and IMAP protocols, this is the mean to compose a multipart mail
message to transmit.
This enables uploading of binary
files etc. To force the 'content' part to be a file, prefix the file name with files etc. To force the 'content' part to be a file, prefix the file name with
an @ sign. To just get the content part from a file, prefix the file name with an @ sign. To just get the content part from a file, prefix the file name with
the symbol <. The difference between @ and < is then that @ makes a file get the symbol <. The difference between @ and < is then that @ makes a file get
attached in the post as a file upload, while the < makes a text field and just attached in the post as a file upload, while the < makes a text field and just
get the contents for that text field from a file. get the contents for that text field from a file.
Example: to send an image to a server, where \&'profile' is the name of the Example: to send an image to an HTTP server, where \&'profile' is the name of
form-field to which portrait.jpg will be the input: the form-field to which portrait.jpg will be the input:
curl -F profile=@portrait.jpg https://example.com/upload.cgi curl -F profile=@portrait.jpg https://example.com/upload.cgi
To read content from stdin instead of a file, use - as the filename. This goes To read content from stdin instead of a file, use - as the filename. This goes
for both @ and < constructs. Unfortunately it does not support reading the for both @ and < constructs. If stdin is not attached to a regular file, it is
file from a named pipe or similar, as it needs the full size before the buffered first to determine its size and allow a possible resend. Defining a
transfer starts. part's data from a named non-regular file (such as a named pipe or similar) is
unfortunately not subject to buffering and will be effectively read at
transmission time; since the full size is unknown before the transfer starts,
data is sent as chunks by HTTP and rejected by IMAP.
You can also tell curl what Content-Type to use by using 'type=', in a manner You can also tell curl what Content-Type to use by using 'type=', in a manner
similar to: similar to:
@ -49,6 +57,72 @@ or
Note that if a filename/path is quoted by double-quotes, any double-quote Note that if a filename/path is quoted by double-quotes, any double-quote
or backslash within the filename must be escaped by backslash. or backslash within the filename must be escaped by backslash.
Quoting must also be applied to non-file data if it contains semicolons,
leading/trailing spaces or leading double quotes:
curl -F 'colors="red; green; blue";type=text/x-myapp' example.com
You can add custom headers to the field by setting headers=, like
curl -F "submit=OK;headers=\\"X-submit-type: OK\\"" example.com
or
curl -F "submit=OK;headers=@headerfile" example.com
The headers= keyword may appear more that once and above notes about quoting
apply. When headers are read from a file, Empty lines and lines starting
with '#' are comments and ignored; each header can be folded by splitting
between two words and starting the continuation line with a space; embedded
carriage-returns and trailing spaces are stripped.
Here is an example of a header file contents:
# This file contain two headers.
.br
X-header-1: this is a header
# The following header is folded.
.br
X-header-2: this is
.br
another header
To support sending multipart mail messages, the syntax is extended as follows:
.br
- name can be omitted: the equal sign is the first character of the argument,
.br
- if data starts with '(', this signals to start a new multipart: it can be
followed by a content type specification.
.br
- a multipart can be terminated with a '=)' argument.
Example: the following command sends an SMTP mime e-mail consisting in an
inline part in two alternative formats: plain text and HTML. It attaches a
text file:
curl -F '=(;type=multipart/alternative' \\
.br
-F '=plain text message' \\
.br
-F '= <body>HTML message</body>;type=text/html' \\
.br
-F '=)' -F '=@textfile.txt' ... smtp://example.com
Data can be encoded for transfer using encoder=. Available encodings are
\fIbinary\fP and \fI8bit\fP that do nothing else than adding the corresponding
Content-Transfer-Encoding header, \fI7bit\fP that only rejects 8-bit characters
with a transfer error, \fIquoted-printable\fP and \fIbase64\fP that encodes
data according to the corresponding schemes, limiting lines length to
76 characters.
Example: send multipart mail with a quoted-printable text message and a
base64 attached file:
curl -F '=text message;encoder=quoted-printable' \\
.br
-F '=@localfile;encoder=base64' ... smtp://example.com
See further examples and details in the MANUAL. See further examples and details in the MANUAL.
This option can be used multiple times. This option can be used multiple times.

View File

@ -1,4 +1,4 @@
#!/usr/bin/perl #!/usr/bin/env perl
=begin comment =begin comment

View File

@ -1,10 +1,9 @@
Long: header Long: header
Short: H Short: H
Arg: <header> Arg: <header/@file>
Help: Pass custom header LINE to server Help: Pass custom header(s) to server
Protocols: HTTP Protocols: HTTP
--- ---
Extra header to include in the request when sending HTTP to a server. You may Extra header to include in the request when sending HTTP to a server. You may
specify any number of extra headers. Note that if you should add a custom specify any number of extra headers. Note that if you should add a custom
header that has the same name as one of the internal ones curl would use, your header that has the same name as one of the internal ones curl would use, your
@ -21,6 +20,10 @@ end-of-line marker, you should thus \fBnot\fP add that as a part of the header
content: do not add newlines or carriage returns, they will only mess things up content: do not add newlines or carriage returns, they will only mess things up
for you. for you.
Starting in 7.55.0, this option can take an argument in @filename style, which
then adds a header for each line in the input file. Using @- will make curl
read the header file from stdin.
See also the --user-agent and --referer options. See also the --user-agent and --referer options.
Starting in 7.37.0, you need --proxy-header to send custom headers intended Starting in 7.37.0, you need --proxy-header to send custom headers intended

View File

@ -1,7 +1,10 @@
Long: include Long: include
Short: i Short: i
Help: Include protocol headers in the output Help: Include protocol response headers in the output
See-also: verbose See-also: verbose
--- ---
Include the HTTP-header in the output. The HTTP-header includes things like Include the HTTP response headers in the output. The HTTP response headers can
server-name, date of the document, HTTP-version and more... include things like server name, cookies, date of the document, HTTP version
and more...
To view the request headers, consider the --verbose option.

View File

@ -10,3 +10,7 @@ name, IP address or host name. An example could look like:
curl --interface eth0:1 https://www.example.com/ curl --interface eth0:1 https://www.example.com/
If this option is used several times, the last one will be used. If this option is used several times, the last one will be used.
On Linux it can be used to specify a VRF, but the binary needs to either
have CAP_NET_RAW or to be ran as root. More information about Linux VRF:
https://www.kernel.org/doc/Documentation/networking/vrf.txt

View File

@ -8,7 +8,7 @@ your transfer not to use your entire bandwidth. To make it slower than it
otherwise would be. otherwise would be.
The given speed is measured in bytes/second, unless a suffix is appended. The given speed is measured in bytes/second, unless a suffix is appended.
Appending 'k' or 'K' will count the number as kilobytes, 'm' or M' makes it Appending 'k' or 'K' will count the number as kilobytes, 'm' or 'M' makes it
megabytes, while 'g' or 'G' makes it gigabytes. Examples: 200K, 3m and 1G. megabytes, while 'g' or 'G' makes it gigabytes. Examples: 200K, 3m and 1G.
If you also use the --speed-limit option, that option will take precedence and If you also use the --speed-limit option, that option will take precedence and

View File

@ -1,6 +1,6 @@
Long: mail-rcpt Long: mail-rcpt
Arg: <address> Arg: <address>
Help: Mail from this address Help: Mail to this address
Protocols: SMTP Protocols: SMTP
Added: 7.20.0 Added: 7.20.0
--- ---

View File

@ -7,6 +7,10 @@ Specify the maximum size (in bytes) of a file to download. If the file
requested is larger than this value, the transfer will not start and curl will requested is larger than this value, the transfer will not start and curl will
return with exit code 63. return with exit code 63.
A size modifier may be used. For example, Appending 'k' or 'K' will count the
number as kilobytes, 'm' or 'M' makes it megabytes, while 'g' or 'G' makes it
gigabytes. Examples: 200K, 3m and 1G. (Added in 7.58.0)
\fBNOTE:\fP The file size is not always known prior to download, and for such \fBNOTE:\fP The file size is not always known prior to download, and for such
files this option has no effect even if the file transfer ends up being larger files this option has no effect even if the file transfer ends up being larger
than this given limit. This concerns both FTP and HTTP transfers. than this given limit. This concerns both FTP and HTTP transfers.

View File

@ -41,6 +41,10 @@ If no protocol is specified in the proxy string or if the string doesn't match
a supported one, the proxy will be treated as an HTTP proxy. a supported one, the proxy will be treated as an HTTP proxy.
The supported proxy protocol prefixes are as follows: The supported proxy protocol prefixes are as follows:
.IP "http://"
Makes it use it as a HTTP proxy. The default if no scheme prefix is used.
.IP "https://"
Makes it treated as a \fBHTTPS\fP proxy.
.IP "socks4://" .IP "socks4://"
Makes it the equivalent of --socks4 Makes it the equivalent of --socks4
.IP "socks4a://" .IP "socks4a://"
@ -231,6 +235,10 @@ FTP chunk callback reported error
No connection available, the session will be queued No connection available, the session will be queued
.IP 90 .IP 90
SSL public key does not matched pinned public key SSL public key does not matched pinned public key
.IP 91
Invalid SSL certificate status.
.IP 92
Stream error in HTTP/2 framing layer.
.IP XX .IP XX
More error codes will appear here in future releases. The existing ones More error codes will appear here in future releases. The existing ones
are meant to never change. are meant to never change.

View File

@ -1,6 +1,6 @@
Long: proxy-header Long: proxy-header
Arg: <header> Arg: <header/@file>
Help: Pass custom header LINE to proxy Help: Pass custom header(s) to proxy
Protocols: HTTP Protocols: HTTP
Added: 7.37.0 Added: 7.37.0
--- ---
@ -17,4 +17,8 @@ up for you.
Headers specified with this option will not be included in requests that curl Headers specified with this option will not be included in requests that curl
knows will not be sent to a proxy. knows will not be sent to a proxy.
Starting in 7.55.0, this option can take an argument in @filename style, which
then adds a header for each line in the input file. Using @- will make curl
read the header file from stdin.
This option can be used multiple times to add/replace/remove multiple headers. This option can be used multiple times to add/replace/remove multiple headers.

View File

@ -0,0 +1,9 @@
Long: request-target
Help: Specify the target for this request
Protocols: HTTP
Added: 7.55.0
---
Tells curl to use an alternative "target" (path) instead of using the path as
provided in the URL. Particularly useful when wanting to issue HTTP requests
without leading slash or other data that doesn't follow the regular URL
pattern, like "OPTIONS *".

View File

@ -14,4 +14,6 @@ different ports.
The provided address set by this option will be used even if --ipv4 or --ipv6 The provided address set by this option will be used even if --ipv4 or --ipv6
is set to make curl use another IP version. is set to make curl use another IP version.
Support for providing the IP address within [brackets] was added in 7.57.0.
This option can be used many times to add many host names to resolve. This option can be used many times to add many host names to resolve.

View File

@ -0,0 +1,7 @@
Long: socks5-basic
Help: Enable username/password auth for SOCKS5 proxies
Added: 7.55.0
---
Tells curl to use username/password authentication when connecting to a SOCKS5
proxy. The username/password authentication is enabled by default. Use
--socks5-gssapi to force GSS-API authentication to SOCKS5 proxies.

View File

@ -0,0 +1,8 @@
Long: socks5-gssapi
Help: Enable GSS-API auth for SOCKS5 proxies
Added: 7.55.0
---
Tells curl to use GSS-API authentication when connecting to a SOCKS5 proxy.
The GSS-API authentication is enabled by default (if curl is compiled with
GSS-API support). Use --socks5-basic to force username/password authentication
to SOCKS5 proxies.

View File

@ -6,4 +6,5 @@ Added: 7.52.0
Forces curl to use TLS version 1.3 when connecting to a remote TLS server. Forces curl to use TLS version 1.3 when connecting to a remote TLS server.
Note that TLS 1.3 is only supported by a subset of TLS backends. At the time Note that TLS 1.3 is only supported by a subset of TLS backends. At the time
of writing this, those are BoringSSL and NSS only. of this writing, they are BoringSSL, NSS, and Secure Transport (on iOS 11 or
later, and macOS 10.13 or later).

View File

@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___ .\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____| .\" * \___|\___/|_| \_\_____|
.\" * .\" *
.\" * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al. .\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, et al.
.\" * .\" *
.\" * This software is licensed as described in the file COPYING, which .\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms .\" * you should have received as part of this distribution. The terms
@ -20,7 +20,7 @@
.\" * .\" *
.\" ************************************************************************** .\" **************************************************************************
.\" .\"
.TH curl-config 1 "February 03, 2016" "Curl 5.5.5" "curl-config manual" .TH curl-config 1 "November 30, 2017" "Curl 7.58.0" "curl-config manual"
.SH NAME .SH NAME
curl-config \- Get information about a libcurl installation curl-config \- Get information about a libcurl installation
@ -64,6 +64,10 @@ the time of writing, this list may include HTTP, HTTPS, FTP, FTPS, FILE,
TELNET, LDAP, DICT. Do not assume any particular order. The protocols will TELNET, LDAP, DICT. Do not assume any particular order. The protocols will
be listed using uppercase and are separated by newlines. There may be none, be listed using uppercase and are separated by newlines. There may be none,
one, or several protocols in the list. (Added in 7.13.0) one, or several protocols in the list. (Added in 7.13.0)
.IP "--ssl-backends"
Lists the SSL backends that were enabled when libcurl was built. It might be
no, one or several names. If more than one name, they will appear
comma-separated. (Added in 7.58.0)
.IP "--static-libs" .IP "--static-libs"
Shows the complete set of libs and other linker options you will need in order Shows the complete set of libs and other linker options you will need in order
to link your application with libcurl statically. (Added in 7.17.1) to link your application with libcurl statically. (Added in 7.17.1)

View File

@ -22,7 +22,7 @@
.\" .\"
.\" DO NOT EDIT. Generated by the curl project gen.pl man page generator. .\" DO NOT EDIT. Generated by the curl project gen.pl man page generator.
.\" .\"
.TH curl 1 "November 16, 2016" "Curl 7.54.1" "Curl Manual" .TH curl 1 "November 16, 2016" "Curl 7.58.0" "Curl Manual"
.SH NAME .SH NAME
curl \- transfer a URL curl \- transfer a URL
@ -174,7 +174,7 @@ previously set option that sets a different authentication method (such as
Used together with \fI-u, --user\fP. Used together with \fI-u, --user\fP.
See also \fI--proxy-basic\fP. See also \fI--proxy-basic\fP.
.IP "--cacert <CA certificate>" .IP "--cacert <file>"
(TLS) Tells curl to use the specified certificate file to verify the peer. The file (TLS) Tells curl to use the specified certificate file to verify the peer. The file
may contain multiple CA certificates. The certificate(s) must be in PEM may contain multiple CA certificates. The certificate(s) must be in PEM
format. Normally curl is built to use a default file for this, so this option format. Normally curl is built to use a default file for this, so this option
@ -262,6 +262,11 @@ specify valid ciphers. Read up on SSL cipher list details on this URL:
https://curl.haxx.se/docs/ssl-ciphers.html https://curl.haxx.se/docs/ssl-ciphers.html
If this option is used several times, the last one will be used. If this option is used several times, the last one will be used.
.IP "--compressed-ssh"
(SCP SFTP) Enables built-in SSH compression.
This is a request, not an order; the server may or may not do it.
Added in 7.56.0.
.IP "--compressed" .IP "--compressed"
(HTTP) Request a compressed response using one of the algorithms curl supports, and (HTTP) Request a compressed response using one of the algorithms curl supports, and
save the uncompressed document. If this option is used and the server sends save the uncompressed document. If this option is used and the server sends
@ -334,15 +339,18 @@ If this option is used several times, the last one will be used.
See also \fI-m, --max-time\fP. See also \fI-m, --max-time\fP.
.IP "--connect-to <HOST1:PORT1:HOST2:PORT2>" .IP "--connect-to <HOST1:PORT1:HOST2:PORT2>"
For a request to the given HOST:PORT pair, connect to For a request to the given HOST1:PORT1 pair, connect to HOST2:PORT2 instead.
CONNECT-TO-HOST:CONNECT-TO-PORT instead. This option is suitable to direct This option is suitable to direct requests at a specific server, e.g. at a
requests at a specific server, e.g. at a specific cluster node in a cluster of specific cluster node in a cluster of servers. This option is only used to
servers. This option is only used to establish the network connection. It establish the network connection. It does NOT affect the hostname/port that is
does NOT affect the hostname/port that is used for TLS/SSL (e.g. SNI, used for TLS/SSL (e.g. SNI, certificate verification) or for the application
certificate verification) or for the application protocols. "host" and "port" protocols. "HOST1" and "PORT1" may be the empty string, meaning "any
may be the empty string, meaning "any host/port". "connect-to-host" and host/port". "HOST2" and "PORT2" may also be the empty string, meaning "use the
"connect-to-port" may also be the empty string, meaning "use the request's request's original host/port".
original host/port".
A "host" specified to this option is compared as a string, so it needs to
match the name used in request URL. It can be either numerical such as
"127.0.0.1" or the full host name such as "example.org".
This option can be used many times to add many connect rules. This option can be used many times to add many connect rules.
@ -646,7 +654,7 @@ or later, or OS X 10.9 or later) backends.
Added in 7.42.0. Added in 7.42.0.
.IP "--form-string <name=string>" .IP "--form-string <name=string>"
(HTTP) Similar to \fI-F, --form\fP except that the value string for the named parameter is used (HTTP SMTP IMAP) Similar to \fI-F, --form\fP except that the value string for the named parameter is used
literally. Leading \&'@' and \&'<' characters, and the \&';type=' string in literally. Leading \&'@' and \&'<' characters, and the \&';type=' string in
the value have no special meaning. Use this in preference to \fI-F, --form\fP if the value have no special meaning. Use this in preference to \fI-F, --form\fP if
there's any possibility that the string value may accidentally trigger the there's any possibility that the string value may accidentally trigger the
@ -654,24 +662,32 @@ there's any possibility that the string value may accidentally trigger the
See also \fI-F, --form\fP. See also \fI-F, --form\fP.
.IP "-F, --form <name=content>" .IP "-F, --form <name=content>"
(HTTP) This lets curl emulate a filled-in form in which a user has pressed the submit (HTTP SMTP IMAP) For HTTP protocol family, this lets curl emulate a filled-in form in which a
button. This causes curl to POST data using the Content-Type user has pressed the submit button. This causes curl to POST data using the
multipart/form-data according to RFC 2388. This enables uploading of binary Content-Type multipart/form-data according to RFC 2388.
For SMTP and IMAP protocols, this is the mean to compose a multipart mail
message to transmit.
This enables uploading of binary
files etc. To force the 'content' part to be a file, prefix the file name with files etc. To force the 'content' part to be a file, prefix the file name with
an @ sign. To just get the content part from a file, prefix the file name with an @ sign. To just get the content part from a file, prefix the file name with
the symbol <. The difference between @ and < is then that @ makes a file get the symbol <. The difference between @ and < is then that @ makes a file get
attached in the post as a file upload, while the < makes a text field and just attached in the post as a file upload, while the < makes a text field and just
get the contents for that text field from a file. get the contents for that text field from a file.
Example: to send an image to a server, where \&'profile' is the name of the Example: to send an image to an HTTP server, where \&'profile' is the name of
form-field to which portrait.jpg will be the input: the form-field to which portrait.jpg will be the input:
curl -F profile=@portrait.jpg https://example.com/upload.cgi curl -F profile=@portrait.jpg https://example.com/upload.cgi
To read content from stdin instead of a file, use - as the filename. This goes To read content from stdin instead of a file, use - as the filename. This goes
for both @ and < constructs. Unfortunately it does not support reading the for both @ and < constructs. If stdin is not attached to a regular file, it is
file from a named pipe or similar, as it needs the full size before the buffered first to determine its size and allow a possible resend. Defining a
transfer starts. part's data from a named non-regular file (such as a named pipe or similar) is
unfortunately not subject to buffering and will be effectively read at
transmission time; since the full size is unknown before the transfer starts,
data is sent as chunks by HTTP and rejected by IMAP.
You can also tell curl what Content-Type to use by using 'type=', in a manner You can also tell curl what Content-Type to use by using 'type=', in a manner
similar to: similar to:
@ -698,6 +714,72 @@ or
Note that if a filename/path is quoted by double-quotes, any double-quote Note that if a filename/path is quoted by double-quotes, any double-quote
or backslash within the filename must be escaped by backslash. or backslash within the filename must be escaped by backslash.
Quoting must also be applied to non-file data if it contains semicolons,
leading/trailing spaces or leading double quotes:
curl -F 'colors="red; green; blue";type=text/x-myapp' example.com
You can add custom headers to the field by setting headers=, like
curl -F "submit=OK;headers=\\"X-submit-type: OK\\"" example.com
or
curl -F "submit=OK;headers=@headerfile" example.com
The headers= keyword may appear more that once and above notes about quoting
apply. When headers are read from a file, Empty lines and lines starting
with '#' are comments and ignored; each header can be folded by splitting
between two words and starting the continuation line with a space; embedded
carriage-returns and trailing spaces are stripped.
Here is an example of a header file contents:
# This file contain two headers.
.br
X-header-1: this is a header
# The following header is folded.
.br
X-header-2: this is
.br
another header
To support sending multipart mail messages, the syntax is extended as follows:
.br
- name can be omitted: the equal sign is the first character of the argument,
.br
- if data starts with '(', this signals to start a new multipart: it can be
followed by a content type specification.
.br
- a multipart can be terminated with a '=)' argument.
Example: the following command sends an SMTP mime e-mail consisting in an
inline part in two alternative formats: plain text and HTML. It attaches a
text file:
curl -F '=(;type=multipart/alternative' \\
.br
-F '=plain text message' \\
.br
-F '= <body>HTML message</body>;type=text/html' \\
.br
-F '=)' -F '=@textfile.txt' ... smtp://example.com
Data can be encoded for transfer using encoder=. Available encodings are
\fIbinary\fP and \fI8bit\fP that do nothing else than adding the corresponding
Content-Transfer-Encoding header, \fI7bit\fP that only rejects 8-bit characters
with a transfer error, \fIquoted-printable\fP and \fIbase64\fP that encodes
data according to the corresponding schemes, limiting lines length to
76 characters.
Example: send multipart mail with a quoted-printable text message and a
base64 attached file:
curl -F '=text message;encoder=quoted-printable' \\
.br
-F '=@localfile;encoder=base64' ... smtp://example.com
See further examples and details in the MANUAL. See further examples and details in the MANUAL.
This option can be used multiple times. This option can be used multiple times.
@ -838,9 +920,8 @@ contents but they should be encoded according to the URI standard.
(HTTP FTP FILE) Fetch the headers only! HTTP-servers feature the command HEAD which this uses (HTTP FTP FILE) Fetch the headers only! HTTP-servers feature the command HEAD which this uses
to get nothing but the header of a document. When used on an FTP or FILE file, to get nothing but the header of a document. When used on an FTP or FILE file,
curl displays the file size and last modification time only. curl displays the file size and last modification time only.
.IP "-H, --header <header>" .IP "-H, --header <header/@file>"
(HTTP) (HTTP) Extra header to include in the request when sending HTTP to a server. You may
Extra header to include in the request when sending HTTP to a server. You may
specify any number of extra headers. Note that if you should add a custom specify any number of extra headers. Note that if you should add a custom
header that has the same name as one of the internal ones curl would use, your header that has the same name as one of the internal ones curl would use, your
externally set header will be used instead of the internal one. This allows externally set header will be used instead of the internal one. This allows
@ -856,6 +937,10 @@ end-of-line marker, you should thus \fBnot\fP add that as a part of the header
content: do not add newlines or carriage returns, they will only mess things up content: do not add newlines or carriage returns, they will only mess things up
for you. for you.
Starting in 7.55.0, this option can take an argument in @filename style, which
then adds a header for each line in the input file. Using @- will make curl
read the header file from stdin.
See also the \fI-A, --user-agent\fP and \fI-e, --referer\fP options. See also the \fI-A, --user-agent\fP and \fI-e, --referer\fP options.
Starting in 7.37.0, you need \fI--proxy-header\fP to send custom headers intended Starting in 7.37.0, you need \fI--proxy-header\fP to send custom headers intended
@ -908,8 +993,11 @@ files larger than 2 gigabytes.
For FTP (since 7.46.0), skip the RETR command to figure out the size before For FTP (since 7.46.0), skip the RETR command to figure out the size before
downloading a file. downloading a file.
.IP "-i, --include" .IP "-i, --include"
Include the HTTP-header in the output. The HTTP-header includes things like Include the HTTP response headers in the output. The HTTP response headers can
server-name, date of the document, HTTP-version and more... include things like server name, cookies, date of the document, HTTP version
and more...
To view the request headers, consider the \fI-v, --verbose\fP option.
See also \fI-v, --verbose\fP. See also \fI-v, --verbose\fP.
.IP "-k, --insecure" .IP "-k, --insecure"
@ -934,6 +1022,10 @@ name, IP address or host name. An example could look like:
If this option is used several times, the last one will be used. If this option is used several times, the last one will be used.
On Linux it can be used to specify a VRF, but the binary needs to either
have CAP_NET_RAW or to be ran as root. More information about Linux VRF:
https://www.kernel.org/doc/Documentation/networking/vrf.txt
See also \fI--dns-interface\fP. See also \fI--dns-interface\fP.
.IP "-4, --ipv4" .IP "-4, --ipv4"
This option tells curl to resolve names to IPv4 addresses only, and not for This option tells curl to resolve names to IPv4 addresses only, and not for
@ -998,7 +1090,7 @@ your transfer not to use your entire bandwidth. To make it slower than it
otherwise would be. otherwise would be.
The given speed is measured in bytes/second, unless a suffix is appended. The given speed is measured in bytes/second, unless a suffix is appended.
Appending 'k' or 'K' will count the number as kilobytes, 'm' or M' makes it Appending 'k' or 'K' will count the number as kilobytes, 'm' or 'M' makes it
megabytes, while 'g' or 'G' makes it gigabytes. Examples: 200K, 3m and 1G. megabytes, while 'g' or 'G' makes it gigabytes. Examples: 200K, 3m and 1G.
If you also use the \fI-Y, --speed-limit\fP option, that option will take precedence and If you also use the \fI-Y, --speed-limit\fP option, that option will take precedence and
@ -1104,6 +1196,10 @@ Specify the maximum size (in bytes) of a file to download. If the file
requested is larger than this value, the transfer will not start and curl will requested is larger than this value, the transfer will not start and curl will
return with exit code 63. return with exit code 63.
A size modifier may be used. For example, Appending 'k' or 'K' will count the
number as kilobytes, 'm' or 'M' makes it megabytes, while 'g' or 'G' makes it
gigabytes. Examples: 200K, 3m and 1G. (Added in 7.58.0)
\fBNOTE:\fP The file size is not always known prior to download, and for such \fBNOTE:\fP The file size is not always known prior to download, and for such
files this option has no effect even if the file transfer ends up being larger files this option has no effect even if the file transfer ends up being larger
than this given limit. This concerns both FTP and HTTP transfers. than this given limit. This concerns both FTP and HTTP transfers.
@ -1509,7 +1605,7 @@ Tells curl to use HTTP Digest authentication when communicating with the given
proxy. Use \fI--digest\fP for enabling HTTP Digest with a remote host. proxy. Use \fI--digest\fP for enabling HTTP Digest with a remote host.
See also \fI-x, --proxy\fP and \fI--proxy-anyauth\fP and \fI--proxy-basic\fP. See also \fI-x, --proxy\fP and \fI--proxy-anyauth\fP and \fI--proxy-basic\fP.
.IP "--proxy-header <header>" .IP "--proxy-header <header/@file>"
(HTTP) Extra header to include in the request when sending HTTP to a proxy. You may (HTTP) Extra header to include in the request when sending HTTP to a proxy. You may
specify any number of extra headers. This is the equivalent option to \fI-H, --header\fP specify any number of extra headers. This is the equivalent option to \fI-H, --header\fP
but is for proxy communication only like in CONNECT requests when you want a but is for proxy communication only like in CONNECT requests when you want a
@ -1523,6 +1619,10 @@ up for you.
Headers specified with this option will not be included in requests that curl Headers specified with this option will not be included in requests that curl
knows will not be sent to a proxy. knows will not be sent to a proxy.
Starting in 7.55.0, this option can take an argument in @filename style, which
then adds a header for each line in the input file. Using @- will make curl
read the header file from stdin.
This option can be used multiple times to add/replace/remove multiple headers. This option can be used multiple times to add/replace/remove multiple headers.
Added in 7.37.0. Added in 7.37.0.
@ -1802,6 +1902,13 @@ You may use this option as many times as the number of URLs you have.
When used, this will make curl attempt to figure out the timestamp of the When used, this will make curl attempt to figure out the timestamp of the
remote file, and if that is available make the local file get that same remote file, and if that is available make the local file get that same
timestamp. timestamp.
.IP "--request-target"
(HTTP) Tells curl to use an alternative "target" (path) instead of using the path as
provided in the URL. Particularly useful when wanting to issue HTTP requests
without leading slash or other data that doesn't follow the regular URL
pattern, like "OPTIONS *".
Added in 7.55.0.
.IP "-X, --request <command>" .IP "-X, --request <command>"
(HTTP) Specifies a custom request method to use when communicating with the (HTTP) Specifies a custom request method to use when communicating with the
HTTP server. The specified request method will be used instead of the method HTTP server. The specified request method will be used instead of the method
@ -1849,6 +1956,8 @@ different ports.
The provided address set by this option will be used even if \fI-4, --ipv4\fP or \fI-6, --ipv6\fP The provided address set by this option will be used even if \fI-4, --ipv4\fP or \fI-6, --ipv6\fP
is set to make curl use another IP version. is set to make curl use another IP version.
Support for providing the IP address within [brackets] was added in 7.57.0.
This option can be used many times to add many host names to resolve. This option can be used many times to add many host names to resolve.
Added in 7.21.3. Added in 7.21.3.
@ -1947,6 +2056,12 @@ the SOCKS proxy and then connects (through SOCKS) to the HTTP or HTTPS proxy.
If this option is used several times, the last one will be used. If this option is used several times, the last one will be used.
Added in 7.18.0. Added in 7.18.0.
.IP "--socks5-basic"
Tells curl to use username/password authentication when connecting to a SOCKS5
proxy. The username/password authentication is enabled by default. Use
\fI--socks5-gssapi\fP to force GSS-API authentication to SOCKS5 proxies.
Added in 7.55.0.
.IP "--socks5-gssapi-nec" .IP "--socks5-gssapi-nec"
As part of the GSS-API negotiation a protection mode is negotiated. RFC 1961 As part of the GSS-API negotiation a protection mode is negotiated. RFC 1961
says in section 4.3/4.4 it should be protected, but the NEC reference says in section 4.3/4.4 it should be protected, but the NEC reference
@ -1964,6 +2079,13 @@ would use sockd/real-name for cases where the proxy-name does not match the
principal name. principal name.
Added in 7.19.4. Added in 7.19.4.
.IP "--socks5-gssapi"
Tells curl to use GSS-API authentication when connecting to a SOCKS5 proxy.
The GSS-API authentication is enabled by default (if curl is compiled with
GSS-API support). Use \fI--socks5-basic\fP to force username/password authentication
to SOCKS5 proxies.
Added in 7.55.0.
.IP "--socks5-hostname <host[:port]>" .IP "--socks5-hostname <host[:port]>"
Use the specified SOCKS5 proxy (and let the proxy resolve the host name). If Use the specified SOCKS5 proxy (and let the proxy resolve the host name). If
the port number is not specified, it is assumed at port 1080. the port number is not specified, it is assumed at port 1080.
@ -2170,7 +2292,8 @@ Added in 7.34.0.
(TLS) Forces curl to use TLS version 1.3 when connecting to a remote TLS server. (TLS) Forces curl to use TLS version 1.3 when connecting to a remote TLS server.
Note that TLS 1.3 is only supported by a subset of TLS backends. At the time Note that TLS 1.3 is only supported by a subset of TLS backends. At the time
of writing this, those are BoringSSL and NSS only. of this writing, they are BoringSSL, NSS, and Secure Transport (on iOS 11 or
later, and macOS 10.13 or later).
Added in 7.52.0. Added in 7.52.0.
.IP "-1, --tlsv1" .IP "-1, --tlsv1"
@ -2551,6 +2674,10 @@ If no protocol is specified in the proxy string or if the string doesn't match
a supported one, the proxy will be treated as an HTTP proxy. a supported one, the proxy will be treated as an HTTP proxy.
The supported proxy protocol prefixes are as follows: The supported proxy protocol prefixes are as follows:
.IP "http://"
Makes it use it as a HTTP proxy. The default if no scheme prefix is used.
.IP "https://"
Makes it treated as a \fBHTTPS\fP proxy.
.IP "socks4://" .IP "socks4://"
Makes it the equivalent of \fI--socks4\fP Makes it the equivalent of \fI--socks4\fP
.IP "socks4a://" .IP "socks4a://"
@ -2741,6 +2868,10 @@ FTP chunk callback reported error
No connection available, the session will be queued No connection available, the session will be queued
.IP 90 .IP 90
SSL public key does not matched pinned public key SSL public key does not matched pinned public key
.IP 91
Invalid SSL certificate status.
.IP 92
Stream error in HTTP/2 framing layer.
.IP XX .IP XX
More error codes will appear here in future releases. The existing ones More error codes will appear here in future releases. The existing ones
are meant to never change. are meant to never change.

View File

@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___ * | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____| * \___|\___/|_| \_\_____|
* *
* Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al. * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, et al.
* *
* This software is licensed as described in the file COPYING, which * This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms * you should have received as part of this distribution. The terms
@ -114,7 +114,7 @@ int main(void)
CURLM *cm; CURLM *cm;
CURLMsg *msg; CURLMsg *msg;
long L; long L;
unsigned int C=0; unsigned int C = 0;
int M, Q, U = -1; int M, Q, U = -1;
fd_set R, W, E; fd_set R, W, E;
struct timeval T; struct timeval T;
@ -162,9 +162,9 @@ int main(void)
T.tv_sec = L/1000; T.tv_sec = L/1000;
T.tv_usec = (L%1000)*1000; T.tv_usec = (L%1000)*1000;
if(0 > select(M+1, &R, &W, &E, &T)) { if(0 > select(M + 1, &R, &W, &E, &T)) {
fprintf(stderr, "E: select(%i,,,,%li): %i: %s\n", fprintf(stderr, "E: select(%i,,,,%li): %i: %s\n",
M+1, L, errno, strerror(errno)); M + 1, L, errno, strerror(errno));
return EXIT_FAILURE; return EXIT_FAILURE;
} }
} }

View File

@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___ # | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____| # \___|\___/|_| \_\_____|
# #
# Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al. # Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, et al.
# #
# This software is licensed as described in the file COPYING, which # This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms # you should have received as part of this distribution. The terms
@ -30,13 +30,9 @@ EXTRA_DIST = README Makefile.example Makefile.inc Makefile.m32 \
# being currently built and tested are searched before the library which # being currently built and tested are searched before the library which
# might possibly already be installed in the system. # might possibly already be installed in the system.
# #
# $(top_builddir)/include/curl for generated curlbuild.h included from curl.h
# $(top_builddir)/include for generated curlbuild.h inc. from lib/curl_setup.h
# $(top_srcdir)/include is for libcurl's external include files # $(top_srcdir)/include is for libcurl's external include files
AM_CPPFLAGS = -I$(top_builddir)/include/curl \ AM_CPPFLAGS = -I$(top_srcdir)/include
-I$(top_builddir)/include \
-I$(top_srcdir)/include
LIBDIR = $(top_builddir)/lib LIBDIR = $(top_builddir)/lib

View File

@ -1,7 +1,7 @@
# Makefile.in generated by automake 1.15 from Makefile.am. # Makefile.in generated by automake 1.15.1 from Makefile.am.
# @configure_input@ # @configure_input@
# Copyright (C) 1994-2014 Free Software Foundation, Inc. # Copyright (C) 1994-2017 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation # This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it, # gives unlimited permission to copy and/or distribute it,
@ -21,7 +21,7 @@
# | (__| |_| | _ <| |___ # | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____| # \___|\___/|_| \_\_____|
# #
# Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al. # Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, et al.
# #
# This software is licensed as described in the file COPYING, which # This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms # you should have received as part of this distribution. The terms
@ -144,22 +144,24 @@ check_PROGRAMS = 10-at-a-time$(EXEEXT) anyauthput$(EXEEXT) \
simple$(EXEEXT) simplepost$(EXEEXT) simplessl$(EXEEXT) \ simple$(EXEEXT) simplepost$(EXEEXT) simplessl$(EXEEXT) \
sendrecv$(EXEEXT) httpcustomheader$(EXEEXT) certinfo$(EXEEXT) \ sendrecv$(EXEEXT) httpcustomheader$(EXEEXT) certinfo$(EXEEXT) \
chkspeed$(EXEEXT) ftpgetinfo$(EXEEXT) ftp-wildcard$(EXEEXT) \ chkspeed$(EXEEXT) ftpgetinfo$(EXEEXT) ftp-wildcard$(EXEEXT) \
smtp-mail$(EXEEXT) smtp-multi$(EXEEXT) smtp-ssl$(EXEEXT) \ smtp-mail$(EXEEXT) smtp-mime$(EXEEXT) smtp-multi$(EXEEXT) \
smtp-tls$(EXEEXT) smtp-vrfy$(EXEEXT) smtp-expn$(EXEEXT) \ smtp-ssl$(EXEEXT) smtp-tls$(EXEEXT) smtp-vrfy$(EXEEXT) \
rtsp$(EXEEXT) externalsocket$(EXEEXT) resolve$(EXEEXT) \ smtp-expn$(EXEEXT) rtsp$(EXEEXT) externalsocket$(EXEEXT) \
progressfunc$(EXEEXT) pop3-retr$(EXEEXT) pop3-list$(EXEEXT) \ resolve$(EXEEXT) progressfunc$(EXEEXT) pop3-retr$(EXEEXT) \
pop3-uidl$(EXEEXT) pop3-dele$(EXEEXT) pop3-top$(EXEEXT) \ pop3-list$(EXEEXT) pop3-uidl$(EXEEXT) pop3-dele$(EXEEXT) \
pop3-stat$(EXEEXT) pop3-noop$(EXEEXT) pop3-ssl$(EXEEXT) \ pop3-top$(EXEEXT) pop3-stat$(EXEEXT) pop3-noop$(EXEEXT) \
pop3-tls$(EXEEXT) pop3-multi$(EXEEXT) imap-list$(EXEEXT) \ pop3-ssl$(EXEEXT) pop3-tls$(EXEEXT) pop3-multi$(EXEEXT) \
imap-lsub$(EXEEXT) imap-fetch$(EXEEXT) imap-store$(EXEEXT) \ imap-list$(EXEEXT) imap-lsub$(EXEEXT) imap-fetch$(EXEEXT) \
imap-append$(EXEEXT) imap-examine$(EXEEXT) \ imap-store$(EXEEXT) imap-append$(EXEEXT) imap-examine$(EXEEXT) \
imap-search$(EXEEXT) imap-create$(EXEEXT) imap-delete$(EXEEXT) \ imap-search$(EXEEXT) imap-create$(EXEEXT) imap-delete$(EXEEXT) \
imap-copy$(EXEEXT) imap-noop$(EXEEXT) imap-ssl$(EXEEXT) \ imap-copy$(EXEEXT) imap-noop$(EXEEXT) imap-ssl$(EXEEXT) \
imap-tls$(EXEEXT) imap-multi$(EXEEXT) url2file$(EXEEXT) \ imap-tls$(EXEEXT) imap-multi$(EXEEXT) url2file$(EXEEXT) \
sftpget$(EXEEXT) ftpsget$(EXEEXT) postinmemory$(EXEEXT) \ sftpget$(EXEEXT) ftpsget$(EXEEXT) postinmemory$(EXEEXT) \
http2-download$(EXEEXT) http2-upload$(EXEEXT) \ http2-download$(EXEEXT) http2-upload$(EXEEXT) \
http2-serverpush$(EXEEXT) getredirect$(EXEEXT) \ http2-serverpush$(EXEEXT) getredirect$(EXEEXT) \
ftpuploadfrommem$(EXEEXT) ftpuploadfrommem$(EXEEXT) ftpuploadresume$(EXEEXT) \
sslbackend$(EXEEXT) postit2-formadd$(EXEEXT) \
multi-formadd$(EXEEXT) shared-connection-cache$(EXEEXT)
subdir = docs/examples subdir = docs/examples
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/ax_code_coverage.m4 \ am__aclocal_m4_deps = $(top_srcdir)/m4/ax_code_coverage.m4 \
@ -184,8 +186,7 @@ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4) $(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
mkinstalldirs = $(install_sh) -d mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/lib/curl_config.h \ CONFIG_HEADER = $(top_builddir)/lib/curl_config.h
$(top_builddir)/include/curl/curlbuild.h
CONFIG_CLEAN_FILES = CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES = CONFIG_CLEAN_VPATH_FILES =
10_at_a_time_SOURCES = 10-at-a-time.c 10_at_a_time_SOURCES = 10-at-a-time.c
@ -302,6 +303,13 @@ ftpuploadfrommem_LDADD = $(LDADD)
@USE_EXPLICIT_LIB_DEPS_FALSE@ $(LIBDIR)/libcurl.la @USE_EXPLICIT_LIB_DEPS_FALSE@ $(LIBDIR)/libcurl.la
@USE_EXPLICIT_LIB_DEPS_TRUE@ftpuploadfrommem_DEPENDENCIES = \ @USE_EXPLICIT_LIB_DEPS_TRUE@ftpuploadfrommem_DEPENDENCIES = \
@USE_EXPLICIT_LIB_DEPS_TRUE@ $(LIBDIR)/libcurl.la @USE_EXPLICIT_LIB_DEPS_TRUE@ $(LIBDIR)/libcurl.la
ftpuploadresume_SOURCES = ftpuploadresume.c
ftpuploadresume_OBJECTS = ftpuploadresume.$(OBJEXT)
ftpuploadresume_LDADD = $(LDADD)
@USE_EXPLICIT_LIB_DEPS_FALSE@ftpuploadresume_DEPENDENCIES = \
@USE_EXPLICIT_LIB_DEPS_FALSE@ $(LIBDIR)/libcurl.la
@USE_EXPLICIT_LIB_DEPS_TRUE@ftpuploadresume_DEPENDENCIES = \
@USE_EXPLICIT_LIB_DEPS_TRUE@ $(LIBDIR)/libcurl.la
getinfo_SOURCES = getinfo.c getinfo_SOURCES = getinfo.c
getinfo_OBJECTS = getinfo.$(OBJEXT) getinfo_OBJECTS = getinfo.$(OBJEXT)
getinfo_LDADD = $(LDADD) getinfo_LDADD = $(LDADD)
@ -490,6 +498,13 @@ multi_double_LDADD = $(LDADD)
@USE_EXPLICIT_LIB_DEPS_FALSE@ $(LIBDIR)/libcurl.la @USE_EXPLICIT_LIB_DEPS_FALSE@ $(LIBDIR)/libcurl.la
@USE_EXPLICIT_LIB_DEPS_TRUE@multi_double_DEPENDENCIES = \ @USE_EXPLICIT_LIB_DEPS_TRUE@multi_double_DEPENDENCIES = \
@USE_EXPLICIT_LIB_DEPS_TRUE@ $(LIBDIR)/libcurl.la @USE_EXPLICIT_LIB_DEPS_TRUE@ $(LIBDIR)/libcurl.la
multi_formadd_SOURCES = multi-formadd.c
multi_formadd_OBJECTS = multi-formadd.$(OBJEXT)
multi_formadd_LDADD = $(LDADD)
@USE_EXPLICIT_LIB_DEPS_FALSE@multi_formadd_DEPENDENCIES = \
@USE_EXPLICIT_LIB_DEPS_FALSE@ $(LIBDIR)/libcurl.la
@USE_EXPLICIT_LIB_DEPS_TRUE@multi_formadd_DEPENDENCIES = \
@USE_EXPLICIT_LIB_DEPS_TRUE@ $(LIBDIR)/libcurl.la
multi_post_SOURCES = multi-post.c multi_post_SOURCES = multi-post.c
multi_post_OBJECTS = multi-post.$(OBJEXT) multi_post_OBJECTS = multi-post.$(OBJEXT)
multi_post_LDADD = $(LDADD) multi_post_LDADD = $(LDADD)
@ -602,6 +617,13 @@ postit2_LDADD = $(LDADD)
@USE_EXPLICIT_LIB_DEPS_FALSE@ $(LIBDIR)/libcurl.la @USE_EXPLICIT_LIB_DEPS_FALSE@ $(LIBDIR)/libcurl.la
@USE_EXPLICIT_LIB_DEPS_TRUE@postit2_DEPENDENCIES = \ @USE_EXPLICIT_LIB_DEPS_TRUE@postit2_DEPENDENCIES = \
@USE_EXPLICIT_LIB_DEPS_TRUE@ $(LIBDIR)/libcurl.la @USE_EXPLICIT_LIB_DEPS_TRUE@ $(LIBDIR)/libcurl.la
postit2_formadd_SOURCES = postit2-formadd.c
postit2_formadd_OBJECTS = postit2-formadd.$(OBJEXT)
postit2_formadd_LDADD = $(LDADD)
@USE_EXPLICIT_LIB_DEPS_FALSE@postit2_formadd_DEPENDENCIES = \
@USE_EXPLICIT_LIB_DEPS_FALSE@ $(LIBDIR)/libcurl.la
@USE_EXPLICIT_LIB_DEPS_TRUE@postit2_formadd_DEPENDENCIES = \
@USE_EXPLICIT_LIB_DEPS_TRUE@ $(LIBDIR)/libcurl.la
progressfunc_SOURCES = progressfunc.c progressfunc_SOURCES = progressfunc.c
progressfunc_OBJECTS = progressfunc.$(OBJEXT) progressfunc_OBJECTS = progressfunc.$(OBJEXT)
progressfunc_LDADD = $(LDADD) progressfunc_LDADD = $(LDADD)
@ -642,6 +664,13 @@ sftpget_LDADD = $(LDADD)
@USE_EXPLICIT_LIB_DEPS_FALSE@ $(LIBDIR)/libcurl.la @USE_EXPLICIT_LIB_DEPS_FALSE@ $(LIBDIR)/libcurl.la
@USE_EXPLICIT_LIB_DEPS_TRUE@sftpget_DEPENDENCIES = \ @USE_EXPLICIT_LIB_DEPS_TRUE@sftpget_DEPENDENCIES = \
@USE_EXPLICIT_LIB_DEPS_TRUE@ $(LIBDIR)/libcurl.la @USE_EXPLICIT_LIB_DEPS_TRUE@ $(LIBDIR)/libcurl.la
shared_connection_cache_SOURCES = shared-connection-cache.c
shared_connection_cache_OBJECTS = shared-connection-cache.$(OBJEXT)
shared_connection_cache_LDADD = $(LDADD)
@USE_EXPLICIT_LIB_DEPS_FALSE@shared_connection_cache_DEPENDENCIES = \
@USE_EXPLICIT_LIB_DEPS_FALSE@ $(LIBDIR)/libcurl.la
@USE_EXPLICIT_LIB_DEPS_TRUE@shared_connection_cache_DEPENDENCIES = \
@USE_EXPLICIT_LIB_DEPS_TRUE@ $(LIBDIR)/libcurl.la
simple_SOURCES = simple.c simple_SOURCES = simple.c
simple_OBJECTS = simple.$(OBJEXT) simple_OBJECTS = simple.$(OBJEXT)
simple_LDADD = $(LDADD) simple_LDADD = $(LDADD)
@ -677,6 +706,13 @@ smtp_mail_LDADD = $(LDADD)
@USE_EXPLICIT_LIB_DEPS_FALSE@ $(LIBDIR)/libcurl.la @USE_EXPLICIT_LIB_DEPS_FALSE@ $(LIBDIR)/libcurl.la
@USE_EXPLICIT_LIB_DEPS_TRUE@smtp_mail_DEPENDENCIES = \ @USE_EXPLICIT_LIB_DEPS_TRUE@smtp_mail_DEPENDENCIES = \
@USE_EXPLICIT_LIB_DEPS_TRUE@ $(LIBDIR)/libcurl.la @USE_EXPLICIT_LIB_DEPS_TRUE@ $(LIBDIR)/libcurl.la
smtp_mime_SOURCES = smtp-mime.c
smtp_mime_OBJECTS = smtp-mime.$(OBJEXT)
smtp_mime_LDADD = $(LDADD)
@USE_EXPLICIT_LIB_DEPS_FALSE@smtp_mime_DEPENDENCIES = \
@USE_EXPLICIT_LIB_DEPS_FALSE@ $(LIBDIR)/libcurl.la
@USE_EXPLICIT_LIB_DEPS_TRUE@smtp_mime_DEPENDENCIES = \
@USE_EXPLICIT_LIB_DEPS_TRUE@ $(LIBDIR)/libcurl.la
smtp_multi_SOURCES = smtp-multi.c smtp_multi_SOURCES = smtp-multi.c
smtp_multi_OBJECTS = smtp-multi.$(OBJEXT) smtp_multi_OBJECTS = smtp-multi.$(OBJEXT)
smtp_multi_LDADD = $(LDADD) smtp_multi_LDADD = $(LDADD)
@ -705,6 +741,13 @@ smtp_vrfy_LDADD = $(LDADD)
@USE_EXPLICIT_LIB_DEPS_FALSE@ $(LIBDIR)/libcurl.la @USE_EXPLICIT_LIB_DEPS_FALSE@ $(LIBDIR)/libcurl.la
@USE_EXPLICIT_LIB_DEPS_TRUE@smtp_vrfy_DEPENDENCIES = \ @USE_EXPLICIT_LIB_DEPS_TRUE@smtp_vrfy_DEPENDENCIES = \
@USE_EXPLICIT_LIB_DEPS_TRUE@ $(LIBDIR)/libcurl.la @USE_EXPLICIT_LIB_DEPS_TRUE@ $(LIBDIR)/libcurl.la
sslbackend_SOURCES = sslbackend.c
sslbackend_OBJECTS = sslbackend.$(OBJEXT)
sslbackend_LDADD = $(LDADD)
@USE_EXPLICIT_LIB_DEPS_FALSE@sslbackend_DEPENDENCIES = \
@USE_EXPLICIT_LIB_DEPS_FALSE@ $(LIBDIR)/libcurl.la
@USE_EXPLICIT_LIB_DEPS_TRUE@sslbackend_DEPENDENCIES = \
@USE_EXPLICIT_LIB_DEPS_TRUE@ $(LIBDIR)/libcurl.la
url2file_SOURCES = url2file.c url2file_SOURCES = url2file.c
url2file_OBJECTS = url2file.$(OBJEXT) url2file_OBJECTS = url2file.$(OBJEXT)
url2file_LDADD = $(LDADD) url2file_LDADD = $(LDADD)
@ -749,37 +792,41 @@ am__v_CCLD_1 =
SOURCES = 10-at-a-time.c anyauthput.c certinfo.c chkspeed.c \ SOURCES = 10-at-a-time.c anyauthput.c certinfo.c chkspeed.c \
cookie_interface.c debug.c externalsocket.c fileupload.c \ cookie_interface.c debug.c externalsocket.c fileupload.c \
fopen.c ftp-wildcard.c ftpget.c ftpgetinfo.c ftpgetresp.c \ fopen.c ftp-wildcard.c ftpget.c ftpgetinfo.c ftpgetresp.c \
ftpsget.c ftpupload.c ftpuploadfrommem.c getinfo.c \ ftpsget.c ftpupload.c ftpuploadfrommem.c ftpuploadresume.c \
getinmemory.c getredirect.c http-post.c http2-download.c \ getinfo.c getinmemory.c getredirect.c http-post.c \
http2-serverpush.c http2-upload.c httpcustomheader.c httpput.c \ http2-download.c http2-serverpush.c http2-upload.c \
https.c imap-append.c imap-copy.c imap-create.c imap-delete.c \ httpcustomheader.c httpput.c https.c imap-append.c imap-copy.c \
imap-examine.c imap-fetch.c imap-list.c imap-lsub.c \ imap-create.c imap-delete.c imap-examine.c imap-fetch.c \
imap-multi.c imap-noop.c imap-search.c imap-ssl.c imap-store.c \ imap-list.c imap-lsub.c imap-multi.c imap-noop.c imap-search.c \
imap-tls.c multi-app.c multi-debugcallback.c multi-double.c \ imap-ssl.c imap-store.c imap-tls.c multi-app.c \
multi-debugcallback.c multi-double.c multi-formadd.c \
multi-post.c multi-single.c persistant.c pop3-dele.c \ multi-post.c multi-single.c persistant.c pop3-dele.c \
pop3-list.c pop3-multi.c pop3-noop.c pop3-retr.c pop3-ssl.c \ pop3-list.c pop3-multi.c pop3-noop.c pop3-retr.c pop3-ssl.c \
pop3-stat.c pop3-tls.c pop3-top.c pop3-uidl.c post-callback.c \ pop3-stat.c pop3-tls.c pop3-top.c pop3-uidl.c post-callback.c \
postinmemory.c postit2.c progressfunc.c resolve.c rtsp.c \ postinmemory.c postit2.c postit2-formadd.c progressfunc.c \
sendrecv.c sepheaders.c sftpget.c simple.c simplepost.c \ resolve.c rtsp.c sendrecv.c sepheaders.c sftpget.c \
simplessl.c smtp-expn.c smtp-mail.c smtp-multi.c smtp-ssl.c \ shared-connection-cache.c simple.c simplepost.c simplessl.c \
smtp-tls.c smtp-vrfy.c url2file.c smtp-expn.c smtp-mail.c smtp-mime.c smtp-multi.c smtp-ssl.c \
smtp-tls.c smtp-vrfy.c sslbackend.c url2file.c
DIST_SOURCES = 10-at-a-time.c anyauthput.c certinfo.c chkspeed.c \ DIST_SOURCES = 10-at-a-time.c anyauthput.c certinfo.c chkspeed.c \
cookie_interface.c debug.c externalsocket.c fileupload.c \ cookie_interface.c debug.c externalsocket.c fileupload.c \
fopen.c ftp-wildcard.c ftpget.c ftpgetinfo.c ftpgetresp.c \ fopen.c ftp-wildcard.c ftpget.c ftpgetinfo.c ftpgetresp.c \
ftpsget.c ftpupload.c ftpuploadfrommem.c getinfo.c \ ftpsget.c ftpupload.c ftpuploadfrommem.c ftpuploadresume.c \
getinmemory.c getredirect.c http-post.c http2-download.c \ getinfo.c getinmemory.c getredirect.c http-post.c \
http2-serverpush.c http2-upload.c httpcustomheader.c httpput.c \ http2-download.c http2-serverpush.c http2-upload.c \
https.c imap-append.c imap-copy.c imap-create.c imap-delete.c \ httpcustomheader.c httpput.c https.c imap-append.c imap-copy.c \
imap-examine.c imap-fetch.c imap-list.c imap-lsub.c \ imap-create.c imap-delete.c imap-examine.c imap-fetch.c \
imap-multi.c imap-noop.c imap-search.c imap-ssl.c imap-store.c \ imap-list.c imap-lsub.c imap-multi.c imap-noop.c imap-search.c \
imap-tls.c multi-app.c multi-debugcallback.c multi-double.c \ imap-ssl.c imap-store.c imap-tls.c multi-app.c \
multi-debugcallback.c multi-double.c multi-formadd.c \
multi-post.c multi-single.c persistant.c pop3-dele.c \ multi-post.c multi-single.c persistant.c pop3-dele.c \
pop3-list.c pop3-multi.c pop3-noop.c pop3-retr.c pop3-ssl.c \ pop3-list.c pop3-multi.c pop3-noop.c pop3-retr.c pop3-ssl.c \
pop3-stat.c pop3-tls.c pop3-top.c pop3-uidl.c post-callback.c \ pop3-stat.c pop3-tls.c pop3-top.c pop3-uidl.c post-callback.c \
postinmemory.c postit2.c progressfunc.c resolve.c rtsp.c \ postinmemory.c postit2.c postit2-formadd.c progressfunc.c \
sendrecv.c sepheaders.c sftpget.c simple.c simplepost.c \ resolve.c rtsp.c sendrecv.c sepheaders.c sftpget.c \
simplessl.c smtp-expn.c smtp-mail.c smtp-multi.c smtp-ssl.c \ shared-connection-cache.c simple.c simplepost.c simplessl.c \
smtp-tls.c smtp-vrfy.c url2file.c smtp-expn.c smtp-mail.c smtp-mime.c smtp-multi.c smtp-ssl.c \
smtp-tls.c smtp-vrfy.c sslbackend.c url2file.c
am__can_run_installinfo = \ am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \ case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \ n|no|NO) false;; \
@ -822,8 +869,11 @@ CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@ CFLAGS = @CFLAGS@
CFLAG_CURL_SYMBOL_HIDING = @CFLAG_CURL_SYMBOL_HIDING@ CFLAG_CURL_SYMBOL_HIDING = @CFLAG_CURL_SYMBOL_HIDING@
CODE_COVERAGE_CFLAGS = @CODE_COVERAGE_CFLAGS@ CODE_COVERAGE_CFLAGS = @CODE_COVERAGE_CFLAGS@
CODE_COVERAGE_CPPFLAGS = @CODE_COVERAGE_CPPFLAGS@
CODE_COVERAGE_CXXFLAGS = @CODE_COVERAGE_CXXFLAGS@
CODE_COVERAGE_ENABLED = @CODE_COVERAGE_ENABLED@ CODE_COVERAGE_ENABLED = @CODE_COVERAGE_ENABLED@
CODE_COVERAGE_LDFLAGS = @CODE_COVERAGE_LDFLAGS@ CODE_COVERAGE_LDFLAGS = @CODE_COVERAGE_LDFLAGS@
CODE_COVERAGE_LIBS = @CODE_COVERAGE_LIBS@
CONFIGURE_OPTIONS = @CONFIGURE_OPTIONS@ CONFIGURE_OPTIONS = @CONFIGURE_OPTIONS@
CPP = @CPP@ CPP = @CPP@
CPPFLAGS = @CPPFLAGS@ CPPFLAGS = @CPPFLAGS@
@ -849,7 +899,9 @@ CURL_DISABLE_TFTP = @CURL_DISABLE_TFTP@
CURL_LT_SHLIB_VERSIONED_FLAVOUR = @CURL_LT_SHLIB_VERSIONED_FLAVOUR@ CURL_LT_SHLIB_VERSIONED_FLAVOUR = @CURL_LT_SHLIB_VERSIONED_FLAVOUR@
CURL_NETWORK_AND_TIME_LIBS = @CURL_NETWORK_AND_TIME_LIBS@ CURL_NETWORK_AND_TIME_LIBS = @CURL_NETWORK_AND_TIME_LIBS@
CURL_NETWORK_LIBS = @CURL_NETWORK_LIBS@ CURL_NETWORK_LIBS = @CURL_NETWORK_LIBS@
CURL_WITH_MULTI_SSL = @CURL_WITH_MULTI_SSL@
CYGPATH_W = @CYGPATH_W@ CYGPATH_W = @CYGPATH_W@
DEFAULT_SSL_BACKEND = @DEFAULT_SSL_BACKEND@
DEFS = @DEFS@ DEFS = @DEFS@
DEPDIR = @DEPDIR@ DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@ DLLTOOL = @DLLTOOL@
@ -866,6 +918,7 @@ FGREP = @FGREP@
GCOV = @GCOV@ GCOV = @GCOV@
GENHTML = @GENHTML@ GENHTML = @GENHTML@
GREP = @GREP@ GREP = @GREP@
HAVE_BROTLI = @HAVE_BROTLI@
HAVE_GNUTLS_SRP = @HAVE_GNUTLS_SRP@ HAVE_GNUTLS_SRP = @HAVE_GNUTLS_SRP@
HAVE_LDAP_SSL = @HAVE_LDAP_SSL@ HAVE_LDAP_SSL = @HAVE_LDAP_SSL@
HAVE_LIBZ = @HAVE_LIBZ@ HAVE_LIBZ = @HAVE_LIBZ@
@ -925,6 +978,7 @@ REQUIRE_LIB_DEPS = @REQUIRE_LIB_DEPS@
SED = @SED@ SED = @SED@
SET_MAKE = @SET_MAKE@ SET_MAKE = @SET_MAKE@
SHELL = @SHELL@ SHELL = @SHELL@
SSL_BACKENDS = @SSL_BACKENDS@
SSL_ENABLED = @SSL_ENABLED@ SSL_ENABLED = @SSL_ENABLED@
SSL_LIBS = @SSL_LIBS@ SSL_LIBS = @SSL_LIBS@
STRIP = @STRIP@ STRIP = @STRIP@
@ -937,6 +991,7 @@ USE_DARWINSSL = @USE_DARWINSSL@
USE_GNUTLS = @USE_GNUTLS@ USE_GNUTLS = @USE_GNUTLS@
USE_GNUTLS_NETTLE = @USE_GNUTLS_NETTLE@ USE_GNUTLS_NETTLE = @USE_GNUTLS_NETTLE@
USE_LIBRTMP = @USE_LIBRTMP@ USE_LIBRTMP = @USE_LIBRTMP@
USE_LIBSSH = @USE_LIBSSH@
USE_LIBSSH2 = @USE_LIBSSH2@ USE_LIBSSH2 = @USE_LIBSSH2@
USE_MBEDTLS = @USE_MBEDTLS@ USE_MBEDTLS = @USE_MBEDTLS@
USE_NGHTTP2 = @USE_NGHTTP2@ USE_NGHTTP2 = @USE_NGHTTP2@
@ -1015,13 +1070,10 @@ EXTRA_DIST = README Makefile.example Makefile.inc Makefile.m32 \
# being currently built and tested are searched before the library which # being currently built and tested are searched before the library which
# might possibly already be installed in the system. # might possibly already be installed in the system.
# #
# $(top_builddir)/include/curl for generated curlbuild.h included from curl.h
# $(top_builddir)/include for generated curlbuild.h inc. from lib/curl_setup.h
# $(top_srcdir)/include is for libcurl's external include files # $(top_srcdir)/include is for libcurl's external include files
# Avoid libcurl obsolete stuff # Avoid libcurl obsolete stuff
AM_CPPFLAGS = -I$(top_builddir)/include/curl -I$(top_builddir)/include \ AM_CPPFLAGS = -I$(top_srcdir)/include -DCURL_NO_OLDIES $(am__append_1)
-I$(top_srcdir)/include -DCURL_NO_OLDIES $(am__append_1)
LIBDIR = $(top_builddir)/lib LIBDIR = $(top_builddir)/lib
@USE_EXPLICIT_LIB_DEPS_FALSE@LDADD = $(LIBDIR)/libcurl.la @USE_EXPLICIT_LIB_DEPS_FALSE@LDADD = $(LIBDIR)/libcurl.la
@ -1030,11 +1082,12 @@ LIBDIR = $(top_builddir)/lib
# These examples require external dependencies that may not be commonly # These examples require external dependencies that may not be commonly
# available on POSIX systems, so don't bother attempting to compile them here. # available on POSIX systems, so don't bother attempting to compile them here.
COMPLICATED_EXAMPLES = curlgtk.c curlx.c htmltitle.cpp cacertinmem.c \ COMPLICATED_EXAMPLES = curlgtk.c curlx.c htmltitle.cpp cacertinmem.c \
ftpuploadresume.c ghiper.c hiperfifo.c htmltidy.c multithread.c \ ghiper.c hiperfifo.c htmltidy.c multithread.c opensslthreadlock.c \
opensslthreadlock.c sampleconv.c synctime.c threaded-ssl.c evhiperfifo.c \ sampleconv.c synctime.c threaded-ssl.c evhiperfifo.c \
smooth-gtk-thread.c version-check.pl href_extractor.c asiohiper.cpp \ smooth-gtk-thread.c version-check.pl href_extractor.c asiohiper.cpp \
multi-uv.c xmlstream.c usercertinmem.c sessioninfo.c multi-uv.c xmlstream.c usercertinmem.c sessioninfo.c \
threaded-shared-conn.c
all: all-am all: all-am
@ -1144,6 +1197,10 @@ ftpuploadfrommem$(EXEEXT): $(ftpuploadfrommem_OBJECTS) $(ftpuploadfrommem_DEPEND
@rm -f ftpuploadfrommem$(EXEEXT) @rm -f ftpuploadfrommem$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(ftpuploadfrommem_OBJECTS) $(ftpuploadfrommem_LDADD) $(LIBS) $(AM_V_CCLD)$(LINK) $(ftpuploadfrommem_OBJECTS) $(ftpuploadfrommem_LDADD) $(LIBS)
ftpuploadresume$(EXEEXT): $(ftpuploadresume_OBJECTS) $(ftpuploadresume_DEPENDENCIES) $(EXTRA_ftpuploadresume_DEPENDENCIES)
@rm -f ftpuploadresume$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(ftpuploadresume_OBJECTS) $(ftpuploadresume_LDADD) $(LIBS)
getinfo$(EXEEXT): $(getinfo_OBJECTS) $(getinfo_DEPENDENCIES) $(EXTRA_getinfo_DEPENDENCIES) getinfo$(EXEEXT): $(getinfo_OBJECTS) $(getinfo_DEPENDENCIES) $(EXTRA_getinfo_DEPENDENCIES)
@rm -f getinfo$(EXEEXT) @rm -f getinfo$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(getinfo_OBJECTS) $(getinfo_LDADD) $(LIBS) $(AM_V_CCLD)$(LINK) $(getinfo_OBJECTS) $(getinfo_LDADD) $(LIBS)
@ -1252,6 +1309,10 @@ multi-double$(EXEEXT): $(multi_double_OBJECTS) $(multi_double_DEPENDENCIES) $(EX
@rm -f multi-double$(EXEEXT) @rm -f multi-double$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(multi_double_OBJECTS) $(multi_double_LDADD) $(LIBS) $(AM_V_CCLD)$(LINK) $(multi_double_OBJECTS) $(multi_double_LDADD) $(LIBS)
multi-formadd$(EXEEXT): $(multi_formadd_OBJECTS) $(multi_formadd_DEPENDENCIES) $(EXTRA_multi_formadd_DEPENDENCIES)
@rm -f multi-formadd$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(multi_formadd_OBJECTS) $(multi_formadd_LDADD) $(LIBS)
multi-post$(EXEEXT): $(multi_post_OBJECTS) $(multi_post_DEPENDENCIES) $(EXTRA_multi_post_DEPENDENCIES) multi-post$(EXEEXT): $(multi_post_OBJECTS) $(multi_post_DEPENDENCIES) $(EXTRA_multi_post_DEPENDENCIES)
@rm -f multi-post$(EXEEXT) @rm -f multi-post$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(multi_post_OBJECTS) $(multi_post_LDADD) $(LIBS) $(AM_V_CCLD)$(LINK) $(multi_post_OBJECTS) $(multi_post_LDADD) $(LIBS)
@ -1316,6 +1377,10 @@ postit2$(EXEEXT): $(postit2_OBJECTS) $(postit2_DEPENDENCIES) $(EXTRA_postit2_DEP
@rm -f postit2$(EXEEXT) @rm -f postit2$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(postit2_OBJECTS) $(postit2_LDADD) $(LIBS) $(AM_V_CCLD)$(LINK) $(postit2_OBJECTS) $(postit2_LDADD) $(LIBS)
postit2-formadd$(EXEEXT): $(postit2_formadd_OBJECTS) $(postit2_formadd_DEPENDENCIES) $(EXTRA_postit2_formadd_DEPENDENCIES)
@rm -f postit2-formadd$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(postit2_formadd_OBJECTS) $(postit2_formadd_LDADD) $(LIBS)
progressfunc$(EXEEXT): $(progressfunc_OBJECTS) $(progressfunc_DEPENDENCIES) $(EXTRA_progressfunc_DEPENDENCIES) progressfunc$(EXEEXT): $(progressfunc_OBJECTS) $(progressfunc_DEPENDENCIES) $(EXTRA_progressfunc_DEPENDENCIES)
@rm -f progressfunc$(EXEEXT) @rm -f progressfunc$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(progressfunc_OBJECTS) $(progressfunc_LDADD) $(LIBS) $(AM_V_CCLD)$(LINK) $(progressfunc_OBJECTS) $(progressfunc_LDADD) $(LIBS)
@ -1340,6 +1405,10 @@ sftpget$(EXEEXT): $(sftpget_OBJECTS) $(sftpget_DEPENDENCIES) $(EXTRA_sftpget_DEP
@rm -f sftpget$(EXEEXT) @rm -f sftpget$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(sftpget_OBJECTS) $(sftpget_LDADD) $(LIBS) $(AM_V_CCLD)$(LINK) $(sftpget_OBJECTS) $(sftpget_LDADD) $(LIBS)
shared-connection-cache$(EXEEXT): $(shared_connection_cache_OBJECTS) $(shared_connection_cache_DEPENDENCIES) $(EXTRA_shared_connection_cache_DEPENDENCIES)
@rm -f shared-connection-cache$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(shared_connection_cache_OBJECTS) $(shared_connection_cache_LDADD) $(LIBS)
simple$(EXEEXT): $(simple_OBJECTS) $(simple_DEPENDENCIES) $(EXTRA_simple_DEPENDENCIES) simple$(EXEEXT): $(simple_OBJECTS) $(simple_DEPENDENCIES) $(EXTRA_simple_DEPENDENCIES)
@rm -f simple$(EXEEXT) @rm -f simple$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(simple_OBJECTS) $(simple_LDADD) $(LIBS) $(AM_V_CCLD)$(LINK) $(simple_OBJECTS) $(simple_LDADD) $(LIBS)
@ -1360,6 +1429,10 @@ smtp-mail$(EXEEXT): $(smtp_mail_OBJECTS) $(smtp_mail_DEPENDENCIES) $(EXTRA_smtp_
@rm -f smtp-mail$(EXEEXT) @rm -f smtp-mail$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(smtp_mail_OBJECTS) $(smtp_mail_LDADD) $(LIBS) $(AM_V_CCLD)$(LINK) $(smtp_mail_OBJECTS) $(smtp_mail_LDADD) $(LIBS)
smtp-mime$(EXEEXT): $(smtp_mime_OBJECTS) $(smtp_mime_DEPENDENCIES) $(EXTRA_smtp_mime_DEPENDENCIES)
@rm -f smtp-mime$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(smtp_mime_OBJECTS) $(smtp_mime_LDADD) $(LIBS)
smtp-multi$(EXEEXT): $(smtp_multi_OBJECTS) $(smtp_multi_DEPENDENCIES) $(EXTRA_smtp_multi_DEPENDENCIES) smtp-multi$(EXEEXT): $(smtp_multi_OBJECTS) $(smtp_multi_DEPENDENCIES) $(EXTRA_smtp_multi_DEPENDENCIES)
@rm -f smtp-multi$(EXEEXT) @rm -f smtp-multi$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(smtp_multi_OBJECTS) $(smtp_multi_LDADD) $(LIBS) $(AM_V_CCLD)$(LINK) $(smtp_multi_OBJECTS) $(smtp_multi_LDADD) $(LIBS)
@ -1376,6 +1449,10 @@ smtp-vrfy$(EXEEXT): $(smtp_vrfy_OBJECTS) $(smtp_vrfy_DEPENDENCIES) $(EXTRA_smtp_
@rm -f smtp-vrfy$(EXEEXT) @rm -f smtp-vrfy$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(smtp_vrfy_OBJECTS) $(smtp_vrfy_LDADD) $(LIBS) $(AM_V_CCLD)$(LINK) $(smtp_vrfy_OBJECTS) $(smtp_vrfy_LDADD) $(LIBS)
sslbackend$(EXEEXT): $(sslbackend_OBJECTS) $(sslbackend_DEPENDENCIES) $(EXTRA_sslbackend_DEPENDENCIES)
@rm -f sslbackend$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(sslbackend_OBJECTS) $(sslbackend_LDADD) $(LIBS)
url2file$(EXEEXT): $(url2file_OBJECTS) $(url2file_DEPENDENCIES) $(EXTRA_url2file_DEPENDENCIES) url2file$(EXEEXT): $(url2file_OBJECTS) $(url2file_DEPENDENCIES) $(EXTRA_url2file_DEPENDENCIES)
@rm -f url2file$(EXEEXT) @rm -f url2file$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(url2file_OBJECTS) $(url2file_LDADD) $(LIBS) $(AM_V_CCLD)$(LINK) $(url2file_OBJECTS) $(url2file_LDADD) $(LIBS)
@ -1402,6 +1479,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ftpsget.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ftpsget.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ftpupload.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ftpupload.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ftpuploadfrommem.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ftpuploadfrommem.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ftpuploadresume.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getinfo.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getinfo.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getinmemory.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getinmemory.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getredirect.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getredirect.Po@am__quote@
@ -1429,6 +1507,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/multi-app.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/multi-app.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/multi-debugcallback.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/multi-debugcallback.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/multi-double.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/multi-double.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/multi-formadd.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/multi-post.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/multi-post.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/multi-single.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/multi-single.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/persistant.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/persistant.Po@am__quote@
@ -1444,6 +1523,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pop3-uidl.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pop3-uidl.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/post-callback.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/post-callback.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/postinmemory.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/postinmemory.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/postit2-formadd.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/postit2.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/postit2.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/progressfunc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/progressfunc.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/resolve.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/resolve.Po@am__quote@
@ -1451,15 +1531,18 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sendrecv.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sendrecv.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sepheaders.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sepheaders.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sftpget.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sftpget.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/shared-connection-cache.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/simple.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/simple.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/simplepost.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/simplepost.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/simplessl.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/simplessl.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/smtp-expn.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/smtp-expn.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/smtp-mail.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/smtp-mail.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/smtp-mime.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/smtp-multi.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/smtp-multi.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/smtp-ssl.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/smtp-ssl.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/smtp-tls.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/smtp-tls.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/smtp-vrfy.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/smtp-vrfy.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sslbackend.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/url2file.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/url2file.Po@am__quote@
.c.o: .c.o:

View File

@ -26,18 +26,21 @@ check_PROGRAMS = 10-at-a-time anyauthput cookie_interface debug fileupload \
https multi-app multi-debugcallback multi-double multi-post multi-single \ https multi-app multi-debugcallback multi-double multi-post multi-single \
persistant post-callback postit2 sepheaders simple simplepost simplessl \ persistant post-callback postit2 sepheaders simple simplepost simplessl \
sendrecv httpcustomheader certinfo chkspeed ftpgetinfo ftp-wildcard \ sendrecv httpcustomheader certinfo chkspeed ftpgetinfo ftp-wildcard \
smtp-mail smtp-multi smtp-ssl smtp-tls smtp-vrfy smtp-expn rtsp \ smtp-mail smtp-mime smtp-multi smtp-ssl smtp-tls smtp-vrfy smtp-expn \
externalsocket resolve progressfunc pop3-retr pop3-list pop3-uidl \ rtsp externalsocket resolve progressfunc pop3-retr pop3-list pop3-uidl \
pop3-dele pop3-top pop3-stat pop3-noop pop3-ssl pop3-tls pop3-multi \ pop3-dele pop3-top pop3-stat pop3-noop pop3-ssl pop3-tls pop3-multi \
imap-list imap-lsub imap-fetch imap-store imap-append imap-examine \ imap-list imap-lsub imap-fetch imap-store imap-append imap-examine \
imap-search imap-create imap-delete imap-copy imap-noop imap-ssl \ imap-search imap-create imap-delete imap-copy imap-noop imap-ssl \
imap-tls imap-multi url2file sftpget ftpsget postinmemory http2-download \ imap-tls imap-multi url2file sftpget ftpsget postinmemory http2-download \
http2-upload http2-serverpush getredirect ftpuploadfrommem http2-upload http2-serverpush getredirect ftpuploadfrommem \
ftpuploadresume sslbackend postit2-formadd multi-formadd \
shared-connection-cache
# These examples require external dependencies that may not be commonly # These examples require external dependencies that may not be commonly
# available on POSIX systems, so don't bother attempting to compile them here. # available on POSIX systems, so don't bother attempting to compile them here.
COMPLICATED_EXAMPLES = curlgtk.c curlx.c htmltitle.cpp cacertinmem.c \ COMPLICATED_EXAMPLES = curlgtk.c curlx.c htmltitle.cpp cacertinmem.c \
ftpuploadresume.c ghiper.c hiperfifo.c htmltidy.c multithread.c \ ghiper.c hiperfifo.c htmltidy.c multithread.c opensslthreadlock.c \
opensslthreadlock.c sampleconv.c synctime.c threaded-ssl.c evhiperfifo.c \ sampleconv.c synctime.c threaded-ssl.c evhiperfifo.c \
smooth-gtk-thread.c version-check.pl href_extractor.c asiohiper.cpp \ smooth-gtk-thread.c version-check.pl href_extractor.c asiohiper.cpp \
multi-uv.c xmlstream.c usercertinmem.c sessioninfo.c multi-uv.c xmlstream.c usercertinmem.c sessioninfo.c \
threaded-shared-conn.c

View File

@ -84,7 +84,7 @@ endif
endif endif
CC = $(CROSSPREFIX)gcc CC = $(CROSSPREFIX)gcc
CFLAGS = -g -O2 -Wall CFLAGS = -g -O2 -Wall -W
CFLAGS += -fno-strict-aliasing CFLAGS += -fno-strict-aliasing
ifeq ($(ARCH),w64) ifeq ($(ARCH),w64)
CFLAGS += -m64 -D_AMD64_ CFLAGS += -m64 -D_AMD64_

View File

@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___ * | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____| * \___|\___/|_| \_\_____|
* *
* Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al. * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, et al.
* *
* This software is licensed as described in the file COPYING, which * This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms * you should have received as part of this distribution. The terms
@ -106,7 +106,7 @@ int main(int argc, char **argv)
if(argc < 3) if(argc < 3)
return 1; return 1;
file= argv[1]; file = argv[1];
url = argv[2]; url = argv[2];
/* get the file size of the local file */ /* get the file size of the local file */

View File

@ -24,85 +24,103 @@
* </DESC> * </DESC>
*/ */
#include <openssl/err.h>
#include <openssl/ssl.h> #include <openssl/ssl.h>
#include <curl/curl.h> #include <curl/curl.h>
#include <stdio.h> #include <stdio.h>
size_t writefunction(void *ptr, size_t size, size_t nmemb, void *stream) size_t writefunction(void *ptr, size_t size, size_t nmemb, void *stream)
{ {
fwrite(ptr, size, nmemb, stream); fwrite(ptr, size, nmemb, (FILE *)stream);
return (nmemb*size); return (nmemb*size);
} }
static CURLcode sslctx_function(CURL *curl, void *sslctx, void *parm) static CURLcode sslctx_function(CURL *curl, void *sslctx, void *parm)
{ {
X509_STORE *store; CURLcode rv = CURLE_ABORTED_BY_CALLBACK;
X509 *cert=NULL; X509_STORE *store = NULL;
BIO *bio; X509 *cert = NULL;
char *mypem = /* www.cacert.org */ BIO *bio = NULL;
"-----BEGIN CERTIFICATE-----\n"\ char *mypem =
"MIIHPTCCBSWgAwIBAgIBADANBgkqhkiG9w0BAQQFADB5MRAwDgYDVQQKEwdSb290\n"\ /* CA for example.com. CN = DigiCert High Assurance EV Root CA */
"IENBMR4wHAYDVQQLExVodHRwOi8vd3d3LmNhY2VydC5vcmcxIjAgBgNVBAMTGUNB\n"\ "-----BEGIN CERTIFICATE-----\n"
"IENlcnQgU2lnbmluZyBBdXRob3JpdHkxITAfBgkqhkiG9w0BCQEWEnN1cHBvcnRA\n"\ "MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBs\n"
"Y2FjZXJ0Lm9yZzAeFw0wMzAzMzAxMjI5NDlaFw0zMzAzMjkxMjI5NDlaMHkxEDAO\n"\ "MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3\n"
"BgNVBAoTB1Jvb3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9yZzEi\n"\ "d3cuZGlnaWNlcnQuY29tMSswKQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5j\n"
"MCAGA1UEAxMZQ0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3DQEJ\n"\ "ZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAwMFoXDTMxMTExMDAwMDAwMFowbDEL\n"
"ARYSc3VwcG9ydEBjYWNlcnQub3JnMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC\n"\ "MAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3\n"
"CgKCAgEAziLA4kZ97DYoB1CW8qAzQIxL8TtmPzHlawI229Z89vGIj053NgVBlfkJ\n"\ "LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFuY2Ug\n"
"8BLPRoZzYLdufujAWGSuzbCtRRcMY/pnCujW0r8+55jE8Ez64AO7NV1sId6eINm6\n"\ "RVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm\n"
"zWYyN3L69wj1x81YyY7nDl7qPv4coRQKFWyGhFtkZip6qUtTefWIonvuLwphK42y\n"\ "+9S75S0tMqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTW\n"
"fk1WpRPs6tqSnqxEQR5YYGUFZvjARL3LlPdCfgv3ZWiYUQXw8wWRBB0bF4LsyFe7\n"\ "PNt0OKRKzE0lgvdKpVMSOO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEM\n"
"w2t6iPGwcswlWyCR7BYCEo8y6RcYSNDHBS4CMEK4JZwFaz+qOqfrU0j36NK2B5jc\n"\ "xChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFB\n"
"G8Y0f3/JHIJ6BVgrCFvzOKKrF11myZjXnhCLotLddJr3cQxyYN/Nb5gznZY0dj4k\n"\ "Ik5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQNAQTXKFx01p8VdteZOE3\n"
"epKwDpUeb+agRThHqtdB7Uq3EvbXG4OKDy7YCbZZ16oE/9KTfWgu3YtLq1i6L43q\n"\ "hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUeh10aUAsg\n"
"laegw1SJpfvbi1EinbLDvhG+LJGGi5Z4rSDTii8aP8bQUWWHIbEZAWV/RRyH9XzQ\n"\ "EsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQF\n"
"QUxPKZgh/TMfdQwEUfoZd9vUFBzugcMd9Zi3aQaRIt0AUMyBMawSB3s42mhb5ivU\n"\ "MAMBAf8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaA\n"
"fslfrejrckzzAeVLIL+aplfKkQABi6F1ITe1Yw1nPkZPcCBnzsXWWdsC4PDSy826\n"\ "FLE+w2kD+L9HAdSYJhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3Nec\n"
"YreQQejdIOQpvGQpQsgi3Hia/0PsmBsJUUtaWsJx8cTLc6nloQsCAwEAAaOCAc4w\n"\ "nzyIZgYIVyHbIUf4KmeqvxgydkAQV8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6z\n"
"ggHKMB0GA1UdDgQWBBQWtTIb1Mfz4OaO873SsDrusjkY0TCBowYDVR0jBIGbMIGY\n"\ "eM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFpmyPInngiK3BD41VHMWEZ71jF\n"
"gBQWtTIb1Mfz4OaO873SsDrusjkY0aF9pHsweTEQMA4GA1UEChMHUm9vdCBDQTEe\n"\ "hS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkKmNEVX58Svnw2\n"
"MBwGA1UECxMVaHR0cDovL3d3dy5jYWNlcnQub3JnMSIwIAYDVQQDExlDQSBDZXJ0\n"\ "Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe\n"
"IFNpZ25pbmcgQXV0aG9yaXR5MSEwHwYJKoZIhvcNAQkBFhJzdXBwb3J0QGNhY2Vy\n"\ "vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep\n"
"dC5vcmeCAQAwDwYDVR0TAQH/BAUwAwEB/zAyBgNVHR8EKzApMCegJaAjhiFodHRw\n"\ "+OkuE6N36B9K\n"
"czovL3d3dy5jYWNlcnQub3JnL3Jldm9rZS5jcmwwMAYJYIZIAYb4QgEEBCMWIWh0\n"\
"dHBzOi8vd3d3LmNhY2VydC5vcmcvcmV2b2tlLmNybDA0BglghkgBhvhCAQgEJxYl\n"\
"aHR0cDovL3d3dy5jYWNlcnQub3JnL2luZGV4LnBocD9pZD0xMDBWBglghkgBhvhC\n"\
"AQ0ESRZHVG8gZ2V0IHlvdXIgb3duIGNlcnRpZmljYXRlIGZvciBGUkVFIGhlYWQg\n"\
"b3ZlciB0byBodHRwOi8vd3d3LmNhY2VydC5vcmcwDQYJKoZIhvcNAQEEBQADggIB\n"\
"ACjH7pyCArpcgBLKNQodgW+JapnM8mgPf6fhjViVPr3yBsOQWqy1YPaZQwGjiHCc\n"\
"nWKdpIevZ1gNMDY75q1I08t0AoZxPuIrA2jxNGJARjtT6ij0rPtmlVOKTV39O9lg\n"\
"18p5aTuxZZKmxoGCXJzN600BiqXfEVWqFcofN8CCmHBh22p8lqOOLlQ+TyGpkO/c\n"\
"gr/c6EWtTZBzCDyUZbAEmXZ/4rzCahWqlwQ3JNgelE5tDlG+1sSPypZt90Pf6DBl\n"\
"Jzt7u0NDY8RD97LsaMzhGY4i+5jhe1o+ATc7iwiwovOVThrLm82asduycPAtStvY\n"\
"sONvRUgzEv/+PDIqVPfE94rwiCPCR/5kenHA0R6mY7AHfqQv0wGP3J8rtsYIqQ+T\n"\
"SCX8Ev2fQtzzxD72V7DX3WnRBnc0CkvSyqD/HMaMyRa+xMwyN2hzXwj7UfdJUzYF\n"\
"CpUCTPJ5GhD22Dp1nPMd8aINcGeGG7MW9S/lpOt5hvk9C8JzC6WZrG/8Z7jlLwum\n"\
"GCSNe9FINSkYQKyTYOGWhlC0elnYjyELn8+CkcY7v2vcB5G5l1YjqrZslMZIBjzk\n"\
"zk6q5PYvCdxTby78dOs6Y5nCpqyJvKeyRKANihDjbPIky/qbn3BHLt4Ui9SyIAmW\n"\
"omTxJBzcoTWcFbLUvFUufQb1nA5V9FrWk9p2rSVzTMVD\n"\
"-----END CERTIFICATE-----\n"; "-----END CERTIFICATE-----\n";
/* clear the current thread's OpenSSL error queue */
ERR_clear_error();
/* get a BIO */ /* get a BIO */
bio=BIO_new_mem_buf(mypem, -1); bio = BIO_new_mem_buf(mypem, -1);
if(!bio)
goto err;
/* use it to read the PEM formatted certificate from memory into an X509 /* use it to read the PEM formatted certificate from memory into an X509
* structure that SSL can use * structure that SSL can use
*/ */
PEM_read_bio_X509(bio, &cert, 0, NULL); if(!PEM_read_bio_X509(bio, &cert, 0, NULL))
if(cert == NULL) goto err;
printf("PEM_read_bio_X509 failed...\n");
/* get a pointer to the X509 certificate store (which may be empty!) */ /* get a pointer to the X509 certificate store (which may be empty!) */
store=SSL_CTX_get_cert_store((SSL_CTX *)sslctx); store = SSL_CTX_get_cert_store((SSL_CTX *)sslctx);
if(!store)
goto err;
/* add our certificate to this store */ /* add our certificate to this store */
if(X509_STORE_add_cert(store, cert)==0) if(!X509_STORE_add_cert(store, cert)) {
printf("error adding certificate\n"); unsigned long error = ERR_peek_last_error();
/* Ignore error X509_R_CERT_ALREADY_IN_HASH_TABLE which means the
* certificate is already in the store. That could happen if
* libcurl already loaded the certificate from a ca cert bundle
* set at libcurl build-time or runtime.
*/
if(ERR_GET_LIB(error) != ERR_LIB_X509 ||
ERR_GET_REASON(error) != X509_R_CERT_ALREADY_IN_HASH_TABLE)
goto err;
ERR_clear_error();
}
rv = CURLE_OK;
err:
if(rv != CURLE_OK) {
char errbuf[256];
unsigned long error = ERR_peek_last_error();
fprintf(stderr, "error adding certificate\n");
if(error) {
ERR_error_string_n(error, errbuf, sizeof errbuf);
fprintf(stderr, "%s\n", errbuf);
}
}
/* decrease reference counts */
X509_free(cert); X509_free(cert);
BIO_free(bio); BIO_free(bio);
ERR_clear_error();
/* all set to go */ return rv;
return CURLE_OK;
} }
int main(void) int main(void)
@ -110,35 +128,54 @@ int main(void)
CURL *ch; CURL *ch;
CURLcode rv; CURLcode rv;
rv=curl_global_init(CURL_GLOBAL_ALL); rv = curl_global_init(CURL_GLOBAL_ALL);
ch=curl_easy_init(); ch = curl_easy_init();
rv=curl_easy_setopt(ch, CURLOPT_VERBOSE, 0L); rv = curl_easy_setopt(ch, CURLOPT_VERBOSE, 0L);
rv=curl_easy_setopt(ch, CURLOPT_HEADER, 0L); rv = curl_easy_setopt(ch, CURLOPT_HEADER, 0L);
rv=curl_easy_setopt(ch, CURLOPT_NOPROGRESS, 1L); rv = curl_easy_setopt(ch, CURLOPT_NOPROGRESS, 1L);
rv=curl_easy_setopt(ch, CURLOPT_NOSIGNAL, 1L); rv = curl_easy_setopt(ch, CURLOPT_NOSIGNAL, 1L);
rv=curl_easy_setopt(ch, CURLOPT_WRITEFUNCTION, *writefunction); rv = curl_easy_setopt(ch, CURLOPT_WRITEFUNCTION, *writefunction);
rv=curl_easy_setopt(ch, CURLOPT_WRITEDATA, stdout); rv = curl_easy_setopt(ch, CURLOPT_WRITEDATA, stdout);
rv=curl_easy_setopt(ch, CURLOPT_HEADERFUNCTION, *writefunction); rv = curl_easy_setopt(ch, CURLOPT_HEADERFUNCTION, *writefunction);
rv=curl_easy_setopt(ch, CURLOPT_HEADERDATA, stderr); rv = curl_easy_setopt(ch, CURLOPT_HEADERDATA, stderr);
rv=curl_easy_setopt(ch, CURLOPT_SSLCERTTYPE, "PEM"); rv = curl_easy_setopt(ch, CURLOPT_SSLCERTTYPE, "PEM");
rv=curl_easy_setopt(ch, CURLOPT_SSL_VERIFYPEER, 1L); rv = curl_easy_setopt(ch, CURLOPT_SSL_VERIFYPEER, 1L);
rv=curl_easy_setopt(ch, CURLOPT_URL, "https://www.example.com/"); rv = curl_easy_setopt(ch, CURLOPT_URL, "https://www.example.com/");
/* first try: retrieve page without cacerts' certificate -> will fail /* turn off the default CA locations (optional)
* otherwise libcurl will load CA certificates from the locations that
* were detected/specified at build-time
*/ */
rv=curl_easy_perform(ch); rv = curl_easy_setopt(ch, CURLOPT_CAINFO, NULL);
if(rv==CURLE_OK) rv = curl_easy_setopt(ch, CURLOPT_CAPATH, NULL);
/* first try: retrieve page without ca certificates -> should fail
* unless libcurl was built --with-ca-fallback enabled at build-time
*/
rv = curl_easy_perform(ch);
if(rv == CURLE_OK)
printf("*** transfer succeeded ***\n"); printf("*** transfer succeeded ***\n");
else else
printf("*** transfer failed ***\n"); printf("*** transfer failed ***\n");
/* use a fresh connection (optional)
* this option seriously impacts performance of multiple transfers but
* it is necessary order to demonstrate this example. recall that the
* ssl ctx callback is only called _before_ an SSL connection is
* established, therefore it will not affect existing verified SSL
* connections already in the connection cache associated with this
* handle. normally you would set the ssl ctx function before making
* any transfers, and not use this option.
*/
rv = curl_easy_setopt(ch, CURLOPT_FRESH_CONNECT, 1L);
/* second try: retrieve page using cacerts' certificate -> will succeed /* second try: retrieve page using cacerts' certificate -> will succeed
* load the certificate by installing a function doing the necessary * load the certificate by installing a function doing the necessary
* "modifications" to the SSL CONTEXT just before link init * "modifications" to the SSL CONTEXT just before link init
*/ */
rv=curl_easy_setopt(ch, CURLOPT_SSL_CTX_FUNCTION, *sslctx_function); rv = curl_easy_setopt(ch, CURLOPT_SSL_CTX_FUNCTION, *sslctx_function);
rv=curl_easy_perform(ch); rv = curl_easy_perform(ch);
if(rv==CURLE_OK) if(rv == CURLE_OK)
printf("*** transfer succeeded ***\n"); printf("*** transfer succeeded ***\n");
else else
printf("*** transfer failed ***\n"); printf("*** transfer failed ***\n");

View File

@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___ * | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____| * \___|\___/|_| \_\_____|
* *
* Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al. * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, et al.
* *
* This software is licensed as described in the file COPYING, which * This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms * you should have received as part of this distribution. The terms
@ -93,7 +93,7 @@ int main(int argc, char *argv[])
prttime = 1; prttime = 1;
} }
else if(strncasecmp(*argv, "-M=", 3) == 0) { else if(strncasecmp(*argv, "-M=", 3) == 0) {
long m = strtol((*argv)+3, NULL, 10); long m = strtol((*argv) + 3, NULL, 10);
switch(m) { switch(m) {
case 1: case 1:
url = URL_1M; url = URL_1M;

View File

@ -195,7 +195,8 @@ static int ssl_app_verify_callback(X509_STORE_CTX *ctx, void *arg)
if(p->verbose > 2) if(p->verbose > 2)
BIO_printf(p->errorbio, "entering ssl_app_verify_callback\n"); BIO_printf(p->errorbio, "entering ssl_app_verify_callback\n");
if((ok= X509_verify_cert(ctx)) && ctx->cert) { ok = X509_verify_cert(ctx);
if(ok && ctx->cert) {
unsigned char *accessinfo; unsigned char *accessinfo;
if(p->verbose > 1) if(p->verbose > 1)
X509_print_ex(p->errorbio, ctx->cert, 0, 0); X509_print_ex(p->errorbio, ctx->cert, 0, 0);
@ -268,16 +269,16 @@ static CURLcode sslctxfun(CURL *curl, void *sslctx, void *parm)
int main(int argc, char **argv) int main(int argc, char **argv)
{ {
BIO* in=NULL; BIO* in = NULL;
BIO* out=NULL; BIO* out = NULL;
char *outfile = NULL; char *outfile = NULL;
char *infile = NULL; char *infile = NULL;
int tabLength=100; int tabLength = 100;
char *binaryptr; char *binaryptr;
char *mimetype; char *mimetype;
char *mimetypeaccept=NULL; char *mimetypeaccept = NULL;
char *contenttype; char *contenttype;
const char **pp; const char **pp;
unsigned char *hostporturl = NULL; unsigned char *hostporturl = NULL;
@ -288,8 +289,8 @@ int main(int argc, char **argv)
char *response; char *response;
CURLcode res; CURLcode res;
struct curl_slist *headers=NULL; struct curl_slist *headers = NULL;
int badarg=0; int badarg = 0;
binaryptr = malloc(tabLength); binaryptr = malloc(tabLength);
@ -307,75 +308,75 @@ int main(int argc, char **argv)
while(*args && *args[0] == '-') { while(*args && *args[0] == '-') {
if(!strcmp (*args, "-in")) { if(!strcmp (*args, "-in")) {
if(args[1]) { if(args[1]) {
infile=*(++args); infile = *(++args);
} }
else else
badarg=1; badarg = 1;
} }
else if(!strcmp (*args, "-out")) { else if(!strcmp (*args, "-out")) {
if(args[1]) { if(args[1]) {
outfile=*(++args); outfile = *(++args);
} }
else else
badarg=1; badarg = 1;
} }
else if(!strcmp (*args, "-p12")) { else if(!strcmp (*args, "-p12")) {
if(args[1]) { if(args[1]) {
p.p12file = *(++args); p.p12file = *(++args);
} }
else else
badarg=1; badarg = 1;
} }
else if(strcmp(*args, "-envpass") == 0) { else if(strcmp(*args, "-envpass") == 0) {
if(args[1]) { if(args[1]) {
p.pst = getenv(*(++args)); p.pst = getenv(*(++args));
} }
else else
badarg=1; badarg = 1;
} }
else if(strcmp(*args, "-connect") == 0) { else if(strcmp(*args, "-connect") == 0) {
if(args[1]) { if(args[1]) {
hostporturl = *(++args); hostporturl = *(++args);
} }
else else
badarg=1; badarg = 1;
} }
else if(strcmp(*args, "-mimetype") == 0) { else if(strcmp(*args, "-mimetype") == 0) {
if(args[1]) { if(args[1]) {
mimetype = *(++args); mimetype = *(++args);
} }
else else
badarg=1; badarg = 1;
} }
else if(strcmp(*args, "-acceptmime") == 0) { else if(strcmp(*args, "-acceptmime") == 0) {
if(args[1]) { if(args[1]) {
mimetypeaccept = *(++args); mimetypeaccept = *(++args);
} }
else else
badarg=1; badarg = 1;
} }
else if(strcmp(*args, "-accesstype") == 0) { else if(strcmp(*args, "-accesstype") == 0) {
if(args[1]) { if(args[1]) {
p.accesstype = OBJ_obj2nid(OBJ_txt2obj(*++args, 0)); p.accesstype = OBJ_obj2nid(OBJ_txt2obj(*++args, 0));
if(p.accesstype == 0) if(p.accesstype == 0)
badarg=1; badarg = 1;
} }
else else
badarg=1; badarg = 1;
} }
else if(strcmp(*args, "-verbose") == 0) { else if(strcmp(*args, "-verbose") == 0) {
p.verbose++; p.verbose++;
} }
else else
badarg=1; badarg = 1;
args++; args++;
} }
if(mimetype==NULL || mimetypeaccept == NULL) if(mimetype == NULL || mimetypeaccept == NULL)
badarg = 1; badarg = 1;
if(badarg) { if(badarg) {
for(pp=curlx_usage; (*pp != NULL); pp++) for(pp = curlx_usage; (*pp != NULL); pp++)
BIO_printf(p.errorbio, "%s\n", *pp); BIO_printf(p.errorbio, "%s\n", *pp);
BIO_printf(p.errorbio, "\n"); BIO_printf(p.errorbio, "\n");
goto err; goto err;
@ -383,7 +384,8 @@ int main(int argc, char **argv)
/* set input */ /* set input */
if((in=BIO_new(BIO_s_file())) == NULL) { in = BIO_new(BIO_s_file());
if(in == NULL) {
BIO_printf(p.errorbio, "Error setting input bio\n"); BIO_printf(p.errorbio, "Error setting input bio\n");
goto err; goto err;
} }
@ -397,7 +399,8 @@ int main(int argc, char **argv)
/* set output */ /* set output */
if((out=BIO_new(BIO_s_file())) == NULL) { out = BIO_new(BIO_s_file());
if(out == NULL) {
BIO_printf(p.errorbio, "Error setting output bio.\n"); BIO_printf(p.errorbio, "Error setting output bio.\n");
goto err; goto err;
} }
@ -429,7 +432,7 @@ int main(int argc, char **argv)
goto err; goto err;
} }
p.ca= NULL; p.ca = NULL;
if(!(PKCS12_parse (p.p12, p.pst, &(p.pkey), &(p.usercert), &(p.ca) ) )) { if(!(PKCS12_parse (p.p12, p.pst, &(p.pkey), &(p.usercert), &(p.ca) ) )) {
BIO_printf(p.errorbio, "Invalid P12 structure in %s\n", p.p12file); BIO_printf(p.errorbio, "Invalid P12 structure in %s\n", p.p12file);
goto err; goto err;
@ -454,10 +457,10 @@ int main(int argc, char **argv)
given access type */ given access type */
serverurl = my_get_ext(p.usercert, p.accesstype, NID_info_access); serverurl = my_get_ext(p.usercert, p.accesstype, NID_info_access);
if(!serverurl) { if(!serverurl) {
int j=0; int j = 0;
BIO_printf(p.errorbio, "no service URL in user cert " BIO_printf(p.errorbio, "no service URL in user cert "
"cherching in others certificats\n"); "cherching in others certificats\n");
for(j=0; j<sk_X509_num(p.ca); j++) { for(j = 0; j<sk_X509_num(p.ca); j++) {
serverurl = my_get_ext(sk_X509_value(p.ca, j), p.accesstype, serverurl = my_get_ext(sk_X509_value(p.ca, j), p.accesstype,
NID_info_access); NID_info_access);
if(serverurl) if(serverurl)
@ -489,8 +492,8 @@ int main(int argc, char **argv)
/* pass our list of custom made headers */ /* pass our list of custom made headers */
contenttype = malloc(15+strlen(mimetype)); contenttype = malloc(15 + strlen(mimetype));
snprintf(contenttype, 15+strlen(mimetype), "Content-type: %s", mimetype); snprintf(contenttype, 15 + strlen(mimetype), "Content-type: %s", mimetype);
headers = curl_slist_append(headers, contenttype); headers = curl_slist_append(headers, contenttype);
curl_easy_setopt(p.curl, CURLOPT_HTTPHEADER, headers); curl_easy_setopt(p.curl, CURLOPT_HTTPHEADER, headers);
@ -512,12 +515,12 @@ int main(int argc, char **argv)
curl_easy_setopt(p.curl, CURLOPT_SSL_CTX_DATA, &p); curl_easy_setopt(p.curl, CURLOPT_SSL_CTX_DATA, &p);
{ {
int lu; int i=0; int lu; int i = 0;
while((lu = BIO_read(in, &binaryptr[i], tabLength-i)) >0) { while((lu = BIO_read(in, &binaryptr[i], tabLength-i)) >0) {
i+=lu; i += lu;
if(i== tabLength) { if(i == tabLength) {
tabLength+=100; tabLength += 100;
binaryptr=realloc(binaryptr, tabLength); /* should be more careful */ binaryptr = realloc(binaryptr, tabLength); /* should be more careful */
} }
} }
tabLength = i; tabLength = i;
@ -533,8 +536,8 @@ int main(int argc, char **argv)
BIO_printf(p.errorbio, "%d %s %d\n", __LINE__, "curl_easy_perform", BIO_printf(p.errorbio, "%d %s %d\n", __LINE__, "curl_easy_perform",
res = curl_easy_perform(p.curl)); res = curl_easy_perform(p.curl));
{ {
int result =curl_easy_getinfo(p.curl, CURLINFO_CONTENT_TYPE, &response); int result = curl_easy_getinfo(p.curl, CURLINFO_CONTENT_TYPE, &response);
if(mimetypeaccept && p.verbose) if(mimetypeaccept && p.verbose) {
if(!strcmp(mimetypeaccept, response)) if(!strcmp(mimetypeaccept, response))
BIO_printf(p.errorbio, "the response has a correct mimetype : %s\n", BIO_printf(p.errorbio, "the response has a correct mimetype : %s\n",
response); response);
@ -542,6 +545,7 @@ int main(int argc, char **argv)
BIO_printf(p.errorbio, "the response doesn\'t have an acceptable " BIO_printf(p.errorbio, "the response doesn\'t have an acceptable "
"mime type, it is %s instead of %s\n", "mime type, it is %s instead of %s\n",
response, mimetypeaccept); response, mimetypeaccept);
}
} }
/*** code d'erreur si accept mime ***, egalement code return HTTP != 200 ***/ /*** code d'erreur si accept mime ***, egalement code return HTTP != 200 ***/

View File

@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___ * | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____| * \___|\___/|_| \_\_____|
* *
* Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al. * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, et al.
* *
* This software is licensed as described in the file COPYING, which * This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms * you should have received as part of this distribution. The terms
@ -38,7 +38,7 @@ void dump(const char *text,
size_t i; size_t i;
size_t c; size_t c;
unsigned int width=0x10; unsigned int width = 0x10;
if(nohex) if(nohex)
/* without the hex output, we can fit more on screen */ /* without the hex output, we can fit more on screen */
@ -47,30 +47,32 @@ void dump(const char *text,
fprintf(stream, "%s, %10.10ld bytes (0x%8.8lx)\n", fprintf(stream, "%s, %10.10ld bytes (0x%8.8lx)\n",
text, (long)size, (long)size); text, (long)size, (long)size);
for(i=0; i<size; i+= width) { for(i = 0; i<size; i += width) {
fprintf(stream, "%4.4lx: ", (long)i); fprintf(stream, "%4.4lx: ", (long)i);
if(!nohex) { if(!nohex) {
/* hex not disabled, show it */ /* hex not disabled, show it */
for(c = 0; c < width; c++) for(c = 0; c < width; c++)
if(i+c < size) if(i + c < size)
fprintf(stream, "%02x ", ptr[i+c]); fprintf(stream, "%02x ", ptr[i + c]);
else else
fputs(" ", stream); fputs(" ", stream);
} }
for(c = 0; (c < width) && (i+c < size); c++) { for(c = 0; (c < width) && (i + c < size); c++) {
/* check for 0D0A; if found, skip past and start a new line of output */ /* check for 0D0A; if found, skip past and start a new line of output */
if(nohex && (i+c+1 < size) && ptr[i+c]==0x0D && ptr[i+c+1]==0x0A) { if(nohex && (i + c + 1 < size) && ptr[i + c] == 0x0D &&
i+=(c+2-width); ptr[i + c + 1] == 0x0A) {
i += (c + 2 - width);
break; break;
} }
fprintf(stream, "%c", fprintf(stream, "%c",
(ptr[i+c]>=0x20) && (ptr[i+c]<0x80)?ptr[i+c]:'.'); (ptr[i + c] >= 0x20) && (ptr[i + c]<0x80)?ptr[i + c]:'.');
/* check again for 0D0A, to avoid an extra \n if it's at width */ /* check again for 0D0A, to avoid an extra \n if it's at width */
if(nohex && (i+c+2 < size) && ptr[i+c+1]==0x0D && ptr[i+c+2]==0x0A) { if(nohex && (i + c + 2 < size) && ptr[i + c + 1] == 0x0D &&
i+=(c+3-width); ptr[i + c + 2] == 0x0A) {
i += (c + 3 - width);
break; break;
} }
} }

View File

@ -136,28 +136,28 @@ static void mcode_or_die(const char *where, CURLMcode code)
const char *s; const char *s;
switch(code) { switch(code) {
case CURLM_BAD_HANDLE: case CURLM_BAD_HANDLE:
s="CURLM_BAD_HANDLE"; s = "CURLM_BAD_HANDLE";
break; break;
case CURLM_BAD_EASY_HANDLE: case CURLM_BAD_EASY_HANDLE:
s="CURLM_BAD_EASY_HANDLE"; s = "CURLM_BAD_EASY_HANDLE";
break; break;
case CURLM_OUT_OF_MEMORY: case CURLM_OUT_OF_MEMORY:
s="CURLM_OUT_OF_MEMORY"; s = "CURLM_OUT_OF_MEMORY";
break; break;
case CURLM_INTERNAL_ERROR: case CURLM_INTERNAL_ERROR:
s="CURLM_INTERNAL_ERROR"; s = "CURLM_INTERNAL_ERROR";
break; break;
case CURLM_UNKNOWN_OPTION: case CURLM_UNKNOWN_OPTION:
s="CURLM_UNKNOWN_OPTION"; s = "CURLM_UNKNOWN_OPTION";
break; break;
case CURLM_LAST: case CURLM_LAST:
s="CURLM_LAST"; s = "CURLM_LAST";
break; break;
default: default:
s="CURLM_unknown"; s = "CURLM_unknown";
break; break;
case CURLM_BAD_SOCKET: case CURLM_BAD_SOCKET:
s="CURLM_BAD_SOCKET"; s = "CURLM_BAD_SOCKET";
fprintf(MSG_OUT, "ERROR: %s returns %s\n", where, s); fprintf(MSG_OUT, "ERROR: %s returns %s\n", where, s);
/* ignore this error */ /* ignore this error */
return; return;
@ -257,7 +257,7 @@ static void setsock(SockInfo *f, curl_socket_t s, CURL *e, int act,
ev_io_stop(g->loop, &f->ev); ev_io_stop(g->loop, &f->ev);
ev_io_init(&f->ev, event_cb, f->sockfd, kind); ev_io_init(&f->ev, event_cb, f->sockfd, kind);
f->ev.data = g; f->ev.data = g;
f->evset=1; f->evset = 1;
ev_io_start(g->loop, &f->ev); ev_io_start(g->loop, &f->ev);
} }
@ -371,13 +371,13 @@ static void new_conn(char *url, GlobalInfo *g)
static void fifo_cb(EV_P_ struct ev_io *w, int revents) static void fifo_cb(EV_P_ struct ev_io *w, int revents)
{ {
char s[1024]; char s[1024];
long int rv=0; long int rv = 0;
int n=0; int n = 0;
GlobalInfo *g = (GlobalInfo *)w->data; GlobalInfo *g = (GlobalInfo *)w->data;
do { do {
s[0]='\0'; s[0]='\0';
rv=fscanf(g->input, "%1023s%n", s, &n); rv = fscanf(g->input, "%1023s%n", s, &n);
s[n]='\0'; s[n]='\0';
if(n && s[0]) { if(n && s[0]) {
new_conn(s, g); /* if we read a URL, go get it! */ new_conn(s, g); /* if we read a URL, go get it! */

View File

@ -13,7 +13,7 @@
* See the main() function at the bottom that shows an app that retrieves from * See the main() function at the bottom that shows an app that retrieves from
* a specified url using fgets() and fread() and saves as two output files. * a specified url using fgets() and fread() and saves as two output files.
* *
* Copyright (c) 2003 Simtec Electronics * Copyright (c) 2003, 2017 Simtec Electronics
* *
* Re-implemented by Vincent Sanders <vince@kyllikki.org> with extensive * Re-implemented by Vincent Sanders <vince@kyllikki.org> with extensive
* reference to original curl example code * reference to original curl example code
@ -58,9 +58,9 @@
#include <curl/curl.h> #include <curl/curl.h>
enum fcurl_type_e { enum fcurl_type_e {
CFTYPE_NONE=0, CFTYPE_NONE = 0,
CFTYPE_FILE=1, CFTYPE_FILE = 1,
CFTYPE_CURL=2 CFTYPE_CURL = 2
}; };
struct fcurl_data struct fcurl_data
@ -102,19 +102,19 @@ static size_t write_callback(char *buffer,
URL_FILE *url = (URL_FILE *)userp; URL_FILE *url = (URL_FILE *)userp;
size *= nitems; size *= nitems;
rembuff=url->buffer_len - url->buffer_pos; /* remaining space in buffer */ rembuff = url->buffer_len - url->buffer_pos; /* remaining space in buffer */
if(size > rembuff) { if(size > rembuff) {
/* not enough space in buffer */ /* not enough space in buffer */
newbuff=realloc(url->buffer, url->buffer_len + (size - rembuff)); newbuff = realloc(url->buffer, url->buffer_len + (size - rembuff));
if(newbuff==NULL) { if(newbuff == NULL) {
fprintf(stderr, "callback buffer grow failed\n"); fprintf(stderr, "callback buffer grow failed\n");
size=rembuff; size = rembuff;
} }
else { else {
/* realloc succeeded increase buffer size*/ /* realloc succeeded increase buffer size*/
url->buffer_len+=size - rembuff; url->buffer_len += size - rembuff;
url->buffer=newbuff; url->buffer = newbuff;
} }
} }
@ -189,7 +189,7 @@ static int fill_buffer(URL_FILE *file, size_t want)
else { else {
/* Note that on some platforms 'timeout' may be modified by select(). /* Note that on some platforms 'timeout' may be modified by select().
If you need access to the original value save a copy beforehand. */ If you need access to the original value save a copy beforehand. */
rc = select(maxfd+1, &fdread, &fdwrite, &fdexcep, &timeout); rc = select(maxfd + 1, &fdread, &fdwrite, &fdexcep, &timeout);
} }
switch(rc) { switch(rc) {
@ -211,12 +211,12 @@ static int fill_buffer(URL_FILE *file, size_t want)
static int use_buffer(URL_FILE *file, size_t want) static int use_buffer(URL_FILE *file, size_t want)
{ {
/* sort out buffer */ /* sort out buffer */
if((file->buffer_pos - want) <=0) { if((file->buffer_pos - want) <= 0) {
/* ditch buffer - write will recreate */ /* ditch buffer - write will recreate */
free(file->buffer); free(file->buffer);
file->buffer=NULL; file->buffer = NULL;
file->buffer_pos=0; file->buffer_pos = 0;
file->buffer_len=0; file->buffer_len = 0;
} }
else { else {
/* move rest down make it available for later */ /* move rest down make it available for later */
@ -243,7 +243,8 @@ URL_FILE *url_fopen(const char *url, const char *operation)
memset(file, 0, sizeof(URL_FILE)); memset(file, 0, sizeof(URL_FILE));
if((file->handle.file=fopen(url, operation))) file->handle.file = fopen(url, operation);
if(file->handle.file)
file->type = CFTYPE_FILE; /* marked as URL */ file->type = CFTYPE_FILE; /* marked as URL */
else { else {
@ -282,11 +283,11 @@ URL_FILE *url_fopen(const char *url, const char *operation)
int url_fclose(URL_FILE *file) int url_fclose(URL_FILE *file)
{ {
int ret=0;/* default is good return */ int ret = 0;/* default is good return */
switch(file->type) { switch(file->type) {
case CFTYPE_FILE: case CFTYPE_FILE:
ret=fclose(file->handle.file); /* passthrough */ ret = fclose(file->handle.file); /* passthrough */
break; break;
case CFTYPE_CURL: case CFTYPE_CURL:
@ -298,8 +299,8 @@ int url_fclose(URL_FILE *file)
break; break;
default: /* unknown or supported type - oh dear */ default: /* unknown or supported type - oh dear */
ret=EOF; ret = EOF;
errno=EBADF; errno = EBADF;
break; break;
} }
@ -311,11 +312,11 @@ int url_fclose(URL_FILE *file)
int url_feof(URL_FILE *file) int url_feof(URL_FILE *file)
{ {
int ret=0; int ret = 0;
switch(file->type) { switch(file->type) {
case CFTYPE_FILE: case CFTYPE_FILE:
ret=feof(file->handle.file); ret = feof(file->handle.file);
break; break;
case CFTYPE_CURL: case CFTYPE_CURL:
@ -324,8 +325,8 @@ int url_feof(URL_FILE *file)
break; break;
default: /* unknown or supported type - oh dear */ default: /* unknown or supported type - oh dear */
ret=-1; ret = -1;
errno=EBADF; errno = EBADF;
break; break;
} }
return ret; return ret;
@ -337,7 +338,7 @@ size_t url_fread(void *ptr, size_t size, size_t nmemb, URL_FILE *file)
switch(file->type) { switch(file->type) {
case CFTYPE_FILE: case CFTYPE_FILE:
want=fread(ptr, size, nmemb, file->handle.file); want = fread(ptr, size, nmemb, file->handle.file);
break; break;
case CFTYPE_CURL: case CFTYPE_CURL:
@ -363,8 +364,8 @@ size_t url_fread(void *ptr, size_t size, size_t nmemb, URL_FILE *file)
break; break;
default: /* unknown or supported type - oh dear */ default: /* unknown or supported type - oh dear */
want=0; want = 0;
errno=EBADF; errno = EBADF;
break; break;
} }
@ -395,24 +396,24 @@ char *url_fgets(char *ptr, size_t size, URL_FILE *file)
/*buffer contains data */ /*buffer contains data */
/* look for newline or eof */ /* look for newline or eof */
for(loop=0;loop < want;loop++) { for(loop = 0; loop < want; loop++) {
if(file->buffer[loop] == '\n') { if(file->buffer[loop] == '\n') {
want=loop+1;/* include newline */ want = loop + 1;/* include newline */
break; break;
} }
} }
/* xfer data to caller */ /* xfer data to caller */
memcpy(ptr, file->buffer, want); memcpy(ptr, file->buffer, want);
ptr[want]=0;/* always null terminate */ ptr[want] = 0;/* always null terminate */
use_buffer(file, want); use_buffer(file, want);
break; break;
default: /* unknown or supported type - oh dear */ default: /* unknown or supported type - oh dear */
ptr=NULL; ptr = NULL;
errno=EBADF; errno = EBADF;
break; break;
} }
@ -435,9 +436,9 @@ void url_rewind(URL_FILE *file)
/* ditch buffer - write will recreate - resets stream pos*/ /* ditch buffer - write will recreate - resets stream pos*/
free(file->buffer); free(file->buffer);
file->buffer=NULL; file->buffer = NULL;
file->buffer_pos=0; file->buffer_pos = 0;
file->buffer_len=0; file->buffer_len = 0;
break; break;
@ -463,12 +464,12 @@ int main(int argc, char *argv[])
const char *url; const char *url;
if(argc < 2) if(argc < 2)
url="http://192.168.7.3/testfile";/* default to testurl */ url = "http://192.168.7.3/testfile";/* default to testurl */
else else
url=argv[1];/* use passed url */ url = argv[1];/* use passed url */
/* copy from url line by line with fgets */ /* copy from url line by line with fgets */
outf=fopen(FGETSFILE, "wb+"); outf = fopen(FGETSFILE, "wb+");
if(!outf) { if(!outf) {
perror("couldn't open fgets output file\n"); perror("couldn't open fgets output file\n");
return 1; return 1;
@ -492,7 +493,7 @@ int main(int argc, char *argv[])
/* Copy from url with fread */ /* Copy from url with fread */
outf=fopen(FREADFILE, "wb+"); outf = fopen(FREADFILE, "wb+");
if(!outf) { if(!outf) {
perror("couldn't open fread output file\n"); perror("couldn't open fread output file\n");
return 1; return 1;
@ -516,7 +517,7 @@ int main(int argc, char *argv[])
/* Test rewind */ /* Test rewind */
outf=fopen(REWINDFILE, "wb+"); outf = fopen(REWINDFILE, "wb+");
if(!outf) { if(!outf) {
perror("couldn't open fread output file\n"); perror("couldn't open fread output file\n");
return 1; return 1;

View File

@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___ * | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____| * \___|\___/|_| \_\_____|
* *
* Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al. * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, et al.
* *
* This software is licensed as described in the file COPYING, which * This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms * you should have received as part of this distribution. The terms
@ -35,10 +35,10 @@ struct FtpFile {
static size_t my_fwrite(void *buffer, size_t size, size_t nmemb, void *stream) static size_t my_fwrite(void *buffer, size_t size, size_t nmemb, void *stream)
{ {
struct FtpFile *out=(struct FtpFile *)stream; struct FtpFile *out = (struct FtpFile *)stream;
if(out && !out->stream) { if(out && !out->stream) {
/* open file for writing */ /* open file for writing */
out->stream=fopen(out->filename, "wb"); out->stream = fopen(out->filename, "wb");
if(!out->stream) if(!out->stream)
return -1; /* failure, can't open file to write */ return -1; /* failure, can't open file to write */
} }
@ -50,7 +50,7 @@ int main(void)
{ {
CURL *curl; CURL *curl;
CURLcode res; CURLcode res;
struct FtpFile ftpfile={ struct FtpFile ftpfile = {
"curl.tar.gz", /* name to store the file as if successful */ "curl.tar.gz", /* name to store the file as if successful */
NULL NULL
}; };

View File

@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___ * | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____| * \___|\___/|_| \_\_____|
* *
* Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al. * Copyright (C) 1998 - 2015, 2017, Daniel Stenberg, <daniel@haxx.se>, et al.
* *
* This software is licensed as described in the file COPYING, which * This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms * you should have received as part of this distribution. The terms
@ -37,10 +37,10 @@ struct FtpFile {
static size_t my_fwrite(void *buffer, size_t size, size_t nmemb, static size_t my_fwrite(void *buffer, size_t size, size_t nmemb,
void *stream) void *stream)
{ {
struct FtpFile *out=(struct FtpFile *)stream; struct FtpFile *out = (struct FtpFile *)stream;
if(out && !out->stream) { if(out && !out->stream) {
/* open file for writing */ /* open file for writing */
out->stream=fopen(out->filename, "wb"); out->stream = fopen(out->filename, "wb");
if(!out->stream) if(!out->stream)
return -1; /* failure, can't open file to write */ return -1; /* failure, can't open file to write */
} }
@ -52,7 +52,7 @@ int main(void)
{ {
CURL *curl; CURL *curl;
CURLcode res; CURLcode res;
struct FtpFile ftpfile={ struct FtpFile ftpfile = {
"yourfile.bin", /* name to store the file as if successful */ "yourfile.bin", /* name to store the file as if successful */
NULL NULL
}; };

View File

@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___ * | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____| * \___|\___/|_| \_\_____|
* *
* Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al. * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, et al.
* *
* This software is licensed as described in the file COPYING, which * This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms * you should have received as part of this distribution. The terms
@ -71,7 +71,7 @@ int main(void)
struct stat file_info; struct stat file_info;
curl_off_t fsize; curl_off_t fsize;
struct curl_slist *headerlist=NULL; struct curl_slist *headerlist = NULL;
static const char buf_1 [] = "RNFR " UPLOAD_FILE_AS; static const char buf_1 [] = "RNFR " UPLOAD_FILE_AS;
static const char buf_2 [] = "RNTO " RENAME_FILE_TO; static const char buf_2 [] = "RNTO " RENAME_FILE_TO;

View File

@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___ * | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____| * \___|\___/|_| \_\_____|
* *
* Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al. * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, et al.
* *
* This software is licensed as described in the file COPYING, which * This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms * you should have received as part of this distribution. The terms
@ -26,44 +26,32 @@
#include <stdlib.h> #include <stdlib.h>
#include <stdio.h> #include <stdio.h>
#include <curl/curl.h> #include <curl/curl.h>
#if defined(_MSC_VER) && (_MSC_VER < 1300)
# error _snscanf requires MSVC 7.0 or later.
#endif
/* The MinGW headers are missing a few Win32 function definitions,
you shouldn't need this if you use VC++ */
#if defined(__MINGW32__) && !defined(__MINGW64__)
int __cdecl _snscanf(const char *input, size_t length,
const char *format, ...);
#endif
/* parse headers for Content-Length */ /* parse headers for Content-Length */
size_t getcontentlengthfunc(void *ptr, size_t size, size_t nmemb, void *stream) static size_t getcontentlengthfunc(void *ptr, size_t size, size_t nmemb,
void *stream)
{ {
int r; int r;
long len = 0; long len = 0;
/* _snscanf() is Win32 specific */ r = sscanf(ptr, "Content-Length: %ld\n", &len);
r = _snscanf(ptr, size * nmemb, "Content-Length: %ld\n", &len); if(r)
if(r) /* Microsoft: we don't read the specs */
*((long *) stream) = len; *((long *) stream) = len;
return size * nmemb; return size * nmemb;
} }
/* discard downloaded data */ /* discard downloaded data */
size_t discardfunc(void *ptr, size_t size, size_t nmemb, void *stream) static size_t discardfunc(void *ptr, size_t size, size_t nmemb, void *stream)
{ {
(void)ptr;
(void)stream;
return size * nmemb; return size * nmemb;
} }
/* read data to upload */ /* read data to upload */
size_t readfunc(void *ptr, size_t size, size_t nmemb, void *stream) static size_t readfunc(void *ptr, size_t size, size_t nmemb, void *stream)
{ {
FILE *f = stream; FILE *f = stream;
size_t n; size_t n;
@ -77,8 +65,8 @@ size_t readfunc(void *ptr, size_t size, size_t nmemb, void *stream)
} }
int upload(CURL *curlhandle, const char *remotepath, const char *localpath, static int upload(CURL *curlhandle, const char *remotepath,
long timeout, long tries) const char *localpath, long timeout, long tries)
{ {
FILE *f; FILE *f;
long uploaded_len = 0; long uploaded_len = 0;
@ -156,7 +144,7 @@ int upload(CURL *curlhandle, const char *remotepath, const char *localpath,
} }
} }
int main(int c, char **argv) int main(void)
{ {
CURL *curlhandle = NULL; CURL *curlhandle = NULL;

View File

@ -99,14 +99,14 @@ static void mcode_or_die(const char *where, CURLMcode code)
if(CURLM_OK != code) { if(CURLM_OK != code) {
const char *s; const char *s;
switch(code) { switch(code) {
case CURLM_BAD_HANDLE: s="CURLM_BAD_HANDLE"; break; case CURLM_BAD_HANDLE: s = "CURLM_BAD_HANDLE"; break;
case CURLM_BAD_EASY_HANDLE: s="CURLM_BAD_EASY_HANDLE"; break; case CURLM_BAD_EASY_HANDLE: s = "CURLM_BAD_EASY_HANDLE"; break;
case CURLM_OUT_OF_MEMORY: s="CURLM_OUT_OF_MEMORY"; break; case CURLM_OUT_OF_MEMORY: s = "CURLM_OUT_OF_MEMORY"; break;
case CURLM_INTERNAL_ERROR: s="CURLM_INTERNAL_ERROR"; break; case CURLM_INTERNAL_ERROR: s = "CURLM_INTERNAL_ERROR"; break;
case CURLM_BAD_SOCKET: s="CURLM_BAD_SOCKET"; break; case CURLM_BAD_SOCKET: s = "CURLM_BAD_SOCKET"; break;
case CURLM_UNKNOWN_OPTION: s="CURLM_UNKNOWN_OPTION"; break; case CURLM_UNKNOWN_OPTION: s = "CURLM_UNKNOWN_OPTION"; break;
case CURLM_LAST: s="CURLM_LAST"; break; case CURLM_LAST: s = "CURLM_LAST"; break;
default: s="CURLM_unknown"; default: s = "CURLM_unknown";
} }
MSG_OUT("ERROR: %s returns %s\n", where, s); MSG_OUT("ERROR: %s returns %s\n", where, s);
exit(code); exit(code);
@ -156,7 +156,7 @@ static gboolean timer_cb(gpointer data)
static int update_timeout_cb(CURLM *multi, long timeout_ms, void *userp) static int update_timeout_cb(CURLM *multi, long timeout_ms, void *userp)
{ {
struct timeval timeout; struct timeval timeout;
GlobalInfo *g=(GlobalInfo *)userp; GlobalInfo *g = (GlobalInfo *)userp;
timeout.tv_sec = timeout_ms/1000; timeout.tv_sec = timeout_ms/1000;
timeout.tv_usec = (timeout_ms%1000)*1000; timeout.tv_usec = (timeout_ms%1000)*1000;
@ -181,7 +181,7 @@ static gboolean event_cb(GIOChannel *ch, GIOCondition condition, gpointer data)
{ {
GlobalInfo *g = (GlobalInfo*) data; GlobalInfo *g = (GlobalInfo*) data;
CURLMcode rc; CURLMcode rc;
int fd=g_io_channel_unix_get_fd(ch); int fd = g_io_channel_unix_get_fd(ch);
int action = int action =
(condition & G_IO_IN ? CURL_CSELECT_IN : 0) | (condition & G_IO_IN ? CURL_CSELECT_IN : 0) |
@ -228,7 +228,7 @@ static void setsock(SockInfo *f, curl_socket_t s, CURL *e, int act,
if(f->ev) { if(f->ev) {
g_source_remove(f->ev); g_source_remove(f->ev);
} }
f->ev=g_io_add_watch(f->ch, kind, event_cb, g); f->ev = g_io_add_watch(f->ch, kind, event_cb, g);
} }
/* Initialize a new SockInfo structure */ /* Initialize a new SockInfo structure */
@ -237,7 +237,7 @@ static void addsock(curl_socket_t s, CURL *easy, int action, GlobalInfo *g)
SockInfo *fdp = g_malloc0(sizeof(SockInfo)); SockInfo *fdp = g_malloc0(sizeof(SockInfo));
fdp->global = g; fdp->global = g;
fdp->ch=g_io_channel_unix_new(s); fdp->ch = g_io_channel_unix_new(s);
setsock(fdp, s, easy, action, g); setsock(fdp, s, easy, action, g);
curl_multi_assign(g->multi, s, fdp); curl_multi_assign(g->multi, s, fdp);
} }
@ -319,7 +319,7 @@ static void new_conn(char *url, GlobalInfo *g)
curl_easy_setopt(conn->easy, CURLOPT_LOW_SPEED_TIME, 30L); curl_easy_setopt(conn->easy, CURLOPT_LOW_SPEED_TIME, 30L);
MSG_OUT("Adding easy %p to multi %p (%s)\n", conn->easy, g->multi, url); MSG_OUT("Adding easy %p to multi %p (%s)\n", conn->easy, g->multi, url);
rc =curl_multi_add_handle(g->multi, conn->easy); rc = curl_multi_add_handle(g->multi, conn->easy);
mcode_or_die("new_conn: curl_multi_add_handle", rc); mcode_or_die("new_conn: curl_multi_add_handle", rc);
/* note that the add_handle() will set a time-out to trigger very soon so /* note that the add_handle() will set a time-out to trigger very soon so
@ -331,11 +331,11 @@ static gboolean fifo_cb(GIOChannel *ch, GIOCondition condition, gpointer data)
{ {
#define BUF_SIZE 1024 #define BUF_SIZE 1024
gsize len, tp; gsize len, tp;
gchar *buf, *tmp, *all=NULL; gchar *buf, *tmp, *all = NULL;
GIOStatus rv; GIOStatus rv;
do { do {
GError *err=NULL; GError *err = NULL;
rv = g_io_channel_read_line(ch, &buf, &len, &tp, &err); rv = g_io_channel_read_line(ch, &buf, &len, &tp, &err);
if(buf) { if(buf) {
if(tp) { if(tp) {
@ -345,15 +345,15 @@ static gboolean fifo_cb(GIOChannel *ch, GIOCondition condition, gpointer data)
g_free(buf); g_free(buf);
} }
else { else {
buf = g_malloc(BUF_SIZE+1); buf = g_malloc(BUF_SIZE + 1);
while(TRUE) { while(TRUE) {
buf[BUF_SIZE]='\0'; buf[BUF_SIZE]='\0';
g_io_channel_read_chars(ch, buf, BUF_SIZE, &len, &err); g_io_channel_read_chars(ch, buf, BUF_SIZE, &len, &err);
if(len) { if(len) {
buf[len]='\0'; buf[len]='\0';
if(all) { if(all) {
tmp=all; tmp = all;
all=g_strdup_printf("%s%s", tmp, buf); all = g_strdup_printf("%s%s", tmp, buf);
g_free(tmp); g_free(tmp);
} }
else { else {
@ -417,12 +417,12 @@ int main(int argc, char **argv)
GMainLoop*gmain; GMainLoop*gmain;
int fd; int fd;
GIOChannel* ch; GIOChannel* ch;
g=g_malloc0(sizeof(GlobalInfo)); g = g_malloc0(sizeof(GlobalInfo));
fd=init_fifo(); fd = init_fifo();
ch=g_io_channel_unix_new(fd); ch = g_io_channel_unix_new(fd);
g_io_add_watch(ch, G_IO_IN, fifo_cb, g); g_io_add_watch(ch, G_IO_IN, fifo_cb, g);
gmain=g_main_loop_new(NULL, FALSE); gmain = g_main_loop_new(NULL, FALSE);
g->multi = curl_multi_init(); g->multi = curl_multi_init();
curl_multi_setopt(g->multi, CURLMOPT_SOCKETFUNCTION, sock_cb); curl_multi_setopt(g->multi, CURLMOPT_SOCKETFUNCTION, sock_cb);
curl_multi_setopt(g->multi, CURLMOPT_SOCKETDATA, g); curl_multi_setopt(g->multi, CURLMOPT_SOCKETDATA, g);

View File

@ -137,15 +137,15 @@ static void mcode_or_die(const char *where, CURLMcode code)
if(CURLM_OK != code) { if(CURLM_OK != code) {
const char *s; const char *s;
switch(code) { switch(code) {
case CURLM_BAD_HANDLE: s="CURLM_BAD_HANDLE"; break; case CURLM_BAD_HANDLE: s = "CURLM_BAD_HANDLE"; break;
case CURLM_BAD_EASY_HANDLE: s="CURLM_BAD_EASY_HANDLE"; break; case CURLM_BAD_EASY_HANDLE: s = "CURLM_BAD_EASY_HANDLE"; break;
case CURLM_OUT_OF_MEMORY: s="CURLM_OUT_OF_MEMORY"; break; case CURLM_OUT_OF_MEMORY: s = "CURLM_OUT_OF_MEMORY"; break;
case CURLM_INTERNAL_ERROR: s="CURLM_INTERNAL_ERROR"; break; case CURLM_INTERNAL_ERROR: s = "CURLM_INTERNAL_ERROR"; break;
case CURLM_UNKNOWN_OPTION: s="CURLM_UNKNOWN_OPTION"; break; case CURLM_UNKNOWN_OPTION: s = "CURLM_UNKNOWN_OPTION"; break;
case CURLM_LAST: s="CURLM_LAST"; break; case CURLM_LAST: s = "CURLM_LAST"; break;
default: s="CURLM_unknown"; default: s = "CURLM_unknown";
break; break;
case CURLM_BAD_SOCKET: s="CURLM_BAD_SOCKET"; case CURLM_BAD_SOCKET: s = "CURLM_BAD_SOCKET";
fprintf(MSG_OUT, "ERROR: %s returns %s\n", where, s); fprintf(MSG_OUT, "ERROR: %s returns %s\n", where, s);
/* ignore this error */ /* ignore this error */
return; return;
@ -359,15 +359,15 @@ static void new_conn(char *url, GlobalInfo *g)
static void fifo_cb(int fd, short event, void *arg) static void fifo_cb(int fd, short event, void *arg)
{ {
char s[1024]; char s[1024];
long int rv=0; long int rv = 0;
int n=0; int n = 0;
GlobalInfo *g = (GlobalInfo *)arg; GlobalInfo *g = (GlobalInfo *)arg;
(void)fd; /* unused */ (void)fd; /* unused */
(void)event; /* unused */ (void)event; /* unused */
do { do {
s[0]='\0'; s[0]='\0';
rv=fscanf(g->input, "%1023s%n", s, &n); rv = fscanf(g->input, "%1023s%n", s, &n);
s[n]='\0'; s[n]='\0';
if(n && s[0]) { if(n && s[0]) {
new_conn(s, arg); /* if we read a URL, go get it! */ new_conn(s, arg); /* if we read a URL, go get it! */

View File

@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___ * | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____| * \___|\___/|_| \_\_____|
* *
* Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al. * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, et al.
* *
* This software is licensed as described in the file COPYING, which * This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms * you should have received as part of this distribution. The terms
@ -52,7 +52,7 @@ void dumpNode(TidyDoc doc, TidyNode tnod, int indent)
TidyAttr attr; TidyAttr attr;
printf("%*.*s%s ", indent, indent, "<", name); printf("%*.*s%s ", indent, indent, "<", name);
/* walk the attribute list */ /* walk the attribute list */
for(attr=tidyAttrFirst(child); attr; attr=tidyAttrNext(attr) ) { for(attr = tidyAttrFirst(child); attr; attr = tidyAttrNext(attr) ) {
printf(tidyAttrName(attr)); printf(tidyAttrName(attr));
tidyAttrValue(attr)?printf("=\"%s\" ", tidyAttrValue(attr)?printf("=\"%s\" ",
tidyAttrValue(attr)):printf(" "); tidyAttrValue(attr)):printf(" ");
@ -95,7 +95,7 @@ int main(int argc, char **argv)
tidyBufInit(&docbuf); tidyBufInit(&docbuf);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &docbuf); curl_easy_setopt(curl, CURLOPT_WRITEDATA, &docbuf);
err=curl_easy_perform(curl); err = curl_easy_perform(curl);
if(!err) { if(!err) {
err = tidyParseBuffer(tdoc, &docbuf); /* parse the input */ err = tidyParseBuffer(tdoc, &docbuf); /* parse the input */
if(err >= 0) { if(err >= 0) {

View File

@ -51,7 +51,7 @@ static int num_transfers;
static int hnd2num(CURL *hnd) static int hnd2num(CURL *hnd)
{ {
int i; int i;
for(i=0; i< num_transfers; i++) { for(i = 0; i< num_transfers; i++) {
if(curl_hnd[i] == hnd) if(curl_hnd[i] == hnd)
return i; return i;
} }
@ -65,7 +65,7 @@ void dump(const char *text, int num, unsigned char *ptr, size_t size,
size_t i; size_t i;
size_t c; size_t c;
unsigned int width=0x10; unsigned int width = 0x10;
if(nohex) if(nohex)
/* without the hex output, we can fit more on screen */ /* without the hex output, we can fit more on screen */
@ -74,30 +74,32 @@ void dump(const char *text, int num, unsigned char *ptr, size_t size,
fprintf(stderr, "%d %s, %ld bytes (0x%lx)\n", fprintf(stderr, "%d %s, %ld bytes (0x%lx)\n",
num, text, (long)size, (long)size); num, text, (long)size, (long)size);
for(i=0; i<size; i+= width) { for(i = 0; i<size; i += width) {
fprintf(stderr, "%4.4lx: ", (long)i); fprintf(stderr, "%4.4lx: ", (long)i);
if(!nohex) { if(!nohex) {
/* hex not disabled, show it */ /* hex not disabled, show it */
for(c = 0; c < width; c++) for(c = 0; c < width; c++)
if(i+c < size) if(i + c < size)
fprintf(stderr, "%02x ", ptr[i+c]); fprintf(stderr, "%02x ", ptr[i + c]);
else else
fputs(" ", stderr); fputs(" ", stderr);
} }
for(c = 0; (c < width) && (i+c < size); c++) { for(c = 0; (c < width) && (i + c < size); c++) {
/* check for 0D0A; if found, skip past and start a new line of output */ /* check for 0D0A; if found, skip past and start a new line of output */
if(nohex && (i+c+1 < size) && ptr[i+c]==0x0D && ptr[i+c+1]==0x0A) { if(nohex && (i + c + 1 < size) && ptr[i + c] == 0x0D &&
i+=(c+2-width); ptr[i + c + 1] == 0x0A) {
i += (c + 2 - width);
break; break;
} }
fprintf(stderr, "%c", fprintf(stderr, "%c",
(ptr[i+c]>=0x20) && (ptr[i+c]<0x80)?ptr[i+c]:'.'); (ptr[i + c] >= 0x20) && (ptr[i + c]<0x80)?ptr[i + c]:'.');
/* check again for 0D0A, to avoid an extra \n if it's at width */ /* check again for 0D0A, to avoid an extra \n if it's at width */
if(nohex && (i+c+2 < size) && ptr[i+c+1]==0x0D && ptr[i+c+2]==0x0A) { if(nohex && (i + c + 2 < size) && ptr[i + c + 1] == 0x0D &&
i+=(c+3-width); ptr[i + c + 2] == 0x0A) {
i += (c + 3 - width);
break; break;
} }
} }
@ -199,7 +201,7 @@ int main(int argc, char **argv)
/* init a multi stack */ /* init a multi stack */
multi_handle = curl_multi_init(); multi_handle = curl_multi_init();
for(i=0; i<num_transfers; i++) { for(i = 0; i<num_transfers; i++) {
easy[i] = curl_easy_init(); easy[i] = curl_easy_init();
/* set options */ /* set options */
setup(easy[i], i); setup(easy[i], i);
@ -269,7 +271,7 @@ int main(int argc, char **argv)
else { else {
/* Note that on some platforms 'timeout' may be modified by select(). /* Note that on some platforms 'timeout' may be modified by select().
If you need access to the original value save a copy beforehand. */ If you need access to the original value save a copy beforehand. */
rc = select(maxfd+1, &fdread, &fdwrite, &fdexcep, &timeout); rc = select(maxfd + 1, &fdread, &fdwrite, &fdexcep, &timeout);
} }
switch(rc) { switch(rc) {
@ -286,7 +288,7 @@ int main(int argc, char **argv)
curl_multi_cleanup(multi_handle); curl_multi_cleanup(multi_handle);
for(i=0; i<num_transfers; i++) for(i = 0; i<num_transfers; i++)
curl_easy_cleanup(easy[i]); curl_easy_cleanup(easy[i]);
return 0; return 0;

View File

@ -45,7 +45,7 @@ void dump(const char *text, unsigned char *ptr, size_t size,
size_t i; size_t i;
size_t c; size_t c;
unsigned int width=0x10; unsigned int width = 0x10;
if(nohex) if(nohex)
/* without the hex output, we can fit more on screen */ /* without the hex output, we can fit more on screen */
@ -54,30 +54,32 @@ void dump(const char *text, unsigned char *ptr, size_t size,
fprintf(stderr, "%s, %ld bytes (0x%lx)\n", fprintf(stderr, "%s, %ld bytes (0x%lx)\n",
text, (long)size, (long)size); text, (long)size, (long)size);
for(i=0; i<size; i+= width) { for(i = 0; i<size; i += width) {
fprintf(stderr, "%4.4lx: ", (long)i); fprintf(stderr, "%4.4lx: ", (long)i);
if(!nohex) { if(!nohex) {
/* hex not disabled, show it */ /* hex not disabled, show it */
for(c = 0; c < width; c++) for(c = 0; c < width; c++)
if(i+c < size) if(i + c < size)
fprintf(stderr, "%02x ", ptr[i+c]); fprintf(stderr, "%02x ", ptr[i + c]);
else else
fputs(" ", stderr); fputs(" ", stderr);
} }
for(c = 0; (c < width) && (i+c < size); c++) { for(c = 0; (c < width) && (i + c < size); c++) {
/* check for 0D0A; if found, skip past and start a new line of output */ /* check for 0D0A; if found, skip past and start a new line of output */
if(nohex && (i+c+1 < size) && ptr[i+c]==0x0D && ptr[i+c+1]==0x0A) { if(nohex && (i + c + 1 < size) && ptr[i + c] == 0x0D &&
i+=(c+2-width); ptr[i + c + 1] == 0x0A) {
i += (c + 2 - width);
break; break;
} }
fprintf(stderr, "%c", fprintf(stderr, "%c",
(ptr[i+c]>=0x20) && (ptr[i+c]<0x80)?ptr[i+c]:'.'); (ptr[i + c] >= 0x20) && (ptr[i + c]<0x80)?ptr[i + c]:'.');
/* check again for 0D0A, to avoid an extra \n if it's at width */ /* check again for 0D0A, to avoid an extra \n if it's at width */
if(nohex && (i+c+2 < size) && ptr[i+c+1]==0x0D && ptr[i+c+2]==0x0A) { if(nohex && (i + c + 2 < size) && ptr[i + c + 1] == 0x0D &&
i+=(c+3-width); ptr[i + c + 2] == 0x0A) {
i += (c + 3 - width);
break; break;
} }
} }
@ -181,7 +183,7 @@ static int server_push_callback(CURL *parent,
fprintf(stderr, "**** push callback approves stream %u, got %d headers!\n", fprintf(stderr, "**** push callback approves stream %u, got %d headers!\n",
count, (int)num_headers); count, (int)num_headers);
for(i=0; i<num_headers; i++) { for(i = 0; i<num_headers; i++) {
headp = curl_pushheader_bynum(headers, i); headp = curl_pushheader_bynum(headers, i);
fprintf(stderr, "**** header %u: %s\n", (int)i, headp); fprintf(stderr, "**** header %u: %s\n", (int)i, headp);
} }
@ -204,7 +206,7 @@ int main(void)
CURL *easy; CURL *easy;
CURLM *multi_handle; CURLM *multi_handle;
int still_running; /* keep number of running handles */ int still_running; /* keep number of running handles */
int transfers=1; /* we start with one */ int transfers = 1; /* we start with one */
struct CURLMsg *m; struct CURLMsg *m;
/* init a multi stack */ /* init a multi stack */
@ -281,7 +283,7 @@ int main(void)
else { else {
/* Note that on some platforms 'timeout' may be modified by select(). /* Note that on some platforms 'timeout' may be modified by select().
If you need access to the original value save a copy beforehand. */ If you need access to the original value save a copy beforehand. */
rc = select(maxfd+1, &fdread, &fdwrite, &fdexcep, &timeout); rc = select(maxfd + 1, &fdread, &fdwrite, &fdexcep, &timeout);
} }
switch(rc) { switch(rc) {

View File

@ -53,7 +53,7 @@ static int num_transfers;
static int hnd2num(CURL *hnd) static int hnd2num(CURL *hnd)
{ {
int i; int i;
for(i=0; i< num_transfers; i++) { for(i = 0; i< num_transfers; i++) {
if(curl_hnd[i] == hnd) if(curl_hnd[i] == hnd)
return i; return i;
} }
@ -66,7 +66,7 @@ void dump(const char *text, int num, unsigned char *ptr, size_t size,
{ {
size_t i; size_t i;
size_t c; size_t c;
unsigned int width=0x10; unsigned int width = 0x10;
if(nohex) if(nohex)
/* without the hex output, we can fit more on screen */ /* without the hex output, we can fit more on screen */
@ -75,30 +75,32 @@ void dump(const char *text, int num, unsigned char *ptr, size_t size,
fprintf(stderr, "%d %s, %ld bytes (0x%lx)\n", fprintf(stderr, "%d %s, %ld bytes (0x%lx)\n",
num, text, (long)size, (long)size); num, text, (long)size, (long)size);
for(i=0; i<size; i+= width) { for(i = 0; i<size; i += width) {
fprintf(stderr, "%4.4lx: ", (long)i); fprintf(stderr, "%4.4lx: ", (long)i);
if(!nohex) { if(!nohex) {
/* hex not disabled, show it */ /* hex not disabled, show it */
for(c = 0; c < width; c++) for(c = 0; c < width; c++)
if(i+c < size) if(i + c < size)
fprintf(stderr, "%02x ", ptr[i+c]); fprintf(stderr, "%02x ", ptr[i + c]);
else else
fputs(" ", stderr); fputs(" ", stderr);
} }
for(c = 0; (c < width) && (i+c < size); c++) { for(c = 0; (c < width) && (i + c < size); c++) {
/* check for 0D0A; if found, skip past and start a new line of output */ /* check for 0D0A; if found, skip past and start a new line of output */
if(nohex && (i+c+1 < size) && ptr[i+c]==0x0D && ptr[i+c+1]==0x0A) { if(nohex && (i + c + 1 < size) && ptr[i + c] == 0x0D &&
i+=(c+2-width); ptr[i + c + 1] == 0x0A) {
i += (c + 2 - width);
break; break;
} }
fprintf(stderr, "%c", fprintf(stderr, "%c",
(ptr[i+c]>=0x20) && (ptr[i+c]<0x80)?ptr[i+c]:'.'); (ptr[i + c] >= 0x20) && (ptr[i + c]<0x80)?ptr[i + c]:'.');
/* check again for 0D0A, to avoid an extra \n if it's at width */ /* check again for 0D0A, to avoid an extra \n if it's at width */
if(nohex && (i+c+2 < size) && ptr[i+c+1]==0x0D && ptr[i+c+2]==0x0A) { if(nohex && (i + c + 2 < size) && ptr[i + c + 1] == 0x0D &&
i+=(c+3-width); ptr[i + c + 2] == 0x0A) {
i += (c + 3 - width);
break; break;
} }
} }
@ -260,7 +262,7 @@ int main(int argc, char **argv)
/* init a multi stack */ /* init a multi stack */
multi_handle = curl_multi_init(); multi_handle = curl_multi_init();
for(i=0; i<num_transfers; i++) { for(i = 0; i<num_transfers; i++) {
easy[i] = curl_easy_init(); easy[i] = curl_easy_init();
/* set options */ /* set options */
setup(easy[i], i, filename); setup(easy[i], i, filename);
@ -333,7 +335,7 @@ int main(int argc, char **argv)
else { else {
/* Note that on some platforms 'timeout' may be modified by select(). /* Note that on some platforms 'timeout' may be modified by select().
If you need access to the original value save a copy beforehand. */ If you need access to the original value save a copy beforehand. */
rc = select(maxfd+1, &fdread, &fdwrite, &fdexcep, &timeout); rc = select(maxfd + 1, &fdread, &fdwrite, &fdexcep, &timeout);
} }
switch(rc) { switch(rc) {
@ -350,7 +352,7 @@ int main(int argc, char **argv)
curl_multi_cleanup(multi_handle); curl_multi_cleanup(multi_handle);
for(i=0; i<num_transfers; i++) for(i = 0; i<num_transfers; i++)
curl_easy_cleanup(easy[i]); curl_easy_cleanup(easy[i]);
return 0; return 0;

View File

@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___ * | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____| * \___|\___/|_| \_\_____|
* *
* Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al. * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, et al.
* *
* This software is licensed as described in the file COPYING, which * This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms * you should have received as part of this distribution. The terms
@ -69,7 +69,7 @@ int main(int argc, char **argv)
if(argc < 3) if(argc < 3)
return 1; return 1;
file= argv[1]; file = argv[1];
url = argv[2]; url = argv[2];
/* get the file size of the local file */ /* get the file size of the local file */

View File

@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___ * | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____| * \___|\___/|_| \_\_____|
* *
* Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al. * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, et al.
* *
* This software is licensed as described in the file COPYING, which * This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms * you should have received as part of this distribution. The terms
@ -144,7 +144,7 @@ int main(void)
else { else {
/* Note that on some platforms 'timeout' may be modified by select(). /* Note that on some platforms 'timeout' may be modified by select().
If you need access to the original value save a copy beforehand. */ If you need access to the original value save a copy beforehand. */
rc = select(maxfd+1, &fdread, &fdwrite, &fdexcep, &timeout); rc = select(maxfd + 1, &fdread, &fdwrite, &fdexcep, &timeout);
} }
if(tvdiff(tvnow(), mp_start) > MULTI_PERFORM_HANG_TIMEOUT) { if(tvdiff(tvnow(), mp_start) > MULTI_PERFORM_HANG_TIMEOUT) {

View File

@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___ * | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____| * \___|\___/|_| \_\_____|
* *
* Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al. * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, et al.
* *
* This software is licensed as described in the file COPYING, which * This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms * you should have received as part of this distribution. The terms
@ -55,7 +55,7 @@ int main(void)
int msgs_left; /* how many messages are left */ int msgs_left; /* how many messages are left */
/* Allocate one CURL handle per transfer */ /* Allocate one CURL handle per transfer */
for(i=0; i<HANDLECOUNT; i++) for(i = 0; i<HANDLECOUNT; i++)
handles[i] = curl_easy_init(); handles[i] = curl_easy_init();
/* set the options (I left out a few, you'll get the point anyway) */ /* set the options (I left out a few, you'll get the point anyway) */
@ -68,7 +68,7 @@ int main(void)
multi_handle = curl_multi_init(); multi_handle = curl_multi_init();
/* add the individual transfers */ /* add the individual transfers */
for(i=0; i<HANDLECOUNT; i++) for(i = 0; i<HANDLECOUNT; i++)
curl_multi_add_handle(multi_handle, handles[i]); curl_multi_add_handle(multi_handle, handles[i]);
/* we start some action by calling perform right away */ /* we start some action by calling perform right away */
@ -130,7 +130,7 @@ int main(void)
else { else {
/* Note that on some platforms 'timeout' may be modified by select(). /* Note that on some platforms 'timeout' may be modified by select().
If you need access to the original value save a copy beforehand. */ If you need access to the original value save a copy beforehand. */
rc = select(maxfd+1, &fdread, &fdwrite, &fdexcep, &timeout); rc = select(maxfd + 1, &fdread, &fdwrite, &fdexcep, &timeout);
} }
switch(rc) { switch(rc) {
@ -150,7 +150,7 @@ int main(void)
int idx, found = 0; int idx, found = 0;
/* Find out which handle this message is about */ /* Find out which handle this message is about */
for(idx=0; idx<HANDLECOUNT; idx++) { for(idx = 0; idx<HANDLECOUNT; idx++) {
found = (msg->easy_handle == handles[idx]); found = (msg->easy_handle == handles[idx]);
if(found) if(found)
break; break;
@ -170,7 +170,7 @@ int main(void)
curl_multi_cleanup(multi_handle); curl_multi_cleanup(multi_handle);
/* Free the CURL handles */ /* Free the CURL handles */
for(i=0; i<HANDLECOUNT; i++) for(i = 0; i<HANDLECOUNT; i++)
curl_easy_cleanup(handles[i]); curl_easy_cleanup(handles[i]);
return 0; return 0;

View File

@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___ * | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____| * \___|\___/|_| \_\_____|
* *
* Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al. * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, et al.
* *
* This software is licensed as described in the file COPYING, which * This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms * you should have received as part of this distribution. The terms
@ -45,7 +45,7 @@ void dump(const char *text,
size_t i; size_t i;
size_t c; size_t c;
unsigned int width=0x10; unsigned int width = 0x10;
if(nohex) if(nohex)
/* without the hex output, we can fit more on screen */ /* without the hex output, we can fit more on screen */
@ -54,30 +54,32 @@ void dump(const char *text,
fprintf(stream, "%s, %10.10ld bytes (0x%8.8lx)\n", fprintf(stream, "%s, %10.10ld bytes (0x%8.8lx)\n",
text, (long)size, (long)size); text, (long)size, (long)size);
for(i=0; i<size; i+= width) { for(i = 0; i<size; i += width) {
fprintf(stream, "%4.4lx: ", (long)i); fprintf(stream, "%4.4lx: ", (long)i);
if(!nohex) { if(!nohex) {
/* hex not disabled, show it */ /* hex not disabled, show it */
for(c = 0; c < width; c++) for(c = 0; c < width; c++)
if(i+c < size) if(i + c < size)
fprintf(stream, "%02x ", ptr[i+c]); fprintf(stream, "%02x ", ptr[i + c]);
else else
fputs(" ", stream); fputs(" ", stream);
} }
for(c = 0; (c < width) && (i+c < size); c++) { for(c = 0; (c < width) && (i + c < size); c++) {
/* check for 0D0A; if found, skip past and start a new line of output */ /* check for 0D0A; if found, skip past and start a new line of output */
if(nohex && (i+c+1 < size) && ptr[i+c]==0x0D && ptr[i+c+1]==0x0A) { if(nohex && (i + c + 1 < size) && ptr[i + c] == 0x0D &&
i+=(c+2-width); ptr[i + c + 1] == 0x0A) {
i += (c + 2 - width);
break; break;
} }
fprintf(stream, "%c", fprintf(stream, "%c",
(ptr[i+c]>=0x20) && (ptr[i+c]<0x80)?ptr[i+c]:'.'); (ptr[i + c] >= 0x20) && (ptr[i + c]<0x80)?ptr[i + c]:'.');
/* check again for 0D0A, to avoid an extra \n if it's at width */ /* check again for 0D0A, to avoid an extra \n if it's at width */
if(nohex && (i+c+2 < size) && ptr[i+c+1]==0x0D && ptr[i+c+2]==0x0A) { if(nohex && (i + c + 2 < size) && ptr[i + c + 1] == 0x0D &&
i+=(c+3-width); ptr[i + c + 2] == 0x0A) {
i += (c + 3 - width);
break; break;
} }
} }
@ -204,7 +206,7 @@ int main(void)
else { else {
/* Note that on some platforms 'timeout' may be modified by select(). /* Note that on some platforms 'timeout' may be modified by select().
If you need access to the original value save a copy beforehand. */ If you need access to the original value save a copy beforehand. */
rc = select(maxfd+1, &fdread, &fdwrite, &fdexcep, &timeout); rc = select(maxfd + 1, &fdread, &fdwrite, &fdexcep, &timeout);
} }
switch(rc) { switch(rc) {

View File

@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___ * | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____| * \___|\___/|_| \_\_____|
* *
* Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al. * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, et al.
* *
* This software is licensed as described in the file COPYING, which * This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms * you should have received as part of this distribution. The terms
@ -119,7 +119,7 @@ int main(void)
else { else {
/* Note that on some platforms 'timeout' may be modified by select(). /* Note that on some platforms 'timeout' may be modified by select().
If you need access to the original value save a copy beforehand. */ If you need access to the original value save a copy beforehand. */
rc = select(maxfd+1, &fdread, &fdwrite, &fdexcep, &timeout); rc = select(maxfd + 1, &fdread, &fdwrite, &fdexcep, &timeout);
} }
switch(rc) { switch(rc) {

View File

@ -0,0 +1,171 @@
/***************************************************************************
* _ _ ____ _
* Project ___| | | | _ \| |
* / __| | | | |_) | |
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
* Copyright (C) 1998 - 2017, 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.haxx.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.
*
***************************************************************************/
/* <DESC>
* using the multi interface to do a multipart formpost without blocking
* </DESC>
*/
#include <stdio.h>
#include <string.h>
#include <sys/time.h>
#include <curl/curl.h>
int main(void)
{
CURL *curl;
CURLM *multi_handle;
int still_running;
struct curl_httppost *formpost = NULL;
struct curl_httppost *lastptr = NULL;
struct curl_slist *headerlist = NULL;
static const char buf[] = "Expect:";
/* Fill in the file upload field. This makes libcurl load data from
the given file name when curl_easy_perform() is called. */
curl_formadd(&formpost,
&lastptr,
CURLFORM_COPYNAME, "sendfile",
CURLFORM_FILE, "postit2.c",
CURLFORM_END);
/* Fill in the filename field */
curl_formadd(&formpost,
&lastptr,
CURLFORM_COPYNAME, "filename",
CURLFORM_COPYCONTENTS, "postit2.c",
CURLFORM_END);
/* Fill in the submit field too, even if this is rarely needed */
curl_formadd(&formpost,
&lastptr,
CURLFORM_COPYNAME, "submit",
CURLFORM_COPYCONTENTS, "send",
CURLFORM_END);
curl = curl_easy_init();
multi_handle = curl_multi_init();
/* initialize custom header list (stating that Expect: 100-continue is not
wanted */
headerlist = curl_slist_append(headerlist, buf);
if(curl && multi_handle) {
/* what URL that receives this POST */
curl_easy_setopt(curl, CURLOPT_URL, "http://www.example.com/upload.cgi");
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headerlist);
curl_easy_setopt(curl, CURLOPT_HTTPPOST, formpost);
curl_multi_add_handle(multi_handle, curl);
curl_multi_perform(multi_handle, &still_running);
do {
struct timeval timeout;
int rc; /* select() return code */
CURLMcode mc; /* curl_multi_fdset() return code */
fd_set fdread;
fd_set fdwrite;
fd_set fdexcep;
int maxfd = -1;
long curl_timeo = -1;
FD_ZERO(&fdread);
FD_ZERO(&fdwrite);
FD_ZERO(&fdexcep);
/* set a suitable timeout to play around with */
timeout.tv_sec = 1;
timeout.tv_usec = 0;
curl_multi_timeout(multi_handle, &curl_timeo);
if(curl_timeo >= 0) {
timeout.tv_sec = curl_timeo / 1000;
if(timeout.tv_sec > 1)
timeout.tv_sec = 1;
else
timeout.tv_usec = (curl_timeo % 1000) * 1000;
}
/* get file descriptors from the transfers */
mc = curl_multi_fdset(multi_handle, &fdread, &fdwrite, &fdexcep, &maxfd);
if(mc != CURLM_OK) {
fprintf(stderr, "curl_multi_fdset() failed, code %d.\n", mc);
break;
}
/* On success the value of maxfd is guaranteed to be >= -1. We call
select(maxfd + 1, ...); specially in case of (maxfd == -1) there are
no fds ready yet so we call select(0, ...) --or Sleep() on Windows--
to sleep 100ms, which is the minimum suggested value in the
curl_multi_fdset() doc. */
if(maxfd == -1) {
#ifdef _WIN32
Sleep(100);
rc = 0;
#else
/* Portable sleep for platforms other than Windows. */
struct timeval wait = { 0, 100 * 1000 }; /* 100ms */
rc = select(0, NULL, NULL, NULL, &wait);
#endif
}
else {
/* Note that on some platforms 'timeout' may be modified by select().
If you need access to the original value save a copy beforehand. */
rc = select(maxfd + 1, &fdread, &fdwrite, &fdexcep, &timeout);
}
switch(rc) {
case -1:
/* select error */
break;
case 0:
default:
/* timeout or readable/writable sockets */
printf("perform!\n");
curl_multi_perform(multi_handle, &still_running);
printf("running: %d!\n", still_running);
break;
}
} while(still_running);
curl_multi_cleanup(multi_handle);
/* always cleanup */
curl_easy_cleanup(curl);
/* then cleanup the formpost chain */
curl_formfree(formpost);
/* free slist */
curl_slist_free_all(headerlist);
}
return 0;
}

View File

@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___ * | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____| * \___|\___/|_| \_\_____|
* *
* Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al. * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, et al.
* *
* This software is licensed as described in the file COPYING, which * This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms * you should have received as part of this distribution. The terms
@ -37,47 +37,43 @@ int main(void)
CURLM *multi_handle; CURLM *multi_handle;
int still_running; int still_running;
struct curl_httppost *formpost=NULL; curl_mime *form = NULL;
struct curl_httppost *lastptr=NULL; curl_mimepart *field = NULL;
struct curl_slist *headerlist=NULL; struct curl_slist *headerlist = NULL;
static const char buf[] = "Expect:"; static const char buf[] = "Expect:";
/* Fill in the file upload field. This makes libcurl load data from
the given file name when curl_easy_perform() is called. */
curl_formadd(&formpost,
&lastptr,
CURLFORM_COPYNAME, "sendfile",
CURLFORM_FILE, "postit2.c",
CURLFORM_END);
/* Fill in the filename field */
curl_formadd(&formpost,
&lastptr,
CURLFORM_COPYNAME, "filename",
CURLFORM_COPYCONTENTS, "postit2.c",
CURLFORM_END);
/* Fill in the submit field too, even if this is rarely needed */
curl_formadd(&formpost,
&lastptr,
CURLFORM_COPYNAME, "submit",
CURLFORM_COPYCONTENTS, "send",
CURLFORM_END);
curl = curl_easy_init(); curl = curl_easy_init();
multi_handle = curl_multi_init(); multi_handle = curl_multi_init();
/* initialize custom header list (stating that Expect: 100-continue is not
wanted */
headerlist = curl_slist_append(headerlist, buf);
if(curl && multi_handle) { if(curl && multi_handle) {
/* Create the form */
form = curl_mime_init(curl);
/* Fill in the file upload field */
field = curl_mime_addpart(form);
curl_mime_name(field, "sendfile");
curl_mime_filedata(field, "multi-post.c");
/* Fill in the filename field */
field = curl_mime_addpart(form);
curl_mime_name(field, "filename");
curl_mime_data(field, "multi-post.c", CURL_ZERO_TERMINATED);
/* Fill in the submit field too, even if this is rarely needed */
field = curl_mime_addpart(form);
curl_mime_name(field, "submit");
curl_mime_data(field, "send", CURL_ZERO_TERMINATED);
/* initialize custom header list (stating that Expect: 100-continue is not
wanted */
headerlist = curl_slist_append(headerlist, buf);
/* what URL that receives this POST */ /* what URL that receives this POST */
curl_easy_setopt(curl, CURLOPT_URL, "http://www.example.com/upload.cgi"); curl_easy_setopt(curl, CURLOPT_URL, "http://www.example.com/upload.cgi");
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L); curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headerlist); curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headerlist);
curl_easy_setopt(curl, CURLOPT_HTTPPOST, formpost); curl_easy_setopt(curl, CURLOPT_MIMEPOST, form);
curl_multi_add_handle(multi_handle, curl); curl_multi_add_handle(multi_handle, curl);
@ -139,7 +135,7 @@ int main(void)
else { else {
/* Note that on some platforms 'timeout' may be modified by select(). /* Note that on some platforms 'timeout' may be modified by select().
If you need access to the original value save a copy beforehand. */ If you need access to the original value save a copy beforehand. */
rc = select(maxfd+1, &fdread, &fdwrite, &fdexcep, &timeout); rc = select(maxfd + 1, &fdread, &fdwrite, &fdexcep, &timeout);
} }
switch(rc) { switch(rc) {
@ -161,8 +157,8 @@ int main(void)
/* always cleanup */ /* always cleanup */
curl_easy_cleanup(curl); curl_easy_cleanup(curl);
/* then cleanup the formpost chain */ /* then cleanup the form */
curl_formfree(formpost); curl_mime_free(form);
/* free slist */ /* free slist */
curl_slist_free_all(headerlist); curl_slist_free_all(headerlist);

View File

@ -74,7 +74,7 @@ int main(int argc, char **argv)
/* Must initialize libcurl before any threads are started */ /* Must initialize libcurl before any threads are started */
curl_global_init(CURL_GLOBAL_ALL); curl_global_init(CURL_GLOBAL_ALL);
for(i=0; i< NUMT; i++) { for(i = 0; i< NUMT; i++) {
error = pthread_create(&tid[i], error = pthread_create(&tid[i],
NULL, /* default attributes please */ NULL, /* default attributes please */
pull_one_url, pull_one_url,
@ -86,7 +86,7 @@ int main(int argc, char **argv)
} }
/* now wait for all threads to terminate */ /* now wait for all threads to terminate */
for(i=0; i< NUMT; i++) { for(i = 0; i< NUMT; i++) {
error = pthread_join(tid[i], NULL); error = pthread_join(tid[i], NULL);
fprintf(stderr, "Thread %d terminated\n", i); fprintf(stderr, "Thread %d terminated\n", i);
} }

View File

@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___ * | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____| * \___|\___/|_| \_\_____|
* *
* Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al. * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, et al.
* *
* This software is licensed as described in the file COPYING, which * This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms * you should have received as part of this distribution. The terms
@ -50,7 +50,7 @@ void handle_error(const char *file, int lineno, const char *msg)
} }
/* This array will store all of the mutexes available to OpenSSL. */ /* This array will store all of the mutexes available to OpenSSL. */
static MUTEX_TYPE *mutex_buf= NULL; static MUTEX_TYPE *mutex_buf = NULL;
static void locking_function(int mode, int n, const char *file, int line) static void locking_function(int mode, int n, const char *file, int line)
{ {

View File

@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___ * | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____| * \___|\___/|_| \_\_____|
* *
* Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al. * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, et al.
* *
* This software is licensed as described in the file COPYING, which * This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms * you should have received as part of this distribution. The terms
@ -144,7 +144,7 @@ int main(void)
else { else {
/* Note that on some platforms 'timeout' may be modified by select(). /* Note that on some platforms 'timeout' may be modified by select().
If you need access to the original value save a copy beforehand. */ If you need access to the original value save a copy beforehand. */
rc = select(maxfd+1, &fdread, &fdwrite, &fdexcep, &timeout); rc = select(maxfd + 1, &fdread, &fdwrite, &fdexcep, &timeout);
} }
if(tvdiff(tvnow(), mp_start) > MULTI_PERFORM_HANG_TIMEOUT) { if(tvdiff(tvnow(), mp_start) > MULTI_PERFORM_HANG_TIMEOUT) {

View File

@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___ * | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____| * \___|\___/|_| \_\_____|
* *
* Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al. * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, et al.
* *
* This software is licensed as described in the file COPYING, which * This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms * you should have received as part of this distribution. The terms
@ -20,36 +20,45 @@
* *
***************************************************************************/ ***************************************************************************/
/* <DESC> /* <DESC>
* An example source code that issues a HTTP POST and we provide the actual * Issue an HTTP POST and provide the data through the read callback.
* data through a read callback.
* </DESC> * </DESC>
*/ */
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
#include <curl/curl.h> #include <curl/curl.h>
static const char data[]="this is what we post to the silly web server"; /* silly test data to POST */
static const char data[]="Lorem ipsum dolor sit amet, consectetur adipiscing "
"elit. Sed vel urna neque. Ut quis leo metus. Quisque eleifend, ex at "
"laoreet rhoncus, odio ipsum semper metus, at tempus ante urna in mauris. "
"Suspendisse ornare tempor venenatis. Ut dui neque, pellentesque a varius "
"eget, mattis vitae ligula. Fusce ut pharetra est. Ut ullamcorper mi ac "
"sollicitudin semper. Praesent sit amet tellus varius, posuere nulla non, "
"rhoncus ipsum.";
struct WriteThis { struct WriteThis {
const char *readptr; const char *readptr;
long sizeleft; size_t sizeleft;
}; };
static size_t read_callback(void *ptr, size_t size, size_t nmemb, void *userp) static size_t read_callback(void *dest, size_t size, size_t nmemb, void *userp)
{ {
struct WriteThis *pooh = (struct WriteThis *)userp; struct WriteThis *wt = (struct WriteThis *)userp;
size_t buffer_size = size*nmemb;
if(size*nmemb < 1) if(wt->sizeleft) {
return 0; /* copy as much as possible from the source to the destination */
size_t copy_this_much = wt->sizeleft;
if(copy_this_much > buffer_size)
copy_this_much = buffer_size;
memcpy(dest, wt->readptr, copy_this_much);
if(pooh->sizeleft) { wt->readptr += copy_this_much;
*(char *)ptr = pooh->readptr[0]; /* copy one single byte */ wt->sizeleft -= copy_this_much;
pooh->readptr++; /* advance pointer */ return copy_this_much; /* we copied this many bytes */
pooh->sizeleft--; /* less data left */
return 1; /* we return 1 byte at a time! */
} }
return 0; /* no more data left to deliver */ return 0; /* no more data left to deliver */
} }
int main(void) int main(void)
@ -57,10 +66,10 @@ int main(void)
CURL *curl; CURL *curl;
CURLcode res; CURLcode res;
struct WriteThis pooh; struct WriteThis wt;
pooh.readptr = data; wt.readptr = data;
pooh.sizeleft = (long)strlen(data); wt.sizeleft = strlen(data);
/* In windows, this will init the winsock stuff */ /* In windows, this will init the winsock stuff */
res = curl_global_init(CURL_GLOBAL_DEFAULT); res = curl_global_init(CURL_GLOBAL_DEFAULT);
@ -75,7 +84,7 @@ int main(void)
curl = curl_easy_init(); curl = curl_easy_init();
if(curl) { if(curl) {
/* First set the URL that is about to receive our POST. */ /* First set the URL that is about to receive our POST. */
curl_easy_setopt(curl, CURLOPT_URL, "http://example.com/index.cgi"); curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/index.cgi");
/* Now specify we want to POST data */ /* Now specify we want to POST data */
curl_easy_setopt(curl, CURLOPT_POST, 1L); curl_easy_setopt(curl, CURLOPT_POST, 1L);
@ -84,7 +93,7 @@ int main(void)
curl_easy_setopt(curl, CURLOPT_READFUNCTION, read_callback); curl_easy_setopt(curl, CURLOPT_READFUNCTION, read_callback);
/* pointer to pass to our read function */ /* pointer to pass to our read function */
curl_easy_setopt(curl, CURLOPT_READDATA, &pooh); curl_easy_setopt(curl, CURLOPT_READDATA, &wt);
/* get verbose debug output please */ /* get verbose debug output please */
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L); curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
@ -108,7 +117,7 @@ int main(void)
#else #else
/* Set the expected POST size. If you want to POST large amounts of data, /* Set the expected POST size. If you want to POST large amounts of data,
consider CURLOPT_POSTFIELDSIZE_LARGE */ consider CURLOPT_POSTFIELDSIZE_LARGE */
curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, pooh.sizeleft); curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, (long)wt.sizeleft);
#endif #endif
#ifdef DISABLE_EXPECT #ifdef DISABLE_EXPECT

View File

@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___ * | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____| * \___|\___/|_| \_\_____|
* *
* Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al. * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, et al.
* *
* This software is licensed as described in the file COPYING, which * This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms * you should have received as part of this distribution. The terms
@ -58,7 +58,7 @@ int main(void)
CURL *curl; CURL *curl;
CURLcode res; CURLcode res;
struct MemoryStruct chunk; struct MemoryStruct chunk;
static const char *postthis="Field=1&Field=2&Field=3"; static const char *postthis = "Field=1&Field=2&Field=3";
chunk.memory = malloc(1); /* will be grown as needed by realloc above */ chunk.memory = malloc(1); /* will be grown as needed by realloc above */
chunk.size = 0; /* no data at this point */ chunk.size = 0; /* no data at this point */

View File

@ -0,0 +1,107 @@
/***************************************************************************
* _ _ ____ _
* Project ___| | | | _ \| |
* / __| | | | |_) | |
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
* Copyright (C) 1998 - 2017, 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.haxx.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.
*
***************************************************************************/
/* <DESC>
* HTTP Multipart formpost with file upload and two additional parts.
* </DESC>
*/
/* Example code that uploads a file name 'foo' to a remote script that accepts
* "HTML form based" (as described in RFC1738) uploads using HTTP POST.
*
* The imaginary form we'll fill in looks like:
*
* <form method="post" enctype="multipart/form-data" action="examplepost.cgi">
* Enter file: <input type="file" name="sendfile" size="40">
* Enter file name: <input type="text" name="filename" size="30">
* <input type="submit" value="send" name="submit">
* </form>
*
* This exact source code has not been verified to work.
*/
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>
int main(int argc, char *argv[])
{
CURL *curl;
CURLcode res;
struct curl_httppost *formpost = NULL;
struct curl_httppost *lastptr = NULL;
struct curl_slist *headerlist = NULL;
static const char buf[] = "Expect:";
curl_global_init(CURL_GLOBAL_ALL);
/* Fill in the file upload field */
curl_formadd(&formpost,
&lastptr,
CURLFORM_COPYNAME, "sendfile",
CURLFORM_FILE, "postit2.c",
CURLFORM_END);
/* Fill in the filename field */
curl_formadd(&formpost,
&lastptr,
CURLFORM_COPYNAME, "filename",
CURLFORM_COPYCONTENTS, "postit2.c",
CURLFORM_END);
/* Fill in the submit field too, even if this is rarely needed */
curl_formadd(&formpost,
&lastptr,
CURLFORM_COPYNAME, "submit",
CURLFORM_COPYCONTENTS, "send",
CURLFORM_END);
curl = curl_easy_init();
/* initialize custom header list (stating that Expect: 100-continue is not
wanted */
headerlist = curl_slist_append(headerlist, buf);
if(curl) {
/* what URL that receives this POST */
curl_easy_setopt(curl, CURLOPT_URL, "http://example.com/examplepost.cgi");
if((argc == 2) && (!strcmp(argv[1], "noexpectheader")))
/* only disable 100-continue header if explicitly requested */
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headerlist);
curl_easy_setopt(curl, CURLOPT_HTTPPOST, formpost);
/* Perform the request, res will get the return code */
res = curl_easy_perform(curl);
/* Check for errors */
if(res != CURLE_OK)
fprintf(stderr, "curl_easy_perform() failed: %s\n",
curl_easy_strerror(res));
/* always cleanup */
curl_easy_cleanup(curl);
/* then cleanup the formpost chain */
curl_formfree(formpost);
/* free slist */
curl_slist_free_all(headerlist);
}
return 0;
}

View File

@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___ * | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____| * \___|\___/|_| \_\_____|
* *
* Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al. * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, et al.
* *
* This software is licensed as described in the file COPYING, which * This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms * you should have received as part of this distribution. The terms
@ -47,46 +47,42 @@ int main(int argc, char *argv[])
CURL *curl; CURL *curl;
CURLcode res; CURLcode res;
struct curl_httppost *formpost=NULL; curl_mime *form = NULL;
struct curl_httppost *lastptr=NULL; curl_mimepart *field = NULL;
struct curl_slist *headerlist=NULL; struct curl_slist *headerlist = NULL;
static const char buf[] = "Expect:"; static const char buf[] = "Expect:";
curl_global_init(CURL_GLOBAL_ALL); curl_global_init(CURL_GLOBAL_ALL);
/* Fill in the file upload field */
curl_formadd(&formpost,
&lastptr,
CURLFORM_COPYNAME, "sendfile",
CURLFORM_FILE, "postit2.c",
CURLFORM_END);
/* Fill in the filename field */
curl_formadd(&formpost,
&lastptr,
CURLFORM_COPYNAME, "filename",
CURLFORM_COPYCONTENTS, "postit2.c",
CURLFORM_END);
/* Fill in the submit field too, even if this is rarely needed */
curl_formadd(&formpost,
&lastptr,
CURLFORM_COPYNAME, "submit",
CURLFORM_COPYCONTENTS, "send",
CURLFORM_END);
curl = curl_easy_init(); curl = curl_easy_init();
/* initialize custom header list (stating that Expect: 100-continue is not
wanted */
headerlist = curl_slist_append(headerlist, buf);
if(curl) { if(curl) {
/* Create the form */
form = curl_mime_init(curl);
/* Fill in the file upload field */
field = curl_mime_addpart(form);
curl_mime_name(field, "sendfile");
curl_mime_filedata(field, "postit2.c");
/* Fill in the filename field */
field = curl_mime_addpart(form);
curl_mime_name(field, "filename");
curl_mime_data(field, "postit2.c", CURL_ZERO_TERMINATED);
/* Fill in the submit field too, even if this is rarely needed */
field = curl_mime_addpart(form);
curl_mime_name(field, "submit");
curl_mime_data(field, "send", CURL_ZERO_TERMINATED);
/* initialize custom header list (stating that Expect: 100-continue is not
wanted */
headerlist = curl_slist_append(headerlist, buf);
/* what URL that receives this POST */ /* what URL that receives this POST */
curl_easy_setopt(curl, CURLOPT_URL, "http://example.com/examplepost.cgi"); curl_easy_setopt(curl, CURLOPT_URL, "http://example.com/examplepost.cgi");
if((argc == 2) && (!strcmp(argv[1], "noexpectheader"))) if((argc == 2) && (!strcmp(argv[1], "noexpectheader")))
/* only disable 100-continue header if explicitly requested */ /* only disable 100-continue header if explicitly requested */
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headerlist); curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headerlist);
curl_easy_setopt(curl, CURLOPT_HTTPPOST, formpost); curl_easy_setopt(curl, CURLOPT_MIMEPOST, form);
/* Perform the request, res will get the return code */ /* Perform the request, res will get the return code */
res = curl_easy_perform(curl); res = curl_easy_perform(curl);
@ -98,8 +94,8 @@ int main(int argc, char *argv[])
/* always cleanup */ /* always cleanup */
curl_easy_cleanup(curl); curl_easy_cleanup(curl);
/* then cleanup the formpost chain */ /* then cleanup the form */
curl_formfree(formpost); curl_mime_free(form);
/* free slist */ /* free slist */
curl_slist_free_all(headerlist); curl_slist_free_all(headerlist);
} }

Some files were not shown because too many files have changed in this diff Show More