Skip to content

Commit 74fecf1

Browse files
authored
refactor amalgate.py (#903)
1 parent 2c110e5 commit 74fecf1

File tree

1 file changed

+21
-38
lines changed

1 file changed

+21
-38
lines changed

singleheader/amalgamate.py

Lines changed: 21 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -11,64 +11,49 @@
1111
import re
1212
import shutil
1313
import datetime
14+
from typing import TextIO
1415

1516
if sys.version_info[0] < 3:
1617
sys.stdout.write('Sorry, requires Python 3.x or better\n')
1718
sys.exit(1)
1819

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)
3527

3628
# this list excludes the "src/generic headers"
37-
ALLCFILES = ['ada.cpp']
29+
ALL_C_FILES = ['ada.cpp']
3830

3931
# order matters
40-
ALLCHEADERS = ['ada.h']
32+
ALL_C_HEADERS = ['ada.h']
4133

4234
found_includes = []
4335

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:
4837
p = os.path.join(AMALGAMATE_INCLUDE_PATH, file)
4938
pi = os.path.join(AMALGAMATE_SOURCE_PATH, file)
5039

5140
if os.path.exists(p):
5241
if file not in found_includes:
5342
found_includes.append(file)
5443
dofile(fid, AMALGAMATE_INCLUDE_PATH, file)
55-
else:
56-
pass
5744
elif os.path.exists(pi):
5845
if file not in found_includes:
5946
found_includes.append(file)
6047
dofile(fid, AMALGAMATE_SOURCE_PATH, file)
61-
else:
62-
pass
6348
else:
6449
# If we don't recognize it, just emit the #include
6550
print('unrecognized:', file, ' from ', line, ' in ', origin)
6651
print(line, file=fid)
6752

6853

69-
def dofile(fid: str, prepath: str, filename: str) -> None:
54+
def dofile(fid: TextIO, prepath: str, filename: str) -> None:
7055
file = os.path.join(prepath, filename)
71-
RELFILE = os.path.relpath(file, PROJECTPATH)
56+
RELFILE = os.path.relpath(file, PROJECT_PATH)
7257
# Last lines are always ignored. Files should end by an empty lines.
7358
print(f'/* begin file {RELFILE} */', file=fid)
7459
includepattern = re.compile('\\s*#\\s*include "(.*)"')
@@ -114,27 +99,25 @@ def dofile(fid: str, prepath: str, filename: str) -> None:
11499
README = os.path.join(AMALGAMATE_OUTPUT_PATH, 'README.md')
115100

116101
print(f'Creating {AMAL_H}')
117-
amal_h = open(AMAL_H, 'w')
102+
amal_h = open(AMAL_H, mode='w', encoding='utf8')
118103
print(f'/* auto-generated on {timestamp}. Do not edit! */', file=amal_h)
119-
for h in ALLCHEADERS:
104+
for h in ALL_C_HEADERS:
120105
doinclude(amal_h, h, f'ERROR {h} not found', h)
121106

122107
amal_h.close()
123-
print()
124-
print()
125108
print(f'Creating {AMAL_C}')
126-
amal_c = open(AMAL_C, 'w')
109+
amal_c = open(AMAL_C, mode='w', encoding='utf8')
127110
print(f'/* auto-generated on {timestamp}. Do not edit! */', file=amal_c)
128-
for c in ALLCFILES:
111+
for c in ALL_C_FILES:
129112
doinclude(amal_c, c, f'ERROR {c} not found', c)
130113

131114
amal_c.close()
132115

133116
# 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)
138121

139122
shutil.copy2(os.path.join(AMALGAMATE_INCLUDE_PATH, 'ada_c.h'), AMALGAMATE_OUTPUT_PATH)
140123

0 commit comments

Comments
 (0)