From 0c41217fa1eb53848213f8e6bb242c5159106053 Mon Sep 17 00:00:00 2001 From: Ivan Solovev Date: Mon, 26 Apr 2021 12:35:20 +0200 Subject: QtPositioning: add conan support This patch adds conan support to QtPositioning part of the qtlocation repo. Since QtLocation is not yet ready for Qt 6, this should work fine. Later we will need a way to figure out, how to support two modules in one repo. The recipe uses Conan's supported way to inherit from a given base class via 'python_requires_extend'. The qt-conan-common package implements a base class for Qt leaf module recipes. The build steps in leaf modules are mostly identical so it makes sense to put those in the base class. Dependencies are read by the base class from the 'dependencies.yaml' which is the same file the CI system uses. This recipe defines an option which should not be passed to 'qt-configure-module(.bat)' thus it implements the abstract 'is_qt_module_feature()' from the base class. The base class reads the option(s) and default option(s) via 'get_qt_leaf_module_options()' and 'get_qt_leaf_module_default_options()' which are merged by the base class into the base options defined by the base class. Task-number: QTBUG-90800 Change-Id: Ie302d9566b2a49a80fe8dd251eb43d5f5af6aa0e Reviewed-by: Jani Heikkinen Reviewed-by: Toni Saario (cherry picked from commit 60bbe4249eff95cafd1d77228d3c81d1c0664f3d) Reviewed-by: Qt Cherry-pick Bot --- .cmake.conf | 1 + conanfile.py | 78 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 79 insertions(+) create mode 100644 conanfile.py diff --git a/.cmake.conf b/.cmake.conf index 4e73b3d6..4aa8eb1f 100644 --- a/.cmake.conf +++ b/.cmake.conf @@ -1 +1,2 @@ set(QT_REPO_MODULE_VERSION "6.2.0") +set(QT_REPO_MODULE_PRERELEASE_VERSION_SEGMENT "alpha1") diff --git a/conanfile.py b/conanfile.py new file mode 100644 index 00000000..569fd5e4 --- /dev/null +++ b/conanfile.py @@ -0,0 +1,78 @@ +############################################################################# +## +## Copyright (C) 2021 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the release tools of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +from conans import ConanFile +import re +from pathlib import Path +from typing import List, Dict, Any + + +def _parse_qt_version_by_key(key: str) -> str: + with open(Path(__file__).parent.resolve() / ".cmake.conf") as f: + m = re.search(fr'{key} .*"(.*)"', f.read()) + return m.group(1) if m else "" + + +def _get_qt_minor_version() -> str: + return ".".join(_parse_qt_version_by_key("QT_REPO_MODULE_VERSION").split(".")[:2]) + + +class QtLocation(ConanFile): + name = "qtlocation" + license = "LGPL-3.0, GPL-2.0+, Commercial Qt License Agreement" + author = "The Qt Company " + url = "https://code.qt.io/cgit/qt/qtlocation.git" + description = "Qt Positioning support." + topics = "qt", "qt6", "positioning" + settings = "os", "compiler", "arch", "build_type" + # for referencing the version number and prerelease tag and dependencies info + exports = ".cmake.conf", "dependencies.yaml" + exports_sources = "*", "!conan*.*" + python_requires = f"qt-conan-common/{_get_qt_minor_version()}@qt/everywhere" + python_requires_extend = "qt-conan-common.QtLeafModule" + + def get_qt_leaf_module_options(self) -> Dict[str, Any]: + """Implements abstractmethod from qt-conan-common.QtLeafModule""" + return {"force_nmea_plugin": ["yes", "no", None]} + + def get_qt_leaf_module_default_options(self) -> Dict[str, Any]: + """Implements abstractmethod from qt-conan-common.QtLeafModule""" + return {"force_nmea_plugin": "yes"} + + def override_qt_requirements(self) -> List[str]: + """Implements abstractmethod from qt-conan-common.QtLeafModule""" + requirements = ["qtbase", "qtdeclarative"] + if self.options.force_nmea_plugin: + requirements.append("qtserialport") + return requirements + + def is_qt_module_feature(self, option_name: str) -> bool: + """Implements abstractmethod from qt-conan-common.QtLeafModule""" + if option_name == "force_nmea_plugin": + return False + return True -- cgit v1.2.1