diff --git a/recipes/foxglove-websocket/all/conandata.yml b/recipes/foxglove-websocket/all/conandata.yml new file mode 100644 index 0000000000000..e0bef4a6e6152 --- /dev/null +++ b/recipes/foxglove-websocket/all/conandata.yml @@ -0,0 +1,4 @@ +sources: + 0.0.1: + url: https://github.com/foxglove/ws-protocol/archive/refs/tags/releases/cpp/v0.0.1.tar.gz + sha256: 94766f44973f0c0ce7e87039b9ef9d5b4a8bc73727047568170ac61262625c9b diff --git a/recipes/foxglove-websocket/all/conanfile.py b/recipes/foxglove-websocket/all/conanfile.py new file mode 100644 index 0000000000000..2d4424bef585f --- /dev/null +++ b/recipes/foxglove-websocket/all/conanfile.py @@ -0,0 +1,40 @@ +from conans import ConanFile, CMake, tools +from conans.errors import ConanInvalidConfiguration +import os + + +class FoxgloveWebSocketConan(ConanFile): + name = "foxglove-websocket" + url = "https://github.com/conan-io/conan-center-index" + homepage = "https://github.com/foxglove/ws-protocol" + description = "A C++ server implementation of the Foxglove WebSocket Protocol" + license = "MIT" + topics = ("foxglove", "websocket") + + settings = ("os", "compiler", "build_type", "arch") + requires = ("nlohmann_json/3.10.5", "websocketpp/0.8.2") + generators = ("cmake", "cmake_find_package") + + _source_root = "source_root" + _source_package_path = os.path.join(_source_root, "cpp", "foxglove-websocket") + + def source(self): + tools.get(**self.conan_data["sources"][self.version], strip_root=True, destination=self._source_root) + + def validate(self): + if self.settings.compiler.get_safe("cppstd"): + tools.check_min_cppstd(self, "17") + if (self.settings.compiler == "gcc" or self.settings.compiler == "clang") and tools.Version(self.settings.compiler.version) <= 8: + raise ConanInvalidConfiguration("Compiler version is not supported, c++17 support is required") + if self.settings.compiler == "Visual Studio" and tools.Version(self.settings.compiler.version) <= "16.8": + raise ConanInvalidConfiguration("Compiler version is not supported, c++17 support is required") + + def configure(self): + self.options["websocketpp"].asio = "standalone" + + def package(self): + self.copy("LICENSE", dst="licenses", src=self._source_package_path) + self.copy("include/*", src=self._source_package_path) + + def package_id(self): + self.info.header_only() diff --git a/recipes/foxglove-websocket/all/test_package/CMakeLists.txt b/recipes/foxglove-websocket/all/test_package/CMakeLists.txt new file mode 100644 index 0000000000000..2b26900ab008c --- /dev/null +++ b/recipes/foxglove-websocket/all/test_package/CMakeLists.txt @@ -0,0 +1,11 @@ +cmake_minimum_required(VERSION 3.1) +project(test_package CXX) + +include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake) +conan_basic_setup(TARGETS) + +find_package(foxglove-websocket REQUIRED CONFIG) + +add_executable(test_package test_package.cpp) +set_target_properties(test_package PROPERTIES CXX_STANDARD 17 CXX_STANDARD_REQUIRED ON) +target_link_libraries(test_package foxglove-websocket::foxglove-websocket) diff --git a/recipes/foxglove-websocket/all/test_package/conanfile.py b/recipes/foxglove-websocket/all/test_package/conanfile.py new file mode 100644 index 0000000000000..005eae16e0474 --- /dev/null +++ b/recipes/foxglove-websocket/all/test_package/conanfile.py @@ -0,0 +1,17 @@ +from conans import ConanFile, CMake, tools +import os + + +class TestPackageConan(ConanFile): + settings = ("os", "arch", "compiler", "build_type") + generators = ("cmake", "cmake_find_package_multi") + + def build(self): + cmake = CMake(self) + cmake.configure() + cmake.build() + + def test(self): + if not tools.cross_building(self): + bin_path = os.path.join("bin", "test_package") + self.run(bin_path, run_environment=True) diff --git a/recipes/foxglove-websocket/all/test_package/test_package.cpp b/recipes/foxglove-websocket/all/test_package/test_package.cpp new file mode 100644 index 0000000000000..13842a1ec1a3b --- /dev/null +++ b/recipes/foxglove-websocket/all/test_package/test_package.cpp @@ -0,0 +1,11 @@ +#include +#include + +int main() { + foxglove::websocket::Server server{0, "example"}; + server.getEndpoint().set_timer(0, [&](std::error_code const& ec) { + server.stop(); + }); + server.run(); + return 0; +} diff --git a/recipes/foxglove-websocket/config.yml b/recipes/foxglove-websocket/config.yml new file mode 100644 index 0000000000000..768a10bf6dc2b --- /dev/null +++ b/recipes/foxglove-websocket/config.yml @@ -0,0 +1,3 @@ +versions: + 0.0.1: + folder: all