| 1 | 
 | 
|---|
| 2 | # -*- coding: iso-8859-1 -*-
 | 
|---|
| 3 | 
 | 
|---|
| 4 | import os
 | 
|---|
| 5 | import sys
 | 
|---|
| 6 | import string
 | 
|---|
| 7 | import popen2
 | 
|---|
| 8 | import stat
 | 
|---|
| 9 | import re
 | 
|---|
| 10 | from os import path
 | 
|---|
| 11 | 
 | 
|---|
| 12 | class CMT:
 | 
|---|
| 13 | 
 | 
|---|
| 14 |     def removedirs (self, top):
 | 
|---|
| 15 |         # Delete everything reachable from the directory named in 'top'.
 | 
|---|
| 16 |         # CAUTION:  This is dangerous!  For example, if top == '/', it
 | 
|---|
| 17 |         # could delete all your disk files.
 | 
|---|
| 18 |         if os.path.exists (top):
 | 
|---|
| 19 |             for root, dirs, files in os.walk (top, topdown=False):
 | 
|---|
| 20 |                 for name in files:
 | 
|---|
| 21 |                     name = root + '/' + name
 | 
|---|
| 22 |                     os.chmod (name, stat.S_IWRITE)
 | 
|---|
| 23 |                     os.remove (name)
 | 
|---|
| 24 |                 for name in dirs:
 | 
|---|
| 25 |                     name = root + '/' + name
 | 
|---|
| 26 |                     os.chmod (name, stat.S_IWRITE)
 | 
|---|
| 27 |                     os.rmdir (name)
 | 
|---|
| 28 |             os.chmod (top, stat.S_IWRITE)
 | 
|---|
| 29 |             os.rmdir (top)
 | 
|---|
| 30 | 
 | 
|---|
| 31 | 
 | 
|---|
| 32 |     #----------------------------------------------------
 | 
|---|
| 33 |     #
 | 
|---|
| 34 |     # Exécution d'une commande du shell
 | 
|---|
| 35 |     #
 | 
|---|
| 36 |     def execute (self, cmd):
 | 
|---|
| 37 |         #print '> ' + cmd
 | 
|---|
| 38 |         r, w, e = popen2.popen3(cmd)
 | 
|---|
| 39 |         lines = []
 | 
|---|
| 40 |         for line in r.readlines():
 | 
|---|
| 41 |             line = string.rstrip (line)
 | 
|---|
| 42 |             lines.append (line)
 | 
|---|
| 43 |         #for line in e.readlines():
 | 
|---|
| 44 |         #    line = string.rstrip (line)
 | 
|---|
| 45 |         #    lines.append (line)
 | 
|---|
| 46 |         r.close()
 | 
|---|
| 47 |         w.close()
 | 
|---|
| 48 |         e.close()
 | 
|---|
| 49 |         return lines
 | 
|---|
| 50 |         #end execute
 | 
|---|
| 51 | 
 | 
|---|
| 52 |     #----------------------------------------------------
 | 
|---|
| 53 |     def show_lines (lines):
 | 
|---|
| 54 |         for line in lines:
 | 
|---|
| 55 |             print line
 | 
|---|
| 56 |         # end show_lines
 | 
|---|
| 57 | 
 | 
|---|
| 58 |     #----------------------------------------------------
 | 
|---|
| 59 |     cmtexe = os.environ ['CMTROOT'] + '/' + os.environ ['CMTBIN'] + '/cmt.exe'
 | 
|---|
| 60 |     macros = dict ()
 | 
|---|
| 61 |     sets = dict ()
 | 
|---|
| 62 |     uses = []
 | 
|---|
| 63 |     pwd = ''
 | 
|---|
| 64 |     
 | 
|---|
| 65 |     def __init__ (self):
 | 
|---|
| 66 | 
 | 
|---|
| 67 |         self.pwd = self.do (self.cmtexe + ' show pwd')
 | 
|---|
| 68 |         if self.pwd == '':
 | 
|---|
| 69 |             self.pwd = os.getcwd ()
 | 
|---|
| 70 |         
 | 
|---|
| 71 |         temp_file_name1 = os.path.join (self.pwd, 'CMT' + str(os.getpid ()) + '1.txt')
 | 
|---|
| 72 |         temp_file_name2 = os.path.join (self.pwd, 'CMT' + str(os.getpid ()) + '2.txt')
 | 
|---|
| 73 |         temp_file = file (temp_file_name1, 'w+')
 | 
|---|
| 74 | 
 | 
|---|
| 75 |         lines = self.execute (self.cmtexe + ' -quiet build tag_makefile')
 | 
|---|
| 76 |         for line in lines:
 | 
|---|
| 77 |             temp_file.write (line + '\n')
 | 
|---|
| 78 |         temp_file.close ()
 | 
|---|
| 79 |         
 | 
|---|
| 80 |         self.do ('filter ' + temp_file_name1 + ' ' + temp_file_name2)
 | 
|---|
| 81 |         
 | 
|---|
| 82 |         temp_file = file (temp_file_name2)
 | 
|---|
| 83 |         
 | 
|---|
| 84 |         for line in temp_file.readlines ():
 | 
|---|
| 85 |             name = re.sub ('=.*', '', line)
 | 
|---|
| 86 |             value = re.sub ('^' + name + '=', '', line)
 | 
|---|
| 87 |             self.macros [name] = value
 | 
|---|
| 88 | 
 | 
|---|
| 89 |         temp_file.close ()
 | 
|---|
| 90 | 
 | 
|---|
| 91 |         os.remove (temp_file_name1)
 | 
|---|
| 92 |         os.remove (temp_file_name2)
 | 
|---|
| 93 | 
 | 
|---|
| 94 |         #lines = execute (self.cmtexe + ' show sets')
 | 
|---|
| 95 |         #for line in lines:
 | 
|---|
| 96 |         #    name = re.sub ('=.*', '', line)
 | 
|---|
| 97 |         #    value = re.sub ('^' + name + '=', '', line)
 | 
|---|
| 98 |         #    sets [name] = value
 | 
|---|
| 99 | 
 | 
|---|
| 100 |         lines = self.execute (self.cmtexe + ' show uses')
 | 
|---|
| 101 |         for line in lines:
 | 
|---|
| 102 |             if line[0] == '#':
 | 
|---|
| 103 |                 continue
 | 
|---|
| 104 |             self.uses.append (line)
 | 
|---|
| 105 | 
 | 
|---|
| 106 |     def macro_value (self, name):
 | 
|---|
| 107 |         if not self.macros.has_key (name):
 | 
|---|
| 108 |             lines = self.execute (self.cmtexe + ' show macro_value ' + name)
 | 
|---|
| 109 |             self.macros[name] = ''
 | 
|---|
| 110 |             for line in lines:
 | 
|---|
| 111 |                 self.macros[name] = line
 | 
|---|
| 112 |                 break
 | 
|---|
| 113 |         return self.macros[name]
 | 
|---|
| 114 | 
 | 
|---|
| 115 |     def do (self, cmd):
 | 
|---|
| 116 |         lines = self.execute (self.cmtexe + ' -quiet ' + cmd)
 | 
|---|
| 117 |         if len(lines) > 0:
 | 
|---|
| 118 |             return lines[0]
 | 
|---|
| 119 |         else:
 | 
|---|
| 120 |             return ''
 | 
|---|
| 121 | 
 | 
|---|