Add sockpp (#2299)
* sockpp: add package * Update xmake.lua * and and fix sockpp --------- Co-authored-by: star9029 <hengxings783@gmail.com> Co-authored-by: Jérôme Leclercq <lynix680@gmail.com>pull/2302/head
parent
4d7bd0f5bc
commit
11aeaec167
2 changed files with 109 additions and 0 deletions
@ -0,0 +1,53 @@ |
|||||||
|
diff --git a/src/exception.cpp b/src/exception.cpp
|
||||||
|
index 7cb010d..e9f1da1 100644
|
||||||
|
--- a/src/exception.cpp
|
||||||
|
+++ b/src/exception.cpp
|
||||||
|
@@ -57,30 +57,30 @@ sys_error::sys_error(int err) : runtime_error(error_str(err)), errno_(err)
|
||||||
|
|
||||||
|
std::string sys_error::error_str(int err)
|
||||||
|
{
|
||||||
|
- char buf[1024];
|
||||||
|
- buf[0] = '\x0';
|
||||||
|
+ char buf[1024];
|
||||||
|
+ buf[0] = '\x0';
|
||||||
|
|
||||||
|
- #if defined(_WIN32)
|
||||||
|
- FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
|
||||||
|
- NULL, err, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
|
||||||
|
- buf, sizeof(buf), NULL);
|
||||||
|
+ #if defined(_WIN32)
|
||||||
|
+ FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
|
||||||
|
+ NULL, err, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
|
||||||
|
+ buf, sizeof(buf), NULL);
|
||||||
|
#else
|
||||||
|
- #ifdef _GNU_SOURCE
|
||||||
|
- #if !defined(__GLIBC__)
|
||||||
|
- // use the XSI standard behavior.
|
||||||
|
- int e = strerror_r(err, buf, sizeof(buf));
|
||||||
|
- auto s = strerror(e);
|
||||||
|
- return s ? std::string(s) : std::string();
|
||||||
|
- #else
|
||||||
|
- // assume GNU exception
|
||||||
|
- auto s = strerror_r(err, buf, sizeof(buf));
|
||||||
|
- return s ? std::string(s) : std::string();
|
||||||
|
- #endif
|
||||||
|
+ #ifdef _GNU_SOURCE
|
||||||
|
+ #if defined(__GLIBC__) || (defined(__ANDROID_API__) && __ANDROID_API__ >= 23)
|
||||||
|
+ // assume GNU exception
|
||||||
|
+ auto s = strerror_r(err, buf, sizeof(buf));
|
||||||
|
+ return s ? std::string(s) : std::string();
|
||||||
|
+ #else
|
||||||
|
+ // use the XSI standard behavior.
|
||||||
|
+ int e = strerror_r(err, buf, sizeof(buf));
|
||||||
|
+ auto s = strerror(e);
|
||||||
|
+ return s ? std::string(s) : std::string();
|
||||||
|
+ #endif
|
||||||
|
#else
|
||||||
|
ignore_result(strerror_r(err, buf, sizeof(buf)));
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
- return std::string(buf);
|
||||||
|
+ return std::string(buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
@ -0,0 +1,56 @@ |
|||||||
|
package("sockpp") |
||||||
|
set_homepage("https://github.com/fpagliughi/sockpp") |
||||||
|
set_description("Modern C++ socket library") |
||||||
|
set_license("BSD-3-Clause") |
||||||
|
|
||||||
|
add_urls("https://github.com/fpagliughi/sockpp/archive/refs/tags/$(version).tar.gz", |
||||||
|
"https://github.com/fpagliughi/sockpp.git") |
||||||
|
|
||||||
|
add_versions("v0.8.1", "a8aedff8bd8c1da530b91be650352008fddabc9f1df0d19701d76cbc359c8651") |
||||||
|
|
||||||
|
add_patches("0.8.1", path.join(os.scriptdir(), "patches", "0.8.1", "strerror.patch"), "8de819ba185c644254633d1de609e2c571c6c6f1aa7d2ac4329676ecf96fa556") |
||||||
|
|
||||||
|
if is_plat("windows", "mingw") then |
||||||
|
add_syslinks("ws2_32") |
||||||
|
end |
||||||
|
|
||||||
|
if is_plat("linux") then |
||||||
|
add_configs("can", {description = "Build SocketCAN support.", default = false, type = "boolean"}) |
||||||
|
end |
||||||
|
|
||||||
|
add_deps("cmake") |
||||||
|
|
||||||
|
on_install(function (package) |
||||||
|
local configs = |
||||||
|
{ |
||||||
|
"-DSOCKPP_BUILD_STATIC=OFF", |
||||||
|
"-DSOCKPP_BUILD_EXAMPLES=OFF", |
||||||
|
"-DSOCKPP_BUILD_TESTS=OFF", |
||||||
|
"-DSOCKPP_BUILD_DOCUMENTATION=OFF", |
||||||
|
} |
||||||
|
table.insert(configs, "-DCMAKE_BUILD_TYPE=" .. (package:debug() and "Debug" or "Release")) |
||||||
|
if package:config("shared") then |
||||||
|
table.insert(configs, "-DSOCKPP_BUILD_SHARED=ON") |
||||||
|
table.insert(configs, "-DSOCKPP_BUILD_STATIC=OFF") |
||||||
|
else |
||||||
|
table.insert(configs, "-DSOCKPP_BUILD_SHARED=OFF") |
||||||
|
table.insert(configs, "-DSOCKPP_BUILD_STATIC=ON") |
||||||
|
end |
||||||
|
if package:is_plat("linux") then |
||||||
|
table.insert(configs, "-DSOCKPP_BUILD_CAN=" .. (package:config("can") and "ON" or "OFF")) |
||||||
|
end |
||||||
|
import("package.tools.cmake").install(package, configs) |
||||||
|
end) |
||||||
|
|
||||||
|
on_test(function (package) |
||||||
|
assert(package:check_cxxsnippets({test = [[ |
||||||
|
#include <string> |
||||||
|
#include <sockpp/tcp_connector.h> |
||||||
|
using namespace std::chrono; |
||||||
|
void test() { |
||||||
|
std::string host = "localhost"; |
||||||
|
in_port_t port = 12345; |
||||||
|
sockpp::tcp_connector conn({host, port}, seconds{5}); |
||||||
|
} |
||||||
|
]]}, {configs = {languages = "c++14"}})) |
||||||
|
end) |
Loading…
Reference in new issue