source: cmtpacman/HEAD/scripts/cmt.py@ 689

Last change on this file since 689 was 53, checked in by arnault, 20 years ago

From CVS to SVN

File size: 3.5 KB
Line 
1
2# -*- coding: iso-8859-1 -*-
3
4import os
5import sys
6import string
7import popen2
8import stat
9import re
10from os import path
11
12class 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
Note: See TracBrowser for help on using the repository browser.