#!/bin/bash
#
# miniconfig - utility to minimize your coreboot config files
#
# Copyright 2015 Google Inc.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#

CONFIG=$1
NEWCONFIG=$2

CONF=build/util/kconfig/conf
KCONFIG=src/Kconfig
DOTCONFIG=.config
PREVCONFIG=.config.prev
TMPCONFIG=.config.mini

recreate_config()
{
	$CONF --olddefconfig $KCONFIG &> /dev/null
}

if [ "$CONFIG" == "" ]; then
  printf "usage: util/miniconfig/miniconfig [path to config file] <path to new config file>\n"
  exit 0
fi

if [ ! -r "$CONFIG" ]; then
  printf "Can't read $CONFIG.\n"
  exit 1
fi

if [ "$CONFIG" == .config ]; then
  printf "Can't use .config, it's overwritten. Make a backup.\n"
  exit 1
fi

if [ ! -x "$CONF" ]; then
  printf "conf utility at $CONF not available.\n"
  exit 1
fi

# Start out by creating a default config file for a mainboard
VENDOR=$( grep ^CONFIG_VENDOR "$CONFIG" )
BOARD=$( grep ^CONFIG_BOARD "$CONFIG" | grep -v ROMSIZE | grep -v SPECIFIC_OPTIONS )

printf "$VENDOR\n$BOARD\n" > "$TMPCONFIG"
cp "$TMPCONFIG" "$DOTCONFIG"
recreate_config

LINES=$( cat "$CONFIG" | wc -l )
CUR=1

# Now go through each line of the existing, large config file, add it to our
# new minimal config file, and see if it makes a difference when running "make
# olddefconfig". If it does, keep the line, otherwise discard it.

cat "$CONFIG" | while read L; do
  printf "\rProcessing $CONFIG - $CUR / $LINES (%d%%)" $(( $CUR * 100 / $LINES))
  mv "$DOTCONFIG" "$PREVCONFIG"
  cp "$TMPCONFIG" "$DOTCONFIG"
  echo "$L" >> "$DOTCONFIG"
  recreate_config

  if ! diff -q "$DOTCONFIG" "$PREVCONFIG" > /dev/null; then
    echo "$L" >> "$TMPCONFIG"
  fi
  CUR=$(( $CUR + 1 ))
done

echo

if [ "$NEWCONFIG" != "" ]; then
  printf "Writing new, minimized config to $NEWCONFIG\n"
  mv "$TMPCONFIG" "$NEWCONFIG"
else
  printf "Overwriting $CONFIG with new, minimized config.\n"
  mv "$TMPCONFIG" "$CONFIG"
fi
