From c6d0f30fa86ca1c0900831b96509e7f8f572586f Mon Sep 17 00:00:00 2001 From: simbabdytech Date: Sun, 26 Jan 2025 16:50:16 +0800 Subject: [PATCH 1/2] qtils 0.0.4 --- recipes/qtils/all/conandata.yml | 4 + recipes/qtils/all/conanfile.py | 90 +++++++++++++++++++ recipes/qtils/all/test_package/CMakeLists.txt | 14 +++ recipes/qtils/all/test_package/conanfile.py | 26 ++++++ .../qtils/all/test_package/test_package.cpp | 4 + recipes/qtils/config.yml | 4 + 6 files changed, 142 insertions(+) create mode 100644 recipes/qtils/all/conandata.yml create mode 100644 recipes/qtils/all/conanfile.py create mode 100644 recipes/qtils/all/test_package/CMakeLists.txt create mode 100644 recipes/qtils/all/test_package/conanfile.py create mode 100644 recipes/qtils/all/test_package/test_package.cpp create mode 100644 recipes/qtils/config.yml diff --git a/recipes/qtils/all/conandata.yml b/recipes/qtils/all/conandata.yml new file mode 100644 index 0000000000000..50f734725d452 --- /dev/null +++ b/recipes/qtils/all/conandata.yml @@ -0,0 +1,4 @@ +sources: + "0.0.4": + url: "https://github.com/qdrvm/qtils/archive/refs/tags/v0.0.4.tar.gz" + sha256: "8b1ab41da75ed76729e53a728d9f97520bc2987757a1f701a20638479b451027" \ No newline at end of file diff --git a/recipes/qtils/all/conanfile.py b/recipes/qtils/all/conanfile.py new file mode 100644 index 0000000000000..7b923303abc42 --- /dev/null +++ b/recipes/qtils/all/conanfile.py @@ -0,0 +1,90 @@ +from conan import ConanFile +from conan.errors import ConanInvalidConfiguration +from conan.tools.build import check_min_cppstd +from conan.tools.files import apply_conandata_patches, copy, export_conandata_patches, get +from conan.tools.layout import basic_layout +from conan.tools.scm import Version +import os + + +required_conan_version = ">=1.53.0" + +class PackageConan(ConanFile): + name = "qtils" + description = "Utils for KAGOME C++ projects" + license = "MIT" + url = "https://github.com/conan-io/conan-center-index" + homepage = "https://github.com/qdrvm/qtils" + topics = ("KAGOME", "header-only") + package_type = "header-library" + settings = "os", "compiler", "build_type", "arch" + no_copy_source = True + + @property + def _min_cppstd(self): + return 14 + + @property + def _compilers_minimum_version(self): + return { + "apple-clang": "10", + "clang": "7", + "gcc": "7", + "msvc": "191", + "Visual Studio": "15", + } + + def export_sources(self): + export_conandata_patches(self) + + def layout(self): + basic_layout(self, src_folder="src") + + def requirements(self): + self.requires("boost/1.84.0", transitive_headers=True) + self.requires("fmt/10.1.1", transitive_headers=True) + + def package_id(self): + self.info.clear() + + def validate(self): + if self.settings.compiler.get_safe("cppstd"): + check_min_cppstd(self, self._min_cppstd) + minimum_version = self._compilers_minimum_version.get(str(self.settings.compiler), False) + if minimum_version and Version(self.settings.compiler.version) < minimum_version: + raise ConanInvalidConfiguration( + f"{self.ref} requires C++{self._min_cppstd}, which your compiler does not support." + ) + if self.settings.os == "Windows": + raise ConanInvalidConfiguration(f"{self.ref} can not be used on Windows.") + + def source(self): + get(self, **self.conan_data["sources"][self.version], strip_root=True) + + def build(self): + apply_conandata_patches(self) + + def package(self): + copy(self, "LICENSE", self.source_folder, os.path.join(self.package_folder, "licenses")) + copy( + self, + "*.hpp", + os.path.join(self.source_folder, "src"), + os.path.join(self.package_folder, "include"), + ) + + def package_info(self): + self.cpp_info.bindirs = [] + self.cpp_info.libdirs = [] + + self.cpp_info.set_property("cmake_file_name", "qtils") + self.cpp_info.set_property("cmake_target_name", "qtils::qtils") + self.cpp_info.set_property("pkg_config_name", "qtils") + + if self.settings.os in ["Linux", "FreeBSD"]: + self.cpp_info.system_libs.extend(["dl", "m", "pthread"]) + + self.cpp_info.filenames["cmake_find_package"] = "qtils" + self.cpp_info.filenames["cmake_find_package_multi"] = "qtils" + self.cpp_info.names["cmake_find_package"] = "qtils" + self.cpp_info.names["cmake_find_package_multi"] = "qtils" diff --git a/recipes/qtils/all/test_package/CMakeLists.txt b/recipes/qtils/all/test_package/CMakeLists.txt new file mode 100644 index 0000000000000..37a9a599429c8 --- /dev/null +++ b/recipes/qtils/all/test_package/CMakeLists.txt @@ -0,0 +1,14 @@ +CMAKE_MINIMUM_REQUIRED(VERSION 3.15) + +PROJECT(test_package LANGUAGES CXX) + +find_package(qtils CONFIG REQUIRED) + +add_executable(${PROJECT_NAME} + test_package.cpp +) + +target_link_libraries(${PROJECT_NAME} PRIVATE + qtils::qtils +) +target_compile_features(${PROJECT_NAME} PRIVATE cxx_std_14) diff --git a/recipes/qtils/all/test_package/conanfile.py b/recipes/qtils/all/test_package/conanfile.py new file mode 100644 index 0000000000000..3a91c9439218e --- /dev/null +++ b/recipes/qtils/all/test_package/conanfile.py @@ -0,0 +1,26 @@ +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 = "CMakeDeps", "CMakeToolchain", "VirtualRunEnv" + test_type = "explicit" + + def layout(self): + cmake_layout(self) + + def requirements(self): + self.requires(self.tested_reference_str) + + def build(self): + cmake = CMake(self) + cmake.configure() + cmake.build() + + def test(self): + 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/qtils/all/test_package/test_package.cpp b/recipes/qtils/all/test_package/test_package.cpp new file mode 100644 index 0000000000000..905869dfa380f --- /dev/null +++ b/recipes/qtils/all/test_package/test_package.cpp @@ -0,0 +1,4 @@ +int main() +{ + return 0; +} diff --git a/recipes/qtils/config.yml b/recipes/qtils/config.yml new file mode 100644 index 0000000000000..0bc8caaa47adc --- /dev/null +++ b/recipes/qtils/config.yml @@ -0,0 +1,4 @@ +versions: + "0.0.4": + folder: all + From c08bacc3f315d21ef1065301e9dca4ac39fdf389 Mon Sep 17 00:00:00 2001 From: simbabdytech Date: Sun, 26 Jan 2025 17:29:35 +0800 Subject: [PATCH 2/2] qtils 0.0.4 --- recipes/qtils/all/conanfile.py | 37 +++++++++++++++---- recipes/qtils/all/test_package/CMakeLists.txt | 25 ++++++------- recipes/qtils/all/test_package/conanfile.py | 23 +++++++++++- .../qtils/all/test_package/test_package.cpp | 18 ++++++++- 4 files changed, 80 insertions(+), 23 deletions(-) diff --git a/recipes/qtils/all/conanfile.py b/recipes/qtils/all/conanfile.py index 7b923303abc42..15b8e245381c8 100644 --- a/recipes/qtils/all/conanfile.py +++ b/recipes/qtils/all/conanfile.py @@ -11,6 +11,7 @@ class PackageConan(ConanFile): name = "qtils" + version = "0.0.4" description = "Utils for KAGOME C++ projects" license = "MIT" url = "https://github.com/conan-io/conan-center-index" @@ -18,20 +19,22 @@ class PackageConan(ConanFile): topics = ("KAGOME", "header-only") package_type = "header-library" settings = "os", "compiler", "build_type", "arch" + options = {} + default_options = {} no_copy_source = True @property def _min_cppstd(self): - return 14 + return 20 @property def _compilers_minimum_version(self): return { - "apple-clang": "10", - "clang": "7", - "gcc": "7", - "msvc": "191", - "Visual Studio": "15", + "apple-clang": "11", + "clang": "10", + "gcc": "10", + "msvc": "192", + "Visual Studio": "16", } def export_sources(self): @@ -56,7 +59,25 @@ def validate(self): f"{self.ref} requires C++{self._min_cppstd}, which your compiler does not support." ) if self.settings.os == "Windows": - raise ConanInvalidConfiguration(f"{self.ref} can not be used on Windows.") + raise ConanInvalidConfiguration( + f"{self.ref} can not be used on Windows due to platform-specific dependencies." + ) + + if self.dependencies["boost"].ref.version < "1.74.0": + raise ConanInvalidConfiguration( + f"{self.ref} requires Boost >= 1.74.0" + ) + + if self.dependencies["fmt"].ref.version < "8.0.0": + raise ConanInvalidConfiguration( + f"{self.ref} requires fmt >= 8.0.0" + ) + + if self.settings.compiler.get_safe("cppstd") and \ + Version(str(self.settings.compiler.cppstd)) < "20": + raise ConanInvalidConfiguration( + f"{self.ref} requires C++20 or higher for std::span and concepts support" + ) def source(self): get(self, **self.conan_data["sources"][self.version], strip_root=True) @@ -81,6 +102,8 @@ def package_info(self): self.cpp_info.set_property("cmake_target_name", "qtils::qtils") self.cpp_info.set_property("pkg_config_name", "qtils") + self.cpp_info.defines = [] + if self.settings.os in ["Linux", "FreeBSD"]: self.cpp_info.system_libs.extend(["dl", "m", "pthread"]) diff --git a/recipes/qtils/all/test_package/CMakeLists.txt b/recipes/qtils/all/test_package/CMakeLists.txt index 37a9a599429c8..02a9e2c4915bc 100644 --- a/recipes/qtils/all/test_package/CMakeLists.txt +++ b/recipes/qtils/all/test_package/CMakeLists.txt @@ -1,14 +1,13 @@ -CMAKE_MINIMUM_REQUIRED(VERSION 3.15) - -PROJECT(test_package LANGUAGES CXX) - -find_package(qtils CONFIG REQUIRED) - -add_executable(${PROJECT_NAME} - test_package.cpp -) - -target_link_libraries(${PROJECT_NAME} PRIVATE - qtils::qtils +cmake_minimum_required(VERSION 3.15) +project(test_package CXX) + +find_package(qtils REQUIRED CONFIG) +find_package(Boost REQUIRED) +find_package(fmt REQUIRED CONFIG) + +add_executable(${PROJECT_NAME} test_package.cpp) +target_link_libraries(${PROJECT_NAME} PRIVATE qtils::qtils fmt::fmt Boost::boost) +set_target_properties(${PROJECT_NAME} PROPERTIES + CXX_STANDARD 20 + CXX_STANDARD_REQUIRED ON ) -target_compile_features(${PROJECT_NAME} PRIVATE cxx_std_14) diff --git a/recipes/qtils/all/test_package/conanfile.py b/recipes/qtils/all/test_package/conanfile.py index 3a91c9439218e..875cb4e0da4d7 100644 --- a/recipes/qtils/all/test_package/conanfile.py +++ b/recipes/qtils/all/test_package/conanfile.py @@ -1,6 +1,8 @@ from conan import ConanFile -from conan.tools.build import can_run +from conan.errors import ConanInvalidConfiguration +from conan.tools.build import can_run, check_min_cppstd from conan.tools.cmake import cmake_layout, CMake +from conan.tools.scm import Version import os @@ -9,6 +11,25 @@ class TestPackageConan(ConanFile): generators = "CMakeDeps", "CMakeToolchain", "VirtualRunEnv" test_type = "explicit" + def validate(self): + if self.settings.compiler.get_safe("cppstd"): + check_min_cppstd(self, 20) # 与主包保持一致 + + # 验证编译器版本 + minimum_version = { + "apple-clang": "11", + "clang": "10", + "gcc": "10", + "msvc": "192", + "Visual Studio": "16", + } + compiler = str(self.settings.compiler) + version = str(self.settings.compiler.version) + if compiler in minimum_version and Version(version) < minimum_version[compiler]: + raise ConanInvalidConfiguration( + f"{self.ref} requires {compiler} >= {minimum_version[compiler]}" + ) + def layout(self): cmake_layout(self) diff --git a/recipes/qtils/all/test_package/test_package.cpp b/recipes/qtils/all/test_package/test_package.cpp index 905869dfa380f..cc9b11f7686b1 100644 --- a/recipes/qtils/all/test_package/test_package.cpp +++ b/recipes/qtils/all/test_package/test_package.cpp @@ -1,4 +1,18 @@ -int main() -{ +#include +#include +#include +#include +#include +#include + +int main() { + std::string test_str = "Hello Qtils!"; + std::vector data(test_str.begin(), test_str.end()); + + // Test hex formatting using span + std::span input_span(data); + qtils::Hex hex{input_span}; + std::cout << fmt::format("{}", hex) << std::endl; + return 0; }