# Copyright 2019 The RE2 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 shutil import sys import sysconfig def generate(): include = sysconfig.get_path('include') libs = os.path.join(include, '../libs') mydir = os.path.dirname(sys.argv[0]) or '.' shutil.copytree(include, f'{mydir}/include') try: shutil.copytree(libs, f'{mydir}/libs') except FileNotFoundError: # We must not be running on Windows. :) pass with open(f'{mydir}/BUILD.bazel', 'x') as file: file.write( """\ load("@rules_python//python/cc:py_cc_toolchain.bzl", "py_cc_toolchain") load("@rules_python//python:py_runtime.bzl", "py_runtime") load("@rules_python//python:py_runtime_pair.bzl", "py_runtime_pair") package(default_visibility = ["//visibility:public"]) toolchain( name = "py", toolchain = ":py_toolchain", toolchain_type = "@rules_python//python:toolchain_type", ) py_runtime_pair( name = "py_toolchain", py3_runtime = ":interpreter", ) py_runtime( name = "interpreter", interpreter_path = "{interpreter_path}", interpreter_version_info = {{ "major": "{major}", "minor": "{minor}", }}, python_version = "PY3", ) toolchain( name = "py_cc", toolchain = ":py_cc_toolchain", toolchain_type = "@rules_python//python/cc:toolchain_type", ) py_cc_toolchain( name = "py_cc_toolchain", headers = ":headers", libs = ":libraries", python_version = "{major}.{minor}", ) cc_library( name = "headers", hdrs = glob(["include/**/*.h"]), includes = ["include"], deps = select({{ "@platforms//os:windows": [":interface_library"], "//conditions:default": [], }}), ) cc_import( name = "interface_library", interface_library = select({{ "@platforms//os:windows": "libs/python{major}{minor}.lib", "//conditions:default": None, }}), system_provided = True, ) # Not actually necessary for our purposes. :) cc_library( name = "libraries", ) """.format( interpreter_path=sys.executable.replace('\\', '/'), major=sys.version_info.major, minor=sys.version_info.minor, ) ) if __name__ == '__main__': generate()