From: Viktor Szakats Date: Thu, 27 Jun 2024 00:38:38 +0000 (+0200) Subject: CI: add whitespace checker X-Git-Tag: curl-8_9_0~168 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=1ccdad64efecbf3167d6f60737037157011c1468;p=thirdparty%2Fcurl.git CI: add whitespace checker Fix issues detected. Also: - One of the `.vc` files used LF EOLs, while the other didn't. Make that one also use LF EOLs, as this is apparently supported by `nmake`. - Drop `.dsw` and `.btn` types from `.gitattributes`. The repository doesn't use them. - Sync section order with the rest of files in `tests/certs/EdelCurlRoot-ca.prm`. - Indent/align `.prm` and `.pem` files. - Delete dummy `[something]` section from `.prm` and `.pem` files. Mental note: MSVC `.sln` files seem to accept spaces for indentation and also support LF line-endings. I cannot test this and I don't know what's more convenient when updating them, so left them as-is, with specific exclusions. Closes #14031 --- diff --git a/.gitattributes b/.gitattributes index 481fd5cff6..d4f08a9e58 100644 --- a/.gitattributes +++ b/.gitattributes @@ -2,7 +2,6 @@ # # SPDX-License-Identifier: curl -*.dsw -crlf buildconf eol=lf configure.ac eol=lf *.m4 eol=lf @@ -11,8 +10,7 @@ configure.ac eol=lf *.sh eol=lf *.[ch] whitespace=tab-in-indent -# Batch files (bat,btm,cmd) must be run with CRLF line endings. +# Batch files (bat,cmd) must be run with CRLF line endings. # Refer to https://github.com/curl/curl/pull/6442 *.bat text eol=crlf -*.btm text eol=crlf *.cmd text eol=crlf diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 9e7b6e391a..7e1eea50ff 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1,3 +1,3 @@ -# Copyright (C) Daniel Stenberg, , et al. -# -# SPDX-License-Identifier: curl +# Copyright (C) Daniel Stenberg, , et al. +# +# SPDX-License-Identifier: curl diff --git a/.github/scripts/spacecheck.pl b/.github/scripts/spacecheck.pl new file mode 100755 index 0000000000..36847730f5 --- /dev/null +++ b/.github/scripts/spacecheck.pl @@ -0,0 +1,153 @@ +#!/usr/bin/env perl +#*************************************************************************** +# _ _ ____ _ +# Project ___| | | | _ \| | +# / __| | | | |_) | | +# | (__| |_| | _ <| |___ +# \___|\___/|_| \_\_____| +# +# Copyright (C) Viktor Szakats +# +# This software is licensed as described in the file COPYING, which +# you should have received as part of this distribution. The terms +# are also available at https://curl.se/docs/copyright.html. +# +# You may opt to use, copy, modify, merge, publish, distribute and/or sell +# copies of the Software, and permit persons to whom the Software is +# furnished to do so, under the terms of the COPYING file. +# +# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY +# KIND, either express or implied. +# +# SPDX-License-Identifier: curl +# +########################################################################### + +use strict; +use warnings; + +my @tabs = ( + "^m4/zz40-xc-ovr.m4", + "Makefile\\.[a-z]+\$", + "/mkfile", + "\\.(bat|cmd|sln|vc)\$", + "^tests/certs/.+\\.der\$", + "^tests/data/test", +); + +my @mixed_eol = ( + "^tests/certs/.+\\.(crt|der)\$", + "^tests/certs/Server-localhost0h-sv.pem", + "^tests/data/test", +); + +my @need_crlf = ( + "\\.(bat|sln)\$", + "^winbuild/.+\\.(cmd|md)\$", +); + +my @space_at_eol = ( + "^tests/.+\\.(cacert|crt|pem)\$", + "^tests/data/test", +); + +my @eol_at_eof = ( + "^tests/certs/.+\\.der\$", +); + +sub fn_match { + my ($filename, @masklist) = @_; + + foreach my $mask (@masklist) { + if ($filename =~ $mask) { + return 1; + } + } + return 0; +} + +sub eol_detect { + my ($content) = @_; + + my $cr = () = $content =~ /\r/g; + my $lf = () = $content =~ /\n/g; + + if ($cr > 0 && $lf == 0) { + return "cr" + } + elsif ($cr == 0 && $lf > 0) { + return "lf" + } + elsif ($cr == 0 && $lf == 0) { + return "bin" + } + elsif ($cr == $lf) { + return "crlf" + } + + return "" +} + +my $issues = 0; + +open my $git_ls_files, '-|', 'git ls-files' or die "Failed running git ls-files: $!"; +while (my $filename = <$git_ls_files>) { + chomp $filename; + + open my $fh, '<', $filename or die "Cannot open '$filename': $!"; + my $content = do { local $/; <$fh> }; + close $fh; + + my @err = (); + + if (!fn_match($filename, @tabs) && + $content =~ /\t/) { + push @err, "content: has tab"; + } + + my $eol = eol_detect($content); + + if ($eol eq "" && + !fn_match($filename, @mixed_eol)) { + push @err, "content: has mixed EOL types"; + } + + if ($eol ne "crlf" && + fn_match($filename, @need_crlf)) { + push @err, "content: must use CRLF EOL for this file type"; + } + + if ($eol ne "lf" && $content ne "" && + !fn_match($filename, @need_crlf) && + !fn_match($filename, @mixed_eol)) { + push @err, "content: must use LF EOL for this file type"; + } + + if (!fn_match($filename, @space_at_eol) && + $content =~ /[ \t]\n/) { + push @err, "content: has line-ending whitespace"; + } + + if ($content ne "" && + !fn_match($filename, @eol_at_eof) && + $content !~ /\n\z/) { + push @err, "content: has no EOL at EOF"; + } + + if ($content =~ /\n\n\z/ || + $content =~ /\r\n\r\n\z/) { + push @err, "content: has multiple EOL at EOF"; + } + + if (@err) { + $issues++; + foreach my $err (@err) { + print "$filename: $err\n"; + } + } +} +close $git_ls_files; + +if ($issues) { + exit 1; +} diff --git a/.github/workflows/spacecheck.yml b/.github/workflows/spacecheck.yml new file mode 100644 index 0000000000..1a68185f98 --- /dev/null +++ b/.github/workflows/spacecheck.yml @@ -0,0 +1,28 @@ +# Copyright (C) Viktor Szakats +# +# SPDX-License-Identifier: curl + +name: spacecheck + +on: + push: + branches: + - master + pull_request: + branches: + - master + +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.sha }} + cancel-in-progress: true + +permissions: {} + +jobs: + spacecheck: + runs-on: ubuntu-latest + timeout-minutes: 2 + steps: + - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4 + - name: 'spacecheck' + run: .github/scripts/spacecheck.pl diff --git a/docs/CLIENT-READERS.md b/docs/CLIENT-READERS.md index 30a4725b19..073063845a 100644 --- a/docs/CLIENT-READERS.md +++ b/docs/CLIENT-READERS.md @@ -123,7 +123,7 @@ Readers operating on callbacks to the application need to "rewind" the underlyin ## Summary and Outlook -By adding the client reader interface, any protocol can control how/if it wants the curl transfer to send bytes for a request. The transfer loop becomes then blissfully ignorant of the specifics. +By adding the client reader interface, any protocol can control how/if it wants the curl transfer to send bytes for a request. The transfer loop becomes then blissfully ignorant of the specifics. The protocols on the other hand no longer have to care to package data most efficiently. At any time, should more data be needed, it can be read from the client. This is used when sending HTTP requests headers to add as much request body data to the initial sending as there is room for. diff --git a/docs/CONNECTION-FILTERS.md b/docs/CONNECTION-FILTERS.md index 6b20f93de1..629e769b90 100644 --- a/docs/CONNECTION-FILTERS.md +++ b/docs/CONNECTION-FILTERS.md @@ -271,7 +271,7 @@ conn[curl.se] --> SETUP[TCP] --> HAPPY-EYEBALLS --> TCP[2a04:4e42:c00::347]:443 * transfer ``` -The modular design of connection filters and that we can plug them into each other is used to control the parallel attempts. When a `TCP` filter does not connect (in time), it is torn down and another one is created for the next address. This keeps the `TCP` filter simple. +The modular design of connection filters and that we can plug them into each other is used to control the parallel attempts. When a `TCP` filter does not connect (in time), it is torn down and another one is created for the next address. This keeps the `TCP` filter simple. The `HAPPY-EYEBALLS` on the other hand stays focused on its side of the problem. We can use it also to make other type of connection by just giving it another filter type to try to have happy eyeballing for QUIC: diff --git a/docs/ECH.md b/docs/ECH.md index 9080cce4ef..3d35393237 100644 --- a/docs/ECH.md +++ b/docs/ECH.md @@ -337,7 +337,7 @@ Then: The boringssl APIs are fairly similar to those in our ECH-enabled OpenSSL fork, so code changes are also in ``lib/vtls/openssl.c``, protected via ``#ifdef OPENSSL_IS_BORINGSSL`` and are mostly obvious API variations. - + The boringssl APIs however do not support the ``--ech pn:`` command line variant as of now. @@ -377,7 +377,7 @@ There are some known issues with the ECH implementation in WolfSSL: [this ECH test web site](https://tls-ech.dev) and any other similarly configured sites. - There is also an issue related to so-called middlebox compatibility mode. - [middlebox compatibility issue](https://github.com/wolfSSL/wolfssl/issues/6774) + [middlebox compatibility issue](https://github.com/wolfSSL/wolfssl/issues/6774) ### Code changes to support WolfSSL @@ -445,7 +445,7 @@ LD_LIBRARY_PATH=$HOME/code/openssl:./lib/.libs gdb ./src/.libs/curl ### Localhost testing It can be useful to be able to run against a localhost OpenSSL ``s_server`` -for testing. We have published instructions for such +for testing. We have published instructions for such [localhost tests](https://github.com/defo-project/ech-dev-utils/blob/main/howtos/localhost-tests.md) in another repository. Once you have that set up, you can start a server and then run curl against that: diff --git a/docs/HTTP3.md b/docs/HTTP3.md index 2a6ebaa8a1..2661a55ef3 100644 --- a/docs/HTTP3.md +++ b/docs/HTTP3.md @@ -235,7 +235,7 @@ Build curl: % git clone https://github.com/curl/curl % cd curl % autoreconf -fi - % LDFLAGS="-Wl,-rpath,/lib" ./configure --with-openssl= --with-openssl-quic --with-nghttp3= + % LDFLAGS="-Wl,-rpath,/lib" ./configure --with-openssl= --with-openssl-quic --with-nghttp3= % make % make install diff --git a/docs/ROADMAP.md b/docs/ROADMAP.md index 03cc4c7072..abf306b335 100644 --- a/docs/ROADMAP.md +++ b/docs/ROADMAP.md @@ -14,4 +14,4 @@ participation. Agree that it is a good enough API and remove the EXPERIMENTAL label. -## +## diff --git a/docs/libcurl/libcurl-env-dbg.md b/docs/libcurl/libcurl-env-dbg.md index 9effd41651..81c165a006 100644 --- a/docs/libcurl/libcurl-env-dbg.md +++ b/docs/libcurl/libcurl-env-dbg.md @@ -135,4 +135,4 @@ does not matter. Make a blocking, graceful shutdown of all remaining connections when a multi handle is destroyed. This implicitly triggers for easy handles that are run via easy_perform. The value of the environment variable -gives the shutdown timeout in milliseconds. \ No newline at end of file +gives the shutdown timeout in milliseconds. diff --git a/projects/Windows/VC10/lib/libcurl.tmpl b/projects/Windows/VC10/lib/libcurl.tmpl index 7a37c270f1..6e8c539181 100644 --- a/projects/Windows/VC10/lib/libcurl.tmpl +++ b/projects/Windows/VC10/lib/libcurl.tmpl @@ -2350,4 +2350,4 @@ CURL_LIB_RC_FILES - \ No newline at end of file + diff --git a/projects/Windows/VC10/lib/libcurl.vcxproj.filters b/projects/Windows/VC10/lib/libcurl.vcxproj.filters index 4d6341d749..d2b9907aae 100644 --- a/projects/Windows/VC10/lib/libcurl.vcxproj.filters +++ b/projects/Windows/VC10/lib/libcurl.vcxproj.filters @@ -14,4 +14,4 @@ rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms - \ No newline at end of file + diff --git a/projects/Windows/VC10/src/curl.tmpl b/projects/Windows/VC10/src/curl.tmpl index 5e24977a4e..71a0b3ff0b 100644 --- a/projects/Windows/VC10/src/curl.tmpl +++ b/projects/Windows/VC10/src/curl.tmpl @@ -2640,4 +2640,4 @@ CURL_SRC_RC_FILES - \ No newline at end of file + diff --git a/projects/Windows/VC10/src/curl.vcxproj.filters b/projects/Windows/VC10/src/curl.vcxproj.filters index 4d6341d749..d2b9907aae 100644 --- a/projects/Windows/VC10/src/curl.vcxproj.filters +++ b/projects/Windows/VC10/src/curl.vcxproj.filters @@ -14,4 +14,4 @@ rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms - \ No newline at end of file + diff --git a/projects/Windows/VC11/lib/libcurl.tmpl b/projects/Windows/VC11/lib/libcurl.tmpl index 95cc9f6ca5..11b0ac487b 100644 --- a/projects/Windows/VC11/lib/libcurl.tmpl +++ b/projects/Windows/VC11/lib/libcurl.tmpl @@ -2406,4 +2406,4 @@ CURL_LIB_RC_FILES - \ No newline at end of file + diff --git a/projects/Windows/VC11/lib/libcurl.vcxproj.filters b/projects/Windows/VC11/lib/libcurl.vcxproj.filters index 4d6341d749..d2b9907aae 100644 --- a/projects/Windows/VC11/lib/libcurl.vcxproj.filters +++ b/projects/Windows/VC11/lib/libcurl.vcxproj.filters @@ -14,4 +14,4 @@ rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms - \ No newline at end of file + diff --git a/projects/Windows/VC11/src/curl.tmpl b/projects/Windows/VC11/src/curl.tmpl index 31df7d640f..b604a788c7 100644 --- a/projects/Windows/VC11/src/curl.tmpl +++ b/projects/Windows/VC11/src/curl.tmpl @@ -2696,4 +2696,4 @@ CURL_SRC_RC_FILES - \ No newline at end of file + diff --git a/projects/Windows/VC11/src/curl.vcxproj.filters b/projects/Windows/VC11/src/curl.vcxproj.filters index 4d6341d749..d2b9907aae 100644 --- a/projects/Windows/VC11/src/curl.vcxproj.filters +++ b/projects/Windows/VC11/src/curl.vcxproj.filters @@ -14,4 +14,4 @@ rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms - \ No newline at end of file + diff --git a/projects/Windows/VC12/lib/libcurl.tmpl b/projects/Windows/VC12/lib/libcurl.tmpl index a2d666c255..fed693ee1c 100644 --- a/projects/Windows/VC12/lib/libcurl.tmpl +++ b/projects/Windows/VC12/lib/libcurl.tmpl @@ -2406,4 +2406,4 @@ CURL_LIB_RC_FILES - \ No newline at end of file + diff --git a/projects/Windows/VC12/lib/libcurl.vcxproj.filters b/projects/Windows/VC12/lib/libcurl.vcxproj.filters index 4d6341d749..d2b9907aae 100644 --- a/projects/Windows/VC12/lib/libcurl.vcxproj.filters +++ b/projects/Windows/VC12/lib/libcurl.vcxproj.filters @@ -14,4 +14,4 @@ rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms - \ No newline at end of file + diff --git a/projects/Windows/VC12/src/curl.tmpl b/projects/Windows/VC12/src/curl.tmpl index 77c244e40c..3c98b676e8 100644 --- a/projects/Windows/VC12/src/curl.tmpl +++ b/projects/Windows/VC12/src/curl.tmpl @@ -2696,4 +2696,4 @@ CURL_SRC_RC_FILES - \ No newline at end of file + diff --git a/projects/Windows/VC12/src/curl.vcxproj.filters b/projects/Windows/VC12/src/curl.vcxproj.filters index 4d6341d749..d2b9907aae 100644 --- a/projects/Windows/VC12/src/curl.vcxproj.filters +++ b/projects/Windows/VC12/src/curl.vcxproj.filters @@ -14,4 +14,4 @@ rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms - \ No newline at end of file + diff --git a/tests/certs/EdelCurlRoot-ca.prm b/tests/certs/EdelCurlRoot-ca.prm index c8e248b3e8..cf1b30d239 100644 --- a/tests/certs/EdelCurlRoot-ca.prm +++ b/tests/certs/EdelCurlRoot-ca.prm @@ -1,20 +1,9 @@ extensions = x509v3 -[ req ] -default_bits = 2048 -distinguished_name = req_DN -default_md = sha256 -string_mask = utf8only -[ req_DN ] -countryName = "Country Name" -countryName_value = NN -organizationName = "Organization Name" -organizationName_value = Edel Curl Arctic Illudium Research Cloud -commonName = "Common Name" -commonName_value = Northern Nowhere Trust Anchor + [ x509v3 ] -basicConstraints = critical,CA:true -keyUsage = critical,keyCertSign,cRLSign -subjectKeyIdentifier = hash +basicConstraints = critical,CA:true +keyUsage = critical,keyCertSign,cRLSign +subjectKeyIdentifier = hash authorityKeyIdentifier = keyid:always authorityInfoAccess = @issuer_info crlDistributionPoints = @crl_info @@ -27,4 +16,18 @@ authorityInfoAccess = @issuer_info caIssuers;URI.0 = http://test.curl.se/ca/EdelCurlRoot.cer [ crl_info ] -URI.0 = http://test.curl.se/ca/EdelCurlRoot.crl \ No newline at end of file +URI.0 = http://test.curl.se/ca/EdelCurlRoot.crl + +[ req ] +default_bits = 2048 +distinguished_name = req_DN +default_md = sha256 +string_mask = utf8only + +[ req_DN ] +countryName = "Country Name" +countryName_value = NN +organizationName = "Organization Name" +organizationName_value = Edel Curl Arctic Illudium Research Cloud +commonName = "Common Name" +commonName_value = Northern Nowhere Trust Anchor diff --git a/tests/certs/Server-localhost-firstSAN-sv.pem b/tests/certs/Server-localhost-firstSAN-sv.pem index 3751e7b601..e06863227f 100644 --- a/tests/certs/Server-localhost-firstSAN-sv.pem +++ b/tests/certs/Server-localhost-firstSAN-sv.pem @@ -1,11 +1,12 @@ extensions = x509v3 + [ x509v3 ] -subjectAltName = DNS:localhost,DNS:localhost1,DNS:localhost2 -keyUsage = keyEncipherment,digitalSignature,keyAgreement -extendedKeyUsage = serverAuth -subjectKeyIdentifier = hash -authorityKeyIdentifier = keyid -basicConstraints = CA:false +subjectAltName = DNS:localhost,DNS:localhost1,DNS:localhost2 +keyUsage = keyEncipherment,digitalSignature,keyAgreement +extendedKeyUsage = serverAuth +subjectKeyIdentifier = hash +authorityKeyIdentifier = keyid +basicConstraints = CA:false authorityInfoAccess = @issuer_info crlDistributionPoints = @crl_info @@ -20,23 +21,18 @@ caIssuers;URI.0 = http://test.curl.se/ca/EdelCurlRoot.cer URI.0 = http://test.curl.se/ca/EdelCurlRoot.crl [ req ] -default_bits = 1024 -distinguished_name = req_DN -default_md = sha256 -string_mask = utf8only +default_bits = 1024 +distinguished_name = req_DN +default_md = sha256 +string_mask = utf8only [ req_DN ] -countryName = "Country Name is Northern Nowhere" -countryName_value = NN -organizationName = "Organization Name" -organizationName_value = Edel Curl Arctic Illudium Research Cloud -commonName = "Common Name" -commonName_value = localhost.nn - -[something] -# The key -# the certificate -# some dhparam +countryName = "Country Name is Northern Nowhere" +countryName_value = NN +organizationName = "Organization Name" +organizationName_value = Edel Curl Arctic Illudium Research Cloud +commonName = "Common Name" +commonName_value = localhost.nn -----BEGIN PRIVATE KEY----- MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCqFG49ghwozY+A r1DtF5dt5qhhPqyorBPOmespLElz+RJANcR5hA2esCjEn2TjwW0tcRFdSxRhIEsY diff --git a/tests/certs/Server-localhost-firstSAN-sv.prm b/tests/certs/Server-localhost-firstSAN-sv.prm index 911f4ce540..1a38899357 100644 --- a/tests/certs/Server-localhost-firstSAN-sv.prm +++ b/tests/certs/Server-localhost-firstSAN-sv.prm @@ -1,11 +1,12 @@ extensions = x509v3 + [ x509v3 ] -subjectAltName = DNS:localhost,DNS:localhost1,DNS:localhost2 -keyUsage = keyEncipherment,digitalSignature,keyAgreement -extendedKeyUsage = serverAuth -subjectKeyIdentifier = hash -authorityKeyIdentifier = keyid -basicConstraints = CA:false +subjectAltName = DNS:localhost,DNS:localhost1,DNS:localhost2 +keyUsage = keyEncipherment,digitalSignature,keyAgreement +extendedKeyUsage = serverAuth +subjectKeyIdentifier = hash +authorityKeyIdentifier = keyid +basicConstraints = CA:false authorityInfoAccess = @issuer_info crlDistributionPoints = @crl_info @@ -20,20 +21,15 @@ caIssuers;URI.0 = http://test.curl.se/ca/EdelCurlRoot.cer URI.0 = http://test.curl.se/ca/EdelCurlRoot.crl [ req ] -default_bits = 1024 -distinguished_name = req_DN -default_md = sha256 -string_mask = utf8only +default_bits = 1024 +distinguished_name = req_DN +default_md = sha256 +string_mask = utf8only [ req_DN ] -countryName = "Country Name is Northern Nowhere" -countryName_value = NN -organizationName = "Organization Name" -organizationName_value = Edel Curl Arctic Illudium Research Cloud -commonName = "Common Name" -commonName_value = localhost.nn - -[something] -# The key -# the certificate -# some dhparam +countryName = "Country Name is Northern Nowhere" +countryName_value = NN +organizationName = "Organization Name" +organizationName_value = Edel Curl Arctic Illudium Research Cloud +commonName = "Common Name" +commonName_value = localhost.nn diff --git a/tests/certs/Server-localhost-lastSAN-sv.pem b/tests/certs/Server-localhost-lastSAN-sv.pem index b1cbd4b6b2..c3124ff1ca 100644 --- a/tests/certs/Server-localhost-lastSAN-sv.pem +++ b/tests/certs/Server-localhost-lastSAN-sv.pem @@ -1,11 +1,12 @@ extensions = x509v3 + [ x509v3 ] -subjectAltName = DNS:localhost1,DNS:localhost2,DNS:localhost -keyUsage = keyEncipherment,digitalSignature,keyAgreement -extendedKeyUsage = serverAuth -subjectKeyIdentifier = hash -authorityKeyIdentifier = keyid -basicConstraints = CA:false +subjectAltName = DNS:localhost1,DNS:localhost2,DNS:localhost +keyUsage = keyEncipherment,digitalSignature,keyAgreement +extendedKeyUsage = serverAuth +subjectKeyIdentifier = hash +authorityKeyIdentifier = keyid +basicConstraints = CA:false authorityInfoAccess = @issuer_info crlDistributionPoints = @crl_info @@ -20,22 +21,18 @@ caIssuers;URI.0 = http://test.curl.se/ca/EdelCurlRoot.cer URI.0 = http://test.curl.se/ca/EdelCurlRoot.crl [ req ] -default_bits = 1024 -distinguished_name = req_DN -default_md = sha256 -string_mask = utf8only -[ req_DN ] -countryName = "Country Name is Northern Nowhere" -countryName_value = NN -organizationName = "Organization Name" -organizationName_value = Edel Curl Arctic Illudium Research Cloud -commonName = "Common Name" -commonName_value = localhost.nn +default_bits = 1024 +distinguished_name = req_DN +default_md = sha256 +string_mask = utf8only -[something] -# The key -# the certificate -# some dhparam +[ req_DN ] +countryName = "Country Name is Northern Nowhere" +countryName_value = NN +organizationName = "Organization Name" +organizationName_value = Edel Curl Arctic Illudium Research Cloud +commonName = "Common Name" +commonName_value = localhost.nn -----BEGIN PRIVATE KEY----- MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDIhP5pZDPD3LV0 iseyu9lp4qmVbV+3JeaCACv1UyHnKK5mtjj9FbGRiFIxKbtz4uCZYpVENVHXVMjS diff --git a/tests/certs/Server-localhost-lastSAN-sv.prm b/tests/certs/Server-localhost-lastSAN-sv.prm index c5e72f4542..fd2507323e 100644 --- a/tests/certs/Server-localhost-lastSAN-sv.prm +++ b/tests/certs/Server-localhost-lastSAN-sv.prm @@ -1,11 +1,12 @@ extensions = x509v3 + [ x509v3 ] -subjectAltName = DNS:localhost1,DNS:localhost2,DNS:localhost -keyUsage = keyEncipherment,digitalSignature,keyAgreement -extendedKeyUsage = serverAuth -subjectKeyIdentifier = hash -authorityKeyIdentifier = keyid -basicConstraints = CA:false +subjectAltName = DNS:localhost1,DNS:localhost2,DNS:localhost +keyUsage = keyEncipherment,digitalSignature,keyAgreement +extendedKeyUsage = serverAuth +subjectKeyIdentifier = hash +authorityKeyIdentifier = keyid +basicConstraints = CA:false authorityInfoAccess = @issuer_info crlDistributionPoints = @crl_info @@ -20,19 +21,15 @@ caIssuers;URI.0 = http://test.curl.se/ca/EdelCurlRoot.cer URI.0 = http://test.curl.se/ca/EdelCurlRoot.crl [ req ] -default_bits = 1024 -distinguished_name = req_DN -default_md = sha256 -string_mask = utf8only -[ req_DN ] -countryName = "Country Name is Northern Nowhere" -countryName_value = NN -organizationName = "Organization Name" -organizationName_value = Edel Curl Arctic Illudium Research Cloud -commonName = "Common Name" -commonName_value = localhost.nn +default_bits = 1024 +distinguished_name = req_DN +default_md = sha256 +string_mask = utf8only -[something] -# The key -# the certificate -# some dhparam +[ req_DN ] +countryName = "Country Name is Northern Nowhere" +countryName_value = NN +organizationName = "Organization Name" +organizationName_value = Edel Curl Arctic Illudium Research Cloud +commonName = "Common Name" +commonName_value = localhost.nn diff --git a/tests/certs/Server-localhost-sv.pem b/tests/certs/Server-localhost-sv.pem index 583831f8f9..2761de4383 100644 --- a/tests/certs/Server-localhost-sv.pem +++ b/tests/certs/Server-localhost-sv.pem @@ -1,11 +1,12 @@ extensions = x509v3 + [ x509v3 ] -subjectAltName = DNS:localhost -keyUsage = keyEncipherment,digitalSignature,keyAgreement -extendedKeyUsage = serverAuth -subjectKeyIdentifier = hash -authorityKeyIdentifier = keyid -basicConstraints = CA:false +subjectAltName = DNS:localhost +keyUsage = keyEncipherment,digitalSignature,keyAgreement +extendedKeyUsage = serverAuth +subjectKeyIdentifier = hash +authorityKeyIdentifier = keyid +basicConstraints = CA:false authorityInfoAccess = @issuer_info crlDistributionPoints = @crl_info @@ -20,22 +21,18 @@ caIssuers;URI.0 = http://test.curl.se/ca/EdelCurlRoot.cer URI.0 = http://test.curl.se/ca/EdelCurlRoot.crl [ req ] -default_bits = 1024 -distinguished_name = req_DN -default_md = sha256 -string_mask = utf8only -[ req_DN ] -countryName = "Country Name is Northern Nowhere" -countryName_value = NN -organizationName = "Organization Name" -organizationName_value = Edel Curl Arctic Illudium Research Cloud -commonName = "Common Name" -commonName_value = localhost +default_bits = 1024 +distinguished_name = req_DN +default_md = sha256 +string_mask = utf8only -[something] -# The key -# the certificate -# some dhparam +[ req_DN ] +countryName = "Country Name is Northern Nowhere" +countryName_value = NN +organizationName = "Organization Name" +organizationName_value = Edel Curl Arctic Illudium Research Cloud +commonName = "Common Name" +commonName_value = localhost -----BEGIN PRIVATE KEY----- MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDGuAQ91voxoNf3 6YhLWl5vb9v0yUt+bCrPNHsquhpxrX94bPceygfQKQNJ5GOGTPZnP70yacu4FecO diff --git a/tests/certs/Server-localhost-sv.prm b/tests/certs/Server-localhost-sv.prm index f58710406a..54a07e3f3e 100644 --- a/tests/certs/Server-localhost-sv.prm +++ b/tests/certs/Server-localhost-sv.prm @@ -1,11 +1,12 @@ extensions = x509v3 + [ x509v3 ] -subjectAltName = DNS:localhost -keyUsage = keyEncipherment,digitalSignature,keyAgreement -extendedKeyUsage = serverAuth -subjectKeyIdentifier = hash -authorityKeyIdentifier = keyid -basicConstraints = CA:false +subjectAltName = DNS:localhost +keyUsage = keyEncipherment,digitalSignature,keyAgreement +extendedKeyUsage = serverAuth +subjectKeyIdentifier = hash +authorityKeyIdentifier = keyid +basicConstraints = CA:false authorityInfoAccess = @issuer_info crlDistributionPoints = @crl_info @@ -20,19 +21,15 @@ caIssuers;URI.0 = http://test.curl.se/ca/EdelCurlRoot.cer URI.0 = http://test.curl.se/ca/EdelCurlRoot.crl [ req ] -default_bits = 1024 -distinguished_name = req_DN -default_md = sha256 -string_mask = utf8only -[ req_DN ] -countryName = "Country Name is Northern Nowhere" -countryName_value = NN -organizationName = "Organization Name" -organizationName_value = Edel Curl Arctic Illudium Research Cloud -commonName = "Common Name" -commonName_value = localhost +default_bits = 1024 +distinguished_name = req_DN +default_md = sha256 +string_mask = utf8only -[something] -# The key -# the certificate -# some dhparam +[ req_DN ] +countryName = "Country Name is Northern Nowhere" +countryName_value = NN +organizationName = "Organization Name" +organizationName_value = Edel Curl Arctic Illudium Research Cloud +commonName = "Common Name" +commonName_value = localhost diff --git a/tests/certs/Server-localhost.nn-sv.pem b/tests/certs/Server-localhost.nn-sv.pem index 29dc52ce03..4ce5c1e6bc 100644 --- a/tests/certs/Server-localhost.nn-sv.pem +++ b/tests/certs/Server-localhost.nn-sv.pem @@ -1,11 +1,12 @@ extensions = x509v3 + [ x509v3 ] -subjectAltName = DNS:localhost.nn -keyUsage = keyEncipherment,digitalSignature,keyAgreement -extendedKeyUsage = serverAuth -subjectKeyIdentifier = hash -authorityKeyIdentifier = keyid -basicConstraints = CA:false +subjectAltName = DNS:localhost.nn +keyUsage = keyEncipherment,digitalSignature,keyAgreement +extendedKeyUsage = serverAuth +subjectKeyIdentifier = hash +authorityKeyIdentifier = keyid +basicConstraints = CA:false authorityInfoAccess = @issuer_info crlDistributionPoints = @crl_info @@ -20,22 +21,18 @@ caIssuers;URI.0 = http://test.curl.se/ca/EdelCurlRoot.cer URI.0 = http://test.curl.se/ca/EdelCurlRoot.crl [ req ] -default_bits = 1024 -distinguished_name = req_DN -default_md = sha256 -string_mask = utf8only -[ req_DN ] -countryName = "Country Name is Northern Nowhere" -countryName_value = NN -organizationName = "Organization Name" -organizationName_value = Edel Curl Arctic Illudium Research Cloud -commonName = "Common Name" -commonName_value = localhost.nn +default_bits = 1024 +distinguished_name = req_DN +default_md = sha256 +string_mask = utf8only -[something] -# The key -# the certificate -# some dhparam +[ req_DN ] +countryName = "Country Name is Northern Nowhere" +countryName_value = NN +organizationName = "Organization Name" +organizationName_value = Edel Curl Arctic Illudium Research Cloud +commonName = "Common Name" +commonName_value = localhost.nn -----BEGIN PRIVATE KEY----- MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCjmuQP4L2TqVqn Xq2FXtbgmLTpIuBikMPZVzcWXVc9aMrizy9GZxoMrw6JhgEG39bJgBUKQ4VAP9ru diff --git a/tests/certs/Server-localhost.nn-sv.prm b/tests/certs/Server-localhost.nn-sv.prm index 5e93bf8b7e..376fc3a115 100644 --- a/tests/certs/Server-localhost.nn-sv.prm +++ b/tests/certs/Server-localhost.nn-sv.prm @@ -1,11 +1,12 @@ extensions = x509v3 + [ x509v3 ] -subjectAltName = DNS:localhost.nn -keyUsage = keyEncipherment,digitalSignature,keyAgreement -extendedKeyUsage = serverAuth -subjectKeyIdentifier = hash -authorityKeyIdentifier = keyid -basicConstraints = CA:false +subjectAltName = DNS:localhost.nn +keyUsage = keyEncipherment,digitalSignature,keyAgreement +extendedKeyUsage = serverAuth +subjectKeyIdentifier = hash +authorityKeyIdentifier = keyid +basicConstraints = CA:false authorityInfoAccess = @issuer_info crlDistributionPoints = @crl_info @@ -20,19 +21,15 @@ caIssuers;URI.0 = http://test.curl.se/ca/EdelCurlRoot.cer URI.0 = http://test.curl.se/ca/EdelCurlRoot.crl [ req ] -default_bits = 1024 -distinguished_name = req_DN -default_md = sha256 -string_mask = utf8only -[ req_DN ] -countryName = "Country Name is Northern Nowhere" -countryName_value = NN -organizationName = "Organization Name" -organizationName_value = Edel Curl Arctic Illudium Research Cloud -commonName = "Common Name" -commonName_value = localhost.nn +default_bits = 1024 +distinguished_name = req_DN +default_md = sha256 +string_mask = utf8only -[something] -# The key -# the certificate -# some dhparam +[ req_DN ] +countryName = "Country Name is Northern Nowhere" +countryName_value = NN +organizationName = "Organization Name" +organizationName_value = Edel Curl Arctic Illudium Research Cloud +commonName = "Common Name" +commonName_value = localhost.nn diff --git a/tests/certs/Server-localhost0h-sv.pem b/tests/certs/Server-localhost0h-sv.pem index 72f326dfba..9c4c9632ad 100644 --- a/tests/certs/Server-localhost0h-sv.pem +++ b/tests/certs/Server-localhost0h-sv.pem @@ -1,12 +1,13 @@ extensions = x509v3 + [ x509v3 ] -#subjectAltName = DNS:localhost\0h -subjectAltName = DER:30:0d:82:0b:6c:6f:63:61:6c:68:6f:73:74:00:68 -keyUsage = keyEncipherment,digitalSignature,keyAgreement -extendedKeyUsage = serverAuth -subjectKeyIdentifier = hash -authorityKeyIdentifier = keyid -basicConstraints = CA:false +#subjectAltName = DNS:localhost\0h +subjectAltName = DER:30:0d:82:0b:6c:6f:63:61:6c:68:6f:73:74:00:68 +keyUsage = keyEncipherment,digitalSignature,keyAgreement +extendedKeyUsage = serverAuth +subjectKeyIdentifier = hash +authorityKeyIdentifier = keyid +basicConstraints = CA:false authorityInfoAccess = @issuer_info crlDistributionPoints = @crl_info @@ -21,22 +22,18 @@ caIssuers;URI.0 = http://test.curl.se/ca/EdelCurlRoot.cer URI.0 = http://test.curl.se/ca/EdelCurlRoot.crl [ req ] -default_bits = 1024 -distinguished_name = req_DN -default_md = sha256 -string_mask = utf8only -[ req_DN ] -countryName = "Country Name is Northern Nowhere" -countryName_value = NN -organizationName = "Organization Name" -organizationName_value = Edel Curl Arctic Illudium Research Cloud -commonName = "Common Name" -commonName_value = localhost +default_bits = 1024 +distinguished_name = req_DN +default_md = sha256 +string_mask = utf8only -[something] -# The key -# the certificate -# some dhparam +[ req_DN ] +countryName = "Country Name is Northern Nowhere" +countryName_value = NN +organizationName = "Organization Name" +organizationName_value = Edel Curl Arctic Illudium Research Cloud +commonName = "Common Name" +commonName_value = localhost -----BEGIN PRIVATE KEY----- MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDfKZNYgh2iuAcq so+TDt8VSXIGkxlKLcW9VpJa2vTTmgEc7kdXDp7Y1w3Ezkui8PwH7JHplQj06V3y diff --git a/tests/certs/Server-localhost0h-sv.prm b/tests/certs/Server-localhost0h-sv.prm index 439aefb9e7..4285341763 100644 --- a/tests/certs/Server-localhost0h-sv.prm +++ b/tests/certs/Server-localhost0h-sv.prm @@ -1,12 +1,13 @@ extensions = x509v3 + [ x509v3 ] -#subjectAltName = DNS:localhost\0h -subjectAltName = DER:30:0d:82:0b:6c:6f:63:61:6c:68:6f:73:74:00:68 -keyUsage = keyEncipherment,digitalSignature,keyAgreement -extendedKeyUsage = serverAuth -subjectKeyIdentifier = hash -authorityKeyIdentifier = keyid -basicConstraints = CA:false +#subjectAltName = DNS:localhost\0h +subjectAltName = DER:30:0d:82:0b:6c:6f:63:61:6c:68:6f:73:74:00:68 +keyUsage = keyEncipherment,digitalSignature,keyAgreement +extendedKeyUsage = serverAuth +subjectKeyIdentifier = hash +authorityKeyIdentifier = keyid +basicConstraints = CA:false authorityInfoAccess = @issuer_info crlDistributionPoints = @crl_info @@ -21,19 +22,15 @@ caIssuers;URI.0 = http://test.curl.se/ca/EdelCurlRoot.cer URI.0 = http://test.curl.se/ca/EdelCurlRoot.crl [ req ] -default_bits = 1024 -distinguished_name = req_DN -default_md = sha256 -string_mask = utf8only -[ req_DN ] -countryName = "Country Name is Northern Nowhere" -countryName_value = NN -organizationName = "Organization Name" -organizationName_value = Edel Curl Arctic Illudium Research Cloud -commonName = "Common Name" -commonName_value = localhost +default_bits = 1024 +distinguished_name = req_DN +default_md = sha256 +string_mask = utf8only -[something] -# The key -# the certificate -# some dhparam +[ req_DN ] +countryName = "Country Name is Northern Nowhere" +countryName_value = NN +organizationName = "Organization Name" +organizationName_value = Edel Curl Arctic Illudium Research Cloud +commonName = "Common Name" +commonName_value = localhost diff --git a/tests/certs/stunnel-sv.pem b/tests/certs/stunnel-sv.pem index b7dd1e879f..b273ff7617 100644 --- a/tests/certs/stunnel-sv.pem +++ b/tests/certs/stunnel-sv.pem @@ -1,11 +1,12 @@ extensions = x509v3 + [ x509v3 ] -subjectAltName = DNS:localhost -keyUsage = keyEncipherment,digitalSignature,keyAgreement -extendedKeyUsage = serverAuth -subjectKeyIdentifier = hash -authorityKeyIdentifier = keyid -basicConstraints = CA:false +subjectAltName = DNS:localhost +keyUsage = keyEncipherment,digitalSignature,keyAgreement +extendedKeyUsage = serverAuth +subjectKeyIdentifier = hash +authorityKeyIdentifier = keyid +basicConstraints = CA:false authorityInfoAccess = @issuer_info crlDistributionPoints = @crl_info @@ -20,22 +21,18 @@ caIssuers;URI.0 = http://test.curl.se/ca/EdelCurlRoot.cer URI.0 = http://test.curl.se/ca/EdelCurlRoot.crl [ req ] -default_bits = 12048 -distinguished_name = req_DN -default_md = sha256 -string_mask = utf8only -[ req_DN ] -countryName = "Country Name is Northern Nowhere" -countryName_value = NN -organizationName = "Organization Name" -organizationName_value = Edel Curl Arctic Illudium Research Cloud -commonName = "Common Name" -commonName_value = localhost +default_bits = 12048 +distinguished_name = req_DN +default_md = sha256 +string_mask = utf8only -[something] -# The key -# the certificate -# some dhparam +[ req_DN ] +countryName = "Country Name is Northern Nowhere" +countryName_value = NN +organizationName = "Organization Name" +organizationName_value = Edel Curl Arctic Illudium Research Cloud +commonName = "Common Name" +commonName_value = localhost -----BEGIN PRIVATE KEY----- MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCrCrAD0Hb+Xs4V 3mHV45FvfNa7yiaOeL4mNdGmWfHVPFU+CSzsoNSvDjxaorWweFGVYoCAcchOn1lZ diff --git a/tests/certs/stunnel-sv.prm b/tests/certs/stunnel-sv.prm index 3803da3756..8fd080bd8b 100644 --- a/tests/certs/stunnel-sv.prm +++ b/tests/certs/stunnel-sv.prm @@ -1,11 +1,12 @@ extensions = x509v3 + [ x509v3 ] -subjectAltName = DNS:localhost -keyUsage = keyEncipherment,digitalSignature,keyAgreement -extendedKeyUsage = serverAuth -subjectKeyIdentifier = hash -authorityKeyIdentifier = keyid -basicConstraints = CA:false +subjectAltName = DNS:localhost +keyUsage = keyEncipherment,digitalSignature,keyAgreement +extendedKeyUsage = serverAuth +subjectKeyIdentifier = hash +authorityKeyIdentifier = keyid +basicConstraints = CA:false authorityInfoAccess = @issuer_info crlDistributionPoints = @crl_info @@ -20,19 +21,15 @@ caIssuers;URI.0 = http://test.curl.se/ca/EdelCurlRoot.cer URI.0 = http://test.curl.se/ca/EdelCurlRoot.crl [ req ] -default_bits = 12048 -distinguished_name = req_DN -default_md = sha256 -string_mask = utf8only -[ req_DN ] -countryName = "Country Name is Northern Nowhere" -countryName_value = NN -organizationName = "Organization Name" -organizationName_value = Edel Curl Arctic Illudium Research Cloud -commonName = "Common Name" -commonName_value = localhost +default_bits = 12048 +distinguished_name = req_DN +default_md = sha256 +string_mask = utf8only -[something] -# The key -# the certificate -# some dhparam +[ req_DN ] +countryName = "Country Name is Northern Nowhere" +countryName_value = NN +organizationName = "Organization Name" +organizationName_value = Edel Curl Arctic Illudium Research Cloud +commonName = "Common Name" +commonName_value = localhost diff --git a/tests/data/test1296 b/tests/data/test1296 index 20dc265701..65fbdb2dbb 100644 --- a/tests/data/test1296 +++ b/tests/data/test1296 @@ -51,4 +51,3 @@ Accept: */* - diff --git a/tests/data/test1459 b/tests/data/test1459 index c05da3cb58..6aab500038 100644 --- a/tests/data/test1459 +++ b/tests/data/test1459 @@ -45,4 +45,3 @@ disable - diff --git a/tests/data/test3029 b/tests/data/test3029 index 2e51bbeaf4..1436602093 100644 --- a/tests/data/test3029 +++ b/tests/data/test3029 @@ -36,4 +36,4 @@ Content-Length: 6 - \ No newline at end of file + diff --git a/tests/data/test3030 b/tests/data/test3030 index 7e169cf43a..56da81c7cb 100644 --- a/tests/data/test3030 +++ b/tests/data/test3030 @@ -40,4 +40,4 @@ Content-Length: 6 - \ No newline at end of file + diff --git a/tests/http/test_19_shutdown.py b/tests/http/test_19_shutdown.py index 8a515a51be..21ddc1ad20 100644 --- a/tests/http/test_19_shutdown.py +++ b/tests/http/test_19_shutdown.py @@ -172,5 +172,3 @@ class TestShutdown: # check connection cache closings shutdowns = [l for l in r.trace_lines if re.match(r'.*CCACHE\] shutdown #\d+, done=1', l)] assert len(shutdowns) == 1, f'{shutdowns}' - - diff --git a/tests/stunnel.pem b/tests/stunnel.pem index b7dd1e879f..b273ff7617 100644 --- a/tests/stunnel.pem +++ b/tests/stunnel.pem @@ -1,11 +1,12 @@ extensions = x509v3 + [ x509v3 ] -subjectAltName = DNS:localhost -keyUsage = keyEncipherment,digitalSignature,keyAgreement -extendedKeyUsage = serverAuth -subjectKeyIdentifier = hash -authorityKeyIdentifier = keyid -basicConstraints = CA:false +subjectAltName = DNS:localhost +keyUsage = keyEncipherment,digitalSignature,keyAgreement +extendedKeyUsage = serverAuth +subjectKeyIdentifier = hash +authorityKeyIdentifier = keyid +basicConstraints = CA:false authorityInfoAccess = @issuer_info crlDistributionPoints = @crl_info @@ -20,22 +21,18 @@ caIssuers;URI.0 = http://test.curl.se/ca/EdelCurlRoot.cer URI.0 = http://test.curl.se/ca/EdelCurlRoot.crl [ req ] -default_bits = 12048 -distinguished_name = req_DN -default_md = sha256 -string_mask = utf8only -[ req_DN ] -countryName = "Country Name is Northern Nowhere" -countryName_value = NN -organizationName = "Organization Name" -organizationName_value = Edel Curl Arctic Illudium Research Cloud -commonName = "Common Name" -commonName_value = localhost +default_bits = 12048 +distinguished_name = req_DN +default_md = sha256 +string_mask = utf8only -[something] -# The key -# the certificate -# some dhparam +[ req_DN ] +countryName = "Country Name is Northern Nowhere" +countryName_value = NN +organizationName = "Organization Name" +organizationName_value = Edel Curl Arctic Illudium Research Cloud +commonName = "Common Name" +commonName_value = localhost -----BEGIN PRIVATE KEY----- MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCrCrAD0Hb+Xs4V 3mHV45FvfNa7yiaOeL4mNdGmWfHVPFU+CSzsoNSvDjxaorWweFGVYoCAcchOn1lZ diff --git a/winbuild/MakefileBuild.vc b/winbuild/MakefileBuild.vc index 6b8c6ceb10..38f77184bb 100644 --- a/winbuild/MakefileBuild.vc +++ b/winbuild/MakefileBuild.vc @@ -1,714 +1,714 @@ -#*************************************************************************** -# _ _ ____ _ -# Project ___| | | | _ \| | -# / __| | | | |_) | | -# | (__| |_| | _ <| |___ -# \___|\___/|_| \_\_____| -# -# Copyright (C) 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. -# -# SPDX-License-Identifier: curl -# -#*************************************************************************** - -########################################################################### -# -# 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 /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 /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 /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 "$(ENABLE_OPENSSL_AUTO_LOAD_CONFIG)"=="false" -SSL_CFLAGS = $(SSL_CFLAGS) /DCURL_DISABLE_OPENSSL_AUTO_LOAD_CONFIG -!ENDIF -!ENDIF - -!IF "$(ENABLE_WEBSOCKETS)"=="true" -CFLAGS = $(CFLAGS) /DUSE_WEBSOCKETS=1 -!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)" -!IF EXISTS("$(NGHTTP2_LIB_DIR)\nghttp2_static.lib") -NGHTTP2_LIBS = nghttp2_static.lib -!ELSE -NGHTTP2_LIBS = nghttp2.lib -!ENDIF -!ENDIF - -!IFDEF MSH3_PATH -MSH3_INC_DIR = $(MSH3_PATH)\include -MSH3_LIB_DIR = $(MSH3_PATH)\lib -MSH3_LFLAGS = $(MSH3_LFLAGS) "/LIBPATH:$(MSH3_LIB_DIR)" -!ELSE -MSH3_INC_DIR = $(DEVEL_INCLUDE) -MSH3_LIB_DIR = $(DEVEL_LIB) -!ENDIF - -!IF "$(WITH_MSH3)"=="dll" -MSH3_CFLAGS = /DUSE_MSH3 /I"$(MSH3_INC_DIR)" -MSH3_LIBS = msh3.lib -!ELSEIF "$(WITH_MSH3)"=="static" -MSH3_CFLAGS = /DUSE_MSH3 /DMSH3_STATICLIB /I"$(MSH3_INC_DIR)" -!IF EXISTS("$(NGHTTP2_LIB_DIR)\msh3_static.lib") -MSH3_LIBS = msh3_static.lib -!ELSE -MSH3_LIBS = msh3.lib -!ENDIF -!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)\zlibstatic.lib") -ZLIB_LIBS = zlibstatic.lib -!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_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 = /DUSE_LIBSSH2 -SSH2_CFLAGS = $(SSH2_CFLAGS) /I"$(SSH2_INC_DIR)" -!ENDIF - - -!IFDEF SSH_PATH -SSH_INC_DIR= $(SSH_PATH)\include -SSH_LIB_DIR= $(SSH_PATH)\lib -SSH_LFLAGS = $(SSH_LFLAGS) "/LIBPATH:$(SSH_LIB_DIR)" -!ELSE -SSH_LIB_DIR= $(DEVEL_LIB) -SSH_INC_DIR= $(DEVEL_INCLUDE) -!ENDIF - -!IF "$(WITH_SSH)"=="dll" || "$(WITH_SSH)"=="static" -SSH_LIBS = ssh.lib -USE_SSH = true -SSH = $(WITH_SSH) -!ENDIF - -!IFDEF USE_SSH -SSH_CFLAGS = /DUSE_LIBSSH -SSH_CFLAGS = $(SSH_CFLAGS) /I"$(SSH_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 -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 = /d_DEBUG /Fo $@ $(LIBCURL_SRC_DIR)\libcurl.rc -CURL_CC = $(CC_DEBUG) $(RTLIB_DEBUG) -CURL_RC_FLAGS = $(CURL_RC_FLAGS) /i../include /d_DEBUG /Fo $@ $(CURL_SRC_DIR)\curl.rc -!ELSE -RC_FLAGS = /Fo $@ $(LIBCURL_SRC_DIR)\libcurl.rc -CURL_CC = $(CC_NODEBUG) $(RTLIB) -CURL_RC_FLAGS = $(CURL_RC_FLAGS) /i../include /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_SSH)"=="true" -CFLAGS = $(CFLAGS) $(SSH_CFLAGS) -LFLAGS = $(LFLAGS) $(SSH_LFLAGS) $(SSH_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 "$(USE_MSH3)"=="true" -CFLAGS = $(CFLAGS) $(MSH3_CFLAGS) -LFLAGS = $(LFLAGS) $(MSH3_LFLAGS) $(MSH3_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 MSH3: $(USE_MSH3) - @echo Using c-ares: $(USE_CARES) - @echo Using SSH2: $(USE_SSH2) - @echo Using SSH: $(USE_SSH) - @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"$(LIB_DIROBJ)\\" $< - -{$(LIBCURL_SRC_DIR)\vauth\}.c{$(LIB_DIROBJ)\vauth\}.obj:: - $(CURL_CC) $(CFLAGS) /Fo"$(LIB_DIROBJ)\vauth\\" $< - -{$(LIBCURL_SRC_DIR)\vtls\}.c{$(LIB_DIROBJ)\vtls\}.obj:: - $(CURL_CC) $(CFLAGS) /Fo"$(LIB_DIROBJ)\vtls\\" $< - -{$(LIBCURL_SRC_DIR)\vssh\}.c{$(LIB_DIROBJ)\vssh\}.obj:: - $(CURL_CC) $(CFLAGS) /Fo"$(LIB_DIROBJ)\vssh\\" $< - -{$(LIBCURL_SRC_DIR)\vquic\}.c{$(LIB_DIROBJ)\vquic\}.obj:: - $(CURL_CC) $(CFLAGS) /Fo"$(LIB_DIROBJ)\vquic\\" $< - -$(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_multibyte.obj \ - $(CURL_DIROBJ)\version_win32.obj \ - $(CURL_DIROBJ)\dynbuf.obj \ - $(CURL_DIROBJ)\base64.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)\\" $< - -$(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_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)\base64.obj: ../lib/base64.c - $(CURL_CC) $(CURL_CFLAGS) /Fo"$@" ../lib/base64.c -$(CURL_DIROBJ)\curl.res: $(CURL_SRC_DIR)\curl.rc - $(RC) $(CURL_RC_FLAGS) - -!ENDIF # End of case where a config was provided. - -# Makefile.vc's clean removes (LIB)CURL_DIROBJ and DIRDIST dirs then calls -# this clean. Note those are the original directories we control and not the -# directories possibly modified by this makefile to point to user-specified -# directories. -# For example, don't remove DIRDIST here since it may contain user files if it -# has been changed by WITH_PREFIX to a different output dir (eg C:\usr\local). -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 +#*************************************************************************** +# _ _ ____ _ +# Project ___| | | | _ \| | +# / __| | | | |_) | | +# | (__| |_| | _ <| |___ +# \___|\___/|_| \_\_____| +# +# Copyright (C) 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. +# +# SPDX-License-Identifier: curl +# +#*************************************************************************** + +########################################################################### +# +# 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 /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 /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 /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 "$(ENABLE_OPENSSL_AUTO_LOAD_CONFIG)"=="false" +SSL_CFLAGS = $(SSL_CFLAGS) /DCURL_DISABLE_OPENSSL_AUTO_LOAD_CONFIG +!ENDIF +!ENDIF + +!IF "$(ENABLE_WEBSOCKETS)"=="true" +CFLAGS = $(CFLAGS) /DUSE_WEBSOCKETS=1 +!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)" +!IF EXISTS("$(NGHTTP2_LIB_DIR)\nghttp2_static.lib") +NGHTTP2_LIBS = nghttp2_static.lib +!ELSE +NGHTTP2_LIBS = nghttp2.lib +!ENDIF +!ENDIF + +!IFDEF MSH3_PATH +MSH3_INC_DIR = $(MSH3_PATH)\include +MSH3_LIB_DIR = $(MSH3_PATH)\lib +MSH3_LFLAGS = $(MSH3_LFLAGS) "/LIBPATH:$(MSH3_LIB_DIR)" +!ELSE +MSH3_INC_DIR = $(DEVEL_INCLUDE) +MSH3_LIB_DIR = $(DEVEL_LIB) +!ENDIF + +!IF "$(WITH_MSH3)"=="dll" +MSH3_CFLAGS = /DUSE_MSH3 /I"$(MSH3_INC_DIR)" +MSH3_LIBS = msh3.lib +!ELSEIF "$(WITH_MSH3)"=="static" +MSH3_CFLAGS = /DUSE_MSH3 /DMSH3_STATICLIB /I"$(MSH3_INC_DIR)" +!IF EXISTS("$(NGHTTP2_LIB_DIR)\msh3_static.lib") +MSH3_LIBS = msh3_static.lib +!ELSE +MSH3_LIBS = msh3.lib +!ENDIF +!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)\zlibstatic.lib") +ZLIB_LIBS = zlibstatic.lib +!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_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 = /DUSE_LIBSSH2 +SSH2_CFLAGS = $(SSH2_CFLAGS) /I"$(SSH2_INC_DIR)" +!ENDIF + + +!IFDEF SSH_PATH +SSH_INC_DIR= $(SSH_PATH)\include +SSH_LIB_DIR= $(SSH_PATH)\lib +SSH_LFLAGS = $(SSH_LFLAGS) "/LIBPATH:$(SSH_LIB_DIR)" +!ELSE +SSH_LIB_DIR= $(DEVEL_LIB) +SSH_INC_DIR= $(DEVEL_INCLUDE) +!ENDIF + +!IF "$(WITH_SSH)"=="dll" || "$(WITH_SSH)"=="static" +SSH_LIBS = ssh.lib +USE_SSH = true +SSH = $(WITH_SSH) +!ENDIF + +!IFDEF USE_SSH +SSH_CFLAGS = /DUSE_LIBSSH +SSH_CFLAGS = $(SSH_CFLAGS) /I"$(SSH_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 +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 = /d_DEBUG /Fo $@ $(LIBCURL_SRC_DIR)\libcurl.rc +CURL_CC = $(CC_DEBUG) $(RTLIB_DEBUG) +CURL_RC_FLAGS = $(CURL_RC_FLAGS) /i../include /d_DEBUG /Fo $@ $(CURL_SRC_DIR)\curl.rc +!ELSE +RC_FLAGS = /Fo $@ $(LIBCURL_SRC_DIR)\libcurl.rc +CURL_CC = $(CC_NODEBUG) $(RTLIB) +CURL_RC_FLAGS = $(CURL_RC_FLAGS) /i../include /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_SSH)"=="true" +CFLAGS = $(CFLAGS) $(SSH_CFLAGS) +LFLAGS = $(LFLAGS) $(SSH_LFLAGS) $(SSH_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 "$(USE_MSH3)"=="true" +CFLAGS = $(CFLAGS) $(MSH3_CFLAGS) +LFLAGS = $(LFLAGS) $(MSH3_LFLAGS) $(MSH3_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 MSH3: $(USE_MSH3) + @echo Using c-ares: $(USE_CARES) + @echo Using SSH2: $(USE_SSH2) + @echo Using SSH: $(USE_SSH) + @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"$(LIB_DIROBJ)\\" $< + +{$(LIBCURL_SRC_DIR)\vauth\}.c{$(LIB_DIROBJ)\vauth\}.obj:: + $(CURL_CC) $(CFLAGS) /Fo"$(LIB_DIROBJ)\vauth\\" $< + +{$(LIBCURL_SRC_DIR)\vtls\}.c{$(LIB_DIROBJ)\vtls\}.obj:: + $(CURL_CC) $(CFLAGS) /Fo"$(LIB_DIROBJ)\vtls\\" $< + +{$(LIBCURL_SRC_DIR)\vssh\}.c{$(LIB_DIROBJ)\vssh\}.obj:: + $(CURL_CC) $(CFLAGS) /Fo"$(LIB_DIROBJ)\vssh\\" $< + +{$(LIBCURL_SRC_DIR)\vquic\}.c{$(LIB_DIROBJ)\vquic\}.obj:: + $(CURL_CC) $(CFLAGS) /Fo"$(LIB_DIROBJ)\vquic\\" $< + +$(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_multibyte.obj \ + $(CURL_DIROBJ)\version_win32.obj \ + $(CURL_DIROBJ)\dynbuf.obj \ + $(CURL_DIROBJ)\base64.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)\\" $< + +$(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_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)\base64.obj: ../lib/base64.c + $(CURL_CC) $(CURL_CFLAGS) /Fo"$@" ../lib/base64.c +$(CURL_DIROBJ)\curl.res: $(CURL_SRC_DIR)\curl.rc + $(RC) $(CURL_RC_FLAGS) + +!ENDIF # End of case where a config was provided. + +# Makefile.vc's clean removes (LIB)CURL_DIROBJ and DIRDIST dirs then calls +# this clean. Note those are the original directories we control and not the +# directories possibly modified by this makefile to point to user-specified +# directories. +# For example, don't remove DIRDIST here since it may contain user files if it +# has been changed by WITH_PREFIX to a different output dir (eg C:\usr\local). +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