summaryrefslogtreecommitdiff
path: root/build-scripts/makedep.sh
blob: 50ce568c0d1f6fcd4edef8c30705ca7eda55832b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#!/bin/sh
#
# Generate dependencies from a list of source files

# Check to make sure our environment variables are set
if test x"$INCLUDE" = x -o x"$SOURCES" = x -o x"$objects" = x -o x"$output" = x; then
    echo "SOURCES, INCLUDE, objects, and output needs to be set"
    exit 1
fi
cache_prefix=".#$$"

generate_var()
{
    echo $1 | sed -e 's|^.*/||' -e 's|\.|_|g'
}

search_deps()
{
    base=`echo $1 | sed 's|/[^/]*$||'`
    grep '#include "' <$1 | sed -e 's|.*"\([^"]*\)".*|\1|' | \
    while read file
    do cache=${cache_prefix}_`generate_var $file`
       if test -f $cache; then
          # We already ahve this cached
          if test x$2 = x; then
              cat $cache
          else
              cat $cache >>$2
          fi
          continue;
       fi
       for path in $base `echo $INCLUDE | sed 's|-I||g'`
       do dep="$path/$file"
          if test -f "$dep"; then
             echo "	$dep \\" >>$cache
             if test x$2 = x; then
                  echo "	$dep \\"
             else
                  echo "	$dep \\" >>$2
             fi
             search_deps $dep $cache
             break
          fi
       done
    done
}

:>${output}.new
for src in $SOURCES
do  echo "Generating dependencies for $src"
    ext=`echo $src | sed 's|.*\.\(.*\)|\1|'`
    obj=`echo $src | sed "s|^.*/\([^ ]*\)\..*|$objects/\1.lo|g"`
    echo "$obj: $src \\" >>${output}.new
    search_deps $src | sort | uniq >>${output}.new
    echo "" >>${output}.new
    case $ext in
        asm) echo "	\$(BUILDASM)" >>${output}.new;;
        cc)  echo "	\$(BUILDCC)" >>${output}.new;;
        c)   echo "	\$(BUILDC)" >>${output}.new;;
        m)   echo "	\$(BUILDM)" >>${output}.new;;
        *)   echo "Unknown file extension: $ext";;
    esac
    echo "" >>${output}.new
done
rm -f ${cache_prefix}*
mv ${output}.new ${output}