mirror of
				https://github.com/Minres/conan-recipes.git
				synced 2025-10-31 06:01:53 +00:00 
			
		
		
		
	update seasocks package to version 1.4.4
This commit is contained in:
		| @@ -1,38 +1,77 @@ | ||||
| from conans import ConanFile, CMake, tools | ||||
| from conans import CMake, ConanFile, tools | ||||
| from conans.errors import ConanException, ConanInvalidConfiguration | ||||
| import os | ||||
| import re | ||||
| import shutil | ||||
| import textwrap | ||||
|  | ||||
|  | ||||
| class SeasocksConan(ConanFile): | ||||
|     name = "Seasocks" | ||||
|     version = "1.3.2" | ||||
|     license = "BSD 2-clause \"Simplified\" License" | ||||
|     url = "https://github.com/Minres/conan-recipes/blob/master/Seasocks" | ||||
|     version = "1.4.4" | ||||
|     topics = ("seasocks", "embeddable", "webserver", "websockets") | ||||
|     homepage = "https://github.com/mattgodbolt/seasocks" | ||||
|     url = "https://github.com/mattgodbolt/seasocks" | ||||
|     description = "Simple, small, C++ embeddable webserver with WebSockets support" | ||||
|     settings = "os", "compiler", "build_type", "arch" | ||||
|     options = {"shared": [True, False]} | ||||
|     default_options = "shared=True" | ||||
|     generators = "cmake" | ||||
|     exports_sources = "src/main/c/*" | ||||
|     #requires = "zlib/1.2.11@conan/stable" | ||||
|     license = "BSD-2-Clause" | ||||
|     settings = "os", "arch", "compiler", "build_type" | ||||
|     options = { | ||||
|         "shared": [True, False], | ||||
|         "fPIC": [True, False], | ||||
|         "with_zlib": [True, False], | ||||
|     } | ||||
|     default_options = { | ||||
|         "shared": True, | ||||
|         "fPIC": True, | ||||
|         "with_zlib": True, | ||||
|     } | ||||
|     no_copy_source = True | ||||
|     generators = "cmake", "cmake_find_package" | ||||
|  | ||||
|     exports_sources = "src/main/c/*" | ||||
|  | ||||
|     def configure(self): | ||||
|         if self.options.shared: | ||||
|             del self.options.fPIC | ||||
|  | ||||
|     def requirements(self): | ||||
|         if self.options.with_zlib: | ||||
|             self.requires("zlib/1.2.11") | ||||
|  | ||||
|     def source(self): | ||||
|         self.run("git clone https://github.com/mattgodbolt/seasocks.git") | ||||
|         self.run("cd seasocks && git checkout tags/v1.3.2") | ||||
|         # This small hack might be useful to guarantee proper /MT /MD linkage in MSVC | ||||
|         # if the packaged project doesn't have variables to set it properly | ||||
|         tools.replace_in_file("seasocks/CMakeLists.txt", "project(Seasocks VERSION 1.3.2)", '''project(Seasocks VERSION 1.3.2) | ||||
| include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake) | ||||
| conan_basic_setup()''') | ||||
|         tools.replace_in_file("seasocks/src/CMakeLists.txt", 'add_subdirectory("app/c")', '#add_subdirectory("app/c")') | ||||
|         self.run("git clone https://github.com/mattgodbolt/seasocks.git .") | ||||
|         self.run("git checkout tags/v1.4.4") | ||||
|  | ||||
|     def build(self): | ||||
|         cmake = CMake(self, parallel=True) | ||||
|         cmake.configure(source_folder="seasocks", args=["-DCMAKE_INSTALL_LIBDIR=lib"]) | ||||
|         if self.source_folder == self.build_folder: | ||||
|             raise ConanException("Cannot build in same folder as sources") | ||||
|         tools.save(os.path.join(self.build_folder, "CMakeLists.txt"), textwrap.dedent("""\ | ||||
|             cmake_minimum_required(VERSION 3.0) | ||||
|             project(cmake_wrapper) | ||||
|  | ||||
|             include("{install_folder}/conanbuildinfo.cmake") | ||||
|             conan_basic_setup(TARGETS) | ||||
|  | ||||
|             add_subdirectory("{source_folder}" seasocks) | ||||
|         """).format( | ||||
|             source_folder=self.source_folder.replace("\\", "/"), | ||||
|             install_folder=self.install_folder.replace("\\", "/"))) | ||||
|         cmake = CMake(self) | ||||
|         cmake.definitions["DEFLATE_SUPPORT"] = self.options.with_zlib | ||||
|         cmake.configure(source_folder=self.build_folder) | ||||
|         cmake.build() | ||||
|  | ||||
|     def package(self): | ||||
|         cmake = CMake(self) | ||||
|         cmake.install() | ||||
|  | ||||
|     #def package(self): | ||||
|         # nothing to do here now | ||||
|  | ||||
|     def package_info(self): | ||||
|         self.cpp_info.libs = ["seasocks"] | ||||
|         # Set the name of the generated `FindSeasocks.cmake` and `SeasocksConfig.cmake` cmake scripts | ||||
|         self.cpp_info.names["cmake_find_package"] = "Seasocks" | ||||
|         self.cpp_info.names["cmake_find_package_multi"] = "Seasocks" | ||||
|         self.cpp_info.components["libseasocks"].libs = ["seasocks"] | ||||
|         # Set the name of the generated seasocks target: `Seasocks::seasocks` | ||||
|         self.cpp_info.components["libseasocks"].names["cmake_find_package"] = "seasocks" | ||||
|         self.cpp_info.components["libseasocks"].names["cmake_find_package_multi"] = "seasocks" | ||||
|         if self.options.with_zlib: | ||||
|             self.cpp_info.components["libseasocks"].requires = ["zlib::zlib"] | ||||
|   | ||||
| @@ -1,16 +1,10 @@ | ||||
| cmake_minimum_required(VERSION 3.3) | ||||
| project(PackageTest CXX) | ||||
| cmake_minimum_required(VERSION 2.8.12) | ||||
|  | ||||
| include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake) | ||||
| conan_basic_setup() | ||||
|  | ||||
| find_package(Threads) | ||||
|  | ||||
| add_executable(ServerTests ServerTests.cpp) | ||||
| target_link_libraries(ServerTests ${CONAN_LIBS} ${CMAKE_THREAD_LIBS_INIT}) | ||||
|  | ||||
| # CTest is a testing tool that can be used to test your project. | ||||
| # enable_testing() | ||||
| # add_test(NAME example | ||||
| #          WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/bin | ||||
| #          COMMAND example) | ||||
| add_executable(seasocks_test seasocks_test.cpp) | ||||
| target_link_libraries(seasocks_test ${CONAN_LIBS} ${CMAKE_THREAD_LIBS_INIT}) | ||||
|   | ||||
							
								
								
									
										3
									
								
								Seasocks/test_package/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								Seasocks/test_package/README.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | ||||
| This directory contains a conan test package to ensure the packaging works. | ||||
|  | ||||
| It's not meant as an example of how best to use Seasocks. | ||||
| @@ -1,78 +0,0 @@ | ||||
| // Copyright (c) 2013-2017, Matt Godbolt | ||||
| // All rights reserved. | ||||
| // | ||||
| // Redistribution and use in source and binary forms, with or without | ||||
| // modification, are permitted provided that the following conditions are met: | ||||
| // | ||||
| // Redistributions of source code must retain the above copyright notice, this | ||||
| // list of conditions and the following disclaimer. | ||||
| // | ||||
| // Redistributions in binary form must reproduce the above copyright notice, | ||||
| // this list of conditions and the following disclaimer in the documentation | ||||
| // and/or other materials provided with the distribution. | ||||
| // | ||||
| // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | ||||
| // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||||
| // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | ||||
| // ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE | ||||
| // LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR | ||||
| // CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF | ||||
| // SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | ||||
| // INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | ||||
| // CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | ||||
| // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | ||||
| // POSSIBILITY OF SUCH DAMAGE. | ||||
|  | ||||
| #include "seasocks/Server.h" | ||||
| #include "seasocks/Connection.h" | ||||
| #include "seasocks/IgnoringLogger.h" | ||||
|  | ||||
| #define CATCH_CONFIG_MAIN | ||||
| #include "catch.hpp" | ||||
|  | ||||
| #include <thread> | ||||
| #include <unistd.h> | ||||
|  | ||||
| using namespace seasocks; | ||||
|  | ||||
|  | ||||
| TEST_CASE("Server tests", "[ServerTests]") { | ||||
|     auto logger = std::make_shared<IgnoringLogger>(); | ||||
|     Server server(logger); | ||||
|     REQUIRE(server.startListening(0)); | ||||
|     std::thread seasocksThread([&]{ | ||||
|         REQUIRE(server.loop()); | ||||
|     }); | ||||
|  | ||||
|     std::atomic<int> test(0); | ||||
|     SECTION("execute should work") { | ||||
|         server.execute([&]{ | ||||
|             CHECK(test == 0); | ||||
|             test++; | ||||
|         }); | ||||
|         for (int i = 0; i < 1000 * 1000 * 1000; ++i) { | ||||
|             if (test) break; | ||||
|         } | ||||
|         CHECK(test == 1); | ||||
|     } | ||||
|  | ||||
|     SECTION("many executes") { | ||||
|         std::atomic<bool> latch(false); | ||||
|         for (auto i = 0; i < 100; ++i) { | ||||
|             for (auto j = 0; j < 100; ++j) { | ||||
|                 server.execute([&] { test++; }); | ||||
|             } | ||||
|             usleep(10); | ||||
|         } | ||||
|         server.execute([&] { latch = true; }); | ||||
|         for (int i = 0; i < 1000; ++i) { | ||||
|             usleep(1000); | ||||
|             if (latch) break; | ||||
|         } | ||||
|         CHECK(latch == 1); | ||||
|         CHECK(test == 10000); | ||||
|     } | ||||
|  | ||||
|     server.terminate(); | ||||
|     seasocksThread.join(); | ||||
| } | ||||
| @@ -1,26 +1,17 @@ | ||||
| from conans import ConanFile, CMake | ||||
| from conans import ConanFile, CMake, tools | ||||
| import os | ||||
|  | ||||
| class SeasocksTestConan(ConanFile): | ||||
|     settings = "os", "compiler", "build_type", "arch" | ||||
|     options = {"shared": [True, False]} | ||||
|     default_options = "shared=True" | ||||
|     generators = "cmake" | ||||
|     build_requires = "Catch/1.9.6@uilianries/stable" | ||||
|  | ||||
|     def configure(self): | ||||
|         self.options["Seasocks"].shared = self.options.shared | ||||
|      | ||||
| class TestPackageConan(ConanFile): | ||||
|     settings = "os", "compiler", "build_type", "arch" | ||||
|     generators = "cmake" | ||||
|  | ||||
|     def build(self): | ||||
|         cmake = CMake(self) | ||||
|         cmake.configure() | ||||
|         cmake.build() | ||||
|  | ||||
|     def imports(self): | ||||
|         self.copy("*.dll", dst="bin", src="bin") | ||||
|         self.copy("*.dylib*", dst="bin", src="lib") | ||||
|         self.copy('*.so*', dst='bin', src='lib') | ||||
|  | ||||
|     def test(self): | ||||
|         os.chdir("bin") | ||||
|         self.run(".%sServerTests" % os.sep) | ||||
|         if not tools.cross_building(self.settings): | ||||
|             bin_path = os.path.join("bin", "seasocks_test") | ||||
|             self.run(bin_path, run_environment=True) | ||||
|   | ||||
							
								
								
									
										24
									
								
								Seasocks/test_package/seasocks_test.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								Seasocks/test_package/seasocks_test.cpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,24 @@ | ||||
| #include "seasocks/Server.h" | ||||
| #include "seasocks/Connection.h" | ||||
| #include "seasocks/PrintfLogger.h" | ||||
|  | ||||
| #include <thread> | ||||
| #include <unistd.h> | ||||
|  | ||||
| using namespace seasocks; | ||||
|  | ||||
| // This is a conan test program to ensure the packaging works. | ||||
| // It's not meant as an example of how best to use Seasocks. | ||||
| int main(int argc, const char* argv[]) { | ||||
|     auto logger = std::make_shared<PrintfLogger>(); | ||||
|     Server server(logger); | ||||
|     server.startListening(0); | ||||
|     std::thread seasocksThread([&] { | ||||
|         server.loop(); | ||||
|     }); | ||||
|  | ||||
|     sleep(1); | ||||
|  | ||||
|     server.terminate(); | ||||
|     seasocksThread.join(); | ||||
| } | ||||
		Reference in New Issue
	
	Block a user