File check-for-config-changes of Package kernel-source

#! /bin/bash

# This is a list of toolchain-dependent configs. That is: only those which
# change .config when gcc, ld, or similar changes.
#
# please keep them sorted alphabetically
declare -a IGNORED_CONFIGS_RE=(
	'ARCH_USING_PATCHABLE_FUNCTION_ENTRY'
	'AS_HAS_[A-Z0-9_]*'
	'AS_VERSION'
	'AS_WRUSS' # x86_32
	'BUILTIN_RETURN_ADDRESS_STRIPS_PAC'
	'CC_CAN_[A-Z_]*'
	'CC_HAS_[A-Z_]*'
	'CC_HAVE_[A-Z_]*'
	'CC_VERSION_TEXT'
	'DYNAMIC_SIGFRAME'
	'FTRACE_MCOUNT_USE_[A-Z_]*'
	'GCC_ASM_GOTO_OUTPUT_BROKEN'
	'GCC_ASM_GOTO_OUTPUT_WORKAROUND'
	'GCC_VERSION'
	'G*CC[0-9]*_NO_[A-Z_]*'
	'HAVE_[A-Z]*_COMPILER'
	'HAVE_RUST'
	'HAVE_SHADOW_CALL_STACK'
	'LD_VERSION'
	'OBJTOOL'
	'PAHOLE_HAS_[A-Z0-9_]*'
	'PAHOLE_VERSION'
	'RISCV_ISA_[A-Z_]*'
	'RUSTC_SUPPORTS_[A-Z0-9_]*'
	'TOOLCHAIN_HAS_[A-Z_]*'
	'TOOLCHAIN_NEEDS_[A-Z_]*'
	'TOOLS_SUPPORT_[A-Z_]*'
)

declare -a SED_ARGS=()

for CONFIG in "${IGNORED_CONFIGS_RE[@]}"; do
	SED_ARGS+=(-e "/\\<CONFIG_$CONFIG\\>/ d")
done

SED_ARGS+=(
	-e '/^# .* is not set$/p'
	-e '/^$\|^#/d'
)

# Normalize CONFIG_XXX=n to # CONFIG_XXX is not set for comparison
# This handles cases where make syncconfig converts CONFIG_XXX=n to # CONFIG_XXX is not set
normalize_config() {
    sed "${SED_ARGS[@]}" "$1" | \
    sed -e 's/^CONFIG_\([^=]*\)=n$/# CONFIG_\1 is not set/' | \
    sort
}

differences="$(
    diff -bU0 <(normalize_config "$1") \
	      <(normalize_config "$2") \
    | grep '^[-+][^-+]'
)" || true
if [ -n "$differences" ]; then
    echo
    echo "Changes after running \`make oldconfig':"
    echo "$differences"
    echo
    if echo "$differences" | grep -q '^+' ; then
	exit 1
    fi
fi
openSUSE Build Service is sponsored by