| from __future__ import absolute_import |
| from __future__ import division |
| from __future__ import print_function |
| from __future__ import unicode_literals |
| import targets_cfg |
| import pprint |
| |
| # TODO(tec): replace this with PrettyPrinter |
| def pretty_list(lst, indent=6): |
| if lst is None or len(lst) == 0: |
| return "" |
| |
| if len(lst) == 1: |
| return "\"%s\"" % lst[0] |
| |
| separator = "\",\n%s\"" % (" " * indent) |
| res = separator.join(lst) |
| res = "\n" + (" " * indent) + "\"" + res + "\",\n" + (" " * (indent - 2)) |
| return res |
| |
| |
| class TARGETSBuilder: |
| def __init__(self, path): |
| self.path = path |
| self.targets_file = open(path, 'w') |
| self.targets_file.write(targets_cfg.rocksdb_target_header) |
| self.total_lib = 0 |
| self.total_bin = 0 |
| self.total_test = 0 |
| self.tests_cfg = [] |
| |
| def __del__(self): |
| self.targets_file.close() |
| |
| def add_library(self, name, srcs, deps=None, headers=None): |
| if headers is None: |
| headers = "AutoHeaders.RECURSIVE_GLOB" |
| self.targets_file.write(targets_cfg.library_template % ( |
| name, |
| headers, |
| pretty_list(srcs), |
| pretty_list(deps))) |
| self.total_lib = self.total_lib + 1 |
| |
| def add_binary(self, name, srcs, deps=None): |
| self.targets_file.write(targets_cfg.binary_template % ( |
| name, |
| pretty_list(srcs), |
| pretty_list(deps))) |
| self.total_bin = self.total_bin + 1 |
| |
| def register_test(self, test_name, src, is_parallel): |
| exec_mode = "serial" |
| if is_parallel: |
| exec_mode = "parallel" |
| self.tests_cfg.append([test_name, str(src), str(exec_mode)]) |
| |
| self.total_test = self.total_test + 1 |
| |
| def flush_tests(self): |
| self.targets_file.write(targets_cfg.unittests_template % ( |
| pprint.PrettyPrinter().pformat(self.tests_cfg) |
| )) |
| |
| self.tests_cfg = [] |