#!/bin/sh

# Builds documentation for all target triples that we have a registered URL for
# in liblibc. This scrapes the list of triples to document from `src/lib.rs`
# which has a bunch of `html_root_url` directives we pick up.

set -e

rm -rf target/doc
mkdir -p target/doc

dox() {
  local arch=$1
  local target=$2

  echo documenting $arch

  if [ "$CI" != "" ]; then
    rustup target add $target || true
  fi

  rm -rf target/doc/$arch
  mkdir target/doc/$arch

  cargo build --verbose --target $target --manifest-path crates/stdsimd/Cargo.toml

  rustdoc --verbose --target $target \
          -o target/doc/$arch crates/coresimd/src/lib.rs \
          --crate-name coresimd \
          --library-path target/$target/debug/deps
  rustdoc --verbose --target $target \
          -o target/doc/$arch crates/stdsimd/src/lib.rs \
          --crate-name stdsimd \
          --library-path target/$target/debug/deps \
          --extern cfg_if=`ls target/$target/debug/deps/libcfg_if-*.rlib` \
          --extern libc=`ls target/$target/debug/deps/liblibc-*.rlib`
}

dox i686 i686-unknown-linux-gnu
dox x86_64 x86_64-unknown-linux-gnu
dox arm armv7-unknown-linux-gnueabihf
dox aarch64 aarch64-unknown-linux-gnu
# dox powerpc powerpc-unknown-linux-gnu
dox powerpc64le powerpc64le-unknown-linux-gnu
dox mips mips-unknown-linux-gnu
dox mips64 mips64-unknown-linux-gnuabi64
dox wasm32 wasm32-unknown-unknown

# If we're on travis, not a PR, and on the right branch, publish!
if [ "$TRAVIS_PULL_REQUEST" = "false" ] && [ "$TRAVIS_BRANCH" = "master" ]; then
  pip install ghp_import --install-option="--prefix=$HOME/.local"
  $HOME/.local/bin/ghp-import -n target/doc
  git push -qf https://${GH_TOKEN}@github.com/${TRAVIS_REPO_SLUG}.git gh-pages
fi
