~ubuntu-branches/ubuntu/trusty/dot2tex/trusty-proposed

« back to all changes in this revision

Viewing changes to tests/test_buildexamples.py

  • Committer: Bazaar Package Importer
  • Author(s): Peter Collingbourne, Peter Collingbourne, Piotr Ożarowski
  • Date: 2008-06-12 14:04:56 UTC
  • mfrom: (1.2.1 upstream) (4.1.4 intrepid)
  • Revision ID: james.westby@ubuntu.com-20080612140456-d3g7i81ln1jn71oj
Tags: 2.8.2-1
[ Peter Collingbourne ]
* New upstream release
* debian/patches/01-shebang.patch: removed, applied upstream
* debian/rules: simple-patchsys removed, no longer required
* debian/control
  - updated Standards-Version
  - removed references to tetex
  - removed unnecessary ~ in python version number

[ Piotr Ożarowski ]
* Added DM-Upload-Allowed: yes

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
"""
 
2
Script to build the the dot2tex examples.
 
3
"""
 
4
 
 
5
 
 
6
import re, os,shutil, glob,sys,logging
 
7
 
 
8
from os.path import join,basename,splitext,normpath,abspath
 
9
 
 
10
# intitalize logging module
 
11
log = logging.getLogger("test_graphparser")
 
12
console = logging.StreamHandler()
 
13
console.setLevel(logging.WARNING)
 
14
# set a format which is simpler for console use
 
15
formatter = logging.Formatter('%(levelname)-8s %(message)s')
 
16
# tell the handler to use this format
 
17
console.setFormatter(formatter)
 
18
log.addHandler(console)
 
19
 
 
20
 
 
21
BASE_DIR = join(abspath(os.path.dirname(__file__)),"")
 
22
DEST_DIR = join(BASE_DIR,'exrender/')
 
23
EXAMPLES_DIR = normpath(abspath(join(BASE_DIR,"../examples/")))
 
24
 
 
25
 
 
26
def copyifnewer(source, dest):
 
27
    """Copy source to dest if dest is older than source or doesn't exists"""
 
28
    copy = False
 
29
    # Check that dest exists. Create dir if necessary
 
30
    if os.path.exists(dest):
 
31
        # get source's and dest's timpestamps
 
32
        source_ts = os.path.getmtime(source)
 
33
        dest_ts = os.path.getmtime(dest)
 
34
        # compare timestamps
 
35
        if source_ts > dest_ts: copy = True
 
36
    else:
 
37
        copy = True
 
38
        dir = os.path.dirname(dest)
 
39
        if dir != '' and not os.path.exists(dir):
 
40
            os.makedirs(dir)
 
41
    # copy source to dest
 
42
    if copy:
 
43
        shutil.copy2(source, dest)
 
44
 
 
45
 
 
46
def runcmd(syscmd):
 
47
    #err = os.system(syscmd)
 
48
    sres = os.popen(syscmd)
 
49
    resdata =  sres.read()
 
50
    err = sres.close()
 
51
    if err:
 
52
        log.warning('Failed to run command:\n%s',syscmd)
 
53
        log.debug('Output:\n%s',resdata)
 
54
    return err
 
55
 
 
56
def meps(filename):
 
57
    fn = splitext(filename)[0]
 
58
    s = "latex -halt-on-error -interaction nonstopmode %s.tex" % fn
 
59
    err = runcmd(s)
 
60
    if err: return err
 
61
    if sys.platform=='win32':
 
62
        s = "dvips -Ppdf -G0 -D600 -E* -o%s.eps %s.dvi" % (fn,fn)
 
63
        err = runcmd(s)
 
64
        if err: return err
 
65
        s = "epstool --bbox --copy --output %s_tmp.eps %s.eps" % (fn,fn)
 
66
        err = runcmd(s)
 
67
        if err: return err
 
68
        try:
 
69
            os.remove("%s.eps" % fn)
 
70
            os.remove("%s.dvi" % fn)
 
71
            os.remove("%s.aux" % fn)
 
72
            os.remove("%s.log" % fn)
 
73
        #os.remove("%s.pgf" % fn)
 
74
 
 
75
        except:
 
76
            raise
 
77
        os.rename("%s_tmp.eps" % fn,"%s.eps" % fn)
 
78
        s = "epstopdf %s.eps" % fn
 
79
        err = runcmd(s)
 
80
    else:
 
81
        s = "dvips %s.dvi" % fn
 
82
        err = runcmd(s)
 
83
        s = "ps2eps -B -f %s.ps" % fn
 
84
        err = runcmd(s)
 
85
        if err: return err
 
86
        s = "epstopdf %s.eps" % fn
 
87
        err = runcmd(s)
 
88
 
 
89
    return err
 
90
 
 
91
def create_pdf(texfile,use_pdftex=True):
 
92
    if not splitext(texfile)[1]:
 
93
        fn = basename(texfile)+'.tex'
 
94
    else:
 
95
        fn = basename(texfile)
 
96
    if sys.platform=='win32':
 
97
        syscmd = 'texify --pdf --clean %s' % (fn)
 
98
    else:
 
99
        syscmd = 'pdflatex -halt-on-error -interaction nonstopmode %s' % (fn)
 
100
    err = runcmd(syscmd)
 
101
    return err
 
102
 
 
103
 
 
104
def find_command(data):
 
105
    commands = re.findall(r"\$ ((?:.*?) dot2tex (?:.*?))$", data,
 
106
    re.MULTILINE|re.VERBOSE)
 
107
    if commands:
 
108
        return commands[0].strip()
 
109
    else:
 
110
        return None
 
111
 
 
112
 
 
113
 
 
114
def make_img(c, filenm, name):
 
115
        filename = os.path.splitext(filenm)[0]
 
116
        err = runcmd(c)
 
117
        if err:
 
118
            return err
 
119
 
 
120
        if (c.find('--crop') > -1):
 
121
            #os.system('del %s.png %s.jpg' % (name,name))
 
122
            err = create_pdf(filename)
 
123
            #print "using mppdf"
 
124
        else:
 
125
            err = meps(filename)
 
126
 
 
127
        return err
 
128
 
 
129
 
 
130
 
 
131
 
 
132
def build_gallery(filelist):
 
133
    #os.chdir(EXAMPLES_DIR)
 
134
    entrylist = []
 
135
    failedfiles = []
 
136
    for file in filelist:
 
137
        f = open(file,'r')
 
138
        data = f.read()
 
139
        f.close()
 
140
        entry = {}
 
141
        dirname, filename = os.path.split(file)
 
142
        os.chdir(dirname)
 
143
        name = os.path.splitext(filename)[0]
 
144
 
 
145
 
 
146
 
 
147
        command = find_command(data)
 
148
 
 
149
        if command:
 
150
            c = command.replace("dot2tex.py","dot2tex")
 
151
        else:
 
152
            c = "dot2tex %s > %s.tex" % (file, name)
 
153
        print c
 
154
 
 
155
        err = make_img(c,filename,'')
 
156
        if err:
 
157
            log.warning('Failed to build %s',filename)
 
158
            failedfiles.append(filename)
 
159
    return failedfiles
 
160
 
 
161
 
 
162
 
 
163
 
 
164
if __name__ == "__main__":
 
165
    filelist = []
 
166
    exdir= EXAMPLES_DIR
 
167
    os.chdir(exdir)
 
168
    for f in glob.glob("*.dot"):
 
169
        if not f.find('dot2tex-fig') > 0:
 
170
            src = os.path.join(exdir,f)
 
171
            dst = normpath(join(DEST_DIR,basename(src)))
 
172
            filelist.append(dst)
 
173
            copyifnewer(src,dst)
 
174
 
 
175
 
 
176
 
 
177
    failedfiles = build_gallery(filelist)
 
178
    if failedfiles:
 
179
        log.warning('Failed files: %s',failedfiles);
 
180
        sys.exit(1)
 
181
    else:
 
182
        print "All tests passed!"
 
183
        sys.exit(0)
 
184
 
 
185
    #filelist=['distances.dot','tikzshapes.dot']
 
186
 
 
187
 
 
188