#!/bin/sh
#
# create_config.sh
#
# Script to create config.h for compatibility with
# different asterisk versions.
#
# (C) 2005 Cytronics & Melware
# Armin Schindler <armin@melware.de>
#

CONFIGFILE="config.h"
rm -f "$CONFIGFILE"

if [ $# -lt 1 ]; then
	echo >&2 "Missing argument"
	exit 1
fi

INCLUDEDIR="$1/asterisk"

if [ ! -d "$INCLUDEDIR" ]; then
	echo >&2 "Include directory '$INCLUDEDIR' does not exist"
	exit 1
fi

echo "Checking Asterisk structures and files ..."

echo "/*" >$CONFIGFILE
echo " * automatically generated by $0 `date`" >>$CONFIGFILE
echo " */" >>$CONFIGFILE
echo >>$CONFIGFILE
echo "#ifndef CHAN_CAPI_CONFIG_H" >>$CONFIGFILE
echo "#define CHAN_CAPI_CONFIG_H" >>$CONFIGFILE
echo >>$CONFIGFILE

if grep -q "ast_moh_start" $INCLUDEDIR/musiconhold.h; then
	echo "#define CC_AST_MOH_PRESENT" >>$CONFIGFILE
	echo " * found 'ast_moh_start'"
else
	echo "#undef CC_AST_MOH_PRESENT" >>$CONFIGFILE
	echo " * no 'ast_moh_start'"
fi

if grep -q "struct ast_codec_pref" $INCLUDEDIR/channel.h; then
	echo "#undef CC_OLD_CODEC_FORMATS" >>$CONFIGFILE
	echo " * found 'struct ast_codec_pref'"
else
	echo "#define CC_OLD_CODEC_FORMATS" >>$CONFIGFILE
	echo " * no 'struct ast_codec_pref'"
fi

if grep -q "struct ast_channel_tech" $INCLUDEDIR/channel.h; then
	echo "#define CC_AST_HAVE_TECH_PVT" >>$CONFIGFILE
	echo " * found 'struct ast_channel_tech'"
else
	echo "#undef CC_AST_HAVE_TECH_PVT" >>$CONFIGFILE
	echo " * no 'struct ast_channel_tech', using old pvt"
fi

if grep -q "ast_bridged_channel" $INCLUDEDIR/channel.h; then
	echo "#define CC_AST_HAS_BRIDGED_CHANNEL" >>$CONFIGFILE
	echo " * found 'ast_bridged_channel'"
else
	echo "#undef CC_AST_HAS_BRIDGED_CHANNEL" >>$CONFIGFILE
	echo " * no 'ast_bridged_channel'"
fi

if grep -q "ast_bridge_result" $INCLUDEDIR/channel.h; then
	echo "#define CC_AST_HAS_BRIDGE_RESULT" >>$CONFIGFILE
	echo " * found 'ast_bridge_result'"
else
	echo "#undef CC_AST_HAS_BRIDGE_RESULT" >>$CONFIGFILE
	echo " * no 'ast_bridge_result'"
fi

if grep -q "struct ast_channel \*\*rc, int timeoutms" $INCLUDEDIR/channel.h; then
	echo "#define CC_AST_BRIDGE_WITH_TIMEOUTMS" >>$CONFIGFILE
	echo " * found bridge with timeoutms"
else
	echo "#undef CC_AST_BRIDGE_WITH_TIMEOUTMS" >>$CONFIGFILE
	echo " * no timeoutms in bridge"
fi

if grep -q "ast_dsp_process*needlock" $INCLUDEDIR/dsp.h; then
	echo "#define CC_AST_DSP_PROCESS_NEEDLOCK" >>$CONFIGFILE
	echo " * ast_dsp_process() needs 'needlock'"
else
	echo "#undef CC_AST_DSP_PROCESS_NEEDLOCK" >>$CONFIGFILE
	echo " * ast_dsp_process() without 'needlock'"
fi

if grep -q "ast_dsp_set_digitmode" $INCLUDEDIR/dsp.h; then
	echo "#define CC_AST_DSP_SET_DIGITMODE" >>$CONFIGFILE
	echo " * found 'ast_dsp_set_digitmode'"
else
	echo "#undef CC_AST_DSP_SET_DIGITMODE" >>$CONFIGFILE
	echo " * no 'ast_dsp_set_digitmode'"
fi

if grep -q "struct ast_callerid" $INCLUDEDIR/channel.h; then
	echo "#define CC_AST_CHANNEL_HAS_CID" >>$CONFIGFILE
	echo " * found 'struct ast_callerid'"
else
	echo "#undef CC_AST_CHANNEL_HAS_CID" >>$CONFIGFILE
	echo " * no 'struct ast_callerid'"
fi

if grep -q "struct timeval delivery" $INCLUDEDIR/frame.h; then
	echo "#define CC_AST_FRAME_HAS_TIMEVAL" >>$CONFIGFILE
	echo " * found 'struct timeval delivery'"
else
	echo "#undef CC_AST_FRAME_HAS_TIMEVAL" >>$CONFIGFILE
	echo " * no 'struct timeval delivery'"
fi

if grep -q "transfercapability" $INCLUDEDIR/channel.h; then
	echo "#define CC_AST_CHANNEL_HAS_TRANSFERCAP" >>$CONFIGFILE
	echo " * found 'transfercapability'"
else
	echo "#undef CC_AST_CHANNEL_HAS_TRANSFERCAP" >>$CONFIGFILE
	echo " * no 'transfercapability'"
fi

if grep -q "ast_set_read_format(" $INCLUDEDIR/channel.h; then
	echo "#define CC_AST_HAVE_SET_READ_FORMAT" >>$CONFIGFILE
	echo " * found 'ast_set_read_format'"
else
	echo "#undef CC_AST_HAVE_SET_READ_FORMAT" >>$CONFIGFILE
	echo " * no 'ast_set_read_format'"
fi

if grep -q "ast_set_write_format(" $INCLUDEDIR/channel.h; then
	echo "#define CC_AST_HAVE_SET_WRITE_FORMAT" >>$CONFIGFILE
	echo " * found 'ast_set_write_format'"
else
	echo "#undef CC_AST_HAVE_SET_WRITE_FORMAT" >>$CONFIGFILE
	echo " * no 'ast_set_write_format'"
fi

if grep -q "ast_config_load" $INCLUDEDIR/config.h; then
	echo " * found 'ast_config_load'"
else
	echo "#define ast_config_load(x) ast_load(x)" >>$CONFIGFILE
	echo "#define ast_config_destroy(x) ast_destroy(x)" >>$CONFIGFILE
	echo " * no 'ast_config_load'"
fi

if grep -q "AST_CONTROL_HOLD" $INCLUDEDIR/frame.h; then
	echo "#define CC_AST_CONTROL_HOLD" >>$CONFIGFILE
	echo " * found 'AST_CONTROL_HOLD'"
else
	echo "#undef CC_AST_CONTROL_HOLD" >>$CONFIGFILE
	echo " * no 'AST_CONTROL_HOLD'"
fi

if grep -q "struct ast_custom_function " $INCLUDEDIR/pbx.h; then
	echo "#define CC_AST_CUSTOM_FUNCTION" >>$CONFIGFILE
	echo " * found 'struct ast_custom_function'"
else
	echo "#undef CC_AST_CUSTOM_FUNCTION" >>$CONFIGFILE
	echo " * no 'struct ast_custom_function'"
fi

if [ -f "$INCLUDEDIR/devicestate.h" ]; then
	echo "#undef CC_AST_NO_DEVICESTATE" >>$CONFIGFILE
	echo " * found 'devicestate.h'"
else
	echo "#define CC_AST_NO_DEVICESTATE" >>$CONFIGFILE
	echo " * no 'devicestate.h'"
fi

echo "#define ___CC_AST_VERSION(a,b) a##b" >>$CONFIGFILE
echo "#define __CC_AST_VERSION(a,b) ___CC_AST_VERSION(a,b)" >>$CONFIGFILE

if grep -q "ASTERISK_VERSION_NUM.*108" $INCLUDEDIR/version.h; then
	echo "#define CC_AST_VERSION __CC_AST_VERSION(0x,ASTERISK_VERSION_NUM)" >>$CONFIGFILE
	echo " * found Asterisk version 1.8.x"
else
if grep -q "ASTERISK_VERSION_NUM.*106" $INCLUDEDIR/version.h; then
	echo "#define CC_AST_VERSION __CC_AST_VERSION(0x,ASTERISK_VERSION_NUM)" >>$CONFIGFILE
	echo " * found Asterisk version 1.6.x"
else
if grep -q "ASTERISK_VERSION_NUM.*104" $INCLUDEDIR/version.h; then
	echo "#define CC_AST_VERSION __CC_AST_VERSION(0x,ASTERISK_VERSION_NUM)" >>$CONFIGFILE
	echo " * found Asterisk version 1.4.x"
else
if grep -q "ASTERISK_VERSION_NUM.*0102" $INCLUDEDIR/version.h; then
	echo "#define CC_AST_VERSION __CC_AST_VERSION(0x,ASTERISK_VERSION_NUM)" >>$CONFIGFILE
	echo " * found Asterisk version 1.2.x"
else
	echo "#define CC_AST_VERSION 0x10200" >>$CONFIGFILE
	echo " * forcing Asterisk version 1.2.0"
fi
fi
fi
fi

if [ -f "$INCLUDEDIR/version.h" ]; then
	echo "#include <$INCLUDEDIR/version.h>" >>$CONFIGFILE
	echo " * found version header file: $INCLUDEDIR/version.h"
else
	echo " * version header file not found!"
fi

echo "" >>$CONFIGFILE
echo "#endif /* CHAN_CAPI_CONFIG_H */" >>$CONFIGFILE
echo "" >>$CONFIGFILE

echo "config.h complete."
exit 0


