#!/bin/sh
#
# This script is called by the depend.mk rule defined in
# $FSLDIR/config/rules.mk.
#
# It is assumed that this script is executed from a
# project directory (i.e. the project directory is the cwd).
#
# Automatically generate Make rules and dependencies for
# all source files in the project. This creates a file
# called depend.mk which contains a rule for every object
# file to be compiled, which has all header files
# that the source file includes as dependencies. If
# object files are to be saved into a separate build
# directory, the project Makefile should set the BUILDDIR
# variable.
#
# If the NVCC environment variable is set to a nvcc compiler,
# rules are generated for CUDA .cu files. If CUDA object files
# are to be saved into a separate build directory, the project
# Makefile should set the CUDABUILDDIR variable.
set -e

echo "Building dependency file depend.mk"

srcfiles=`find -name "*.c"  -or -name "*.cc"  -or -name "*.cxx" -or -name "*.cpp" -or -name "*.inc" -or -name "*.hpp" -or -name "*.cu"`

for srcfile in ${srcfiles} dummyname; do

  if [ -f "${srcfile}" ]; then
    srcfile="${srcfile#./}"
    prefix="${srcfile%.*}"
    basename="${prefix##*/}"
    objfile="${basename}.o"
    depfile="${basename}.mk"

    # if nvcc is present, use it for .cu files
    if [ "${srcfile%.cu}" = "${prefix}" ]; then
      if [ -f "${NVCC}" ]; then
        ${NVCC} -MM -MT "${CUDABUILDDIR}${objfile}" -MF "${depfile}" \
                ${CPPFLAGS} ${INCFLAGS} "${srcfile}" > /dev/null 2>&1
      fi
    else
      ${CC} -MM -MT "${BUILDDIR}${objfile}" -MF "${depfile}" \
            ${CPPFLAGS} ${INCFLAGS} "${srcfile}" > /dev/null 2>&1
    fi
    if [ -f "${depfile}" ]; then
      cat "${depfile}" >> depend.mk
      rm -f "${depfile}"
    fi

  else
    touch depend.mk
  fi
done