summaryrefslogtreecommitdiff
path: root/conanfile.py
diff options
context:
space:
mode:
authorIikka Eklund <iikka.eklund@qt.io>2021-04-14 12:40:15 +0300
committerIikka Eklund <iikka.eklund@qt.io>2021-06-21 11:04:53 +0300
commit6a1632ca6638f94fdf00ecf21f158625db15dd35 (patch)
treeccc17fe27e97d861b98de50c324474f85e05ac0e /conanfile.py
parent8758e3c6717d91ddaafbc791ff7c8f63d5ac3b71 (diff)
downloadqtsvg-6a1632ca6638f94fdf00ecf21f158625db15dd35.tar.gz
Add conanfile.py to support builds with Conan
The build recipe uses the qtbase's 'bin/qt-configure-module' script directly which is recommended when building other Qt modules ouside the qtbase's -prefix. The recipe uses functionality from qt-conan-common Conan package via 'python_requires'. The recipe sets it's version number based on QT_REPO_MODULE_VERSION and QT_REPO_MODULE_PRERELEASE_VERSION_SEGMENT in .cmake.conf file. The dependency to qtbase is declared using semantic versioning so that it will pick the latest available prerelease or final version of the major.minor.patch. Task-number: QTBUG-94382 Pick-to: 6.2 Change-Id: I454255080e08d334c30cf7080a3acd2ff613dbff Reviewed-by: Toni Saario <toni.saario@qt.io>
Diffstat (limited to 'conanfile.py')
-rw-r--r--conanfile.py87
1 files changed, 87 insertions, 0 deletions
diff --git a/conanfile.py b/conanfile.py
new file mode 100644
index 0000000..b733d3b
--- /dev/null
+++ b/conanfile.py
@@ -0,0 +1,87 @@
+#############################################################################
+##
+## 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 os
+import re
+from functools import lru_cache
+from pathlib import Path
+
+
+@lru_cache(maxsize=8)
+def _parse_qt_version_by_key(key: str) -> str:
+ with open(Path(Path(__file__).parent.resolve() / ".cmake.conf")) as f:
+ ret = [m.group(1) for m in [re.search(r"{0} .*\"(.*)\"".format(key), f.read())] if m]
+ return ret.pop() if ret else ""
+
+
+class QtSvg(ConanFile):
+ name = "qtsvg"
+ license = "LGPL-3.0-only, Commercial Qt License Agreement"
+ author = "The Qt Company <https://www.qt.io/contact-us>"
+ url = "https://code.qt.io/cgit/qt/qtsvg.git/"
+ description = (
+ "Scalable Vector Graphics (SVG) is an XML-based language for describing "
+ "two-dimensional vector graphics. Qt provides classes for rendering and "
+ "displaying SVG drawings in widgets and on other paint devices."
+ )
+ topics = ("qt", "qt6", "qtsvg", "svg")
+ settings = "os", "compiler", "arch", "build_type"
+ exports = ".cmake.conf" # for referencing the version number and prerelease tag
+ exports_sources = "*", "!conan*.*"
+ # use commit ID as the RREV (recipe revision) if this is exported from .git repository
+ revision_mode = "scm" if Path(Path(__file__).parent.resolve() / ".git").exists() else "hash"
+ python_requires = f"qt-conan-common/{_parse_qt_version_by_key('QT_REPO_MODULE_VERSION')[0:3]}@qt/everywhere"
+
+ def set_version(self):
+ _ver = _parse_qt_version_by_key("QT_REPO_MODULE_VERSION")
+ _prerelease = _parse_qt_version_by_key("QT_REPO_MODULE_PRERELEASE_VERSION_SEGMENT")
+ self.version = _ver + "-" + _prerelease if _prerelease else _ver
+
+ def requirements(self):
+ _version = _parse_qt_version_by_key("QT_REPO_MODULE_VERSION")
+ # will match latest prerelase of final major.minor.patch
+ self.requires(f"qtbase/[<={_version}, include_prerelease=True]@{self.user}/{self.channel}")
+
+ def build(self):
+ self.python_requires["qt-conan-common"].module.build_leaf_qt_module(self)
+
+ def package(self):
+ cmd = ["cmake", "--install", "."]
+ self.run(" ".join(cmd))
+
+ def package_info(self):
+ self.python_requires["qt-conan-common"].module.package_info(self)
+
+ def package_id(self):
+ self.info.requires.package_revision_mode()
+
+ def deploy(self):
+ self.copy("*") # copy from current package
+ if not os.environ.get("QT_CONAN_INSTALL_SKIP_DEPS"):
+ self.copy_deps("*") # copy from dependencies