diff options
author | Iikka Eklund <iikka.eklund@qt.io> | 2021-04-14 12:40:15 +0300 |
---|---|---|
committer | Iikka Eklund <iikka.eklund@qt.io> | 2021-06-21 11:04:53 +0300 |
commit | 6a1632ca6638f94fdf00ecf21f158625db15dd35 (patch) | |
tree | ccc17fe27e97d861b98de50c324474f85e05ac0e /conanfile.py | |
parent | 8758e3c6717d91ddaafbc791ff7c8f63d5ac3b71 (diff) | |
download | qtsvg-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.py | 87 |
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 |