From 57676e8f87dbf629715f8cb9f3ac0536371867bc Mon Sep 17 00:00:00 2001 From: Russell Greene Date: Thu, 23 May 2024 01:11:18 -0600 Subject: [PATCH] [cpprestsdk] fix bad define in header for clang (#38659) - **[cpprestsdk] fix clang build on new zlib** - **./vcpkg x-add-version --all** Defining `dllimport` is *bad* and breaks clang, and since this is in maintaince mode they aren't going to fix it. This had the ability to blow up projects before, but newer zlib versions use `__has_declspec_attribute`, so that makes it impossible to even _build_ cpprestsdk on systems like these (I'm on Fedora 40). Refs: https://github.com/microsoft/cpprestsdk/issues/1710 https://github.com/llvm/llvm-project/issues/53269 - [x] Changes comply with the [maintainer guide](https://github.com/microsoft/vcpkg-docs/blob/main/vcpkg/contributing/maintainer-guide.md). - [x] SHA512s are updated for each updated download. - [x] The "supports" clause reflects platforms that may be fixed by this new version. - [x] Any fixed [CI baseline](https://github.com/microsoft/vcpkg/blob/master/scripts/ci.baseline.txt) entries are removed from that file. - [x] Any patches that are no longer applied are deleted from the port's directory. - [x] The version database is fixed by rerunning `./vcpkg x-add-version --all` and committing the result. - [x] Only one version is added to each modified port's versions file. --- ports/cpprestsdk/fix-clang-dllimport.patch | 52 ++++++++++++++++++++++ ports/cpprestsdk/portfile.cmake | 1 + ports/cpprestsdk/vcpkg.json | 1 + versions/baseline.json | 2 +- versions/c-/cpprestsdk.json | 5 +++ 5 files changed, 60 insertions(+), 1 deletion(-) create mode 100644 ports/cpprestsdk/fix-clang-dllimport.patch diff --git a/ports/cpprestsdk/fix-clang-dllimport.patch b/ports/cpprestsdk/fix-clang-dllimport.patch new file mode 100644 index 00000000000000..52552a57663095 --- /dev/null +++ b/ports/cpprestsdk/fix-clang-dllimport.patch @@ -0,0 +1,52 @@ +diff --git a/Release/include/cpprest/details/cpprest_compat.h b/Release/include/cpprest/details/cpprest_compat.h +index bf107479..00581371 100644 +--- a/Release/include/cpprest/details/cpprest_compat.h ++++ b/Release/include/cpprest/details/cpprest_compat.h +@@ -29,7 +29,6 @@ + #else // ^^^ _WIN32 ^^^ // vvv !_WIN32 vvv + + #define __declspec(x) __attribute__((x)) +-#define dllimport + #define novtable /* no novtable equivalent */ + #define __assume(x) \ + do \ +@@ -74,9 +73,17 @@ + #define _ASYNCRTIMP_TYPEINFO + #else // ^^^ _NO_ASYNCRTIMP ^^^ // vvv !_NO_ASYNCRTIMP vvv + #ifdef _ASYNCRT_EXPORT ++#ifdef _WIN32 + #define _ASYNCRTIMP __declspec(dllexport) ++#else ++#define _ASYNCRTIMP __attribute__((visibility("default"))) ++#endif + #else // ^^^ _ASYNCRT_EXPORT ^^^ // vvv !_ASYNCRT_EXPORT vvv ++#ifdef _WIN32 + #define _ASYNCRTIMP __declspec(dllimport) ++#else ++#define _ASYNCRTIMP ++#endif + #endif // _ASYNCRT_EXPORT + + #if defined(_WIN32) +diff --git a/Release/include/pplx/pplx.h b/Release/include/pplx/pplx.h +index d9ba9c61..8d36252c 100644 +--- a/Release/include/pplx/pplx.h ++++ b/Release/include/pplx/pplx.h +@@ -30,9 +30,17 @@ + #define _PPLXIMP + #else + #ifdef _PPLX_EXPORT ++#ifdef _WIN32 + #define _PPLXIMP __declspec(dllexport) + #else ++#define _PPLXIMP __attribute__((visibility("default"))) ++#endif ++#else ++#ifdef _WIN32 + #define _PPLXIMP __declspec(dllimport) ++#else ++#define _PPLXIMP ++#endif + #endif + #endif + diff --git a/ports/cpprestsdk/portfile.cmake b/ports/cpprestsdk/portfile.cmake index 371d92a5cf4b65..82552b28f76c69 100644 --- a/ports/cpprestsdk/portfile.cmake +++ b/ports/cpprestsdk/portfile.cmake @@ -8,6 +8,7 @@ vcpkg_from_github( fix-find-openssl.patch fix_narrowing.patch fix-uwp.patch + fix-clang-dllimport.patch # workaround for https://github.com/microsoft/cpprestsdk/issues/1710 ) set(OPTIONS) diff --git a/ports/cpprestsdk/vcpkg.json b/ports/cpprestsdk/vcpkg.json index e8a0e467a145a3..c322d6b6fc743a 100644 --- a/ports/cpprestsdk/vcpkg.json +++ b/ports/cpprestsdk/vcpkg.json @@ -1,6 +1,7 @@ { "name": "cpprestsdk", "version": "2.10.19", + "port-version": 1, "description": [ "C++11 JSON, REST, and OAuth library", "The C++ REST SDK is a Microsoft project for cloud-based client-server communication in native code using a modern asynchronous C++ API design. This project aims to help C++ developers connect to and interact with services." diff --git a/versions/baseline.json b/versions/baseline.json index 0b7e8430fed0a7..f4a57a02c7ddae 100644 --- a/versions/baseline.json +++ b/versions/baseline.json @@ -1942,7 +1942,7 @@ }, "cpprestsdk": { "baseline": "2.10.19", - "port-version": 0 + "port-version": 1 }, "cppslippi": { "baseline": "1.4.3.16", diff --git a/versions/c-/cpprestsdk.json b/versions/c-/cpprestsdk.json index 43cb0fcacde12d..9a28e7df4b2b58 100644 --- a/versions/c-/cpprestsdk.json +++ b/versions/c-/cpprestsdk.json @@ -1,5 +1,10 @@ { "versions": [ + { + "git-tree": "a10a640d968ca2ac8f1d0df0836e3d23a7fb2199", + "version": "2.10.19", + "port-version": 1 + }, { "git-tree": "110c2c2a08e520877aa3fa9231ab69e0a76f388d", "version": "2.10.19",