summaryrefslogtreecommitdiff
path: root/rpmlint-checks-master/KMPPolicyCheck.py
blob: ce20f5ddf04d30721e4a6f9822f8c169fe01866c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
# 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

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
                continue

            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-missing-requires',
"""Make sure you have extended '%suse_kernel_module_package' by
 '-p %_sourcedir/preamble', a file named 'preamble' as source and there 
 specified 'Requires: kernel-%1'.
 """,
'suse-policy-kmp-excessive-enhances',
""" """,
'suse-policy-kmp-missing-enhances',
"""Make sure you have extended '%suse_kernel_module_package' by
 '-p %_sourcedir/preamble', a file named 'preamble' as source and there
 specified 'Enhances: kernel-%1'.
 """,
'suse-policy-kmp-excessive-supplements',
""" """,
'suse-policy-kmp-missing-supplements',
"""Make sure your 'BuildRequires:' include 'kernel-syms' and 'module-init-tools'
for proper dependencies to be built.
""",
)