File: makefdeps

package info (click to toggle)
findent 4.3.6-1
  • links: PTS
  • area: main
  • in suites: forky, sid
  • size: 3,144 kB
  • sloc: sh: 9,462; cpp: 6,219; fortran: 2,901; lex: 696; yacc: 535; makefile: 224; python: 155; lisp: 52
file content (54 lines) | stat: -rwxr-xr-x 1,280 bytes parent folder | download | duplicates (4)
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
#!/bin/sh
# - makefdeps -
# Creates make-dependencies for fortran sources, based on
# analysis by findent of (sub)modules that are needed or created and
# include files. Include files are not further analyzed.
# Dependencies will be like:
# prog.o: sub1.o sub2.o
# prog.o: file1.inc file2.inc
# Example:
# makefdeps *.f90 > deps
usage()
{
   echo "usage:"
   echo "$0 [-s objectsuffix] fortansources ..."
   echo "objectsuffix: default '.o'"
   echo "depending on your make system, '.lo' can be the correct one"
   exit 1
}
FINDENTPROG=${FINDENT:-findent}

O='.o'
if [ "$1" = "-s" ] ; then
   O="$2"
   shift; shift
fi

while [ "$1" ] ; do
   j=${1%.*}$O
   $FINDENTPROG --deps < $1 | awk -v name="$j" '{ print $0, name}' 
   shift
done | 
awk '/^use /{use[$3] = use[$3] " " $2}
     /^mod |^sub /{ if (NF == 3) {module[$2] = $3}} 
     /^inc |^cpp |^coc |^std / {include[$3] = include[$3] " " $2}
END { 
      for (k in use) 
      {
	  m = ""
	  split(use[k],u)
	  for (l in u) { 
	     m=m " " module[u[l]]
	     }
	  mm = m; gsub(" ","",mm)
	  if (length(mm) != 0) { 
	     while (gsub("  "," ",m)){}
	     sub("^ ","",m)
	     print k ": " m 
	  }
      }
      for (k in include) { 
         while(sub("^ ","",include[k])){}
         print k ": " include[k] 
      }
    }'