Subversion Repositories HomeAutomation

Rev

Rev 1106 | Rev 1126 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | SVN | RSS feed

Rev 1106 Rev 1125
1
#!/usr/bin/python
1
#!/usr/bin/python
2
 
2
 
3
# Written by Mattias Runge 2008-05-13
3
# Written by Mattias Runge 2008-05-13
4
 
4
 
5
import os
5
import os
6
import sys
6
import sys
7
import getopt
7
import getopt
8
 
8
 
9
moddir = sys.path[0] + "/../../EmbeddedSoftware/AVR/module"
9
moddir = sys.path[0] + "/../../EmbeddedSoftware/AVR/module"
10
localmoddir = os.getcwd() + "/modules"
10
localmoddir = os.getcwd() + "/modules"
11
 
11
 
12
def getModules():
12
def getModules():
13
	modules = []
13
	modules = []
14
	for fileName in os.listdir(moddir):
14
	for fileName in os.listdir(moddir):
15
		if fileName[0] != '.' and fileName != "template":
15
		if fileName[0] != '.' and fileName != "template":
16
			modules.append(fileName)
16
			modules.append(fileName)
17
 
17
 
18
	return modules
18
	return modules
19
 
19
 
20
 
20
 
21
def getLocalModules():
21
def getLocalModules():
22
	modules = []
22
	modules = []
23
	for fileName in os.listdir(localmoddir):
23
	for fileName in os.listdir(localmoddir):
24
		if fileName[0] != '.':
24
		if fileName[0] != '.':
25
			modules.append(fileName)
25
			modules.append(fileName)
26
 
26
 
27
	return modules
27
	return modules
28
 
28
 
29
 
29
 
30
def parseModuleIdFromFile(moduleName, fileName):
30
def parseModuleIdFromFile(moduleName, fileName):
31
	config_inc = open(fileName, 'r') 
31
	config_inc = open(fileName, 'r') 
32
	config_inc_lines = config_inc.readlines()
32
	config_inc_lines = config_inc.readlines()
33
	config_inc.close()
33
	config_inc.close()
34
	
34
	
35
	for line in config_inc_lines:
35
	for line in config_inc_lines:
36
		line = line.strip("\n").strip(" ")
36
		line = line.strip("\n").strip(" ")
37
		
37
		
38
		if line.find(moduleName + "_ID") != -1:
38
		if line.find(moduleName + "_ID") != -1:
39
			parts = line.split("=")
39
			parts = line.split("=")
40
			return parts[1].strip(" ")
40
			return parts[1].strip(" ")
41
	
41
	
42
	return -1;
42
	return -1;
43
 
43
 
44
 
44
 
45
def getFreeModuleId(moduleName):
45
def getFreeModuleId(moduleName):
46
	takenIds = []
46
	takenIds = []
47
 
47
 
48
	for applicationName in os.listdir("../"):
48
	for applicationName in os.listdir("../"):
49
		
49
		
50
		if applicationName[0] != '.' and os.path.exists("../" + applicationName + "/config.inc"):
50
		if applicationName[0] != '.' and os.path.exists("../" + applicationName + "/config.inc"):
51
			takenId = parseModuleIdFromFile(moduleName, "../" + applicationName + "/config.inc")
51
			takenId = parseModuleIdFromFile(moduleName, "../" + applicationName + "/config.inc")
52
			if takenId != -1 and takenId != "<ID>":
52
			if takenId != -1 and takenId != "<ID>":
53
				takenIds.append(int(takenId, 16))
53
				takenIds.append(int(takenId, 16))
54
 
54
 
55
	if len(takenIds) == 0:
55
	if len(takenIds) == 0:
56
		return "0x01"
56
		return "0x01"
57
 
57
 
58
	takenIds.sort()
58
	takenIds.sort()
59
 
59
 
60
	lastId = 0
60
	lastId = 0
61
 
61
 
62
	for takenId in takenIds:
62
	for takenId in takenIds:
63
		if takenId != lastId+1:
63
		if takenId != lastId+1:
64
			return hex(lastId+1)
64
			return hex(lastId+1)
65
		lastId = takenId
65
		lastId = takenId
66
 
66
 
67
	return hex(lastId+1)
67
	return hex(lastId+1)
68
	
68
	
69
 
69
 
70
def compileMainFile():
70
def compileMainFile():
71
	print "Compiling new main.c..."
71
	print "Compiling new main.c..."
72
	main_c_template = open('src/main.c.template', 'r') 
72
	main_c_template = open('src/main.c.template', 'r') 
73
	main_c_template_lines = main_c_template.readlines()
73
	main_c_template_lines = main_c_template.readlines()
74
	main_c_template.close()
74
	main_c_template.close()
75
	
75
	
76
	modules = getLocalModules()
76
	modules = getLocalModules()
77
	
77
	
78
	main_c = open('src/main.c', 'w') 
78
	main_c = open('src/main.c', 'w') 
79
	
79
	
80
	for main_c_template_line in main_c_template_lines:
80
	for main_c_template_line in main_c_template_lines:
81
		pos_include = main_c_template_line.find('%INCLUDE')
81
		pos_include = main_c_template_line.find('%INCLUDE')
82
		pos_init = main_c_template_line.find('%INIT')
82
		pos_init = main_c_template_line.find('%INIT')
83
		pos_process = main_c_template_line.find('%PROCESS')
83
		pos_process = main_c_template_line.find('%PROCESS')
84
		pos_list = main_c_template_line.find('%LIST')
84
		pos_list = main_c_template_line.find('%LIST')
85
		pos_handlemsg = main_c_template_line.find('%HANDLEMSG')
85
		pos_handlemsg = main_c_template_line.find('%HANDLEMSG')
86
		
86
		
87
		if pos_include != -1:
87
		if pos_include != -1:
88
			for moduleName in modules:
88
			for moduleName in modules:
89
				main_c.write(main_c_template_line[:pos_include] + "#include \"../modules/" + moduleName + "/" + moduleName + ".h\"\n")
89
				main_c.write(main_c_template_line[:pos_include] + "#include \"../modules/" + moduleName + "/" + moduleName + ".h\"\n")
90
		elif pos_init != -1:
90
		elif pos_init != -1:
91
			for moduleName in modules:
91
			for moduleName in modules:
92
				main_c.write(main_c_template_line[:pos_init] + moduleName + "_Init();\n")
92
				main_c.write(main_c_template_line[:pos_init] + moduleName + "_Init();\n")
93
		elif pos_process != -1:
93
		elif pos_process != -1:
94
			for moduleName in modules:
94
			for moduleName in modules:
95
				main_c.write(main_c_template_line[:pos_process] + moduleName + "_Process();\n")
95
				main_c.write(main_c_template_line[:pos_process] + moduleName + "_Process();\n")
96
		elif pos_list != -1:
96
		elif pos_list != -1:
97
			count = 1
97
			count = 1
98
			for moduleName in modules:
98
			for moduleName in modules:
99
				main_c.write(main_c_template_line[:pos_list] + moduleName + "_List(" + str(count) + ");\n")
99
				main_c.write(main_c_template_line[:pos_list] + moduleName + "_List(" + str(count) + ");\n")
100
				count += 1
100
				count += 1
101
		elif pos_handlemsg != -1:
101
		elif pos_handlemsg != -1:
102
			for moduleName in modules:
102
			for moduleName in modules:
103
				main_c.write(main_c_template_line[:pos_handlemsg] + moduleName + "_HandleMessage(&rxMsg);\n")
103
				main_c.write(main_c_template_line[:pos_handlemsg] + moduleName + "_HandleMessage(&rxMsg);\n")
104
		else:
104
		else:
105
			main_c.write(main_c_template_line)
105
			main_c.write(main_c_template_line)
106
 
106
 
107
	main_c.close()
107
	main_c.close()
108
	
108
	
109
	print "Creation of main.c complete"
109
	print "Creation of main.c complete"
110
 
110
 
111
def readConfigSection(fileName, sectionName):
111
def readConfigSection(fileName, sectionName):
112
	fileInstance = open(fileName, 'r')
112
	fileInstance = open(fileName, 'r')
113
	lines = fileInstance.readlines()
113
	lines = fileInstance.readlines()
114
	fileInstance.close()
114
	fileInstance.close()
115
	
115
	
116
	sectionLines = []
116
	sectionLines = []
117
	
117
	
118
	inSection = False
118
	inSection = False
119
	
119
	
120
	for line in lines:
120
	for line in lines:
121
		if not inSection:
121
		if not inSection:
122
			if line.find("## Section " + sectionName) != -1:
122
			if line.find("## Section " + sectionName) != -1:
123
				inSection = True
123
				inSection = True
124
				sectionLines.append(line.strip("\n"))
124
				sectionLines.append(line.strip("\n"))
125
		else:
125
		else:
126
			if line.find("## End section " + sectionName) != -1:
126
			if line.find("## End section " + sectionName) != -1:
127
				inSection = False
127
				inSection = False
128
				
128
				
129
			sectionLines.append(line.strip("\n"))
129
			sectionLines.append(line.strip("\n"))
130
			
130
			
131
	return sectionLines
131
	return sectionLines
132
	
132
	
133
 
133
 
134
def updateConfigFile():
134
def updateConfigFile():
135
	print "Updating config.inc..."
135
	print "Updating config.inc..."
136
	
136
	
137
	modules = getLocalModules()
137
	modules = getLocalModules()
138
	moduleSections = {}
138
	moduleSections = {}
139
	applicationSection = []
139
	applicationSection = []
140
	
140
	
141
	if not os.path.exists("config.inc"):
141
	if not os.path.exists("config.inc"):
142
		applicationSection = readConfigSection("src/config.inc.template", "application")
142
		applicationSection = readConfigSection("src/config.inc.template", "application")
143
		
143
		
144
		for moduleName in modules:
144
		for moduleName in modules:
145
			moduleSections[moduleName] = readConfigSection(localmoddir + "/" + moduleName + "/config.inc.template", moduleName)
145
			moduleSections[moduleName] = readConfigSection(localmoddir + "/" + moduleName + "/config.inc.template", moduleName)
146
	else:
146
	else:
147
		applicationSection = readConfigSection("config.inc", "application")
147
		applicationSection = readConfigSection("config.inc", "application")
148
		
148
		
149
		for moduleName in modules:
149
		for moduleName in modules:
150
			moduleSections[moduleName] = readConfigSection("config.inc", moduleName)
150
			moduleSections[moduleName] = readConfigSection("config.inc", moduleName)
151
			
151
			
152
			if len(moduleSections[moduleName]) <= 1:
152
			if len(moduleSections[moduleName]) <= 1:
153
				moduleSections[moduleName] = readConfigSection(localmoddir + "/" + moduleName + "/config.inc.template", moduleName)
153
				moduleSections[moduleName] = readConfigSection(localmoddir + "/" + moduleName + "/config.inc.template", moduleName)
154
	
154
	
155
	timers = 0
155
	timers = 0
-
 
156
	pcints = 0
156
		
157
		
157
	for moduleName, moduleSection in moduleSections.iteritems():
158
	for moduleName, moduleSection in moduleSections.iteritems():
158
		c = 0
159
		c = 0
159
		for line in moduleSection:
160
		for line in moduleSection:
160
			if line.find("<ID>") != -1:
161
			if line.find("<ID>") != -1:
161
				line = line.replace("<ID>", getFreeModuleId(moduleName))
162
				line = line.replace("<ID>", getFreeModuleId(moduleName))
162
			elif line.find("<TIMER>") != -1:
163
			elif line.find("<TIMER>") != -1:
163
				line = line[:line.find("=")+1] + hex(timers) + " /* <TIMER> -- DO NOT REMOVE THIS COMMENT -- */"
164
				line = line[:line.find("=")+1] + hex(timers) + " /* <TIMER> -- DO NOT REMOVE THIS COMMENT -- */"
164
				timers += 1
165
				timers += 1
-
 
166
			elif line.find("<PCINT>") != -1:
-
 
167
				line = line[:line.find("=")+1] + hex(timers) + " /* <PCINT> -- DO NOT REMOVE THIS COMMENT -- */"
-
 
168
				pcints += 1
165
				
169
	
166
			moduleSection[c] = line;
170
			moduleSection[c] = line;
167
			c += 1
171
			c += 1
168
	
172
	
169
	c = 0
173
	c = 0
170
	for line in applicationSection:
174
	for line in applicationSection:
171
		if line.find("<TIMER>") != -1:
175
		if line.find("<TIMER>") != -1:
172
			line = line[:line.find("=")+1] + hex(timers) + " /* <TIMER> -- DO NOT REMOVE THIS COMMENT -- */"
176
			line = line[:line.find("=")+1] + hex(timers) + " /* <TIMER> -- DO NOT REMOVE THIS COMMENT -- */"
173
			timers += 1
177
			timers += 1
174
		elif line.find("TIMER_NUM_TIMERS=") != -1:
178
		elif line.find("TIMER_NUM_TIMERS=") != -1:
175
			line = "TIMER_NUM_TIMERS=" + hex(timers)
179
			line = "TIMER_NUM_TIMERS=" + hex(timers)
176
		elif line.find("NUMBER_OF_MODULES=") != -1:
180
		elif line.find("NUMBER_OF_MODULES=") != -1:
177
			line = "NUMBER_OF_MODULES=" + hex(len(modules))
181
			line = "NUMBER_OF_MODULES=" + hex(len(modules))
-
 
182
		elif line.find("<PCINT>") != -1:
-
 
183
			line = line[:line.find("=")+1] + hex(pcints) + " /* <PCINT> -- DO NOT REMOVE THIS COMMENT -- */"
178
		
184
			pcints += 1
-
 
185
		elif line.find("PCINT_NUM_PCINTS=") != -1:
-
 
186
			line = "PCINT_NUM_PCINTS=" + hex(pcints)
179
		applicationSection[c] = line;
187
		applicationSection[c] = line;
180
		c += 1
188
		c += 1
181
		
189
		
182
	config_inc = open('config.inc', 'w')
190
	config_inc = open('config.inc', 'w')
183
	
191
	
184
	for line in applicationSection:
192
	for line in applicationSection:
185
		config_inc.write(line + "\n")
193
		config_inc.write(line + "\n")
186
		
194
		
187
	for moduleName, moduleSection in moduleSections.iteritems():
195
	for moduleName, moduleSection in moduleSections.iteritems():
188
		for line in moduleSection:
196
		for line in moduleSection:
189
			config_inc.write(line + "\n")
197
			config_inc.write(line + "\n")
190
		
198
		
191
	config_inc.close()
199
	config_inc.close()
192
	
200
	
193
	print "Update of config.inc complete"
201
	print "Update of config.inc complete"
194
 
202
 
195
 
203
 
196
def compileSourcesFile():
204
def compileSourcesFile():
197
	print "Compiling sources.inc..."
205
	print "Compiling sources.inc..."
198
	
206
	
199
	uniqueSet = []
207
	uniqueSet = []
200
	
208
	
201
	sources_list_template = open('src/sources.list.template', 'r')
209
	sources_list_template = open('src/sources.list.template', 'r')
202
	sources_list_template_lines = sources_list_template.readlines()
210
	sources_list_template_lines = sources_list_template.readlines()
203
	sources_list_template.close()
211
	sources_list_template.close()
204
	
212
	
205
	for sources_list_template_line in sources_list_template_lines:
213
	for sources_list_template_line in sources_list_template_lines:
206
		line = sources_list_template_line.strip("\n").strip(" ")
214
		line = sources_list_template_line.strip("\n").strip(" ")
207
		if len(line) > 0:
215
		if len(line) > 0:
208
			if line[0] != '#':
216
			if line[0] != '#':
209
				uniqueSet.append(line)
217
				uniqueSet.append(line)
210
		
218
		
211
	modules = getLocalModules()
219
	modules = getLocalModules()
212
	
220
	
213
	for moduleName in modules:
221
	for moduleName in modules:
214
		sources_list = open(localmoddir + "/" + moduleName + "/sources.list", 'r')
222
		sources_list = open(localmoddir + "/" + moduleName + "/sources.list", 'r')
215
		sources_list_lines = sources_list.readlines()
223
		sources_list_lines = sources_list.readlines()
216
		sources_list.close()
224
		sources_list.close()
217
	
225
	
218
		for sources_list_line in sources_list_lines:
226
		for sources_list_line in sources_list_lines:
219
			line = sources_list_line.strip("\n").strip(" ")
227
			line = sources_list_line.strip("\n").strip(" ")
220
			if len(line) > 0:
228
			if len(line) > 0:
221
				if line[0] != '#':
229
				if line[0] != '#':
222
					uniqueSet.append(line)
230
					uniqueSet.append(line)
223
			
231
			
224
	
232
	
225
	sourcesString = "SOURCES = "
233
	sourcesString = "SOURCES = "
226
	
234
	
227
	#FIXME: Make uniqueSet actually unique
235
	#FIXME: Make uniqueSet actually unique
228
	
236
	
229
	for line in uniqueSet:
237
	for line in uniqueSet:
230
		sourcesString += line + " "
238
		sourcesString += line + " "
231
		
239
		
232
	sources_inc = open('sources.inc', 'w')
240
	sources_inc = open('sources.inc', 'w')
233
	sources_inc.write(sourcesString.strip(" ") + "\n")
241
	sources_inc.write(sourcesString.strip(" ") + "\n")
234
	sources_inc.close()
242
	sources_inc.close()
235
	
243
	
236
	print "Creation of sources.inc complete"
244
	print "Creation of sources.inc complete"
237
 
245
 
238
 
246
 
239
def regenerateModules():
247
def regenerateModules():
240
	print "Regenerating modules..."
248
	print "Regenerating modules..."
241
	print ""
249
	print ""
242
	compileSourcesFile()
250
	compileSourcesFile()
243
	print ""
251
	print ""
244
	compileMainFile()
252
	compileMainFile()
245
	print ""
253
	print ""
246
	updateConfigFile()
254
	updateConfigFile()
247
	print ""
255
	print ""
248
	print "Regenerating modules complete"
256
	print "Regenerating modules complete"
249
	print ""
257
	print ""
250
 
258
 
251
 
259
 
252
def addModule(moduleName):
260
def addModule(moduleName):
253
	print "Trying to add module " + moduleName
261
	print "Trying to add module " + moduleName
254
	
262
	
255
	try:
263
	try:
256
		os.symlink(moddir + "/" + moduleName, localmoddir + "/" + moduleName)
264
		os.symlink(moddir + "/" + moduleName, localmoddir + "/" + moduleName)
257
		print "Added module successfully"
265
		print "Added module successfully"
258
	except OSError, (errno, strerror):
266
	except OSError, (errno, strerror):
259
		if errno == 17:
267
		if errno == 17:
260
			print "A link, file or directory named " + moduleName + " is already present in the modules directory, not linking"
268
			print "A link, file or directory named " + moduleName + " is already present in the modules directory, not linking"
261
		else:
269
		else:
262
			raise
270
			raise
263
	
271
	
264
	print ""
272
	print ""
265
	
273
	
266
	regenerateModules()
274
	regenerateModules()
267
 
275
 
268
 
276
 
269
def delModule(moduleName):
277
def delModule(moduleName):
270
	print "Trying to remove module " + moduleName
278
	print "Trying to remove module " + moduleName
271
	
279
	
272
	try:
280
	try:
273
		os.unlink(localmoddir + "/" + moduleName)
281
		os.unlink(localmoddir + "/" + moduleName)
274
		print "Removed module successfully"
282
		print "Removed module successfully"
275
	except OSError, (errno, strerror):
283
	except OSError, (errno, strerror):
276
		if errno == 2:
284
		if errno == 2:
277
			print "No such " + moduleName + " present in the modules directory, not unlinking"
285
			print "No such " + moduleName + " present in the modules directory, not unlinking"
278
		else:
286
		else:
279
			raise
287
			raise
280
	
288
	
281
	print ""
289
	print ""
282
	
290
	
283
	regenerateModules()
291
	regenerateModules()
284
 
292
 
285
def createFile(moduleName, templateFileName, moduleFileName):
293
def createFile(moduleName, templateFileName, moduleFileName):
286
	print "Creating " + moduleName + "/" + templateFileName + "..."
294
	print "Creating " + moduleName + "/" + templateFileName + "..."
287
	template_file = open(moddir + "/template/" + templateFileName, 'r')
295
	template_file = open(moddir + "/template/" + templateFileName, 'r')
288
	lines = template_file.readlines()
296
	lines = template_file.readlines()
289
	template_file.close()
297
	template_file.close()
290
 
298
 
291
	module_file = open(moddir + "/" + moduleName + "/" + moduleFileName, 'w')
299
	module_file = open(moddir + "/" + moduleName + "/" + moduleFileName, 'w')
292
	
300
	
293
	for line in lines:
301
	for line in lines:
294
		line = line.replace("<template>", moduleName)
302
		line = line.replace("<template>", moduleName)
295
		line = line.replace("<TEMPLATE>", moduleName.upper())
303
		line = line.replace("<TEMPLATE>", moduleName.upper())
296
 
304
 
297
		module_file.write(line)
305
		module_file.write(line)
298
 
306
 
299
	module_file.close()
307
	module_file.close()
300
	
308
	
301
def newModule(moduleName):
309
def newModule(moduleName):
302
	print "Creating " + moddir + "/" + moduleName + " directory..."
310
	print "Creating " + moddir + "/" + moduleName + " directory..."
303
	os.mkdir(moddir + "/" + moduleName + "/")
311
	os.mkdir(moddir + "/" + moduleName + "/")
304
 
312
 
305
	createFile(moduleName, "config.inc.template", "config.inc.template")
313
	createFile(moduleName, "config.inc.template", "config.inc.template")
306
	createFile(moduleName, "sources.list", "sources.list")
314
	createFile(moduleName, "sources.list", "sources.list")
307
	createFile(moduleName, "template.h", moduleName + ".h")
315
	createFile(moduleName, "template.h", moduleName + ".h")
308
	createFile(moduleName, "template.c", moduleName + ".c")
316
	createFile(moduleName, "template.c", moduleName + ".c")
309
	createFile(moduleName, "template_eeprom.h", moduleName + "_eeprom.h")
317
	createFile(moduleName, "template_eeprom.h", moduleName + "_eeprom.h")
310
 
318
 
311
def usage():
319
def usage():
312
	print "Syntax: ./ModuleManager [options]"
320
	print "Syntax: ./ModuleManager [options]"
313
	print "Options:"
321
	print "Options:"
314
	print "  --help               Print this help"
322
	print "  --help               Print this help"
315
	print "  --regenerate         Regenarate modules and files"
323
	print "  --regenerate         Regenarate modules and files"
316
	print "  --list               List avalible and installed modules"
324
	print "  --list               List avalible and installed modules"
317
	print "  --add=<module name>  Adds a module to the application"
325
	print "  --add=<module name>  Adds a module to the application"
318
	print "  --del=<module name>  Removes a module from the application"
326
	print "  --del=<module name>  Removes a module from the application"
319
	print "  --new=<module name>  Creates a new module from the module template"
327
	print "  --new=<module name>  Creates a new module from the module template"
320
	print ""
328
	print ""
321
 
329
 
322
 
330
 
323
def main():
331
def main():
324
	try:
332
	try:
325
		opts, args = getopt.getopt(sys.argv[1:], "hlrc", ["help", "list", "regenerate", "add=", "del=", "new="])
333
		opts, args = getopt.getopt(sys.argv[1:], "hlrc", ["help", "list", "regenerate", "add=", "del=", "new="])
326
	except getopt.GetoptError, err:
334
	except getopt.GetoptError, err:
327
		# print help information and exit:
335
		# print help information and exit:
328
		print str(err) # will print something like "option -a not recognized"
336
		print str(err) # will print something like "option -a not recognized"
329
		usage()
337
		usage()
330
		sys.exit(2)
338
		sys.exit(2)
331
	
339
	
332
	if len(sys.argv) == 1:
340
	if len(sys.argv) == 1:
333
		usage()
341
		usage()
334
		sys.exit()
342
		sys.exit()
335
	
343
	
336
	for o, a in opts:
344
	for o, a in opts:
337
		if o in ("-c"):
345
		if o in ("-c"):
338
			modules = getModules()
346
			modules = getModules()
339
			
347
			
340
			for module in modules:
348
			for module in modules:
341
				print module
349
				print module
342
 
350
 
343
		elif o in ("-l", "--list"):
351
		elif o in ("-l", "--list"):
344
			modules = getModules()
352
			modules = getModules()
345
			
353
			
346
			print "Available modules"
354
			print "Available modules"
347
			print "================="
355
			print "================="
348
			for module in modules:
356
			for module in modules:
349
				print module
357
				print module
350
			
358
			
351
 
359
 
352
			if os.path.exists(localmoddir):
360
			if os.path.exists(localmoddir):
353
				print ""
361
				print ""
354
			
362
			
355
				modules = getLocalModules()
363
				modules = getLocalModules()
356
			
364
			
357
				print "Modules used in this application"
365
				print "Modules used in this application"
358
				print "================================"
366
				print "================================"
359
				for module in modules:
367
				for module in modules:
360
					print module
368
					print module
361
			
369
			
362
		elif o in ("-h", "--help"):
370
		elif o in ("-h", "--help"):
363
			usage()
371
			usage()
364
			sys.exit()
372
			sys.exit()
365
			
373
			
366
		elif o in ("-r", "--regenerate"):
374
		elif o in ("-r", "--regenerate"):
367
			regenerateModules()
375
			regenerateModules()
368
			
376
			
369
		elif o in ("--add"):
377
		elif o in ("--add"):
370
			if len(a) == 0:
378
			if len(a) == 0:
371
				print "No modulename specified"
379
				print "No modulename specified"
372
				usage()
380
				usage()
373
				sys.exit()
381
				sys.exit()
374
			
382
			
375
			if a not in getModules():
383
			if a not in getModules():
376
				print a + " is not a recognized module name"
384
				print a + " is not a recognized module name"
377
				sys.exit()
385
				sys.exit()
378
				
386
				
379
			addModule(a)
387
			addModule(a)
380
			
388
			
381
		elif o in ("--del"):
389
		elif o in ("--del"):
382
			if len(a) == 0:
390
			if len(a) == 0:
383
				print "No modulename specified"
391
				print "No modulename specified"
384
				usage()
392
				usage()
385
				sys.exit()
393
				sys.exit()
386
			
394
			
387
			if a not in getModules():
395
			if a not in getModules():
388
				print a + " is not a recognized module name"
396
				print a + " is not a recognized module name"
389
				sys.exit()
397
				sys.exit()
390
				
398
				
391
			delModule(a)
399
			delModule(a)
392
			
400
			
393
		elif o in ("--new"):
401
		elif o in ("--new"):
394
			if len(a) == 0:
402
			if len(a) == 0:
395
				print "No modulename specified"
403
				print "No modulename specified"
396
				usage()
404
				usage()
397
				sys.exit()
405
				sys.exit()
398
			
406
			
399
			if a in getModules():
407
			if a in getModules():
400
				print a + " already exists"
408
				print a + " already exists"
401
				sys.exit()
409
				sys.exit()
402
				
410
				
403
			newModule(a)
411
			newModule(a)
404
			
412
			
405
		else:
413
		else:
406
			assert False, "unhandled option"
414
			assert False, "unhandled option"
407
 
415
 
408
 
416
 
409
if __name__ == "__main__":
417
if __name__ == "__main__":
410
	main()
418
	main()
411
 
419