summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIvan Solovev <ivan.solovev@qt.io>2021-04-26 12:35:20 +0200
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2021-08-26 12:21:21 +0000
commit0c41217fa1eb53848213f8e6bb242c5159106053 (patch)
treebab3ab4519da22cabdf52fc8a4b77b4e7a35b87a
parent8a8b007a4f25d7ee6ed693871256a420ea14c309 (diff)
downloadqtlocation-0c41217fa1eb53848213f8e6bb242c5159106053.tar.gz
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 <jani.heikkinen@qt.io> Reviewed-by: Toni Saario <toni.saario@qt.io> (cherry picked from commit 60bbe4249eff95cafd1d77228d3c81d1c0664f3d) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r--.cmake.conf1
-rw-r--r--conanfile.py78
2 files changed, 79 insertions, 0 deletions
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 <https://www.qt.io/contact-us>"
+ 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