summaryrefslogtreecommitdiff
path: root/pcl/tools/check_deps.py
diff options
context:
space:
mode:
Diffstat (limited to 'pcl/tools/check_deps.py')
-rwxr-xr-xpcl/tools/check_deps.py134
1 files changed, 134 insertions, 0 deletions
diff --git a/pcl/tools/check_deps.py b/pcl/tools/check_deps.py
new file mode 100755
index 000000000..f3a0e64a2
--- /dev/null
+++ b/pcl/tools/check_deps.py
@@ -0,0 +1,134 @@
+#!/usr/bin/python
+
+import os, string
+
+# not used may use later
+def get_line_directives_table(file):
+ # not intended to be portable or useful outside of gs universe.
+ CPP_FLAGS="-I../gs/base/ -I../gs/psi -I../pl/ -I../pcl -I../pxl -I../main/obj -DDEBUG"
+ CPP="gcc -E"
+ CPP_COMMAND=CPP + " " + CPP_FLAGS + " " + file
+ CPP_IN=os.popen(CPP_COMMAND, 'r')
+ lines = []
+ while (1):
+ line = CPP_IN.readline()
+ if not line:
+ break;
+ # chop newline
+ line = line[:-1]
+
+ # check again for line since we might have chopped the only
+ # character. check for lines starting with # and ending with
+ # 1 (see cpp docs).
+
+ if line and line[0] == "#" and line[-1] == "1":
+ # second field 1:-1 leaves out enclosing quotes.
+ lines.append(os.path.basename(string.splitfields(line)[2][1:-1]))
+ for line in lines:
+ print line
+
+def get_includes(file, skip_system_files=1):
+ includes = []
+ for line in fileinput.input(file):
+ if line[0:len("#include")] == "#include":
+ myin = string.splitfields(line)[1]
+ if skip_system_files and myin[0] == '<' and myin[-1] == '>':
+ print "skipping system header " + myin
+ continue
+ else:
+ includes.append(myin[1:-1])
+ return includes
+
+def find_all_files(dir, pattern):
+ lines=[]
+ FIND_COMMAND = "find " + dir + " -name " + pattern
+ for line in os.popen(FIND_COMMAND).readlines():
+ lines.append(line[:-1])
+ return lines
+
+
+import fileinput
+
+
+def find_target(makefile, target):
+ parsed_target = []
+ parsing_target = 0
+ fp = open(makefile)
+ for line in fp.readlines():
+ if line.find(target) >= 0 and not parsing_target:
+ parsing_target = 1
+ parsed_target.append(line)
+ continue
+ if parsing_target:
+ if line[0] not in string.whitespace:
+ break
+ parsed_target.append(line)
+ fp.close()
+ return makefile, parsed_target
+
+# return the filename and the targets from all the makefiles that
+# contain the target.
+def find_targets(target, makefiles):
+ # target is a c file - want .$(OBJ) file
+ target = target[:-1] + "$(OBJ):"
+ target = os.path.basename(target)
+ filename = None
+ parsed_targets = []
+ # list of lines
+ for line in fileinput.input(makefiles):
+ if line.find(')' + target) >= 0:
+ parsed_targets.append(find_target(fileinput.filename(), target))
+ fileinput.close()
+ return parsed_targets
+
+import re
+
+def get_deps_from_target(target):
+ # find .h files sans definition.
+ reg=re.compile('\.h')
+ for line in target:
+ for h in reg.findall(line):
+ print "naked .h found in " + target[0][0:target[0].index(":")]
+ # not quite right.
+ reg=re.compile('[A-Za-z0-9]+_+h')
+ deps=[]
+ for line in target:
+ targ_list=reg.findall(line)
+ for targ in targ_list:
+ deps.append(targ)
+ return deps
+
+def compare_lists(c_file, makefile, from_makefile, from_source):
+ canon_from_source = []
+ for x in from_source:
+ canon_from_source.append(x.replace('.', '_'))
+
+# print canon_from_source
+# print from_makefile
+
+ for mline in from_makefile:
+ if mline not in canon_from_source:
+ print mline + " from " + makefile + " not in " + c_file
+ for sline in canon_from_source:
+ if sline not in from_makefile:
+ print sline + " from " + c_file + " not in " + makefile
+
+if __name__ == '__main__':
+# headers=get_line_directives_table("../pcl/pcjob.c")
+# print headers
+ C_FILES=find_all_files("../", "\\*.c")
+ MAKEFILES=find_all_files("../", "\\*.mak")
+ for c_file in C_FILES:
+ target_list = find_targets(c_file, MAKEFILES)
+ for (f, t) in target_list:
+# print "found target for " + c_file + " in " + f
+# print "target is "
+# print t
+ compare_lists(c_file, f, get_deps_from_target(t), get_includes(c_file))
+ else:
+ "no target for " + c_file
+# C_FILES=find_all_files("../", "*.c")
+# MAKE_FILES=find_all_files("../", "*.mak")
+# H_FILES=find_all_files("../", "*.h")
+
+