#!/usr/bin/env python3
# Usage: gen-modules.py <source path> <output.h> <input.c ...>

import sys
import os
import tempfile
import shutil


def main():
    # Get 'official' makemoduledefs.py
    path = sys.argv[1] + "/micropython/py"
    sys.path.insert(0, path)
    import makemoduledefs

    modules = set()
    for source in sys.argv[3:]:
        modules |= makemoduledefs.find_module_registrations(source)

    stdout = sys.stdout
    with tempfile.TemporaryFile("w+") as temp:
        sys.stdout = temp
        makemoduledefs.generate_module_table_header(sorted(modules))
        sys.stdout = stdout

        # Read contents of existing file and compare
        try:
            with open(sys.argv[2], "r") as f:
                old_content = f.read()
        except FileNotFoundError:
            old_content = ""

        temp.seek(0)
        new_content = temp.read()

        if new_content == old_content:
            # If both file contain the same content, exit early
            sys.exit(0)

        with open(sys.argv[2], "w") as f:
            f.write(new_content)

        try:
            os.mkdir(os.path.dirname(sys.argv[2]) + "/genhdr")
        except FileExistsError:
            pass

        linkname = (
            os.path.dirname(sys.argv[2]) + "/genhdr/" + os.path.basename(sys.argv[2])
        )
        if os.path.exists(linkname):
            os.unlink(linkname)
        shutil.copy(sys.argv[2], linkname)

    sys.stdout = stdout


if __name__ == "__main__":
    main()