#!/usr/bin/env bash
# generate expire time in python: time.mktime((2012, 5, 1, 0, 0, 0, 0, 0, -1))
#    -DAPP_EXPIRE_TIME=1364796000 \
set -e

if [ -z "$O3" ]; then
    echo O3 var must point to ovpn3 tree
    exit 1
fi

cd $O3/core
. vars/android-sdk-path
cd javacli
git clean -q -fXd .

if [ "$PKG" ]; then
    pkg=$PKG
    pkg_id_def="-DOPENVPN_PACKAGE_ID=${PKG//./_}"
else
    pkg=net.openvpn.openvpn
    pkg_id_def="-DOPENVPN_PACKAGE_ID=net_openvpn_openvpn"
fi
echo PACKAGE $PKG

if [ "$PT_PROXY" = "1" ] && [ -d "$O3/common" ]; then
    common="-I$O3/common -DPRIVATE_TUNNEL_PROXY"
else
    common=""
fi

echo SWIG
swig -c++ -java -package $pkg -I$O3/core/client -I$O3/core ovpncli.i

TARGETS=${TARGETS:-android-a7a android-a8a android-x86}

for TARGET in $TARGETS; do

if [ "$DEBUG_BUILD" = "1" ]; then
    . ../vars/vars-${TARGET}-dbg
    vis1=""
    vis2=""
    opt2="$pkg_id_def $LIB_OPT_LEVEL"
else
    . ../vars/vars-${TARGET}
    vis1="-fvisibility=hidden"
    vis2='-DSWIGEXPORT=__attribute__((visibility("default")))'
    opt2="$pkg_id_def -Os"
fi

if [ "$OPENSSL" = "1" ]; then
    ssl_def="-DUSE_OPENSSL"
    ssl_inc="-I$DEP_DIR/openssl/openssl-$PLATFORM/include"
    ssl_lib="-lssl -lcrypto"
    ssl_libdir="-L$DEP_DIR/openssl/openssl-$PLATFORM/lib"
else
    ssl_def="-DUSE_MBEDTLS"
    ssl_inc="-I$DEP_DIR/mbedtls/mbedtls-$PLATFORM/include"
    ssl_lib="-lmbedtls"
    ssl_libdir="-L$DEP_DIR/mbedtls/mbedtls-$PLATFORM/library"
fi

[ -z "$GPP_CMD" ] && GPP_CMD=g++

echo CORE $ABI
$GPP_CMD \
    $CXX_COMPILER_FLAGS \
    $PLATFORM_FLAGS \
    $OTHER_COMPILER_FLAGS \
    $LIB_OPT_LEVEL $LIB_FPIC \
    -Wall -Wno-sign-compare -Wno-unused-parameter \
    -Wno-unused-local-typedefs \
    $vis1 \
    $ssl_def \
    -DUSE_ASIO \
    -DASIO_STANDALONE \
    -DASIO_NO_DEPRECATED \
    -DHAVE_LZ4 \
    -DOPENVPN_USE_TLS_MD5 \
    -DASIO_HAS_STD_STRING_VIEW \
    -I$O3/core/client \
    -I$O3/core \
    $common \
    -I$DEP_DIR/asio/asio/include \
    $ssl_inc \
    -I$DEP_DIR/lz4/lz4-$PLATFORM/include \
    -c $O3/core/client/ovpncli.cpp

echo WRAP $ABI
$GPP_CMD \
    $CXX_COMPILER_FLAGS \
    $PLATFORM_FLAGS \
    $OTHER_COMPILER_FLAGS \
    $opt2 $LIB_FPIC \
    -fno-strict-aliasing \
    -Wall \
    $vis1 $vis2 \
    -I$O3/core/client \
    -I$O3/core \
    $common \
    $ssl_libdir \
    -L$DEP_DIR/lz4/lz4-$PLATFORM/lib \
    ovpncli_wrap.cxx \
    android/jellybean_hack.cpp \
    android/cpu.cpp \
    ovpncli.o \
    -o libovpncli.so \
    -shared -Wl,-soname,libovpncli.so \
    $ssl_lib \
    -llz4 \
    -llog

if [ "$DEBUG_BUILD" != "1" ]; then
    echo STRIP $ABI
    strip libovpncli.so
fi

mkdir -p build/libs/$ABI
mv libovpncli.so build/libs/$ABI/
rm ovpncli.o
done

mv ovpncli_wrap.cxx ovpncli_wrap.h ovpncli.java ovpncliJNI.java SWIGTYPE_*.java ClientAPI_*.java build/
git clean -q -fX .

tar -czf android-core-build.tgz build
mv android-core-build.tgz $O3/
