Skip to content

Commit

Permalink
Build on Windows
Browse files Browse the repository at this point in the history
Signed-off-by: Uilian Ries <uilianries@gmail.com>
  • Loading branch information
uilianries committed Sep 26, 2024
1 parent ebce50a commit 9494438
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 27 deletions.
43 changes: 20 additions & 23 deletions recipes/qxlsx/all/conanfile.py
Original file line number Diff line number Diff line change
@@ -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"
Expand All @@ -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":
Expand All @@ -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<class QXmlStreamAttribute>::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]")
Expand All @@ -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}"
8 changes: 4 additions & 4 deletions recipes/qxlsx/all/test_package/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -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)
1 change: 1 addition & 0 deletions recipes/qxlsx/all/test_package/conanfile.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down

0 comments on commit 9494438

Please sign in to comment.