73 lines · python
1# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.2# See https://llvm.org/LICENSE.txt for license information.3# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception4 5import os6import json7import sys8import argparse9from tempfile import TemporaryDirectory10from jupyter_client.kernelspec import KernelSpecManager11 12 13def install_my_kernel_spec(user=True, prefix=None):14 """Install the kernel spec for user in given prefix."""15 print("Installing llvm-tblgen IPython kernel spec")16 17 kernel_json = {18 "argv": [19 sys.executable, "-m", "tablegen_kernel", "-f", "{connection_file}"20 ],21 "display_name": "LLVM TableGen",22 "language": "tablegen",23 "language_info": {24 "name": "tablegen",25 "codemirror_mode": "tablegen",26 "mimetype": "text/x-tablegen",27 "file_extension": ".td",28 "pygments_lexer": "text"29 }30 }31 32 with TemporaryDirectory() as tmpdir:33 json_path = os.path.join(tmpdir, "kernel.json")34 with open(json_path, 'w') as json_file:35 json.dump(kernel_json, json_file)36 KernelSpecManager().install_kernel_spec(37 tmpdir, "tablegen", user=user, prefix=prefix38 )39 40 41def _is_root():42 """Returns whether the current user is root."""43 try:44 return os.geteuid() == 045 except AttributeError:46 # Return false wherever unknown.47 return False48 49 50def main(argv=None):51 parser = argparse.ArgumentParser(52 description="Install KernelSpec for LLVM TableGen Kernel"53 )54 prefix_locations = parser.add_mutually_exclusive_group()55 56 prefix_locations.add_argument(57 "--user", help="Install in user home directory", action="store_true"58 )59 prefix_locations.add_argument(60 "--prefix", help="Install directory prefix", default=None61 )62 63 args = parser.parse_args(argv)64 65 user = args.user or not _is_root()66 prefix = args.prefix67 68 install_my_kernel_spec(user=user, prefix=prefix)69 70 71if __name__ == "__main__":72 main()73