#!/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\""
    ;;
 prefix=* | *dir=*) # directory configuration
    name=${line%=*}
    value=${line#*=}
    define_name=`echo $name | tr '[:lower:]' '[:upper:]'`
    eval "define_value=\"$value\""
    echo "#define CONFIG_QEMU_$define_name \"$define_value\""
    # save for the next definitions
    eval "$name=\$define_value"
    ;;
 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 | tr '[:lower:]' '[:upper:]'`
    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 | tr '[:lower:]' '[:upper:]'`
      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
