#!/bin/bash -
#
#  Copyright (C) 2004-2012 Savoir-Faire Linux Inc.
#
#  Author: Emeric Vigier <emeric.vigier@savoirfairelinux.com>
#
#  This program is free software; you can redistribute it and/or modify
#  it under the terms of the GNU General Public License as published by
#  the Free Software Foundation; either version 3 of the License, or
#  (at your option) any later version.
#
#  This program is distributed in the hope that it will be useful,
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#  GNU General Public License for more details.
#
#  You should have received a copy of the GNU General Public License
#  along with this program; if not, write to the Free Software
#  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#  Additional permission under GNU GPL version 3 section 7:
#
#  If you modify this program, or any covered work, by linking or
#  combining it with the OpenSSL project's OpenSSL library (or a
#  modified version of that library), containing parts covered by the
#  terms of the OpenSSL or SSLeay licenses, Savoir-Faire Linux Inc.
#  grants you additional permission to convey the resulting work.
#  Corresponding Source for a non-source form of such a combination
#  shall include the source code for the parts of OpenSSL used as well
#  as that of the covered work.
#

# input: jni/sflphone/daemon/src/dbus/jni_interface.i
# output: sflphoneservice_loader.c
#         callmanager_wrap.cpp
#         sflphoneservice.java
#         sflphoneserviceJNI.java
#         ManagerImpl.java

SRCDIR=jni/sflphone/daemon/src
NATIVE=client/android
NATIVEDIR=$SRCDIR/$NATIVE
PACKAGE=com.savoirfairelinux.sflphone.service
PACKAGEDIR=src/com/savoirfairelinux/sflphone/service
ROOT=`pwd`

echo "in $ROOT"

echo "Checking that swig is 2.0.6 or later"
SWIGVER=`swig -version | \
    grep -i "SWIG version" | \
    awk '{print $3}'`
SWIGVER1=`echo $SWIGVER | \
    awk '{split($0, array, ".")} END{print array[1]}'`
SWIGVER2=`echo $SWIGVER | \
    awk '{split($0, array, ".")} END{print array[2]}'`
SWIGVER3=`echo $SWIGVER | \
    awk '{split($0, array, ".")} END{print array[3]}'`

echo swig-$SWIGVER1.$SWIGVER2.$SWIGVER3

if [[ $SWIGVER1 -ge 2 ]]; then
    echo "swig version is greater than 2.x"
    if [[ $SWIGVER1 -gt 2 ]]; then
        echo "swig version is greater than 3.x"
    else
        if [[ $SWIGVER2 -ge 1 ]]; then
            echo "swig version is greater than 2.1"
        else
            echo "swig version is less than 2.1"
            if [[ $SWIGVER3 -ge 6 ]]; then
                echo "swig version is greater than 2.0.6"
            else
                echo "swig version is less than 2.0.6"
                echo "exiting..."
                exit 4
            fi
        fi
    fi
else
    echo "swig version is less than 2.x"
    echo "exiting..."
    exit 3
fi




# FIXME
echo "Generating callmanager_wrap.cpp..."

swig -v -c++ -java \
-package $PACKAGE \
-outdir $PACKAGEDIR \
-o $SRCDIR/client/android/callmanager_wrap.cpp $SRCDIR/client/android/jni_interface.i

pushd $SRCDIR
echo "in $PWD"

echo "Generating sflphoneservice_loader.c..."
python client/android/JavaJNI2CJNI_Load.py \
-i $ROOT/$PACKAGEDIR/SFLPhoneserviceJNI.java \
-o $NATIVE/sflphoneservice_loader.c \
-t client/android/sflphoneservice.c.template \
-m SFLPhoneservice \
-p $PACKAGE

echo "Appending callmanager_wrap.cpp..."
cat $NATIVE/sflphoneservice_loader.c >> client/android/callmanager_wrap.cpp


#if [ "" != "$(find -iname sflphoneservice_loader.c)" ]; then
	#
#fi
#  callmanager_wrap.cpp
#  callmanager_wrap.cpp
#  sflphoneservice.java
#  sflphoneserviceJNI.java
#  ManagerImpl.java

echo -n "in " && popd
echo "Done"
exit 0
