#!/bin/bash
[% c("var/set_default_env") -%]
output_dir=[% dest_dir %]/[% c('filename') %]
gradle_repo=$rootdir/[% c('input_files_by_name/gradle-dependencies') %]

# The download script assumes artifact package name is the complete URL path.
# In some cases this is incorrect, so copy those artifacts to correct location
cp -r $gradle_repo/guardianproject/gpmaven/master/* $gradle_repo
cp -r $gradle_repo/dl/android/maven2/* $gradle_repo
cp -r $gradle_repo/maven2/* $gradle_repo

mkdir -p /var/tmp/build $output_dir

[% pc(c('var/compiler'), 'var/setup', {
    compiler_tarfile => c('input_files_by_name/' _ c('var/compiler')),
    gradle_tarfile => c("input_files_by_name/gradle"),
  }) %]
# "Something" still uses this old binary name. Create a link as a workaround.
# The correct fix would involve updating the source and/or using a newer
# version of gradle.
pushd $ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin
for arch in arm armv7a; do
  ln -s llvm-strip "$arch-linux-androideabi-strip"
done
for arch in aarch64 i686 x86_64; do
  ln -s llvm-strip "$arch-linux-android-strip"
done
popd

tar -C /var/tmp/build -xf [% project %]-[% c('version') %].tar.[% c('compress_tar') %]

# Patch projects
cd /var/tmp/build/[% project %]-[% c('version') %]
# Gradle patch provided so that when generating a gradle dependency list, the
# build will pull down the correct android tool versions
patch -p1 < $rootdir/gradle.patch
patch -p1 < $rootdir/0001-Bug-33931-Filter-bridges-in-stream-by-type.patch
patch -p1 < $rootdir/0001-Bug-30318-Add-snowflake-support.patch
patch -p1 < $rootdir/0001-Bug-41361-Add-conjure-support.patch
patch -p1 < $rootdir/0001-Bug-40800-Add-WebTunnel-support.patch

[% FOREACH arch = ['armv7', 'aarch64', 'x86', 'x86_64'] -%]
  # Extract tor-expert-bundle
  tebdir=$rootdir/tor-expert-bundle-[% arch %]
  mkdir $tebdir
  tar -C $tebdir -xf $rootdir/[% c('input_files_by_name/tor-expert-bundle-' _ arch) %]
  ptdir=$tebdir/tor/pluggable_transports

  # Overwrite the obfs4proxy binary provided by Pluto and add Snowflake
  [% IF arch == "armv7" -%]
    cp $ptdir/lyrebird external/pluto/bin/armeabi-v7a/obfs4proxy
    cp $ptdir/lyrebird external/pluto/bin/armeabi/obfs4proxy
    cp $ptdir/snowflake-client external/pluto/bin/armeabi-v7a/
    cp $ptdir/snowflake-client external/pluto/bin/armeabi/
    cp $ptdir/conjure-client external/pluto/bin/armeabi-v7a/
    cp $ptdir/conjure-client external/pluto/bin/armeabi/
    cp $ptdir/webtunnel-client external/pluto/bin/armeabi-v7a/
    cp $ptdir/webtunnel-client external/pluto/bin/armeabi/
  [% ELSIF arch == "aarch64" -%]
    cp $ptdir/lyrebird external/pluto/bin/arm64-v8a/obfs4proxy
    cp $ptdir/snowflake-client external/pluto/bin/arm64-v8a/
    cp $ptdir/conjure-client external/pluto/bin/arm64-v8a/
    cp $ptdir/webtunnel-client external/pluto/bin/arm64-v8a/
  [% ELSE -%]
    cp $ptdir/lyrebird external/pluto/bin/[% arch %]/obfs4proxy
    cp $ptdir/snowflake-client external/pluto/bin/[% arch %]/
    cp $ptdir/conjure-client external/pluto/bin/[% arch %]/
    cp $ptdir/webtunnel-client external/pluto/bin/[% arch %]/
  [% END -%]
[% END -%]

# Build Android Libraries and Apps
gradle --offline --no-daemon -P androidplugin=3.6.0 -Dmaven.repo.local=$gradle_repo assembleRelease -x lint

# Package
cp universal/build/libs/* android/build/outputs/aar/* $output_dir
