diff --git a/recipes/fmt/all/CMakeLists.txt b/recipes/fmt/all/CMakeLists.txt deleted file mode 100644 index 61f3d3b039e2bb..00000000000000 --- a/recipes/fmt/all/CMakeLists.txt +++ /dev/null @@ -1,7 +0,0 @@ -cmake_minimum_required(VERSION 3.1) -project(cmake_wrapper) - -include(conanbuildinfo.cmake) -conan_basic_setup(KEEP_RPATHS) - -add_subdirectory("source_subfolder") diff --git a/recipes/fmt/all/conandata.yml b/recipes/fmt/all/conandata.yml index 298bf7c5700241..26e08e27aaa8dc 100644 --- a/recipes/fmt/all/conandata.yml +++ b/recipes/fmt/all/conandata.yml @@ -53,7 +53,6 @@ sources: patches: "5.3.0": - patch_file: "patches/fix-install-5.3.0.patch" - base_path: "source_subfolder" # "6.0.0": # - patch_file: "patches/fix-install-6.0.0.patch" # base_path: "source_subfolder" diff --git a/recipes/fmt/all/conanfile.py b/recipes/fmt/all/conanfile.py index 558e62dde37cf2..a7cb86392fa9d0 100644 --- a/recipes/fmt/all/conanfile.py +++ b/recipes/fmt/all/conanfile.py @@ -1,7 +1,12 @@ -from conan.tools.microsoft import msvc_runtime_flag -from conans import ConanFile, CMake, tools -from conans.errors import ConanInvalidConfiguration import os +import shutil + +from conan import ConanFile +from conan.tools.scm import Version +from conan.tools.cmake import CMake, CMakeToolchain, cmake_layout +from conan.tools.files import get, copy, apply_conandata_patches +from conan.tools.microsoft.visual import is_msvc, msvc_runtime_flag +from conan.errors import ConanInvalidConfiguration required_conan_version = ">=1.43.0" @@ -13,6 +18,7 @@ class FmtConan(ConanFile): topics = ("fmt", "format", "iostream", "printf") url = "https://github.com/conan-io/conan-center-index" license = "MIT" + exports_sources = "patches/*" settings = "os", "arch", "compiler", "build_type" options = { @@ -30,29 +36,23 @@ class FmtConan(ConanFile): "with_os_api": True, } - generators = "cmake" - _cmake = None - - @property - def _source_subfolder(self): - return "source_subfolder" - - @property - def _build_subfolder(self): - return "build_subfolder" - - @property - def _is_msvc(self): - return str(self.settings.compiler) in ["Visual Studio", "msvc"] - @property def _has_with_os_api_option(self): - return tools.Version(self.version) >= "7.0.0" + return Version(str(self.version)) >= "7.0.0" - def export_sources(self): - self.copy("CMakeLists.txt") - for patch in self.conan_data.get("patches", {}).get(self.version, []): - self.copy(patch["patch_file"]) + def generate(self): + if not self.options.header_only: + tc = CMakeToolchain(self) + tc.variables["FMT_DOC"] = False + tc.variables["FMT_TEST"] = False + tc.variables["FMT_INSTALL"] = True + tc.variables["FMT_LIB_DIR"] = "lib" + if self._has_with_os_api_option: + tc.variables["FMT_OS"] = self.options.with_os_api + tc.generate() + + def layout(self): + cmake_layout(self) def config_options(self): if self.settings.os == "Windows": @@ -63,15 +63,18 @@ def config_options(self): self.options.with_os_api = False def configure(self): - if self.options.header_only: - del self.options.fPIC - del self.options.shared - del self.options.with_os_api - elif self.options.shared: - del self.options.fPIC + try: + if self.options.header_only: + del self.options.fPIC + del self.options.shared + del self.options.with_os_api + elif self.options.shared: + del self.options.fPIC + except Exception: + pass def validate(self): - if self.options.get_safe("shared") and self._is_msvc and "MT" in msvc_runtime_flag(self): + if self.options.get_safe("shared") and is_msvc(self) and "MT" in msvc_runtime_flag(self): raise ConanInvalidConfiguration( "Visual Studio build for shared library with MT runtime is not supported" ) @@ -83,39 +86,32 @@ def package_id(self): del self.info.options.with_fmt_alias def source(self): - tools.get(**self.conan_data["sources"][self.version], - destination=self._source_subfolder, strip_root=True) - - def _configure_cmake(self): - if self._cmake: - return self._cmake - self._cmake = CMake(self) - self._cmake.definitions["FMT_DOC"] = False - self._cmake.definitions["FMT_TEST"] = False - self._cmake.definitions["FMT_INSTALL"] = True - self._cmake.definitions["FMT_LIB_DIR"] = "lib" - if self._has_with_os_api_option: - self._cmake.definitions["FMT_OS"] = self.options.with_os_api - self._cmake.configure(build_folder=self._build_subfolder) - return self._cmake + get(self, **self.conan_data["sources"][str(self.version)], destination=self.source_folder, strip_root=True) def build(self): - for patch in self.conan_data.get("patches", {}).get(self.version, []): - tools.patch(**patch) + apply_conandata_patches(self) if not self.options.header_only: - cmake = self._configure_cmake() + cmake = CMake(self) + cmake.configure() cmake.build() + @staticmethod + def _rm_folder(folder): + try: + shutil.rmtree(folder) + except Exception: + pass + def package(self): - self.copy("LICENSE.rst", dst="licenses", src=self._source_subfolder) + copy(self, "LICENSE.rst", self.source_folder, os.path.join(self.package_folder, "licenses")) if self.options.header_only: - self.copy("*.h", dst="include", src=os.path.join(self._source_subfolder, "include")) + copy(self, "*.h", dst="include", src=os.path.join(self._source_subfolder, "include")) else: - cmake = self._configure_cmake() + cmake = CMake(self) cmake.install() - tools.rmdir(os.path.join(self.package_folder, "lib", "cmake")) - tools.rmdir(os.path.join(self.package_folder, "lib", "pkgconfig")) - tools.rmdir(os.path.join(self.package_folder, "share")) + self._rm_folder(os.path.join(self.package_folder, "lib", "cmake")) + self._rm_folder(os.path.join(self.package_folder, "lib", "pkgconfig")) + self._rm_folder(os.path.join(self.package_folder, "res")) def package_info(self): self.cpp_info.names["cmake_find_package"] = "fmt" diff --git a/recipes/fmt/all/test_cmakedeps/CMakeLists.txt b/recipes/fmt/all/test_cmakedeps/CMakeLists.txt deleted file mode 100644 index 66300c1349564f..00000000000000 --- a/recipes/fmt/all/test_cmakedeps/CMakeLists.txt +++ /dev/null @@ -1,22 +0,0 @@ -cmake_minimum_required(VERSION 3.15) -project(test_package CXX) - -find_package(fmt REQUIRED CONFIG) - -# TEST_PACKAGE ################################################################# -add_executable(${CMAKE_PROJECT_NAME} test_package.cpp) -set_property(TARGET ${CMAKE_PROJECT_NAME} PROPERTY CXX_STANDARD 14) -if(FMT_HEADER_ONLY) - target_link_libraries(${CMAKE_PROJECT_NAME} fmt::fmt-header-only) -else() - target_link_libraries(${CMAKE_PROJECT_NAME} fmt::fmt) -endif() - -# TEST_RANGES ################################################################## -add_executable(test_ranges test_ranges.cpp) -set_property(TARGET test_ranges PROPERTY CXX_STANDARD 14) -if(FMT_HEADER_ONLY) - target_link_libraries(test_ranges fmt::fmt-header-only) -else() - target_link_libraries(test_ranges fmt::fmt) -endif() diff --git a/recipes/fmt/all/test_cmakedeps/conanfile.py b/recipes/fmt/all/test_cmakedeps/conanfile.py deleted file mode 100644 index 581338b207b567..00000000000000 --- a/recipes/fmt/all/test_cmakedeps/conanfile.py +++ /dev/null @@ -1,29 +0,0 @@ -import os -from conans import ConanFile -from conan.tools.cmake import CMake, CMakeToolchain -from conan.tools.cross_building import cross_building as tools_cross_building -from conan.tools.layout import cmake_layout - -required_conan_version = ">=1.43.0" - -class TestPackageConan(ConanFile): - settings = "os", "compiler", "build_type", "arch" - generators = "CMakeDeps" - - def generate(self): - tc = CMakeToolchain(self) - tc.variables["FMT_HEADER_ONLY"] = self.dependencies["fmt"].options.header_only - tc.generate() - - def layout(self): - cmake_layout(self) - - def build(self): - cmake = CMake(self) - cmake.configure() - cmake.build() - - def test(self): - if not tools_cross_building(self): - self.run(os.path.join(self.cpp.build.bindirs[0], "test_package"), run_environment=True) - self.run(os.path.join(self.cpp.build.bindirs[0], "test_ranges"), run_environment=True) diff --git a/recipes/fmt/all/test_cmakedeps/test_package.cpp b/recipes/fmt/all/test_cmakedeps/test_package.cpp deleted file mode 100644 index 76a2416d79aae8..00000000000000 --- a/recipes/fmt/all/test_cmakedeps/test_package.cpp +++ /dev/null @@ -1,55 +0,0 @@ -#include -#include -#include -#include -#include - - -#include "fmt/format.h" -#include "fmt/printf.h" -#include "fmt/ostream.h" -#include "fmt/color.h" - - -void vreport(const char *format, fmt::format_args args) { - fmt::vprint(format, args); -} - -template -void report(const char *format, const Args & ... args) { - vreport(format, fmt::make_format_args(args...)); -} - -class Date { - int year_, month_, day_; - public: - Date(int year, int month, int day) : year_(year), month_(month), day_(day) {} - - friend std::ostream &operator<<(std::ostream &os, const Date &d) { - return os << d.year_ << '-' << d.month_ << '-' << d.day_; - } -}; - -int main() { - const std::string thing("World"); - fmt::print("PRINT: Hello {}!\n", thing); - fmt::printf("PRINTF: Hello, %s!\n", thing); - - const std::string formatted = fmt::format("{0}{1}{0}", "abra", "cad"); - fmt::print("{}\n", formatted); - - fmt::memory_buffer buf; - fmt::format_to(buf, "{}", 2.7182818); - fmt::print("Euler number: {}\n", fmt::to_string(buf)); - - const std::string date = fmt::format("The date is {}\n", Date(2012, 12, 9)); - fmt::print(date); - - report("{} {} {}\n", "Conan", 42, 3.14159); - - fmt::print(std::cout, "{} {}\n", "Magic number", 42); - - fmt::print(fg(fmt::color::aqua), "Bincrafters\n"); - - return EXIT_SUCCESS; -} diff --git a/recipes/fmt/all/test_cmakedeps/test_ranges.cpp b/recipes/fmt/all/test_cmakedeps/test_ranges.cpp deleted file mode 100644 index b808d6987b07e9..00000000000000 --- a/recipes/fmt/all/test_cmakedeps/test_ranges.cpp +++ /dev/null @@ -1,11 +0,0 @@ -#include -#include -#include "fmt/ranges.h" - -int main() { - std::vector numbers; - fmt::format_to(std::back_inserter(numbers), "{}{}{}", 1, 2, 3); - const std::string str_numbers = fmt::format("{}", numbers); - fmt::print("numbers: {}\n", str_numbers); - return EXIT_SUCCESS; -} diff --git a/recipes/fmt/all/test_package/CMakeLists.txt b/recipes/fmt/all/test_package/CMakeLists.txt index e4a5b854419355..66300c1349564f 100644 --- a/recipes/fmt/all/test_package/CMakeLists.txt +++ b/recipes/fmt/all/test_package/CMakeLists.txt @@ -1,9 +1,6 @@ cmake_minimum_required(VERSION 3.15) project(test_package CXX) -include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake) -conan_basic_setup(TARGETS) - find_package(fmt REQUIRED CONFIG) # TEST_PACKAGE ################################################################# diff --git a/recipes/fmt/all/test_package/conanfile.py b/recipes/fmt/all/test_package/conanfile.py index f99cfc80791d26..a1bb360e875ab1 100644 --- a/recipes/fmt/all/test_package/conanfile.py +++ b/recipes/fmt/all/test_package/conanfile.py @@ -1,18 +1,32 @@ -from conans import ConanFile, CMake, tools import os +from conan import ConanFile +from conan.tools.cmake import CMake, CMakeToolchain +from conan.tools.build import cross_building as tools_cross_building +from conan.tools.layout import cmake_layout +required_conan_version = ">=1.43.0" class TestPackageConan(ConanFile): - settings = "os", "arch", "compiler", "build_type" - generators = "cmake", "cmake_find_package_multi" + settings = "os", "compiler", "build_type", "arch" + generators = "CMakeDeps" + + def requirements(self): + self.requires(self.tested_reference_str) + + def generate(self): + tc = CMakeToolchain(self) + tc.variables["FMT_HEADER_ONLY"] = self.dependencies["fmt"].options.header_only + tc.generate() + + def layout(self): + cmake_layout(self) def build(self): cmake = CMake(self) - cmake.definitions["FMT_HEADER_ONLY"] = self.options["fmt"].header_only cmake.configure() cmake.build() def test(self): - if not tools.cross_building(self): - self.run(os.path.join("bin", "test_package"), run_environment=True) - self.run(os.path.join("bin", "test_ranges"), run_environment=True) + if not tools_cross_building(self): + self.run(os.path.join(self.cpp.build.bindirs[0], "test_package")) + self.run(os.path.join(self.cpp.build.bindirs[0], "test_ranges"))