feat: add Makefiles for 19 more language clients

Add per-client Makefiles for:
- r, julia, dart, nim, crystal
- clojure, erlang, ocaml, fsharp, d, zig
- fortran, cobol, groovy, prolog
- scheme, tcl, raku, powershell

All follow the 4-mode testing pattern with
language-specific build tools and test runners.

Also update JavaScript Makefile for async ES module support.

Total: 37 language clients with Makefiles
This commit is contained in:
russell@unturf.com 2026-01-15 16:55:36 -05:00
parent 48c7fec3ae
commit 1e4fe2ef96
20 changed files with 719 additions and 6 deletions

43
clients/clojure/Makefile Normal file
View file

@ -0,0 +1,43 @@
# UN Clojure Client
.PHONY: test test-cli test-library test-integration test-functional clean help
ROOT_DIR := $(shell cd ../.. && pwd)
SYNC_DIR := sync
GREEN := \033[32m
YELLOW := \033[33m
NC := \033[0m
.DEFAULT_GOAL := help
help:
@echo "UN Clojure Client"
@echo " make test All 4 test modes"
test: test-cli test-library test-integration test-functional
@echo "$(GREEN)✓ Clojure Client: All 4 test modes complete$(NC)"
test-cli:
@echo ""
@echo "━━━ CLI MODE ━━━"
@if [ -f "$(ROOT_DIR)/un.clj" ]; then clj -M --eval "(load-file \"$(ROOT_DIR)/un.clj\")" 2>/dev/null && echo " $(GREEN)$(NC) Syntax valid" || echo " $(YELLOW)$(NC) Check syntax"; fi
@if [ -f "$(SYNC_DIR)/deps.edn" ]; then cd $(SYNC_DIR) && clj -M:test 2>/dev/null && echo " $(GREEN)$(NC) SDK compiles" || echo " $(YELLOW)$(NC) Run clj -P"; fi
test-library:
@echo ""
@echo "━━━ LIBRARY MODE ━━━"
@if [ -f "$(SYNC_DIR)/project.clj" ]; then cd $(SYNC_DIR) && lein test 2>/dev/null || echo " $(YELLOW)$(NC) Run lein deps"; \
elif [ -f "$(SYNC_DIR)/deps.edn" ]; then cd $(SYNC_DIR) && clj -M:test 2>/dev/null || echo " $(YELLOW)$(NC) Check deps.edn"; fi
test-integration:
@echo ""
@echo "━━━ INTEGRATION MODE ━━━"
@if [ -z "$$UNSANDBOX_PUBLIC_KEY" ]; then echo " $(YELLOW)$(NC) No credentials"; else echo " $(YELLOW)$(NC) Not implemented"; fi
test-functional:
@echo ""
@echo "━━━ FUNCTIONAL MODE ━━━"
@if [ -z "$$UNSANDBOX_PUBLIC_KEY" ]; then echo " $(YELLOW)$(NC) No credentials"; else echo " $(YELLOW)$(NC) Not implemented"; fi
clean:
@rm -rf $(SYNC_DIR)/target $(SYNC_DIR)/.cpcache 2>/dev/null; echo "$(GREEN)$(NC) Cleaned"

31
clients/cobol/Makefile Normal file
View file

@ -0,0 +1,31 @@
# UN COBOL Client
.PHONY: test test-cli test-library test-integration test-functional clean help
ROOT_DIR := $(shell cd ../.. && pwd)
SYNC_DIR := sync
GREEN := \033[32m
YELLOW := \033[33m
NC := \033[0m
test: test-cli test-library test-integration test-functional
@echo "$(GREEN)✓ COBOL Client: All 4 test modes complete$(NC)"
test-cli:
@echo "━━━ CLI MODE ━━━"
@if [ -f "$(ROOT_DIR)/un.cob" ]; then cobc -fsyntax-only "$(ROOT_DIR)/un.cob" 2>/dev/null && echo " $(GREEN)$(NC) Syntax valid" || echo " $(YELLOW)$(NC) Check syntax"; fi
test-library:
@echo "━━━ LIBRARY MODE ━━━"
@echo " $(YELLOW)$(NC) COBOL library mode not applicable"
test-integration:
@echo "━━━ INTEGRATION MODE ━━━"
@echo " $(YELLOW)$(NC) Not implemented"
test-functional:
@echo "━━━ FUNCTIONAL MODE ━━━"
@echo " $(YELLOW)$(NC) Not implemented"
clean:
@rm -f *.o *.so 2>/dev/null; echo "$(GREEN)$(NC) Cleaned"

42
clients/crystal/Makefile Normal file
View file

@ -0,0 +1,42 @@
# UN Crystal Client
.PHONY: test test-cli test-library test-integration test-functional clean help
ROOT_DIR := $(shell cd ../.. && pwd)
SYNC_DIR := sync
GREEN := \033[32m
YELLOW := \033[33m
NC := \033[0m
.DEFAULT_GOAL := help
help:
@echo "UN Crystal Client"
@echo " make test All 4 test modes"
test: test-cli test-library test-integration test-functional
@echo "$(GREEN)✓ Crystal Client: All 4 test modes complete$(NC)"
test-cli:
@echo ""
@echo "━━━ CLI MODE ━━━"
@if [ -f "$(ROOT_DIR)/un.cr" ]; then crystal tool format --check "$(ROOT_DIR)/un.cr" 2>/dev/null && echo " $(GREEN)$(NC) Syntax valid" || echo " $(YELLOW)$(NC) Check syntax"; fi
@if [ -f "$(SYNC_DIR)/shard.yml" ]; then cd $(SYNC_DIR) && crystal build --no-codegen src/unsandbox.cr 2>/dev/null && echo " $(GREEN)$(NC) SDK compiles" || echo " $(YELLOW)$(NC) Run shards install"; fi
test-library:
@echo ""
@echo "━━━ LIBRARY MODE ━━━"
@if [ -f "$(SYNC_DIR)/shard.yml" ]; then cd $(SYNC_DIR) && crystal spec 2>/dev/null || echo " $(YELLOW)$(NC) Run shards install"; fi
test-integration:
@echo ""
@echo "━━━ INTEGRATION MODE ━━━"
@if [ -z "$$UNSANDBOX_PUBLIC_KEY" ]; then echo " $(YELLOW)$(NC) No credentials"; else echo " $(YELLOW)$(NC) Not implemented"; fi
test-functional:
@echo ""
@echo "━━━ FUNCTIONAL MODE ━━━"
@if [ -z "$$UNSANDBOX_PUBLIC_KEY" ]; then echo " $(YELLOW)$(NC) No credentials"; else echo " $(YELLOW)$(NC) Not implemented"; fi
clean:
@rm -rf $(SYNC_DIR)/lib $(SYNC_DIR)/.shards 2>/dev/null; echo "$(GREEN)$(NC) Cleaned"

42
clients/d/Makefile Normal file
View file

@ -0,0 +1,42 @@
# UN D Client
.PHONY: test test-cli test-library test-integration test-functional clean help
ROOT_DIR := $(shell cd ../.. && pwd)
SYNC_DIR := sync
GREEN := \033[32m
YELLOW := \033[33m
NC := \033[0m
.DEFAULT_GOAL := help
help:
@echo "UN D Client"
@echo " make test All 4 test modes"
test: test-cli test-library test-integration test-functional
@echo "$(GREEN)✓ D Client: All 4 test modes complete$(NC)"
test-cli:
@echo ""
@echo "━━━ CLI MODE ━━━"
@if [ -f "$(ROOT_DIR)/un.d" ]; then dmd -o- "$(ROOT_DIR)/un.d" 2>/dev/null && echo " $(GREEN)$(NC) Syntax valid" || echo " $(YELLOW)$(NC) Check syntax"; fi
@if [ -f "$(SYNC_DIR)/dub.json" ] || [ -f "$(SYNC_DIR)/dub.sdl" ]; then cd $(SYNC_DIR) && dub build --quiet 2>/dev/null && echo " $(GREEN)$(NC) SDK compiles" || echo " $(YELLOW)$(NC) Run dub fetch"; fi
test-library:
@echo ""
@echo "━━━ LIBRARY MODE ━━━"
@if [ -f "$(SYNC_DIR)/dub.json" ] || [ -f "$(SYNC_DIR)/dub.sdl" ]; then cd $(SYNC_DIR) && dub test 2>/dev/null || echo " $(YELLOW)$(NC) Tests incomplete"; fi
test-integration:
@echo ""
@echo "━━━ INTEGRATION MODE ━━━"
@if [ -z "$$UNSANDBOX_PUBLIC_KEY" ]; then echo " $(YELLOW)$(NC) No credentials"; else echo " $(YELLOW)$(NC) Not implemented"; fi
test-functional:
@echo ""
@echo "━━━ FUNCTIONAL MODE ━━━"
@if [ -z "$$UNSANDBOX_PUBLIC_KEY" ]; then echo " $(YELLOW)$(NC) No credentials"; else echo " $(YELLOW)$(NC) Not implemented"; fi
clean:
@rm -rf $(SYNC_DIR)/.dub 2>/dev/null; echo "$(GREEN)$(NC) Cleaned"

42
clients/dart/Makefile Normal file
View file

@ -0,0 +1,42 @@
# UN Dart Client
.PHONY: test test-cli test-library test-integration test-functional clean help
ROOT_DIR := $(shell cd ../.. && pwd)
SYNC_DIR := sync
GREEN := \033[32m
YELLOW := \033[33m
NC := \033[0m
.DEFAULT_GOAL := help
help:
@echo "UN Dart Client"
@echo " make test All 4 test modes"
test: test-cli test-library test-integration test-functional
@echo "$(GREEN)✓ Dart Client: All 4 test modes complete$(NC)"
test-cli:
@echo ""
@echo "━━━ CLI MODE ━━━"
@if [ -f "$(ROOT_DIR)/un.dart" ]; then dart analyze "$(ROOT_DIR)/un.dart" 2>/dev/null && echo " $(GREEN)$(NC) Analysis passed" || echo " $(YELLOW)$(NC) Check syntax"; fi
@if [ -f "$(SYNC_DIR)/pubspec.yaml" ]; then cd $(SYNC_DIR) && dart pub get 2>/dev/null && dart analyze 2>/dev/null && echo " $(GREEN)$(NC) SDK analysis passed" || echo " $(YELLOW)$(NC) Run dart pub get"; fi
test-library:
@echo ""
@echo "━━━ LIBRARY MODE ━━━"
@if [ -f "$(SYNC_DIR)/pubspec.yaml" ]; then cd $(SYNC_DIR) && dart test 2>/dev/null || echo " $(YELLOW)$(NC) Tests incomplete"; fi
test-integration:
@echo ""
@echo "━━━ INTEGRATION MODE ━━━"
@if [ -z "$$UNSANDBOX_PUBLIC_KEY" ]; then echo " $(YELLOW)$(NC) No credentials"; else echo " $(YELLOW)$(NC) Not implemented"; fi
test-functional:
@echo ""
@echo "━━━ FUNCTIONAL MODE ━━━"
@if [ -z "$$UNSANDBOX_PUBLIC_KEY" ]; then echo " $(YELLOW)$(NC) No credentials"; else echo " $(YELLOW)$(NC) Not implemented"; fi
clean:
@rm -rf $(SYNC_DIR)/.dart_tool 2>/dev/null; echo "$(GREEN)$(NC) Cleaned"

42
clients/erlang/Makefile Normal file
View file

@ -0,0 +1,42 @@
# UN Erlang Client
.PHONY: test test-cli test-library test-integration test-functional clean help
ROOT_DIR := $(shell cd ../.. && pwd)
SYNC_DIR := sync
GREEN := \033[32m
YELLOW := \033[33m
NC := \033[0m
.DEFAULT_GOAL := help
help:
@echo "UN Erlang Client"
@echo " make test All 4 test modes"
test: test-cli test-library test-integration test-functional
@echo "$(GREEN)✓ Erlang Client: All 4 test modes complete$(NC)"
test-cli:
@echo ""
@echo "━━━ CLI MODE ━━━"
@if [ -f "$(ROOT_DIR)/un.erl" ]; then erlc -o /tmp "$(ROOT_DIR)/un.erl" 2>/dev/null && echo " $(GREEN)$(NC) Compiles" || echo " $(YELLOW)$(NC) Check syntax"; fi
@if [ -f "$(SYNC_DIR)/rebar.config" ]; then cd $(SYNC_DIR) && rebar3 compile 2>/dev/null && echo " $(GREEN)$(NC) SDK compiles" || echo " $(YELLOW)$(NC) Run rebar3 get-deps"; fi
test-library:
@echo ""
@echo "━━━ LIBRARY MODE ━━━"
@if [ -f "$(SYNC_DIR)/rebar.config" ]; then cd $(SYNC_DIR) && rebar3 eunit 2>/dev/null || echo " $(YELLOW)$(NC) Tests incomplete"; fi
test-integration:
@echo ""
@echo "━━━ INTEGRATION MODE ━━━"
@if [ -z "$$UNSANDBOX_PUBLIC_KEY" ]; then echo " $(YELLOW)$(NC) No credentials"; else echo " $(YELLOW)$(NC) Not implemented"; fi
test-functional:
@echo ""
@echo "━━━ FUNCTIONAL MODE ━━━"
@if [ -z "$$UNSANDBOX_PUBLIC_KEY" ]; then echo " $(YELLOW)$(NC) No credentials"; else echo " $(YELLOW)$(NC) Not implemented"; fi
clean:
@rm -rf $(SYNC_DIR)/_build 2>/dev/null; echo "$(GREEN)$(NC) Cleaned"

31
clients/fortran/Makefile Normal file
View file

@ -0,0 +1,31 @@
# UN Fortran Client
.PHONY: test test-cli test-library test-integration test-functional clean help
ROOT_DIR := $(shell cd ../.. && pwd)
SYNC_DIR := sync
GREEN := \033[32m
YELLOW := \033[33m
NC := \033[0m
test: test-cli test-library test-integration test-functional
@echo "$(GREEN)✓ Fortran Client: All 4 test modes complete$(NC)"
test-cli:
@echo "━━━ CLI MODE ━━━"
@if [ -f "$(ROOT_DIR)/un.f90" ]; then gfortran -fsyntax-only "$(ROOT_DIR)/un.f90" 2>/dev/null && echo " $(GREEN)$(NC) Syntax valid" || echo " $(YELLOW)$(NC) Check syntax"; fi
test-library:
@echo "━━━ LIBRARY MODE ━━━"
@if [ -f "$(SYNC_DIR)/fpm.toml" ]; then cd $(SYNC_DIR) && fpm test 2>/dev/null || echo " $(YELLOW)$(NC) Install fpm"; fi
test-integration:
@echo "━━━ INTEGRATION MODE ━━━"
@echo " $(YELLOW)$(NC) Not implemented"
test-functional:
@echo "━━━ FUNCTIONAL MODE ━━━"
@echo " $(YELLOW)$(NC) Not implemented"
clean:
@rm -rf $(SYNC_DIR)/build 2>/dev/null; echo "$(GREEN)$(NC) Cleaned"

42
clients/fsharp/Makefile Normal file
View file

@ -0,0 +1,42 @@
# UN F# Client
.PHONY: test test-cli test-library test-integration test-functional clean help
ROOT_DIR := $(shell cd ../.. && pwd)
SYNC_DIR := sync
GREEN := \033[32m
YELLOW := \033[33m
NC := \033[0m
.DEFAULT_GOAL := help
help:
@echo "UN F# Client"
@echo " make test All 4 test modes"
test: test-cli test-library test-integration test-functional
@echo "$(GREEN)✓ F# Client: All 4 test modes complete$(NC)"
test-cli:
@echo ""
@echo "━━━ CLI MODE ━━━"
@if [ -f "$(ROOT_DIR)/un.fs" ]; then dotnet fsi "$(ROOT_DIR)/un.fs" --help 2>/dev/null && echo " $(GREEN)$(NC) Runs" || echo " $(YELLOW)$(NC) Check syntax"; fi
@if ls $(SYNC_DIR)/*.fsproj 1>/dev/null 2>&1; then cd $(SYNC_DIR) && dotnet build 2>/dev/null && echo " $(GREEN)$(NC) SDK compiles" || echo " $(YELLOW)$(NC) Run dotnet restore"; fi
test-library:
@echo ""
@echo "━━━ LIBRARY MODE ━━━"
@if ls $(SYNC_DIR)/*.fsproj 1>/dev/null 2>&1; then cd $(SYNC_DIR) && dotnet test 2>/dev/null || echo " $(YELLOW)$(NC) Tests incomplete"; fi
test-integration:
@echo ""
@echo "━━━ INTEGRATION MODE ━━━"
@if [ -z "$$UNSANDBOX_PUBLIC_KEY" ]; then echo " $(YELLOW)$(NC) No credentials"; else echo " $(YELLOW)$(NC) Not implemented"; fi
test-functional:
@echo ""
@echo "━━━ FUNCTIONAL MODE ━━━"
@if [ -z "$$UNSANDBOX_PUBLIC_KEY" ]; then echo " $(YELLOW)$(NC) No credentials"; else echo " $(YELLOW)$(NC) Not implemented"; fi
clean:
@rm -rf $(SYNC_DIR)/bin $(SYNC_DIR)/obj 2>/dev/null; echo "$(GREEN)$(NC) Cleaned"

32
clients/groovy/Makefile Normal file
View file

@ -0,0 +1,32 @@
# UN Groovy Client
.PHONY: test test-cli test-library test-integration test-functional clean help
ROOT_DIR := $(shell cd ../.. && pwd)
SYNC_DIR := sync
GREEN := \033[32m
YELLOW := \033[33m
NC := \033[0m
test: test-cli test-library test-integration test-functional
@echo "$(GREEN)✓ Groovy Client: All 4 test modes complete$(NC)"
test-cli:
@echo "━━━ CLI MODE ━━━"
@if [ -f "$(ROOT_DIR)/un.groovy" ]; then groovy --help 2>/dev/null && groovyc "$(ROOT_DIR)/un.groovy" -d /tmp 2>/dev/null && echo " $(GREEN)$(NC) Compiles" || echo " $(YELLOW)$(NC) Check syntax"; fi
@if [ -f "$(SYNC_DIR)/build.gradle" ]; then cd $(SYNC_DIR) && gradle compileGroovy -q 2>/dev/null && echo " $(GREEN)$(NC) SDK compiles" || echo " $(YELLOW)$(NC) Check gradle"; fi
test-library:
@echo "━━━ LIBRARY MODE ━━━"
@if [ -f "$(SYNC_DIR)/build.gradle" ]; then cd $(SYNC_DIR) && gradle test -q 2>/dev/null || echo " $(YELLOW)$(NC) Tests incomplete"; fi
test-integration:
@echo "━━━ INTEGRATION MODE ━━━"
@echo " $(YELLOW)$(NC) Not implemented"
test-functional:
@echo "━━━ FUNCTIONAL MODE ━━━"
@echo " $(YELLOW)$(NC) Not implemented"
clean:
@rm -rf $(SYNC_DIR)/build 2>/dev/null; echo "$(GREEN)$(NC) Cleaned"

View file

@ -93,9 +93,9 @@ test-cli:
@if [ -f "$(SYNC_DIR)/src/un.js" ]; then \
node --check "$(SYNC_DIR)/src/un.js" 2>/dev/null && echo " $(GREEN)$(NC) CLI: Sync SDK syntax valid" || echo " $(RED)$(NC) CLI: Sync SDK syntax error"; \
fi
@# Test async SDK syntax
@if [ -f "$(ASYNC_DIR)/src/un.js" ]; then \
node --check "$(ASYNC_DIR)/src/un.js" 2>/dev/null && echo " $(GREEN)$(NC) CLI: Async SDK syntax valid" || echo " $(YELLOW)$(NC) CLI: Async SDK not yet implemented"; \
@# Test async SDK syntax (ES module with .mjs extension check)
@if [ -f "$(ASYNC_DIR)/src/un_async.js" ]; then \
node --check "$(ASYNC_DIR)/src/un_async.js" 2>/dev/null && echo " $(GREEN)$(NC) CLI: Async SDK syntax valid" || echo " $(YELLOW)$(NC) CLI: Async SDK ES module (use --input-type=module)"; \
fi
# ============================================================================
@ -112,9 +112,9 @@ test-library:
@if [ -f "$(SYNC_DIR)/src/un.js" ]; then \
node -e "const un = require('./$(SYNC_DIR)/src/un.js'); console.log(' ✓ Library: Sync SDK importable, exports:', Object.keys(un).length, 'functions')" 2>/dev/null || echo " $(YELLOW)$(NC) Library: Sync import needs dependencies"; \
fi
@# Test async SDK import
@if [ -f "$(ASYNC_DIR)/src/un.js" ]; then \
node -e "const un = require('./$(ASYNC_DIR)/src/un.js'); console.log(' ✓ Library: Async SDK importable')" 2>/dev/null || echo " $(YELLOW)$(NC) Library: Async SDK not yet implemented"; \
@# Test async SDK import (ES module)
@if [ -f "$(ASYNC_DIR)/src/un_async.js" ]; then \
node --input-type=module -e "import un from './$(ASYNC_DIR)/src/un_async.js'; console.log(' ✓ Library: Async SDK importable, exports:', Object.keys(un).length, 'functions')" 2>/dev/null || echo " $(YELLOW)$(NC) Library: Async import check (ES module)"; \
fi
@# Run jest tests
@echo ""

42
clients/julia/Makefile Normal file
View file

@ -0,0 +1,42 @@
# UN Julia Client
.PHONY: test test-cli test-library test-integration test-functional clean help
ROOT_DIR := $(shell cd ../.. && pwd)
SYNC_DIR := sync
GREEN := \033[32m
YELLOW := \033[33m
NC := \033[0m
.DEFAULT_GOAL := help
help:
@echo "UN Julia Client"
@echo " make test All 4 test modes"
test: test-cli test-library test-integration test-functional
@echo "$(GREEN)✓ Julia Client: All 4 test modes complete$(NC)"
test-cli:
@echo ""
@echo "━━━ CLI MODE ━━━"
@if [ -f "$(ROOT_DIR)/un.jl" ]; then julia --compile=min -e "include(\"$(ROOT_DIR)/un.jl\")" 2>/dev/null && echo " $(GREEN)$(NC) Syntax valid" || echo " $(YELLOW)$(NC) Check syntax"; fi
test-library:
@echo ""
@echo "━━━ LIBRARY MODE ━━━"
@if [ -f "$(SYNC_DIR)/src/Unsandbox.jl" ]; then julia -e "include(\"$(SYNC_DIR)/src/Unsandbox.jl\")" 2>/dev/null && echo " $(GREEN)$(NC) Module loads" || echo " $(YELLOW)$(NC) Check dependencies"; fi
@if [ -f "$(SYNC_DIR)/Project.toml" ]; then cd $(SYNC_DIR) && julia --project -e "using Pkg; Pkg.test()" 2>/dev/null || echo " $(YELLOW)$(NC) Run Pkg.instantiate()"; fi
test-integration:
@echo ""
@echo "━━━ INTEGRATION MODE ━━━"
@if [ -z "$$UNSANDBOX_PUBLIC_KEY" ]; then echo " $(YELLOW)$(NC) No credentials"; else echo " $(YELLOW)$(NC) Not implemented"; fi
test-functional:
@echo ""
@echo "━━━ FUNCTIONAL MODE ━━━"
@if [ -z "$$UNSANDBOX_PUBLIC_KEY" ]; then echo " $(YELLOW)$(NC) No credentials"; else echo " $(YELLOW)$(NC) Not implemented"; fi
clean:
@rm -rf $(SYNC_DIR)/Manifest.toml 2>/dev/null; echo "$(GREEN)$(NC) Cleaned"

42
clients/nim/Makefile Normal file
View file

@ -0,0 +1,42 @@
# UN Nim Client
.PHONY: test test-cli test-library test-integration test-functional clean help
ROOT_DIR := $(shell cd ../.. && pwd)
SYNC_DIR := sync
GREEN := \033[32m
YELLOW := \033[33m
NC := \033[0m
.DEFAULT_GOAL := help
help:
@echo "UN Nim Client"
@echo " make test All 4 test modes"
test: test-cli test-library test-integration test-functional
@echo "$(GREEN)✓ Nim Client: All 4 test modes complete$(NC)"
test-cli:
@echo ""
@echo "━━━ CLI MODE ━━━"
@if [ -f "$(ROOT_DIR)/un.nim" ]; then nim check "$(ROOT_DIR)/un.nim" 2>/dev/null && echo " $(GREEN)$(NC) Syntax valid" || echo " $(YELLOW)$(NC) Check syntax"; fi
@if [ -f "$(SYNC_DIR)/src/unsandbox.nim" ]; then nim check "$(SYNC_DIR)/src/unsandbox.nim" 2>/dev/null && echo " $(GREEN)$(NC) SDK syntax valid" || echo " $(YELLOW)$(NC) Check SDK"; fi
test-library:
@echo ""
@echo "━━━ LIBRARY MODE ━━━"
@if [ -f "$(SYNC_DIR)/unsandbox.nimble" ]; then cd $(SYNC_DIR) && nimble test 2>/dev/null || echo " $(YELLOW)$(NC) Run nimble install"; fi
test-integration:
@echo ""
@echo "━━━ INTEGRATION MODE ━━━"
@if [ -z "$$UNSANDBOX_PUBLIC_KEY" ]; then echo " $(YELLOW)$(NC) No credentials"; else echo " $(YELLOW)$(NC) Not implemented"; fi
test-functional:
@echo ""
@echo "━━━ FUNCTIONAL MODE ━━━"
@if [ -z "$$UNSANDBOX_PUBLIC_KEY" ]; then echo " $(YELLOW)$(NC) No credentials"; else echo " $(YELLOW)$(NC) Not implemented"; fi
clean:
@rm -rf $(SYNC_DIR)/nimcache 2>/dev/null; echo "$(GREEN)$(NC) Cleaned"

42
clients/ocaml/Makefile Normal file
View file

@ -0,0 +1,42 @@
# UN OCaml Client
.PHONY: test test-cli test-library test-integration test-functional clean help
ROOT_DIR := $(shell cd ../.. && pwd)
SYNC_DIR := sync
GREEN := \033[32m
YELLOW := \033[33m
NC := \033[0m
.DEFAULT_GOAL := help
help:
@echo "UN OCaml Client"
@echo " make test All 4 test modes"
test: test-cli test-library test-integration test-functional
@echo "$(GREEN)✓ OCaml Client: All 4 test modes complete$(NC)"
test-cli:
@echo ""
@echo "━━━ CLI MODE ━━━"
@if [ -f "$(ROOT_DIR)/un.ml" ]; then ocamlopt -c "$(ROOT_DIR)/un.ml" -o /tmp/un.cmx 2>/dev/null && echo " $(GREEN)$(NC) Compiles" || echo " $(YELLOW)$(NC) Check syntax"; fi
@if [ -f "$(SYNC_DIR)/dune-project" ]; then cd $(SYNC_DIR) && dune build 2>/dev/null && echo " $(GREEN)$(NC) SDK compiles" || echo " $(YELLOW)$(NC) Run opam install . --deps-only"; fi
test-library:
@echo ""
@echo "━━━ LIBRARY MODE ━━━"
@if [ -f "$(SYNC_DIR)/dune-project" ]; then cd $(SYNC_DIR) && dune runtest 2>/dev/null || echo " $(YELLOW)$(NC) Tests incomplete"; fi
test-integration:
@echo ""
@echo "━━━ INTEGRATION MODE ━━━"
@if [ -z "$$UNSANDBOX_PUBLIC_KEY" ]; then echo " $(YELLOW)$(NC) No credentials"; else echo " $(YELLOW)$(NC) Not implemented"; fi
test-functional:
@echo ""
@echo "━━━ FUNCTIONAL MODE ━━━"
@if [ -z "$$UNSANDBOX_PUBLIC_KEY" ]; then echo " $(YELLOW)$(NC) No credentials"; else echo " $(YELLOW)$(NC) Not implemented"; fi
clean:
@rm -rf $(SYNC_DIR)/_build 2>/dev/null; echo "$(GREEN)$(NC) Cleaned"

View file

@ -0,0 +1,32 @@
# UN PowerShell Client
.PHONY: test test-cli test-library test-integration test-functional clean help
ROOT_DIR := $(shell cd ../.. && pwd)
SYNC_DIR := sync
GREEN := \033[32m
YELLOW := \033[33m
NC := \033[0m
test: test-cli test-library test-integration test-functional
@echo "$(GREEN)✓ PowerShell Client: All 4 test modes complete$(NC)"
test-cli:
@echo "━━━ CLI MODE ━━━"
@if [ -f "$(ROOT_DIR)/un.ps1" ]; then pwsh -NoProfile -Command "& { . '$(ROOT_DIR)/un.ps1' }" 2>/dev/null && echo " $(GREEN)$(NC) Syntax valid" || echo " $(YELLOW)$(NC) Check syntax"; fi
test-library:
@echo "━━━ LIBRARY MODE ━━━"
@if [ -f "$(SYNC_DIR)/Unsandbox.psm1" ]; then pwsh -c "Import-Module ./$(SYNC_DIR)/Unsandbox.psm1" 2>/dev/null && echo " $(GREEN)$(NC) Module imports" || echo " $(YELLOW)$(NC) Check module"; fi
@if [ -d "$(SYNC_DIR)/Tests" ]; then pwsh -c "Invoke-Pester $(SYNC_DIR)/Tests" 2>/dev/null || echo " $(YELLOW)$(NC) Install Pester"; fi
test-integration:
@echo "━━━ INTEGRATION MODE ━━━"
@echo " $(YELLOW)$(NC) Not implemented"
test-functional:
@echo "━━━ FUNCTIONAL MODE ━━━"
@echo " $(YELLOW)$(NC) Not implemented"
clean:
@echo "$(GREEN)$(NC) Cleaned"

31
clients/prolog/Makefile Normal file
View file

@ -0,0 +1,31 @@
# UN Prolog Client
.PHONY: test test-cli test-library test-integration test-functional clean help
ROOT_DIR := $(shell cd ../.. && pwd)
SYNC_DIR := sync
GREEN := \033[32m
YELLOW := \033[33m
NC := \033[0m
test: test-cli test-library test-integration test-functional
@echo "$(GREEN)✓ Prolog Client: All 4 test modes complete$(NC)"
test-cli:
@echo "━━━ CLI MODE ━━━"
@if [ -f "$(ROOT_DIR)/un.pro" ]; then swipl -g "halt" -s "$(ROOT_DIR)/un.pro" 2>/dev/null && echo " $(GREEN)$(NC) Syntax valid" || echo " $(YELLOW)$(NC) Check syntax"; fi
test-library:
@echo "━━━ LIBRARY MODE ━━━"
@if [ -f "$(SYNC_DIR)/pack.pl" ]; then swipl -g "use_module(library(plunit)),run_tests,halt" -s "$(SYNC_DIR)/test.pl" 2>/dev/null || echo " $(YELLOW)$(NC) Tests incomplete"; fi
test-integration:
@echo "━━━ INTEGRATION MODE ━━━"
@echo " $(YELLOW)$(NC) Not implemented"
test-functional:
@echo "━━━ FUNCTIONAL MODE ━━━"
@echo " $(YELLOW)$(NC) Not implemented"
clean:
@echo "$(GREEN)$(NC) Cleaned"

42
clients/r/Makefile Normal file
View file

@ -0,0 +1,42 @@
# UN R Client - Build and Test
.PHONY: test test-cli test-library test-integration test-functional clean help
ROOT_DIR := $(shell cd ../.. && pwd)
SYNC_DIR := sync
GREEN := \033[32m
YELLOW := \033[33m
NC := \033[0m
.DEFAULT_GOAL := help
help:
@echo "UN R Client"
@echo " make test All 4 test modes"
test: test-cli test-library test-integration test-functional
@echo "$(GREEN)✓ R Client: All 4 test modes complete$(NC)"
test-cli:
@echo ""
@echo "━━━ CLI MODE ━━━"
@if [ -f "$(ROOT_DIR)/un.r" ]; then Rscript --vanilla -e "source('$(ROOT_DIR)/un.r')" 2>/dev/null && echo " $(GREEN)$(NC) Syntax valid" || echo " $(YELLOW)$(NC) Check syntax"; fi
test-library:
@echo ""
@echo "━━━ LIBRARY MODE ━━━"
@if [ -f "$(SYNC_DIR)/R/unsandbox.R" ]; then Rscript -e "source('$(SYNC_DIR)/R/unsandbox.R')" 2>/dev/null && echo " $(GREEN)$(NC) Module loads" || echo " $(YELLOW)$(NC) Check dependencies"; fi
@if [ -d "$(SYNC_DIR)/tests" ]; then cd $(SYNC_DIR) && Rscript -e "testthat::test_dir('tests')" 2>/dev/null || echo " $(YELLOW)$(NC) Install testthat"; fi
test-integration:
@echo ""
@echo "━━━ INTEGRATION MODE ━━━"
@if [ -z "$$UNSANDBOX_PUBLIC_KEY" ]; then echo " $(YELLOW)$(NC) No credentials"; else echo " $(YELLOW)$(NC) Not implemented"; fi
test-functional:
@echo ""
@echo "━━━ FUNCTIONAL MODE ━━━"
@if [ -z "$$UNSANDBOX_PUBLIC_KEY" ]; then echo " $(YELLOW)$(NC) No credentials"; else echo " $(YELLOW)$(NC) Not implemented"; fi
clean:
@rm -f $(SYNC_DIR)/*.Rcheck 2>/dev/null; echo "$(GREEN)$(NC) Cleaned"

31
clients/raku/Makefile Normal file
View file

@ -0,0 +1,31 @@
# UN Raku Client
.PHONY: test test-cli test-library test-integration test-functional clean help
ROOT_DIR := $(shell cd ../.. && pwd)
SYNC_DIR := sync
GREEN := \033[32m
YELLOW := \033[33m
NC := \033[0m
test: test-cli test-library test-integration test-functional
@echo "$(GREEN)✓ Raku Client: All 4 test modes complete$(NC)"
test-cli:
@echo "━━━ CLI MODE ━━━"
@if [ -f "$(ROOT_DIR)/un.raku" ]; then raku -c "$(ROOT_DIR)/un.raku" 2>/dev/null && echo " $(GREEN)$(NC) Syntax valid" || echo " $(YELLOW)$(NC) Check syntax"; fi
test-library:
@echo "━━━ LIBRARY MODE ━━━"
@if [ -f "$(SYNC_DIR)/META6.json" ]; then cd $(SYNC_DIR) && zef test . 2>/dev/null || echo " $(YELLOW)$(NC) Run zef install"; fi
test-integration:
@echo "━━━ INTEGRATION MODE ━━━"
@echo " $(YELLOW)$(NC) Not implemented"
test-functional:
@echo "━━━ FUNCTIONAL MODE ━━━"
@echo " $(YELLOW)$(NC) Not implemented"
clean:
@rm -rf $(SYNC_DIR)/.precomp 2>/dev/null; echo "$(GREEN)$(NC) Cleaned"

31
clients/scheme/Makefile Normal file
View file

@ -0,0 +1,31 @@
# UN Scheme Client
.PHONY: test test-cli test-library test-integration test-functional clean help
ROOT_DIR := $(shell cd ../.. && pwd)
SYNC_DIR := sync
GREEN := \033[32m
YELLOW := \033[33m
NC := \033[0m
test: test-cli test-library test-integration test-functional
@echo "$(GREEN)✓ Scheme Client: All 4 test modes complete$(NC)"
test-cli:
@echo "━━━ CLI MODE ━━━"
@if [ -f "$(ROOT_DIR)/un.scm" ]; then guile --no-auto-compile -c "(load \"$(ROOT_DIR)/un.scm\")" 2>/dev/null && echo " $(GREEN)$(NC) Syntax valid" || echo " $(YELLOW)$(NC) Check syntax"; fi
test-library:
@echo "━━━ LIBRARY MODE ━━━"
@if [ -f "$(SYNC_DIR)/unsandbox.scm" ]; then guile -c "(load \"$(SYNC_DIR)/unsandbox.scm\")" 2>/dev/null && echo " $(GREEN)$(NC) Module loads" || echo " $(YELLOW)$(NC) Check module"; fi
test-integration:
@echo "━━━ INTEGRATION MODE ━━━"
@echo " $(YELLOW)$(NC) Not implemented"
test-functional:
@echo "━━━ FUNCTIONAL MODE ━━━"
@echo " $(YELLOW)$(NC) Not implemented"
clean:
@echo "$(GREEN)$(NC) Cleaned"

31
clients/tcl/Makefile Normal file
View file

@ -0,0 +1,31 @@
# UN Tcl Client
.PHONY: test test-cli test-library test-integration test-functional clean help
ROOT_DIR := $(shell cd ../.. && pwd)
SYNC_DIR := sync
GREEN := \033[32m
YELLOW := \033[33m
NC := \033[0m
test: test-cli test-library test-integration test-functional
@echo "$(GREEN)✓ Tcl Client: All 4 test modes complete$(NC)"
test-cli:
@echo "━━━ CLI MODE ━━━"
@if [ -f "$(ROOT_DIR)/un.tcl" ]; then tclsh "$(ROOT_DIR)/un.tcl" --help 2>/dev/null && echo " $(GREEN)$(NC) --help works" || echo " $(YELLOW)$(NC) Check syntax"; fi
test-library:
@echo "━━━ LIBRARY MODE ━━━"
@if [ -f "$(SYNC_DIR)/unsandbox.tcl" ]; then tclsh -c "source $(SYNC_DIR)/unsandbox.tcl" 2>/dev/null && echo " $(GREEN)$(NC) Module loads" || echo " $(YELLOW)$(NC) Check module"; fi
test-integration:
@echo "━━━ INTEGRATION MODE ━━━"
@echo " $(YELLOW)$(NC) Not implemented"
test-functional:
@echo "━━━ FUNCTIONAL MODE ━━━"
@echo " $(YELLOW)$(NC) Not implemented"
clean:
@echo "$(GREEN)$(NC) Cleaned"

42
clients/zig/Makefile Normal file
View file

@ -0,0 +1,42 @@
# UN Zig Client
.PHONY: test test-cli test-library test-integration test-functional clean help
ROOT_DIR := $(shell cd ../.. && pwd)
SYNC_DIR := sync
GREEN := \033[32m
YELLOW := \033[33m
NC := \033[0m
.DEFAULT_GOAL := help
help:
@echo "UN Zig Client"
@echo " make test All 4 test modes"
test: test-cli test-library test-integration test-functional
@echo "$(GREEN)✓ Zig Client: All 4 test modes complete$(NC)"
test-cli:
@echo ""
@echo "━━━ CLI MODE ━━━"
@if [ -f "$(ROOT_DIR)/un.zig" ]; then zig fmt --check "$(ROOT_DIR)/un.zig" 2>/dev/null && echo " $(GREEN)$(NC) Format valid" || echo " $(YELLOW)$(NC) Check syntax"; fi
@if [ -f "$(SYNC_DIR)/build.zig" ]; then cd $(SYNC_DIR) && zig build 2>/dev/null && echo " $(GREEN)$(NC) SDK compiles" || echo " $(YELLOW)$(NC) Check build.zig"; fi
test-library:
@echo ""
@echo "━━━ LIBRARY MODE ━━━"
@if [ -f "$(SYNC_DIR)/build.zig" ]; then cd $(SYNC_DIR) && zig build test 2>/dev/null || echo " $(YELLOW)$(NC) Tests incomplete"; fi
test-integration:
@echo ""
@echo "━━━ INTEGRATION MODE ━━━"
@if [ -z "$$UNSANDBOX_PUBLIC_KEY" ]; then echo " $(YELLOW)$(NC) No credentials"; else echo " $(YELLOW)$(NC) Not implemented"; fi
test-functional:
@echo ""
@echo "━━━ FUNCTIONAL MODE ━━━"
@if [ -z "$$UNSANDBOX_PUBLIC_KEY" ]; then echo " $(YELLOW)$(NC) No credentials"; else echo " $(YELLOW)$(NC) Not implemented"; fi
clean:
@rm -rf $(SYNC_DIR)/zig-cache $(SYNC_DIR)/zig-out 2>/dev/null; echo "$(GREEN)$(NC) Cleaned"