update cli docs and fix cli scripts with new syntax

This commit is contained in:
2026-02-14 22:24:32 -06:00
parent eee06009b9
commit 860632e0fa
36 changed files with 10822 additions and 10585 deletions

View File

@@ -20,8 +20,10 @@ var fd = use('fd')
var scope = null
var deep = false
var target_triple = null
var i = 0
var resolved = null
for (var i = 0; i < length(args); i++) {
for (i = 0; i < length(args); i++) {
if (args[i] == '--deep') {
deep = true
} else if (args[i] == '--target' || args[i] == '-t') {
@@ -74,12 +76,27 @@ function add_warning(msg) {
// Verify a single package
function verify_package(locator) {
var lock = null
var lock_entry = null
var links = null
var link_target = null
var pkg_dir = null
var dir_exists = false
var current_target = null
var expected_target = null
var target_dir = null
var lib_dir = null
var lib_name = null
var dylib_ext = null
var lib_path = null
var c_files = null
checked++
var lock = shop.load_lock()
var lock_entry = lock[locator]
var links = link.load()
var link_target = links[locator]
lock = shop.load_lock()
lock_entry = lock[locator]
links = link.load()
link_target = links[locator]
// Check lock entry exists
if (!lock_entry) {
@@ -87,8 +104,8 @@ function verify_package(locator) {
}
// Check package directory exists
var pkg_dir = shop.get_package_dir(locator)
var dir_exists = fd.is_dir(pkg_dir) || fd.is_link(pkg_dir)
pkg_dir = shop.get_package_dir(locator)
dir_exists = fd.is_dir(pkg_dir) || fd.is_link(pkg_dir)
if (!dir_exists) {
add_error(locator + ": package directory missing at " + pkg_dir)
@@ -112,7 +129,7 @@ function verify_package(locator) {
}
} else {
// Package target
var target_dir = shop.get_package_dir(link_target)
target_dir = shop.get_package_dir(link_target)
if (!fd.is_dir(target_dir) && !fd.is_link(target_dir)) {
add_error(locator + ": link target package not found: " + link_target)
}
@@ -120,8 +137,8 @@ function verify_package(locator) {
// Check symlink is correct
if (fd.is_link(pkg_dir)) {
var current_target = fd.readlink(pkg_dir)
var expected_target = starts_with(link_target, '/') ? link_target : shop.get_package_dir(link_target)
current_target = fd.readlink(pkg_dir)
expected_target = starts_with(link_target, '/') ? link_target : shop.get_package_dir(link_target)
if (current_target != expected_target) {
add_warning(locator + ": symlink target mismatch (expected " + expected_target + ", got " + current_target + ")")
}
@@ -131,22 +148,23 @@ function verify_package(locator) {
}
// Check build output exists
var lib_dir = shop.get_lib_dir()
var lib_name = shop.lib_name_for_package(locator)
var dylib_ext = '.dylib' // TODO: detect from target
var lib_path = lib_dir + '/' + lib_name + dylib_ext
lib_dir = shop.get_lib_dir()
lib_name = shop.lib_name_for_package(locator)
dylib_ext = '.dylib' // TODO: detect from target
lib_path = lib_dir + '/' + lib_name + dylib_ext
// Only check for builds if package has C files
try {
var c_files = pkg.get_c_files(locator, target_triple, true)
var _check_build = function() {
c_files = pkg.get_c_files(locator, target_triple, true)
if (c_files && length(c_files) > 0) {
if (!fd.is_file(lib_path)) {
add_warning(locator + ": library not built at " + lib_path)
}
}
} catch (e) {
} disruption {
// Skip build check if can't determine C files
}
_check_build()
}
// Check for link cycles
@@ -154,19 +172,20 @@ function check_link_cycles() {
var links = link.load()
function follow_chain(origin, visited) {
var target = null
if (visited[origin]) {
return origin // cycle detected
}
visited[origin] = true
var target = links[origin]
target = links[origin]
if (target && links[target]) {
return follow_chain(target, visited)
}
return null
}
arrfor(links, function(origin) {
arrfor(array(links), function(origin) {
var cycle_start = follow_chain(origin, {})
if (cycle_start) {
add_error("Link cycle detected starting from: " + origin)
@@ -190,20 +209,21 @@ function check_dangling_links() {
// Gather packages to verify
var packages_to_verify = []
var locator = null
var all_deps = null
if (scope == 'shop') {
packages_to_verify = shop.list_packages()
} else if (scope == 'world') {
// For now, world is the same as shop
// In future, this could be a separate concept
packages_to_verify = shop.list_packages()
} else {
// Single package
var locator = scope
locator = scope
// Resolve local paths
if (locator == '.' || starts_with(locator, './') || starts_with(locator, '../') || fd.is_dir(locator)) {
var resolved = fd.realpath(locator)
resolved = fd.realpath(locator)
if (resolved) {
locator = resolved
}
@@ -211,7 +231,7 @@ if (scope == 'shop') {
if (deep) {
// Gather all dependencies
var all_deps = pkg.gather_dependencies(locator)
all_deps = pkg.gather_dependencies(locator)
push(packages_to_verify, locator)
arrfor(all_deps, function(dep) {
push(packages_to_verify, dep)
@@ -249,7 +269,6 @@ if (length(errors) > 0) {
})
log.console("")
log.console("Verification FAILED: " + text(length(errors)) + " error(s), " + text(length(warnings)) + " warning(s)")
// Note: would use process.exit(1) if available
} else {
log.console("Verification PASSED: " + text(checked) + " package(s) checked, " + text(length(warnings)) + " warning(s)")
}