xref: /llvm-project/llvm/utils/TableGen/jupyter/tablegen_kernel/install.py (revision 535693f8f74d539a4b34f2d226cdef8d71405d47)
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