aboutsummaryrefslogtreecommitdiff
path: root/tools/refactoring/fixincludeguards.py
diff options
context:
space:
mode:
authorniklase@google.com <niklase@google.com@4adac7df-926f-26a2-2b94-8c16560cd09d>2011-05-30 11:42:35 +0000
committerniklase@google.com <niklase@google.com@4adac7df-926f-26a2-2b94-8c16560cd09d>2011-05-30 11:42:35 +0000
commit47bdc463dbf8a949083bee6e340d7c7ad15be66c (patch)
treef67fc8c0955f03407e73be0347ef0028fb81717a /tools/refactoring/fixincludeguards.py
parent5c61233a88042bbe647e609ce6ac1f606591d576 (diff)
downloadwebrtc-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.py145
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