#!/bin/sh -e

case "$0" in
    */*)
	cd $(dirname $0)
	;;
esac

if [ -z "$NOGIT" ] ; then
    # Bail if not under git
    git rev-parse
    getFilesRaw() {
        git ls-files --recurse-submodules
    }
else
    getFilesRaw() {
        find . -type f
    }
fi
getFiles() {
    getFilesRaw | tr " " "\n" | sort | uniq
}

trap 'rm -f src/src.mk lib/medida.mk lib/lib.mk' 0

message="# This file was generated by make-mks; don't edit it by hand."

# Use only files git knows about, to avoid picking up autogenrated
# files or other random cruft.  When adding a new file foo.cpp, you
# must run "git add -N foo.cpp" before running this script.
(cd src
 echo "$message"
 echo "SRC_H_FILES" = $(getFiles | egrep -e '\.h$' -e '\.[ih]pp$' | egrep -v '(test|simulation)/' | tr "\n" " ")
 # SRC_CXX_FILES excludes main/main.cpp - it's added explicitly to stellar_core_SOURCES
 echo "SRC_CXX_FILES" = $(getFiles | egrep '\.cpp$' | egrep -v '(test|simulation)/' | egrep -v 'main/main\.cpp$' | tr "\n" " ")
 echo "SRC_X_FILES" = $(getFiles | egrep '\.x$' | tr "\n" " ")
 echo "SRC_TEST_H_FILES" = $(getFiles | egrep -e '\.h$' -e '\.[ih]pp$' | egrep '(test|simulation)/' | tr "\n" " ")
 # SRC_TEST_CXX_FILES excludes FuzzMain.cpp - it's fuzz-target-specific, not part of unit tests
 echo "SRC_TEST_CXX_FILES" = $(getFiles | egrep '\.cpp$' | egrep '(test|simulation)/' | egrep -v 'test/fuzz/FuzzMain\.cpp$' | tr "\n" " ")
 echo "SRC_RUST_FILES" = $(getFiles | egrep '\.rs$' | tr "\n" " ")
) > src/src.mk


# Hacks for shell third-party libraries without autoconf.  You may
# need to re-run this after updating submodules.

listall() {
    find "$@" -type f \
	 \( -name '*.[ch]' -o -name '*.[chi]pp' -o -name '*.cc' \) -print
}

(cd lib
 if test -f libmedida/src/medida/medida.h; then
     echo "$message"
     echo INTERNAL_MEDIDA_FILES = $(listall libmedida/src/medida)
 fi) > lib/medida.mk

(cd lib
 echo "$message"
 echo SOCI_FILES = $(listall soci/src/backends/sqlite3 soci/src/core)
 echo SOCI_PG_FILES = $(listall soci/src/backends/postgresql)

 echo SQLITE3_FILES = $(listall sqlite | grep -v shell)
 echo UTIL_FILES = $(listall util http httpthreaded)
 echo ASIO_H_FILES = $(listall asio/asio/include)
 # The following does not work without boost or -DASIO_STANDALONE=1
 #echo ASIO_CXX_FILES = asio/src/*.cpp
 echo ASIO_CXX_FILES = asio.cpp
 echo TRACY_CXX_FILES = tracy/public/TracyClient.cpp
 echo JSON_FILES = $(listall json)
 echo SPDLOG_FILES = spdlog.cpp

 echo MISC_H_FILES = *.hpp $(listall autocheck cereal fmt)
) > lib/lib.mk

trap '' 0
