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