ACK: [Unstable][PATCH] UBUNTU: [Packaging] Drop support of old config handling

Tim Gardner tim.gardner at canonical.com
Tue May 9 14:42:18 UTC 2023


On 5/9/23 8:29 AM, Juerg Haefliger wrote:
> All kernels and their derivatives have been migrated to the new annotations
> scheme by now so clean up the tree and drop the support of the old config
> handling.
> 
> Signed-off-by: Juerg Haefliger <juerg.haefliger at canonical.com>
> ---
>   debian/rules.d/1-maintainer.mk          |  22 ---
>   debian/rules.d/4-checks.mk              |  10 +-
>   debian/scripts/checks/config-check      | 163 ------------------
>   debian/scripts/misc/migrate-annotations |  35 ----
>   debian/scripts/misc/old-kernelconfig    | 218 ------------------------
>   5 files changed, 2 insertions(+), 446 deletions(-)
>   delete mode 100755 debian/scripts/checks/config-check
>   delete mode 100755 debian/scripts/misc/migrate-annotations
>   delete mode 100644 debian/scripts/misc/old-kernelconfig
> 
> diff --git a/debian/rules.d/1-maintainer.mk b/debian/rules.d/1-maintainer.mk
> index 6eded3eb4626..2b72ffc56e72 100644
> --- a/debian/rules.d/1-maintainer.mk
> +++ b/debian/rules.d/1-maintainer.mk
> @@ -10,7 +10,6 @@ help:
>   	@echo "  defaultconfigs      : Update core arch configs using defaults"
>   	@echo "  genconfigs          : Generate core arch configs in CONFIGS/*"
>   	@echo "  editconfigs         : Edit core arch configs"
> -	@echo "  migrateconfigs      : Automatically import old configs into annotations"
>   	@echo "  printchanges        : Print the current changelog entries (from git)"
>   	@echo "  insertchanges       : Insert current changelog entries (from git)"
>   	@echo "  startnewrelease     : Start a new changelog set"
> @@ -25,34 +24,13 @@ help:
>   printdebian:
>   	@echo "$(DEBIAN)"
>   
> -.PHONY: migrateconfigs
> -migrateconfigs:
> -ifneq ($(wildcard $(DEBIAN)/config/config.common.ubuntu),)
> -	dh_testdir
> -	conc_level=$(conc_level) $(SHELL) $(DROOT)/scripts/misc/old-kernelconfig genconfigs
> -	rm -rf build
> -	mkdir build
> -	mv $(DEBIAN)/config/annotations build/.annotations
> -	mv $(DEBIAN)/config/README.rst build/.README.rst 2>/dev/null || true
> -	rm -rf $(DEBIAN)/config
> -	mkdir -p $(DEBIAN)/config
> -	debian/scripts/misc/migrate-annotations < build/.annotations > $(DEBIAN)/config/annotations
> -	mv build/.README.rst $(DEBIAN)/config/README.rst 2>/dev/null || true
> -	rm -rf build
> -	kmake='$(kmake)' conc_level=$(conc_level) $(SHELL) $(DROOT)/scripts/misc/kernelconfig updateconfigs
> -endif
> -
>   configs-targets := updateconfigs defaultconfigs genconfigs editconfigs
>   
>   .PHONY: $(configs-targets)
>   $(configs-targets):
>   	dh_testdir
> -ifneq ($(wildcard $(DEBIAN)/config/config.common.ubuntu),)
> -	conc_level=$(conc_level) $(SHELL) $(DROOT)/scripts/misc/old-kernelconfig $@
> -else
>   	kmake='$(kmake)' skip_checks=$(do_skip_checks) conc_level=$(conc_level) \
>   		$(SHELL) $(DROOT)/scripts/misc/kernelconfig $@
> -endif
>   
>   .PHONY: printenv
>   printenv:
> diff --git a/debian/rules.d/4-checks.mk b/debian/rules.d/4-checks.mk
> index 2f7853fd51e5..34b343189de5 100644
> --- a/debian/rules.d/4-checks.mk
> +++ b/debian/rules.d/4-checks.mk
> @@ -31,12 +31,6 @@ checks-%: module-check-% module-signature-check-% abi-check-% retpoline-check-%
>   config-prepare-check-%: $(stampdir)/stamp-prepare-tree-%
>   	@echo Debug: $@
>   ifneq ($(do_skip_checks),true)
> -	if [ -e $(commonconfdir)/config.common.ubuntu ]; then \
> -		perl -f $(DROOT)/scripts/checks/config-check \
> -			$(builddir)/build-$*/.config "$(arch)" "$*" "$(commonconfdir)" \
> -			"$(skipconfig)" "$(do_enforce_all)"; \
> -	else \
> -		python3 $(DROOT)/scripts/misc/annotations -f $(commonconfdir)/annotations \
> -			--arch $(arch) --flavour $* --check $(builddir)/build-$*/.config; \
> -	fi
> +	python3 $(DROOT)/scripts/misc/annotations -f $(commonconfdir)/annotations \
> +		--arch $(arch) --flavour $* --check $(builddir)/build-$*/.config
>   endif
> diff --git a/debian/scripts/checks/config-check b/debian/scripts/checks/config-check
> deleted file mode 100755
> index 845a649db7af..000000000000
> --- a/debian/scripts/checks/config-check
> +++ /dev/null
> @@ -1,163 +0,0 @@
> -#!/usr/bin/perl
> -#
> -# check-config -- check the current config for issues
> -#
> -use strict;
> -use File::Basename;
> -use File::Spec;
> -
> -my $P = 'check-config';
> -
> -my $test = -1;
> -if ($ARGV[0] eq '--test') {
> -	$test = $ARGV[1] + 0;
> -} elsif ($#ARGV != 5) {
> -	die "Usage: $P <config> <arch> <flavour> <commonconfig> <warn-only> <enforce-all>\n";
> -}
> -
> -my ($configfile, $arch, $flavour, $commonconfig, $warn_only, $enforce_all) = @ARGV;
> -
> -my %values = ();
> -
> -# If we are in overridden then still perform the checks and emit the messages
> -# but do not return failure.  Those items marked FATAL will alway trigger
> -# failure.
> -my $fail_exit = 1;
> -$fail_exit = 0 if ($warn_only eq 'true' || $warn_only eq '1');
> -my $exit_val = 0;
> -
> -$enforce_all = 0 if $enforce_all eq "no" or $enforce_all eq "false";
> -
> -# Load up the current configuration values -- FATAL if this fails
> -print "$P: $configfile: loading config\n";
> -open(CONFIG, "<$configfile") || die "$P: $configfile: open failed -- $! -- aborting\n";
> -while (<CONFIG>) {
> -	# Pull out values.
> -	/^#*\s*(CONFIG_\w+)[\s=](.*)$/ or next;
> -	if ($2 eq 'is not set') {
> -		$values{$1} = 'n';
> -	} else {
> -		$values{$1} = $2;
> -	}
> -}
> -close(CONFIG);
> -
> -sub read_annotations {
> -    my ($filename) = @_;
> -    my %annot;
> -    my $form = 1;
> -    my ($config, $value, $options);
> -
> -    # Keep track of the configs that shouldn't be appended because
> -    # they were include_annot from another annotations file.
> -    # That's a hash of undefs, aka a set.
> -    my %noappend;
> -
> -    print "$P: $filename loading annotations\n";
> -    open(my $fd, "<$filename") ||
> -	die "$P: $filename: open failed -- $! -- aborting\n";
> -    while (<$fd>) {
> -	if (/^# FORMAT: (\S+)/) {
> -	    die "$P: $1: unknown annotations format\n" if ($1 != 2 && $1 != 3 && $1 != 4);
> -	    $form = $1;
> -	}
> -
> -	# Format #3 adds the include directive on top of format #2:
> -	if ($form == 3 && /^\s*include(\s|$)/) {
> -	    # Include quoted or unquoted files:
> -	    if (/^\s*include\s+"(.*)"\s*$/ || /^\s*include\s+(.*)$/) {
> -		# The include is relative to the current file
> -		my $include_filename = File::Spec->join(dirname($filename), $1);
> -		# Append the include files
> -		my %include_annot = read_annotations($include_filename);
> -		%annot = ( %annot, %include_annot );
> -		# And marked them to not be appended:
> -		my %included_noappend;
> -		# Discard the values and keep only the keys
> -		@included_noappend{keys %include_annot} = ();
> -		%noappend = ( %noappend, %included_noappend );
> -		next;
> -	    } else {
> -		die "$P: Invalid include: $_";
> -	    }
> -	}
> -
> -	/^#/ && next;
> -	chomp;
> -	/^$/ && next;
> -	/^CONFIG_/ || next;
> -
> -	if ($form == 1) {
> -	    ($config, $value, $options) = split(' ', $_, 3);
> -	} elsif ($form >= 2) {
> -	    ($config, $options) = split(' ', $_, 2);
> -	}
> -
> -	if (exists $noappend{$config}) {
> -	    delete $annot{$config};
> -	    delete $noappend{$config};
> -	}
> -	$annot{$config} = $annot{$config} . ' ' . $options;
> -    }
> -    close($fd);
> -    return %annot;
> -}
> -
> -# ANNOTATIONS: check any annotations marked for enforcement
> -my $annotations = "$commonconfig/annotations";
> -my %annot = read_annotations($annotations);
> -
> -my $pass = 0;
> -my $total = 0;
> -my ($config, $value, $options, $option, $check, $policy);
> -for $config (keys %annot) {
> -	$check = $enforce_all;
> -	$options = $annot{$config};
> -
> -	$policy = undef;
> -	while ($options =~ /\s*([^\s<]+)<(.*?)?>/g) {
> -		($option, $value) = ($1, $2);
> -
> -		if ($option eq 'mark' && $value eq 'ENFORCED') {
> -			$check = 1;
> -
> -		} elsif ($option eq 'policy') {
> -			if ($value =~ /^{/) {
> -				$value =~ s/:/=>/g;
> -				$policy = eval($value);
> -				warn "$config: $@" if ($@);
> -			} else {
> -				$policy = undef;
> -			}
> -		}
> -	}
> -	if ($check == 1 && !defined($policy)) {
> -		print "$P: INVALID POLICY (use policy<{...}>) $config$options\n";
> -		$total++;
> -		$check = 0;
> -	}
> -	if ($check) {
> -		# CONFIG_VERSION_SIGNATURE is dynamically set during the build
> -		next if ($config eq "CONFIG_VERSION_SIGNATURE");
> -		my $is = '-';
> -		$is = $values{$config} if (defined $values{$config});
> -
> -		my $value = '-';
> -		for my $which ("$arch-$flavour", "$arch-*", "*-$flavour", "$arch", "*") {
> -			if (defined $policy->{$which}) {
> -				$value = $policy->{$which};
> -				last;
> -			}
> -		}
> -		if ($is eq $value) {
> -			$pass++;
> -		} else {
> -			print "$P: FAIL ($is != $value): $config$options\n";
> -			$exit_val = $fail_exit;
> -		}
> -		$total++;
> -	}
> -}
> -
> -print "$P: $pass/$total checks passed -- exit $exit_val\n";
> -exit $exit_val;
> diff --git a/debian/scripts/misc/migrate-annotations b/debian/scripts/misc/migrate-annotations
> deleted file mode 100755
> index dc313c6d6c3d..000000000000
> --- a/debian/scripts/misc/migrate-annotations
> +++ /dev/null
> @@ -1,35 +0,0 @@
> -#!/bin/bash
> -
> -. debian/debian.env
> -
> -# We have to be in the top level kernel source directory
> -if [ ! -f MAINTAINERS ] || [ ! -f Makefile ]; then
> -	echo "This does not appear to be the kernel source directory." 1>&2
> -	exit 1
> -fi
> -
> -. ${DEBIAN}/etc/kernelconfig
> -
> -ARCH=$(echo $archs | tr " " "\n" | sort -u)
> -FLAVOUR=$(for arch in ${ARCH}; do
> -	flavours=$(sed -ne 's/^flavours\s*=\s*\(.*\)$/\1/p' ${DEBIAN}/rules.d/${arch}.mk)
> -	for flavour in ${flavours}; do
> -		echo ${arch}-${flavour}
> -	done
> -done | tr " " "\n" | sort -u)
> -
> -while read line; do
> -	(echo $line | grep -q '^#') || break
> -done
> -
> -cat << EOF
> -# Menu: HEADER
> -# FORMAT: 4
> -# ARCH: $(echo ${ARCH})
> -# FLAVOUR: $(echo ${FLAVOUR})
> -
> -EOF
> -
> -while read line; do
> -	echo ${line}
> -done
> diff --git a/debian/scripts/misc/old-kernelconfig b/debian/scripts/misc/old-kernelconfig
> deleted file mode 100644
> index b68676ea85c6..000000000000
> --- a/debian/scripts/misc/old-kernelconfig
> +++ /dev/null
> @@ -1,218 +0,0 @@
> -#!/bin/bash
> -
> -. debian/debian.env
> -
> -# Script to merge all configs and run 'make syncconfig' on it to wade out bad juju.
> -# Then split the configs into distro-commmon and flavour-specific parts
> -
> -# We have to be in the top level kernel source directory
> -if [ ! -f MAINTAINERS ] || [ ! -f Makefile ]; then
> -	echo "This does not appear to be the kernel source directory." 1>&2
> -	exit 1
> -fi
> -
> -mode=${1:?"Usage: $0 (oldconfig|editconfig) [do_enforce_all]"}
> -do_enforce_all=${2:-0}
> -yes=0
> -case "$mode" in
> -    update*configs)  mode='syncconfig' ;;
> -    default*configs) mode='oldconfig'; yes=1 ;;
> -    edit*configs)    ;; # All is good
> -    gen*configs)     mode='genconfigs' ;; # All is good
> -    dump*configs)    mode='config'; yes=1 ;;
> -    *) echo "$0 called with invalid mode" 1>&2
> -       exit 1 ;;
> -esac
> -
> -if [ -z "$gcc" ]; then
> -    echo "ERROR: gcc environment variable must be set"
> -    exit 1
> -fi
> -
> -kerneldir="`pwd`"
> -confdir="$kerneldir/${DEBIAN}/config"
> -variant="$2"
> -
> -. $DEBIAN/etc/kernelconfig
> -
> -bindir="`pwd`/${DROOT}/scripts/misc"
> -common_conf="$confdir/config.common.ubuntu"
> -tmpdir=`mktemp -d`
> -mkdir "$tmpdir/CONFIGS"
> -
> -if [ "$mode" = "genconfigs" ]; then
> -	keep=1
> -	mode="oldconfig"
> -	test -d CONFIGS || mkdir CONFIGS
> -fi
> -
> -warning_partial=
> -
> -for arch in $archs; do
> -	rm -rf build
> -	mkdir build
> -
> -	# Map debian archs to kernel archs
> -	case "$arch" in
> -		ppc64|ppc64el)	kernarch="powerpc"	;;
> -		amd64)		kernarch="x86_64"	;;
> -		lpia)		kernarch="x86" 		;;
> -		sparc)		kernarch="sparc64"	;;
> -		armel|armhf)	kernarch="arm"		;;
> -		s390x)		kernarch="s390"		;;
> -		riscv64)	kernarch="riscv"	;;
> -		*)		kernarch="$arch"	;;
> -	esac
> -
> -	# Determine cross toolchain to use for Kconfig compiler tests
> -	cross_compile="$(dpkg-architecture -qDEB_HOST_GNU_TYPE -a$arch 2>/dev/null)-"
> -
> -	# Arch-specific compiler, if any
> -	archgcc=$(echo -e "show-%:\n\t at echo \$(\$*)\ninclude $DEBIAN/rules.d/$arch.mk" | make -s -f - show-gcc)
> -
> -	# Environment variables for 'make *config'. We omit CROSS_COMPILE
> -	# for i386 since it is no longer supported after 19.04, however
> -	# we maintain the configs for hwe.
> -	modify_config=true
> -	env="ARCH=$kernarch DEB_ARCH=$arch"
> -	compiler_path=$(which "${cross_compile}${archgcc:-$gcc}" || true)
> -	if [ "$compiler_path" != '' ]; then
> -		env="$env CROSS_COMPILE=$cross_compile CC=$compiler_path"
> -	else
> -		echo "WARNING: ${cross_compile}gcc not installed"
> -		modify_config=
> -		warning_partial="$warning_partial $arch"
> -	fi
> -
> -	archconfdir=$confdir/$arch
> -	flavourconfigs=$(cd $archconfdir && ls config.flavour.*)
> -
> -	# Merge configs
> -	# We merge config.common.ubuntu + config.common.<arch> +
> -	# config.flavour.<flavour>
> -
> -	for config in $flavourconfigs; do
> -		fullconf="$tmpdir/$arch-$config-full"
> -		case $config in
> -		*)
> -			: >"$fullconf"
> -			if [ -f $common_conf ]; then
> -				cat $common_conf >> "$fullconf"
> -			fi
> -			if [ -f $archconfdir/config.common.$arch ]; then
> -				cat $archconfdir/config.common.$arch >> "$fullconf"
> -			fi
> -			cat "$archconfdir/$config" >>"$fullconf"
> -			if [ -f $confdir/OVERRIDES ]; then
> -				cat $confdir/OVERRIDES >> "$fullconf"
> -			fi
> -			;;
> -		esac
> -	done
> -
> -	for config in $flavourconfigs; do
> -		if [ -f $archconfdir/$config ]; then
> -			fullconf="$tmpdir/$arch-$config-full"
> -			cat "$fullconf" > build/.config
> -			# Call oldconfig or menuconfig
> -			if [ "$modify_config" ]; then
> -				case "$mode" in
> -				    editconfigs)
> -					# Interactively edit config parameters
> -					while : ; do
> -						echo -n "Do you want to edit config: $arch/$config? [Y/n] "
> -						read choice
> -						case "$choice" in
> -						y* | Y* | "" )
> -							make O=`pwd`/build $conc_level $env menuconfig
> -							break ;;
> -						n* | N* )
> -							# 'syncconfig' prevents
> -							# errors for '-' options set
> -							# in common config fragments
> -							make O=`pwd`/build $conc_level $env syncconfig
> -							break ;;
> -						*)
> -							echo "Entry not valid"
> -						esac
> -					done
> -					;;
> -				    *)
> -					echo "* Run $mode (yes=$yes) on $arch/$config ..."
> -					if [ "$yes" -eq 1 ]; then
> -						yes "" | make O=`pwd`/build $conc_level $env "$mode"
> -					else
> -						make O=`pwd`/build $conc_level $env "$mode"
> -					fi ;;
> -				esac
> -			fi
> -			cat build/.config > $archconfdir/$config
> -			[ "$modify_config" ] && cat build/.config >"$tmpdir/CONFIGS/$arch-$config"
> -			if [ "$keep" = "1" ]; then
> -				cat build/.config > CONFIGS/$arch-$config
> -			fi
> -		else
> -			echo "!! Config not found $archconfdir/$config..."
> -		fi
> -	done
> -
> -	echo "Running splitconfig.pl for $arch"
> -	echo
> -
> -	# Can we make this more robust by avoiding $tmpdir completely?
> -	# This approach was used for now because I didn't want to change
> -	# splitconfig.pl
> -	(cd $archconfdir; $bindir/splitconfig.pl config.flavour.*; mv config.common \
> -	 config.common.$arch; cp config.common.$arch $tmpdir)
> -done
> -
> -rm -f $common_conf
> -
> -# Now run splitconfig.pl on all the config.common.<arch> copied to
> -# $tmpdir
> -(cd $tmpdir; $bindir/splitconfig.pl *)
> -(
> -	cd $confdir;
> -	rm -f *-full
> -	grep -v 'is UNMERGABLE' <$tmpdir/config.common >$common_conf
> -	for arch in $archs; do
> -		grep -v 'is UNMERGABLE' <$tmpdir/config.common.$arch \
> -			>$arch/config.common.$arch
> -	done
> -)
> -
> -echo ""
> -echo "Running config-check for all configurations ..."
> -echo ""
> -fail=0
> -for arch in $archs; do
> -	archconfdir=$confdir/$arch
> -	flavourconfigs=$(cd $archconfdir && ls config.flavour.*)
> -	for config in $flavourconfigs; do
> -		flavour="${config##*.}"
> -		if [ -f $archconfdir/$config ]; then
> -			fullconf="$tmpdir/CONFIGS/$arch-$config"
> -			[ ! -f "$fullconf" ] && continue
> -			"$bindir/../checks/config-check" "$fullconf" "$arch" "$flavour" "$confdir" "0" "$do_enforce_all" || let "fail=$fail+1"
> -		fi
> -	done
> -done
> -
> -rc=0
> -if [ "$fail" != 0 ]; then
> -	rc=1
> -	echo ""
> -	echo "*** ERROR: $fail config-check failures detected"
> -	echo ""
> -fi
> -
> -rm -rf build
> -
> -if [ "$warning_partial" ]; then
> -	rc=1
> -	echo ""
> -	echo "WARNING: configuration operation applied only to a subset of architectures (skipped$warning_partial)" 1>&2
> -	echo ""
> -fi
> -
> -exit "${rc}"
Acked-by: Tim Gardner <tim.gardner at canonical.com>

Nice cleanup
-- 
-----------
Tim Gardner
Canonical, Inc




More information about the kernel-team mailing list