#! /usr/bin/env python

# package-clang-resource-headers.py
#
# The Clang module loader depends on built-in headers for the Clang compiler.
# We grab these from the Clang build and move them into the LLDB module.

# TARGET_DIR is where the lldb framework/shared library gets put.
# LLVM_BUILD_DIR is where LLVM and Clang got built
# LLVM_BUILD_DIR/lib/clang should exist and contain headers

import os
import re
import shutil
import sys

import lldbbuild

if len(sys.argv) != 3:
    print("usage: " + sys.argv[0] + " TARGET_DIR LLVM_BUILD_DIR")
    sys.exit(1)

target_dir = sys.argv[1]
llvm_build_dir = lldbbuild.expected_package_build_path_for("llvm")

if not os.path.isdir(target_dir):
    print(target_dir + " doesn't exist")
    sys.exit(1)

if not os.path.isdir(llvm_build_dir):
    llvm_build_dir = re.sub("-macosx-", "-iphoneos-", llvm_build_dir)

if not os.path.isdir(llvm_build_dir):
    llvm_build_dir = re.sub("-iphoneos-", "-appletvos-", llvm_build_dir)

if not os.path.isdir(llvm_build_dir):
    llvm_build_dir = re.sub("-appletvos-", "-watchos-", llvm_build_dir)

if not os.path.isdir(llvm_build_dir):
    llvm_build_dir = re.sub("-watchos-", "-bridgeos-", llvm_build_dir)

if not os.path.isdir(llvm_build_dir):
    print(llvm_build_dir + " doesn't exist")
    sys.exit(1)

resources = os.path.join(target_dir, "LLDB.framework", "Resources")

if not os.path.isdir(resources):
    print(resources + " must exist")
    sys.exit(1)

clang_dir = os.path.join(llvm_build_dir, "lib", "clang")

if not os.path.isdir(clang_dir):
    print(clang_dir + " must exist")
    sys.exit(1)

version_dir = None

for subdir in os.listdir(clang_dir):
    if (re.match("^[0-9]+(\.[0-9]+)*$", subdir)):
        version_dir = os.path.join(clang_dir, subdir)
        break

if version_dir is None:
    print("Couldn't find a subdirectory of the form #(.#)... in " + clang_dir)
    sys.exit(1)

if not os.path.isdir(version_dir):
    print(version_dir + " is not a directory")
    sys.exit(1)

# Just checking... we're actually going to copy all of version_dir
include_dir = os.path.join(version_dir, "include")

if not os.path.isdir(include_dir):
    print(version_dir + " is not a directory")
    sys.exit(1)

clang_resources = os.path.join(resources, "Clang")

if os.path.isdir(clang_resources):
    shutil.rmtree(clang_resources)

shutil.copytree(version_dir, clang_resources)
