diff options
author | CoprDistGit <infra@openeuler.org> | 2025-01-14 07:54:42 +0000 |
---|---|---|
committer | CoprDistGit <infra@openeuler.org> | 2025-01-14 07:54:42 +0000 |
commit | d3eceee6ae075747e3c27f3b2bb0b09cdcfccc8e (patch) | |
tree | 9a001373672e2e210562650207dc30192248c7b1 /cmake.prov | |
parent | 999559bbfcccffdc1fe59da6edfc2c2c073fc633 (diff) |
automatic import of cmakeopeneuler24.09
Diffstat (limited to 'cmake.prov')
-rw-r--r-- | cmake.prov | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/cmake.prov b/cmake.prov new file mode 100644 index 0000000..58d3522 --- /dev/null +++ b/cmake.prov @@ -0,0 +1,82 @@ +#!/usr/bin/python3 +# -*- coding:utf-8 -*- +# +# Copyright (C) 2015 Daniel Vrátil <dvratil@redhat.com> +# Copyright (C) 2017 Daniel Vrátil <dvratil@fedoraproject.org> +# +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU Library General Public License as +# published by the Free Software Foundation; either version 2 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU Library General Public +# License along with this program; if not, write to the +# Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# + +import sys +import re +import glob + +class CMakeParser: + def __init__(self, filelist = None): + if filelist == None: + filelist = sys.stdin + + paths = map(lambda x: x.rstrip(), filelist.readlines()) + for path in paths: + modulePath, cmakeModule, lowercase = self.parseCmakeModuleConfig(path) + if modulePath and cmakeModule: + version = self.resolveCMakeModuleVersion(modulePath, cmakeModule, lowercase) + + if version: + string = "cmake(" + cmakeModule + ") = " + version + else: + string = "cmake(" + cmakeModule + ")" + if string == string.lower(): + print(string) + else: + # Temporarily print both variants to satisfy requires + # by the old version of this generator which made mistakes + print(string) + print(string.lower()) + + + def parseCmakeModuleConfig(self, configFile): + paths = configFile.rsplit("/", 3) + + modulePath = "%s/cmake/%s" % (paths[0], paths[2]) + cfgFile = paths[3] + if cfgFile.endswith("Config.cmake"): + return (modulePath, cfgFile[0:-len("Config.cmake")], False) + elif cfgFile.endswith("-config.cmake"): + return (modulePath, cfgFile[0:-len("-config.cmake")], True) + else: + return (None, None, False) + + def resolveCMakeModuleVersion(self, modulePath, cmakeModule, lowercase): + versionFile = ("%s/%s-config-version.cmake" if lowercase else "%s/%sConfigVersion.cmake") % (modulePath, cmakeModule) + try: + f = open(versionFile, 'r') + except: + return None + + for line in f: + line = line.strip() + + # set(PACKAGE_VERSION <version>) + version = re.match(r"^set[\ ]*\([\ ]*PACKAGE_VERSION[\ ]+[\"]*([0-9\.]+)[\"]*[\ ]*[.]*\)", line) + if version: + return version.groups(1)[0] + + return None + +if __name__ == "__main__": + parser = CMakeParser() |