#! /usr/bin/env bash

ML=../../build/bin/mlton

O[0]='-default-ann'
O[1]='allowFFI true'
O[2]='-link-opt'
O[3]='-L.'

LIB="-link-opt -l"

# Enable finding libraries locally
export LD_LIBRARY_PATH=.

set -ex

# Compile DSO #1
$ML "${O[@]}" "$@" -format libarchive libm1.sml libm1.c
$ML "${O[@]}" "$@" ${LIB}m1 -format library libm2.sml libm2.c

# Compile DSO #2
$ML "${O[@]}" "$@" -format libarchive libm3.sml libm3.c
$ML "${O[@]}" "$@" ${LIB}m3 ${LIB}m2 -format library libm4.sml libm4.c

# Compile executable
$ML "${O[@]}" "$@" -format archive libm5.sml libm5.c
$ML "${O[@]}" "$@" ${LIB}m5 ${LIB}m4 -format executable \
  -default-ann 'allowFFI true' -export-header check.h check.sml check.c

# Check that symbols resolved correctly
./check | sed '' > check.log

# Confirm expected output
set +x
diff -u check.ok check.log
echo '********** PASS:' "$@" '**********'
rm -f check.log
