From 7faac48fb9ba890b55ca41ce620c93045e36d301 Mon Sep 17 00:00:00 2001 From: "Niall Douglas (s [underscore] sourceforge {at} nedprod [dot] com)" Date: Tue, 15 Dec 2020 18:36:15 +0000 Subject: [PATCH] Build and packaging fixes for curl 7.74 merge. --- .gitattributes | 105 ++- CMake/Config.cmake.in | 7 +- CMake/HunterGate.cmake | 41 +- CMakeLists.txt | 53 +- lib/CMakeLists.txt | 22 +- projects/Windows/VC6/curl-all.dsw | 88 +- projects/Windows/VC6/lib/libcurl.dsw | 58 +- projects/Windows/VC6/src/curl.dsw | 58 +- src/macos/MACINSTALL.TXT | 39 +- winbuild/MakefileBuild.vc | 1300 +++++++++++++------------- 10 files changed, 973 insertions(+), 798 deletions(-) diff --git a/.gitattributes b/.gitattributes index cd3fde9545c4..ee812ad44190 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,8 +1,97 @@ -*.dsw -crlf -buildconf eol=lf -configure.ac eol=lf -*.m4 eol=lf -*.in eol=lf -*.am eol=lf -*.sh eol=lf -*.[ch] whitespace=tab-in-indent +* text=auto !eol svneol=native#text/plain +*.gitattributes text svneol=native#text/plain + +# Scriptish formats +*.bat text svneol=native#text/plain +*.bsh text svneol=native#text/x-beanshell +*.cgi text svneol=native#text/plain +*.cmd text svneol=native#text/plain +*.js text svneol=native#text/javascript +*.php text svneol=native#text/x-php +*.pl text svneol=native#text/x-perl +*.pm text svneol=native#text/x-perl +*.py text svneol=native#text/x-python +*.sh eol=lf svneol=LF#text/x-sh +configure eol=lf svneol=LF#text/x-sh + +# Image formats +*.bmp binary svneol=unset#image/bmp +*.gif binary svneol=unset#image/gif +*.ico binary svneol=unset#image/ico +*.jpeg binary svneol=unset#image/jpeg +*.jpg binary svneol=unset#image/jpeg +*.png binary svneol=unset#image/png +*.tif binary svneol=unset#image/tiff +*.tiff binary svneol=unset#image/tiff +*.svg text svneol=native#image/svg%2Bxml + +# Data formats +*.pdf binary svneol=unset#application/pdf +*.avi binary svneol=unset#video/avi +*.doc binary svneol=unset#application/msword +*.dsp text svneol=crlf#text/plain +*.dsw text svneol=crlf#text/plain +*.eps binary svneol=unset#application/postscript +*.json text svneol=native#application/json +*.gz binary svneol=unset#application/gzip +*.mov binary svneol=unset#video/quicktime +*.mp3 binary svneol=unset#audio/mpeg +*.ppt binary svneol=unset#application/vnd.ms-powerpoint +*.ps binary svneol=unset#application/postscript +*.psd binary svneol=unset#application/photoshop +*.rdf binary svneol=unset#text/rdf +*.rss text svneol=unset#text/xml +*.rtf binary svneol=unset#text/rtf +*.sln text svneol=native#text/plain +*.swf binary svneol=unset#application/x-shockwave-flash +*.tgz binary svneol=unset#application/gzip +*.vcproj text svneol=native#text/xml +*.vcxproj text svneol=native#text/xml +*.vsprops text svneol=native#text/xml +*.wav binary svneol=unset#audio/wav +*.xls binary svneol=unset#application/vnd.ms-excel +*.zip binary svneol=unset#application/zip + +# Text formats +.htaccess text svneol=native#text/plain +*.bbk text svneol=native#text/xml +*.cmake text svneol=native#text/plain +*.css text svneol=native#text/css +*.dtd text svneol=native#text/xml +*.htm text svneol=native#text/html +*.html text svneol=native#text/html +*.ini text svneol=native#text/plain +*.log text svneol=native#text/plain +*.mak text svneol=native#text/plain +*.qbk text svneol=native#text/plain +*.rst text svneol=native#text/plain +*.sql text svneol=native#text/x-sql +*.txt text svneol=native#text/plain +*.xhtml text svneol=native#text/xhtml%2Bxml +*.xml text svneol=native#text/xml +*.xsd text svneol=native#text/xml +*.xsl text svneol=native#text/xml +*.xslt text svneol=native#text/xml +*.xul text svneol=native#text/xul +*.yml text svneol=native#text/plain +boost-no-inspect text svneol=native#text/plain +CHANGES text svneol=native#text/plain +COPYING text svneol=native#text/plain +INSTALL text svneol=native#text/plain +Jamfile text svneol=native#text/plain +Jamroot text svneol=native#text/plain +Jamfile.v2 text svneol=native#text/plain +Jamrules text svneol=native#text/plain +Makefile* text svneol=native#text/plain +README text svneol=native#text/plain +TODO text svneol=native#text/plain + +# Code formats +*.c text svneol=native#text/plain +*.cpp text svneol=native#text/plain +*.h text svneol=native#text/plain +*.hpp text svneol=native#text/plain +*.ipp text svneol=native#text/plain +*.tpp text svneol=native#text/plain +*.jam text svneol=native#text/plain +*.java text svneol=native#text/plain diff --git a/CMake/Config.cmake.in b/CMake/Config.cmake.in index 6a26b9840ff8..e1eae7109671 100644 --- a/CMake/Config.cmake.in +++ b/CMake/Config.cmake.in @@ -4,9 +4,12 @@ if("@ENABLE_ARES@") find_package(c-ares CONFIG REQUIRED) endif() -if(@HAVE_ZLIB@) +if(@HAVE_LIBZ@) find_package(ZLIB CONFIG REQUIRED) endif() +if(@HAVE_ZSTD@) + find_package(zstd CONFIG REQUIRED) +endif() if(@HAVE_LIBSSH2@) find_package(Libssh2 CONFIG REQUIRED) endif() @@ -18,7 +21,5 @@ if(@HAVE_LIBCRYPTO@) endif() endif() -find_package(intsizeof CONFIG REQUIRED) - include("${CMAKE_CURRENT_LIST_DIR}/@targets_export_name@.cmake") check_required_components("@PROJECT_NAME@") diff --git a/CMake/HunterGate.cmake b/CMake/HunterGate.cmake index 71479d18f6b0..9c82fcff6986 100644 --- a/CMake/HunterGate.cmake +++ b/CMake/HunterGate.cmake @@ -1,4 +1,4 @@ -# Copyright (c) 2013-2018, Ruslan Baratov +# Copyright (c) 2013-2019, Ruslan Baratov # All rights reserved. # # Redistribution and use in source and binary forms, with or without @@ -60,7 +60,7 @@ option(HUNTER_STATUS_PRINT "Print working status" ON) option(HUNTER_STATUS_DEBUG "Print a lot info" OFF) option(HUNTER_TLS_VERIFY "Enable/disable TLS certificate checking on downloads" ON) -set(HUNTER_WIKI "https://github.com/ruslo/hunter/wiki") +set(HUNTER_ERROR_PAGE "https://docs.hunter.sh/en/latest/reference/errors") function(hunter_gate_status_print) if(HUNTER_STATUS_PRINT OR HUNTER_STATUS_DEBUG) @@ -79,9 +79,9 @@ function(hunter_gate_status_debug) endif() endfunction() -function(hunter_gate_wiki wiki_page) - message("------------------------------ WIKI -------------------------------") - message(" ${HUNTER_WIKI}/${wiki_page}") +function(hunter_gate_error_page error_page) + message("------------------------------ ERROR ------------------------------") + message(" ${HUNTER_ERROR_PAGE}/${error_page}.html") message("-------------------------------------------------------------------") message("") message(FATAL_ERROR "") @@ -94,14 +94,13 @@ function(hunter_gate_internal_error) endforeach() message("[hunter ** INTERNAL **] [Directory:${CMAKE_CURRENT_LIST_DIR}]") message("") - hunter_gate_wiki("error.internal") + hunter_gate_error_page("error.internal") endfunction() function(hunter_gate_fatal_error) - cmake_parse_arguments(hunter "" "WIKI" "" "${ARGV}") - string(COMPARE EQUAL "${hunter_WIKI}" "" have_no_wiki) - if(have_no_wiki) - hunter_gate_internal_error("Expected wiki") + cmake_parse_arguments(hunter "" "ERROR_PAGE" "" "${ARGV}") + if("${hunter_ERROR_PAGE}" STREQUAL "") + hunter_gate_internal_error("Expected ERROR_PAGE") endif() message("") foreach(x ${hunter_UNPARSED_ARGUMENTS}) @@ -109,11 +108,11 @@ function(hunter_gate_fatal_error) endforeach() message("[hunter ** FATAL ERROR **] [Directory:${CMAKE_CURRENT_LIST_DIR}]") message("") - hunter_gate_wiki("${hunter_WIKI}") + hunter_gate_error_page("${hunter_ERROR_PAGE}") endfunction() function(hunter_gate_user_error) - hunter_gate_fatal_error(${ARGV} WIKI "error.incorrect.input.data") + hunter_gate_fatal_error(${ARGV} ERROR_PAGE "error.incorrect.input.data") endfunction() function(hunter_gate_self root version sha1 result) @@ -195,7 +194,7 @@ function(hunter_gate_detect_root) hunter_gate_fatal_error( "Can't detect HUNTER_ROOT" - WIKI "error.detect.hunter.root" + ERROR_PAGE "error.detect.hunter.root" ) endfunction() @@ -214,7 +213,7 @@ function(hunter_gate_download dir) "Settings:" " HUNTER_ROOT: ${HUNTER_GATE_ROOT}" " HUNTER_SHA1: ${HUNTER_GATE_SHA1}" - WIKI "error.run.install" + ERROR_PAGE "error.run.install" ) endif() string(COMPARE EQUAL "${dir}" "" is_bad) @@ -323,7 +322,11 @@ function(hunter_gate_download dir) ) if(NOT download_result EQUAL 0) - hunter_gate_internal_error("Configure project failed") + hunter_gate_internal_error( + "Configure project failed." + "To reproduce the error run: ${CMAKE_COMMAND} -H${dir} -B${build_dir} -G${CMAKE_GENERATOR} ${toolchain_arg} ${make_arg}" + "In directory ${dir}" + ) endif() hunter_gate_status_print( @@ -396,7 +399,7 @@ macro(HunterGate) hunter_gate_fatal_error( "Please set HunterGate *before* 'project' command. " "Detected project: ${PROJECT_NAME}" - WIKI "error.huntergate.before.project" + ERROR_PAGE "error.huntergate.before.project" ) endif() @@ -466,7 +469,7 @@ macro(HunterGate) "HUNTER_ROOT (${HUNTER_GATE_ROOT}) contains spaces." "Set HUNTER_ALLOW_SPACES_IN_PATH=ON to skip this error" "(Use at your own risk!)" - WIKI "error.spaces.in.hunter.root" + ERROR_PAGE "error.spaces.in.hunter.root" ) endif() endif() @@ -514,7 +517,9 @@ macro(HunterGate) hunter_gate_internal_error("${_sha1_location} not found") endif() file(READ "${_sha1_location}" _sha1_value) - string(COMPARE EQUAL "${_sha1_value}" "${HUNTER_GATE_SHA1}" _is_equal) + string(TOLOWER "${_sha1_value}" _sha1_value_lower) + string(TOLOWER "${HUNTER_GATE_SHA1}" _HUNTER_GATE_SHA1_lower) + string(COMPARE EQUAL "${_sha1_value_lower}" "${_HUNTER_GATE_SHA1_lower}" _is_equal) if(NOT _is_equal) hunter_gate_internal_error( "Short SHA1 collision:" diff --git a/CMakeLists.txt b/CMakeLists.txt index fca485b63ea9..a83e86ead696 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -47,11 +47,11 @@ include(CheckCCompilerFlag) include(CMake/HunterGate.cmake) HunterGate( - URL "https://github.com/ruslo/hunter/archive/v0.22.30.tar.gz" - SHA1 "380a7687ea63898b59a3ee6e3d7c39b1faa1aadc" + URL "https://github.com/cpp-pm/hunter/archive/v0.23.288.tar.gz" + SHA1 "6c9b2bc606d86ae31f96a62fc68f0a593024815b" ) -project( CURL C ) +project(CURL C) file(STRINGS ${CURL_SOURCE_DIR}/include/curl/curlver.h CURL_VERSION_H_CONTENTS REGEX "#define LIBCURL_VERSION( |_NUM )") string(REGEX MATCH "#define LIBCURL_VERSION \"[^\"]*" @@ -357,9 +357,11 @@ option(CMAKE_USE_OPENSSL "Use OpenSSL code. Experimental" ${openssl_default}) option(CMAKE_USE_BORINGSSL "Use BoringSSL" OFF) -collect_true(enabled_ssl_options enabled_ssl_options_count +count_true(enabled_ssl_options enabled_ssl_options_count CMAKE_USE_WINSSL CMAKE_USE_DARWINSSL + CMAKE_USE_SCHANNEL + CMAKE_USE_SECTRANSP CMAKE_USE_OPENSSL CMAKE_USE_MBEDTLS CMAKE_USE_BEARSSL @@ -680,14 +682,15 @@ check_library_exists("${CURL_LIBS}" dlopen "" HAVE_DLOPEN) set(HAVE_LIBZ OFF) set(HAVE_ZLIB_H OFF) -set(HAVE_ZLIB OFF) +set(USE_ZLIB OFF) +option(CURL_ZLIB "Set to ON to enable building curl with zlib support." ON) if(CURL_ZLIB) hunter_add_package(ZLIB) find_package(ZLIB CONFIG REQUIRED) if(ZLIB_FOUND) set(HAVE_ZLIB_H ON) - set(HAVE_ZLIB ON) set(HAVE_LIBZ ON) + set(USE_ZLIB ON) if(HUNTER_ENABLED) list(APPEND CURL_LIBS ZLIB::zlib) @@ -715,6 +718,23 @@ if(CURL_BROTLI) endif() endif() +option(CURL_ZSTD "Set to ON to enable building curl with zstd support." OFF) +set(HAVE_ZSTD OFF) +if(CURL_ZSTD) + hunter_add_package(zstd) + find_package(zstd CONFIG REQUIRED) + if(ZSTD_FOUND) + set(HAVE_ZSTD ON) + if(HUNTER_ENABLED) + list(APPEND CURL_LIBS zstd::libzstd_static) + else() + list(APPEND CURL_LIBS ${ZSTD_LIBRARIES}) + endif() + include_directories(${ZSTD_INCLUDE_DIRS}) + endif() + list(APPEND CMAKE_REQUIRED_INCLUDES ${ZSTD_INCLUDE_DIRS}) +endif() + hunter_add_package(intsizeof) find_package(intsizeof CONFIG REQUIRED) list(APPEND CURL_LIBS intsizeof::intsizeof) @@ -1611,6 +1631,27 @@ install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/include/curl" DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} FILES_MATCHING PATTERN "*.h") +include(CMakePackageConfigHelpers) +write_basic_package_version_file( + "${version_config}" + VERSION ${CURL_VERSION} + COMPATIBILITY SameMajorVersion +) + +# Use: +# * TARGETS_EXPORT_NAME +# * PROJECT_NAME +configure_package_config_file(CMake/curl-config.cmake.in + "${project_config}" + INSTALL_DESTINATION ${CURL_INSTALL_CMAKE_DIR} +) + +install( + EXPORT "${TARGETS_EXPORT_NAME}" + NAMESPACE "${PROJECT_NAME}::" + DESTINATION ${CURL_INSTALL_CMAKE_DIR} +) + install( FILES ${version_config} ${project_config} DESTINATION ${CURL_INSTALL_CMAKE_DIR} diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index 22100d5fde26..5a859f809f99 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -91,6 +91,11 @@ add_library( ${HHEADERS} ${CSOURCES} ) +add_library( + ${PROJECT_NAME}::${LIB_NAME} + ALIAS ${LIB_NAME} + ) + if(MSVC AND NOT BUILD_SHARED_LIBS) set_target_properties(${LIB_NAME} PROPERTIES STATIC_LIBRARY_FLAGS ${CMAKE_EXE_LINKER_FLAGS}) endif() @@ -133,16 +138,13 @@ target_include_directories(${LIB_NAME} INTERFACE $) install(TARGETS ${LIB_NAME} - EXPORT "${targets_export_name}" - ARCHIVE DESTINATION lib - LIBRARY DESTINATION lib - RUNTIME DESTINATION bin - INCLUDES DESTINATION "${include_install_dir}" + EXPORT ${TARGETS_EXPORT_NAME} + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} ) -install(EXPORT "${targets_export_name}" - FILE libcurl-target.cmake - NAMESPACE CURL:: - DESTINATION lib/cmake/CURL +export(TARGETS ${LIB_NAME} + APPEND FILE ${PROJECT_BINARY_DIR}/libcurl-target.cmake + NAMESPACE ${PROJECT_NAME}:: ) - diff --git a/projects/Windows/VC6/curl-all.dsw b/projects/Windows/VC6/curl-all.dsw index a718e59a9eb2..bd0e96ebfe38 100644 --- a/projects/Windows/VC6/curl-all.dsw +++ b/projects/Windows/VC6/curl-all.dsw @@ -1,44 +1,44 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "libcurl"=".\lib\libcurl.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "curl"=".\src\curl.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name libcurl - End Project Dependency -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "libcurl"=".\lib\libcurl.dsp" - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "curl"=".\src\curl.dsp" - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ + Begin Project Dependency + Project_Dep_Name libcurl + End Project Dependency +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/projects/Windows/VC6/lib/libcurl.dsw b/projects/Windows/VC6/lib/libcurl.dsw index e07624def483..b4a187f89cde 100644 --- a/projects/Windows/VC6/lib/libcurl.dsw +++ b/projects/Windows/VC6/lib/libcurl.dsw @@ -1,29 +1,29 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "libcurl"=".\libcurl.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "libcurl"=".\libcurl.dsp" - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/projects/Windows/VC6/src/curl.dsw b/projects/Windows/VC6/src/curl.dsw index a7adbce2658c..ba204a3f5bc0 100644 --- a/projects/Windows/VC6/src/curl.dsw +++ b/projects/Windows/VC6/src/curl.dsw @@ -1,29 +1,29 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "curl"=".\curl.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "curl"=".\curl.dsp" - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/src/macos/MACINSTALL.TXT b/src/macos/MACINSTALL.TXT index 2bab9fd3dd79..633eb4bc9deb 100644 --- a/src/macos/MACINSTALL.TXT +++ b/src/macos/MACINSTALL.TXT @@ -1 +1,38 @@ -MACOS (not MACOS X) =================== This is the first attempt at porting curl to MacOS. http, ftp, dict and telnet seems to work fine, other protocols and advanced features have not been all tested. This port is heavily based on the GUSI library from Matthias Neeracher. GUSI (Grand Unified Socket Interface) is a POSIX/Pthreads/Sockets library bringing some of the comforts of UNIX 98 to traditional MacOS. The latest GUSI release can be downloaded from sourceforge at I have also written a few functions to help port Unix applications to MacOS. These functions are part of the GUSI Extra library that can be downloaded at OpenSSL support is still experimental but I hope to deliver a version including SSL soon. curl for MacOS requires using the CodeWarrior compiler from Metrowerks. First download GUSI, GUSI Extra and curl. Access paths have been setup so that GUSI, GUSI Extra and curl directories should have the same parent directory. Follow the instructions in GUSI Extra "readme.txt" mainly the ones related to SIOUX and GUSI patches. If you do not apply these patches curl will not behave correctly. In the 'curl/src/macos' directory, decode "curl.mcp.xml.sit.hqx" (This is a stuffit binhexed file) From the CodeWarrior IDE, import 'curl/src/macos/curl.xml', adjust the access paths if required. Then you should be able to build: - the libcurl libraries for PPC and 68K. - the curl application (also available for PPC and 68K) which is the command line version of curl. If the file "tool_hugehelp.c" is missing rename "curl/src/tool_hugehelp.c.cvs" to "tool_hugehelp.c" and make sure its file type is 'TEXT' +MACOS (not MACOS X) +=================== +This is the first attempt at porting curl to MacOS. +http, ftp, dict and telnet seems to work fine, other protocols and advanced +features have not been all tested. + +This port is heavily based on the GUSI library from Matthias Neeracher. +GUSI (Grand Unified Socket Interface) is a POSIX/Pthreads/Sockets library +bringing some of the comforts of UNIX 98 to traditional MacOS. +The latest GUSI release can be downloaded from sourceforge +at + +I have also written a few functions to help port Unix applications to MacOS. +These functions are part of the GUSI Extra library that can be downloaded at + + +OpenSSL support is still experimental but I hope to deliver a version +including SSL soon. + +curl for MacOS requires using the CodeWarrior compiler from Metrowerks. + +First download GUSI, GUSI Extra and curl. Access paths have been setup so that +GUSI, GUSI Extra and curl directories should have the same parent directory. + +Follow the instructions in GUSI Extra "readme.txt" mainly the ones related to +SIOUX and GUSI patches. If you do not apply these patches curl will not behave +correctly. + +In the 'curl/src/macos' directory, decode "curl.mcp.xml.sit.hqx" (This is a +stuffit binhexed file) +From the CodeWarrior IDE, import 'curl/src/macos/curl.xml', adjust the access +paths if required. Then you should be able to build: +- the libcurl libraries for PPC and 68K. +- the curl application (also available for PPC and 68K) which is the command + line version of curl. + +If the file "tool_hugehelp.c" is missing rename "curl/src/tool_hugehelp.c.cvs" +to "tool_hugehelp.c" and make sure its file type is 'TEXT' diff --git a/winbuild/MakefileBuild.vc b/winbuild/MakefileBuild.vc index 4112b8fca3e6..b6ca6b377245 100644 --- a/winbuild/MakefileBuild.vc +++ b/winbuild/MakefileBuild.vc @@ -1,650 +1,650 @@ -#*************************************************************************** -# _ _ ____ _ -# Project ___| | | | _ \| | -# / __| | | | |_) | | -# | (__| |_| | _ <| |___ -# \___|\___/|_| \_\_____| -# -# Copyright (C) 1999 - 2020, Daniel Stenberg, , et al. -# -# This software is licensed as described in the file COPYING, which -# you should have received as part of this distribution. The terms -# are also available at https://curl.se/docs/copyright.html. -# -# You may opt to use, copy, modify, merge, publish, distribute and/or sell -# copies of the Software, and permit persons to whom the Software is -# furnished to do so, under the terms of the COPYING file. -# -# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY -# KIND, either express or implied. -# -#*************************************************************************** - -########################################################################### -# -# Makefile for building libcurl with MSVC -# -# Usage: see README.md -# -############################################################## - -CFGSET=FALSE -WINBUILD_DIR=`cd` - -# Utilities. -# If a path is required that contains characters such as space, quote the path. -MT = mt.exe -RC = rc.exe -ZIP = zip.exe - -# Allow changing C compiler via environment variable CC (default cl.exe) -# This command macro is not set by default: https://msdn.microsoft.com/en-us/library/ms933742.aspx -!If "$(CC)" == "" -CC = cl.exe -!Endif - -!IF "$(VC)"=="6" -CC_NODEBUG = $(CC) /O2 /DNDEBUG -CC_DEBUG = $(CC) /Od /Gm /Zi /D_DEBUG /GZ -CFLAGS = /I. /I../lib /I../include /nologo /W4 /GX /DWIN32 /YX /FD /c /DBUILDING_LIBCURL -!ELSE -CC_NODEBUG = $(CC) /O2 /DNDEBUG -CC_DEBUG = $(CC) /Od /D_DEBUG /RTC1 /Z7 /LDd -CFLAGS = /I. /I ../lib /I../include /nologo /W4 /EHsc /DWIN32 /FD /c /DBUILDING_LIBCURL -!ENDIF - -LFLAGS = /nologo /machine:$(MACHINE) -LNKDLL = link.exe /DLL -# Use lib.exe instead of link.exe as link.exe /lib has the following bad habits: -# - optimizing options like /opt:ref raises warnings (at least in Visual Studio 2015) -# - all (including Windows) dependencies are aggregated (as static parts) -# - link.exe /lib is not documented (anymore) at MSDN -# Instead of id: just create an archive, that contains all objects -LNKLIB = lib.exe - -CFLAGS_PDB = /Zi -LFLAGS_PDB = /incremental:no /opt:ref,icf /DEBUG - -CFLAGS_LIBCURL_STATIC = /DCURL_STATICLIB - -WIN_LIBS = ws2_32.lib wldap32.lib advapi32.lib crypt32.lib - -BASE_NAME = libcurl -BASE_NAME_DEBUG = $(BASE_NAME)_debug -BASE_NAME_STATIC = $(BASE_NAME)_a -BASE_NAME_STATIC_DEBUG = $(BASE_NAME_STATIC)_debug - -LIB_NAME_STATIC = $(BASE_NAME_STATIC).lib -LIB_NAME_STATIC_DEBUG = $(BASE_NAME_STATIC_DEBUG).lib -LIB_NAME_DLL = $(BASE_NAME).dll -LIB_NAME_IMP = $(BASE_NAME).lib -LIB_NAME_DLL_DEBUG = $(BASE_NAME_DEBUG).dll -LIB_NAME_IMP_DEBUG = $(BASE_NAME_DEBUG).lib - -PDB_NAME_STATIC = $(BASE_NAME_STATIC).pdb -PDB_NAME_STATIC_DEBUG = $(BASE_NAME_STATIC_DEBUG).pdb -PDB_NAME_DLL = $(BASE_NAME).pdb -PDB_NAME_DLL_DEBUG = $(BASE_NAME_DEBUG).pdb - -# CURL Command section -PROGRAM_NAME = curl.exe -CURL_CFLAGS = /I../lib /I../include /nologo /W4 /EHsc /DWIN32 /FD /c -CURL_LFLAGS = /out:$(DIRDIST)\bin\$(PROGRAM_NAME) /subsystem:console $(LFLAGS) -CURL_RESFLAGS = /i../include - -############################################################# -## Nothing more to do below this line! -LIBCURL_SRC_DIR = ..\lib -CURL_SRC_DIR = ..\src - -!IFNDEF WITH_DEVEL -WITH_DEVEL = ../../deps -!ENDIF -DEVEL_INCLUDE= $(WITH_DEVEL)/include -DEVEL_LIB = $(WITH_DEVEL)/lib - -!IF EXISTS("$(DEVEL_INCLUDE)") -CFLAGS = $(CFLAGS) /I"$(DEVEL_INCLUDE)" -!ENDIF -!IF EXISTS("$(DEVEL_LIB)") -LFLAGS = $(LFLAGS) "/LIBPATH:$(DEVEL_LIB)" -!ENDIF - -!IFDEF SSL_PATH -SSL_INC_DIR = $(SSL_PATH)\include -SSL_LIB_DIR = $(SSL_PATH)\lib -SSL_LFLAGS = $(SSL_LFLAGS) "/LIBPATH:$(SSL_LIB_DIR)" -!ELSE -SSL_INC_DIR=$(DEVEL_INCLUDE)\openssl -SSL_LIB_DIR=$(DEVEL_LIB) -!ENDIF - -!IF "$(WITH_SSL)"=="dll" || "$(WITH_SSL)"=="static" -!IF EXISTS("$(SSL_LIB_DIR)\libssl.lib") -SSL_LIBS = libssl.lib libcrypto.lib -!ELSE -SSL_LIBS = libeay32.lib ssleay32.lib -!ENDIF -USE_SSL = true -SSL = $(WITH_SSL) -!IF "$(WITH_SSL)"=="static" -WIN_LIBS = $(WIN_LIBS) gdi32.lib user32.lib crypt32.lib -!ENDIF -!ENDIF - -!IFDEF USE_SSL -SSL_CFLAGS = /DUSE_OPENSSL /I"$(SSL_INC_DIR)" -!IF EXISTS("$(SSL_INC_DIR)\is_boringssl.h") -SSL_CFLAGS = $(SSL_CFLAGS) /DHAVE_BORINGSSL -!ENDIF -!IF "$(ENABLE_OPENSSL_AUTO_LOAD_CONFIG)"=="false" -SSL_CFLAGS = $(SSL_CFLAGS) /DCURL_DISABLE_OPENSSL_AUTO_LOAD_CONFIG -!ENDIF -!ENDIF - - -!IFDEF NGHTTP2_PATH -NGHTTP2_INC_DIR = $(NGHTTP2_PATH)\include -NGHTTP2_LIB_DIR = $(NGHTTP2_PATH)\lib -NGHTTP2_LFLAGS = $(NGHTTP2_LFLAGS) "/LIBPATH:$(NGHTTP2_LIB_DIR)" -!ELSE -NGHTTP2_INC_DIR = $(DEVEL_INCLUDE) -NGHTTP2_LIB_DIR = $(DEVEL_LIB) -!ENDIF - -!IF "$(WITH_NGHTTP2)"=="dll" -NGHTTP2_CFLAGS = /DUSE_NGHTTP2 /I"$(NGHTTP2_INC_DIR)" -NGHTTP2_LIBS = nghttp2.lib -!ELSEIF "$(WITH_NGHTTP2)"=="static" -NGHTTP2_CFLAGS = /DUSE_NGHTTP2 /DNGHTTP2_STATICLIB /I"$(NGHTTP2_INC_DIR)" -NGHTTP2_LIBS = nghttp2_static.lib -!ENDIF - - -!IFDEF MBEDTLS_PATH -MBEDTLS_INC_DIR = $(MBEDTLS_PATH)\include -MBEDTLS_LIB_DIR = $(MBEDTLS_PATH)\lib -MBEDTLS_LFLAGS = $(MBEDTLS_LFLAGS) "/LIBPATH:$(MBEDTLS_LIB_DIR)" -!ELSE -MBEDTLS_INC_DIR = $(DEVEL_INCLUDE) -MBEDTLS_LIB_DIR = $(DEVEL_LIB) -!ENDIF - -!IF "$(WITH_MBEDTLS)"=="dll" || "$(WITH_MBEDTLS)"=="static" -USE_MBEDTLS = true -MBEDTLS = $(WITH_MBEDTLS) -MBEDTLS_CFLAGS = /DUSE_MBEDTLS /I"$(MBEDTLS_INC_DIR)" -MBEDTLS_LIBS = mbedtls.lib mbedcrypto.lib mbedx509.lib -!ENDIF - - -!IFDEF CARES_PATH -CARES_INC_DIR = $(CARES_PATH)\include -CARES_LIB_DIR = $(CARES_PATH)\lib -CARES_LFLAGS = $(CARES_LFLAGS) "/LIBPATH:$(CARES_LIB_DIR)" -!ELSE -CARES_INC_DIR = $(DEVEL_INCLUDE)/cares -CARES_LIB_DIR = $(DEVEL_LIB) -!ENDIF - -!IF "$(WITH_CARES)"=="dll" -!IF "$(DEBUG)"=="yes" -CARES_LIBS = caresd.lib -!ELSE -CARES_LIBS = cares.lib -!ENDIF -USE_CARES = true -CARES = dll -!ELSEIF "$(WITH_CARES)"=="static" -!IF "$(DEBUG)"=="yes" -CARES_LIBS = libcaresd.lib -!ELSE -CARES_LIBS = libcares.lib -!ENDIF -USE_CARES = true -CARES = static -!ENDIF - -!IFDEF USE_CARES -CARES_CFLAGS = /DUSE_ARES /I"$(CARES_INC_DIR)" -!IF "$(CARES)"=="static" -CARES_CFLAGS = $(CARES_CFLAGS) /DCARES_STATICLIB -!ENDIF -!ENDIF - - -!IFDEF ZLIB_PATH -ZLIB_INC_DIR = $(ZLIB_PATH)\include -ZLIB_LIB_DIR = $(ZLIB_PATH)\lib -ZLIB_LFLAGS = $(ZLIB_LFLAGS) "/LIBPATH:$(ZLIB_LIB_DIR)" -!ELSE -ZLIB_INC_DIR = $(DEVEL_INCLUDE) -ZLIB_LIB_DIR = $(DEVEL_LIB) -!ENDIF - -# Depending on how zlib is built the libraries have different names, we -# try to handle them all. -!IF "$(WITH_ZLIB)"=="dll" -!IF EXISTS("$(ZLIB_LIB_DIR)\zlibwapi.lib") -ZLIB_LIBS = zlibwapi.lib -ADDITIONAL_ZLIB_CFLAGS = /DZLIB_WINAPI -!ELSEIF EXISTS("$(ZLIB_LIB_DIR)\zdll.lib") -ZLIB_LIBS = zdll.lib -!ELSE -ZLIB_LIBS = zlib.lib -!ENDIF -USE_ZLIB = true -ZLIB = dll -!ELSEIF "$(WITH_ZLIB)"=="static" -!IF EXISTS("$(ZLIB_LIB_DIR)\zlibstat.lib") -ZLIB_LIBS = zlibstat.lib -ADDITIONAL_ZLIB_CFLAGS = /DZLIB_WINAPI -!ELSEIF EXISTS("$(ZLIB_LIB_DIR)\zlib.lib") -ZLIB_LIBS = zlib.lib -!ELSE -ZLIB_LIBS = zlib_a.lib -!ENDIF -USE_ZLIB = true -ZLIB = static -!ENDIF - -!IFDEF USE_ZLIB -ZLIB_CFLAGS = /DHAVE_ZLIB_H /DHAVE_ZLIB /DHAVE_LIBZ $(ADDITIONAL_ZLIB_CFLAGS) /I"$(ZLIB_INC_DIR)" -!ENDIF - - -!IFDEF SSH2_PATH -SSH2_INC_DIR= $(SSH2_PATH)\include -SSH2_LIB_DIR= $(SSH2_PATH)\lib -SSH2_LFLAGS = $(SSH2_LFLAGS) "/LIBPATH:$(SSH2_LIB_DIR)" -!ELSE -SSH2_LIB_DIR= $(DEVEL_LIB) -SSH2_INC_DIR= $(DEVEL_INCLUDE)/libssh2 -!ENDIF - -!IF "$(WITH_SSH2)"=="dll" -SSH2_LIBS = libssh2.lib -USE_SSH2 = true -SSH2 = dll -!ELSEIF "$(WITH_SSH2)"=="static" -# libssh2 NMakefile on Windows at default creates a static library without _a suffix -!IF EXISTS("$(SSH2_LIB_DIR)\libssh2.lib") -SSH2_LIBS = libssh2.lib -!ELSE -SSH2_LIBS = libssh2_a.lib -!ENDIF -WIN_LIBS = $(WIN_LIBS) user32.lib -USE_SSH2 = true -SSH2 = static -!ENDIF - -!IFDEF USE_SSH2 -SSH2_CFLAGS = /DHAVE_LIBSSH2 /DHAVE_LIBSSH2_H /DLIBSSH2_WIN32 /DLIBSSH2_LIBRARY /DUSE_LIBSSH2 -SSH2_CFLAGS = $(SSH2_CFLAGS) /I$(SSH2_INC_DIR) -!ENDIF - - -!IFNDEF USE_IDN -USE_IDN = true -!ELSEIF "$(USE_IDN)"=="yes" -USE_IDN = true -!ENDIF - -!IF "$(USE_IDN)"=="true" -IDN_CFLAGS = $(IDN_CFLAGS) /DUSE_WIN32_IDN /DWANT_IDN_PROTOTYPES -WIN_LIBS = $(WIN_LIBS) Normaliz.lib -!ENDIF - - -!IFNDEF USE_IPV6 -USE_IPV6 = true -!ELSEIF "$(USE_IPV6)"=="yes" -USE_IPV6 = true -!ENDIF - -!IF "$(USE_IPV6)"=="true" -IPV6_CFLAGS = $(IPV6_CFLAGS) /DUSE_IPV6 -!ENDIF - - -!IFNDEF USE_SSPI -USE_SSPI = true -!ELSEIF "$(USE_SSPI)"=="yes" -USE_SSPI = true -!ENDIF - -!IF "$(USE_SSPI)"=="true" -SSPI_CFLAGS = $(SSPI_CFLAGS) /DUSE_WINDOWS_SSPI -!ENDIF - - -!IFNDEF USE_SCHANNEL -!IF "$(USE_SSL)"=="true" -USE_SCHANNEL = false -!ELSE -USE_SCHANNEL = $(USE_SSPI) -!ENDIF -!ELSEIF "$(USE_SCHANNEL)"=="yes" -USE_SCHANNEL = true -!ENDIF - - -!IF "$(USE_SCHANNEL)"=="true" -!IF "$(USE_SSPI)"!="true" -!ERROR cannot build with Schannel without SSPI -!ENDIF -SSPI_CFLAGS = $(SSPI_CFLAGS) /DUSE_SCHANNEL -WIN_LIBS = $(WIN_LIBS) Crypt32.lib -!ENDIF - - -!IF "$(GEN_PDB)"=="yes" -GEN_PDB = true -!ENDIF - - -!IFDEF EMBED_MANIFEST -MANIFESTTOOL = $(MT) -manifest $(DIRDIST)\bin\$(PROGRAM_NAME).manifest -outputresource:$(DIRDIST)\bin\$(PROGRAM_NAME);1 -!ELSE -CURL_RC_FLAGS = $(CURL_RC_FLAGS) /dCURL_EMBED_MANIFEST -!ENDIF - -# Runtime library configuration -!IF "$(RTLIBCFG)"=="static" -RTLIB = /MT -RTLIB_DEBUG = /MTd -!ELSE -RTLIB = /MD -RTLIB_DEBUG = /MDd -!ENDIF - -!IF "$(MODE)"=="static" -TARGET = $(LIB_NAME_STATIC) -CURL_LIBCURL_LIBNAME=$(LIB_NAME_STATIC) -AS_DLL = false -CFGSET = true -!ELSEIF "$(MODE)"=="dll" -TARGET = $(LIB_NAME_DLL) -CURL_LIBCURL_LIBNAME=$(LIB_NAME_IMP) -AS_DLL = true -CFGSET = true -!ENDIF - -!IF "$(CFGSET)" == "FALSE" -!ERROR please choose a valid mode -!ENDIF - - - -# CURL_XX macros are for the curl.exe command - -!IF "$(DEBUG)"=="yes" -RC_FLAGS = /dDEBUGBUILD=1 /Fo $@ $(LIBCURL_SRC_DIR)\libcurl.rc -CURL_CC = $(CC_DEBUG) $(RTLIB_DEBUG) -CURL_RC_FLAGS = $(CURL_RC_FLAGS) /i../include /dDEBUGBUILD=1 /Fo $@ $(CURL_SRC_DIR)\curl.rc -!ELSE -RC_FLAGS = /dDEBUGBUILD=0 /Fo $@ $(LIBCURL_SRC_DIR)\libcurl.rc -CURL_CC = $(CC_NODEBUG) $(RTLIB) -CURL_RC_FLAGS = $(CURL_RC_FLAGS) /i../include /dDEBUGBUILD=0 /Fo $@ $(CURL_SRC_DIR)\curl.rc -!ENDIF - -!IF "$(AS_DLL)" == "true" - -LNK = $(LNKDLL) $(LFLAGS) $(WIN_LIBS) /out:$(LIB_DIROBJ)\$(TARGET) -!IF "$(DEBUG)"=="yes" -TARGET = $(LIB_NAME_DLL_DEBUG) -LNK = $(LNK) /DEBUG /IMPLIB:$(LIB_DIROBJ)\$(LIB_NAME_IMP_DEBUG) -PDB = $(PDB_NAME_DLL_DEBUG) -CURL_LIBS = /IMPLIB:$(LIB_DIROBJ)\$(LIB_NAME_IMP_DEBUG) -!ELSE -TARGET = $(LIB_NAME_DLL) -LNK = $(LNK) /IMPLIB:$(LIB_DIROBJ)\$(LIB_NAME_IMP) -PDB = $(PDB_NAME_DLL) -CURL_LIBS = /IMPLIB:$(LIB_DIROBJ)\$(LIB_NAME_IMP) -!ENDIF -RESOURCE = $(LIB_DIROBJ)\libcurl.res - -# AS_DLL -!ELSE - -!IF "$(DEBUG)"=="yes" -TARGET = $(LIB_NAME_STATIC_DEBUG) -PDB = $(PDB_NAME_STATIC_DEBUG) -!ELSE -TARGET = $(LIB_NAME_STATIC) -PDB = $(PDB_NAME_STATIC) -!ENDIF -LNK = $(LNKLIB) /out:$(LIB_DIROBJ)\$(TARGET) -CURL_CC = $(CURL_CC) $(CFLAGS_LIBCURL_STATIC) - -# AS_DLL -!ENDIF - -!IF "$(USE_SSL)"=="true" -CFLAGS = $(CFLAGS) $(SSL_CFLAGS) -LFLAGS = $(LFLAGS) $(SSL_LFLAGS) $(SSL_LIBS) -!ENDIF - -!IF "$(USE_MBEDTLS)"=="true" -CFLAGS = $(CFLAGS) $(MBEDTLS_CFLAGS) -LFLAGS = $(LFLAGS) $(MBEDTLS_LFLAGS) $(MBEDTLS_LIBS) -!ENDIF - -!IF "$(USE_CARES)"=="true" -CFLAGS = $(CFLAGS) $(CARES_CFLAGS) -LFLAGS = $(LFLAGS) $(CARES_LFLAGS) $(CARES_LIBS) -!ENDIF - -!IF "$(USE_ZLIB)"=="true" -CFLAGS = $(CFLAGS) $(ZLIB_CFLAGS) -LFLAGS = $(LFLAGS) $(ZLIB_LFLAGS) $(ZLIB_LIBS) -!ENDIF - -!IF "$(USE_SSH2)"=="true" -CFLAGS = $(CFLAGS) $(SSH2_CFLAGS) -LFLAGS = $(LFLAGS) $(SSH2_LFLAGS) $(SSH2_LIBS) -!ENDIF - -!IF "$(USE_IDN)"=="true" -CFLAGS = $(CFLAGS) $(IDN_CFLAGS) -!ENDIF - -!IF "$(USE_IPV6)"=="true" -CFLAGS = $(CFLAGS) $(IPV6_CFLAGS) -!ENDIF - -!IF "$(USE_SSPI)"=="true" -CFLAGS = $(CFLAGS) $(SSPI_CFLAGS) -!ENDIF - -!IF "$(USE_NGHTTP2)"=="true" -CFLAGS = $(CFLAGS) $(NGHTTP2_CFLAGS) -LFLAGS = $(LFLAGS) $(NGHTTP2_LFLAGS) $(NGHTTP2_LIBS) -!ENDIF - -!IF "$(GEN_PDB)"=="true" -CFLAGS = $(CFLAGS) $(CFLAGS_PDB) /Fd"$(LIB_DIROBJ)\$(PDB)" -LFLAGS = $(LFLAGS) $(LFLAGS_PDB) -!ENDIF - -!IF ( "$(USE_SSL)"=="true" && "$(USE_SCHANNEL)"=="true" ) \ - || ( "$(USE_SSL)"=="true" && "$(USE_MBEDTLS)"=="true" ) \ - || ( "$(USE_MBEDTLS)"=="true" && "$(USE_SCHANNEL)"=="true" ) -CFLAGS = $(CFLAGS) /DCURL_WITH_MULTI_SSL -!ENDIF - -!IF "$(USE_UNICODE)"=="true" -CFLAGS = $(CFLAGS) /DUNICODE /D_UNICODE -!ENDIF - -LIB_DIROBJ = ..\builds\$(CONFIG_NAME_LIB)-obj-lib -CURL_DIROBJ = ..\builds\$(CONFIG_NAME_LIB)-obj-curl - -!IFDEF WITH_PREFIX -DIRDIST = $(WITH_PREFIX) -!ELSE -DIRDIST = ..\builds\$(CONFIG_NAME_LIB)\ -!ENDIF - -# -# curl.exe -# -CURL_LINK = link.exe /incremental:no /libpath:"$(DIRDIST)\lib" - -!IF "$(CFGSET)" != "FALSE" -# A mode was provided, so the library can be built. -# -!include CURL_OBJS.inc -!include LIBCURL_OBJS.inc - -!IF "$(AS_DLL)" == "true" -LIB_OBJS = $(LIBCURL_OBJS) $(RESOURCE) -!ELSE -LIB_OBJS = $(LIBCURL_OBJS) -!ENDIF - -EXE_OBJS = $(CURL_OBJS) $(CURL_DIROBJ)\curl.res - -all : $(TARGET) $(PROGRAM_NAME) - -package: $(TARGET) - @cd $(DIRDIST) - @-$(ZIP) -9 -q -r ..\$(CONFIG_NAME_LIB).zip .>nul 2<&1 - @cd $(MAKEDIR) - -$(TARGET): $(LIB_OBJS) $(LIB_DIROBJ) $(DIRDIST) - @echo Using SSL: $(USE_SSL) - @echo Using NGHTTP2: $(USE_NGHTTP2) - @echo Using c-ares: $(USE_CARES) - @echo Using SSH2: $(USE_SSH2) - @echo Using ZLIB: $(USE_ZLIB) - @echo Using IDN: $(USE_IDN) - @echo Using IPv6: $(USE_IPV6) - @echo Using SSPI: $(USE_SSPI) - @echo Using Schannel: $(USE_SCHANNEL) - @echo CFLAGS: $(CFLAGS) - @echo LFLAGS: $(LFLAGS) - @echo GenPDB: $(GEN_PDB) - @echo Debug: $(DEBUG) - @echo Machine: $(MACHINE) - $(LNK) $(LIB_OBJS) - @echo Copying libs... - @if exist $(LIB_DIROBJ)\$(LIB_NAME_DLL) copy $(LIB_DIROBJ)\$(LIB_NAME_DLL) $(DIRDIST)\bin\ /y >nul 2<&1 - @if exist $(LIB_DIROBJ)\$(LIB_NAME_STATIC) copy $(LIB_DIROBJ)\$(LIB_NAME_STATIC) $(DIRDIST)\lib\ /y >nul 2<&1 - @if exist $(LIB_DIROBJ)\$(LIB_NAME_DLL_DEBUG) copy $(LIB_DIROBJ)\$(LIB_NAME_DLL_DEBUG) $(DIRDIST)\bin\ /y >nul 2<&1 - @if exist $(LIB_DIROBJ)\$(LIB_NAME_STATIC_DEBUG) copy $(LIB_DIROBJ)\$(LIB_NAME_STATIC_DEBUG) $(DIRDIST)\lib\ /y >nul 2<&1 - @if exist $(LIB_DIROBJ)\$(LIB_NAME_IMP) copy $(LIB_DIROBJ)\$(LIB_NAME_IMP) $(DIRDIST)\lib\ /y >nul 2<&1 - @if exist $(LIB_DIROBJ)\$(LIB_NAME_IMP_DEBUG) copy $(LIB_DIROBJ)\$(LIB_NAME_IMP_DEBUG) $(DIRDIST)\lib >nul 2<&1 - @-copy $(LIB_DIROBJ)\*.exp $(DIRDIST)\lib /y >nul 2<&1 - @-copy $(LIB_DIROBJ)\*.pdb $(DIRDIST)\lib /y >nul 2<&1 - @-copy ..\include\curl\*.h $(DIRDIST)\include\curl\ /y >nul 2<&1 - -$(LIB_OBJS): $(LIB_DIROBJ) $(DIRDIST) - -$(DIRDIST): - @if not exist "$(DIRDIST)\bin" mkdir $(DIRDIST)\bin - @if not exist "$(DIRDIST)\include" mkdir $(DIRDIST)\include - @if not exist "$(DIRDIST)\include\curl" mkdir $(DIRDIST)\include\curl - @if not exist "$(DIRDIST)\lib" mkdir $(DIRDIST)\lib - -$(LIB_DIROBJ): - @if not exist "$(LIB_DIROBJ)" mkdir $(LIB_DIROBJ) - @if not exist "$(LIB_DIROBJ)\vauth" mkdir $(LIB_DIROBJ)\vauth - @if not exist "$(LIB_DIROBJ)\vtls" mkdir $(LIB_DIROBJ)\vtls - @if not exist "$(LIB_DIROBJ)\vssh" mkdir $(LIB_DIROBJ)\vssh - @if not exist "$(LIB_DIROBJ)\vquic" mkdir $(LIB_DIROBJ)\vquic - -$(CURL_DIROBJ): - @if not exist "$(CURL_DIROBJ)" mkdir $(CURL_DIROBJ) -# we need a lib dir for the portability functions from libcurl -# we use the .c directly here - @if not exist "$(CURL_DIROBJ)" mkdir $(CURL_DIROBJ)\lib - -.SUFFIXES: .c .obj .res - -{$(LIBCURL_SRC_DIR)\}.c{$(LIB_DIROBJ)\}.obj: - $(CURL_CC) $(CFLAGS) /Fo"$@" $< - -{$(LIBCURL_SRC_DIR)\vauth\}.c{$(LIB_DIROBJ)\vauth\}.obj: - $(CURL_CC) $(CFLAGS) /Fo"$@" $< - -{$(LIBCURL_SRC_DIR)\vtls\}.c{$(LIB_DIROBJ)\vtls\}.obj: - $(CURL_CC) $(CFLAGS) /Fo"$@" $< - -{$(LIBCURL_SRC_DIR)\vssh\}.c{$(LIB_DIROBJ)\vssh\}.obj: - $(CURL_CC) $(CFLAGS) /Fo"$@" $< - -{$(LIBCURL_SRC_DIR)\vquic\}.c{$(LIB_DIROBJ)\vquic\}.obj: - $(CURL_CC) $(CFLAGS) /Fo"$@" $< - -$(LIB_DIROBJ)\libcurl.res: $(LIBCURL_SRC_DIR)\libcurl.rc - $(RC) $(RC_FLAGS) - -# -# curl.exe -# - - -!IF "$(MODE)"=="static" -!IF "$(DEBUG)"=="yes" -CURL_LIBCURL_LIBNAME=$(LIB_NAME_STATIC_DEBUG) -!ELSE -CURL_LIBCURL_LIBNAME=$(LIB_NAME_STATIC) -!ENDIF -!ELSEIF "$(MODE)"=="dll" -!IF "$(DEBUG)"=="yes" -CURL_LIBCURL_LIBNAME=$(LIB_NAME_IMP_DEBUG) -!ELSE -CURL_LIBCURL_LIBNAME=$(LIB_NAME_IMP) -!ENDIF -!ENDIF - -CURL_FROM_LIBCURL=$(CURL_DIROBJ)\tool_hugehelp.obj \ - $(CURL_DIROBJ)\nonblock.obj \ - $(CURL_DIROBJ)\strtoofft.obj \ - $(CURL_DIROBJ)\warnless.obj \ - $(CURL_DIROBJ)\curl_ctype.obj \ - $(CURL_DIROBJ)\curl_multibyte.obj \ - $(CURL_DIROBJ)\version_win32.obj \ - $(CURL_DIROBJ)\dynbuf.obj - -$(PROGRAM_NAME): $(CURL_DIROBJ) $(CURL_FROM_LIBCURL) $(EXE_OBJS) - $(CURL_LINK) $(CURL_LFLAGS) $(CURL_LIBCURL_LIBNAME) $(WIN_LIBS) $(CURL_FROM_LIBCURL) $(EXE_OBJS) - $(MANIFESTTOOL) - -{$(CURL_SRC_DIR)\}.c{$(CURL_DIROBJ)\}.obj: - $(CURL_CC) $(CURL_CFLAGS) /Fo"$@" $< - -$(CURL_DIROBJ)\tool_hugehelp.obj: $(CURL_SRC_DIR)\tool_hugehelp.c - $(CURL_CC) $(CURL_CFLAGS) /Zm200 /Fo"$@" $(CURL_SRC_DIR)\tool_hugehelp.c -$(CURL_DIROBJ)\nonblock.obj: ../lib/nonblock.c - $(CURL_CC) $(CURL_CFLAGS) /Fo"$@" ../lib/nonblock.c -$(CURL_DIROBJ)\strtoofft.obj: ../lib/strtoofft.c - $(CURL_CC) $(CURL_CFLAGS) /Fo"$@" ../lib/strtoofft.c -$(CURL_DIROBJ)\warnless.obj: ../lib/warnless.c - $(CURL_CC) $(CURL_CFLAGS) /Fo"$@" ../lib/warnless.c -$(CURL_DIROBJ)\curl_ctype.obj: ../lib/curl_ctype.c - $(CURL_CC) $(CURL_CFLAGS) /Fo"$@" ../lib/curl_ctype.c -$(CURL_DIROBJ)\curl_multibyte.obj: ../lib/curl_multibyte.c - $(CURL_CC) $(CURL_CFLAGS) /Fo"$@" ../lib/curl_multibyte.c -$(CURL_DIROBJ)\version_win32.obj: ../lib/version_win32.c - $(CURL_CC) $(CURL_CFLAGS) /Fo"$@" ../lib/version_win32.c -$(CURL_DIROBJ)\dynbuf.obj: ../lib/dynbuf.c - $(CURL_CC) $(CURL_CFLAGS) /Fo"$@" ../lib/dynbuf.c -$(CURL_DIROBJ)\curl.res: $(CURL_SRC_DIR)\curl.rc - rc $(CURL_RC_FLAGS) - -!ENDIF # End of case where a config was provided. - -clean: - @-erase /s *.dll 2> NUL - @-erase /s *.exp 2> NUL - @-erase /s *.idb 2> NUL - @-erase /s *.lib 2> NUL - @-erase /s *.obj 2> NUL - @-erase /s *.pch 2> NUL - @-erase /s *.pdb 2> NUL - @-erase /s *.res 2> NUL - @if exist $(LIB_DIROBJ) rd /s/q $(LIB_DIROBJ) - @if exist $(CURL_DIROBJ)rd /s/q $(CURL_DIROBJ) - @if exist $(DIRDIST) rd /s/q $(DIRDIST) +#*************************************************************************** +# _ _ ____ _ +# Project ___| | | | _ \| | +# / __| | | | |_) | | +# | (__| |_| | _ <| |___ +# \___|\___/|_| \_\_____| +# +# Copyright (C) 1999 - 2020, Daniel Stenberg, , et al. +# +# This software is licensed as described in the file COPYING, which +# you should have received as part of this distribution. The terms +# are also available at https://curl.se/docs/copyright.html. +# +# You may opt to use, copy, modify, merge, publish, distribute and/or sell +# copies of the Software, and permit persons to whom the Software is +# furnished to do so, under the terms of the COPYING file. +# +# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY +# KIND, either express or implied. +# +#*************************************************************************** + +########################################################################### +# +# Makefile for building libcurl with MSVC +# +# Usage: see README.md +# +############################################################## + +CFGSET=FALSE +WINBUILD_DIR=`cd` + +# Utilities. +# If a path is required that contains characters such as space, quote the path. +MT = mt.exe +RC = rc.exe +ZIP = zip.exe + +# Allow changing C compiler via environment variable CC (default cl.exe) +# This command macro is not set by default: https://msdn.microsoft.com/en-us/library/ms933742.aspx +!If "$(CC)" == "" +CC = cl.exe +!Endif + +!IF "$(VC)"=="6" +CC_NODEBUG = $(CC) /O2 /DNDEBUG +CC_DEBUG = $(CC) /Od /Gm /Zi /D_DEBUG /GZ +CFLAGS = /I. /I../lib /I../include /nologo /W4 /GX /DWIN32 /YX /FD /c /DBUILDING_LIBCURL +!ELSE +CC_NODEBUG = $(CC) /O2 /DNDEBUG +CC_DEBUG = $(CC) /Od /D_DEBUG /RTC1 /Z7 /LDd +CFLAGS = /I. /I ../lib /I../include /nologo /W4 /EHsc /DWIN32 /FD /c /DBUILDING_LIBCURL +!ENDIF + +LFLAGS = /nologo /machine:$(MACHINE) +LNKDLL = link.exe /DLL +# Use lib.exe instead of link.exe as link.exe /lib has the following bad habits: +# - optimizing options like /opt:ref raises warnings (at least in Visual Studio 2015) +# - all (including Windows) dependencies are aggregated (as static parts) +# - link.exe /lib is not documented (anymore) at MSDN +# Instead of id: just create an archive, that contains all objects +LNKLIB = lib.exe + +CFLAGS_PDB = /Zi +LFLAGS_PDB = /incremental:no /opt:ref,icf /DEBUG + +CFLAGS_LIBCURL_STATIC = /DCURL_STATICLIB + +WIN_LIBS = ws2_32.lib wldap32.lib advapi32.lib crypt32.lib + +BASE_NAME = libcurl +BASE_NAME_DEBUG = $(BASE_NAME)_debug +BASE_NAME_STATIC = $(BASE_NAME)_a +BASE_NAME_STATIC_DEBUG = $(BASE_NAME_STATIC)_debug + +LIB_NAME_STATIC = $(BASE_NAME_STATIC).lib +LIB_NAME_STATIC_DEBUG = $(BASE_NAME_STATIC_DEBUG).lib +LIB_NAME_DLL = $(BASE_NAME).dll +LIB_NAME_IMP = $(BASE_NAME).lib +LIB_NAME_DLL_DEBUG = $(BASE_NAME_DEBUG).dll +LIB_NAME_IMP_DEBUG = $(BASE_NAME_DEBUG).lib + +PDB_NAME_STATIC = $(BASE_NAME_STATIC).pdb +PDB_NAME_STATIC_DEBUG = $(BASE_NAME_STATIC_DEBUG).pdb +PDB_NAME_DLL = $(BASE_NAME).pdb +PDB_NAME_DLL_DEBUG = $(BASE_NAME_DEBUG).pdb + +# CURL Command section +PROGRAM_NAME = curl.exe +CURL_CFLAGS = /I../lib /I../include /nologo /W4 /EHsc /DWIN32 /FD /c +CURL_LFLAGS = /out:$(DIRDIST)\bin\$(PROGRAM_NAME) /subsystem:console $(LFLAGS) +CURL_RESFLAGS = /i../include + +############################################################# +## Nothing more to do below this line! +LIBCURL_SRC_DIR = ..\lib +CURL_SRC_DIR = ..\src + +!IFNDEF WITH_DEVEL +WITH_DEVEL = ../../deps +!ENDIF +DEVEL_INCLUDE= $(WITH_DEVEL)/include +DEVEL_LIB = $(WITH_DEVEL)/lib + +!IF EXISTS("$(DEVEL_INCLUDE)") +CFLAGS = $(CFLAGS) /I"$(DEVEL_INCLUDE)" +!ENDIF +!IF EXISTS("$(DEVEL_LIB)") +LFLAGS = $(LFLAGS) "/LIBPATH:$(DEVEL_LIB)" +!ENDIF + +!IFDEF SSL_PATH +SSL_INC_DIR = $(SSL_PATH)\include +SSL_LIB_DIR = $(SSL_PATH)\lib +SSL_LFLAGS = $(SSL_LFLAGS) "/LIBPATH:$(SSL_LIB_DIR)" +!ELSE +SSL_INC_DIR=$(DEVEL_INCLUDE)\openssl +SSL_LIB_DIR=$(DEVEL_LIB) +!ENDIF + +!IF "$(WITH_SSL)"=="dll" || "$(WITH_SSL)"=="static" +!IF EXISTS("$(SSL_LIB_DIR)\libssl.lib") +SSL_LIBS = libssl.lib libcrypto.lib +!ELSE +SSL_LIBS = libeay32.lib ssleay32.lib +!ENDIF +USE_SSL = true +SSL = $(WITH_SSL) +!IF "$(WITH_SSL)"=="static" +WIN_LIBS = $(WIN_LIBS) gdi32.lib user32.lib crypt32.lib +!ENDIF +!ENDIF + +!IFDEF USE_SSL +SSL_CFLAGS = /DUSE_OPENSSL /I"$(SSL_INC_DIR)" +!IF EXISTS("$(SSL_INC_DIR)\is_boringssl.h") +SSL_CFLAGS = $(SSL_CFLAGS) /DHAVE_BORINGSSL +!ENDIF +!IF "$(ENABLE_OPENSSL_AUTO_LOAD_CONFIG)"=="false" +SSL_CFLAGS = $(SSL_CFLAGS) /DCURL_DISABLE_OPENSSL_AUTO_LOAD_CONFIG +!ENDIF +!ENDIF + + +!IFDEF NGHTTP2_PATH +NGHTTP2_INC_DIR = $(NGHTTP2_PATH)\include +NGHTTP2_LIB_DIR = $(NGHTTP2_PATH)\lib +NGHTTP2_LFLAGS = $(NGHTTP2_LFLAGS) "/LIBPATH:$(NGHTTP2_LIB_DIR)" +!ELSE +NGHTTP2_INC_DIR = $(DEVEL_INCLUDE) +NGHTTP2_LIB_DIR = $(DEVEL_LIB) +!ENDIF + +!IF "$(WITH_NGHTTP2)"=="dll" +NGHTTP2_CFLAGS = /DUSE_NGHTTP2 /I"$(NGHTTP2_INC_DIR)" +NGHTTP2_LIBS = nghttp2.lib +!ELSEIF "$(WITH_NGHTTP2)"=="static" +NGHTTP2_CFLAGS = /DUSE_NGHTTP2 /DNGHTTP2_STATICLIB /I"$(NGHTTP2_INC_DIR)" +NGHTTP2_LIBS = nghttp2_static.lib +!ENDIF + + +!IFDEF MBEDTLS_PATH +MBEDTLS_INC_DIR = $(MBEDTLS_PATH)\include +MBEDTLS_LIB_DIR = $(MBEDTLS_PATH)\lib +MBEDTLS_LFLAGS = $(MBEDTLS_LFLAGS) "/LIBPATH:$(MBEDTLS_LIB_DIR)" +!ELSE +MBEDTLS_INC_DIR = $(DEVEL_INCLUDE) +MBEDTLS_LIB_DIR = $(DEVEL_LIB) +!ENDIF + +!IF "$(WITH_MBEDTLS)"=="dll" || "$(WITH_MBEDTLS)"=="static" +USE_MBEDTLS = true +MBEDTLS = $(WITH_MBEDTLS) +MBEDTLS_CFLAGS = /DUSE_MBEDTLS /I"$(MBEDTLS_INC_DIR)" +MBEDTLS_LIBS = mbedtls.lib mbedcrypto.lib mbedx509.lib +!ENDIF + + +!IFDEF CARES_PATH +CARES_INC_DIR = $(CARES_PATH)\include +CARES_LIB_DIR = $(CARES_PATH)\lib +CARES_LFLAGS = $(CARES_LFLAGS) "/LIBPATH:$(CARES_LIB_DIR)" +!ELSE +CARES_INC_DIR = $(DEVEL_INCLUDE)/cares +CARES_LIB_DIR = $(DEVEL_LIB) +!ENDIF + +!IF "$(WITH_CARES)"=="dll" +!IF "$(DEBUG)"=="yes" +CARES_LIBS = caresd.lib +!ELSE +CARES_LIBS = cares.lib +!ENDIF +USE_CARES = true +CARES = dll +!ELSEIF "$(WITH_CARES)"=="static" +!IF "$(DEBUG)"=="yes" +CARES_LIBS = libcaresd.lib +!ELSE +CARES_LIBS = libcares.lib +!ENDIF +USE_CARES = true +CARES = static +!ENDIF + +!IFDEF USE_CARES +CARES_CFLAGS = /DUSE_ARES /I"$(CARES_INC_DIR)" +!IF "$(CARES)"=="static" +CARES_CFLAGS = $(CARES_CFLAGS) /DCARES_STATICLIB +!ENDIF +!ENDIF + + +!IFDEF ZLIB_PATH +ZLIB_INC_DIR = $(ZLIB_PATH)\include +ZLIB_LIB_DIR = $(ZLIB_PATH)\lib +ZLIB_LFLAGS = $(ZLIB_LFLAGS) "/LIBPATH:$(ZLIB_LIB_DIR)" +!ELSE +ZLIB_INC_DIR = $(DEVEL_INCLUDE) +ZLIB_LIB_DIR = $(DEVEL_LIB) +!ENDIF + +# Depending on how zlib is built the libraries have different names, we +# try to handle them all. +!IF "$(WITH_ZLIB)"=="dll" +!IF EXISTS("$(ZLIB_LIB_DIR)\zlibwapi.lib") +ZLIB_LIBS = zlibwapi.lib +ADDITIONAL_ZLIB_CFLAGS = /DZLIB_WINAPI +!ELSEIF EXISTS("$(ZLIB_LIB_DIR)\zdll.lib") +ZLIB_LIBS = zdll.lib +!ELSE +ZLIB_LIBS = zlib.lib +!ENDIF +USE_ZLIB = true +ZLIB = dll +!ELSEIF "$(WITH_ZLIB)"=="static" +!IF EXISTS("$(ZLIB_LIB_DIR)\zlibstat.lib") +ZLIB_LIBS = zlibstat.lib +ADDITIONAL_ZLIB_CFLAGS = /DZLIB_WINAPI +!ELSEIF EXISTS("$(ZLIB_LIB_DIR)\zlib.lib") +ZLIB_LIBS = zlib.lib +!ELSE +ZLIB_LIBS = zlib_a.lib +!ENDIF +USE_ZLIB = true +ZLIB = static +!ENDIF + +!IFDEF USE_ZLIB +ZLIB_CFLAGS = /DHAVE_ZLIB_H /DHAVE_ZLIB /DHAVE_LIBZ $(ADDITIONAL_ZLIB_CFLAGS) /I"$(ZLIB_INC_DIR)" +!ENDIF + + +!IFDEF SSH2_PATH +SSH2_INC_DIR= $(SSH2_PATH)\include +SSH2_LIB_DIR= $(SSH2_PATH)\lib +SSH2_LFLAGS = $(SSH2_LFLAGS) "/LIBPATH:$(SSH2_LIB_DIR)" +!ELSE +SSH2_LIB_DIR= $(DEVEL_LIB) +SSH2_INC_DIR= $(DEVEL_INCLUDE)/libssh2 +!ENDIF + +!IF "$(WITH_SSH2)"=="dll" +SSH2_LIBS = libssh2.lib +USE_SSH2 = true +SSH2 = dll +!ELSEIF "$(WITH_SSH2)"=="static" +# libssh2 NMakefile on Windows at default creates a static library without _a suffix +!IF EXISTS("$(SSH2_LIB_DIR)\libssh2.lib") +SSH2_LIBS = libssh2.lib +!ELSE +SSH2_LIBS = libssh2_a.lib +!ENDIF +WIN_LIBS = $(WIN_LIBS) user32.lib +USE_SSH2 = true +SSH2 = static +!ENDIF + +!IFDEF USE_SSH2 +SSH2_CFLAGS = /DHAVE_LIBSSH2 /DHAVE_LIBSSH2_H /DLIBSSH2_WIN32 /DLIBSSH2_LIBRARY /DUSE_LIBSSH2 +SSH2_CFLAGS = $(SSH2_CFLAGS) /I$(SSH2_INC_DIR) +!ENDIF + + +!IFNDEF USE_IDN +USE_IDN = true +!ELSEIF "$(USE_IDN)"=="yes" +USE_IDN = true +!ENDIF + +!IF "$(USE_IDN)"=="true" +IDN_CFLAGS = $(IDN_CFLAGS) /DUSE_WIN32_IDN /DWANT_IDN_PROTOTYPES +WIN_LIBS = $(WIN_LIBS) Normaliz.lib +!ENDIF + + +!IFNDEF USE_IPV6 +USE_IPV6 = true +!ELSEIF "$(USE_IPV6)"=="yes" +USE_IPV6 = true +!ENDIF + +!IF "$(USE_IPV6)"=="true" +IPV6_CFLAGS = $(IPV6_CFLAGS) /DUSE_IPV6 +!ENDIF + + +!IFNDEF USE_SSPI +USE_SSPI = true +!ELSEIF "$(USE_SSPI)"=="yes" +USE_SSPI = true +!ENDIF + +!IF "$(USE_SSPI)"=="true" +SSPI_CFLAGS = $(SSPI_CFLAGS) /DUSE_WINDOWS_SSPI +!ENDIF + + +!IFNDEF USE_SCHANNEL +!IF "$(USE_SSL)"=="true" +USE_SCHANNEL = false +!ELSE +USE_SCHANNEL = $(USE_SSPI) +!ENDIF +!ELSEIF "$(USE_SCHANNEL)"=="yes" +USE_SCHANNEL = true +!ENDIF + + +!IF "$(USE_SCHANNEL)"=="true" +!IF "$(USE_SSPI)"!="true" +!ERROR cannot build with Schannel without SSPI +!ENDIF +SSPI_CFLAGS = $(SSPI_CFLAGS) /DUSE_SCHANNEL +WIN_LIBS = $(WIN_LIBS) Crypt32.lib +!ENDIF + + +!IF "$(GEN_PDB)"=="yes" +GEN_PDB = true +!ENDIF + + +!IFDEF EMBED_MANIFEST +MANIFESTTOOL = $(MT) -manifest $(DIRDIST)\bin\$(PROGRAM_NAME).manifest -outputresource:$(DIRDIST)\bin\$(PROGRAM_NAME);1 +!ELSE +CURL_RC_FLAGS = $(CURL_RC_FLAGS) /dCURL_EMBED_MANIFEST +!ENDIF + +# Runtime library configuration +!IF "$(RTLIBCFG)"=="static" +RTLIB = /MT +RTLIB_DEBUG = /MTd +!ELSE +RTLIB = /MD +RTLIB_DEBUG = /MDd +!ENDIF + +!IF "$(MODE)"=="static" +TARGET = $(LIB_NAME_STATIC) +CURL_LIBCURL_LIBNAME=$(LIB_NAME_STATIC) +AS_DLL = false +CFGSET = true +!ELSEIF "$(MODE)"=="dll" +TARGET = $(LIB_NAME_DLL) +CURL_LIBCURL_LIBNAME=$(LIB_NAME_IMP) +AS_DLL = true +CFGSET = true +!ENDIF + +!IF "$(CFGSET)" == "FALSE" +!ERROR please choose a valid mode +!ENDIF + + + +# CURL_XX macros are for the curl.exe command + +!IF "$(DEBUG)"=="yes" +RC_FLAGS = /dDEBUGBUILD=1 /Fo $@ $(LIBCURL_SRC_DIR)\libcurl.rc +CURL_CC = $(CC_DEBUG) $(RTLIB_DEBUG) +CURL_RC_FLAGS = $(CURL_RC_FLAGS) /i../include /dDEBUGBUILD=1 /Fo $@ $(CURL_SRC_DIR)\curl.rc +!ELSE +RC_FLAGS = /dDEBUGBUILD=0 /Fo $@ $(LIBCURL_SRC_DIR)\libcurl.rc +CURL_CC = $(CC_NODEBUG) $(RTLIB) +CURL_RC_FLAGS = $(CURL_RC_FLAGS) /i../include /dDEBUGBUILD=0 /Fo $@ $(CURL_SRC_DIR)\curl.rc +!ENDIF + +!IF "$(AS_DLL)" == "true" + +LNK = $(LNKDLL) $(LFLAGS) $(WIN_LIBS) /out:$(LIB_DIROBJ)\$(TARGET) +!IF "$(DEBUG)"=="yes" +TARGET = $(LIB_NAME_DLL_DEBUG) +LNK = $(LNK) /DEBUG /IMPLIB:$(LIB_DIROBJ)\$(LIB_NAME_IMP_DEBUG) +PDB = $(PDB_NAME_DLL_DEBUG) +CURL_LIBS = /IMPLIB:$(LIB_DIROBJ)\$(LIB_NAME_IMP_DEBUG) +!ELSE +TARGET = $(LIB_NAME_DLL) +LNK = $(LNK) /IMPLIB:$(LIB_DIROBJ)\$(LIB_NAME_IMP) +PDB = $(PDB_NAME_DLL) +CURL_LIBS = /IMPLIB:$(LIB_DIROBJ)\$(LIB_NAME_IMP) +!ENDIF +RESOURCE = $(LIB_DIROBJ)\libcurl.res + +# AS_DLL +!ELSE + +!IF "$(DEBUG)"=="yes" +TARGET = $(LIB_NAME_STATIC_DEBUG) +PDB = $(PDB_NAME_STATIC_DEBUG) +!ELSE +TARGET = $(LIB_NAME_STATIC) +PDB = $(PDB_NAME_STATIC) +!ENDIF +LNK = $(LNKLIB) /out:$(LIB_DIROBJ)\$(TARGET) +CURL_CC = $(CURL_CC) $(CFLAGS_LIBCURL_STATIC) + +# AS_DLL +!ENDIF + +!IF "$(USE_SSL)"=="true" +CFLAGS = $(CFLAGS) $(SSL_CFLAGS) +LFLAGS = $(LFLAGS) $(SSL_LFLAGS) $(SSL_LIBS) +!ENDIF + +!IF "$(USE_MBEDTLS)"=="true" +CFLAGS = $(CFLAGS) $(MBEDTLS_CFLAGS) +LFLAGS = $(LFLAGS) $(MBEDTLS_LFLAGS) $(MBEDTLS_LIBS) +!ENDIF + +!IF "$(USE_CARES)"=="true" +CFLAGS = $(CFLAGS) $(CARES_CFLAGS) +LFLAGS = $(LFLAGS) $(CARES_LFLAGS) $(CARES_LIBS) +!ENDIF + +!IF "$(USE_ZLIB)"=="true" +CFLAGS = $(CFLAGS) $(ZLIB_CFLAGS) +LFLAGS = $(LFLAGS) $(ZLIB_LFLAGS) $(ZLIB_LIBS) +!ENDIF + +!IF "$(USE_SSH2)"=="true" +CFLAGS = $(CFLAGS) $(SSH2_CFLAGS) +LFLAGS = $(LFLAGS) $(SSH2_LFLAGS) $(SSH2_LIBS) +!ENDIF + +!IF "$(USE_IDN)"=="true" +CFLAGS = $(CFLAGS) $(IDN_CFLAGS) +!ENDIF + +!IF "$(USE_IPV6)"=="true" +CFLAGS = $(CFLAGS) $(IPV6_CFLAGS) +!ENDIF + +!IF "$(USE_SSPI)"=="true" +CFLAGS = $(CFLAGS) $(SSPI_CFLAGS) +!ENDIF + +!IF "$(USE_NGHTTP2)"=="true" +CFLAGS = $(CFLAGS) $(NGHTTP2_CFLAGS) +LFLAGS = $(LFLAGS) $(NGHTTP2_LFLAGS) $(NGHTTP2_LIBS) +!ENDIF + +!IF "$(GEN_PDB)"=="true" +CFLAGS = $(CFLAGS) $(CFLAGS_PDB) /Fd"$(LIB_DIROBJ)\$(PDB)" +LFLAGS = $(LFLAGS) $(LFLAGS_PDB) +!ENDIF + +!IF ( "$(USE_SSL)"=="true" && "$(USE_SCHANNEL)"=="true" ) \ + || ( "$(USE_SSL)"=="true" && "$(USE_MBEDTLS)"=="true" ) \ + || ( "$(USE_MBEDTLS)"=="true" && "$(USE_SCHANNEL)"=="true" ) +CFLAGS = $(CFLAGS) /DCURL_WITH_MULTI_SSL +!ENDIF + +!IF "$(USE_UNICODE)"=="true" +CFLAGS = $(CFLAGS) /DUNICODE /D_UNICODE +!ENDIF + +LIB_DIROBJ = ..\builds\$(CONFIG_NAME_LIB)-obj-lib +CURL_DIROBJ = ..\builds\$(CONFIG_NAME_LIB)-obj-curl + +!IFDEF WITH_PREFIX +DIRDIST = $(WITH_PREFIX) +!ELSE +DIRDIST = ..\builds\$(CONFIG_NAME_LIB)\ +!ENDIF + +# +# curl.exe +# +CURL_LINK = link.exe /incremental:no /libpath:"$(DIRDIST)\lib" + +!IF "$(CFGSET)" != "FALSE" +# A mode was provided, so the library can be built. +# +!include CURL_OBJS.inc +!include LIBCURL_OBJS.inc + +!IF "$(AS_DLL)" == "true" +LIB_OBJS = $(LIBCURL_OBJS) $(RESOURCE) +!ELSE +LIB_OBJS = $(LIBCURL_OBJS) +!ENDIF + +EXE_OBJS = $(CURL_OBJS) $(CURL_DIROBJ)\curl.res + +all : $(TARGET) $(PROGRAM_NAME) + +package: $(TARGET) + @cd $(DIRDIST) + @-$(ZIP) -9 -q -r ..\$(CONFIG_NAME_LIB).zip .>nul 2<&1 + @cd $(MAKEDIR) + +$(TARGET): $(LIB_OBJS) $(LIB_DIROBJ) $(DIRDIST) + @echo Using SSL: $(USE_SSL) + @echo Using NGHTTP2: $(USE_NGHTTP2) + @echo Using c-ares: $(USE_CARES) + @echo Using SSH2: $(USE_SSH2) + @echo Using ZLIB: $(USE_ZLIB) + @echo Using IDN: $(USE_IDN) + @echo Using IPv6: $(USE_IPV6) + @echo Using SSPI: $(USE_SSPI) + @echo Using Schannel: $(USE_SCHANNEL) + @echo CFLAGS: $(CFLAGS) + @echo LFLAGS: $(LFLAGS) + @echo GenPDB: $(GEN_PDB) + @echo Debug: $(DEBUG) + @echo Machine: $(MACHINE) + $(LNK) $(LIB_OBJS) + @echo Copying libs... + @if exist $(LIB_DIROBJ)\$(LIB_NAME_DLL) copy $(LIB_DIROBJ)\$(LIB_NAME_DLL) $(DIRDIST)\bin\ /y >nul 2<&1 + @if exist $(LIB_DIROBJ)\$(LIB_NAME_STATIC) copy $(LIB_DIROBJ)\$(LIB_NAME_STATIC) $(DIRDIST)\lib\ /y >nul 2<&1 + @if exist $(LIB_DIROBJ)\$(LIB_NAME_DLL_DEBUG) copy $(LIB_DIROBJ)\$(LIB_NAME_DLL_DEBUG) $(DIRDIST)\bin\ /y >nul 2<&1 + @if exist $(LIB_DIROBJ)\$(LIB_NAME_STATIC_DEBUG) copy $(LIB_DIROBJ)\$(LIB_NAME_STATIC_DEBUG) $(DIRDIST)\lib\ /y >nul 2<&1 + @if exist $(LIB_DIROBJ)\$(LIB_NAME_IMP) copy $(LIB_DIROBJ)\$(LIB_NAME_IMP) $(DIRDIST)\lib\ /y >nul 2<&1 + @if exist $(LIB_DIROBJ)\$(LIB_NAME_IMP_DEBUG) copy $(LIB_DIROBJ)\$(LIB_NAME_IMP_DEBUG) $(DIRDIST)\lib >nul 2<&1 + @-copy $(LIB_DIROBJ)\*.exp $(DIRDIST)\lib /y >nul 2<&1 + @-copy $(LIB_DIROBJ)\*.pdb $(DIRDIST)\lib /y >nul 2<&1 + @-copy ..\include\curl\*.h $(DIRDIST)\include\curl\ /y >nul 2<&1 + +$(LIB_OBJS): $(LIB_DIROBJ) $(DIRDIST) + +$(DIRDIST): + @if not exist "$(DIRDIST)\bin" mkdir $(DIRDIST)\bin + @if not exist "$(DIRDIST)\include" mkdir $(DIRDIST)\include + @if not exist "$(DIRDIST)\include\curl" mkdir $(DIRDIST)\include\curl + @if not exist "$(DIRDIST)\lib" mkdir $(DIRDIST)\lib + +$(LIB_DIROBJ): + @if not exist "$(LIB_DIROBJ)" mkdir $(LIB_DIROBJ) + @if not exist "$(LIB_DIROBJ)\vauth" mkdir $(LIB_DIROBJ)\vauth + @if not exist "$(LIB_DIROBJ)\vtls" mkdir $(LIB_DIROBJ)\vtls + @if not exist "$(LIB_DIROBJ)\vssh" mkdir $(LIB_DIROBJ)\vssh + @if not exist "$(LIB_DIROBJ)\vquic" mkdir $(LIB_DIROBJ)\vquic + +$(CURL_DIROBJ): + @if not exist "$(CURL_DIROBJ)" mkdir $(CURL_DIROBJ) +# we need a lib dir for the portability functions from libcurl +# we use the .c directly here + @if not exist "$(CURL_DIROBJ)" mkdir $(CURL_DIROBJ)\lib + +.SUFFIXES: .c .obj .res + +{$(LIBCURL_SRC_DIR)\}.c{$(LIB_DIROBJ)\}.obj: + $(CURL_CC) $(CFLAGS) /Fo"$@" $< + +{$(LIBCURL_SRC_DIR)\vauth\}.c{$(LIB_DIROBJ)\vauth\}.obj: + $(CURL_CC) $(CFLAGS) /Fo"$@" $< + +{$(LIBCURL_SRC_DIR)\vtls\}.c{$(LIB_DIROBJ)\vtls\}.obj: + $(CURL_CC) $(CFLAGS) /Fo"$@" $< + +{$(LIBCURL_SRC_DIR)\vssh\}.c{$(LIB_DIROBJ)\vssh\}.obj: + $(CURL_CC) $(CFLAGS) /Fo"$@" $< + +{$(LIBCURL_SRC_DIR)\vquic\}.c{$(LIB_DIROBJ)\vquic\}.obj: + $(CURL_CC) $(CFLAGS) /Fo"$@" $< + +$(LIB_DIROBJ)\libcurl.res: $(LIBCURL_SRC_DIR)\libcurl.rc + $(RC) $(RC_FLAGS) + +# +# curl.exe +# + + +!IF "$(MODE)"=="static" +!IF "$(DEBUG)"=="yes" +CURL_LIBCURL_LIBNAME=$(LIB_NAME_STATIC_DEBUG) +!ELSE +CURL_LIBCURL_LIBNAME=$(LIB_NAME_STATIC) +!ENDIF +!ELSEIF "$(MODE)"=="dll" +!IF "$(DEBUG)"=="yes" +CURL_LIBCURL_LIBNAME=$(LIB_NAME_IMP_DEBUG) +!ELSE +CURL_LIBCURL_LIBNAME=$(LIB_NAME_IMP) +!ENDIF +!ENDIF + +CURL_FROM_LIBCURL=$(CURL_DIROBJ)\tool_hugehelp.obj \ + $(CURL_DIROBJ)\nonblock.obj \ + $(CURL_DIROBJ)\strtoofft.obj \ + $(CURL_DIROBJ)\warnless.obj \ + $(CURL_DIROBJ)\curl_ctype.obj \ + $(CURL_DIROBJ)\curl_multibyte.obj \ + $(CURL_DIROBJ)\version_win32.obj \ + $(CURL_DIROBJ)\dynbuf.obj + +$(PROGRAM_NAME): $(CURL_DIROBJ) $(CURL_FROM_LIBCURL) $(EXE_OBJS) + $(CURL_LINK) $(CURL_LFLAGS) $(CURL_LIBCURL_LIBNAME) $(WIN_LIBS) $(CURL_FROM_LIBCURL) $(EXE_OBJS) + $(MANIFESTTOOL) + +{$(CURL_SRC_DIR)\}.c{$(CURL_DIROBJ)\}.obj: + $(CURL_CC) $(CURL_CFLAGS) /Fo"$@" $< + +$(CURL_DIROBJ)\tool_hugehelp.obj: $(CURL_SRC_DIR)\tool_hugehelp.c + $(CURL_CC) $(CURL_CFLAGS) /Zm200 /Fo"$@" $(CURL_SRC_DIR)\tool_hugehelp.c +$(CURL_DIROBJ)\nonblock.obj: ../lib/nonblock.c + $(CURL_CC) $(CURL_CFLAGS) /Fo"$@" ../lib/nonblock.c +$(CURL_DIROBJ)\strtoofft.obj: ../lib/strtoofft.c + $(CURL_CC) $(CURL_CFLAGS) /Fo"$@" ../lib/strtoofft.c +$(CURL_DIROBJ)\warnless.obj: ../lib/warnless.c + $(CURL_CC) $(CURL_CFLAGS) /Fo"$@" ../lib/warnless.c +$(CURL_DIROBJ)\curl_ctype.obj: ../lib/curl_ctype.c + $(CURL_CC) $(CURL_CFLAGS) /Fo"$@" ../lib/curl_ctype.c +$(CURL_DIROBJ)\curl_multibyte.obj: ../lib/curl_multibyte.c + $(CURL_CC) $(CURL_CFLAGS) /Fo"$@" ../lib/curl_multibyte.c +$(CURL_DIROBJ)\version_win32.obj: ../lib/version_win32.c + $(CURL_CC) $(CURL_CFLAGS) /Fo"$@" ../lib/version_win32.c +$(CURL_DIROBJ)\dynbuf.obj: ../lib/dynbuf.c + $(CURL_CC) $(CURL_CFLAGS) /Fo"$@" ../lib/dynbuf.c +$(CURL_DIROBJ)\curl.res: $(CURL_SRC_DIR)\curl.rc + rc $(CURL_RC_FLAGS) + +!ENDIF # End of case where a config was provided. + +clean: + @-erase /s *.dll 2> NUL + @-erase /s *.exp 2> NUL + @-erase /s *.idb 2> NUL + @-erase /s *.lib 2> NUL + @-erase /s *.obj 2> NUL + @-erase /s *.pch 2> NUL + @-erase /s *.pdb 2> NUL + @-erase /s *.res 2> NUL + @if exist $(LIB_DIROBJ) rd /s/q $(LIB_DIROBJ) + @if exist $(CURL_DIROBJ)rd /s/q $(CURL_DIROBJ) + @if exist $(DIRDIST) rd /s/q $(DIRDIST)