11184aebb761cbeac9124c37189a80a1a58f04b6bhkuang#!/bin/sh
290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber##
3f71323e297a928af368937089d3ed71239786f86Andreas Huber##  Copyright (c) 2010 The WebM project authors. All Rights Reserved.
490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber##
5f71323e297a928af368937089d3ed71239786f86Andreas Huber##  Use of this source code is governed by a BSD-style license
6f71323e297a928af368937089d3ed71239786f86Andreas Huber##  that can be found in the LICENSE file in the root of the source
7f71323e297a928af368937089d3ed71239786f86Andreas Huber##  tree. An additional intellectual property rights grant can be found
8f71323e297a928af368937089d3ed71239786f86Andreas Huber##  in the file PATENTS.  All contributing project authors may
9f71323e297a928af368937089d3ed71239786f86Andreas Huber##  be found in the AUTHORS file in the root of the source tree.
1090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber##
1190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
1290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
1390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberself=$0
1490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubershow_help() {
1590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    echo "usage: $self [options] <srcfile>"
1690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    echo
1790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    echo "Generate Makefile dependency information from assembly code source"
1890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    echo
1990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    exit 1
2090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
2190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberdie_unknown(){
2290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    echo "Unknown option \"$1\"."
2390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    echo "See $0 --help for available options."
2490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    exit 1
2590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
2690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberfor opt do
2790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    optval="${opt#*=}"
2890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    case "$opt" in
2990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    --build-pfx=*) pfx="${optval}"
3090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ;;
3190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    --depfile=*) out="${optval}"
3290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ;;
3390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    -I*) raw_inc_paths="${raw_inc_paths} ${opt}"
3490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber         inc_path="${inc_path} ${opt#-I}"
3590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ;;
3690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    -h|--help) show_help
3790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ;;
3890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    *) [ -f "$opt" ] && srcfile="$opt"
3990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ;;
4090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    esac
4190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberdone
4290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
4390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber[ -n "$srcfile" ] || show_help
4490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubersfx=${sfx:-asm}
451b362b15af34006e6a11974088a46d42b903418eJohannincludes=$(LC_ALL=C egrep -i "include +\"?[a-z0-9_/]+\.${sfx}" $srcfile |
4690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber           perl -p -e "s;.*?([a-z0-9_/]+.${sfx}).*;\1;")
4790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#" restore editor state
4890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberfor inc in ${includes}; do
4990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    found_inc_path=
5090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    for idir in ${inc_path}; do
5190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        [ -f "${idir}/${inc}" ] && found_inc_path="${idir}" && break
5290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    done
5390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    if [ -f `dirname $srcfile`/$inc ]; then
5490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        # Handle include files in the same directory as the source
5590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        $self --build-pfx=$pfx --depfile=$out ${raw_inc_paths} `dirname $srcfile`/$inc
5690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    elif [ -n "${found_inc_path}" ]; then
5790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        # Handle include files on the include path
5890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        $self --build-pfx=$pfx --depfile=$out ${raw_inc_paths} "${found_inc_path}/$inc"
5990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    else
6090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        # Handle generated includes in the build root (which may not exist yet)
6190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        echo ${out} ${out%d}o: "${pfx}${inc}"
6290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    fi
6390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberdone
6490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberecho ${out} ${out%d}o: $srcfile
65