diff --git a/__main__.py b/osdk/__init__.py old mode 100755 new mode 100644 similarity index 80% rename from __main__.py rename to osdk/__init__.py index e877f0c..3717647 --- a/__main__.py +++ b/osdk/__init__.py @@ -3,11 +3,9 @@ import sys import os import random - -import build -import utils -from utils import Colors -import environments +import osdk.build as build +import osdk.utils as utils +import osdk.environments as environments CMDS = {} @@ -34,12 +32,12 @@ def parseOptions(args: list[str]) -> dict: def runCmd(opts: dict, args: list[str]) -> None: if len(args) == 0: - print(f"Usage: {sys.argv[0]} run ") + print(f"Usage: {args[0]} run ") sys.exit(1) out = build.buildOne(opts.get('env', 'host-clang'), args[0]) - print(f"{Colors.BOLD}Running: {args[0]}{Colors.RESET}") + print(f"{utils.Colors.BOLD}Running: {args[0]}{utils.Colors.RESET}") utils.runCmd(out, *args[1:]) @@ -97,7 +95,7 @@ def bootCmd(opts: dict, args: list[str]) -> None: def buildCmd(opts: dict, args: list[str]) -> None: env = opts.get('env', 'host-clang') - + if len(args) == 0: build.buildAll(env) else: @@ -121,11 +119,11 @@ def idCmd(opts: dict, args: list[str]) -> None: def helpCmd(opts: dict, args: list[str]) -> None: - print(f"Usage: {sys.argv[0]} [options...] []") + print(f"Usage: osdk [options...] []") print("") print("Description:") - print(" The skift operating system build system.") + print(" Operating System Development Kit.") print("") print("Commands:") @@ -134,8 +132,12 @@ def helpCmd(opts: dict, args: list[str]) -> None: print("") print("Enviroments:") - for env in environments.available(): - print(" " + env) + availableToolchains = environments.available() + if len(availableToolchains) == 0: + print(" No environments available") + else: + for env in environments.available(): + print(" " + env) print("") print("Variants:") @@ -175,20 +177,22 @@ CMDS = { }, } -if __name__ == "__main__": + +def main(): + argv = sys.argv try: - if len(sys.argv) < 2: + if len(argv) < 2: helpCmd({}, []) else: - o = parseOptions(sys.argv[2:]) - if not sys.argv[1] in CMDS: - print(f"Unknown command: {sys.argv[1]}") + o = parseOptions(argv[2:]) + if not argv[1] in CMDS: + print(f"Unknown command: {argv[1]}") print("") - print(f"Use '{sys.argv[0]} help' for a list of commands") - sys.exit(1) - CMDS[sys.argv[1]]["func"](o['opts'], o['args']) - sys.exit(0) + print(f"Use '{argv[0]} help' for a list of commands") + return 1 + CMDS[argv[1]]["func"](o['opts'], o['args']) + return 0 except utils.CliException as e: print() - print(f"{Colors.RED}{e.msg}{Colors.RESET}") - sys.exit(1) + print(f"{utils.Colors.RED}{e.msg}{utils.Colors.RESET}") + return 1 diff --git a/osdk/__main__.py b/osdk/__main__.py new file mode 100755 index 0000000..15170e5 --- /dev/null +++ b/osdk/__main__.py @@ -0,0 +1,5 @@ +import sys + +from . import main + +sys.exit(main()) diff --git a/build.py b/osdk/build.py similarity index 91% rename from build.py rename to osdk/build.py index f9d20e5..394648b 100644 --- a/build.py +++ b/osdk/build.py @@ -1,13 +1,12 @@ from os import environ from typing import TextIO, Tuple import json - -import ninja -import manifests as m -import environments as e import copy -import utils -from utils import Colors + +from . import ninja +from . import manifests as m +from . import environments as e +from . import utils def genNinja(out: TextIO, manifests: dict, env: dict) -> None: @@ -92,7 +91,7 @@ def prepare(envName: str) -> Tuple[dict, dict]: def buildAll(envName: str) -> None: environment, _ = prepare(envName) - print(f"{Colors.BOLD}Building all targets for {envName}{Colors.RESET}") + print(f"{utils.Colors.BOLD}Building all targets for {envName}{utils.Colors.RESET}") try: utils.runCmd("ninja", "-j", "1", "-f", environment["ninjafile"]) except: @@ -101,7 +100,7 @@ def buildAll(envName: str) -> None: def buildOne(envName: str, target: str) -> str: - print(f"{Colors.BOLD}Building {target} for {envName}{Colors.RESET}") + print(f"{utils.Colors.BOLD}Building {target} for {envName}{utils.Colors.RESET}") environment, manifests = prepare(envName) if not target in manifests: diff --git a/environments.py b/osdk/environments.py similarity index 95% rename from environments.py rename to osdk/environments.py index 60c7077..33b4c03 100644 --- a/environments.py +++ b/osdk/environments.py @@ -2,7 +2,7 @@ import copy import os -import utils +from . import utils PASSED_TO_BUILD = [ @@ -46,7 +46,8 @@ def enableOptimizer(env: dict, level: str) -> dict: def available() -> list: - return [file.removesuffix(".json") for file in os.listdir("meta/toolchains") if file.endswith(".json")] + return [file.removesuffix(".json") for file in utils.tryListDir("meta/toolchains") + if file.endswith(".json")] VARIANTS = ["debug", "devel", "release", "sanatize"] diff --git a/manifests.py b/osdk/manifests.py similarity index 99% rename from manifests.py rename to osdk/manifests.py index f9d5902..335ae73 100644 --- a/manifests.py +++ b/osdk/manifests.py @@ -2,7 +2,7 @@ import os import json import copy -import utils +from . import utils def loadJsons(basedir: str) -> dict: diff --git a/ninja.py b/osdk/ninja.py similarity index 100% rename from ninja.py rename to osdk/ninja.py diff --git a/utils.py b/osdk/utils.py similarity index 97% rename from utils.py rename to osdk/utils.py index 7f632bd..427c257 100644 --- a/utils.py +++ b/osdk/utils.py @@ -7,7 +7,6 @@ import requests import subprocess import json import copy -from types import SimpleNamespace class Colors: @@ -187,3 +186,10 @@ def loadJson(filename: str) -> dict: result = copy.deepcopy(result) return result + + +def tryListDir(path: str) -> list[str]: + try: + return os.listdir(path) + except FileNotFoundError: + return [] diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..8a11c1e --- /dev/null +++ b/setup.py @@ -0,0 +1,19 @@ +from setuptools import setup + +setup( + name="osdk", + version="0.0.1", + description="Operating System Development Kit", + author="The DEVSE Community", + author_email="contact@devse.wiki", + url="https://devse.wiki/", + packages=["osdk"], + install_requires=[ + "requests", + ], + entry_points={ + "console_scripts": [ + "osdk = osdk:main", + ], + } +)