Subversion Repositories HomeAutomation

Rev

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

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