aboutsummaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2014-06-14 00:08:58 +0300
committerJussi Pakkanen <jpakkane@gmail.com>2014-06-14 00:08:58 +0300
commit0ff7fd40bad04d11b9f06db5c4a3acac3c0bfacd (patch)
treed8b29f24a3df89e6bfb414d33f5da4260e88e4fa /tools
parent98895a6c9122605d847394ff15d8aa2f11650ffc (diff)
downloadmeson-0ff7fd40bad04d11b9f06db5c4a3acac3c0bfacd.zip
meson-0ff7fd40bad04d11b9f06db5c4a3acac3c0bfacd.tar.gz
meson-0ff7fd40bad04d11b9f06db5c4a3acac3c0bfacd.tar.bz2
Some simple autoconf parsing.
Diffstat (limited to 'tools')
-rwxr-xr-xtools/autotools2meson.py35
1 files changed, 29 insertions, 6 deletions
diff --git a/tools/autotools2meson.py b/tools/autotools2meson.py
index 27f3571..6edc3b3 100755
--- a/tools/autotools2meson.py
+++ b/tools/autotools2meson.py
@@ -21,11 +21,11 @@ class Converter():
def __init__(self, root):
self.project_root = root
- def readlines(self, file):
+ def readlines(self, file, continuator):
line = file.readline()
while line != '':
line = line.rstrip()
- while line.endswith('\\'):
+ while line.endswith(continuator):
line = line[:-1] + file.readline().rstrip()
yield line
line = file.readline()
@@ -37,8 +37,11 @@ class Converter():
ifile = open(os.path.join(subdir, 'Makefile.am'))
except FileNotFoundError:
print('Makefile.am not found in subdir', subdir)
+ return
ofile = open(os.path.join(subdir, 'meson.build'), 'w')
- for line in self.readlines(ifile):
+ if subdir == self.project_root:
+ self.process_autoconf(ofile, subdir)
+ for line in self.readlines(ifile, '\\'):
items = line.strip().split()
if len(items) == 0:
ofile.write('\n')
@@ -57,20 +60,40 @@ class Converter():
if items[0].endswith('la_SOURCES'):
func = 'shared_library'
tname = "'%s'" % items[0][:-11]
+ elif items[0].endswith('a_SOURCES'):
+ func = 'static_library'
+ tname = "'%s'" % items[0][:-10]
else:
func = 'executable'
tname = "'%s'" % items[0][:-8]
sources = [tname]
for s in items[2:]:
- if s.startswith('$('):
+ if s.startswith('$(') and s.endswith(')'):
s = s[2:-1]
- elif s.startswith('$'):
- s = s[1:]
else:
s = "'%s'" % s
sources.append(s)
ofile.write('%s(%s)\n' % (func, ',\n'.join(sources)))
+ def process_autoconf(self, ofile, subdir):
+ ifile = open(os.path.join(subdir, 'configure.ac'))
+ languages = []
+ name = 'undetected'
+ outlines = []
+ for line in self.readlines(ifile, ','):
+ line = line.strip()
+ if line == 'AC_PROG_CC':
+ languages.append("'c'")
+ elif line == 'AC_PROG_CXX':
+ languages.append("'cpp'")
+ elif line.startswith('#'):
+ outlines.append(line + '\n')
+ else:
+ outlines.append('# %s\n' % line)
+ ofile.write("project(%s)\n" % ', '.join(["'%s'" % name] + languages))
+ ofile.writelines(outlines)
+
+
if __name__ == '__main__':
if len(sys.argv) != 2:
print(sys.argv[0], '<Autotools project root>')