add "build" command

This commit is contained in:
2026-07-04 20:04:09 +10:00
parent cb5991f342
commit dc8f7a5d76
3 changed files with 44 additions and 2 deletions

View File

@@ -8,7 +8,7 @@ There is also Github mirror of Comet if you would prefer that: https://github.co
## Usage ## Usage
### Installing a Package ### Installing a Package
To install a package type: To install a rock type:
``` ```
neb install packageName neb install packageName
``` ```
@@ -16,12 +16,13 @@ Or if you wish to install a particular version:
``` ```
neb install packageName@1.0.0 neb install packageName@1.0.0
``` ```
(replace the number with the version number of the package you want to install) (replace the number with the version number of the rock you want to install)
## Changelog ## Changelog
### 1.2.0 ### 1.2.0
- Add support for modules written in Comet - Add support for modules written in Comet
- Made it so that you don't have to build Comet to install the headers - Made it so that you don't have to build Comet to install the headers
- Added the `neb build` command to make it easier to develop rocks
### 1.1.0 ### 1.1.0
- Switched from getting the latest commit of packages to getting the latest release - Switched from getting the latest commit of packages to getting the latest release

33
neb/src/build.py Normal file
View File

@@ -0,0 +1,33 @@
from .util import libs_dir, print_error_message
from .console import console
import sys
import os
import glob
import pathlib
import subprocess
def build(args):
comet_libs_dir = libs_dir()
folder_path = pathlib.Path(args.path).resolve()
folder_name = folder_path.name
out_path = os.path.join(comet_libs_dir, f"{folder_name}.cometlib")
c_files = glob.glob(f"{args.path}/*.c", recursive=True)
if len(c_files) == 0:
print_error_message(f"No C files were found in that directory! [d white]({folder_name})[/d white]")
sys.exit(1)
with console.status("Building", spinner="moon") as status:
try:
subprocess.run(
["gcc"] + c_files + ["-fPIC", "-shared", "-Wl,-undefined,symbol_lookup", "-o", out_path] + args.gcc_args,
check=True
)
except subprocess.CalledProcessError as e:
print_error_message(f"Failed to install [b]{folder_name}[/]: build failed!")
sys.exit(1)
console.log(f"[b][:white_check_mark:] Installed [green]{folder_name}[/green]![/b]")

View File

@@ -7,6 +7,7 @@ from .pull import pull
from .list import list_packages from .list import list_packages
from .uninstall import uninstall from .uninstall import uninstall
from .search import search from .search import search
from .build import build
def main() -> int: def main() -> int:
@@ -31,6 +32,11 @@ def main() -> int:
uninstall_cmd = sub_parsers.add_parser(name="uninstall", description="uninstall an installed rock(s)") uninstall_cmd = sub_parsers.add_parser(name="uninstall", description="uninstall an installed rock(s)")
uninstall_cmd.add_argument("names", help="name of the rocks to uninstall", nargs="+") uninstall_cmd.add_argument("names", help="name of the rocks to uninstall", nargs="+")
# build command
build_cmd = sub_parsers.add_parser(name="build", description="build a module")
build_cmd.add_argument("path", help="the path to build from")
build_cmd.add_argument("gcc_args", nargs=argparse.REMAINDER, help="args to give to gcc")
# search command # search command
search_cmd = sub_parsers.add_parser(name="search", description="search for rocks") search_cmd = sub_parsers.add_parser(name="search", description="search for rocks")
search_cmd.add_argument("query", help="search query") search_cmd.add_argument("query", help="search query")
@@ -55,6 +61,8 @@ def main() -> int:
uninstall(args) uninstall(args)
case "search": case "search":
search(args) search(args)
case "build":
build(args)
# really feeling like a C programmer lmao # really feeling like a C programmer lmao
return 0 return 0