mongoose/tools/unamalgam
Deomid Ryabkov d63fb70c69 Publish the amalgamation tools
PUBLISHED_FROM=27ed0bd32e33252495b92361d2943a3450448f62
2016-09-27 15:36:56 +00:00

44 lines
1.1 KiB
Python
Executable File

#!/usr/bin/env python
import sys
import re
import os
cur_src = None
in_mod = False
ofile = None
strip_re = re.compile(r'/\* Amalgamated: (.*) \*/')
def clean(l):
return strip_re.sub(r'\1', l)
manifest = []
fname = sys.argv[1]
with open(fname) as f:
for l in f:
if re.match('#ifdef .*_MODULE_LINES', l):
l = next(f)
g = re.match(r'#line [01] "(.*)"', l)
cur_src = g.group(1)
# if there is currently opened file, close it
if ofile:
ofile.close()
cur_src = re.sub(r'\.\./', '', cur_src)
# create directory for the next file if needed
cur_src_dir = os.path.dirname(cur_src)
if cur_src_dir != '' and not os.path.exists(cur_src_dir):
os.makedirs(cur_src_dir)
# open next file for writing
ofile = open(cur_src, "w")
print >>sys.stderr, '=> %s' % cur_src
manifest.append(cur_src)
next(f)
elif ofile:
ofile.write(clean(l))
m = open('%s.manifest' % os.path.basename(fname), 'w')
print >>m, '\n'.join(manifest)