From 9494438a6b3ee93b9c89cdd82bb077902b2f5294 Mon Sep 17 00:00:00 2001 From: Uilian Ries Date: Thu, 26 Sep 2024 14:57:29 +0200 Subject: [PATCH] Build on Windows Signed-off-by: Uilian Ries --- recipes/qxlsx/all/conanfile.py | 43 +++++++++---------- recipes/qxlsx/all/test_package/CMakeLists.txt | 8 ++-- recipes/qxlsx/all/test_package/conanfile.py | 1 + 3 files changed, 25 insertions(+), 27 deletions(-) diff --git a/recipes/qxlsx/all/conanfile.py b/recipes/qxlsx/all/conanfile.py index cb0a3f55c941f..7a5a45f335627 100644 --- a/recipes/qxlsx/all/conanfile.py +++ b/recipes/qxlsx/all/conanfile.py @@ -1,8 +1,10 @@ from conan import ConanFile from conan.tools.cmake import CMake, CMakeToolchain, CMakeDeps, cmake_layout from conan.tools.env import VirtualBuildEnv -from conan.tools.files import apply_conandata_patches, copy, export_conandata_patches, get, rmdir +from conan.tools.files import copy, get, rmdir from conan.tools.scm import Version +from conan.tools.microsoft import is_msvc +from conan.errors import ConanInvalidConfiguration import os required_conan_version = ">=1.53.0" @@ -28,10 +30,7 @@ class QXlsxConan(ConanFile): @property def _qt_version(self): - return Version(self.dependencies["qt"].ref.version).major - - def export_sources(self): - export_conandata_patches(self) + return str(Version(self.dependencies["qt"].ref.version).major) def config_options(self): if self.settings.os == "Windows": @@ -49,6 +48,13 @@ def requirements(self): # INFO: transitive libs: undefined reference to symbol '_ZN10QArrayData10deallocateEPS_mm@@Qt_5' self.requires("qt/[~5.15]", transitive_headers=True, transitive_libs=True) + def validate(self): + if not self.dependencies["qt"].options.gui: + raise ConanInvalidConfiguration(f"{self.ref} requires Qt with gui component. Use '-o qt/*:gui=True'") + if Version(self.version) == "1.4.4" and is_msvc(self) and self.options.shared: + # FIXME: xlsxworksheet.cpp.obj : error LNK2019: unresolved external symbol " __cdecl QVector::begin( + raise ConanInvalidConfiguration(f"{self.ref} Conan recipe does not support shared library with MSVC. Use version 1.4.5 or later.") + def build_requirements(self): if Version(self.version) >= "1.4.4": self.tool_requires("cmake/[>=3.16 <4]") @@ -60,38 +66,29 @@ def generate(self): tc = VirtualBuildEnv(self) tc.generate() tc = CMakeToolchain(self) - tc.variables["QT_VERSION_MAJOR"] = self._qt_version + tc.cache_variables["QT_VERSION_MAJOR"] = self._qt_version tc.generate() tc = CMakeDeps(self) tc.generate() def build(self): - apply_conandata_patches(self) cmake = CMake(self) - cmake.configure(build_script_folder="QXlsx") + cmake.configure(build_script_folder=os.path.join(self.source_folder, "QXlsx")) cmake.build() def package(self): copy(self, "LICENSE", src=self.source_folder, dst=os.path.join(self.package_folder, "licenses")) cmake = CMake(self) - cmake.configure(build_script_folder="QXlsx") cmake.install() rmdir(self, os.path.join(self.package_folder, "lib", "cmake")) def package_info(self): - self.cpp_info.set_property("cmake_file_name", "QXlsx") - self.cpp_info.set_property("cmake_target_name", "QXlsx::Core") - # TODO: back to global scope in conan v2 once cmake_find_package* generators removed - if Version(self.version) <= "1.4.4": - self.cpp_info.components["qxlsx_core"].libs = ["QXlsx"] - else: - self.cpp_info.components["qxlsx_core"].libs = [f"QXlsxQt{self._qt_version}"] - self.cpp_info.components["qxlsx_core"].includedirs = [os.path.join("include", "QXlsx")] - self.cpp_info.components["qxlsx_core"].requires = ["qt::qtCore", "qt::qtGui"] + self.cpp_info.set_property("cmake_file_name", f"QXlsxQt{self._qt_version}") + self.cpp_info.set_property("cmake_target_name", "QXlsx::QXlsx") + self.cpp_info.libs = [f"QXlsxQt{self._qt_version}"] + self.cpp_info.includedirs = ["include", os.path.join("include", "QXlsx")] + self.cpp_info.requires = ["qt::qtCore", "qt::qtGui"] # TODO: to remove in conan v2 once cmake_find_package* generators removed - self.cpp_info.names["cmake_find_package"] = "QXlsx" - self.cpp_info.names["cmake_find_package_multi"] = "QXlsx" - self.cpp_info.components["qxlsx_core"].names["cmake_find_package"] = "Core" - self.cpp_info.components["qxlsx_core"].names["cmake_find_package_multi"] = "Core" - self.cpp_info.components["qxlsx_core"].set_property("cmake_target_name", "QXlsx::Core") + self.cpp_info.names["cmake_find_package"] = f"QXlsxQt{self._qt_version}" + self.cpp_info.names["cmake_find_package_multi"] = f"QXlsxQt{self._qt_version}" diff --git a/recipes/qxlsx/all/test_package/CMakeLists.txt b/recipes/qxlsx/all/test_package/CMakeLists.txt index d57016937dd42..d68d256508c47 100644 --- a/recipes/qxlsx/all/test_package/CMakeLists.txt +++ b/recipes/qxlsx/all/test_package/CMakeLists.txt @@ -1,8 +1,8 @@ -cmake_minimum_required(VERSION 3.1) +cmake_minimum_required(VERSION 3.15) project(test_package LANGUAGES CXX) -find_package(QXlsx REQUIRED CONFIG) +find_package(QXlsxQt5 REQUIRED CONFIG) add_executable(${PROJECT_NAME} test_package.cpp) -target_link_libraries(${PROJECT_NAME} PRIVATE QXlsx::Core) -set_property(TARGET ${PROJECT_NAME} PROPERTY CXX_STANDARD 17) +target_link_libraries(${PROJECT_NAME} PRIVATE QXlsx::QXlsx) +target_compile_features(${PROJECT_NAME} PRIVATE cxx_std_17) diff --git a/recipes/qxlsx/all/test_package/conanfile.py b/recipes/qxlsx/all/test_package/conanfile.py index 6d529581ba2f5..40f70f535b209 100644 --- a/recipes/qxlsx/all/test_package/conanfile.py +++ b/recipes/qxlsx/all/test_package/conanfile.py @@ -7,6 +7,7 @@ class TestPackageConan(ConanFile): settings = "os", "arch", "compiler", "build_type" generators = "CMakeDeps", "VirtualRunEnv" + test_type = "explicit" def requirements(self): self.requires(self.tested_reference_str)