#!/bin/sh
set -e

# generate list of source files for use in Makefile.am
# if you add new source files, you must run ./bootstrap again
src_listvar () {
    basedir=$1
    suffix=$2
    var=$3

    find "${basedir}" -name "${suffix}" | LC_ALL=C sort | tr '\n' ' ' | (printf "${var} = " && cat)
    echo ""
}

# remove source files from list if their usage depends on a configure option
remove_src () {
    files=$1
    shift
    for x in $*
    do
      x=$(echo "$x" | sed 's/\//\\\//g')
      files=$(echo $files | sed -e "s/$x//")
    done
    echo $files
}

# generate list of eys source files for use in Makefile.am
# if you add new source files, you must run ./bootstrap again
# files after the var name will be elimenated from list list
src_esys_listvar () {
    basedir=$1;
    shift;
    suffix=$1
    shift;
    var=$1
    shift;

    files=$(find "${basedir}" -name "${suffix}" | LC_ALL=C sort | tr '\n' ' ')
    files=$(remove_src "${files}" $*)
    printf "${var} = ${files}"
    echo ""
}

VARS_FILE=src_vars.mk
AUTORECONF=${AUTORECONF:-autoreconf}

echo "Generating file lists: ${VARS_FILE}"
(
  src_listvar "src/util" "*.c" "UTIL_C"
  src_listvar "src/util" "*.h" "UTIL_H"
  printf "UTIL_SRC = \$(UTIL_C) \$(UTIL_H)\n"

  src_listvar "src/tss2-sys/" "*.c" "TSS2_SYS_C"
  src_listvar "src/tss2-sys/" "*.h" "TSS2_SYS_H"
  printf "TSS2_SYS_SRC = \$(TSS2_SYS_H) \$(TSS2_SYS_C)\n"

  src_esys_listvar "src/tss2-esys/" "*.h" "TSS2_ESYS_H"  src/tss2-esys/esys_crypto_ossl.h  src/tss2-esys/esys_crypto_gcrypt.h
  src_esys_listvar "src/tss2-esys/" "*.c" "TSS2_ESYS_C" src/tss2-esys/esys_crypto_ossl.c  src/tss2-esys/esys_crypto_gcrypt.c
  printf "TSS2_ESYS_SRC = \$(TSS2_ESYS_H) \$(TSS2_ESYS_C)\n"

  src_listvar "src/tss2-mu" "*.c" "TSS2_MU_C"
  src_listvar "src/tss2-mu" "*.h" "TSS2_MU_H"
  printf "TSS2_MU_SRC = \$(TSS2_MU_C) \$(TSS2_MU_H)"
) > ${VARS_FILE}

${AUTORECONF} --install --sym
