#!/bin/bash

options=(
    CONFIG_BLK_DEBUG_FS
    CONFIG_DEBUG_ATOMIC_SLEEP
    CONFIG_DEBUG_BOOT_PARAMS
    CONFIG_DEBUG_BUGVERBOSE
    CONFIG_DEBUG_FS
    CONFIG_DEBUG_INFO
    CONFIG_DEBUG_INFO_DWARF4
    CONFIG_DEBUG_INFO_REDUCED
    CONFIG_DEBUG_KERNEL
    CONFIG_DEBUG_KMEMLEAK
    CONFIG_DEBUG_LIST
    CONFIG_DEBUG_LOCK_ALLOC
    CONFIG_DEBUG_MUTEXES
    CONFIG_DEBUG_OBJECTS
    CONFIG_DEBUG_OBJECTS_RCU_HEAD
    CONFIG_DEBUG_PAGEALLOC
    CONFIG_DEBUG_PER_CPU_MAPS
    CONFIG_DEBUG_PI_LIST
    CONFIG_DEBUG_PREEMPT
    CONFIG_DEBUG_PREEMPT_VOLUNTARY
    CONFIG_DEBUG_SG
    CONFIG_DEBUG_SPINLOCK
    CONFIG_DEBUG_STACKOVERFLOW
    CONFIG_DEBUG_STACK_USAGE
    CONFIG_DETECT_HUNG_TASK
    CONFIG_DYNAMIC_DEBUG
    CONFIG_HARDLOCKUP_DETECTOR
    CONFIG_KASAN
    CONFIG_MAGIC_SYSRQ
    CONFIG_PREEMPT
    CONFIG_PROVE_LOCKING
    CONFIG_PROVE_RCU
    CONFIG_SCHED_DEBUG
    CONFIG_SLUB
    CONFIG_SLUB_DEBUG_ON
    CONFIG_WQ_WATCHDOG
)

usage() {
    echo "Usage: $(basename "$0") [-t]"
    exit 1
}

test_options() {
    for o in "${options[@]}"; do
	grep -w "$o" .config || echo "??? $o"
    done
}

set_var() {
    if grep -qw "$1" .config; then
        sed -i "s/^\(\|# \)$1\( \|=\).*/$1=$2/" .config
    else
        echo "$1=$2" >> .config
    fi
}

enable() {
    set_var "$1" y
}

set_options() {
    for o in "${options[@]}"; do
	enable "$o"
    done
    set_var CONFIG_LOCALVERSION '"-dbg"'
}

while [ $# -gt 0 ] && [ "$1" != "--" ]; do
    case "$1" in
	-t) test=1; shift; break;;
	*) usage;;
    esac
done

if [ -n "$test" ]; then
    test_options
else
    set_options
fi
