Skip to content

Commit

Permalink
qt-advanced-docking-system: support Conan 2 (#26496)
Browse files Browse the repository at this point in the history
* qt-advanced-docking-system: migrate to Conan v2


---------

Co-authored-by: Martin Valgur <martin.valgur@gmail.com>
  • Loading branch information
jcar87 and valgur authored Jan 31, 2025
1 parent aab7fcb commit 05f0a4f
Show file tree
Hide file tree
Showing 7 changed files with 92 additions and 105 deletions.
7 changes: 0 additions & 7 deletions recipes/qt-advanced-docking-system/all/CMakeLists.txt

This file was deleted.

13 changes: 3 additions & 10 deletions recipes/qt-advanced-docking-system/all/conandata.yml
Original file line number Diff line number Diff line change
@@ -1,11 +1,4 @@
sources:
"3.8.3":
url: "https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System/archive/refs/tags/3.8.3.tar.gz"
sha256: "bd5a9469b755bedf33baefd0b3dda6d167b7917a2888e2794eed5abee7d78f74"
"3.8.2":
url: "https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System/archive/refs/tags/3.8.2.tar.gz"
sha256: "e56811228fb4d5f5703c31cd83cb39ab2d5a849f581719d383db72f9322ec7f2"
patches:
"3.8.2":
- patch_file: "patches/fix-cmake-license-install.patch"
base_path: "source_subfolder"
"4.3.1":
url: "https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System/archive/refs/tags/4.3.1.tar.gz"
sha256: "d7c244d9accaa78766e90124c0ce6054327b78625dae8ba2cfe22fc29dfba37d"
122 changes: 68 additions & 54 deletions recipes/qt-advanced-docking-system/all/conanfile.py
Original file line number Diff line number Diff line change
@@ -1,23 +1,29 @@
from conan import ConanFile
from conan.tools.files import copy, get, apply_conandata_patches, export_conandata_patches, replace_in_file, rmdir
from conans import CMake
import os

required_conan_version = ">=1.52.0"
from conan import ConanFile
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
from conan.tools.scm import Version

required_conan_version = ">=2.0.9"


class QtADS(ConanFile):
name = "qt-advanced-docking-system"
license = "LGPL-2.1"
url = "https://github.com/conan-io/conan-center-index"
homepage = "https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System"
topics = ("qt", "gui")
description = (
"Qt Advanced Docking System lets you create customizable layouts "
"using a full featured window docking system similar to what is found "
"in many popular integrated development environments (IDEs) such as "
"Visual Studio."
)
settings = "os", "compiler", "build_type", "arch"
license = "LGPL-2.1-or-later"
url = "https://github.com/conan-io/conan-center-index"
homepage = "https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System"
topics = ("qt", "gui")

package_type = "library"
settings = "os", "arch", "compiler", "build_type"
options = {
"shared": [True, False],
"fPIC": [True, False],
Expand All @@ -26,70 +32,78 @@ class QtADS(ConanFile):
"shared": False,
"fPIC": True,
}
generators = "cmake", "cmake_find_package", "cmake_find_package_multi"

_cmake = None
_qt_version = "5.15.6"
implements = ["auto_shared_fpic"]

@property
def _source_subfolder(self):
return "source_subfolder"
def _qt_major(self):
return Version(self.dependencies["qt"].ref.version).major

def export_sources(self):
copy(self, "CMakeLists.txt", self.recipe_folder, self.export_sources_folder)
export_conandata_patches(self)

def config_options(self):
if self.settings.os == "Windows":
del self.options.fPIC
@property
def _min_cppstd(self):
if self._qt_major >= 6:
return 17
else:
return 14

def configure(self):
if self.options.shared:
del self.options.fPIC
def layout(self):
cmake_layout(self, src_folder="src")

def requirements(self):
self.requires(f"qt/{self._qt_version}")

def source(self):
get(self, **self.conan_data["sources"][self.version], strip_root=True,
destination=self._source_subfolder)
self.requires("qt/[>=5.15 <7]", transitive_headers=True)

def _configure_cmake(self):
if self._cmake:
return self._cmake
def build_requirements(self):
self.tool_requires("qt/<host_version>")
self.tool_requires("cmake/[>=3.27 <4]") # to be able to use CMAKE_AUTOMOC_EXECUTABLE

self._cmake = CMake(self)
self._cmake.definitions["ADS_VERSION"] = self.version
self._cmake.definitions["BUILD_EXAMPLES"] = "OFF"
self._cmake.definitions["BUILD_STATIC"] = not self.options.shared
def validate(self):
check_min_cppstd(self, self._min_cppstd)

self._cmake.configure()
return self._cmake

def _patch_sources(self):
apply_conandata_patches(self)

replace_in_file(self,
f"{self.source_folder}/{self._source_subfolder}/src/ads_globals.cpp",
"#include <qpa/qplatformnativeinterface.h>",
f"#include <{self._qt_version}/QtGui/qpa/qplatformnativeinterface.h>"
)
def source(self):
get(self, **self.conan_data["sources"][self.version], strip_root=True)

def generate(self):
tc = CMakeToolchain(self)
tc.cache_variables["ADS_VERSION"] = self.version
tc.cache_variables["BUILD_EXAMPLES"] = "OFF"
tc.cache_variables["BUILD_STATIC"] = not self.options.shared
# https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System/blob/a16d17a8bf375127847ac8f40af1ebcdb841b13c/src/CMakeLists.txt#L12
# TODO: the upstream Qt recipe should expose this variable
qt_version = str(self.dependencies["qt"].ref.version)
qt_include_root = self.dependencies["qt"].cpp_info.includedirs[0]
tc.cache_variables[f"Qt{self._qt_major}Gui_PRIVATE_INCLUDE_DIRS"] = os.path.join(qt_include_root, "QtGui", qt_version, "QtGui")
qt_tools_rootdir = self.conf.get("user.qt:tools_directory", None)
tc.cache_variables["CMAKE_AUTOMOC_EXECUTABLE"] = os.path.join(qt_tools_rootdir, "moc.exe" if self.settings_build.os == "Windows" else "moc")
tc.cache_variables["CMAKE_AUTORCC_EXECUTABLE"] = os.path.join(qt_tools_rootdir, "rcc.exe" if self.settings_build.os == "Windows" else "rcc")
tc.generate()
deps = CMakeDeps(self)
deps.generate()

def build(self):
self._patch_sources()
cmake = self._configure_cmake()
cmake = CMake(self)
cmake.configure()
cmake.build()

def package(self):
cmake = self._configure_cmake()
cmake = CMake(self)
cmake.install()
self.copy("LICENSE", dst="licenses", src=self._source_subfolder)
copy(self, "LICENSE", self.source_folder, os.path.join(self.package_folder, "licenses"))
copy(self, "gnu-lgpl-v2.1.md", self.source_folder, os.path.join(self.package_folder, "licenses"))
rmdir(self, os.path.join(self.package_folder, "license"))
rmdir(self, os.path.join(self.package_folder, "lib", "cmake"))

def package_info(self):
if Version(self.version) >= 4:
name = f"qt{self._qt_major}advanceddocking"
self.cpp_info.includedirs.append(os.path.join("include", name))
lib_name = f"{name}d" if self.settings.build_type == "Debug" else name
else:
lib_name = "qtadvanceddocking"

self.cpp_info.set_property("cmake_file_name", lib_name)
self.cpp_info.set_property("cmake_target_name", f"ads::{lib_name}")

if self.options.shared:
self.cpp_info.libs = ["qtadvanceddocking"]
self.cpp_info.libs = [lib_name]
else:
self.cpp_info.defines.append("ADS_STATIC")
self.cpp_info.libs = ["qtadvanceddocking_static"]
self.cpp_info.libs = [f"{lib_name}_static"]

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,12 +1,7 @@
cmake_minimum_required(VERSION 3.15)
project(PackageTest CXX)
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
conan_basic_setup(TARGETS)

find_package(qt-advanced-docking-system CONFIG REQUIRED)
project(test_package CXX)

find_package(qt6advanceddocking REQUIRED CONFIG)
find_package(Qt6 REQUIRED)
add_executable(example example.cpp)
target_link_libraries(example qt-advanced-docking-system::qt-advanced-docking-system)
target_link_libraries(example ads::qt6advanceddocking Qt6::Core)
23 changes: 16 additions & 7 deletions recipes/qt-advanced-docking-system/all/test_package/conanfile.py
Original file line number Diff line number Diff line change
@@ -1,17 +1,26 @@
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 AdsTestConan(ConanFile):
settings = "os", "compiler", "build_type", "arch"
generators = "cmake", "cmake_find_package_multi"
class TestPackageConan(ConanFile):
settings = "os", "arch", "compiler", "build_type"
generators = "CMakeDeps", "CMakeToolchain"

def requirements(self):
self.requires(self.tested_reference_str)
self.requires("qt/[*]")

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):
bin_path = os.path.join("bin", "example")
self.run(bin_path, run_environment=True)
if can_run(self):
bin_path = os.path.join(self.cpp.build.bindir, "example")
self.run(bin_path, env="conanrun")
4 changes: 1 addition & 3 deletions recipes/qt-advanced-docking-system/config.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
versions:
"3.8.3":
folder: "all"
"3.8.2":
"4.3.1":
folder: "all"

0 comments on commit 05f0a4f

Please sign in to comment.