mirror of
https://github.com/OpenVPN/openvpn.git
synced 2025-05-09 21:51:05 +08:00

python msvc\config.py nmake /f msvc\msvc.mak Version 2.1.1e git-svn-id: http://svn.openvpn.net/projects/openvpn/branches/BETA21/openvpn@5516 e7ae566f-a301-0410-adde-c780ea21d3b5
94 lines
2.5 KiB
Python
94 lines
2.5 KiB
Python
# build autodefs.h and
|
|
|
|
import re
|
|
|
|
autogen = "Automatically generated by config.py"
|
|
|
|
def parse_version_m4(kv, version_m4):
|
|
r = re.compile(r'^define\((\w+),\[(.*)\]\)$')
|
|
f = open(version_m4)
|
|
for line in f:
|
|
line = line.rstrip()
|
|
m = re.match(r, line)
|
|
if m:
|
|
g = m.groups()
|
|
kv[g[0]] = g[1]
|
|
f.close()
|
|
|
|
def parse_settings_in(kv, settings_in):
|
|
r = re.compile(r'^!define\s+(\w+)(?:\s+"?(.*?)"?)$')
|
|
f = open(settings_in)
|
|
for line in f:
|
|
line = line.rstrip()
|
|
m = re.match(r, line)
|
|
if m:
|
|
g = m.groups()
|
|
kv[g[0]] = g[1] or ''
|
|
f.close()
|
|
|
|
def build_autodefs(kv, autodefs_in, autodefs_out):
|
|
def repfn(m):
|
|
var, = m.groups()
|
|
return kv.get(var, '')
|
|
|
|
r = re.compile(r'@(\w+)@')
|
|
fin = open(autodefs_in)
|
|
fout = open(autodefs_out, 'w')
|
|
fout.write("/* %s */\n\n" % autogen)
|
|
for line in fin:
|
|
newline = re.sub(r, repfn, line)
|
|
fout.write(newline)
|
|
fin.close()
|
|
fout.close()
|
|
|
|
def print_key_values(kv):
|
|
for k, v in sorted(kv.items()):
|
|
print "%s%s%s" % (k, ' '*(32-len(k)), repr(v))
|
|
|
|
def get_sources(makefile_am):
|
|
c = set()
|
|
h = set()
|
|
f = open(makefile_am)
|
|
state = False
|
|
for line in f:
|
|
line = line.rstrip()
|
|
if line == 'openvpn_SOURCES = \\':
|
|
state = True
|
|
elif not line:
|
|
state = False
|
|
elif state:
|
|
for sf in line.split():
|
|
if sf.endswith('.c'):
|
|
c.add(sf[:-2])
|
|
elif sf.endswith('.h'):
|
|
h.add(sf[:-2])
|
|
elif sf == '\\':
|
|
pass
|
|
else:
|
|
print >>sys.stderr, "Unrecognized filename:", sf
|
|
f.close()
|
|
return [ sorted(list(s)) for s in (c, h) ]
|
|
|
|
def output_mak_list(out, title, srclist, ext):
|
|
out.write("%s =" % (title,))
|
|
for x in srclist:
|
|
out.write(" \\\n\t%s.%s" % (x, ext))
|
|
out.write('\n\n')
|
|
|
|
def output_mak(makefile_am, outfile):
|
|
c, h = get_sources(makefile_am)
|
|
out = open(outfile, 'w')
|
|
out.write("# %s\n\n" % autogen)
|
|
output_mak_list(out, 'HEADERS', h, 'h')
|
|
output_mak_list(out, 'OBJS', c, 'obj')
|
|
out.close()
|
|
|
|
def main():
|
|
kv = {}
|
|
parse_version_m4(kv, 'version.m4')
|
|
parse_settings_in(kv, 'install-win32/settings.in')
|
|
build_autodefs(kv, 'msvc/autodefs.h.in', 'autodefs.h')
|
|
output_mak('Makefile.am', 'head_obj.mak')
|
|
|
|
main()
|