#!/bin/sh

config_h="${1}"
api_version_txt="${2}"
socket_base_impl_h="${3}"
debug=0
my_name="`basename "$0"`"

if test -z "${config_h}" -o -z "${api_version_txt}" -o -z "${socket_base_impl_h}"; then
	echo "usage: ${my_name} config.h API_VersionNum.txt EClientSocketBaseImpl.h" 1>&2
	exit 1
fi

major_ver="-1"
minor_ver="-1"
micro_ver="-1"
pack_ver=""
ib_major="-1"
ib_minor="-1"
ib_ver=""
ib_client_version=""

## get twsapi version
version_cmd="`sed -n -e 's/^#define[ \t][ \t]*PACKAGE_VERSION[ \t][ \t]*"\([^\.]*\)\.\([^\.]*\)\.\([^\.]\)"$/major_ver="\1";minor_ver="\2";micro_ver="\3"/p' "${config_h}"`"
test "${debug}" != "0" && echo "eval ${version_cmd}" 1>&2
eval "${version_cmd}" || exit 1

version_cmd="`sed -n -e 's/^#define[ \t][ \t]*PACKAGE_VERSION[ \t][ \t]*\(.*\)$/pack_ver=\1/p' "${config_h}"`"
test "${debug}" != "0" && echo "eval ${version_cmd}" 1>&2
eval "${version_cmd}" || exit 1

fail="0"
test "${major_ver}" -ge "0" || fail=1
test "${minor_ver}" -ge "0" || fail=1
test "${micro_ver}" -ge "0" || fail=1
test "${pack_ver}" = "${major_ver}.${minor_ver}.${micro_ver}" || fail=1

if test ${fail} != "0" -o "${debug}" != "0" ; then
	echo "major_ver: '${major_ver}'" 1>&2
	echo "minor_ver: '${minor_ver}'" 1>&2
	echo "micro_ver: '${micro_ver}'" 1>&2
	echo "pack_ver: '${pack_ver}'" 1>&2
fi

if test ${fail} != "0"; then
	echo "${my_name}: failed to get version info from '${config_h}'" 1>&2
	exit 1
fi


## get IB API version
API_Version="none"
. "${api_version_txt}" || exit 1
ib_ver="${API_Version}"

version_cmd="`sed -n -e 's/^API_Version=\([^\.]*\)\.\([^\.]*\)$/ib_major="\1";ib_minor="\2"/p' "${api_version_txt}"`"
test "${debug}" != "0" && echo "eval ${version_cmd}" 1>&2
eval "${version_cmd}" || exit 1

fail="0"
test "${ib_major}" -ge "0" || fail=1
test "${ib_minor}" -ge "0" || fail=1
test "${ib_ver}" = "${ib_major}.${ib_minor}" || fail=1

if test ${fail} != "0" -o "${debug}" != "0" ; then
        echo "ib_major: '${ib_major}'" 1>&2
        echo "ib_minor: '${ib_minor}'" 1>&2
        echo "ib_ver: '${ib_ver}'" 1>&2
fi

if test ${fail} != "0"; then
        echo "${my_name}: failed to get version info from '${api_version_txt}'" 1>&2
        exit 1
fi

## get CLIENT_VERSION
version_cmd="`sed -n 's/^[ \t]*const[ \t]*int[ \t]*\(CLIENT_VERSION\)[ \t]*=[ \t]*\([0-9]*\)[ \t]*;[ \t]*/ib_client_version=\2/p' "${socket_base_impl_h}"`"
test "${debug}" != "0" && echo "eval ${version_cmd}" 1>&2
eval "${version_cmd}" || exit 1

fail="0"
test "${ib_client_version}" -ge "0" || fail=1

if test ${fail} != "0" -o "${debug}" != "0" ; then
	echo "ib_client_version: '${ib_client_version}'" 1>&2
fi

if test ${fail} != "0"; then
	echo "${my_name}: failed to get version info from '${socket_base_impl_h}'" 1>&2
	exit 1
fi

## export our version numbers
TWSAPI_VERSION="${pack_ver}"
TWSAPI_VERSION_NUMBER="`expr "${major_ver}" \* 10000 + "${minor_ver}" \* 100 + "${micro_ver}"`"

TWSAPI_IB_VERSION="${ib_ver}"
TWSAPI_IB_VERSION_NUMBER="`expr "${ib_major}" \* 100 + "${ib_minor}"`"

TWSAPI_IB_CLIENT_VERSION="${ib_client_version}"

if test "${debug}" != "0"; then
	echo "${TWSAPI_VERSION}" 1>&2
	echo "${TWSAPI_VERSION_NUMBER}" 1>&2
	echo "${TWSAPI_IB_VERSION}" 1>&2
	echo "${TWSAPI_IB_VERSION_NUMBER}" 1>&2
fi

cat <<EOF
/***
 * twsapi_config.h
 * compile-time version and configure informations for the twsapi library
 *
 * Author:  Ruediger Meier <sweet_f_a@gmx.de>
 *
 ***/

#ifndef TWSAPI_VERSION_H
#define TWSAPI_VERSION_H

/* the version string like "1.2.3" */
#define TWSAPI_VERSION "${TWSAPI_VERSION}"

/* the version number: 1.2.3 value is 10203 */
#define TWSAPI_VERSION_NUMBER ${TWSAPI_VERSION_NUMBER}

/* IB's original version string like "1.2.3" */
#define TWSAPI_IB_VERSION "${TWSAPI_IB_VERSION}"

/* IB's original version number: 1.2.3 value is 10203 */
#define TWSAPI_IB_VERSION_NUMBER ${TWSAPI_IB_VERSION_NUMBER}

/* IB's CLIENT_VERSION (protocol version) */
#define TWSAPI_IB_CLIENT_VERSION ${TWSAPI_IB_CLIENT_VERSION}

#endif
EOF
