Michal Marek 3c2527
#!/bin/bash
Michal Marek 3c2527
Michal Marek 3c2527
#############################################################################
Michal Marek 3c2527
# Copyright (c) 2003-2009 Novell, Inc.
Michal Marek 3c2527
# All Rights Reserved.
Michal Marek 3c2527
#
Michal Marek 3c2527
# This program is free software; you can redistribute it and/or
Michal Marek 3c2527
# modify it under the terms of version 2 of the GNU General Public License as
Michal Marek 3c2527
# published by the Free Software Foundation.
Michal Marek 3c2527
#
Michal Marek 3c2527
# This program is distributed in the hope that it will be useful,
Michal Marek 3c2527
# but WITHOUT ANY WARRANTY; without even the implied warranty of
Michal Marek 3c2527
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.   See the
Michal Marek 3c2527
# GNU General Public License for more details.
Michal Marek 3c2527
#
Michal Marek 3c2527
# You should have received a copy of the GNU General Public License
Michal Marek 3c2527
# along with this program; if not, contact Novell, Inc.
Michal Marek 3c2527
#
Michal Marek 3c2527
# To contact Novell about this file by physical or electronic mail,
Michal Marek 3c2527
# you may find current contact information at www.novell.com
Michal Marek 3c2527
#############################################################################
Michal Marek 3c2527
Michal Marek 3c2527
#########################################################
Michal Marek 3c2527
# dirty scroll region tricks ...
Michal Marek 3c2527
Michal Marek 88963d
use_region=false
Michal Kubecek 0d0454
if test -f scripts/kconfig/Makefile && \
Michal Kubecek 0d0454
   grep -q syncconfig scripts/kconfig/Makefile; then
Michal Kubecek 0d0454
    syncconfig="syncconfig"
Michal Kubecek 0d0454
else
Michal Kubecek 0d0454
    syncconfig="silentoldconfig"
Michal Kubecek 0d0454
fi
Michal Marek 3c2527
Michal Marek 3c2527
function _region_init_ () {
Michal Marek 3c2527
    echo -ne '\x1b[H\033[J'	# clear screen
Michal Marek 3c2527
    echo -ne '\x1b[4;0r'	# setup scroll region
Michal Marek 3c2527
    echo -ne '\x1b[4;0H'	# move cursor
Michal Marek 3c2527
}
Michal Marek 3c2527
Michal Marek 3c2527
function _region_fini_ () {
Michal Marek 3c2527
    echo -ne '\x1b7'		# save cursor
Michal Marek 3c2527
    echo -ne '\x1b[0;0r'		# del scroll region
Michal Marek 3c2527
    echo -ne '\x1b8'		# restore cursor
Michal Marek 3c2527
}
Michal Marek 3c2527
Michal Marek 3c2527
function _region_msg_ () {
Michal Marek 3c2527
    local msg="$*"
Michal Marek 1caa97
    if $silent; then
Michal Marek 1caa97
	    return
Michal Marek 1caa97
    fi
Michal Marek 88963d
    if $use_region; then
Michal Marek 3c2527
	echo -ne '\x1b7'	# save cursor
Michal Marek 3c2527
	echo -ne '\x1b[0;0H'	# move cursor
Michal Marek 3c2527
	echo -e "##\x1b[K"	# message
Michal Marek 3c2527
	echo -e "## $msg\x1b[K"	# message
Michal Marek 3c2527
	echo -e "##\x1b[K"	# message
Michal Marek 3c2527
	echo -ne '\x1b8'	# restore cursor
Michal Marek 3c2527
    else
Michal Marek 3c2527
	echo -e "##"
Michal Marek 3c2527
	echo -e "## $msg"
Michal Marek 3c2527
	echo -e "##"
Michal Marek 3c2527
    fi
Michal Marek 3c2527
}
Michal Marek 3c2527
Michal Marek 1caa97
info()
Michal Marek 1caa97
{
Michal Marek 1caa97
	if $silent; then
Michal Marek 1caa97
		return
Michal Marek 1caa97
	fi
Michal Marek 1caa97
	echo "$@"
Michal Marek 1caa97
}
Michal Marek 1caa97
Michal Marek 3c2527
set_var()
Michal Marek 3c2527
{
Jan Kara 565fa2
	local name=$1 val=$2 config config_files
Michal Marek 3c2527
Michal Marek 3c2527
	name="${name%%=*}"
Michal Marek 3c2527
	case "$name" in
Michal Marek 3c2527
		CONFIG_*) ;;
Michal Marek 3c2527
		*) name="CONFIG_$name" ;;
Michal Marek 3c2527
	esac
Jeff Mahoney afd169
	config_files=$(${scripts}/guards $CONFIG_SYMBOLS < ${prefix}config.conf)
Jan Kara 565fa2
	if [ -n "$set_flavor" ] ; then
Michal Marek 1caa97
		info "appending $name=$val to all -$set_flavor config files listed in config.conf"
Jan Kara 565fa2
		config_files=$(printf "%s\n" $config_files | grep "/$set_flavor\$")
Jan Kara 565fa2
	else
Michal Marek 1caa97
		info "appending $name=$val to all config files listed in config.conf"
Jan Kara 565fa2
	fi
Jan Kara 565fa2
	for config in $config_files; do
Michal Marek 3c2527
		if test -L "${prefix}config/$config"; then
Michal Marek 3c2527
			continue
Michal Marek 3c2527
		fi
Michal Marek 838fb1
		# do not change trimmed configs unless requested
Michal Marek 838fb1
		if test -z "$set_flavor" && ! \
Michal Marek 5d1b33
			grep -q '^CONFIG_MMU=' "${prefix}config/$config"; then
Michal Marek 5d1b33
			continue
Michal Marek 5d1b33
		fi
Michal Marek 3c2527
		sed -i "/\\<$name[ =]/d" "${prefix}config/$config"
Michal Marek 3c2527
		case "$val" in
Michal Marek 3c2527
		n) echo "# $name is not set" ;;
Michal Kubecek 9c449c
		*) echo "$name=$val" ;;
Michal Marek 3c2527
		esac >> ${prefix}config/$config
Michal Marek 3c2527
	done
Michal Marek 3c2527
}
Michal Marek 3c2527
Michal Marek 3c2527
Michal Marek 3c2527
function _cleanup_() {
Michal Marek 3c2527
	test -d "$TMPDIR" && rm -rf $TMPDIR
Michal Marek 88963d
	if $use_region; then
Michal Marek 88963d
		_region_fini_
Michal Marek 88963d
	fi
Michal Marek 3c2527
}
Michal Marek 3c2527
TMPDIR=
Michal Marek 3c2527
trap _cleanup_ EXIT
Michal Marek 3c2527
Michal Marek 3c2527
#########################################################
Michal Marek 3c2527
# main
Michal Marek 3c2527
Michal Marek 3c2527
cpu_arch=
Michal Marek e6deb4
mode=oldconfig
Michal Marek e6deb4
option=
Michal Marek e6deb4
value=
Michal Marek 1caa97
silent=false
Michal Marek ff0e55
check=false
Matthias Brugger 06b809
current=false
Michal Marek 3c2527
until [ "$#" = "0" ] ; do
Michal Marek e6deb4
	case "$1" in
6ad211
	y|-y|--yes|o|-o|--olddefconfig)
Michal Marek e6deb4
		mode=yes
Michal Marek e6deb4
		shift
Michal Marek e6deb4
		;;
Michal Marek 01a0c7
	--mod)
Michal Marek 01a0c7
		mode=allmodconfig
Michal Marek 01a0c7
		shift
Michal Marek 01a0c7
		;;
Michal Marek e6deb4
	a|-a|--arch)
Michal Marek e6deb4
		cpu_arch=$2
Michal Marek e6deb4
		shift 2
Michal Marek e6deb4
		;;
Michal Marek e6deb4
	m|-m|--menuconfig)
Michal Marek e6deb4
		mode=menuconfig
Michal Marek e6deb4
		shift
Michal Marek e6deb4
		;;
Michal Marek e6deb4
	-nco-y|--new-config-option-yes)
Michal Marek e6deb4
		mode=single
Michal Marek e6deb4
		option=$2
Michal Marek e6deb4
		value=y
Michal Marek e6deb4
		shift 2
Michal Marek e6deb4
		;;
Michal Marek e6deb4
	-nco-m|--new-config-option-mod)
Michal Marek e6deb4
		mode=single
Michal Marek e6deb4
		option=$2
Michal Marek e6deb4
		value=m
Michal Marek e6deb4
		shift 2
Michal Marek e6deb4
		;;
Michal Marek e6deb4
	-nco-n|--new-config-option-no|-dco|--disable-config-option)
Michal Marek e6deb4
		mode=single
Michal Marek e6deb4
		option=$2
Michal Marek e6deb4
		value=n
Michal Marek e6deb4
		shift 2
Michal Marek e6deb4
		;;
Michal Kubecek 9c449c
	-nco|--new-config-option)
Michal Kubecek 9c449c
		mode=single
Michal Kubecek 9c449c
		option="${2%%=*}"
Michal Kubecek 9c449c
		value="${2#*=}"
Michal Kubecek 9c449c
		shift 2
Michal Kubecek 9c449c
		;;
Michal Marek e6deb4
	--flavor)
Michal Marek e6deb4
		set_flavor="$2"
Michal Marek e6deb4
		shift 2
Michal Marek e6deb4
		;;
Michal Marek e6deb4
	--vanilla)
Michal Marek e6deb4
		set_flavor="vanilla"
Michal Marek e6deb4
		shift
Michal Marek e6deb4
		;;
Michal Marek ff0e55
	--check)
Michal Marek ff0e55
		check=true
Michal Marek ff0e55
		shift
Michal Marek ff0e55
		;;
Matthias Brugger 06b809
	-c|--current)
Matthias Brugger 06b809
		current=true
Matthias Brugger 06b809
		shift
Matthias Brugger 06b809
		;;
Michal Marek 1caa97
	-s|--silent)
Michal Marek 1caa97
		silent=true
Michal Marek 1caa97
		shift
Michal Marek 1caa97
		;;
Michal Marek e6deb4
	-h|--help)
Michal Marek e6deb4
		cat <
Michal Marek 3c2527
Michal Marek 3c2527
${0##*/} does either:
Michal Marek 3c2527
 * run make oldconfig to clean up the .config files
Michal Marek 88f96b
 * modify kernel .config files in the GIT tree
Michal Marek 3c2527
Michal Marek 3c2527
run it with no options in your SCRATCH_AREA $SCRATCH_AREA, like
Michal Marek 3c2527
	patches/scripts/${0##*/}
Michal Marek 3c2527
possible options in this mode:
Michal Marek 3c2527
	called with no option will run just make oldconfig interactive
6ad211
	y|-y|--yes         to run 'yes "" | make oldconfig' - equivalent to
6ad211
                           'make olddefconfig' on newer kernels
6ad211
	o|-o|--olddefconfig  same as '--yes'
Michal Marek 01a0c7
	--mod              to set all new options to 'm' (booleans to 'y')
Michal Marek 3c2527
	a|-a|--arch        to run make oldconfig only for the given arch
Michal Marek 3c2527
	m|-m|--menuconfig  to run make menuconfig instead of oldconfig
Jan Kara 565fa2
	--flavor <flavor>  to run only for configs of specified flavor
Jan Kara 565fa2
	--vanilla          an alias for "--flavor vanilla"
Michal Marek ff0e55
	--check            just check if configs are up to date
Matthias Brugger 06b809
	-c|--current       uset tmp/current for checks
Michal Marek 3c2527
Michal Marek 3c2527
run it with one of the following options to modify all .config files listed
Michal Marek 3c2527
in config.conf:
Michal Marek 3c2527
	-nco-y|--new-config-option-yes   compile something into the kernel
Michal Marek 3c2527
	-nco-m|--new-config-option-mod   compile something as a module
Michal Marek 3c2527
	-nco-n|--new-config-option-no    disable a kernel .config option
Michal Marek 3c2527
	-dco|--disable-config-option     alias for -nco-n
Michal Marek 3c2527
each of them takes a second argument, which can be either
Michal Marek 3c2527
FOO
Michal Marek 3c2527
FOO=X
Michal Marek 3c2527
CONFIG_FOO
Michal Marek 3c2527
CONFIG_FOO=X
Michal Kubecek 9c449c
run with the following to modify option taking a value:
Michal Kubecek 9c449c
	-nco|--new-config-option OPTION=VALUE
Michal Kubecek 9c449c
as above, OPTION can be used with or without the CONFIG_ prefix; for string
Michal Kubecek 9c449c
options requiring double quotes, these must be used in argument (and shell
Michal Kubecek 9c449c
escaped)
Michal Marek 1caa97
Michal Marek 1caa97
Run with -s|--silent in both modes to suppress most output
Michal Marek 3c2527
EOF
Michal Marek e6deb4
		exit 1
Michal Marek e6deb4
		;;
Michal Marek e6deb4
	*)
Michal Marek e6deb4
		echo ugh
Michal Marek e6deb4
		exit 1
Michal Marek e6deb4
		;;
Michal Marek e6deb4
	esac
Michal Marek 3c2527
done
Michal Marek 3c2527
Michal Marek 3c2527
if [ -f patches/scripts/arch-symbols ] ; then
Michal Marek 3c2527
	prefix=patches/
Michal Marek 3c2527
elif [ -f scripts/arch-symbols ] ; then
Michal Marek 3c2527
	prefix=
Michal Marek 3c2527
else
Michal Marek 3c2527
	echo "no arch-symbols found"
Michal Marek 3c2527
	exit 1
Michal Marek 3c2527
fi
Matthias Brugger 647115
Matthias Brugger 647115
if $current; then
Matthias Brugger 647115
	prefix=../../$prefix
Matthias Brugger 647115
	cd tmp/current
Matthias Brugger 647115
fi
Matthias Brugger 647115
Jeff Mahoney afd169
scripts="${prefix}scripts"
Michal Marek 3c2527
Michal Marek e4ad2b
if test -e "${prefix}rpm/config.sh"; then
Michal Marek e4ad2b
	source "$_"
Michal Marek e4ad2b
fi
Michal Marek 03d110
if test -z "$set_flavor" && test "$VANILLA_ONLY" = 1 -o -e .is_vanilla; then
Michal Marek e4ad2b
	set_flavor=vanilla
Michal Marek e4ad2b
fi
Michal Marek e4ad2b
Michal Marek 3c2527
if [ -z "$cpu_arch" ]; then
Michal Marek 1c2401
    CONFIG_SYMBOLS=$(
Jeff Mahoney afd169
        for arch in $(${scripts}/arch-symbols --list); do
Jeff Mahoney afd169
            ${scripts}/arch-symbols $arch
Michal Marek 1c2401
        done
Michal Marek 1c2401
    )
Michal Marek 3c2527
else
Jeff Mahoney afd169
    CONFIG_SYMBOLS=$(${scripts}/arch-symbols $cpu_arch)
Michal Marek 3c2527
fi
Michal Marek 3c2527
Michal Marek e6deb4
case "$mode" in
Michal Marek e6deb4
single)
Michal Marek e6deb4
	set_var "$option" "$value"
Michal Marek 3c2527
	exit 0
Michal Marek e6deb4
	;;
Michal Marek e6deb4
menuconfig)
Michal Marek e6deb4
	;;
Michal Marek e6deb4
*)
Michal Marek d558fc
	if test "$set_flavor" = "vanilla" -a -z "$VANILLA_ONLY" -a \
Michal Marek d558fc
			! -e .is_vanilla; then
Michal Marek d558fc
		echo "run_oldconfig.sh --vanilla only works in a tree created with" >&2
Michal Marek d558fc
		echo -n "sequence-patch.sh --vanilla. Do you really want to continue? [yN] " >&2
Michal Marek d558fc
		read
Michal Marek d558fc
		case "$REPLY" in
Michal Marek d558fc
		"" | [Nn]*)
Michal Marek d558fc
			exit 1
Michal Marek d558fc
		esac
Michal Marek d558fc
	fi
Michal Marek d558fc
Michal Marek 3c2527
	case "$TERM" in
Michal Marek 3c2527
	linux* | xterm* | screen*)
Michal Marek 1caa97
		if tty -s && ! $silent; then
Michal Marek 3aad40
			use_region=true
Michal Marek 3aad40
			_region_init_
Michal Marek 3aad40
		fi
Michal Marek 3c2527
	esac
Michal Marek e6deb4
esac
Michal Marek 3c2527
Jeff Mahoney afd169
config_files=$(${scripts}/guards $CONFIG_SYMBOLS < ${prefix}config.conf)
Michal Marek 3c2527
Jan Kara 565fa2
if [ -z "$set_flavor" ] ; then
Michal Marek 3c2527
    config_files=$(printf "%s\n" $config_files | grep -v vanilla)
Michal Marek 3c2527
else
Jan Kara 565fa2
    config_files=$(printf "%s\n" $config_files | grep "/$set_flavor\$")
Michal Marek 3c2527
fi
Michal Marek 3c2527
Michal Marek 3c2527
TMPDIR=$(mktemp -td ${0##*/}.XXXXXX)
Michal Marek 3c2527
Michal Marek 3c2527
EXTRA_SYMBOLS=
Michal Marek 3c2527
if [ -s extra-symbols ]; then
Michal Marek 3c2527
    EXTRA_SYMBOLS="$(cat extra-symbols)"
Michal Marek 3c2527
fi
Michal Marek 3c2527
Jeff Mahoney afd169
${scripts}/guards $EXTRA_SYMBOLS < ${prefix}series.conf \
Michal Marek 3c2527
    > $TMPDIR/applied-patches
Michal Marek 3c2527
Michal Marek 3c2527
EXTRA_SYMBOLS="$(echo $EXTRA_SYMBOLS | sed -e 's# *[Rr][Tt] *##g')"
Michal Marek 3c2527
Michal Marek aecea1
mkdir $TMPDIR/reuse
Michal Marek aecea1
Michal Marek aecea1
ask_reuse_config()
Michal Marek aecea1
{
Michal Marek aecea1
    local old=$1 new=$2
Michal Marek aecea1
Michal Marek aecea1
    # if the user either asked to never reuse the config or if this config
Michal Marek aecea1
    # already reused something, do nothing
Michal Marek aecea1
    for f in $TMPDIR/reuse/{never,all,$cpu_arch-all,all-$flavor}; do
Michal Marek aecea1
        if test -e "$f"; then
Michal Marek aecea1
            return
Michal Marek aecea1
        fi
Michal Marek aecea1
    done
Michal Marek aecea1
    diff $old $new | awk >$TMPDIR/reuse/diff '
Michal Marek aecea1
        /< .*CONFIG_/ { x[substr($0, 3)]--; }
Michal Marek aecea1
        /> .*CONFIG_/ { x[substr($0, 3)]++; }
Michal Marek aecea1
        END {
Michal Marek aecea1
            for (l in x)
Michal Marek cdf4a4
                if (x[l] > 0 && l !~ /^CONFIG_LOCALVERSION\>/)
Michal Marek aecea1
                    print l;
Michal Marek aecea1
        }'
Michal Marek aecea1
Michal Marek aecea1
    if test ! -s $TMPDIR/reuse/diff; then
Michal Marek aecea1
        return
Michal Marek aecea1
    fi
Michal Marek aecea1
    while :; do
Michal Marek aecea1
        echo
Michal Marek aecea1
        cat $TMPDIR/reuse/diff | sed 's/^/  /'
Michal Marek aecea1
        echo
Michal Marek aecea1
        echo "Use these settings for other configurations?"
Michal Marek aecea1
        read -p "[Y]es/for [A]rch $cpu_arch/for [F]lavor $flavor/[N]o/[E]dit/ne[V]er "
Michal Marek aecea1
        case "$REPLY" in
Michal Marek aecea1
        [Yy] | "")
Michal Marek aecea1
            mv $TMPDIR/reuse/diff $TMPDIR/reuse/all
Michal Marek aecea1
            break ;;
Michal Marek aecea1
        [Aa])
Michal Marek aecea1
            mv $TMPDIR/reuse/diff $TMPDIR/reuse/$cpu_arch-all
Michal Marek aecea1
            break ;;
Michal Marek aecea1
        [Ff])
Michal Marek aecea1
            mv $TMPDIR/reuse/diff $TMPDIR/reuse/all-$flavor
Michal Marek aecea1
            break ;;
Michal Marek aecea1
        [Ee])
Michal Marek aecea1
            ${VISUAL:-${EDITOR:-vi}} $TMPDIR/reuse/diff
Michal Marek aecea1
            ;;
Michal Marek aecea1
        [Nn])
Michal Marek aecea1
            rm $TMPDIR/reuse/diff
Michal Marek aecea1
            break ;;
Michal Marek aecea1
        [Vv])
Michal Marek aecea1
            rm $TMPDIR/reuse/diff
Michal Marek aecea1
                touch $TMPDIR/reuse/never
Michal Marek aecea1
            break ;;
Michal Marek aecea1
        esac
Michal Marek aecea1
    done
Michal Marek aecea1
}
Michal Marek 3c2527
Michal Marek ff0e55
filter_config()
Michal Marek ff0e55
{
Michal Suchanek c585f2
    sed  -e '/CONFIG_GCC_VERSION/ d' -e '/CONFIG_LD_VERSION/ d' -e '/CONFIG_CC_VERSION_TEXT/ d' -e '/CONFIG_PAHOLE_VERSION/ d' -e '/^# .* is not set$/p' -e '/^$\|^#/d' "$@" | sort
Michal Marek ff0e55
}
Michal Marek ff0e55
Michal Marek 608c23
# Keep these in the -vanilla fragment even if -default has the same values.
Michal Marek 608c23
# This allows the spec file to read them from the fragment without calling
Michal Marek 608c23
# kconfig
Michal Marek 608c23
precious_options=($(sed -n 's/^%define config_vars //p' "${prefix}rpm/kernel-binary.spec.in"))
Michal Marek ff0e55
err=0
Michal Marek 3c2527
for config in $config_files; do
Michal Marek 3c2527
    cpu_arch=${config%/*}
Michal Marek 3c2527
    flavor=${config#*/}
Michal Marek 3c2527
Michal Marek 3c2527
    if test -L "${prefix}config/$config"; then
Michal Marek 3c2527
        continue
Michal Marek 3c2527
    fi
Michal Marek 3c2527
    set -- kernel-$flavor $flavor $(case $flavor in (rt|rt_*) echo RT ;; esac)
Jeff Mahoney afd169
    ${scripts}/guards $* $EXTRA_SYMBOLS \
Michal Marek 3c2527
	< ${prefix}series.conf > $TMPDIR/patches
Michal Marek 3c2527
Michal Marek 3c2527
    if ! diff -q $TMPDIR/applied-patches $TMPDIR/patches > /dev/null; then
Michal Marek 3c2527
	echo "Not all patches for $config are applied; skipping"
Michal Marek 3c2527
	diff -u $TMPDIR/applied-patches $TMPDIR/patches
Michal Marek 3c2527
	continue
Michal Marek 3c2527
    fi
Michal Marek 3c2527
Michal Marek 5d6f14
    case $config in
Michal Marek a4c200
    ppc*/*)
Jeff Mahoney b60c89
	MAKE_ARGS="ARCH=powerpc"
Michal Marek 5d6f14
        ;;
Michal Marek 5d6f14
    s390x/*)
Michal Marek 5d6f14
        MAKE_ARGS="ARCH=s390"
Michal Marek 5d6f14
        ;;
Alexander Graf 0e5148
    arm64/*)
Alexander Graf 0e5148
        MAKE_ARGS="ARCH=arm64"
Alexander Graf 0e5148
        ;;
Alexander Graf 0e5148
    armv*/*)
Alexander Graf 7c25e1
        MAKE_ARGS="ARCH=arm"
Alexander Graf 7c25e1
        ;;
Andreas Schwab 6c1fcb
    riscv*/*)
Andreas Schwab 6c1fcb
        MAKE_ARGS="ARCH=riscv"
Andreas Schwab 6c1fcb
        ;;
Michal Marek 5d6f14
    */um)
Michal Marek 5d6f14
        MAKE_ARGS="ARCH=um SUBARCH=$cpu_arch"
Michal Marek 5d6f14
        ;;
Michal Marek 5d6f14
    *)
Michal Marek 5d6f14
        MAKE_ARGS="ARCH=$cpu_arch"
Michal Marek 5d6f14
        ;;
Michal Marek 3c2527
    esac
Michal Suchanek 2b6883
    if [ -d scripts/dummy-tools ] ; then
Michal Suchanek 2b6883
	MAKE_ARGS="$MAKE_ARGS CROSS_COMPILE=scripts/dummy-tools/"
Jiri Slaby a9e6b6
	if [ -e scripts/dummy-tools/pahole ]; then
Jiri Slaby a9e6b6
		MAKE_ARGS="$MAKE_ARGS PAHOLE=scripts/dummy-tools/pahole"
Jiri Slaby a9e6b6
	fi
Michal Suchanek d3f1ae
	chmod 755 scripts/dummy-tools/*
Michal Suchanek 17cad6
	chmod 755 scripts/*
Michal Suchanek 2b6883
    fi
Jiri Slaby 8149db
    MAKE_ARGS="$MAKE_ARGS RUSTC=/nothing/nowhere"
Michal Marek 1caa97
    if $silent; then
Michal Suchanek 2b6883
	MAKE_ARGS="$MAKE_ARGS -s"
Michal Marek 1caa97
    fi
Michal Marek 3c2527
    config="${prefix}config/$config"
Jeff Mahoney 32677c
    config_orig="config-orig"
Jeff Mahoney 32677c
Michal Marek 838fb1
    config_base=
Michal Marek 838fb1
    if ! grep -q CONFIG_MMU= "$config"; then
Jeff Mahoney 32677c
	if [ "$cpu_arch" = "i386" ]; then
Michal Marek 838fb1
	    config_base="$(dirname "$config")/pae"
Jeff Mahoney 32677c
	else
Michal Marek 838fb1
	    config_base="$(dirname "$config")/default"
Jeff Mahoney 32677c
	fi
Michal Suchanek e1353b
	if ! [ -f "$config_base" ] && [ -n "$VARIANT" ] ; then
Michal Suchanek e1353b
	    config_base="$(dirname "$config")/${VARIANT#-}"
Michal Suchanek e1353b
	fi
Michal Marek 838fb1
	${scripts}/config-merge "$config_base" "$config" >$config_orig
Jeff Mahoney 32677c
    else
Jeff Mahoney 32677c
	cp "$config" $config_orig
Jeff Mahoney 32677c
    fi
Jeff Mahoney 32677c
Jeff Mahoney 32677c
    cp $config_orig .config
Michal Marek 3c2527
Michal Marek 98d115
    for cfg in "CONFIG_LOCALVERSION=\"-$flavor\"" "CONFIG_SUSE_KERNEL=y" \
Michal Marek 98d115
		    "CONFIG_DEBUG_INFO=y"; do
Michal Marek 2acabd
	    if ! grep -q "^$cfg\$" .config; then
Michal Marek 2acabd
		    echo "$cfg" >>.config
Michal Marek 2acabd
	    fi
Michal Marek 2acabd
    done
Michal Marek aecea1
    for f in $TMPDIR/reuse/{all,$cpu_arch-all,all-$flavor}; do
Michal Marek aecea1
        if test -e "$f"; then
Michal Marek 1caa97
            info "Reusing choice for ${f##*/}"
Michal Marek aecea1
            cat "$f" >>.config
Michal Marek aecea1
        fi
Michal Marek aecea1
    done
Michal Marek e6deb4
    export KCONFIG_NOTIMESTAMP=1
Michal Marek e6deb4
    case "$mode" in
Michal Marek e6deb4
    menuconfig)
Michal Marek e6deb4
	make $MAKE_ARGS menuconfig
Michal Marek e6deb4
	;;
Michal Marek 3c2527
    yes)
Michal Marek e6deb4
	_region_msg_ "working on $config"
Michal Marek e6deb4
	yes '' | make $MAKE_ARGS oldconfig
Michal Marek aecea1
	touch $TMPDIR/reuse/never
Michal Marek 3c2527
	;;
Michal Marek 01a0c7
    allmodconfig)
Michal Marek 01a0c7
	_region_msg_ "working on $config"
Michal Marek 01a0c7
	cp .config config-old
Michal Marek 01a0c7
	KCONFIG_ALLCONFIG=config-old make $MAKE_ARGS allmodconfig
Michal Marek 01a0c7
	rm config-old
Michal Marek aecea1
	touch $TMPDIR/reuse/never
Michal Marek 01a0c7
	;;
Michal Marek 3c2527
    *)
Michal Marek 3c2527
	_region_msg_ "working on $config"
Michal Marek ff0e55
        if $check; then
Michal Kubecek 0d0454
            if ! make $MAKE_ARGS $syncconfig 
Michal Marek ff0e55
                echo "${config#$prefix} is out of date"
Michal Marek ff0e55
                err=1
Jeff Mahoney 32677c
                rm $config_orig
Michal Marek ff0e55
                continue
Michal Marek ff0e55
            fi
Michal Marek ff0e55
        else
Michal Marek ff0e55
            make $MAKE_ARGS oldconfig
Michal Marek ff0e55
        fi
Michal Marek 3c2527
    esac
Michal Marek ff0e55
    if ! $check; then
Jeff Mahoney 32677c
        ask_reuse_config $config_orig .config
Michal Marek 838fb1
	if [ -n "$config_base" ]; then
Jeff Mahoney 32677c
	    # We need to diff and re-merge to compare to the original,
Jeff Mahoney 32677c
	    # otherwise we'll see the differences between default
Jeff Mahoney 32677c
	    # and vanilla in addition to the changes made during this run.
Michal Marek 838fb1
	    ${scripts}/config-diff "$config_base" .config > config-new.diff
Michal Marek 608c23
	    for opt in "${precious_options[@]}"; do
Michal Marek 608c23
		    if ! grep -q -w "$opt" config-new.diff; then
Michal Marek 608c23
			    grep -w "$opt" .config >>config-new.diff
Michal Marek 608c23
		    fi
Michal Marek 608c23
	    done
Michal Marek 838fb1
	    ${scripts}/config-merge "$config_base" config-new.diff > config-new
Jeff Mahoney 32677c
	    if ! $silent; then
Jeff Mahoney 32677c
		diff -U0 $config_orig config-new|grep -v ^@@
Jeff Mahoney 32677c
	    fi
Jeff Mahoney 32677c
	    mv config-new.diff "$config"
Jeff Mahoney 32677c
	    rm -f config-new
Jeff Mahoney 32677c
Jeff Mahoney 32677c
	else
Jeff Mahoney 32677c
	    if ! $silent; then
Jeff Mahoney 32677c
		diff -U0 $config_orig .config|grep -v ^@@
Jeff Mahoney 32677c
	    fi
Jeff Mahoney 32677c
	    cp .config "$config"
Jeff Mahoney 32677c
	fi
Jeff Mahoney 32677c
	rm -f $config_orig
Michal Marek ff0e55
        continue
Michal Marek ff0e55
    fi
Michal Marek ff0e55
    differences="$(
Jeff Mahoney 32677c
        diff -bU0 <(filter_config $config_orig) <(filter_config .config) | \
Michal Marek ff0e55
        grep '^[-+][^-+]'
Michal Marek ff0e55
    )"
Michal Marek ff0e55
    if echo "$differences" | grep -q '^+' ; then
Michal Marek ff0e55
        echo "Changes in ${config#$prefix} after running make oldconfig:"
Michal Marek ff0e55
        echo "$differences"
Michal Marek ff0e55
        err=1
Michal Marek 1caa97
    fi
Jeff Mahoney 32677c
    rm $config_orig
Michal Marek 3c2527
done
Michal Marek ff0e55
Michal Marek ff0e55
exit $err