1210a383eSDavid Spickett# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 2210a383eSDavid Spickett# See https://llvm.org/LICENSE.txt for license information. 3210a383eSDavid Spickett# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 4210a383eSDavid Spickett 5210a383eSDavid Spickettimport os 6*535693f8SDavid Spickettimport json 7*535693f8SDavid Spickettimport sys 8210a383eSDavid Spickettimport argparse 9*535693f8SDavid Spickettfrom tempfile import TemporaryDirectory 10210a383eSDavid Spickettfrom jupyter_client.kernelspec import KernelSpecManager 11210a383eSDavid Spickett 12210a383eSDavid Spickett 13210a383eSDavid Spickettdef install_my_kernel_spec(user=True, prefix=None): 14210a383eSDavid Spickett """Install the kernel spec for user in given prefix.""" 15210a383eSDavid Spickett print("Installing llvm-tblgen IPython kernel spec") 16*535693f8SDavid Spickett 17*535693f8SDavid Spickett kernel_json = { 18*535693f8SDavid Spickett "argv": [ 19*535693f8SDavid Spickett sys.executable, "-m", "tablegen_kernel", "-f", "{connection_file}" 20*535693f8SDavid Spickett ], 21*535693f8SDavid Spickett "display_name": "LLVM TableGen", 22*535693f8SDavid Spickett "language": "tablegen", 23*535693f8SDavid Spickett "language_info": { 24*535693f8SDavid Spickett "name": "tablegen", 25*535693f8SDavid Spickett "codemirror_mode": "tablegen", 26*535693f8SDavid Spickett "mimetype": "text/x-tablegen", 27*535693f8SDavid Spickett "file_extension": ".td", 28*535693f8SDavid Spickett "pygments_lexer": "text" 29*535693f8SDavid Spickett } 30*535693f8SDavid Spickett } 31*535693f8SDavid Spickett 32*535693f8SDavid Spickett with TemporaryDirectory() as tmpdir: 33*535693f8SDavid Spickett json_path = os.path.join(tmpdir, "kernel.json") 34*535693f8SDavid Spickett with open(json_path, 'w') as json_file: 35*535693f8SDavid Spickett json.dump(kernel_json, json_file) 36210a383eSDavid Spickett KernelSpecManager().install_kernel_spec( 37*535693f8SDavid Spickett tmpdir, "tablegen", user=user, prefix=prefix 38210a383eSDavid Spickett ) 39210a383eSDavid Spickett 40210a383eSDavid Spickett 41210a383eSDavid Spickettdef _is_root(): 42210a383eSDavid Spickett """Returns whether the current user is root.""" 43210a383eSDavid Spickett try: 44210a383eSDavid Spickett return os.geteuid() == 0 45210a383eSDavid Spickett except AttributeError: 46210a383eSDavid Spickett # Return false wherever unknown. 47210a383eSDavid Spickett return False 48210a383eSDavid Spickett 49210a383eSDavid Spickett 50210a383eSDavid Spickettdef main(argv=None): 51210a383eSDavid Spickett parser = argparse.ArgumentParser( 52210a383eSDavid Spickett description="Install KernelSpec for LLVM TableGen Kernel" 53210a383eSDavid Spickett ) 54210a383eSDavid Spickett prefix_locations = parser.add_mutually_exclusive_group() 55210a383eSDavid Spickett 56210a383eSDavid Spickett prefix_locations.add_argument( 57210a383eSDavid Spickett "--user", help="Install in user home directory", action="store_true" 58210a383eSDavid Spickett ) 59210a383eSDavid Spickett prefix_locations.add_argument( 60210a383eSDavid Spickett "--prefix", help="Install directory prefix", default=None 61210a383eSDavid Spickett ) 62210a383eSDavid Spickett 63210a383eSDavid Spickett args = parser.parse_args(argv) 64210a383eSDavid Spickett 65210a383eSDavid Spickett user = args.user or not _is_root() 66210a383eSDavid Spickett prefix = args.prefix 67210a383eSDavid Spickett 68210a383eSDavid Spickett install_my_kernel_spec(user=user, prefix=prefix) 69210a383eSDavid Spickett 70210a383eSDavid Spickett 71210a383eSDavid Spickettif __name__ == "__main__": 72210a383eSDavid Spickett main() 73