#!/usr/bin/env python3

# This tool is used to generate the version scripts for libc, libm, libdl,
# and libstdc++ for every architecture.

# usage: generate-version-script.py ARCH INPUT OUTPUT

import sys

def has_arch_tags(tags):
  for arch in ["arm", "arm64", "riscv64", "x86", "x86_64"]:
    if arch in tags:
      return True
  return False

def GenerateVersionScript(arch, in_filename, out_filename):
  with open(out_filename, "w") as fout:
    with open(in_filename, "r") as fin:
      for line in fin:
        index = line.find("#")
        if index != -1:
          tags = line[index+1:].split()
          if arch not in tags and has_arch_tags(tags):
            continue
        fout.write(line)

arch = sys.argv[1]
in_filename = sys.argv[2]
out_filename = sys.argv[3]
GenerateVersionScript(arch, in_filename, out_filename)
