#!/bin/sh
##
## Copyright (c) 2016, Alliance for Open Media. All rights reserved
##
## This source code is subject to the terms of the BSD 2 Clause License and
## the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
## was not distributed with this source code in the LICENSE file, you can
## obtain it at www.aomedia.org/license/software. If the Alliance for Open
## Media Patent License 1.0 was not distributed with this source code in the
## PATENTS file, you can obtain it at www.aomedia.org/license/patent.
##

self=$0
show_help() {
    echo "usage: $self [options] <srcfile>"
    echo
    echo "Generate Makefile dependency information from assembly code source"
    echo
    exit 1
}
die_unknown(){
    echo "Unknown option \"$1\"."
    echo "See $0 --help for available options."
    exit 1
}
for opt do
    optval="${opt#*=}"
    case "$opt" in
    --build-pfx=*) pfx="${optval}"
    ;;
    --depfile=*) out="${optval}"
    ;;
    -I*) raw_inc_paths="${raw_inc_paths} ${opt}"
         inc_path="${inc_path} ${opt#-I}"
    ;;
    -h|--help) show_help
    ;;
    *) [ -f "$opt" ] && srcfile="$opt"
    ;;
    esac
done

[ -n "$srcfile" ] || show_help
sfx=${sfx:-asm}
includes=$(LC_ALL=C egrep -i "include +\"?[a-z0-9_/]+\.${sfx}" $srcfile |
           perl -p -e "s;.*?([a-z0-9_/]+.${sfx}).*;\1;")
#" restore editor state
for inc in ${includes}; do
    found_inc_path=
    for idir in ${inc_path}; do
        [ -f "${idir}/${inc}" ] && found_inc_path="${idir}" && break
    done
    if [ -f `dirname $srcfile`/$inc ]; then
        # Handle include files in the same directory as the source
        $self --build-pfx=$pfx --depfile=$out ${raw_inc_paths} `dirname $srcfile`/$inc
    elif [ -n "${found_inc_path}" ]; then
        # Handle include files on the include path
        $self --build-pfx=$pfx --depfile=$out ${raw_inc_paths} "${found_inc_path}/$inc"
    else
        # Handle generated includes in the build root (which may not exist yet)
        echo ${out} ${out%d}o: "${pfx}${inc}"
    fi
done
echo ${out} ${out%d}o: $srcfile
