#!/bin/sh

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

while read line; do

case $line in
 VERSION=*) # configuration
    version=${line#*=}
    echo "#define QEMU_VERSION \"$version\""
    ;;
 PKGVERSION=*) # configuration
    pkgversion=${line#*=}
    echo "#define QEMU_PKGVERSION \"$pkgversion\""
    ;;
 qemu_*dir=*) # 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#*=}
    ;;
 CONFIG_AUDIO_DRIVERS=*)
    drivers=${line#*=}
    echo "#define CONFIG_AUDIO_DRIVERS \\"
    for drv in $drivers; do
      echo "    &${drv}_audio_driver,\\"
    done
    echo ""
    ;;
 CONFIG_BDRV_WHITELIST=*)
    echo "#define CONFIG_BDRV_WHITELIST \\"
    for drv in ${line#*=}; do
      echo "    \"${drv}\",\\"
    done
    echo "    NULL"
    ;;
 CONFIG_*=y) # configuration
    name=${line%=*}
    echo "#define $name 1"
    ;;
 CONFIG_*=*) # 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_ARCH=*) # configuration
    target_arch=${line#*=}
    echo "#define TARGET_ARCH \"$target_arch\""
    ;;
 TARGET_BASE_ARCH=*) # configuration
    target_base_arch=${line#*=}
    if [ "$target_base_arch" != "$target_arch" ]; then
      base_arch_name=`echo $target_base_arch | LC_ALL=C tr '[a-z]' '[A-Z]'`
      echo "#define TARGET_$base_arch_name 1"
    fi
    ;;
 TARGET_XML_FILES=*)
    # do nothing
    ;;
 TARGET_ABI_DIR=*)
    # do nothing
    ;;
 TARGET_ARCH2=*)
    # do nothing
    ;;
 TARGET_DIRS=*)
    # do nothing
    ;;
 TARGET_*=y) # configuration
    name=${line%=*}
    echo "#define $name 1"
    ;;
 TARGET_*=*) # configuration
    name=${line%=*}
    value=${line#*=}
    echo "#define $name $value"
    ;;
esac

done # read
