From: "Michael Palimaka" <kensington@gentoo.org>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] proj/kde:master commit in: Documentation/maintainers/
Date: Thu, 28 Dec 2017 13:43:50 +0000 (UTC) [thread overview]
Message-ID: <1514468618.a050ce84b3cf99236a8d452c4688d5d5b69bc1ea.kensington@gentoo> (raw)
commit: a050ce84b3cf99236a8d452c4688d5d5b69bc1ea
Author: Michael Palimaka <kensington <AT> gentoo <DOT> org>
AuthorDate: Thu Dec 28 13:42:59 2017 +0000
Commit: Michael Palimaka <kensington <AT> gentoo <DOT> org>
CommitDate: Thu Dec 28 13:43:38 2017 +0000
URL: https://gitweb.gentoo.org/proj/kde.git/commit/?id=a050ce84
Documentation: add script to compare CMakeLists and ebuild dependencies
Documentation/maintainers/cmake_ebuild_check.py | 146 ++++++++++++++++++++++++
1 file changed, 146 insertions(+)
diff --git a/Documentation/maintainers/cmake_ebuild_check.py b/Documentation/maintainers/cmake_ebuild_check.py
new file mode 100755
index 0000000000..27786cf4cb
--- /dev/null
+++ b/Documentation/maintainers/cmake_ebuild_check.py
@@ -0,0 +1,146 @@
+#!/usr/bin/env python3
+#
+# Copyright (c) 2017 Michael Palimaka <kensington@gentoo.org>
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+import argparse
+import os
+import sys
+import subprocess
+import cmake_dep_check as cdc
+import portage
+
+
+def qatom(atom):
+ output = subprocess.check_output(['qatom', '--format', '%{CATEGORY}|%{PN}|%{PV}|%[PR]|%[SLOT]|%[pfx]|%[sfx]', atom])
+ return output.decode('utf-8').split('|')
+
+
+def get_cmake_deps(ebuild, repo):
+ cpv = qatom(ebuild)
+ settings = portage.config(config_root='/')
+
+ tmpdir = os.path.join(settings.get('PORTAGE_TMPDIR'), 'portage')
+ tmp_path = os.path.join(tmpdir, cpv[0], cpv[1] + '-' + cpv[2])
+ repo_path = portage.db['/']["vartree"].settings.repositories.treemap.get(repo)
+ ebuild_path = os.path.join(repo_path, cpv[0], cpv[1], cpv[1] + '-' + cpv[2] + '.ebuild')
+
+ subprocess.call(['ebuild', ebuild_path, 'clean', 'prepare'], stdout=subprocess.DEVNULL)
+
+ deps = cdc.getDeps(os.path.join(tmp_path))
+
+ subprocess.call(['ebuild', ebuild_path, 'clean'])
+
+ return deps
+
+
+def get_ebuild_deps(ebuild):
+ porttree = portage.db[portage.root]['porttree']
+ depstr = porttree.dbapi.aux_get(ebuild, ['DEPEND', 'RDEPEND', 'PDEPEND'])
+
+ depend = portage.dep.use_reduce(depstr[0], matchall=True, flat=True)
+ rdepend = portage.dep.use_reduce(depstr[1], matchall=True, flat=True)
+ pdepend = portage.dep.use_reduce(depstr[2], matchall=True, flat=True)
+
+ all_depend = set(depend + rdepend + pdepend)
+
+ return(all_depend)
+
+
+def get_ebuild_repo(ebuild):
+ porttree = portage.db[portage.root]['porttree']
+ repo = porttree.dbapi.aux_get(ebuild, ['repository'])
+
+ return repo[0]
+
+
+def clean_dep(dep):
+ if dep.startswith('!') or dep == '||':
+ return False
+
+ parts = qatom(dep)
+ cp = parts[0] + '/' + parts[1]
+
+ return cp
+
+
+def main():
+ parser = argparse.ArgumentParser(description='Compare CMakeLists.txt and ebuild dependencies')
+ parser.add_argument('ebuild', help='app-foo/bar-1.2.3', nargs=1)
+ parser.add_argument('--possible-bogus-ebuild', dest='bogusebuild', action='store_const', const=True, help='Show dependencies that appear in CMakeLists.txt but not the ebuild')
+
+ args = parser.parse_args()
+
+ ebuild = args.ebuild[0]
+
+ ebuild_deps = get_ebuild_deps(ebuild)
+ cmake_deps = get_cmake_deps(ebuild, get_ebuild_repo(ebuild))
+
+ cmake_deps_merged = []
+
+ for cmake, deps in cmake_deps.items():
+ for dep in deps:
+ if dep.startswith('ERROR'):
+ print(dep)
+ continue
+ if len(dep) == 0:
+ continue
+ clean = clean_dep(dep)
+ if clean:
+ cmake_deps_merged.append(clean)
+
+ ebuild_deps_clean = []
+
+ for dep in ebuild_deps:
+ clean = clean_dep(dep)
+ if clean:
+ ebuild_deps_clean.append(clean)
+
+ missing_cmake = []
+ missing_ebuild = []
+
+ for dep in cmake_deps_merged:
+ if dep not in ebuild_deps_clean:
+ missing_ebuild.append(dep)
+
+ for dep in ebuild_deps_clean:
+ if dep not in cmake_deps_merged:
+ missing_cmake.append(dep)
+
+ missing_cmake = sorted(set(missing_cmake))
+ missing_ebuild = sorted(set(missing_ebuild))
+
+ if len(missing_ebuild) > 0:
+ print('DEPENDENCIES IN CMAKELISTS BUT NOT EBUILD:')
+ print('==========================================')
+ for dep in missing_ebuild:
+ print(dep)
+ else:
+ print('Did not find any dependencies in CMakeLists that do not appear in the ebuild')
+
+ if len(missing_cmake) > 0 and args.bogusebuild is True:
+ print('DEPENDENCIES IN EBUILD BUT NOT IN CMAKELISTS:')
+ print('=============================================')
+ for dep in missing_cmake:
+ print(dep)
+
+
+if __name__ == '__main__':
+ sys.exit(main())
next reply other threads:[~2017-12-28 13:43 UTC|newest]
Thread overview: 118+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-12-28 13:43 Michael Palimaka [this message]
-- strict thread matches above, loose matches on Subject: below --
2025-02-18 21:05 [gentoo-commits] proj/kde:master commit in: Documentation/maintainers/ Andreas Sturmlechner
2024-10-04 22:21 Andreas Sturmlechner
2024-10-04 22:21 Andreas Sturmlechner
2024-10-01 18:09 Andreas Sturmlechner
2024-10-01 18:09 Andreas Sturmlechner
2024-09-07 12:00 Andreas Sturmlechner
2024-09-07 9:59 Andreas Sturmlechner
2024-09-02 9:31 Andreas Sturmlechner
2024-08-23 19:25 Andreas Sturmlechner
2024-02-24 2:30 Maciej Mrozowski
2024-01-13 16:39 Sam James
2024-01-07 19:10 Andreas Sturmlechner
2024-01-07 17:13 Andreas Sturmlechner
2023-12-16 22:02 Andreas Sturmlechner
2023-11-25 23:25 Andreas Sturmlechner
2023-07-24 13:32 Andreas Sturmlechner
2023-05-25 20:36 Andreas Sturmlechner
2023-05-25 20:36 Andreas Sturmlechner
2023-03-23 22:10 Andreas Sturmlechner
2023-02-07 10:45 Andreas Sturmlechner
2022-12-11 21:24 Andreas Sturmlechner
2022-12-11 17:24 Andreas Sturmlechner
2022-12-05 18:33 Andreas Sturmlechner
2022-11-08 19:27 Andreas Sturmlechner
2022-10-16 11:03 Andreas Sturmlechner
2022-10-03 8:51 Andreas Sturmlechner
2022-07-19 14:24 Andreas Sturmlechner
2022-05-03 22:31 Sam James
2021-08-11 6:10 Andreas Sturmlechner
2021-06-14 8:24 Andreas Sturmlechner
2021-01-24 19:57 Andreas Sturmlechner
2021-01-11 12:38 Andreas Sturmlechner
2020-11-25 18:25 Andreas Sturmlechner
2020-10-09 13:51 Andreas Sturmlechner
2020-06-22 19:53 Andreas Sturmlechner
2020-06-22 19:53 Andreas Sturmlechner
2020-06-22 18:21 Andreas Sturmlechner
2020-06-22 18:21 Andreas Sturmlechner
2020-06-01 10:03 Andreas Sturmlechner
2020-03-19 0:54 Andreas Sturmlechner
2020-03-15 22:27 Andreas Sturmlechner
2020-03-01 12:33 Andreas Sturmlechner
2019-12-23 20:52 Andreas Sturmlechner
2019-12-08 8:56 Andreas Sturmlechner
2018-10-18 21:00 Andreas Sturmlechner
2018-02-22 19:14 Andreas Sturmlechner
2018-02-06 10:15 Andreas Sturmlechner
2017-12-28 13:43 Michael Palimaka
2017-12-26 3:27 Michael Palimaka
2017-08-14 18:55 Andreas Sturmlechner
2017-06-14 19:37 Johannes Huber
2017-05-24 20:37 Andreas Sturmlechner
2016-12-04 20:31 Johannes Huber
2016-11-13 17:51 Michael Palimaka
2016-07-31 19:48 Michael Palimaka
2016-07-23 12:03 Johannes Huber
2016-07-13 6:16 Johannes Huber
2016-06-30 20:39 Johannes Huber
2016-06-30 20:39 Johannes Huber
2016-06-30 20:39 Johannes Huber
2016-06-30 20:39 Johannes Huber
2016-06-30 20:39 Johannes Huber
2016-06-06 21:47 Johannes Huber
2016-04-24 12:47 Johannes Huber
2016-04-20 14:48 Michael Palimaka
2016-03-08 16:01 Johannes Huber
2015-08-09 9:00 Johannes Huber
2015-08-09 8:40 Johannes Huber
2015-06-08 10:21 Manuel Rüger
2015-06-08 10:21 Manuel Rüger
2015-06-08 10:14 Manuel Rüger
2015-04-05 19:41 Michael Palimaka
2015-04-05 19:39 Michael Palimaka
2015-04-05 19:04 Michael Palimaka
2015-04-05 18:33 Michael Palimaka
2014-12-14 15:21 Michael Palimaka
2014-11-07 11:23 Manuel Rüger
2014-09-26 17:25 Michael Palimaka
2014-09-26 16:59 Michael Palimaka
2014-09-26 16:03 Michael Palimaka
2014-09-17 16:36 Michael Palimaka
2014-08-24 9:48 Michael Palimaka
2014-08-24 9:48 Michael Palimaka
2014-08-24 8:46 Michael Palimaka
2014-08-12 11:05 Michael Palimaka
2014-07-22 17:52 Michael Palimaka
2014-05-09 17:27 Michael Palimaka
2014-02-12 14:18 Michael Palimaka
2014-02-06 23:26 Andreas Hüttel
2014-01-18 4:34 Robin H. Johnson
2014-01-06 1:25 Chris Reffett
2014-01-06 1:25 Chris Reffett
2013-12-03 23:09 Johannes Huber
2013-11-23 2:05 Maciej Mrozowski
2013-10-09 3:51 Chris Reffett
2013-06-25 16:39 Marc Schiffbauer
2013-04-15 9:50 Michael Palimaka
2012-12-19 22:13 Marc Schiffbauer
2012-11-16 16:54 Alexey Shvetsov
2012-09-11 20:21 Michael Palimaka
2012-08-07 13:20 Johannes Huber
2012-08-02 10:24 Johannes Huber
2012-06-21 22:01 Andreas Hüttel
2012-06-02 22:10 Andreas Hüttel
2012-06-02 22:10 Andreas Hüttel
2012-04-10 12:59 Dennis Schridde
2012-03-25 13:12 Dennis Schridde
2012-01-20 13:24 Johannes Huber
2011-12-09 14:29 Johannes Huber
2011-11-19 23:29 Alexey Shvetsov
2011-11-02 22:30 Alexey Shvetsov
2011-06-06 9:29 Jorge Manuel B. S. Vicetto
2011-04-28 8:14 Andreas K. Huettel
2011-04-27 18:09 Maciej Mrozowski
2011-04-27 15:48 Andreas K. Huettel
2011-03-05 19:58 Jonathan Callen
2011-02-13 17:32 Dennis Schridde
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1514468618.a050ce84b3cf99236a8d452c4688d5d5b69bc1ea.kensington@gentoo \
--to=kensington@gentoo.org \
--cc=gentoo-commits@lists.gentoo.org \
--cc=gentoo-dev@lists.gentoo.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox