Skip to content

Commit

Permalink
[cpprestsdk] fix clang build on new zlib
Browse files Browse the repository at this point in the history
definint dllimport is *bad* and breaks clang, and since this is in maintaince mode they aren't going to fix it.  Refs:

microsoft/cpprestsdk#1710
llvm/llvm-project#53269
  • Loading branch information
russelltg committed May 9, 2024
1 parent 77b0517 commit b5d2ac3
Show file tree
Hide file tree
Showing 3 changed files with 54 additions and 0 deletions.
52 changes: 52 additions & 0 deletions ports/cpprestsdk/fix-clang-dllimport.patch
Original file line number Diff line number Diff line change
@@ -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

1 change: 1 addition & 0 deletions ports/cpprestsdk/portfile.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
1 change: 1 addition & 0 deletions ports/cpprestsdk/vcpkg.json
Original file line number Diff line number Diff line change
@@ -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."
Expand Down

0 comments on commit b5d2ac3

Please sign in to comment.