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

Last change on this file since 60 was 53, checked in by arnault, 19 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.