From dbbbf717f3a39ab8fc0c996450e699a3a8d46fe5 Mon Sep 17 00:00:00 2001 From: Viktor Szakats Date: Wed, 26 Feb 2025 01:00:43 +0100 Subject: [PATCH] curl.h: stop defining non-curl `__has_declspec_attribute` Public curl headers are best not to define 3rd-party or system macros. Introduce `CURL_HAS_DECLSPEC_ATTRIBUTE` to cover this system macro and use it. Detected by test1167 after dropping the indentation: ``` test 1167...[Verify curl prefix of public symbols in header files] /usr/bin/perl -I. -I. returned 1, when expecting 0 1167: exit FAILED == Contents of files in the log/10/ dir after test 1167 === Start of file server.cmd Testnum 1167 === End of file server.cmd === Start of file stdout1167 Bad symbols in public header files: __has_declspec_attribute(x) === End of file stdout1167 ``` Ref: https://github.com/curl/curl/actions/runs/13533200900/job/37819784405?pr=16490#step:42:2087 Ref: https://clang.llvm.org/docs/LanguageExtensions.html#has-declspec-attribute Follow-up to 50482b8c0a2cf5315e66d182998c8fc4901ffb2d #3616 Ref: #16496 (fixing test1167) Closes #16491 --- docs/libcurl/symbols-in-versions | 1 + include/curl/curl.h | 15 ++++++++------- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/docs/libcurl/symbols-in-versions b/docs/libcurl/symbols-in-versions index 640344f0e6..0b566edbc3 100644 --- a/docs/libcurl/symbols-in-versions +++ b/docs/libcurl/symbols-in-versions @@ -45,6 +45,7 @@ CURL_GLOBAL_DEFAULT 7.8 CURL_GLOBAL_NOTHING 7.8 CURL_GLOBAL_SSL 7.8 CURL_GLOBAL_WIN32 7.8.1 +CURL_HAS_DECLSPEC_ATTRIBUTE 8.13.0 CURL_HET_DEFAULT 7.59.0 CURL_HTTP_VERSION_1_0 7.9.1 CURL_HTTP_VERSION_1_1 7.9.1 diff --git a/include/curl/curl.h b/include/curl/curl.h index 99c57f2169..346872b39d 100644 --- a/include/curl/curl.h +++ b/include/curl/curl.h @@ -102,11 +102,6 @@ #include #endif -/* Compatibility for non-Clang compilers */ -#ifndef __has_declspec_attribute -# define __has_declspec_attribute(x) 0 -#endif - #ifdef __cplusplus extern "C" { #endif @@ -118,11 +113,17 @@ typedef void CURLSH; * libcurl external API function linkage decorations. */ +#ifdef __has_declspec_attribute +#define CURL_HAS_DECLSPEC_ATTRIBUTE(x) __has_declspec_attribute(x) +#else +#define CURL_HAS_DECLSPEC_ATTRIBUTE(x) 0 +#endif + #ifdef CURL_STATICLIB # define CURL_EXTERN #elif defined(_WIN32) || \ - (__has_declspec_attribute(dllexport) && \ - __has_declspec_attribute(dllimport)) + (CURL_HAS_DECLSPEC_ATTRIBUTE(dllexport) && \ + CURL_HAS_DECLSPEC_ATTRIBUTE(dllimport)) # if defined(BUILDING_LIBCURL) # define CURL_EXTERN __declspec(dllexport) # else -- 2.47.3