diff --git a/check-mir b/check-mir new file mode 100755 index 0000000..aad9f8b --- /dev/null +++ b/check-mir @@ -0,0 +1,101 @@ +#!/usr/bin/python +# +# Check components of build dependencies and warn about universe/multiverse +# ones, for a package destined for main/restricted +# +# Copyright (C) 2011 Canonical +# +# Authors: +# Martin Pitt +# +# This program is free software; you can redistribute it and/or modify it under +# the terms of the GNU General Public License as published by the Free Software +# Foundation; version 3. +# +# 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 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 apt, sys, os.path + +apt_cache = apt.Cache() + +def check_support(pkgname, alt=False): + '''Check if pkgname is in main or restricted. + + This prints messages if a package is not in main/restricted, or only + partially (i. e. source in main, but binary in universe). + ''' + if alt: + prefix = ' ... alternative ' + pkgname + else: + prefix = ' * ' + pkgname + + try: + pkg = apt_cache[pkgname] + except KeyError: + print >> sys.stderr, pkgname, 'does not exist (pure virtual?)' + return False + + section = pkg.candidate.section + if section.startswith('universe') or section.startswith('multiverse'): + # check if the source package is in main and thus will only need binary + # promotion + sr = apt.apt_pkg.SourceRecords() + if not sr.lookup(pkg.candidate.source_name): + print >> sys.stderr, 'ERROR: Cannot lookup source package for', pkg.name + print prefix, 'package is in', section.split('/')[0] + return False + src = apt.apt_pkg.TagSection(sr.record) + if src['Section'].startswith('universe') or src['Section'].startswith('multiverse'): + print prefix, 'binary and source package is in', section.split('/')[0] + return False + else: + print prefix, 'is in', section.split('/')[0] + ', but its source', pkg.candidate.source_name, 'is already in main; file an ubuntu-archive bug for promoting the current preferred alternative' + return True + + if alt: + print prefix, 'is already in main; consider preferring it' + + return True + + +# +# main +# + +if not os.path.exists('debian/control'): + print >> sys.stderr, 'debian/control not found. You need to run this tool in a source package directory' + sys.exit(1) + +print 'Checking support status of build dependencies...' + +# get build dependencies from debian/control +control=apt.apt_pkg.TagFile(open('debian/control')) +control.next() + + +any_unsupported = False + +for field in ('Build-Depends', 'Build-Depends-Indep'): + if field not in control.section: + continue + for or_group in apt.apt_pkg.parse_src_depends(control.section[field]): + pkgname = or_group[0][0] + if not check_support(pkgname): + # check non-preferred alternatives + for altpkg in or_group[1:]: + if check_support(altpkg[0], alt=True): + break + else: + any_unsupported = True + +if any_unsupported: + print '\nPlease check https://wiki.ubuntu.com/MainInclusionProcess if this source package needs to get into in main/restricted, or reconsider if the package really needs above dependencies.' +else: + print 'All build dependencies are supported in main or restricted.' diff --git a/debian/changelog b/debian/changelog index cbbcd4c..bea2526 100644 --- a/debian/changelog +++ b/debian/changelog @@ -54,6 +54,11 @@ ubuntu-dev-tools (0.109) UNRELEASED; urgency=low * add "add-patch" that provides the non-interactive version of edit-patch + [ Martin Pitt ] + * Add check-mir script: Check components of build dependencies and warn + about universe/multiverse ones, for a package destined for + main/restricted. Add doc/check-mir.1 manpage. + -- Stefano Rivera Tue, 04 Jan 2011 22:23:20 +0200 ubuntu-dev-tools (0.108) experimental; urgency=low diff --git a/doc/check-mir.1 b/doc/check-mir.1 new file mode 100644 index 0000000..8c5a131 --- /dev/null +++ b/doc/check-mir.1 @@ -0,0 +1,18 @@ +.TH check\-mir "1" "13 January 2011" "ubuntu-dev-tools" +.SH NAME +check\-mir \- check support status of dependencies + +.SH SYNOPSIS +.B check\-build\-deps + +.SH DESCRIPTION +This script checks if any of a package's build or binary dependencies is +in universe/multiverse. If the source package is destined for Ubuntu main or +restricted, these either need to be eliminated or need to be promoted to main, +following \fBhttps://wiki.ubuntu.com/MainInclusionProcess\fR. + +There are no options, just run it in a source package directory. + +.SH AUTHOR +.B check\-mir +was written by Martin Pitt . diff --git a/setup.py b/setup.py index d084c81..5e1117b 100755 --- a/setup.py +++ b/setup.py @@ -15,6 +15,7 @@ if os.path.exists(changelog): scripts = ['404main', 'backportpackage', + 'check-mir', 'check-symbols', 'dch-repeat', 'dgetlp',