Add Orca install workflow

This commit is contained in:
Ben Visness 2023-07-29 15:11:20 -05:00
parent 59f87436ce
commit 956ad51072
5 changed files with 95 additions and 21 deletions

31
orca Executable file
View File

@ -0,0 +1,31 @@
#!/usr/bin/env python3
# This file is copied into the user's home directory on install,
# but also can be run from the root of an Orca source checkout.
import os
import sys
root = True
try:
os.stat(".orcaroot")
except FileNotFoundError:
root = False
if root:
# Running from Orca source checkout; use local source's scripts.
scriptdir = os.path.dirname(os.path.abspath(__file__))
if scriptdir != os.getcwd():
# Only print this warning if running the system-installed Orca.
# It's annoying to see this if you run ./orca from the source.
print("The Orca tool is running from a local source checkout and will")
print("use that instead of the system Orca installation.")
print()
sys.path.append(os.getcwd())
import scripts.orca
else:
# Running from outside Orca source checkout; use system Orca install.
import sys_scripts.orca

View File

@ -6,7 +6,7 @@ import shutil
import subprocess
from argparse import ArgumentParser
from log import *
from .log import *
def attach_bundle_commands(subparsers):

View File

@ -1,7 +1,7 @@
import hashlib
import json
from log import *
from .log import *
def checkfile(filepath):

View File

@ -8,11 +8,11 @@ import shutil
import subprocess
from zipfile import ZipFile
import checksum
from bindgen import bindgen
from bindgen2 import bindgen2
from log import *
from utils import pushd, removeall
from . import checksum
from .bindgen import bindgen
from .bindgen2 import bindgen2
from .log import *
from .utils import pushd, removeall
ANGLE_VERSION = "2023-07-05"
@ -20,21 +20,28 @@ ANGLE_VERSION = "2023-07-05"
def attach_dev_commands(subparsers):
dev_cmd = subparsers.add_parser("dev", help="Commands for building Orca itself. Must be run from the root of an Orca source checkout.")
dev_cmd.set_defaults(func=orca_root_only)
try:
os.stat(".orcaroot")
except FileNotFoundError:
dev_cmd.set_defaults(func=orca_root_only)
return
dev_sub = dev_cmd.add_subparsers(required=True, title='commands')
dev_sub = dev_cmd.add_subparsers(required=is_orca_root(), title='commands')
build_cmd = dev_sub.add_parser("build-runtime", help="Build the Orca runtime from source.")
build_cmd.add_argument("--release", action="store_true", help="compile Orca in release mode (default is debug)")
build_cmd.set_defaults(func=shellish(build_runtime))
build_cmd.set_defaults(func=dev_shellish(build_runtime))
clean_cmd = dev_sub.add_parser("clean", help="Delete all build artifacts and start fresh.")
clean_cmd.set_defaults(func=shellish(clean))
clean_cmd.set_defaults(func=dev_shellish(clean))
install_cmd = dev_sub.add_parser("install", help="Install the Orca tools into a system folder.")
install_cmd.add_argument("--no-confirm", action="store_true", help="don't ask the user for confirmation before installing")
install_cmd.set_defaults(func=dev_shellish(install))
def is_orca_root():
try:
os.stat(".orcaroot")
return True
except FileNotFoundError:
return False
def orca_root_only(args):
@ -45,6 +52,10 @@ def orca_root_only(args):
exit(1)
def dev_shellish(func):
return shellish(func) if is_orca_root() else orca_root_only
def build_runtime(args):
ensure_programs()
ensure_angle()
@ -55,9 +66,6 @@ def build_runtime(args):
def clean(args):
def yeet(path):
os.makedirs(path, exist_ok=True)
shutil.rmtree(path)
yeet("build")
yeet("milepost/build")
yeet("scripts/files")
@ -530,3 +538,38 @@ def embed_text_glsl(outputpath, prefix, shaders):
output.write("#endif // __%s_H__\n" % outSymbol)
output.close()
def yeet(path):
os.makedirs(path, exist_ok=True)
shutil.rmtree(path)
def install(args):
if not args.no_confirm:
dest = os.path.expanduser(os.path.join("~", ".orca"))
print("The Orca command-line tools will be installed to your home directory in:")
print(dest)
print()
while True:
answer = input("Proceed with the installation? (y/n) >")
if answer.lower() in ["y", "yes"]:
break
elif answer.lower() in ["n", "no"]:
return
else:
print("Please enter \"yes\" or \"no\" and press return.")
bin_dir = os.path.join(dest, "bin")
yeet(bin_dir)
shutil.copytree("scripts", os.path.join(bin_dir, "sys_scripts"))
shutil.copy("orca", bin_dir)
# TODO: Customize these instructions for Windows
print()
print("Orca has been installed. Make sure the Orca tools are on your PATH by adding the")
print("following to your shell config:")
print()
print(f"export PATH=\"{bin_dir}:$PATH\"")
print()

4
scripts/orca → scripts/orca.py Executable file → Normal file
View File

@ -2,8 +2,8 @@
import argparse
from bundle import attach_bundle_commands
from dev import attach_dev_commands
from .bundle import attach_bundle_commands
from .dev import attach_dev_commands
parser = argparse.ArgumentParser()