#!/bin/bash
[% c("var/set_default_env") -%]

[% pc(c('var/compiler'), 'var/setup', {
    compiler_tarfile => c('input_files_by_name/' _ c('var/compiler')),
  }) %]
[% pc('android-sdk', 'var/setup', { sdk_tarfile => c("input_files_by_name/android-sdk") }) %]
[% pc('gradle', 'var/setup', { gradle_tarfile => c("input_files_by_name/gradle") }) %]
pushd /var/tmp/dist/android-sdk/build-tools/
unzip $rootdir/'[% c("input_files_by_name/build_tools_35") %]'
mv android-15 35.0
popd

distdir=/var/tmp/dist/[% project %]
builddir=/var/tmp/build/[% project %]
mkdir $distdir
mkdir /var/tmp/build

tar -C /var/tmp/dist -xf $rootdir/[% c('input_files_by_name/rust') %]
tar -C /var/tmp/dist -xf $rootdir/[% c('input_files_by_name/ninja') %]
export PATH=/var/tmp/dist/rust/bin:/var/tmp/dist/ninja:$PATH
export RUST_ANDROID_GRADLE_PYTHON_COMMAND=python3

export JAVA_HOME=/usr/lib/jvm/java-1.17.0-openjdk-amd64

[% INCLUDE 'fake-git' %]

[% IF !c('var/generate_gradle_dependencies_list') -%]
  tar -xf [% c('input_files_by_name/glean') %]

  gradle_repo=/var/tmp/dist/gradle-dependencies
  mv $rootdir/[% c('input_files_by_name/gradle-dependencies') %] $gradle_repo
  cp -rl $rootdir/glean/maven/* $gradle_repo
  cp -rl $gradle_repo/dl/android/maven2/* $gradle_repo || true
  cp -rl $gradle_repo/m2/* $gradle_repo || true
  cp -rl $gradle_repo/maven2/* $gradle_repo || true
[% END -%]

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

mv /var/tmp/build/[% project %]-[% c('version') %] $builddir

cd $builddir

[% IF !c('var/generate_gradle_dependencies_list') -%]
  # Prepare the offline build.

  tar -xf $rootdir/[% c('input_files_by_name/glean-wheels') %]
  export GLEAN_PYTHON_WHEELS_DIR=$builddir/glean-wheels
  # Setting GLEAN_PYTHON_WHEELS_DIR is not enough: a Rust build script will
  # still try to install Glean with pip.
  cat > $rootdir/pip.conf << 'EOF'
[global]
find-links = /var/tmp/build/application-services/glean-wheels
index-url =
no-index = yes
EOF
  export PIP_CONFIG_FILE=$rootdir/pip.conf
  # Move the directory for hardcoding the path in .cargo/config.
  tar -C $builddir -xf $rootdir/[% c('input_files_by_name/cargo_vendor') %]
  # Make sure our vendored crates are used for offline builds.
  cat vendor/cargo-config.toml >> .cargo/config.toml
  rm vendor/cargo-config.toml
[% END -%]

tar -xf $rootdir/[% c('input_files_by_name/uniffi-rs') %]

pushd libs
ln -s $rootdir/[% c("input_files_by_name/nss") %] ./
./build-all.sh desktop
./build-all.sh android
popd

# We need to set `LC_ALL` and `LANG` to something that is not ASCII as encoding
# otherwise `click` barfs. See: https://click.palletsprojects.com/python3/
export LC_ALL=C.UTF-8
export LANG=C.UTF-8
[% IF !c('var/generate_gradle_dependencies_list') -%]
  deps_flags="--offline -PgradleDependenciesUrl=file:///var/tmp/dist/gradle-dependencies"
[% ELSE -%]
  deps_flags="--info"
  gradle_logs=/var/tmp/build/gradle-logs.log
[% END -%]
gradle_flags="$deps_flags --no-daemon -PuniffiBindgenNoop=$builddir/uniffi-rs/uniffi-bindgen"
gradle $gradle_flags assembleRelease [% IF c('var/generate_gradle_dependencies_list') %]2>&1 | tee -a $gradle_logs[% END %]
gradle $gradle_flags publish
mv build/maven $distdir

pushd components/support/nimbus-fml
cargo build --release
popd
cp target/release/nimbus-fml $distdir

[% IF c('var/generate_gradle_dependencies_list') -%]
  cd $distdir
  $rootdir/gen-gradle-deps-file.py $gradle_logs
  cp gradle-dependencies-list.txt [% dest_dir _ '/' _ c('filename') %]
  [% RETURN -%]
[% END -%]

cd /var/tmp/dist
[% c('tar', {
    tar_src => [ project ],
    tar_args => '-caf ' _ dest_dir _ '/' _ c('filename'),
  }) %]
