100 lines
2.9 KiB
Bash
100 lines
2.9 KiB
Bash
#!/bin/sh
|
|
|
|
if [ $# -lt 3 ]; then
|
|
echo "Usage: extractVendorSDKCfg.sh <cfg prefix> <input file> <output file> [C header file]"
|
|
echo -e "\tThis script will extract configs from <input file>"
|
|
echo -e "\tOutput file is used to store extracted configs"
|
|
echo -e "\t<cfg prefix> "
|
|
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
|