1
2import sys
3import os
4import glob
5
6def init_builders(bldr):
7    global jhighlight_bld
8    global jssi_bld
9    global make_examples_index_bld
10    global make_index_bld
11    global ln_bld
12    global lns_bld
13
14    jhighlight_bld = bldr(action = '\
15jhighlight --css-file=http://www.and.org/f_c.css $SOURCE > $TARGET')
16
17    jssi_bld       = bldr(action = 'jssi       $SOURCE > $TARGET')
18
19    make_examples_index_bld = bldr(action = '\
20make_index.pl --filter-args="-A README -A Makefile -A SConstruct --acpt-name-end .c --acpt-name-end .h --deny-all" --output $TARGET $SOURCE')
21
22    make_index_bld = bldr(action = '\
23make_index.pl $MKINDXARGS --output $TARGET $SOURCE')
24
25    ln_bld  = bldr(action = 'ln $SOURCE $TARGET')
26    lns_bld = bldr(action = 'ln -s $SOURCE $TARGET')
27
28conf = {'GENERATE_INDEX_NAME' : "index.html",
29	'ROOT_DIR' : "html/",
30	'GENERATED_DIR' : "generated_html/",
31	'CONF_DIR' : "conf/",
32	}
33
34# Generate index.html files automatically in a different dir...
35def gen_dif_idx(env, data, x, rec=False):
36    subdir = x
37    def gen__name(x):
38        indx = conf['GENERATE_INDEX_NAME']
39        f1 = conf['GENERATED_DIR'] + subdir + '/' + x + '/' + indx
40        f2 = conf['ROOT_DIR']      + subdir + '/' + x + '/'
41        f3 = conf['CONF_DIR']      + subdir + '/' + x + '/' + indx
42        data.append([f1, env.Dir(f2), f3])
43
44        if not rec:
45            return
46
47        for y in glob.glob(f2 + '*'):
48            if os.path.islink(y) or not os.path.isdir(y):
49                continue
50            gen__name(x + '/' + os.path.basename(y))
51    return gen__name
52
53def apply_dif_idx(data, Make_indx, LN, conf_gen_html):
54    for i in data:
55        Make_indx(i[0], i[1])
56        LN(i[2], conf_gen_html)
57
58
59# Generate index.html files automatically in same dir...
60def gen_sam_idx(env, data, x, rec=False):
61    subdir = x
62    def gen__name(x):
63        indx = conf['GENERATE_INDEX_NAME']
64        f1 = conf['ROOT_DIR'] + subdir + '/' + x + '/' + indx
65        f2 = conf['ROOT_DIR'] + subdir + '/' + x + '/'
66        # all this is needed due to bug#1185284
67        files = []
68        for name in glob.glob(f2 + '*'):
69            if os.path.basename(name) == indx:
70                continue
71            if os.path.basename(name) == indx + ".gz":
72                continue
73            if os.path.basename(name) == indx + ".bz2":
74                continue
75
76            if os.path.islink(name) and not os.path.isfile(name):
77                continue # recursion bug#1185293
78            if os.path.getsize(name) > (1000 * 1000 * 1000):
79                continue # string error bug#1185299
80
81            if os.path.isdir(name):
82                files.append(env.Dir(name))
83            else:
84                files.append(name)
85        if len(files):
86            data.append([f1, env.Dir(f2), files])
87
88        if not rec:
89            return
90
91        for y in glob.glob(f2 + '*'):
92            if os.path.islink(y) or not os.path.isdir(y):
93                continue
94            gen__name(x + '/' + os.path.basename(y))
95
96    return gen__name
97
98def apply_sam_idx(data, env, Make_indx):
99    for i in data:
100        abcd = Make_indx(i[0], i[1])
101        for j in i[2]:
102            env.Depends(abcd, j)
103        env.Ignore(abcd, i[1])
104
105
106# Special code for the examples dir.
107def apply_sam_examples_code(data, Highlight, LN, ex_neg, ex_txt):
108    for pat in data:
109        for i in glob.glob(conf['ROOT_DIR'] + pat[0] + pat[1]):
110            Highlight(i + ".html", i)
111
112            name = os.path.basename(i)
113            conf_name = conf['CONF_DIR'] + pat[0] + name
114            LN(conf_name, ex_neg)
115            LN(conf_name + ".txt", ex_txt)
116
117def apply_sam_examples_idx(data, env, Make_ex_indx):
118    for src in data:
119        name = conf['ROOT_DIR'] + src[0]
120        abcd = Make_ex_indx(name + "/" + conf['GENERATE_INDEX_NAME'],
121                            env.Dir(name))
122        for j in glob.glob(name + "/" + src[1]):
123            env.Depends(abcd, j)
124        env.Ignore(abcd, env.Dir(name))
125
126# Apply over directories
127def gen_files_sam_ext(env, data, x, rec=False):
128    subdir = x
129    def gen__name(x, ext_in=".shtml", ext_out=".html"):
130        indx = conf['GENERATE_INDEX_NAME']
131        f2 = conf['ROOT_DIR'] + subdir + '/' + x + '/'
132        # all this is needed due to bug#1185284
133        files = []
134        for name in glob.glob(f2 + '*' + ext_in):
135            if os.path.basename(name) == indx:
136                continue
137            if os.path.basename(name) == indx + ".gz":
138                continue
139            if os.path.basename(name) == indx + ".bz2":
140                continue
141
142            if os.path.islink(name) and not os.path.isfile(name):
143                continue # recursion bug#1185293
144            if os.path.getsize(name) > (1000 * 1000 * 1000):
145                continue # string error bug#1185299
146
147            out_name = name[:-len(ext_in)] + ext_out
148            files.append([out_name, name])
149        if len(files):
150            data.append([ext_in, ext_out, files])
151
152        if not rec:
153            return
154
155        for y in glob.glob(f2 + '*'):
156            if os.path.islink(y) or not os.path.isdir(y):
157                continue
158            gen__name(x + '/' + os.path.basename(y))
159
160    return gen__name
161
162def apply_sam_ssi(data, SSI):
163    for i in data:
164        ext_in  = i[0]
165        ext_out = i[1]
166        for fname in i[2]:
167            SSI(fname[0], fname[1])
168