forked from pool/rpmlint
89 lines
2.8 KiB
Python
89 lines
2.8 KiB
Python
# vim:sw=4:et
|
|
#############################################################################
|
|
# File : KMPPolicyCheck.py
|
|
# Package : rpmlint
|
|
# Author : Dirk Mueller
|
|
# Purpose : Verify that kmp's have proper dependencies
|
|
#############################################################################
|
|
|
|
from Filter import *
|
|
import AbstractCheck
|
|
import rpm
|
|
import re
|
|
import commands
|
|
import stat
|
|
import Config
|
|
import os
|
|
import string
|
|
import Pkg
|
|
|
|
from BinariesCheck import BinaryInfo
|
|
|
|
class KMPPolicyCheck(AbstractCheck.AbstractCheck):
|
|
def __init__(self):
|
|
self.map = []
|
|
AbstractCheck.AbstractCheck.__init__(self, "KMPPolicyCheck")
|
|
|
|
def check(self, pkg):
|
|
if pkg.isSource() or pkg.name.find('-kmp-') < 0:
|
|
return
|
|
|
|
pkg_requires = set(map(lambda x: string.split(x[0],'(')[0], pkg.requires()))
|
|
pkg_conflicts = set(map(lambda x: string.split(x[0],'(')[0], pkg.conflicts()))
|
|
|
|
kernel_flavour="kernel-" + pkg.name.partition('-kmp-')[2]
|
|
|
|
# verify that Requires: kernel_flavour is present
|
|
have_requires=False
|
|
for r in pkg_requires:
|
|
if r == kernel_flavour:
|
|
have_requires = True
|
|
break
|
|
|
|
if not have_requires:
|
|
printError(pkg, 'suse-policy-kmp-missing-requires', kernel_flavour)
|
|
|
|
# verify that exactly one enhances on the kernel flavor is present
|
|
if len(pkg.enhances()) > 1:
|
|
printError(pkg, 'suse-policy-kmp-excessive-enhances', str(pkg.enhances()))
|
|
elif len(pkg.enhances()) < 1:
|
|
printError(pkg, 'suse-policy-kmp-missing-enhances', kernel_flavour)
|
|
|
|
# check that only modalias supplements are present
|
|
have_only_modalias=True
|
|
have_modalias=False
|
|
have_proper_suppl=False
|
|
for s in pkg.supplements():
|
|
if s[0].startswith('modalias('):
|
|
have_modalias = True
|
|
continue
|
|
if s[0].startswith('packageand(-%s:' % (kernel_flavour)):
|
|
have_proper_suppl = True
|
|
|
|
printWarning(pkg, 'suse-policy-kmp-excessive-supplements', s[0])
|
|
have_only_modalias = False
|
|
|
|
if not have_modalias and not have_proper_suppl:
|
|
printError(pkg, 'suse-policy-kmp-missing-supplements')
|
|
|
|
check=KMPPolicyCheck()
|
|
|
|
if Config.info:
|
|
addDetails(
|
|
'suse-policy-kmp-excessive-supplements',
|
|
""" """,
|
|
'suse-policy-kmp-missing-supplements',
|
|
"""If your kmp modules match some specific hardware, i.e. if the
|
|
"find-supplements" search done at the end of a build creates some
|
|
modalias() dependencies, you don't need to do anything. If your
|
|
module is hardware independent, you need to add the dependencies manually.
|
|
|
|
To do this, add a preamble (-p) to your %suse_kernel_module_package
|
|
macro. the file should look like this:
|
|
|
|
Enhances: kernel-%1
|
|
Supplements: packageand(kernel-%1:%{-n*})
|
|
|
|
""",
|
|
)
|