source: CMTpy/HEAD/python/cmt.py@ 689

Last change on this file since 689 was 278, checked in by garonne, 19 years ago

HEAD

File size: 5.5 KB
Line 
1'''
2Date: june/29/2005
3Description: Class and methods to use CMT with Python sources, based on the christian's python class.
4
5Simple usage:
6 import CMT
7
8 if __name__ == "__main__":
9
10 cmt = CMT()
11
12 package = 'CMTpy'
13
14 package_root = cmt.macro_value (package + '_root')
15 print package_root
16
17 if cmt.tag (package + '_with_installarea'):
18 print package + ' strategy is with installarea'
19
20 print "Macros: ", cmt.macros , '\n'
21 print "Tags: ", cmt.tags , '\n'
22 print "Sets: ", cmt.sets , '\n'
23
24'''
25__author__ = "Vincent Garonne"
26__email__ = "garonne at lal dot in2p3 dot fr"
27__version__ = "HEAD"
28__all__ = ["CMT"]
29
30import os
31import sys
32import string
33import popen2
34import stat
35import re
36import commands
37from os import path
38
39
40#----------------------------------------------------
41def execute (cmd):
42 """Executing a shell command
43 """
44 #print '> ' + cmd
45 r, w, e = popen2.popen3(cmd)
46 lines = []
47 for line in r.readlines():
48 ##print line
49 line = string.rstrip (line)
50 lines.append (line)
51 #for line in e.readlines():
52 # line = string.rstrip (line)
53 # lines.append (line)
54 r.close()
55 w.close()
56 e.close()
57 return lines
58
59class CMT:
60
61 def __init__ (self):
62 """Constructor
63 """
64 # __init__
65 # Variables
66 self.cmtexe = os.environ ['CMTROOT'] + '/' + os.environ ['CMTBIN'] + '/cmt.exe -tag_add=Doxygen '
67 self.macros = dict ()
68 self.tags = dict ()
69 self.sets = dict ()
70 self.uses = []
71 self.top_uses = []
72
73 # Initialyzation
74 self.init_sets ()
75 self.init_macros ()
76 self.init_tags ()
77 self.init_uses ()
78
79 def expand_pattern (self, text, p1, p2):
80 v = text
81 rexp = ''
82 for c in p1:
83 rexp += r'[' + c + r']'
84 rexp += '([^' + p2 + r']*)[' + p2 + r']'
85 while True:
86 ms = re.findall (rexp, v)
87 if len(ms) == 0:
88 break
89 for m in ms:
90 if m in self.macros:
91 v = string.replace (v, p1 + m + p2, self.macros[m])
92 elif m in os.environ:
93 v = string.replace (v, p1 + m + p2, os.environ [m])
94 else:
95 v = string.replace (v, p1 + m + p2, '')
96 # while True
97 return (v)
98
99 def expand (self, text):
100 v = text
101 v = self.expand_pattern (v, '$(', ')')
102 v = self.expand_pattern (v, '${', '}')
103 v = self.expand_pattern (v, '%', '%')
104 return (v)
105 # expand
106
107 # Pre-fetch the macro values and expand all of them
108 def init_macros (self):
109 lines = execute (self.cmtexe + ' show macros')
110 for line in lines:
111 w = string.split (line, '=')
112 name = w[0]
113 if len(w)>=2:
114 value = re.sub ('^[\']', '', w[1])
115 value = re.sub ('[\']$', '', value)
116 self.macros [name] = value
117 for key in self.macros.keys():
118 self.macros[key] = self.expand (self.macros[key])
119 #print key + '=' + v
120 # for key in self.macros.keys():
121 # init_macros
122
123 def init_sets (self):
124 lines = execute (self.cmtexe + ' show sets')
125 for line in lines:
126 w = string.split (line, '=')
127 name = w[0]
128 if len(w)>=2:
129 value = re.sub ('^[\']', '', w[1])
130 value = re.sub ('[\']$', '', value)
131 self.macros [name] = value
132 for key in self.macros.keys():
133 self.macros[key] = self.expand (self.macros[key])
134 #print key + '=' + v
135 # for key in self.macros.keys():
136 # init_sets
137
138 def init_tags (self):
139 lines = execute (self.cmtexe + ' show tags')
140 for line in lines:
141 w = string.split (line, ' ')
142 name = w[0]
143 #print 'tag=' + name
144 self.tags [name] = True
145 # init_tags
146
147 def init_uses (self):
148 lines = execute (self.cmtexe + ' show uses')
149 for line in lines:
150 if line[0] == '#':
151 if line[0:5] == '# use':
152 w = string.split (line, ' ')
153 #print 'init_uses> [' + w[2] + ']'
154 self.top_uses.append (w[2])
155 continue
156 self.uses.append (line)
157 # init_uses
158
159 def macro_value (self, name):
160 if not self.macros.has_key (name):
161 return ''
162 return self.macros[name]
163 # macro_value
164
165 def tag (self, name):
166 if not self.tags.has_key (name):
167 return False
168 return True
169 # tag
170
171 def do (self, cmd):
172 execute (self.cmtexe + ' ' + cmd)
173 # do
174
175##############################################################################
176# Executing this module from the command line
177##############################################################################
178
179if __name__ == "__main__":
180
181 cmt = CMT()
182
183 package = 'CMTpy'
184
185 package_root = cmt.macro_value (package + '_root')
186 print package_root
187
188 if cmt.tag (package + '_with_installarea'):
189 print package + ' strategy is with installarea'
190
191 print "Macros: ", cmt.macros , '\n'
192 print "Tags: ", cmt.tags , '\n'
193 print "Sets: ", cmt.sets , '\n'
194
195#--------------------------------- EoF --------------------------------------#
196
197
Note: See TracBrowser for help on using the repository browser.