#!/bin/sh if [ $# -lt 3 ]; then echo "Usage: extractVendorSDKCfg.sh [C header file]" echo -e "\tThis script will extract configs from " echo -e "\tOutput file is used to store extracted configs" echo -e "\t " exit -1 fi OPENWRT_CFG_FILE=$2 if [ ! -e $OPENWRT_CFG_FILE ]; then echo "File '$OPENWRT_CFG_FILE' not found!" exit -2 fi if [ -z "$1" ]; then echo "Prefix can't be empty!" exit -3 fi if [ ! -z `echo $1 | grep CONFIG_` ]; then REMOVE_PREFIX_CONFIG=y CFG_PREFIX=`echo $1 | sed "s/CONFIG_//"` # echo;echo "!!!! CFG_PREFIX=$CFG_PREFIX !!!!";echo else CFG_PREFIX=$1 fi if [ -n "$3" ]; then VENDOR_CFG_FILE=$3 else echo "Not specify the output file name" exit -4 fi echo -e "#\n# Automatically generated by make menuconfig + extractVendorSDKCfg.sh : don't edit" > $VENDOR_CFG_FILE echo -e "# `date`\n#\n" >> $VENDOR_CFG_FILE # 1. using 'grep' to filter the vendor configurations which prefix is "CONFIG_${CFG_PREFIX}_" if [ "$REMOVE_PREFIX_CONFIG" = "y" ]; then # 2. using 'sed' to remove prefix 'CONFIG_${CFG_PREFIX}_ cat $OPENWRT_CFG_FILE | grep "CONFIG_${CFG_PREFIX}_" | grep -v "CONFIG_${CFG_PREFIX}_RM_QUOTES_" | sed "s/CONFIG_${CFG_PREFIX}_//" >> $VENDOR_CFG_FILE else # 2. using 'sed' to remove prefix '${CFG_PREFIX}_ cat $OPENWRT_CFG_FILE | grep "CONFIG_${CFG_PREFIX}_" | grep -v "CONFIG_${CFG_PREFIX}_RM_QUOTES_" | sed "s/${CFG_PREFIX}_//" >> $VENDOR_CFG_FILE fi # To collect options which need to remove quotes OPT_RM_QUOTES=`cat $OPENWRT_CFG_FILE | grep "^CONFIG_${CFG_PREFIX}_RM_QUOTES_" | sed "s/${CFG_PREFIX}_RM_QUOTES_//" | sed "s/=y//"` # remove quotes for i in $OPT_RM_QUOTES; do #echo "search '$i'"; sed -n "/\b$i\b/p" $2 old=`sed -n "/\b$i\b/p" $VENDOR_CFG_FILE` new=`echo $old | sed "s/\"//g"` #echo "old=$old";echo "new=$new";echo sed -i "s/$old/$new/g" $VENDOR_CFG_FILE done # create C style header file if [ -n "$4" ]; then mkdir -p $(dirname $4) echo -e "/*\n * Automatically generated by make menuconfig + extractVendorSDKCfg.sh : don't edit\n */\n" > $4 if [ -n "$5" ]; then HEADER_FILE_FLAG=$5 else HEADER_FILE_FLAG=_$(echo $(basename $4) | tr '[:lower:]' '[:upper:]' | sed "s/\./_/")_ fi echo -e "#ifndef $HEADER_FILE_FLAG" >> $4 echo -e "#define $HEADER_FILE_FLAG\n" >> $4 while read cfg; do if [ -z "$cfg" ]; then continue fi # unset configuration if [ "`echo $cfg | cut -c 1`" = "#" ]; then if [ -n "`echo $cfg | grep 'CONFIG_'`" ]; then cfg_name=`echo $cfg | cut -d' ' -f2` echo "#undef $cfg_name" >> $4 fi continue fi cfg_name=`echo $cfg | cut -d'=' -f1` cfg_val=`echo $cfg | cut -d'=' -f2` if [ "$cfg_val" = "m" ]; then echo "#undef $cfg_name" >> $4 echo "#define ${cfg_name}_MODULE 1" >> $4 continue fi if [ "$cfg_val" = "y" ]; then echo "#define $cfg_name 1" >> $4 else echo "#define $cfg_name $cfg_val" >> $4 fi done < $VENDOR_CFG_FILE echo -e "\n#endif" >> $4 fi