diff options
author | niklase@google.com <niklase@google.com@4adac7df-926f-26a2-2b94-8c16560cd09d> | 2011-05-30 11:42:35 +0000 |
---|---|---|
committer | niklase@google.com <niklase@google.com@4adac7df-926f-26a2-2b94-8c16560cd09d> | 2011-05-30 11:42:35 +0000 |
commit | 47bdc463dbf8a949083bee6e340d7c7ad15be66c (patch) | |
tree | f67fc8c0955f03407e73be0347ef0028fb81717a /tools/refactoring/fixincludeguards.py | |
parent | 5c61233a88042bbe647e609ce6ac1f606591d576 (diff) | |
download | webrtc-47bdc463dbf8a949083bee6e340d7c7ad15be66c.tar.gz |
git-svn-id: http://webrtc.googlecode.com/svn/trunk@8 4adac7df-926f-26a2-2b94-8c16560cd09d
Diffstat (limited to 'tools/refactoring/fixincludeguards.py')
-rw-r--r-- | tools/refactoring/fixincludeguards.py | 145 |
1 files changed, 145 insertions, 0 deletions
diff --git a/tools/refactoring/fixincludeguards.py b/tools/refactoring/fixincludeguards.py new file mode 100644 index 0000000000..0b563556ba --- /dev/null +++ b/tools/refactoring/fixincludeguards.py @@ -0,0 +1,145 @@ +#!/usr/bin/env python + +import stringmanipulation +import filemanagement +import sys + +extensions = ['.h'] + +ignore_these = ['my_ignore_header.h'] + +if((len(sys.argv) != 2) and (len(sys.argv) != 3)): + print 'parameters are: directory [--commit]' + quit() + +directory = sys.argv[1]; +if(not filemanagement.pathexist(directory)): + print 'path ' + directory + ' does not exist' + quit() + +if((len(sys.argv) == 3) and (sys.argv[2] != '--commit')): + print 'parameters are: parent directory extension new extension [--commit]' + quit() + +commit = False +if(len(sys.argv) == 3): + commit = True + +for extension in extensions: + files_to_fix = filemanagement.listallfilesinfolder(directory,\ + extension) + +def buildincludeguardname(path,filename): + full_file_name = 'WEBRTC_' + path + filename + full_file_name = full_file_name.upper() + full_file_name = stringmanipulation.replaceoccurances(full_file_name, '/', '_') + full_file_name = stringmanipulation.replaceoccurances(full_file_name, '\\', '_') + full_file_name = stringmanipulation.replaceoccurances(full_file_name, '.', '_') + full_file_name += '_' + return full_file_name + +def buildnewincludeguardset(path,filename): + include_guard_name = buildincludeguardname(path,filename) + if(include_guard_name == ''): + return [] + return_value = [] + return_value.append('#ifndef ' + include_guard_name) + return_value.append('#define ' + include_guard_name) + return_value.append(include_guard_name) + return return_value + +def printincludeguardset(include_guard_set): + print 'First line: ' + include_guard_set[0] + print 'Second line: ' + include_guard_set[1] + print 'Last line: ' + include_guard_set[2] + return + +include_guard_begin_identifier = ['#ifndef', '#if !defined'] +include_guard_second_identifier = ['#define'] +def findincludeguardidentifier(line): + for begin_identifier in include_guard_begin_identifier: + line = stringmanipulation.removealloccurances(line,begin_identifier) + for second_identifier in include_guard_begin_identifier: + line = stringmanipulation.removealloccurances(line,second_identifier) + removed_prefix = [True,''] + line = stringmanipulation.whitespacestoonespace(line) + while(removed_prefix[0]): + removed_prefix = stringmanipulation.removeprefix(line,' ') + line = removed_prefix[1] + line = stringmanipulation.removealloccurances(line,'(') + if(line == ''): + return '' + word_pos = stringmanipulation.getword(line,0) + return_value = line[0:word_pos[1]] + return_value = return_value.rstrip('\r\n') + return return_value + +def findoldincludeguardset(path,filename): + return_value = [] + full_file_name = path + filename + file_pointer = open(full_file_name,'r') + include_guard_name = '' + for line in file_pointer: + if (include_guard_name == ''): + for compare_string in include_guard_begin_identifier: + if (stringmanipulation.issubstring(compare_string, line) != -1): + include_guard_name = findincludeguardidentifier(line) + if (include_guard_name == ''): + break + line = line.rstrip('\r\n') + return_value.append(line) + break + else: + for compare_string in include_guard_second_identifier: + if (stringmanipulation.issubstring(compare_string, line) != -1): + if (stringmanipulation.issubstring(include_guard_name, line) != -1): + line = line.rstrip('\r\n') + return_value.append(line) + return_value.append(include_guard_name) + return return_value + include_guard_name = '' + return_value = [] + return [] + +failed_files = [] +for index in range(len(files_to_fix)): + if(commit): + print (100*index)/len(files_to_fix) + path_dir = files_to_fix[index][0] + filename = files_to_fix[index][1] + is_ignore = False + for ignore_names in ignore_these: + if(filename == ignore_names): + is_ignore = True + break + if(is_ignore): + continue + old_include_guard_set = findoldincludeguardset(path_dir,filename) + if (len(old_include_guard_set) != 3) : + failed_files.append('unable to figure out the include guards for ' + filename) + continue + + new_include_guard_set = buildnewincludeguardset(path_dir,filename) + if (len(new_include_guard_set) != 3) : + failed_files.append('unable to figure out new the include guards for ' + filename) + continue + + if(not commit): + print 'old guard: ' + old_include_guard_set[2] + print 'new guard: ' + new_include_guard_set[2] + continue + + for index in range(2): + # enough to only replace for file. However, no function for that + for extension in extensions: + filemanagement.replacestringinfolder(path_dir,old_include_guard_set[index],new_include_guard_set[index],extension) + # special case for last to avoid complications + for extension in extensions: + filemanagement.replacestringinfolder(path_dir,' ' + old_include_guard_set[2],' ' + new_include_guard_set[2],extension) + filemanagement.replacestringinfolder(path_dir,'\\/\\/' + old_include_guard_set[2],'\\/\\/ ' + new_include_guard_set[2],extension) + + +if(len(failed_files) > 0): + print 'Following failures should be investigated manually:' +for line in failed_files: + print line |