diff --git a/recipes/gamenetworkingsockets/all/CMakeLists.txt b/recipes/gamenetworkingsockets/all/CMakeLists.txt deleted file mode 100644 index 7a80c0b2c26dc3..00000000000000 --- a/recipes/gamenetworkingsockets/all/CMakeLists.txt +++ /dev/null @@ -1,7 +0,0 @@ -cmake_minimum_required(VERSION 2.8.11) -project(cmake_wrapper) - -include(conanbuildinfo.cmake) -conan_basic_setup(TARGETS) - -add_subdirectory("source_subfolder") diff --git a/recipes/gamenetworkingsockets/all/conandata.yml b/recipes/gamenetworkingsockets/all/conandata.yml index 882c3ee20c6d7e..44325d5f8a183e 100644 --- a/recipes/gamenetworkingsockets/all/conandata.yml +++ b/recipes/gamenetworkingsockets/all/conandata.yml @@ -1,10 +1,4 @@ sources: - "1.3.0": - url: "https://github.com/ValveSoftware/GameNetworkingSockets/archive/refs/tags/v1.3.0.zip" - sha256: "22e409546babc449c44f492b253b547a2f5f11abe11a100686a10a990b5091cd" -patches: - "1.3.0": - - patch_file: "patches/001-disable-runtime-override.patch" - base_path: "source_subfolder" - - patch_file: "patches/002-either-static-or-shared.patch" - base_path: "source_subfolder" + "1.4.1": + url: "https://github.com/ValveSoftware/GameNetworkingSockets/archive/refs/tags/v1.4.1.tar.gz" + sha256: "1cfb2bf79c51a08ae4e8b7ff5e9c1266b43cfff6f53ecd3e7bc5e3fcb2a22503" diff --git a/recipes/gamenetworkingsockets/all/conanfile.py b/recipes/gamenetworkingsockets/all/conanfile.py index cb91ff14df39fc..a19901a8e61bb3 100644 --- a/recipes/gamenetworkingsockets/all/conanfile.py +++ b/recipes/gamenetworkingsockets/all/conanfile.py @@ -1,109 +1,121 @@ -from conans import ConanFile, CMake, tools -from conans.errors import ConanInvalidConfiguration import os -required_conan_version = ">=1.33.0" +from conan import ConanFile +from conan.errors import ConanInvalidConfiguration +from conan.tools.build import check_min_cppstd +from conan.tools.cmake import CMake, CMakeDeps, CMakeToolchain, cmake_layout +from conan.tools.files import copy, get, rmdir, replace_in_file +from conan.tools.gnu import PkgConfigDeps + +required_conan_version = ">=1.53.0" class GameNetworkingSocketsConan(ConanFile): name = "gamenetworkingsockets" description = "GameNetworkingSockets is a basic transport layer for games." - topics = ("networking", "game-development") + license = "BSD-3-Clause" url = "https://github.com/conan-io/conan-center-index" homepage = "https://github.com/ValveSoftware/GameNetworkingSockets" - license = "BSD-3-Clause" - generators = "cmake", "pkg_config" - settings = "os", "arch", "compiler", "build_type" - exports_sources = ["CMakeLists.txt", "patches/**"] + topics = ("networking", "game-development") + package_type = "library" + settings = "os", "arch", "compiler", "build_type" options = { "shared": [True, False], "fPIC": [True, False], - "encryption": ["openssl", "libsodium", "bcrypt"] + "encryption": ["openssl", "libsodium", "bcrypt"], } - default_options = { "shared": False, "fPIC": True, - "encryption": "openssl" + "encryption": "openssl", } - _cmake = None - - @property - def _source_subfolder(self): - return "source_subfolder" - - @property - def _build_subfolder(self): - return "build_subfolder" - def config_options(self): if self.settings.os == "Windows": del self.options.fPIC def configure(self): if self.options.shared: - del self.options.fPIC + self.options.rm_safe("fPIC") + + def layout(self): + cmake_layout(self, src_folder="src") + + def requirements(self): + self.requires("protobuf/3.21.12") + if self.options.encryption == "openssl": + self.requires("openssl/[>=1.1 <4]") + elif self.options.encryption == "libsodium": + self.requires("libsodium/cci.20220430") def validate(self): if self.settings.compiler.get_safe("cppstd"): - tools.check_min_cppstd(self, 11) + check_min_cppstd(self, 11) if self.options.encryption == "bcrypt" and self.settings.os != "Windows": raise ConanInvalidConfiguration("bcrypt is only valid on Windows") def build_requirements(self): - self.build_requires("protobuf/3.17.1") + self.tool_requires("protobuf/") - def requirements(self): - self.requires("protobuf/3.17.1") + def source(self): + get(self, **self.conan_data["sources"][self.version], strip_root=True) + + def generate(self): + tc = CMakeToolchain(self) + tc.variables["BUILD_STATIC_LIB"] = not self.options.shared + tc.variables["BUILD_SHARED_LIB"] = self.options.shared + tc.variables["GAMENETWORKINGSOCKETS_BUILD_EXAMPLES"] = False + tc.variables["GAMENETWORKINGSOCKETS_BUILD_TESTS"] = False + tc.variables["Protobuf_USE_STATIC_LIBS"] = not self.dependencies["protobuf"].options.shared + tc.variables["Protobuf_IMPORT_DIRS"] = os.path.join(self.source_folder, "src", "common") + crypto = { + "openssl": "OpenSSL", + "libsodium": "libsodium", + "bcrypt": "BCrypt", + } + tc.variables["USE_CRYPTO"] = crypto[str(self.options.encryption)] + crypto25519 = { + "openssl": "OpenSSL", + "libsodium": "libsodium", + "bcrypt": "Reference", + } + tc.variables["USE_CRYPTO25519"] = crypto25519[str(self.options.encryption)] if self.options.encryption == "openssl": - self.requires("openssl/1.1.1l") - elif self.options.encryption == "libsodium": - self.requires("libsodium/1.0.18") + tc.variables["OPENSSL_NEW_ENOUGH"] = True + tc.variables["OPENSSL_HAS_25519_RAW"] = True + tc.generate() - def source(self): - tools.get(**self.conan_data["sources"][self.version], strip_root=True, destination=self._source_subfolder) + tc = CMakeDeps(self) + tc.generate() + + tc = PkgConfigDeps(self) + tc.generate() def _patch_sources(self): - for patch in self.conan_data.get("patches", {}).get(self.version, []): - tools.patch(**patch) + # Disable MSVC runtime override + replace_in_file(self, os.path.join(self.source_folder, "CMakeLists.txt"), + "configure_msvc_runtime()", "") def build(self): self._patch_sources() - cmake = self._configure_cmake() + cmake = CMake(self) + cmake.configure() cmake.build() - def _configure_cmake(self): - if self._cmake: - return self._cmake - self._cmake = CMake(self) - self._cmake.definitions["BUILD_STATIC"] = not self.options.shared - self._cmake.definitions["BUILD_SHARED"] = self.options.shared - self._cmake.definitions["GAMENETWORKINGSOCKETS_BUILD_EXAMPLES"] = False - self._cmake.definitions["GAMENETWORKINGSOCKETS_BUILD_TESTS"] = False - self._cmake.definitions["Protobuf_USE_STATIC_LIBS"] = not self.options["protobuf"].shared - crypto = {"openssl": "OpenSSL", "libsodium": "libsodium", "bcrypt": "BCrypt"} - self._cmake.definitions["USE_CRYPTO"] = crypto[str(self.options.encryption)] - crypto25519 = {"openssl": "OpenSSL", "libsodium": "libsodium", "bcrypt": "Reference"} - self._cmake.definitions["USE_CRYPTO25519"] = crypto25519[str(self.options.encryption)] - if self.options.encryption == "openssl": - self._cmake.definitions["OPENSSL_NEW_ENOUGH"] = True - self._cmake.definitions["OPENSSL_HAS_25519_RAW"] = True - self._cmake.configure(build_folder=self._build_subfolder) - return self._cmake - def package(self): - self.copy("LICENSE", dst="licenses", src=self._source_subfolder) - cmake = self._configure_cmake() + copy(self, "LICENSE", + dst=os.path.join(self.package_folder, "licenses"), + src=self.source_folder) + cmake = CMake(self) cmake.install() - tools.rmdir(os.path.join(self.package_folder, "lib", "cmake")) + rmdir(self, os.path.join(self.package_folder, "lib", "cmake")) def package_info(self): - self.cpp_info.names["cmake_find_package"] = "GameNetworkingSockets" - self.cpp_info.names["cmake_find_package_multi"] = "GameNetworkingSockets" - self.cpp_info.names["pkg_config"] = "GameNetworkingSockets" + self.cpp_info.set_property("cmake_file_name", "GameNetworkingSockets") + self.cpp_info.set_property("cmake_target_name", "GameNetworkingSockets::GameNetworkingSockets") + self.cpp_info.set_property("pkg_config_name", "GameNetworkingSockets") self.cpp_info.includedirs.append(os.path.join("include", "GameNetworkingSockets")) if self.options.shared: self.cpp_info.libs = ["GameNetworkingSockets"] @@ -123,4 +135,7 @@ def package_info(self): self.cpp_info.system_libs = ["ws2_32", "crypt32", "winmm"] if self.options.encryption == "bcrypt": self.cpp_info.system_libs += ["bcrypt"] - + + # TODO: to remove in conan v2 once cmake_find_package_* generators removed + self.cpp_info.names["cmake_find_package"] = "GameNetworkingSockets" + self.cpp_info.names["cmake_find_package_multi"] = "GameNetworkingSockets" diff --git a/recipes/gamenetworkingsockets/all/patches/001-disable-runtime-override.patch b/recipes/gamenetworkingsockets/all/patches/001-disable-runtime-override.patch deleted file mode 100644 index 652aea2685bb82..00000000000000 --- a/recipes/gamenetworkingsockets/all/patches/001-disable-runtime-override.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/CMakeLists.txt b/tmp/CMakeLists.txt -index 3471701..49efee3 100644 ---- a/CMakeLists.txt -+++ b/tmp/CMakeLists.txt -@@ -35,7 +35,7 @@ endif() - - include(FlagsMSVC) - set(MSVC_RUNTIME "dynamic") --configure_msvc_runtime() -+# configure_msvc_runtime() - print_default_msvc_flags() - - add_definitions( -DVALVE_CRYPTO_ENABLE_25519 ) diff --git a/recipes/gamenetworkingsockets/all/patches/002-either-static-or-shared.patch b/recipes/gamenetworkingsockets/all/patches/002-either-static-or-shared.patch deleted file mode 100644 index 47b3eec1ee41e1..00000000000000 --- a/recipes/gamenetworkingsockets/all/patches/002-either-static-or-shared.patch +++ /dev/null @@ -1,49 +0,0 @@ -diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt -index 7040ab3..c75897e 100644 ---- a/src/CMakeLists.txt -+++ b/src/CMakeLists.txt -@@ -282,28 +282,38 @@ macro(gamenetworkingsockets_common GNS_TARGET) - - endmacro() - -+if (BUILD_SHARED) - add_library(GameNetworkingSockets SHARED "") - add_library(GameNetworkingSockets::GameNetworkingSockets ALIAS GameNetworkingSockets) - add_library(GameNetworkingSockets::shared ALIAS GameNetworkingSockets) - gamenetworkingsockets_common(GameNetworkingSockets) - -+install( -+ TARGETS GameNetworkingSockets -+ EXPORT GameNetworkingSockets -+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} -+ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} -+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} -+) -+endif() -+ -+if (BUILD_STATIC) - add_library(GameNetworkingSockets_s STATIC "") - add_library(GameNetworkingSockets::GameNetworkingSockets_s ALIAS GameNetworkingSockets_s) - add_library(GameNetworkingSockets::static ALIAS GameNetworkingSockets_s) - target_compile_definitions(GameNetworkingSockets_s INTERFACE STEAMNETWORKINGSOCKETS_STATIC_LINK) - gamenetworkingsockets_common(GameNetworkingSockets_s) - --# Install rules -- - install( -- TARGETS -- GameNetworkingSockets -- GameNetworkingSockets_s -+ TARGETS GameNetworkingSockets_s - EXPORT GameNetworkingSockets - LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} - RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} -- ) -+) -+endif() -+ -+# Install rules - - install(DIRECTORY ../include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/GameNetworkingSockets) - diff --git a/recipes/gamenetworkingsockets/all/test_package/CMakeLists.txt b/recipes/gamenetworkingsockets/all/test_package/CMakeLists.txt index cb6bc1b893324b..b45b07ce89114b 100644 --- a/recipes/gamenetworkingsockets/all/test_package/CMakeLists.txt +++ b/recipes/gamenetworkingsockets/all/test_package/CMakeLists.txt @@ -1,11 +1,8 @@ -cmake_minimum_required(VERSION 3.1) +cmake_minimum_required(VERSION 3.15) project(test_package CXX) -include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake) -conan_basic_setup(TARGETS) - find_package(GameNetworkingSockets REQUIRED CONFIG) add_executable(${PROJECT_NAME} test_package.cpp) -set_property(TARGET ${PROJECT_NAME} PROPERTY CXX_STANDARD 11) +set_property(TARGET ${PROJECT_NAME} PROPERTY CXX_STANDARD 11) target_link_libraries(${PROJECT_NAME} GameNetworkingSockets::GameNetworkingSockets) diff --git a/recipes/gamenetworkingsockets/all/test_package/conanfile.py b/recipes/gamenetworkingsockets/all/test_package/conanfile.py index 38f4483872d47f..ef5d7042163ecc 100644 --- a/recipes/gamenetworkingsockets/all/test_package/conanfile.py +++ b/recipes/gamenetworkingsockets/all/test_package/conanfile.py @@ -1,10 +1,19 @@ -from conans import ConanFile, CMake, tools +from conan import ConanFile +from conan.tools.build import can_run +from conan.tools.cmake import cmake_layout, CMake import os class TestPackageConan(ConanFile): settings = "os", "arch", "compiler", "build_type" - generators = "cmake", "cmake_find_package_multi" + generators = "CMakeDeps", "CMakeToolchain", "VirtualRunEnv" + test_type = "explicit" + + def requirements(self): + self.requires(self.tested_reference_str) + + def layout(self): + cmake_layout(self) def build(self): cmake = CMake(self) @@ -12,6 +21,6 @@ def build(self): 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) + if can_run(self): + bin_path = os.path.join(self.cpp.build.bindir, "test_package") + self.run(bin_path, env="conanrun") diff --git a/recipes/gamenetworkingsockets/all/test_v1_package/CMakeLists.txt b/recipes/gamenetworkingsockets/all/test_v1_package/CMakeLists.txt new file mode 100644 index 00000000000000..91630d79f4abb3 --- /dev/null +++ b/recipes/gamenetworkingsockets/all/test_v1_package/CMakeLists.txt @@ -0,0 +1,8 @@ +cmake_minimum_required(VERSION 3.15) +project(test_package) + +include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake) +conan_basic_setup(TARGETS) + +add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/../test_package/ + ${CMAKE_CURRENT_BINARY_DIR}/test_package/) diff --git a/recipes/gamenetworkingsockets/all/test_v1_package/conanfile.py b/recipes/gamenetworkingsockets/all/test_v1_package/conanfile.py new file mode 100644 index 00000000000000..38f4483872d47f --- /dev/null +++ b/recipes/gamenetworkingsockets/all/test_v1_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)