OILS / cpp / embedded_file_gen.py View on Github | oilshell.org

66 lines, 24 significant
1#!/usr/bin/env python2
2from __future__ import print_function
3"""
4Generate C++ strings that can be used by pyutil._ResourceLoader
5
6Used for
7
8- _devbuild/help/
9- stdlib/
10"""
11
12import sys
13from mycpp.mylib import log
14
15
16def main(argv):
17 paths = argv[1:]
18
19 out_f = sys.stdout
20
21 # Invoked with _devbuild/help/* stdlib/*.ysh
22
23 #log('paths %s', paths)
24
25 out_f.write('''
26#include "cpp/embedded_file.h"
27
28namespace embedded_file {
29''')
30
31 # Write global strings
32 for i, rel_path in enumerate(paths):
33 with open(rel_path) as f:
34 contents = f.read()
35
36 # zZXx is a unique string that shouldn't appear in any file
37 out_f.write('GLOBAL_STR(gStr%d, R"zZXx(%s)zZXx");\n\n' % (i, contents))
38
39 out_f.write('''
40
41TextFile array[] = {
42''')
43
44 # Write global array entries
45 for i, rel_path in enumerate(paths):
46 out_f.write(' {.rel_path = "%s", .contents = gStr%d},\n' % (rel_path, i))
47
48 out_f.write('''
49 {.rel_path = nullptr, .contents = nullptr},
50};
51
52} // namespace embedded_file
53
54TextFile* gEmbeddedFiles = embedded_file::array; // turn array into pointer
55''')
56
57
58if __name__ == '__main__':
59 try:
60 main(sys.argv)
61 except RuntimeError as e:
62 print('FATAL: %s' % e, file=sys.stderr)
63 sys.exit(1)
64
65
66# vim: sw=2