# Copyright 2015 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import os
import sys

arches = ['i386', 'x86-64']

goldens = {}

for fn in sys.argv[2:]:
  dir, name = fn.split('/')[-2:]
  name = name.rstrip('.txt')
  golden = goldens.setdefault(name, [None] * len(arches))
  idx = arches.index(dir)
  golden[idx] = open(fn).read()

with open(sys.argv[1], 'w') as f:
  f.write("""// Generated by sandbox/linux/bpf_dsl/golden/generate.py

#ifndef SANDBOX_LINUX_BPF_DSL_GOLDEN_GOLDEN_FILES_H_
#define SANDBOX_LINUX_BPF_DSL_GOLDEN_GOLDEN_FILES_H_

namespace sandbox {
namespace bpf_dsl {
namespace golden {

struct Golden {
  const char* i386_dump;
  const char* x86_64_dump;
};

""")

  for name, datas in sorted(goldens.items()):
    f.write("const Golden k%s = {\n" % name)
    for data in datas:
      if data is None:
        f.write("  nullptr,\n")
      else:
        f.write("  \"%s\",\n" % data.replace("\n", "\\n\\\n"))
    f.write("};\n\n")

  f.write("""\
}  // namespace golden
}  // namespace bpf_dsl
}  // namespace sandbox

#endif  // SANDBOX_LINUX_BPF_DSL_GOLDEN_GOLDEN_FILES_H_
""")
