|
11 | 11 | import re
|
12 | 12 | import shutil
|
13 | 13 | import datetime
|
| 14 | +from typing import TextIO |
14 | 15 |
|
15 | 16 | if sys.version_info[0] < 3:
|
16 | 17 | sys.stdout.write('Sorry, requires Python 3.x or better\n')
|
17 | 18 | sys.exit(1)
|
18 | 19 |
|
19 |
| -SCRIPTPATH = os.path.dirname(os.path.abspath(sys.argv[0])) |
20 |
| -PROJECTPATH = os.path.dirname(SCRIPTPATH) |
21 |
| -print(f'SCRIPTPATH={SCRIPTPATH} PROJECTPATH={PROJECTPATH}') |
22 |
| - |
23 |
| -if 'AMALGAMATE_SOURCE_PATH' not in os.environ: |
24 |
| - AMALGAMATE_SOURCE_PATH = os.path.join(PROJECTPATH, 'src') |
25 |
| -else: |
26 |
| - AMALGAMATE_SOURCE_PATH = os.environ['AMALGAMATE_SOURCE_PATH'] |
27 |
| -if 'AMALGAMATE_INCLUDE_PATH' not in os.environ: |
28 |
| - AMALGAMATE_INCLUDE_PATH = os.path.join(PROJECTPATH, 'include') |
29 |
| -else: |
30 |
| - AMALGAMATE_INCLUDE_PATH = os.environ['AMALGAMATE_INCLUDE_PATH'] |
31 |
| -if 'AMALGAMATE_OUTPUT_PATH' not in os.environ: |
32 |
| - AMALGAMATE_OUTPUT_PATH = os.path.join(SCRIPTPATH) |
33 |
| -else: |
34 |
| - AMALGAMATE_OUTPUT_PATH = os.environ['AMALGAMATE_OUTPUT_PATH'] |
| 20 | +SCRIPT_PATH = os.path.dirname(os.path.abspath(sys.argv[0])) |
| 21 | +PROJECT_PATH = os.path.dirname(SCRIPT_PATH) |
| 22 | +print(f'SCRIPT_PATH={SCRIPT_PATH} PROJECT_PATH={PROJECT_PATH}') |
| 23 | + |
| 24 | +AMALGAMATE_SOURCE_PATH = os.environ.get('AMALGAMATE_SOURCE_PATH') or os.path.join(PROJECT_PATH, 'src') |
| 25 | +AMALGAMATE_INCLUDE_PATH = os.environ.get('AMALGAMATE_INCLUDE_PATH') or os.path.join(PROJECT_PATH, 'include') |
| 26 | +AMALGAMATE_OUTPUT_PATH = os.environ.get('AMALGAMATE_OUTPUT_PATH') or os.path.join(SCRIPT_PATH) |
35 | 27 |
|
36 | 28 | # this list excludes the "src/generic headers"
|
37 |
| -ALLCFILES = ['ada.cpp'] |
| 29 | +ALL_C_FILES = ['ada.cpp'] |
38 | 30 |
|
39 | 31 | # order matters
|
40 |
| -ALLCHEADERS = ['ada.h'] |
| 32 | +ALL_C_HEADERS = ['ada.h'] |
41 | 33 |
|
42 | 34 | found_includes = []
|
43 | 35 |
|
44 |
| -current_implementation = '' |
45 |
| - |
46 |
| - |
47 |
| -def doinclude(fid: str, file: str, line: str, origin: str) -> None: |
| 36 | +def doinclude(fid: TextIO, file: str, line: str, origin: str) -> None: |
48 | 37 | p = os.path.join(AMALGAMATE_INCLUDE_PATH, file)
|
49 | 38 | pi = os.path.join(AMALGAMATE_SOURCE_PATH, file)
|
50 | 39 |
|
51 | 40 | if os.path.exists(p):
|
52 | 41 | if file not in found_includes:
|
53 | 42 | found_includes.append(file)
|
54 | 43 | dofile(fid, AMALGAMATE_INCLUDE_PATH, file)
|
55 |
| - else: |
56 |
| - pass |
57 | 44 | elif os.path.exists(pi):
|
58 | 45 | if file not in found_includes:
|
59 | 46 | found_includes.append(file)
|
60 | 47 | dofile(fid, AMALGAMATE_SOURCE_PATH, file)
|
61 |
| - else: |
62 |
| - pass |
63 | 48 | else:
|
64 | 49 | # If we don't recognize it, just emit the #include
|
65 | 50 | print('unrecognized:', file, ' from ', line, ' in ', origin)
|
66 | 51 | print(line, file=fid)
|
67 | 52 |
|
68 | 53 |
|
69 |
| -def dofile(fid: str, prepath: str, filename: str) -> None: |
| 54 | +def dofile(fid: TextIO, prepath: str, filename: str) -> None: |
70 | 55 | file = os.path.join(prepath, filename)
|
71 |
| - RELFILE = os.path.relpath(file, PROJECTPATH) |
| 56 | + RELFILE = os.path.relpath(file, PROJECT_PATH) |
72 | 57 | # Last lines are always ignored. Files should end by an empty lines.
|
73 | 58 | print(f'/* begin file {RELFILE} */', file=fid)
|
74 | 59 | includepattern = re.compile('\\s*#\\s*include "(.*)"')
|
@@ -114,27 +99,25 @@ def dofile(fid: str, prepath: str, filename: str) -> None:
|
114 | 99 | README = os.path.join(AMALGAMATE_OUTPUT_PATH, 'README.md')
|
115 | 100 |
|
116 | 101 | print(f'Creating {AMAL_H}')
|
117 |
| -amal_h = open(AMAL_H, 'w') |
| 102 | +amal_h = open(AMAL_H, mode='w', encoding='utf8') |
118 | 103 | print(f'/* auto-generated on {timestamp}. Do not edit! */', file=amal_h)
|
119 |
| -for h in ALLCHEADERS: |
| 104 | +for h in ALL_C_HEADERS: |
120 | 105 | doinclude(amal_h, h, f'ERROR {h} not found', h)
|
121 | 106 |
|
122 | 107 | amal_h.close()
|
123 |
| -print() |
124 |
| -print() |
125 | 108 | print(f'Creating {AMAL_C}')
|
126 |
| -amal_c = open(AMAL_C, 'w') |
| 109 | +amal_c = open(AMAL_C, mode='w', encoding='utf8') |
127 | 110 | print(f'/* auto-generated on {timestamp}. Do not edit! */', file=amal_c)
|
128 |
| -for c in ALLCFILES: |
| 111 | +for c in ALL_C_FILES: |
129 | 112 | doinclude(amal_c, c, f'ERROR {c} not found', c)
|
130 | 113 |
|
131 | 114 | amal_c.close()
|
132 | 115 |
|
133 | 116 | # copy the README and DEMOCPP
|
134 |
| -if SCRIPTPATH != AMALGAMATE_OUTPUT_PATH: |
135 |
| - shutil.copy2(os.path.join(SCRIPTPATH, 'demo.cpp'), AMALGAMATE_OUTPUT_PATH) |
136 |
| - shutil.copy2(os.path.join(SCRIPTPATH, 'demo.c'), AMALGAMATE_OUTPUT_PATH) |
137 |
| - shutil.copy2(os.path.join(SCRIPTPATH, 'README.md'), AMALGAMATE_OUTPUT_PATH) |
| 117 | +if SCRIPT_PATH != AMALGAMATE_OUTPUT_PATH: |
| 118 | + shutil.copy2(os.path.join(SCRIPT_PATH, 'demo.cpp'), AMALGAMATE_OUTPUT_PATH) |
| 119 | + shutil.copy2(os.path.join(SCRIPT_PATH, 'demo.c'), AMALGAMATE_OUTPUT_PATH) |
| 120 | + shutil.copy2(os.path.join(SCRIPT_PATH, 'README.md'), AMALGAMATE_OUTPUT_PATH) |
138 | 121 |
|
139 | 122 | shutil.copy2(os.path.join(AMALGAMATE_INCLUDE_PATH, 'ada_c.h'), AMALGAMATE_OUTPUT_PATH)
|
140 | 123 |
|
|
0 commit comments