From d0bb8ff38d7dcaa63b98d07bb368e1cd8c008e6f Mon Sep 17 00:00:00 2001 From: Aleksandr Vodyanov Date: Tue, 25 Feb 2025 14:03:04 +0300 Subject: [PATCH] [DO-981] fix qt package info (!17) Co-authored-by: aleksandr.vodyanov Reviewed-on: https://git.avroid.tech/Conan/conan_build/pulls/17 --- recipes/dbus/all/conandata.yml | 29 + recipes/dbus/all/conanfile.py | 224 ++++++ ...check_header-to-confirm-headers-work.patch | 46 ++ .../0003-meson-monotonic-clock-check.patch | 15 + recipes/dbus/all/test_package/CMakeLists.txt | 7 + recipes/dbus/all/test_package/conanfile.py | 27 + recipes/dbus/all/test_package/test_package.c | 13 + recipes/dbus/config.yml | 9 + recipes/meson/all/conanfile.py | 2 +- recipes/qt/5.x.x/conanfile.py | 664 ++---------------- .../build-release/conan/conanbuild.sh | 1 - .../conan/conanbuildenv-release-x86_64.sh | 18 - .../build-release/conan/conanrun.sh | 1 - .../conan/conanrunenv-release-x86_64.sh | 14 - .../conan/deactivate_conanbuild.sh | 1 - ...deactivate_conanbuildenv-release-x86_64.sh | 4 - .../conan/deactivate_conanrun.sh | 1 - .../build-release/conan/xkeyboard-config.pc | 8 - 18 files changed, 421 insertions(+), 663 deletions(-) create mode 100644 recipes/dbus/all/conandata.yml create mode 100644 recipes/dbus/all/conanfile.py create mode 100755 recipes/dbus/all/patches/0001-meson-Use-check_header-to-confirm-headers-work.patch create mode 100644 recipes/dbus/all/patches/0003-meson-monotonic-clock-check.patch create mode 100644 recipes/dbus/all/test_package/CMakeLists.txt create mode 100644 recipes/dbus/all/test_package/conanfile.py create mode 100644 recipes/dbus/all/test_package/test_package.c create mode 100644 recipes/dbus/config.yml delete mode 100644 recipes/xkeyboard-config/all/test_package/build-release/conan/conanbuild.sh delete mode 100644 recipes/xkeyboard-config/all/test_package/build-release/conan/conanbuildenv-release-x86_64.sh delete mode 100644 recipes/xkeyboard-config/all/test_package/build-release/conan/conanrun.sh delete mode 100644 recipes/xkeyboard-config/all/test_package/build-release/conan/conanrunenv-release-x86_64.sh delete mode 100644 recipes/xkeyboard-config/all/test_package/build-release/conan/deactivate_conanbuild.sh delete mode 100644 recipes/xkeyboard-config/all/test_package/build-release/conan/deactivate_conanbuildenv-release-x86_64.sh delete mode 100644 recipes/xkeyboard-config/all/test_package/build-release/conan/deactivate_conanrun.sh delete mode 100644 recipes/xkeyboard-config/all/test_package/build-release/conan/xkeyboard-config.pc diff --git a/recipes/dbus/all/conandata.yml b/recipes/dbus/all/conandata.yml new file mode 100644 index 0000000..25d63e3 --- /dev/null +++ b/recipes/dbus/all/conandata.yml @@ -0,0 +1,29 @@ +sources: + "1.15.8": + url: "https://nexus.avroid.tech/repository/all-raw-proxy-dbus_freedesktop_org/releases/dbus/dbus-1.15.8.tar.xz" + sha256: "84fc597e6ec82f05dc18a7d12c17046f95bad7be99fc03c15bc254c4701ed204" + "1.15.6": + url: "https://nexus.avroid.tech/repository/all-raw-proxy-dbus_freedesktop_org/releases/dbus/dbus-1.15.6.tar.xz" + sha256: "f97f5845f9c4a5a1fb3df67dfa9e16b5a3fd545d348d6dc850cb7ccc9942bd8c" + "1.15.2": + url: "https://nexus.avroid.tech/repository/all-raw-proxy-dbus_freedesktop_org/releases/dbus/dbus-1.15.2.tar.xz" + sha256: "7e640803084af59f5e477b7ded11fd888b5380910a895c51ca3aedd63c0626ca" + "1.15.0": + url: "https://nexus.avroid.tech/repository/all-raw-proxy-dbus_freedesktop_org/releases/dbus/dbus-1.15.0.tar.xz" + sha256: "5073c8cb9ad20226647bb38f4965182b762a6e1f595ccdc8e59411014bfd640a" +patches: + "1.15.8": + - patch_file: "patches/0001-meson-Use-check_header-to-confirm-headers-work.patch" + patch_type: "portability" + patch_description: "Fix build with Visual Studio 2022" + patch_source: "https://gitlab.freedesktop.org/dbus/dbus/-/merge_requests/454" + "1.15.2": + - patch_file: "patches/0003-meson-monotonic-clock-check.patch" + patch_type: "portability" + patch_description: "Fix detection of necessary monotonic clock functions in pthread" + patch_source: "https://gitlab.freedesktop.org/dbus/dbus/-/merge_requests/352" + "1.15.0": + - patch_file: "patches/0003-meson-monotonic-clock-check.patch" + patch_type: "portability" + patch_description: "Fix detection of necessary monotonic clock functions in pthread" + patch_source: "https://gitlab.freedesktop.org/dbus/dbus/-/merge_requests/352" diff --git a/recipes/dbus/all/conanfile.py b/recipes/dbus/all/conanfile.py new file mode 100644 index 0000000..3b9d3d7 --- /dev/null +++ b/recipes/dbus/all/conanfile.py @@ -0,0 +1,224 @@ +from conan import ConanFile +from conan.errors import ConanInvalidConfiguration +from conan.tools.apple import fix_apple_shared_install_name, is_apple_os +from conan.tools.env import VirtualBuildEnv +from conan.tools.files import apply_conandata_patches, copy, export_conandata_patches, get, rename, replace_in_file, rm, rmdir, save +from conan.tools.gnu import PkgConfigDeps +from conan.tools.layout import basic_layout +from conan.tools.meson import Meson, MesonToolchain +from conan.tools.scm import Version +import os +import textwrap + +required_conan_version = ">=1.64.0 <2 || >=2.2.0" + + +class DbusConan(ConanFile): + name = "dbus" + # license is AFL-2.1 OR GPL-2.0-or-later with several other compatible licenses for smaller sections of code + license = "(AFL-2.1 OR GPL-2.0-or-later) AND DocumentRef-COPYING" + url = "https://github.com/conan-io/conan-center-index" + homepage = "https://www.freedesktop.org/wiki/Software/dbus" + description = "D-Bus is a simple system for interprocess communication and coordination." + topics = "bus", "interprocess", "message" + package_type = "library" + settings = "os", "arch", "compiler", "build_type" + short_paths = True + options = { + "shared": [True, False], + "fPIC": [True, False], + "dbus_user": [None, "ANY"], + "message_bus": [True, False], + "system_socket": [None, "ANY"], + "system_pid_file": [None, "ANY"], + "with_x11": [True, False], + "with_systemd": [True, False], + "with_selinux": [True, False], + "session_socket_dir": [None, "ANY"], + } + default_options = { + "shared": False, + "fPIC": True, + "dbus_user": "messagebus", + "message_bus": False, + "system_socket": None, + "system_pid_file": None, + "with_x11": False, + "with_systemd": False, + "with_selinux": False, + "session_socket_dir": "/tmp", + } + + @property + def _has_message_bus_option(self): + return Version(self.version) > "1.15.2" + + def export_sources(self): + export_conandata_patches(self) + + def config_options(self): + if self.settings.os not in ["Linux", "FreeBSD"]: + del self.options.with_systemd + del self.options.with_x11 + del self.options.with_selinux + if self.settings.os == "Windows": + del self.options.fPIC + if not self._has_message_bus_option: + self.options.rm_safe("message_bus") + + def configure(self): + self.settings.rm_safe("compiler.cppstd") + self.settings.rm_safe("compiler.libcxx") + if self.options.shared: + self.options.rm_safe("fPIC") + if not self.options.get_safe("message_bus"): + self.options.rm_safe("dbus_user") + + def layout(self): + basic_layout(self, src_folder="src") + + def requirements(self): + self.requires("expat/[>=2.6.2 <3]") + if self.options.get_safe("with_systemd"): + self.requires("libsystemd/253.6") + if self.options.get_safe("with_selinux"): + self.requires("libselinux/3.6") + if self.options.get_safe("with_x11"): + # X11 is only linked into an executable and should not be propagated as a library dependency. + # It should still be provided in a VirtualRunEnv context, though, + # but Conan as of v2.2 does not yet provide a fine-grained enough control over this. + self.requires("xorg/system", visible=False) + + def package_id(self): + # The dbus_user option only effects the installation of dbus during the package method. + # Otherwise, it only appears in the system.conf file in the package. + self.info.options.rm_safe("dbus_user") + + def validate(self): + if self.settings.compiler == "gcc" and Version(self.settings.compiler.version) < 7: + raise ConanInvalidConfiguration(f"{self.ref} requires at least gcc 7.") + + def build_requirements(self): + self.tool_requires("meson/[>=1.4.0]") + if not self.conf.get("tools.gnu:pkg_config",check_type=str): + self.tool_requires("pkgconf/[>=2.1.0]") + + def source(self): + get(self, **self.conan_data["sources"][self.version], strip_root=True) + + def generate(self): + env = VirtualBuildEnv(self) + env.generate() + tc = MesonToolchain(self) + tc.project_options["asserts"] = not is_apple_os(self) + tc.project_options["checks"] = False + tc.project_options["datadir"] = os.path.join("res", "share") + tc.project_options["sysconfdir"] = os.path.join("res", "etc") + tc.project_options["doxygen_docs"] = "disabled" + tc.project_options["ducktype_docs"] = "disabled" + tc.project_options["qt_help"] = "disabled" + tc.project_options["modular_tests"] = "disabled" + tc.project_options["selinux"] = "enabled" if self.options.get_safe("with_selinux") else "disabled" + if self.options.session_socket_dir: + tc.project_options["session_socket_dir"] = str(self.options.session_socket_dir) + tc.project_options["systemd"] = "enabled" if self.options.get_safe("with_systemd") else "disabled" + if self.options.get_safe("with_systemd"): + tc.project_options["systemd_system_unitdir"] = "/res/lib/systemd/system" + tc.project_options["systemd_user_unitdir"] = "/res/usr/lib/systemd/system" + if self._has_message_bus_option: + tc.project_options["message_bus"] = bool(self.options.message_bus) + if self.options.get_safe("dbus_user"): + tc.project_options["dbus_user"] = str(self.options.dbus_user) + if self.options.system_pid_file: + tc.project_options["system_pid_file"] = str(self.options.system_pid_file) + if self.options.system_socket: + tc.project_options["system_socket"] = str(self.options.system_socket) + if is_apple_os(self): + tc.project_options["launchd_agent_dir"] = os.path.join("res", "LaunchAgents") + tc.project_options["x11_autolaunch"] = "enabled" if self.options.get_safe("with_x11") else "disabled" + tc.project_options["xml_docs"] = "disabled" + tc.generate() + deps = PkgConfigDeps(self) + deps.generate() + + def _patch_sources(self): + apply_conandata_patches(self) + replace_in_file(self, os.path.join(self.source_folder, "meson.build"), + "subdir('test')", "# subdir('test')") + + def build(self): + self._patch_sources() + meson = Meson(self) + meson.configure() + meson.build() + + def package(self): + copy(self, "COPYING", self.source_folder, os.path.join(self.package_folder, "licenses")) + copy(self, "*", os.path.join(self.source_folder, "LICENSES"), os.path.join(self.package_folder, "licenses")) + meson = Meson(self) + meson.install() + + rm(self, "*.pdb", os.path.join(self.package_folder, "bin")) + rmdir(self, os.path.join(self.package_folder, "res", "share", "doc")) + + rmdir(self, os.path.join(self.package_folder, "lib", "cmake")) + rmdir(self, os.path.join(self.package_folder, "lib", "pkgconfig")) + fix_apple_shared_install_name(self) + if self.settings.os == "Windows" and not self.options.shared: + rename(self, os.path.join(self.package_folder, "lib", "libdbus-1.a"), os.path.join(self.package_folder, "lib", "dbus-1.lib")) + + # TODO: to remove in conan v2 once cmake_find_package_* generators removed + self._create_cmake_module_alias_targets( + os.path.join(self.package_folder, self._module_file_rel_path), + {"dbus-1": "dbus-1::dbus-1"} + ) + + def _create_cmake_module_alias_targets(self, module_file, targets): + content = "" + for alias, aliased in targets.items(): + content += textwrap.dedent(f"""\ + if(TARGET {aliased} AND NOT TARGET {alias}) + add_library({alias} INTERFACE IMPORTED) + set_property(TARGET {alias} PROPERTY INTERFACE_LINK_LIBRARIES {aliased}) + endif() + """) + save(self, module_file, content) + + @property + def _module_file_rel_path(self): + return os.path.join("lib", "cmake", f"conan-official-{self.name}-targets.cmake") + + def package_info(self): + self.cpp_info.set_property("cmake_file_name", "DBus1") + self.cpp_info.set_property("cmake_target_name", "dbus-1") + self.cpp_info.set_property("pkg_config_name", "dbus-1") + self.cpp_info.includedirs.extend([ + os.path.join("include", "dbus-1.0"), + os.path.join("lib", "dbus-1.0", "include"), + ]) + self.cpp_info.resdirs = ["res"] + self.cpp_info.libs = ["dbus-1"] + if self.settings.os == "Linux": + self.cpp_info.system_libs.append("rt") + if self.settings.os == "Windows": + self.cpp_info.system_libs.extend(["iphlpapi", "ws2_32"]) + else: + self.cpp_info.system_libs.append("pthread") + + if not self.options.shared: + self.cpp_info.defines.append("DBUS_STATIC_BUILD") + + self.cpp_info.requires.append("expat::expat") + if self.options.get_safe("with_systemd"): + self.cpp_info.requires.append("libsystemd::libsystemd") + if self.options.get_safe("with_selinux"): + self.cpp_info.requires.append("libselinux::selinux") + + # TODO: to remove in conan v2 once cmake_find_package_* & pkg_config generators removed + self.cpp_info.filenames["cmake_find_package"] = "DBus1" + self.cpp_info.filenames["cmake_find_package_multi"] = "DBus1" + self.cpp_info.names["cmake_find_package"] = "dbus-1" + self.cpp_info.names["cmake_find_package_multi"] = "dbus-1" + self.cpp_info.build_modules["cmake_find_package"] = [self._module_file_rel_path] + self.cpp_info.build_modules["cmake_find_package_multi"] = [self._module_file_rel_path] + self.cpp_info.names["pkg_config"] = "dbus-1" diff --git a/recipes/dbus/all/patches/0001-meson-Use-check_header-to-confirm-headers-work.patch b/recipes/dbus/all/patches/0001-meson-Use-check_header-to-confirm-headers-work.patch new file mode 100755 index 0000000..6c04893 --- /dev/null +++ b/recipes/dbus/all/patches/0001-meson-Use-check_header-to-confirm-headers-work.patch @@ -0,0 +1,46 @@ +From e52ccaf7c3abf9d0adccfd001c1417ce08a7f335 Mon Sep 17 00:00:00 2001 +From: Thomas Sondergaard +Date: Thu, 4 Jan 2024 17:45:46 +0100 +Subject: [PATCH] meson: Use check_header to confirm headers work + +instead of using has_header use check_header to confirm the header +works. This is necessary to get the meson build to work with Visual +Studio 2022. It has but it does not actually work when +compiling a C program. A minimal C program that include +fails with the following errors: + + C:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Tools\MSVC\14.38.33130\include\vcruntime_c11_stdatomic.h(36): error C2061: syntax error: identifier 'atomic_bool' + C:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Tools\MSVC\14.38.33130\include\vcruntime_c11_stdatomic.h(36): error C2059: syntax error: ';' + C:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Tools\MSVC\14.38.33130\include\vcruntime_c11_stdatomic.h(37): error C2061: syntax error: identifier 'atomic_char' + C:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Tools\MSVC\14.38.33130\include\vcruntime_c11_stdatomic.h(37): error C2059: syntax error: ';' + ... + ... + +check_header is consistent with CMake's + + check_include_file(stdatomic.h HAVE_STDATOMIC_H) + +which is why the CMake-based build of dbus works with Visual Studio +2022, while the meson build doesn't. + +Fixes #494 +--- + meson.build | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/meson.build b/meson.build +index 17b2a837..19b41cd9 100644 +--- a/meson.build ++++ b/meson.build +@@ -705,7 +705,7 @@ check_headers = [ + + foreach header : check_headers + macro = 'HAVE_' + header.underscorify().to_upper() +- config.set(macro, cc.has_header(header, args: compile_args_c) ? 1 : false) ++ config.set(macro, cc.check_header(header, args: compile_args_c) ? 1 : false) + endforeach + + execinfo = cc.find_library('execinfo', required: false) +-- +2.43.0.windows.1 + diff --git a/recipes/dbus/all/patches/0003-meson-monotonic-clock-check.patch b/recipes/dbus/all/patches/0003-meson-monotonic-clock-check.patch new file mode 100644 index 0000000..7e9e94e --- /dev/null +++ b/recipes/dbus/all/patches/0003-meson-monotonic-clock-check.patch @@ -0,0 +1,15 @@ +diff --git a/meson.build b/meson.build +index 3b5b182c..4e400a52 100644 +--- a/meson.build ++++ b/meson.build +@@ -328,7 +328,9 @@ data_config.set('top_builddir', meson.project_build_root()) + threads = dependency('threads') + config.set( + 'HAVE_MONOTONIC_CLOCK', +- cc.has_header_symbol('pthread.h', 'CLOCK_MONOTONIC', args: compile_args_c), ++ cc.has_header_symbol('pthread.h', 'CLOCK_MONOTONIC', args: compile_args_c) ++ and cc.has_header_symbol('pthread.h', 'pthread_condattr_setclock', args: compile_args_c) ++ and cc.has_header_symbol('time.h', 'clock_getres', args: compile_args_c), + ) + + glib = dependency( diff --git a/recipes/dbus/all/test_package/CMakeLists.txt b/recipes/dbus/all/test_package/CMakeLists.txt new file mode 100644 index 0000000..497b3ee --- /dev/null +++ b/recipes/dbus/all/test_package/CMakeLists.txt @@ -0,0 +1,7 @@ +cmake_minimum_required(VERSION 3.1) +project(test_package LANGUAGES C) + +find_package(DBus1 REQUIRED CONFIG) + +add_executable(${PROJECT_NAME} test_package.c) +target_link_libraries(${PROJECT_NAME} PRIVATE dbus-1) diff --git a/recipes/dbus/all/test_package/conanfile.py b/recipes/dbus/all/test_package/conanfile.py new file mode 100644 index 0000000..da65c01 --- /dev/null +++ b/recipes/dbus/all/test_package/conanfile.py @@ -0,0 +1,27 @@ +from conan import ConanFile +from conan.tools.build import can_run +from conan.tools.cmake import CMake, cmake_layout +import os + + +class TestPackageConan(ConanFile): + settings = "os", "arch", "compiler", "build_type" + generators = "CMakeToolchain", "CMakeDeps", "VirtualRunEnv" + test_type = "explicit" + + def layout(self): + cmake_layout(self) + + def requirements(self): + self.requires(self.tested_reference_str, run=True) + + def build(self): + cmake = CMake(self) + cmake.configure() + cmake.build() + + def test(self): + if can_run(self): + self.run("dbus-monitor --help", env="conanrun") + bin_path = os.path.join(self.cpp.build.bindirs[0], "test_package") + self.run(bin_path, env="conanrun") diff --git a/recipes/dbus/all/test_package/test_package.c b/recipes/dbus/all/test_package/test_package.c new file mode 100644 index 0000000..a1cecc6 --- /dev/null +++ b/recipes/dbus/all/test_package/test_package.c @@ -0,0 +1,13 @@ +#include +#include + +int main() { + int major_version = 0; + int minor_version = 0; + int micro_version = 0; + + dbus_get_version(&major_version, &minor_version, µ_version); + + printf("D-Bus version: v%i.%i.%i\n", major_version, minor_version, micro_version); + return 0; +} diff --git a/recipes/dbus/config.yml b/recipes/dbus/config.yml new file mode 100644 index 0000000..e3b8080 --- /dev/null +++ b/recipes/dbus/config.yml @@ -0,0 +1,9 @@ +versions: + "1.15.8": + folder: all + "1.15.6": + folder: all + "1.15.2": + folder: all + "1.15.0": + folder: all diff --git a/recipes/meson/all/conanfile.py b/recipes/meson/all/conanfile.py index 695f07b..fa18f7a 100644 --- a/recipes/meson/all/conanfile.py +++ b/recipes/meson/all/conanfile.py @@ -26,7 +26,7 @@ class MesonConan(ConanFile): # if self.conf.get("tools.meson.mesontoolchain:backend", default="ninja", check_type=str) == "ninja": # # Meson requires >=1.8.2 as of 1.5 # # https://github.com/mesonbuild/meson/blob/b6b634ad33e5ca9ad4a9d6139dba4244847cc0e8/mesonbuild/backend/ninjabackend.py#L625 -# self.requires("ninja/[>=1.10.2 <2]") +# self.requires("ninja/[>=1.10.2 <2]") def package_id(self): self.info.clear() diff --git a/recipes/qt/5.x.x/conanfile.py b/recipes/qt/5.x.x/conanfile.py index 5a32150..0e04721 100644 --- a/recipes/qt/5.x.x/conanfile.py +++ b/recipes/qt/5.x.x/conanfile.py @@ -502,7 +502,7 @@ class QtConan(ConanFile): def source(self): get(self, **self.conan_data["sources"][self.version], - strip_root=True, destination="qt5") + strip_root=True, destination="qt5") apply_conandata_patches(self) for f in ["renderer", os.path.join("renderer", "core"), os.path.join("renderer", "platform")]: @@ -902,8 +902,8 @@ Prefix = ..""") if not self.options.get_safe(module): rmdir(self, os.path.join(self.package_folder, "licenses", module)) rmdir(self, os.path.join(self.package_folder, "lib", "pkgconfig")) - for mask in ["Find*.cmake", "*Config.cmake", "*-config.cmake"]: - rm(self, mask, self.package_folder, recursive=True) + #for mask in ["Find*.cmake", "*Config.cmake", "*-config.cmake"]: + # rm(self, mask, self.package_folder, recursive=True) rm(self, "*.la*", os.path.join(self.package_folder, "lib"), recursive=True) rm(self, "*.pdb*", os.path.join(self.package_folder, "lib"), recursive=True) rm(self, "*.pdb", os.path.join(self.package_folder, "bin"), recursive=True) @@ -913,103 +913,14 @@ Prefix = ..""") for fl in glob.glob(os.path.join(self.package_folder, "lib", "*Qt5Bootstrap*")): os.remove(fl) - for m in os.listdir(os.path.join(self.package_folder, "lib", "cmake")): - module = os.path.join(self.package_folder, "lib", "cmake", m, f"{m}Macros.cmake") - if not os.path.isfile(module): - rmdir(self, os.path.join(self.package_folder, "lib", "cmake", m)) + #for m in os.listdir(os.path.join(self.package_folder, "lib", "cmake")): + # module = os.path.join(self.package_folder, "lib", "cmake", m, f"{m}Macros.cmake") + # if not os.path.isfile(module): + # rmdir(self, os.path.join(self.package_folder, "lib", "cmake", m)) extension = "" if self._settings_build.os == "Windows": extension = ".exe" - v = Version(self.version) - filecontents = textwrap.dedent(f"""\ - set(QT_CMAKE_EXPORT_NAMESPACE Qt5) - set(QT_VERSION_MAJOR {v.major}) - set(QT_VERSION_MINOR {v.minor}) - set(QT_VERSION_PATCH {v.patch}) - """) - targets = {} - targets["Core"] = ["moc", "rcc", "qmake"] - targets["DBus"] = ["qdbuscpp2xml", "qdbusxml2cpp"] - if self.options.widgets: - targets["Widgets"] = ["uic"] - if self.options.qttools: - targets["Tools"] = ["qhelpgenerator", "qcollectiongenerator", "qdoc", "qtattributionsscanner"] - targets[""] = ["lconvert", "lrelease", "lupdate"] - if self.options.qtremoteobjects: - targets["RemoteObjects"] = ["repc"] - if self.options.qtscxml: - targets["Scxml"] = ["qscxmlc"] - for namespace, targets in targets.items(): - for target in targets: - filecontents += textwrap.dedent("""\ - if(NOT TARGET ${{QT_CMAKE_EXPORT_NAMESPACE}}::{target}) - add_executable(${{QT_CMAKE_EXPORT_NAMESPACE}}::{target} IMPORTED) - set_target_properties(${{QT_CMAKE_EXPORT_NAMESPACE}}::{target} PROPERTIES IMPORTED_LOCATION ${{CMAKE_CURRENT_LIST_DIR}}/../../../bin/{target}{ext}) - set(Qt5{namespace}_{uppercase_target}_EXECUTABLE ${{QT_CMAKE_EXPORT_NAMESPACE}}::{target}) - endif() - """.format(target=target, ext=extension, namespace=namespace, uppercase_target=target.upper())) - - if self.settings.os == "Windows": - filecontents += textwrap.dedent("""\ - set(Qt5Core_QTMAIN_LIBRARIES Qt5::WinMain) - if (NOT Qt5_NO_LINK_QTMAIN) - set(_isExe $,EXECUTABLE>) - set(_isWin32 $>) - set(_isNotExcluded $>>) - set(_isPolicyNEW $) - set_property(TARGET Qt5::Core APPEND PROPERTY - INTERFACE_LINK_LIBRARIES - $<$:Qt5::WinMain> - ) - unset(_isExe) - unset(_isWin32) - unset(_isNotExcluded) - unset(_isPolicyNEW) - endif() - """) - - filecontents += textwrap.dedent(f"""\ - if(NOT DEFINED QT_DEFAULT_MAJOR_VERSION) - set(QT_DEFAULT_MAJOR_VERSION {v.major}) - endif() - """) - filecontents += 'set(CMAKE_AUTOMOC_MACRO_NAMES "Q_OBJECT" "Q_GADGET" "Q_GADGET_EXPORT" "Q_NAMESPACE" "Q_NAMESPACE_EXPORT")\n' - save(self, os.path.join(self.package_folder, self._cmake_core_extras_file), filecontents) - - def _create_private_module(module, dependencies=[]): - if "Core" not in dependencies: - dependencies.append("Core") - dependencies_string = ';'.join(f'Qt5::{dependency}' for dependency in dependencies) - contents = textwrap.dedent("""\ - if(NOT TARGET Qt5::{0}Private) - add_library(Qt5::{0}Private INTERFACE IMPORTED) - set_target_properties(Qt5::{0}Private PROPERTIES - INTERFACE_INCLUDE_DIRECTORIES "${{CMAKE_CURRENT_LIST_DIR}}/../../../include/Qt{0}/{1};${{CMAKE_CURRENT_LIST_DIR}}/../../../include/Qt{0}/{1}/Qt{0}" - INTERFACE_LINK_LIBRARIES "{2}" - ) - - add_library(Qt::{0}Private INTERFACE IMPORTED) - set_target_properties(Qt::{0}Private PROPERTIES - INTERFACE_LINK_LIBRARIES "Qt5::{0}Private" - _qt_is_versionless_target "TRUE" - ) - endif()""".format(module, self.version, dependencies_string)) - - save(self, os.path.join(self.package_folder, self._cmake_qt5_private_file(module)), contents) - - _create_private_module("Core") - - if self.options.gui: - _create_private_module("Gui", ["CorePrivate", "Gui"]) - - if self.options.widgets: - _create_private_module("Widgets", ["CorePrivate", "Gui", "GuiPrivate"]) - - if self.options.qtdeclarative: - _create_private_module("Qml", ["CorePrivate", "Qml"]) - if self.options.gui: - _create_private_module("Quick", ["CorePrivate", "GuiPrivate", "QmlPrivate", "Quick"]) def package_info(self): self.cpp_info.set_property("cmake_file_name", "Qt5") @@ -1017,561 +928,86 @@ Prefix = ..""") self.cpp_info.names["cmake_find_package"] = "Qt5" self.cpp_info.names["cmake_find_package_multi"] = "Qt5" + self.cpp_info.builddirs = [os.path.join(self.package_folder, "lib", "cmake", "Qt5")] - build_modules = {} - - def _add_build_module(component, module): - if component not in build_modules: - build_modules[component] = [] - build_modules[component].append(module) - self.cpp_info.components[component].build_modules["cmake_find_package"].append(module) - self.cpp_info.components[component].build_modules["cmake_find_package_multi"].append(module) - - libsuffix = "" - if self.settings.os == "Android": - libsuffix = f"_{android_abi(self)}" - if not self.options.multiconfiguration: - if self.settings.build_type == "Debug": - if self.settings.os == "Windows" and is_msvc(self): - libsuffix = "d" - elif is_apple_os(self): - libsuffix = "_debug" - - def _get_corrected_reqs(requires): - reqs = [] - for r in requires: - if "::" in r: - corrected_req = r - else: - corrected_req = f"qt{r}" - assert corrected_req in self.cpp_info.components, f"{corrected_req} required but not yet present in self.cpp_info.components" - reqs.append(corrected_req) - return reqs - - def _create_module(module, requires=[], has_include_dir=True): - componentname = f"qt{module}" - assert componentname not in self.cpp_info.components, f"Module {module} already present in self.cpp_info.components" - self.cpp_info.components[componentname].set_property("cmake_target_name", f"Qt5::{module}") - self.cpp_info.components[componentname].set_property("pkg_config_name", f"Qt5{module}") - self.cpp_info.components[componentname].names["cmake_find_package"] = module - self.cpp_info.components[componentname].names["cmake_find_package_multi"] = module - if module.endswith("Private"): - libname = module[:-7] - else: - libname = module - self.cpp_info.components[componentname].libs = [f"Qt5{libname}{libsuffix}"] - if has_include_dir: - self.cpp_info.components[componentname].includedirs = ["include", os.path.join("include", f"Qt{module}")] - define = module.upper() - if define == "TEST": - define = "TESTLIB" - elif define == "XCBQPA": - define = "XCB_QPA_LIB" - elif define.endswith("SUPPORT"): - define = define.replace("SUPPORT", "_SUPPORT") - self.cpp_info.components[componentname].defines = [f"QT_{define}_LIB"] - if module != "Core" and "Core" not in requires: - requires.append("Core") - self.cpp_info.components[componentname].requires = _get_corrected_reqs(requires) - - def _create_plugin(pluginname, libname, plugintype, requires): - componentname = f"qt{pluginname}" - assert componentname not in self.cpp_info.components, f"Plugin {pluginname} already present in self.cpp_info.components" - self.cpp_info.components[componentname].set_property("cmake_target_name", f"Qt5::{pluginname}") - self.cpp_info.components[componentname].names["cmake_find_package"] = pluginname - self.cpp_info.components[componentname].names["cmake_find_package_multi"] = pluginname - if not self.options.shared: - self.cpp_info.components[componentname].libs = [libname + libsuffix] - self.cpp_info.components[componentname].libdirs = [os.path.join("plugins", plugintype)] - self.cpp_info.components[componentname].includedirs = [] - if "Core" not in requires: - requires.append("Core") - self.cpp_info.components[componentname].requires = _get_corrected_reqs(requires) - - core_reqs = ["zlib::zlib"] + self.cpp_info.requires = ["zlib::zlib"] if self.options.with_pcre2: - core_reqs.append("pcre2::pcre2") + self.cpp_info.requires.append("pcre2::pcre2") if self.options.with_doubleconversion: - core_reqs.append("double-conversion::double-conversion") + self.cpp_info.requires.append("double-conversion::double-conversion") if self.options.get_safe("with_icu", False): - core_reqs.append("icu::icu") + self.cpp_info.requires.append("icu::icu") if self.options.with_zstd: - core_reqs.append("zstd::zstd") + self.cpp_info.requires.append("zstd::zstd") if self.options.with_glib: - core_reqs.append("glib::glib-2.0") - - _create_module("Core", core_reqs) - pkg_config_vars = [ - "host_bins=${prefix}/bin", - "exec_prefix=${prefix}", - ] - self.cpp_info.components["qtCore"].set_property("pkg_config_custom_content", "\n".join(pkg_config_vars)) - - if self.settings.os == "Windows": - module = "WinMain" - componentname = f"qt{module}" - self.cpp_info.components[componentname].set_property("cmake_target_name", f"Qt5::{module}") - self.cpp_info.components[componentname].names["cmake_find_package"] = module - self.cpp_info.components[componentname].names["cmake_find_package_multi"] = module - self.cpp_info.components[componentname].libs = [f"qtmain{libsuffix}"] - self.cpp_info.components[componentname].includedirs = [] - self.cpp_info.components[componentname].defines = [] - + self.cpp_info.requires.append("glib::glib-2.0") if self.options.with_dbus: - _create_module("DBus", ["dbus::dbus"]) + self.cpp_info.requires.append("dbus::dbus") if self.options.gui: - gui_reqs = [] - if self.options.with_dbus: - gui_reqs.append("DBus") if self.options.with_freetype: - gui_reqs.append("freetype::freetype") + self.cpp_info.requires.append("freetype::freetype") if self.options.with_libpng: - gui_reqs.append("libpng::libpng") + self.cpp_info.requires.append("libpng::libpng") if self.options.get_safe("with_fontconfig", False): - gui_reqs.append("fontconfig::fontconfig") + self.cpp_info.requires.append("fontconfig::fontconfig") if self.settings.os in ["Linux", "FreeBSD"]: if self.options.qtwayland or self.options.get_safe("with_x11", False): - gui_reqs.append("xkbcommon::xkbcommon") + self.cpp_info.requires.append("xkbcommon::xkbcommon") if self.options.get_safe("with_x11", False): - gui_reqs.append("xorg::xorg") + self.cpp_info.requires.append("xorg::xorg") if self.options.get_safe("opengl", "no") != "no": - gui_reqs.append("opengl::opengl") + self.cpp_info.requires.append("opengl::opengl") if self.options.get_safe("with_vulkan", False): - gui_reqs.append("vulkan-loader::vulkan-loader") + self.cpp_info.requires.append("vulkan-loader::vulkan-loader") if is_apple_os(self): - gui_reqs.append("moltenvk::moltenvk") + self.cpp_info.requires.append("moltenvk::moltenvk") if self.options.with_harfbuzz: - gui_reqs.append("harfbuzz::harfbuzz") + self.cpp_info.requires.append("harfbuzz::harfbuzz") if self.options.with_libjpeg == "libjpeg-turbo": - gui_reqs.append("libjpeg-turbo::libjpeg-turbo") + self.cpp_info.requires.append("libjpeg-turbo::libjpeg-turbo") if self.options.with_libjpeg == "libjpeg": - gui_reqs.append("libjpeg::libjpeg") + self.cpp_info.requires.append("libjpeg::libjpeg") if self.options.with_md4c: - gui_reqs.append("md4c::md4c") - _create_module("Gui", gui_reqs) - _add_build_module("qtGui", self._cmake_qt5_private_file("Gui")) - - event_dispatcher_reqs = ["Core", "Gui"] + self.cpp_info.requires.append("md4c::md4c") if self.options.with_glib: - event_dispatcher_reqs.append("glib::glib") - _create_module("EventDispatcherSupport", event_dispatcher_reqs) - _create_module("FontDatabaseSupport", ["Core", "Gui"]) - if self.settings.os == "Windows": - self.cpp_info.components["qtFontDatabaseSupport"].system_libs.extend(["advapi32", "ole32", "user32", "gdi32"]) - elif is_apple_os(self): - self.cpp_info.components["qtFontDatabaseSupport"].frameworks.extend(["CoreFoundation", "CoreGraphics", "CoreText","Foundation"]) - self.cpp_info.components["qtFontDatabaseSupport"].frameworks.append("AppKit" if self.settings.os == "Macos" else "UIKit") + self.cpp_info.requires.append("glib::glib") if self.options.get_safe("with_fontconfig"): - self.cpp_info.components["qtFontDatabaseSupport"].requires.append("fontconfig::fontconfig") + self.cpp_info.requires.append("fontconfig::fontconfig") if self.options.get_safe("with_freetype"): - self.cpp_info.components["qtFontDatabaseSupport"].requires.append("freetype::freetype") - - - _create_module("ThemeSupport", ["Core", "Gui"]) - _create_module("AccessibilitySupport", ["Core", "Gui"]) - if self.options.get_safe("with_vulkan"): - _create_module("VulkanSupport", ["Core", "Gui"]) - - if self.options.widgets: - _create_module("Widgets", ["Gui"]) - _add_build_module("qtWidgets", self._cmake_qt5_private_file("Widgets")) - if self.settings.os not in ["iOS", "watchOS", "tvOS"]: - _create_module("PrintSupport", ["Gui", "Widgets"]) - if self.settings.os == "Macos" and not self.options.shared: - self.cpp_info.components["qtPrintSupport"].system_libs.append("cups") - - if is_apple_os(self): - _create_module("ClipboardSupport", ["Core", "Gui"]) - self.cpp_info.components["qtClipboardSupport"].frameworks = ["ImageIO"] - if self.settings.os == "Macos": - self.cpp_info.components["qtClipboardSupport"].frameworks.append("AppKit") - _create_module("GraphicsSupport", ["Core", "Gui"]) - - if self.settings.os in ["Android", "Emscripten"]: - _create_module("EglSupport", ["Core", "Gui"]) - - if self.settings.os == "Windows": - windows_reqs = ["Core", "Gui"] - windows_reqs.extend(["EventDispatcherSupport", "FontDatabaseSupport", "ThemeSupport", "AccessibilitySupport"]) - _create_module("WindowsUIAutomationSupport", ["Core", "Gui"]) - windows_reqs.append("WindowsUIAutomationSupport") - if self.options.get_safe("with_vulkan"): - windows_reqs.append("VulkanSupport") - _create_plugin("QWindowsIntegrationPlugin", "qwindows", "platforms", windows_reqs) - _create_plugin("QWindowsVistaStylePlugin", "qwindowsvistastyle", "styles", windows_reqs) - self.cpp_info.components["qtQWindowsIntegrationPlugin"].system_libs = ["advapi32", "dwmapi", "gdi32", "imm32", - "ole32", "oleaut32", "shell32", "shlwapi", "user32", "winmm", "winspool", "wtsapi32"] - elif self.settings.os == "Android": - android_reqs = ["Core", "Gui", "EventDispatcherSupport", "AccessibilitySupport", "FontDatabaseSupport", "EglSupport"] - if self.options.get_safe("with_vulkan"): - android_reqs.append("VulkanSupport") - _create_plugin("QAndroidIntegrationPlugin", "qtforandroid", "platforms", android_reqs) - self.cpp_info.components["qtQAndroidIntegrationPlugin"].system_libs = ["android", "jnigraphics"] - elif self.settings.os == "Macos": - cocoa_reqs = ["Core", "Gui", "ClipboardSupport", "ThemeSupport", "FontDatabaseSupport", "GraphicsSupport", "AccessibilitySupport"] - if self.options.get_safe("with_vulkan"): - cocoa_reqs.append("VulkanSupport") - if self.options.widgets: - cocoa_reqs.append("PrintSupport") - _create_plugin("QCocoaIntegrationPlugin", "qcocoa", "platforms", cocoa_reqs) - _create_plugin("QMacStylePlugin", "qmacstyle", "styles", cocoa_reqs) - self.cpp_info.components["QCocoaIntegrationPlugin"].frameworks = ["AppKit", "Carbon", "CoreServices", "CoreVideo", - "IOKit", "IOSurface", "Metal", "QuartzCore"] - elif self.settings.os in ["iOS", "tvOS"]: - _create_plugin("QIOSIntegrationPlugin", "qios", "platforms", ["ClipboardSupport", "FontDatabaseSupport", "GraphicsSupport"]) - self.cpp_info.components["QIOSIntegrationPlugin"].frameworks = ["AudioToolbox", "Foundation", "Metal", - "MobileCoreServices", "OpenGLES", "QuartzCore", "UIKit"] - elif self.settings.os == "watchOS": - _create_plugin("QMinimalIntegrationPlugin", "qminimal", "platforms", ["EventDispatcherSupport", "FontDatabaseSupport"]) - elif self.settings.os == "Emscripten": - _create_plugin("QWasmIntegrationPlugin", "qwasm", "platforms", ["Core", "Gui", "EventDispatcherSupport", "FontDatabaseSupport", "EglSupport"]) - elif self.settings.os in ["Linux", "FreeBSD"]: - service_support_reqs = ["Core", "Gui"] - if self.options.with_dbus: - service_support_reqs.append("DBus") - _create_module("ServiceSupport", service_support_reqs) - _create_module("EdidSupport") + self.cpp_info.requires.append("freetype::freetype") + if self.settings.os in ["Linux", "FreeBSD"]: + self.cpp_info.requires.append("xkbcommon::libxkbcommon-x11") if self.options.get_safe("with_x11", False): - _create_module("XkbCommonSupport", ["Core", "Gui", "xkbcommon::libxkbcommon-x11"]) - xcb_qpa_reqs = ["Core", "Gui", "ServiceSupport", "ThemeSupport", "FontDatabaseSupport", "EdidSupport", "XkbCommonSupport", "xorg::xorg"] - elif self.options.qtwayland: - _create_module("XkbCommonSupport", ["Core", "Gui", "xkbcommon::libxkbcommon"]) + self.cpp_info.requires.append("xorg::xorg") if self.options.with_dbus and self.options.with_atspi: - _create_module("LinuxAccessibilitySupport", ["Core", "DBus", "Gui", "AccessibilitySupport", "at-spi2-core::at-spi2-core"]) - xcb_qpa_reqs.append("LinuxAccessibilitySupport") - if self.options.get_safe("with_vulkan"): - xcb_qpa_reqs.append("VulkanSupport") - if self.options.get_safe("with_x11", False): - _create_module("XcbQpa", xcb_qpa_reqs, has_include_dir=False) - _create_plugin("QXcbIntegrationPlugin", "qxcb", "platforms", ["Core", "Gui", "XcbQpa"]) - + self.cpp_info.requires.append("at-spi2-core::at-spi2-core") if self.options.with_sqlite3: - _create_plugin("QSQLiteDriverPlugin", "qsqlite", "sqldrivers", ["sqlite3::sqlite3"]) + self.cpp_info.requires.append("sqlite3::sqlite3") if self.options.with_pq: - _create_plugin("QPSQLDriverPlugin", "qsqlpsql", "sqldrivers", ["libpq::libpq"]) + self.cpp_info.requires.append("libpq::libpq") if self.options.get_safe("with_mysql", False): - _create_plugin("QMySQLDriverPlugin", "qsqlmysql", "sqldrivers", ["libmysqlclient::libmysqlclient"]) + self.cpp_info.requires.append("libmysqlclient::libmysqlclient") if self.options.with_odbc: if self.settings.os != "Windows": - _create_plugin("QODBCDriverPlugin", "qsqlodbc", "sqldrivers", ["odbc::odbc"]) - networkReqs = [] + self.cpp_info.requires.append("odbc::odbc") if self.options.openssl: - networkReqs.append("openssl::openssl") + self.cpp_info.requires.append("openssl::openssl") if self.settings.os in ['Linux', 'FreeBSD'] and self.options.with_gssapi: - networkReqs.append("krb5::krb5-gssapi") - _create_module("Network", networkReqs) - _create_module("Sql") - _create_module("Test") - if self.options.get_safe("opengl", "no") != "no" and self.options.gui: - _create_module("OpenGL", ["Gui"]) - if self.options.widgets and self.options.get_safe("opengl", "no") != "no": - _create_module("OpenGLExtensions", ["Gui"]) - _create_module("Concurrent") - _create_module("Xml") - - if self.options.qtdeclarative: - _create_module("Qml", ["Network"]) - _add_build_module("qtQml", self._cmake_qt5_private_file("Qml")) - _create_module("QmlModels", ["Qml"]) - self.cpp_info.components["qtQmlImportScanner"].set_property("cmake_target_name", "Qt5::QmlImportScanner") - self.cpp_info.components["qtQmlImportScanner"].names["cmake_find_package"] = "QmlImportScanner" # this is an alias for Qml and there to integrate with existing consumers - self.cpp_info.components["qtQmlImportScanner"].names["cmake_find_package_multi"] = "QmlImportScanner" - self.cpp_info.components["qtQmlImportScanner"].requires = _get_corrected_reqs(["Qml"]) - if self.options.gui: - _create_module("Quick", ["Gui", "Qml", "QmlModels"]) - _add_build_module("qtQuick", self._cmake_qt5_private_file("Quick")) - if self.options.widgets: - _create_module("QuickWidgets", ["Gui", "Qml", "Quick", "Widgets"]) - _create_module("QuickShapes", ["Gui", "Qml", "Quick"]) - _create_module("QmlWorkerScript", ["Qml"]) - _create_module("QuickTest", ["Test"]) - - if self.options.qttools and self.options.gui and self.options.widgets: - self.cpp_info.components["qtLinguistTools"].set_property("cmake_target_name", "Qt5::LinguistTools") - self.cpp_info.components["qtLinguistTools"].names["cmake_find_package"] = "LinguistTools" - self.cpp_info.components["qtLinguistTools"].names["cmake_find_package_multi"] = "LinguistTools" - _create_module("UiPlugin", ["Gui", "Widgets"]) - self.cpp_info.components["qtUiPlugin"].libs = [] # this is a collection of abstract classes, so this is header-only - self.cpp_info.components["qtUiPlugin"].libdirs = [] - _create_module("UiTools", ["UiPlugin", "Gui", "Widgets"]) - if not cross_building(self): - _create_module("Designer", ["Gui", "UiPlugin", "Widgets", "Xml"]) - _create_module("Help", ["Gui", "Sql", "Widgets"]) - - if self.options.qtquick3d and self.options.gui: - _create_module("Quick3DUtils", ["Gui"]) - _create_module("Quick3DRender", ["Quick3DUtils", "Quick"]) - _create_module("Quick3DAssetImport", ["Gui", "Qml", "Quick3DRender", "Quick3DUtils"]) - _create_module("Quick3DRuntimeRender", ["Quick3DRender", "Quick3DAssetImport", "Quick3DUtils"]) - _create_module("Quick3D", ["Gui", "Qml", "Quick", "Quick3DRuntimeRender"]) - - if self.options.qtquickcontrols2 and self.options.gui: - _create_module("QuickControls2", ["Gui", "Quick"]) - _create_module("QuickTemplates2", ["Gui", "Quick"]) - - if self.options.qtsvg and self.options.gui: - _create_module("Svg", ["Gui"]) - _create_plugin("QSvgIconPlugin", "qsvgicon", "iconengines", []) - _create_plugin("QSvgPlugin", "qsvg", "imageformats", []) - - if self.options.qtwayland and self.options.gui: - _create_module("WaylandClient", ["Gui", "wayland::wayland-client"]) - _create_module("WaylandCompositor", ["Gui", "wayland::wayland-server"]) - - if self.options.qtlocation: - _create_module("Positioning") - _create_module("Location", ["Gui", "Quick"]) - _create_plugin("QGeoServiceProviderFactoryMapbox", "qtgeoservices_mapbox", "geoservices", []) - _create_plugin("QGeoServiceProviderFactoryMapboxGL", "qtgeoservices_mapboxgl", "geoservices", []) - _create_plugin("GeoServiceProviderFactoryEsri", "qtgeoservices_esri", "geoservices", []) - _create_plugin("QGeoServiceProviderFactoryItemsOverlay", "qtgeoservices_itemsoverlay", "geoservices", []) - _create_plugin("QGeoServiceProviderFactoryNokia", "qtgeoservices_nokia", "geoservices", []) - _create_plugin("QGeoServiceProviderFactoryOsm", "qtgeoservices_osm", "geoservices", []) - _create_plugin("QGeoPositionInfoSourceFactoryGeoclue", "qtposition_geoclue", "position", []) - _create_plugin("QGeoPositionInfoSourceFactoryGeoclue2", "qtposition_geoclue2", "position", []) - _create_plugin("QGeoPositionInfoSourceFactoryPoll", "qtposition_positionpoll", "position", []) - _create_plugin("QGeoPositionInfoSourceFactorySerialNmea", "qtposition_serialnmea", "position", []) - - if self.options.qtwebchannel: - _create_module("WebChannel", ["Qml"]) - - if self.options.qtwebengine: - webenginereqs = ["Gui", "Quick", "WebChannel", "Positioning"] - if self.settings.os in ["Linux", "FreeBSD"]: - webenginereqs.extend(["expat::expat", "opus::libopus", "xorg-proto::xorg-proto", "libxshmfence::libxshmfence", \ - "nss::nss", "libdrm::libdrm", "egl::egl"]) - _create_module("WebEngineCore", webenginereqs) - if self.settings.os != "Windows": - self.cpp_info.components["WebEngineCore"].system_libs.append("resolv") - _create_module("WebEngine", ["WebEngineCore"]) - _create_module("WebEngineWidgets", ["WebEngineCore", "Quick", "PrintSupport", "Widgets", "Gui", "Network"]) - - if self.options.qtserialport: - _create_module("SerialPort") - - if self.options.qtserialbus: - _create_module("SerialBus", ["SerialPort"] if self.options.get_safe("qtserialport") else []) - _create_plugin("PassThruCanBusPlugin", "qtpassthrucanbus", "canbus", []) - _create_plugin("PeakCanBusPlugin", "qtpeakcanbus", "canbus", []) - _create_plugin("SocketCanBusPlugin", "qtsocketcanbus", "canbus", []) - _create_plugin("TinyCanBusPlugin", "qttinycanbus", "canbus", []) - _create_plugin("VirtualCanBusPlugin", "qtvirtualcanbus", "canbus", []) - - if self.options.qtsensors: - _create_module("Sensors") - _create_plugin("genericSensorPlugin", "qtsensors_generic", "sensors", []) - _create_plugin("IIOSensorProxySensorPlugin", "qtsensors_iio-sensor-proxy", "sensors", []) - if self.settings.os == "Linux": - _create_plugin("LinuxSensorPlugin", "qtsensors_linuxsys", "sensors", []) - _create_plugin("QtSensorGesturePlugin", "qtsensorgestures_plugin", "sensorgestures", []) - _create_plugin("QShakeSensorGesturePlugin", "qtsensorgestures_shakeplugin", "sensorgestures", []) - - if self.options.qtscxml: - _create_module("Scxml", ["Qml"]) - - if self.options.qtpurchasing: - _create_module("Purchasing") - - if self.options.qtcharts: - _create_module("Charts", ["Gui", "Widgets"]) - - if self.options.qtgamepad: - _create_module("Gamepad", ["Gui"]) - if self.settings.os == "Linux": - _create_plugin("QEvdevGamepadBackendPlugin", "evdevgamepad", "gamepads", []) - if self.settings.os == "Macos": - _create_plugin("QDarwinGamepadBackendPlugin", "darwingamepad", "gamepads", []) - if self.settings.os =="Windows": - _create_plugin("QXInputGamepadBackendPlugin", "xinputgamepad", "gamepads", []) - - if self.options.qt3d: - _create_module("3DCore", ["Gui", "Network"]) - - _create_module("3DRender", ["3DCore"]) - _create_plugin("DefaultGeometryLoaderPlugin", "defaultgeometryloader", "geometryloaders", []) - _create_plugin("GLTFGeometryLoaderPlugin", "gltfgeometryloader", "geometryloaders", []) - _create_plugin("GLTFSceneExportPlugin", "gltfsceneexport", "sceneparsers", []) - _create_plugin("GLTFSceneImportPlugin", "gltfsceneimport", "sceneparsers", []) - _create_plugin("OpenGLRendererPlugin", "openglrenderer", "renderers", []) - _create_plugin("Scene2DPlugin", "scene2d", "renderplugins", []) - - _create_module("3DAnimation", ["3DRender", "3DCore", "Gui"]) - _create_module("3DInput", ["3DCore", "Gui"] + (["Gamepad"] if self.options.qtgamepad else [])) - _create_module("3DLogic", ["3DCore", "Gui"]) - _create_module("3DExtras", ["3DRender", "3DInput", "3DLogic", "3DCore", "Gui"]) - _create_module("3DQuick", ["3DCore", "Quick", "Gui", "Qml"]) - _create_module("3DQuickAnimation", ["3DAnimation", "3DRender", "3DQuick", "3DCore", "Gui", "Qml"]) - _create_module("3DQuickExtras", ["3DExtras", "3DInput", "3DQuick", "3DRender", "3DLogic", "3DCore", "Gui", "Qml"]) - _create_module("3DQuickInput", ["3DInput", "3DQuick", "3DCore", "Gui", "Qml"]) - _create_module("3DQuickRender", ["3DRender", "3DQuick", "3DCore", "Gui", "Qml"]) - _create_module("3DQuickScene2D", ["3DRender", "3DQuick", "3DCore", "Gui", "Qml"]) - + self.cpp_info.requires.append("krb5::krb5-gssapi") if self.options.qtmultimedia: - multimedia_reqs = ["Network", "Gui"] if self.options.get_safe("with_libalsa", False): - multimedia_reqs.append("libalsa::libalsa") + self.cpp_info.requires.append("libalsa::libalsa") if self.options.with_openal: - multimedia_reqs.append("openal-soft::openal-soft") + self.cpp_info.requires.append("openal-soft::openal-soft") if self.options.get_safe("with_pulseaudio", False): - multimedia_reqs.append("pulseaudio::pulse") - _create_module("Multimedia", multimedia_reqs) - _create_module("MultimediaWidgets", ["Multimedia", "Widgets", "Gui"]) - if self.options.qtdeclarative and self.options.gui: - _create_module("MultimediaQuick", ["Multimedia", "Quick"]) - _create_plugin("QM3uPlaylistPlugin", "qtmultimedia_m3u", "playlistformats", []) - if self.options.with_gstreamer: - _create_module("MultimediaGstTools", ["Multimedia", "MultimediaWidgets", "Gui", "gst-plugins-base::gst-plugins-base"]) - _create_plugin("QGstreamerAudioDecoderServicePlugin", "gstaudiodecoder", "mediaservice", []) - _create_plugin("QGstreamerCaptureServicePlugin", "gstmediacapture", "mediaservice", []) - _create_plugin("QGstreamerPlayerServicePlugin", "gstmediaplayer", "mediaservice", []) - if self.settings.os == "Linux": - if self.options.with_gstreamer: - _create_plugin("CameraBinServicePlugin", "gstcamerabin", "mediaservice", []) - if self.options.get_safe("with_libalsa", False): - _create_plugin("QAlsaPlugin", "qtaudio_alsa", "audio", []) - if self.settings.os == "Windows": - _create_plugin("AudioCaptureServicePlugin", "qtmedia_audioengine", "mediaservice", []) - _create_plugin("DSServicePlugin", "dsengine", "mediaservice", []) - _create_plugin("QWindowsAudioPlugin", "qtaudio_windows", "audio", []) - if self.settings.os == "Macos": - _create_plugin("AudioCaptureServicePlugin", "qtmedia_audioengine", "mediaservice", []) - _create_plugin("AVFMediaPlayerServicePlugin", "qavfmediaplayer", "mediaservice", []) - _create_plugin("AVFServicePlugin", "qavfcamera", "mediaservice", []) - _create_plugin("CoreAudioPlugin", "qtaudio_coreaudio", "audio", []) - - if self.options.qtwebsockets: - _create_module("WebSockets", ["Network"]) - - if self.options.qtconnectivity: - _create_module("Bluetooth", ["Network"]) - _create_module("Nfc", []) - - if self.options.qtdatavis3d: - _create_module("DataVisualization", ["Gui"]) - - if self.options.qtnetworkauth: - _create_module("NetworkAuth", ["Network"]) - - if self.settings.os != "Windows": - self.cpp_info.components["qtCore"].cxxflags.append("-fPIC") - - if self.options.get_safe("qtx11extras"): - _create_module("X11Extras") - - if self.options.qtremoteobjects: - _create_module("RemoteObjects") - - if self.options.get_safe("qtwinextras"): - _create_module("WinExtras") - - if self.options.get_safe("qtmacextras"): - _create_module("MacExtras") - - if self.options.qtxmlpatterns: - _create_module("XmlPatterns", ["Network"]) - - if self.options.get_safe("qtactiveqt"): - _create_module("AxBase", ["Gui", "Widgets"]) - self.cpp_info.components["qtAxBase"].includedirs = ["include", os.path.join("include", "ActiveQt")] - self.cpp_info.components["qtAxBase"].system_libs.extend(["ole32", "oleaut32", "user32", "gdi32", "advapi32"]) - if self.settings.compiler == "gcc": - self.cpp_info.components["qtAxBase"].system_libs.append("uuid") - _create_module("AxContainer", ["Core", "Gui", "Widgets", "AxBase"]) - self.cpp_info.components["qtAxContainer"].includedirs = [os.path.join("include", "ActiveQt")] - _create_module("AxServer", ["Core", "Gui", "Widgets", "AxBase"]) - self.cpp_info.components["qtAxServer"].includedirs = [os.path.join("include", "ActiveQt")] - self.cpp_info.components["qtAxServer"].system_libs.append("shell32") - - if self.options.qtscript: - _create_module("Script") - if self.options.widgets: - _create_module("ScriptTools", ["Gui", "Widgets", "Script"]) - - if self.options.qtandroidextras: - _create_module("AndroidExtras") - - if self.options.qtwebview: - _create_module("WebView", ["Gui", "Quick"]) - - if self.options.qtvirtualkeyboard: - _create_module("VirtualKeyboard", ["Qml", "Quick", "Gui"]) - - if self.options.qtspeech: - _create_module("TextToSpeech") - - if not self.options.shared: - if self.settings.os == "Windows": - self.cpp_info.components["qtCore"].system_libs.append("version") # qtcore requires "GetFileVersionInfoW" and "VerQueryValueW" which are in "Version.lib" library - self.cpp_info.components["qtCore"].system_libs.append("winmm") # qtcore requires "__imp_timeSetEvent" which is in "Winmm.lib" library - self.cpp_info.components["qtCore"].system_libs.append("netapi32") # qtcore requires "NetApiBufferFree" which is in "Netapi32.lib" library - self.cpp_info.components["qtCore"].system_libs.append("userenv") # qtcore requires "__imp_GetUserProfileDirectoryW " which is in "UserEnv.Lib" library - self.cpp_info.components["qtCore"].system_libs.append("ws2_32") # qtcore requires "WSAStartup " which is in "Ws2_32.Lib" library - self.cpp_info.components["qtNetwork"].system_libs.append("dnsapi") # qtnetwork from qtbase requires "DnsFree" which is in "Dnsapi.lib" library - self.cpp_info.components["qtNetwork"].system_libs.append("iphlpapi") - if self.options.widgets: - self.cpp_info.components["qtWidgets"].system_libs.append("uxtheme") - self.cpp_info.components["qtWidgets"].system_libs.append("dwmapi") - if self.options.get_safe("qtwinextras"): - self.cpp_info.components["qtWinExtras"].system_libs.append("dwmapi") # qtwinextras requires "DwmGetColorizationColor" which is in "dwmapi.lib" library - - if is_apple_os(self): - self.cpp_info.components["qtCore"].frameworks.append("CoreServices" if self.settings.os == "Macos" else "MobileCoreServices") - self.cpp_info.components["qtNetwork"].frameworks.append("SystemConfiguration") - if self.options.with_gssapi: - self.cpp_info.components["qtNetwork"].frameworks.append("GSS") - if not self.options.openssl: # with SecureTransport - self.cpp_info.components["qtNetwork"].frameworks.append("Security") - if self.settings.os == "Macos" or (self.settings.os == "iOS" and Version(self.settings.compiler.version) >= "14.0"): - self.cpp_info.components["qtCore"].frameworks.append("IOKit") # qtcore requires "_IORegistryEntryCreateCFProperty", "_IOServiceGetMatchingService" and much more which are in "IOKit" framework - if self.settings.os == "Macos": - self.cpp_info.components["qtCore"].frameworks.append("Cocoa") # qtcore requires "_OBJC_CLASS_$_NSApplication" and more, which are in "Cocoa" framework - self.cpp_info.components["qtCore"].frameworks.append("Security") # qtcore requires "_SecRequirementCreateWithString" and more, which are in "Security" framework - - self.cpp_info.components["qtCore"].builddirs.append(os.path.join("bin")) - _add_build_module("qtCore", self._cmake_core_extras_file) - _add_build_module("qtCore", self._cmake_qt5_private_file("Core")) - - for m in os.listdir(os.path.join("lib", "cmake")): - module = os.path.join("lib", "cmake", m, f"{m}Macros.cmake") - component_name = m.replace("Qt5", "qt") - if os.path.isfile(module): - _add_build_module(component_name, module) - self.cpp_info.components[component_name].builddirs.append(os.path.join("lib", "cmake", m)) - - qt5core_config_extras_mkspec_dir_cmake = load(self, - os.path.join("lib", "cmake", "Qt5Core", "Qt5CoreConfigExtrasMkspecDir.cmake")) - mkspecs_dir_begin = qt5core_config_extras_mkspec_dir_cmake.find("mkspecs/") - mkspecs_dir_end = qt5core_config_extras_mkspec_dir_cmake.find("\"", mkspecs_dir_begin) - mkspecs_path = qt5core_config_extras_mkspec_dir_cmake[mkspecs_dir_begin:mkspecs_dir_end] - assert os.path.exists(mkspecs_path) - self.cpp_info.components["qtCore"].includedirs.append(mkspecs_path) - - objects_dirs = glob.glob(os.path.join(self.package_folder, "lib", "objects-*/")) - for object_dir in objects_dirs: - for m in os.listdir(object_dir): - component = "qt" + m[:m.find("_")] - if component not in self.cpp_info.components: - continue - submodules_dir = os.path.join(object_dir, m) - for sub_dir in os.listdir(submodules_dir): - submodule_dir = os.path.join(submodules_dir, sub_dir) - obj_files = [os.path.join(submodule_dir, file) for file in os.listdir(submodule_dir)] - self.cpp_info.components[component].exelinkflags.extend(obj_files) - self.cpp_info.components[component].sharedlinkflags.extend(obj_files) - - build_modules_list = [] - - def _add_build_modules_for_component(component): - for req in self.cpp_info.components[component].requires: - if "::" in req: # not a qt component - continue - _add_build_modules_for_component(req) - build_modules_list.extend(build_modules.pop(component, [])) - - for c in self.cpp_info.components: - _add_build_modules_for_component(c) - - self.cpp_info.set_property("cmake_build_modules", build_modules_list) + self.cpp_info.requires.append("pulseaudio::pulse") + self.cpp_info.requires.append("libalsa::libalsa") + if self.options.qtwebengine: + if self.settings.os in ["Linux", "FreeBSD"]: + self.cpp_info.extend(["expat::expat", "opus::libopus", "xorg-proto::xorg-proto", "libxshmfence::libxshmfence", \ + "nss::nss", "libdrm::libdrm", "egl::egl"]) + if self.options.qtwayland and self.options.gui: + self.cpp_info.requires.extend(["wayland::wayland-client", "wayland:wayland-server"]) @staticmethod def _remove_duplicate(l): diff --git a/recipes/xkeyboard-config/all/test_package/build-release/conan/conanbuild.sh b/recipes/xkeyboard-config/all/test_package/build-release/conan/conanbuild.sh deleted file mode 100644 index dbc249c..0000000 --- a/recipes/xkeyboard-config/all/test_package/build-release/conan/conanbuild.sh +++ /dev/null @@ -1 +0,0 @@ -. "/home/aleksandr.vodyanov/Documents/Avroid/Conan/conan_recipes.git/recipes/xkeyboard-config/all/test_package/build-release/conan/conanbuildenv-release-x86_64.sh" \ No newline at end of file diff --git a/recipes/xkeyboard-config/all/test_package/build-release/conan/conanbuildenv-release-x86_64.sh b/recipes/xkeyboard-config/all/test_package/build-release/conan/conanbuildenv-release-x86_64.sh deleted file mode 100644 index 6271db2..0000000 --- a/recipes/xkeyboard-config/all/test_package/build-release/conan/conanbuildenv-release-x86_64.sh +++ /dev/null @@ -1,18 +0,0 @@ -script_folder="/home/aleksandr.vodyanov/Documents/Avroid/Conan/conan_recipes.git/recipes/xkeyboard-config/all/test_package/build-release/conan" -echo "echo Restoring environment" > "$script_folder/deactivate_conanbuildenv-release-x86_64.sh" -for v in CXX CC CONAN_V2_MODE -do - is_defined="true" - value=$(printenv $v) || is_defined="" || true - if [ -n "$value" ] || [ -n "$is_defined" ] - then - echo export "$v='$value'" >> "$script_folder/deactivate_conanbuildenv-release-x86_64.sh" - else - echo unset $v >> "$script_folder/deactivate_conanbuildenv-release-x86_64.sh" - fi -done - - -export CXX="x86_64-linux-gnu-g++-12" -export CC="x86_64-linux-gnu-gcc-12" -export CONAN_V2_MODE="true" \ No newline at end of file diff --git a/recipes/xkeyboard-config/all/test_package/build-release/conan/conanrun.sh b/recipes/xkeyboard-config/all/test_package/build-release/conan/conanrun.sh deleted file mode 100644 index 4bfca3d..0000000 --- a/recipes/xkeyboard-config/all/test_package/build-release/conan/conanrun.sh +++ /dev/null @@ -1 +0,0 @@ -. "/home/aleksandr.vodyanov/Documents/Avroid/Conan/conan_recipes.git/recipes/xkeyboard-config/all/test_package/build-release/conan/conanrunenv-release-x86_64.sh" \ No newline at end of file diff --git a/recipes/xkeyboard-config/all/test_package/build-release/conan/conanrunenv-release-x86_64.sh b/recipes/xkeyboard-config/all/test_package/build-release/conan/conanrunenv-release-x86_64.sh deleted file mode 100644 index 1d961d9..0000000 --- a/recipes/xkeyboard-config/all/test_package/build-release/conan/conanrunenv-release-x86_64.sh +++ /dev/null @@ -1,14 +0,0 @@ -script_folder="/home/aleksandr.vodyanov/Documents/Avroid/Conan/conan_recipes.git/recipes/xkeyboard-config/all/test_package/build-release/conan" -echo "echo Restoring environment" > "$script_folder/deactivate_conanrunenv-release-x86_64.sh" -for v in -do - is_defined="true" - value=$(printenv $v) || is_defined="" || true - if [ -n "$value" ] || [ -n "$is_defined" ] - then - echo export "$v='$value'" >> "$script_folder/deactivate_conanrunenv-release-x86_64.sh" - else - echo unset $v >> "$script_folder/deactivate_conanrunenv-release-x86_64.sh" - fi -done - diff --git a/recipes/xkeyboard-config/all/test_package/build-release/conan/deactivate_conanbuild.sh b/recipes/xkeyboard-config/all/test_package/build-release/conan/deactivate_conanbuild.sh deleted file mode 100644 index d06f522..0000000 --- a/recipes/xkeyboard-config/all/test_package/build-release/conan/deactivate_conanbuild.sh +++ /dev/null @@ -1 +0,0 @@ -. "/home/aleksandr.vodyanov/Documents/Avroid/Conan/conan_recipes.git/recipes/xkeyboard-config/all/test_package/build-release/conan/deactivate_conanbuildenv-release-x86_64.sh" \ No newline at end of file diff --git a/recipes/xkeyboard-config/all/test_package/build-release/conan/deactivate_conanbuildenv-release-x86_64.sh b/recipes/xkeyboard-config/all/test_package/build-release/conan/deactivate_conanbuildenv-release-x86_64.sh deleted file mode 100644 index 40fee45..0000000 --- a/recipes/xkeyboard-config/all/test_package/build-release/conan/deactivate_conanbuildenv-release-x86_64.sh +++ /dev/null @@ -1,4 +0,0 @@ -echo Restoring environment -unset CXX -unset CC -unset CONAN_V2_MODE diff --git a/recipes/xkeyboard-config/all/test_package/build-release/conan/deactivate_conanrun.sh b/recipes/xkeyboard-config/all/test_package/build-release/conan/deactivate_conanrun.sh deleted file mode 100644 index 1c01f0f..0000000 --- a/recipes/xkeyboard-config/all/test_package/build-release/conan/deactivate_conanrun.sh +++ /dev/null @@ -1 +0,0 @@ -. "/home/aleksandr.vodyanov/Documents/Avroid/Conan/conan_recipes.git/recipes/xkeyboard-config/all/test_package/build-release/conan/deactivate_conanrunenv-release-x86_64.sh" \ No newline at end of file diff --git a/recipes/xkeyboard-config/all/test_package/build-release/conan/xkeyboard-config.pc b/recipes/xkeyboard-config/all/test_package/build-release/conan/xkeyboard-config.pc deleted file mode 100644 index d38b587..0000000 --- a/recipes/xkeyboard-config/all/test_package/build-release/conan/xkeyboard-config.pc +++ /dev/null @@ -1,8 +0,0 @@ -prefix=/home/aleksandr.vodyanov/.conan2/p/b/xkeybfb432262e432a/p -bindir=${prefix}/bin -xkb_base=/usr/share/X11/xkb -datadir=/usr/share - -Name: xkeyboard-config -Description: Conan package: xkeyboard-config -Version: system