# -*- coding: iso-8859-1 -*- import os import sys import string import popen2 import stat import re from os import path class CMT: def removedirs (self, top): # Delete everything reachable from the directory named in 'top'. # CAUTION: This is dangerous! For example, if top == '/', it # could delete all your disk files. if os.path.exists (top): for root, dirs, files in os.walk (top, topdown=False): for name in files: name = root + '/' + name os.chmod (name, stat.S_IWRITE) os.remove (name) for name in dirs: name = root + '/' + name os.chmod (name, stat.S_IWRITE) os.rmdir (name) os.chmod (top, stat.S_IWRITE) os.rmdir (top) #---------------------------------------------------- # # Exécution d'une commande du shell # def execute (self, cmd): #print '> ' + cmd r, w, e = popen2.popen3(cmd) lines = [] for line in r.readlines(): line = string.rstrip (line) lines.append (line) #for line in e.readlines(): # line = string.rstrip (line) # lines.append (line) r.close() w.close() e.close() return lines #end execute #---------------------------------------------------- def show_lines (lines): for line in lines: print line # end show_lines #---------------------------------------------------- cmtexe = os.environ ['CMTROOT'] + '/' + os.environ ['CMTBIN'] + '/cmt.exe' macros = dict () sets = dict () uses = [] pwd = '' def __init__ (self): self.pwd = self.do (self.cmtexe + ' show pwd') if self.pwd == '': self.pwd = os.getcwd () temp_file_name1 = os.path.join (self.pwd, 'CMT' + str(os.getpid ()) + '1.txt') temp_file_name2 = os.path.join (self.pwd, 'CMT' + str(os.getpid ()) + '2.txt') temp_file = file (temp_file_name1, 'w+') lines = self.execute (self.cmtexe + ' -quiet build tag_makefile') for line in lines: temp_file.write (line + '\n') temp_file.close () self.do ('filter ' + temp_file_name1 + ' ' + temp_file_name2) temp_file = file (temp_file_name2) for line in temp_file.readlines (): name = re.sub ('=.*', '', line) value = re.sub ('^' + name + '=', '', line) self.macros [name] = value temp_file.close () os.remove (temp_file_name1) os.remove (temp_file_name2) #lines = execute (self.cmtexe + ' show sets') #for line in lines: # name = re.sub ('=.*', '', line) # value = re.sub ('^' + name + '=', '', line) # sets [name] = value lines = self.execute (self.cmtexe + ' show uses') for line in lines: if line[0] == '#': continue self.uses.append (line) def macro_value (self, name): if not self.macros.has_key (name): lines = self.execute (self.cmtexe + ' show macro_value ' + name) self.macros[name] = '' for line in lines: self.macros[name] = line break return self.macros[name] def do (self, cmd): lines = self.execute (self.cmtexe + ' -quiet ' + cmd) if len(lines) > 0: return lines[0] else: return ''