mirror_ubuntu-kernels/debian/scripts/module-check
Juerg Haefliger 8e7fa8fac2 UBUNTU: [Packaging] abi-check: Process modules.builtin
The previous commit introduced a new file modules.builtin that lists all
built-in modules. Take the content of that file into account during the ABI
check so that modules that changed from 'm' to 'y' don't result in a build
failure.

Signed-off-by: Juerg Haefliger <juergh@canonical.com>
Signed-off-by: Andrea Righi <andrea.righi@canonical.com>
2022-01-04 09:49:13 +01:00

114 lines
3.1 KiB
Python
Executable File

#!/usr/bin/python3
import os
import sys
if len(sys.argv) < 4 or len(sys.argv) > 5:
print('Usage: module-check <flavor> <prev_abidir> <abidir> [<skipmodule>]')
sys.exit(2)
flavor, prev_abidir, abidir = sys.argv[1:4] # pylint: disable=W0632
if len(sys.argv) > 4:
skipmodule = sys.argv[4]
else:
skipmodule = ''
print('II: Checking modules for {}...'.format(flavor), end='')
if ((os.path.exists('{}/ignore.modules'.format(prev_abidir)) or
os.path.exists('{}/{}.ignore.modules'.format(prev_abidir, flavor)))):
print('explicitly ignoring modules')
sys.exit(0)
curr_modules = '{}/{}.modules'.format(abidir, flavor)
prev_modules = '{}/{}.modules'.format(prev_abidir, flavor)
if not os.path.exists(curr_modules) or not os.path.exists(prev_modules):
print('previous or current modules file missing!')
print(' {}'.format(curr_modules))
print(' {}'.format(prev_modules))
sys.exit(0 if skipmodule else 1)
print()
modules = {}
modules_ignore = {}
missing = 0
new = 0
errors = 0
# See if we have any ignores
prev_modules_ignore = '{}/../modules.ignore'.format(prev_abidir)
if os.path.exists(prev_modules_ignore):
ignore = 0
with open(prev_modules_ignore) as fh:
for mod in fh:
mod = mod.strip()
if mod.startswith('#'):
continue
modules_ignore[mod] = 1
ignore += 1
print('read {} modules.'.format(ignore))
# Read new modules first
print(' reading new modules...', end='')
new_count = 0
for f in (curr_modules, curr_modules + '.builtin'):
if not os.path.exists(f):
continue
with open(f) as fh:
for mod in fh:
mod = mod.strip()
modules[mod] = 1
new_count += 1
print('read {} modules.'.format(new_count))
# Now the old modules, checking for missing ones
print(' reading old modules...', end='')
old_count = 0
for f in (prev_modules, prev_modules + '.builtin'):
if not os.path.exists(f):
continue
with open(f) as fh:
for mod in fh:
mod = mod.strip()
if mod not in modules:
if not missing:
print()
missing += 1
if mod not in modules_ignore:
print(' MISS: {}'.format(mod))
errors += 1
else:
print(' MISS: {} (ignored)'.format(mod))
else:
modules[mod] += 1
old_count += 1
# Check for new modules
for mod, cnt in modules.items():
if cnt < 2:
if not missing and not new:
print()
print(' NEW: {}'.format(mod))
new += 1
if new or missing:
print(' read {} modules : new({}) missing({})'.format(old_count, new, missing))
else:
print('read {} modules.'.format(old_count))
# Let's see where we stand...
if errors:
if skipmodule:
print('WW: Explicitly asked to ignore failures')
else:
print('EE: Missing modules')
sys.exit(1)
if new:
print('II: New modules')
else:
print('II: No new modules')
print('II: Done')
sys.exit(0)