#!/bin/sh

echo "/* Automatically generated by create_config - do not modify */"

while read line; do

case $line in
 VERSION=*) # configuration
    version=${line#*=}
    major=$(echo "$version" | cut -d. -f1)
    minor=$(echo "$version" | cut -d. -f2)
    micro=$(echo "$version" | cut -d. -f3)
    echo "#define QEMU_VERSION \"$version\""
    echo "#define QEMU_VERSION_MAJOR $major"
    echo "#define QEMU_VERSION_MINOR $minor"
    echo "#define QEMU_VERSION_MICRO $micro"
    ;;
 qemu_*dir=* | qemu_*path=*) # qemu-specific directory configuration
    name=${line%=*}
    value=${line#*=}
    define_name=$(echo $name | LC_ALL=C tr '[a-z]' '[A-Z]')
    eval "define_value=\"$value\""
    echo "#define CONFIG_$define_name \"$define_value\""
    # save for the next definitions
    eval "$name=\$define_value"
    ;;
 prefix=*)
    # save for the next definitions
    prefix=${line#*=}
    ;;
 IASL=*) # iasl executable
    value=${line#*=}
    echo "#define CONFIG_IASL $value"
    ;;
 CONFIG_AUDIO_DRIVERS=*)
    drivers=${line#*=}
    echo "#define CONFIG_AUDIO_DRIVERS \\"
    for drv in $drivers; do
      echo "    \"${drv}\",\\"
    done
    echo ""
    ;;
 CONFIG_BDRV_RW_WHITELIST=*)
    echo "#define CONFIG_BDRV_RW_WHITELIST\\"
    for drv in ${line#*=}; do
      echo "    \"${drv}\",\\"
    done
    echo "    NULL"
    ;;
 CONFIG_BDRV_RO_WHITELIST=*)
    echo "#define CONFIG_BDRV_RO_WHITELIST\\"
    for drv in ${line#*=}; do
      echo "    \"${drv}\",\\"
    done
    echo "    NULL"
    ;;
 CONFIG_*='$(CONFIG_SOFTMMU)'|CONFIG_*=y) # configuration
    name=${line%=*}
    echo "#define $name 1"
    ;;
 CONFIG_*=*) # configuration
    name=${line%=*}
    value=${line#*=}
    echo "#define $name $value"
    ;;
 HAVE_*=y) # configuration
    name=${line%=*}
    echo "#define $name 1"
    ;;
 HAVE_*=*) # configuration
    name=${line%=*}
    value=${line#*=}
    echo "#define $name $value"
    ;;
 ARCH=*) # configuration
    arch=${line#*=}
    arch_name=$(echo $arch | LC_ALL=C tr '[a-z]' '[A-Z]')
    echo "#define HOST_$arch_name 1"
    ;;
 HOST_USB=*)
    # do nothing
    ;;
 HOST_CC=*)
    # do nothing
    ;;
 HOST_*=y) # configuration
    name=${line%=*}
    echo "#define $name 1"
    ;;
 HOST_*=*) # configuration
    name=${line%=*}
    value=${line#*=}
    echo "#define $name $value"
    ;;
 TARGET_BASE_ARCH=*) # configuration
    target_base_arch=${line#*=}
    base_arch_name=$(echo $target_base_arch | LC_ALL=C tr '[a-z]' '[A-Z]')
    echo "#define TARGET_$base_arch_name 1"
    ;;
 TARGET_XML_FILES=*)
    # do nothing
    ;;
 TARGET_ABI_DIR=*)
    # do nothing
    ;;
 TARGET_NAME=*)
    target_name=${line#*=}
    echo "#define TARGET_NAME \"$target_name\""
    ;;
 TARGET_DIRS=*)
    # do nothing
    ;;
 TARGET_*=y) # configuration
    name=${line%=*}
    echo "#define $name 1"
    ;;
 TARGET_*=*) # configuration
    name=${line%=*}
    value=${line#*=}
    echo "#define $name $value"
    ;;
 DSOSUF=*)
    echo "#define HOST_DSOSUF \"${line#*=}\""
    ;;
esac

done # read
