diff --git a/README.md b/README.md index 547c9ea..5fc284d 100644 --- a/README.md +++ b/README.md @@ -64,7 +64,7 @@ nix fmt # nixfmt via treefmt ``` Without Nix, `run-tests.lisp` falls back to sibling checkouts of `cl-cc`, -`cl-weave`, `cl-prolog`, `cl-parser-kit`, and `cl-json-kit` next to this +`cl-weave`, `cl-prolog-kit`, `cl-parser-kit`, and `cl-json-kit` next to this repository: ```sh diff --git a/coverage.lisp b/coverage.lisp index fe328f0..dd4a4f4 100644 --- a/coverage.lisp +++ b/coverage.lisp @@ -38,15 +38,53 @@ (defvar *cl-cc-root* (%env-or "CL_CC_PHP_CL_CC_ROOT" "../cl-cc")) (defvar *cl-weave-root* (%env-or "CL_CC_PHP_CL_WEAVE_ROOT" "../cl-weave")) -(defvar *cl-prolog-root* (%env-or "CL_CC_PHP_CL_PROLOG_ROOT" "../cl-prolog")) +(defvar *cl-prolog-kit-root* (%env-or "CL_CC_PHP_CL_PROLOG_KIT_ROOT" "../cl-prolog-kit")) (defvar *cl-parser-kit-root* (%env-or "CL_CC_PHP_CL_PARSER_KIT_ROOT" "../cl-parser-kit")) (defvar *cl-json-kit-root* (%env-or "CL_CC_PHP_CL_JSON_KIT_ROOT" "../cl-json-kit")) (defvar *cl-host-kit-root* (%env-or "CL_CC_PHP_CL_HOST_KIT_ROOT" "../cl-host-kit")) +;; See run-tests.lisp's comment on the matching block: cl-cc.asd's own +;; :depends-on needs these 20 systems and the pinned cl-cc checkout no +;; longer provides them. +(defvar *cl-cc-ast-root* (%env-or "CL_CC_PHP_CL_CC_AST_ROOT" "../cl-cc-ast")) +(defvar *cl-cc-bootstrap-root* + (%env-or "CL_CC_PHP_CL_CC_BOOTSTRAP_ROOT" "../cl-cc-bootstrap")) +(defvar *cl-cc-parse-root* + (%env-or "CL_CC_PHP_CL_CC_PARSE_ROOT" "../cl-cc-parse")) +(defvar *cl-cc-vm-root* (%env-or "CL_CC_PHP_CL_CC_VM_ROOT" "../cl-cc-vm")) +(defvar *cl-cc-type-root* + (%env-or "CL_CC_PHP_CL_CC_TYPE_ROOT" "../cl-cc-type")) +(defvar *cl-cc-binary-root* + (%env-or "CL_CC_PHP_CL_CC_BINARY_ROOT" "../cl-cc-binary")) +(defvar *cl-cc-runtime-root* + (%env-or "CL_CC_PHP_CL_CC_RUNTIME_ROOT" "../cl-cc-runtime")) +(defvar *cl-cc-mir-root* (%env-or "CL_CC_PHP_CL_CC_MIR_ROOT" "../cl-cc-mir")) +(defvar *cl-cc-codegen-native-root* + (%env-or "CL_CC_PHP_CL_CC_CODEGEN_NATIVE_ROOT" "../cl-cc-codegen-native")) +(defvar *cl-cc-expand-root* + (%env-or "CL_CC_PHP_CL_CC_EXPAND_ROOT" "../cl-cc-expand")) +(defvar *cl-cc-cps-root* (%env-or "CL_CC_PHP_CL_CC_CPS_ROOT" "../cl-cc-cps")) +(defvar *cl-cc-optimize-root* + (%env-or "CL_CC_PHP_CL_CC_OPTIMIZE_ROOT" "../cl-cc-optimize")) +(defvar *cl-log-kit-root* + (%env-or "CL_CC_PHP_CL_LOG_KIT_ROOT" "../cl-log-kit")) +(defvar *cl-date-kit-root* + (%env-or "CL_CC_PHP_CL_DATE_KIT_ROOT" "../cl-date-kit")) +(defvar *cl-concurrent-kit-root* + (%env-or "CL_CC_PHP_CL_CONCURRENT_KIT_ROOT" "../cl-concurrent-kit")) +(defvar *cl-boundary-kit-root* + (%env-or "CL_CC_PHP_CL_BOUNDARY_KIT_ROOT" "../cl-boundary-kit")) +(defvar *cl-codec-kit-root* + (%env-or "CL_CC_PHP_CL_CODEC_KIT_ROOT" "../cl-codec-kit")) +(defvar *cl-process-kit-root* + (%env-or "CL_CC_PHP_CL_PROCESS_KIT_ROOT" "../cl-process-kit")) +(defvar *cl-regex-kit-root* + (%env-or "CL_CC_PHP_CL_REGEX_KIT_ROOT" "../cl-regex-kit")) +(defvar *cl-tty-kit-root* + (%env-or "CL_CC_PHP_CL_TTY_KIT_ROOT" "../cl-tty-kit")) + (defparameter *cl-cc-package-subdirs* - '("bootstrap" "ast" "parse" "vm" "runtime" "type" "mir" "optimize" "emit" - "expand" "compile" "cps" "codegen" "target" "regalloc" "bytecode" "ir" - "binary" "stdlib" "javascript" "pipeline")) + '("compile" "pipeline" "stdlib")) (defun %tree (pathname) (list :tree (uiop:ensure-directory-pathname pathname))) @@ -55,10 +93,30 @@ (list* :source-registry (%tree (uiop:ensure-directory-pathname *cl-weave-root*)) - (%tree (uiop:ensure-directory-pathname *cl-prolog-root*)) + (%tree (uiop:ensure-directory-pathname *cl-prolog-kit-root*)) (%tree (uiop:ensure-directory-pathname *cl-parser-kit-root*)) (%tree (uiop:ensure-directory-pathname *cl-json-kit-root*)) (%tree (uiop:ensure-directory-pathname *cl-host-kit-root*)) + (%tree (uiop:ensure-directory-pathname *cl-cc-ast-root*)) + (%tree (uiop:ensure-directory-pathname *cl-cc-bootstrap-root*)) + (%tree (uiop:ensure-directory-pathname *cl-cc-parse-root*)) + (%tree (uiop:ensure-directory-pathname *cl-cc-vm-root*)) + (%tree (uiop:ensure-directory-pathname *cl-cc-type-root*)) + (%tree (uiop:ensure-directory-pathname *cl-cc-binary-root*)) + (%tree (uiop:ensure-directory-pathname *cl-cc-runtime-root*)) + (%tree (uiop:ensure-directory-pathname *cl-cc-mir-root*)) + (%tree (uiop:ensure-directory-pathname *cl-cc-codegen-native-root*)) + (%tree (uiop:ensure-directory-pathname *cl-cc-expand-root*)) + (%tree (uiop:ensure-directory-pathname *cl-cc-cps-root*)) + (%tree (uiop:ensure-directory-pathname *cl-cc-optimize-root*)) + (%tree (uiop:ensure-directory-pathname *cl-log-kit-root*)) + (%tree (uiop:ensure-directory-pathname *cl-date-kit-root*)) + (%tree (uiop:ensure-directory-pathname *cl-concurrent-kit-root*)) + (%tree (uiop:ensure-directory-pathname *cl-boundary-kit-root*)) + (%tree (uiop:ensure-directory-pathname *cl-codec-kit-root*)) + (%tree (uiop:ensure-directory-pathname *cl-process-kit-root*)) + (%tree (uiop:ensure-directory-pathname *cl-regex-kit-root*)) + (%tree (uiop:ensure-directory-pathname *cl-tty-kit-root*)) (%tree (uiop:getcwd)) (append (mapcar (lambda (subdir) diff --git a/docs/src/getting-started.md b/docs/src/getting-started.md index 891d5e4..cabaeb0 100644 --- a/docs/src/getting-started.md +++ b/docs/src/getting-started.md @@ -56,7 +56,7 @@ parent/ cl-cc/ cl-cc-php/ cl-weave/ - cl-prolog/ + cl-prolog-kit/ cl-parser-kit/ cl-json-kit/ ``` diff --git a/docs/src/project/development.md b/docs/src/project/development.md index b1eba29..197488b 100644 --- a/docs/src/project/development.md +++ b/docs/src/project/development.md @@ -7,7 +7,7 @@ nix develop ``` This gives you SBCL with the dependency roots already exported as environment -variables, so `run-tests.lisp` finds cl-cc, cl-weave, cl-prolog, cl-parser-kit, +variables, so `run-tests.lisp` finds cl-cc, cl-weave, cl-prolog-kit, cl-parser-kit, and cl-json-kit without further setup. ## Running the full check @@ -40,9 +40,9 @@ Or without Nix, from the repository root: sbcl --script run-tests.lisp ``` -That falls back to sibling checkouts (`../cl-cc`, `../cl-weave`, `../cl-prolog`, +That falls back to sibling checkouts (`../cl-cc`, `../cl-weave`, `../cl-prolog-kit`, `../cl-parser-kit`, `../cl-json-kit`). Override any root with -`CL_CC_PHP_CL_CC_ROOT`, `CL_CC_PHP_CL_WEAVE_ROOT`, `CL_CC_PHP_CL_PROLOG_ROOT`, +`CL_CC_PHP_CL_CC_ROOT`, `CL_CC_PHP_CL_WEAVE_ROOT`, `CL_CC_PHP_CL_PROLOG_KIT_ROOT`, `CL_CC_PHP_CL_PARSER_KIT_ROOT`, or `CL_CC_PHP_CL_JSON_KIT_ROOT`. ## Coverage diff --git a/docs/src/reference/compatibility.md b/docs/src/reference/compatibility.md index 8d5c973..4cf21e5 100644 --- a/docs/src/reference/compatibility.md +++ b/docs/src/reference/compatibility.md @@ -68,7 +68,7 @@ known to work together if `flake.lock` says so.** Bumping the cl-cc input is a change that needs its own test run. The existing `v0.1.0` tag on cl-cc predates the `packages/` layout this repository expects, so it is not a usable pin. -The other inputs — cl-weave, cl-prolog, cl-parser-kit, cl-json-kit — are +The other inputs — cl-weave, cl-prolog-kit, cl-parser-kit, cl-json-kit — are pinned to release tags and behave normally. Unlike the first three, which are test-only, cl-json-kit is a real dependency of the shipped `cl-cc-php` system (`json_validate` calls into it directly) — see `cl-cc-php.asd`'s diff --git a/flake.lock b/flake.lock index 6d98f52..efc1184 100644 --- a/flake.lock +++ b/flake.lock @@ -1,35 +1,307 @@ { "nodes": { + "cl-boundary-kit": { + "flake": false, + "locked": { + "lastModified": 1785937199, + "narHash": "sha256-FAuQIpnySCV4KoPm2ugbq/9uMsBGBO5XzF0SE3o0MTI=", + "owner": "nerima-lisp", + "repo": "cl-boundary-kit", + "rev": "62e4a7df3e52061c38b7ff4f596436bdda985f71", + "type": "github" + }, + "original": { + "owner": "nerima-lisp", + "ref": "v2.3.0", + "repo": "cl-boundary-kit", + "type": "github" + } + }, "cl-cc": { "flake": false, "locked": { - "lastModified": 1785038020, - "narHash": "sha256-0eThEy6Vy0qBRG3UD7i2OBWEHCdSB8/ldRZqe9lxNsE=", + "lastModified": 1786972317, + "narHash": "sha256-RZ0NvI92ra7wWx241uQ2ihbE+Xu++cR8f7/Q02f1Iao=", "owner": "nerima-lisp", "repo": "cl-cc", - "rev": "4aca55a2e7e3c92685870a434c2e60827a3d90a1", + "rev": "ce67ffd62647985cf72947b34075d8b20a351d0e", "type": "github" }, "original": { "owner": "nerima-lisp", "repo": "cl-cc", - "rev": "4aca55a2e7e3c92685870a434c2e60827a3d90a1", + "rev": "ce67ffd62647985cf72947b34075d8b20a351d0e", + "type": "github" + } + }, + "cl-cc-ast": { + "flake": false, + "locked": { + "lastModified": 1785484061, + "narHash": "sha256-UkonaEkOJr6SDHcu9vooVqY5X3kWK0+9vYps1K2sMhg=", + "owner": "nerima-lisp", + "repo": "cl-cc-ast", + "rev": "25375954dd13037d608b8e427a6dd86588207153", + "type": "github" + }, + "original": { + "owner": "nerima-lisp", + "ref": "v0.2.0", + "repo": "cl-cc-ast", + "type": "github" + } + }, + "cl-cc-binary": { + "flake": false, + "locked": { + "lastModified": 1785473747, + "narHash": "sha256-H60dHCE2Pv4mm4yeNT+KABCUb8knJ3i/YgCV2oM3Piw=", + "owner": "nerima-lisp", + "repo": "cl-cc-binary", + "rev": "6ca146c188f779d22746a35c1a526d52dbb1b983", + "type": "github" + }, + "original": { + "owner": "nerima-lisp", + "ref": "v0.2.0", + "repo": "cl-cc-binary", + "type": "github" + } + }, + "cl-cc-bootstrap": { + "flake": false, + "locked": { + "lastModified": 1786993824, + "narHash": "sha256-cob17nI1Fwq0yvbUEqA4f6qNcAlTRwmAMxP8GZcE8HQ=", + "owner": "nerima-lisp", + "repo": "cl-cc-bootstrap", + "rev": "88d61be01658bc247ae2889cb08f1e7c6c2c9b33", + "type": "github" + }, + "original": { + "owner": "nerima-lisp", + "repo": "cl-cc-bootstrap", + "rev": "88d61be01658bc247ae2889cb08f1e7c6c2c9b33", + "type": "github" + } + }, + "cl-cc-codegen-native": { + "flake": false, + "locked": { + "lastModified": 1785502408, + "narHash": "sha256-zZ5b3Ovuu2aNjeQyUuoixUp5Ww4W33+WtJLKkYoXik4=", + "owner": "nerima-lisp", + "repo": "cl-cc-codegen-native", + "rev": "90dd6aefe0757388da775a682a1a8e60990568a0", + "type": "github" + }, + "original": { + "owner": "nerima-lisp", + "ref": "v0.2.0", + "repo": "cl-cc-codegen-native", + "type": "github" + } + }, + "cl-cc-cps": { + "flake": false, + "locked": { + "lastModified": 1785575449, + "narHash": "sha256-0Co8OVzZOgd4whUmMjYLY/MvCZXce7IEuv/lplBMfF4=", + "owner": "nerima-lisp", + "repo": "cl-cc-cps", + "rev": "7ff8044c8cfe0b6d4cbd2023ba10be78cdb6cbc1", + "type": "github" + }, + "original": { + "owner": "nerima-lisp", + "ref": "v0.1.0", + "repo": "cl-cc-cps", + "type": "github" + } + }, + "cl-cc-expand": { + "flake": false, + "locked": { + "lastModified": 1785577621, + "narHash": "sha256-/f3TLBYmSziJQRMorwcXCObZjgLaxOboixOMLuyIY9A=", + "owner": "nerima-lisp", + "repo": "cl-cc-expand", + "rev": "4e3eee0681bbf018a2383dd62a0cad0527fc77d6", + "type": "github" + }, + "original": { + "owner": "nerima-lisp", + "ref": "v0.1.0", + "repo": "cl-cc-expand", + "type": "github" + } + }, + "cl-cc-mir": { + "flake": false, + "locked": { + "lastModified": 1786372739, + "narHash": "sha256-nZGCcEpK8YhM77eZwgwhOjPJ/g2NUFPK4dDUdrjHnKg=", + "owner": "nerima-lisp", + "repo": "cl-cc-mir", + "rev": "663c4c01c800ca7e64d444c53204645173e84854", + "type": "github" + }, + "original": { + "owner": "nerima-lisp", + "repo": "cl-cc-mir", + "rev": "663c4c01c800ca7e64d444c53204645173e84854", + "type": "github" + } + }, + "cl-cc-optimize": { + "flake": false, + "locked": { + "lastModified": 1786971492, + "narHash": "sha256-vMtcOuQa8XG7coe+Lkh9UjVOwLnUPkI0pxNC40Dyukg=", + "owner": "nerima-lisp", + "repo": "cl-cc-optimize", + "rev": "51c0db63ff125413568ec08c79e33dcf34f00fbf", + "type": "github" + }, + "original": { + "owner": "nerima-lisp", + "repo": "cl-cc-optimize", + "rev": "51c0db63ff125413568ec08c79e33dcf34f00fbf", + "type": "github" + } + }, + "cl-cc-parse": { + "flake": false, + "locked": { + "lastModified": 1785095912, + "narHash": "sha256-eAlz2VoCQC7hog6RPrLJGpXAx5mTW+sI+BLeQpJCAYA=", + "owner": "nerima-lisp", + "repo": "cl-cc-parse", + "rev": "7316dd82137290082fa1fe03300d3aa388d84117", + "type": "github" + }, + "original": { + "owner": "nerima-lisp", + "ref": "v0.1.0", + "repo": "cl-cc-parse", + "type": "github" + } + }, + "cl-cc-runtime": { + "flake": false, + "locked": { + "lastModified": 1785009757, + "narHash": "sha256-Gai99S6dUFokiZsLZsF77wVLreET3S51iK+gRglPQ0g=", + "owner": "nerima-lisp", + "repo": "cl-cc-runtime", + "rev": "4ff5a823cccf46669688ae513f0e4727a76e913e", + "type": "github" + }, + "original": { + "owner": "nerima-lisp", + "ref": "v0.1.0", + "repo": "cl-cc-runtime", + "type": "github" + } + }, + "cl-cc-type": { + "flake": false, + "locked": { + "lastModified": 1785487710, + "narHash": "sha256-oenA9WafiIt//qh7eV53h+lxKRNeZBXmtqZlw18AT2E=", + "owner": "nerima-lisp", + "repo": "cl-cc-type", + "rev": "93200bdc24123940dc52b7f916d0cb8f0ebf0993", + "type": "github" + }, + "original": { + "owner": "nerima-lisp", + "ref": "v0.2.0", + "repo": "cl-cc-type", + "type": "github" + } + }, + "cl-cc-vm": { + "flake": false, + "locked": { + "lastModified": 1785472952, + "narHash": "sha256-XvC+x0S7wXT0R3Er/QPU7bLNWykj9rc8N5FiIJUYy2o=", + "owner": "nerima-lisp", + "repo": "cl-cc-vm", + "rev": "1400fc1cc5a225185f854e9072f5bce8b9927d1c", + "type": "github" + }, + "original": { + "owner": "nerima-lisp", + "ref": "v0.1.0", + "repo": "cl-cc-vm", + "type": "github" + } + }, + "cl-codec-kit": { + "flake": false, + "locked": { + "lastModified": 1785920269, + "narHash": "sha256-gdpeurD7tMtJdk5X87I9v/cDWHvkplaWHAeVUMCkyFU=", + "owner": "nerima-lisp", + "repo": "cl-codec-kit", + "rev": "e30be513f5f8e936e968ff8d7910f43ef986ba6f", + "type": "github" + }, + "original": { + "owner": "nerima-lisp", + "ref": "v0.5.0", + "repo": "cl-codec-kit", + "type": "github" + } + }, + "cl-concurrent-kit": { + "flake": false, + "locked": { + "lastModified": 1785940791, + "narHash": "sha256-4ZXzAIMn4x+/zhx+jOW/Vr61oT/lc+PJIWzAE5y2Qsw=", + "owner": "nerima-lisp", + "repo": "cl-concurrent-kit", + "rev": "0ef20d36a0a12800f231172227bd94034611c639", + "type": "github" + }, + "original": { + "owner": "nerima-lisp", + "ref": "v0.6.1", + "repo": "cl-concurrent-kit", + "type": "github" + } + }, + "cl-date-kit": { + "flake": false, + "locked": { + "lastModified": 1785928864, + "narHash": "sha256-gpIsXrCcDFYVOVGvbMYMf1Oed/n51zyP3ZKZLQtw/Y0=", + "owner": "nerima-lisp", + "repo": "cl-date-kit", + "rev": "5671c20eddb901ecbe9f5d66b59ea92ac97aa411", + "type": "github" + }, + "original": { + "owner": "nerima-lisp", + "ref": "v1.0.0", + "repo": "cl-date-kit", "type": "github" } }, "cl-host-kit": { "flake": false, "locked": { - "lastModified": 1785662299, - "narHash": "sha256-XzvvQ6MsRFYQNYe757mIbzSlBUy8l6Jv0aReFpuxPyo=", + "lastModified": 1785923957, + "narHash": "sha256-pUR7Gi9Fdwg9WR1Mpjl+yBAb8FHAAieG8lTLYwfVJOc=", "owner": "nerima-lisp", "repo": "cl-host-kit", - "rev": "7dc003d5ba176080796d775f6c8c4f75a5d56107", + "rev": "ec565470b634605e23b0d6eef0645eb15e8e3356", "type": "github" }, "original": { "owner": "nerima-lisp", - "ref": "v0.2.5", + "ref": "v0.3.1", "repo": "cl-host-kit", "type": "github" } @@ -51,6 +323,23 @@ "type": "github" } }, + "cl-log-kit": { + "flake": false, + "locked": { + "lastModified": 1785930087, + "narHash": "sha256-zFbU9a8KLHThzQRn7jqSL0SoTj7ImeP3Q5lJmsOzBQM=", + "owner": "nerima-lisp", + "repo": "cl-log-kit", + "rev": "580ebe23e4106edb8dcc89c0d4732f585c17e3f9", + "type": "github" + }, + "original": { + "owner": "nerima-lisp", + "ref": "v2.2.0", + "repo": "cl-log-kit", + "type": "github" + } + }, "cl-parser-kit": { "flake": false, "locked": { @@ -68,20 +357,71 @@ "type": "github" } }, - "cl-prolog": { + "cl-process-kit": { + "flake": false, + "locked": { + "lastModified": 1785674951, + "narHash": "sha256-D6h2Z+SnxqF9GV+Bf5mxmiLxlg9VFn8K0uh0bM7oWh8=", + "owner": "nerima-lisp", + "repo": "cl-process-kit", + "rev": "44fc4281e5f7e97d662180aa15e23349b7ed7a5d", + "type": "github" + }, + "original": { + "owner": "nerima-lisp", + "ref": "v3.2.0", + "repo": "cl-process-kit", + "type": "github" + } + }, + "cl-prolog-kit": { + "flake": false, + "locked": { + "lastModified": 1786948477, + "narHash": "sha256-3qn9W1Jmbxnr0Si77J7Klo26oX/zjgBVwb5ye74NsTY=", + "owner": "nerima-lisp", + "repo": "cl-prolog-kit", + "rev": "239368e1001bc3a8576d45770c9e91da11515d09", + "type": "github" + }, + "original": { + "owner": "nerima-lisp", + "ref": "v1.5.0", + "repo": "cl-prolog-kit", + "type": "github" + } + }, + "cl-regex-kit": { + "flake": false, + "locked": { + "lastModified": 1786517019, + "narHash": "sha256-l8Yv7qmf+1VCTjEQ1RQCtV3HFztLiKdM5OMs08jaIjA=", + "owner": "nerima-lisp", + "repo": "cl-regex-kit", + "rev": "308375445bafcafdbc32d2347154d13ee765c4c4", + "type": "github" + }, + "original": { + "owner": "nerima-lisp", + "ref": "v2.0.0", + "repo": "cl-regex-kit", + "type": "github" + } + }, + "cl-tty-kit": { "flake": false, "locked": { - "lastModified": 1785656951, - "narHash": "sha256-szDf+Sg5RDex/VC/2h9tt9TQYyxwOgPjTR4PpKB9To8=", + "lastModified": 1786289076, + "narHash": "sha256-BITAAgbpxMVWgSCZPLWWO6gxh4KcPcHDy518Sbn0K8I=", "owner": "nerima-lisp", - "repo": "cl-prolog", - "rev": "c78f2c34792d01b653721d6b12427f98ef4235d7", + "repo": "cl-tty-kit", + "rev": "add24964a286720baa9e08722f4b611fcefdf22f", "type": "github" }, "original": { "owner": "nerima-lisp", - "ref": "v1.3.0", - "repo": "cl-prolog", + "ref": "v1.6.1", + "repo": "cl-tty-kit", "type": "github" } }, @@ -120,11 +460,31 @@ }, "root": { "inputs": { + "cl-boundary-kit": "cl-boundary-kit", "cl-cc": "cl-cc", + "cl-cc-ast": "cl-cc-ast", + "cl-cc-binary": "cl-cc-binary", + "cl-cc-bootstrap": "cl-cc-bootstrap", + "cl-cc-codegen-native": "cl-cc-codegen-native", + "cl-cc-cps": "cl-cc-cps", + "cl-cc-expand": "cl-cc-expand", + "cl-cc-mir": "cl-cc-mir", + "cl-cc-optimize": "cl-cc-optimize", + "cl-cc-parse": "cl-cc-parse", + "cl-cc-runtime": "cl-cc-runtime", + "cl-cc-type": "cl-cc-type", + "cl-cc-vm": "cl-cc-vm", + "cl-codec-kit": "cl-codec-kit", + "cl-concurrent-kit": "cl-concurrent-kit", + "cl-date-kit": "cl-date-kit", "cl-host-kit": "cl-host-kit", "cl-json-kit": "cl-json-kit", + "cl-log-kit": "cl-log-kit", "cl-parser-kit": "cl-parser-kit", - "cl-prolog": "cl-prolog", + "cl-process-kit": "cl-process-kit", + "cl-prolog-kit": "cl-prolog-kit", + "cl-regex-kit": "cl-regex-kit", + "cl-tty-kit": "cl-tty-kit", "cl-weave": "cl-weave", "nixpkgs": "nixpkgs", "treefmt-nix": "treefmt-nix" diff --git a/flake.nix b/flake.nix index c48ece8..6aa31b4 100644 --- a/flake.nix +++ b/flake.nix @@ -6,13 +6,24 @@ # release tests pass, so it is less likely to land a broken build. nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; - # cl-cc-php depends on cl-cc-ast/cl-cc-bootstrap/cl-cc-parse/cl-cc-vm, and - # its e2e test suite additionally needs cl-cc-pipeline to compile and run - # PHP source end-to-end. bootstrap/vm/parse are the compiler's - # self-referential core (see cl-cc's docs/repo-split-design.md — they are - # explicitly a non-goal for further splitting), so unlike a dependency-free - # leaf (cl-cc-ast) this system pulls its dependencies out of a checkout of - # the whole monorepo rather than from independently split repos. + # cl-cc-php's e2e test suite needs cl-cc-pipeline to compile and run PHP + # source end-to-end (see run-tests.lisp), which pulls in most of cl-cc's + # compiler pipeline transitively. cl-cc.asd itself says why this can't be + # satisfied by pulling cl-cc alone: "cl-cc-bootstrap, cl-cc-vm, cl-cc-ast, + # cl-cc-type, cl-cc-binary, cl-cc-runtime, cl-cc-mir and cl-cc-target ... + # live in the standalone repositories of the same name under nerima-lisp + # and reach this build as flake.nix inputs" — that obligation falls on + # every consumer that materializes cl-cc's source tree, cl-cc-php + # included. Empirically the transitive closure is wider than those eight: + # cl-cc-parse/optimize/expand/cps and codegen/emit/regalloc (bundled in + # one cl-cc-codegen-native repo) are equally absent from the tree, and + # cl-log-kit alone drags in cl-date-kit, cl-concurrent-kit (which drags in + # cl-boundary-kit) and cl-process-kit (which drags in cl-codec-kit) — 20 + # additional inputs below this one, discovered by loading + # :cl-cc-php/test and following each MISSING-DEPENDENCY error to its + # system, the same discipline *cl-cc-package-subdirs* in run-tests.lisp + # describes for the handful of systems still resolved from the tree + # (compile/pipeline/stdlib). # # Pinned to a commit, not a tag, unlike every other sibling below. cl-cc's # only tag is v0.1.0, which predates the packages/ split this repository @@ -27,11 +38,11 @@ # branch and would break this repository on an unrelated upstream push. # Move to `/vX.Y.Z` once cl-cc's suite is green and it releases. cl-cc = { - url = "github:nerima-lisp/cl-cc/4aca55a2e7e3c92685870a434c2e60827a3d90a1"; + url = "github:nerima-lisp/cl-cc/ce67ffd62647985cf72947b34075d8b20a351d0e"; flake = false; }; - # Test-only: cl-weave is the test framework t/ runs on directly. cl-prolog + # Test-only: cl-weave is the test framework t/ runs on directly. cl-prolog-kit # and cl-parser-kit are, in turn, cl-cc-optimize's own dependencies (part of # the transitive closure cl-cc-pipeline pulls in for the e2e suites) — # pulled the same way cl-cc's own flake pulls them, as plain source trees @@ -45,8 +56,8 @@ url = "github:nerima-lisp/cl-weave/v1.1.4"; flake = false; }; - cl-prolog = { - url = "github:nerima-lisp/cl-prolog/v1.3.0"; + cl-prolog-kit = { + url = "github:nerima-lisp/cl-prolog-kit/v1.5.0"; flake = false; }; cl-parser-kit = { @@ -71,8 +82,123 @@ # like every sibling above, rather than consumed as a flake package the way # cl-nix-forge-based repos in the org do it — this flake has no # `lispDependencies`; run-tests.lisp resolves dependencies itself. + # v0.3.1, not the previously-pinned v0.2.5: cl-log-kit below (transitively + # required through cl-cc-binary/cl-cc-runtime/cl-cc-codegen-native) + # carries a `(:version "cl-host-kit" "0.3.1")` floor in its own + # :depends-on, and ASDF signals a version-mismatch error rather than + # silently loading the older tree if this pin stays below that floor. cl-host-kit = { - url = "github:nerima-lisp/cl-host-kit/v0.2.5"; + url = "github:nerima-lisp/cl-host-kit/v0.3.1"; + flake = false; + }; + + # The 20 standalone systems cl-cc.asd requires but the pinned cl-cc + # checkout above no longer provides, plus what they in turn require that + # cl-cc-php didn't already pull for its own sake (cl-log-kit and its own + # transitive closure). Every one of these is `flake = false`: a plain + # source tree added to run-tests.lisp's ASDF source-registry, exactly + # like cl-json-kit/cl-host-kit above — none of them is consumed as a Nix + # package. Pinned to each repo's latest release tag where one exists, + # since a bare `github:nerima-lisp/` follows the default branch and + # would break this repo's CI on an unrelated upstream push. + cl-cc-ast = { + url = "github:nerima-lisp/cl-cc-ast/v0.2.0"; + flake = false; + }; + cl-cc-bootstrap = { + url = "github:nerima-lisp/cl-cc-bootstrap/88d61be01658bc247ae2889cb08f1e7c6c2c9b33"; + flake = false; + }; + cl-cc-parse = { + url = "github:nerima-lisp/cl-cc-parse/v0.1.0"; + flake = false; + }; + cl-cc-vm = { + url = "github:nerima-lisp/cl-cc-vm/v0.1.0"; + flake = false; + }; + cl-cc-type = { + url = "github:nerima-lisp/cl-cc-type/v0.2.0"; + flake = false; + }; + cl-cc-binary = { + url = "github:nerima-lisp/cl-cc-binary/v0.2.0"; + flake = false; + }; + cl-cc-runtime = { + url = "github:nerima-lisp/cl-cc-runtime/v0.1.0"; + flake = false; + }; + # No release tag exists yet, so this is pinned to a raw revision — same + # reasoning as the cl-cc pin above. This repo also defines cl-cc-target + # as a second system alongside cl-cc-mir in the same tree (see its own + # cl-cc-target.asd), so one input covers both names. + cl-cc-mir = { + url = "github:nerima-lisp/cl-cc-mir/663c4c01c800ca7e64d444c53204645173e84854"; + flake = false; + }; + # Bundles cl-cc-codegen, cl-cc-emit and cl-cc-regalloc as three separate + # .asd files nested under codegen/, emit/ and regalloc/ (see its own + # cl-cc-codegen-native.asd header) — one input covers all three names. + cl-cc-codegen-native = { + url = "github:nerima-lisp/cl-cc-codegen-native/v0.2.0"; + flake = false; + }; + cl-cc-expand = { + url = "github:nerima-lisp/cl-cc-expand/v0.1.0"; + flake = false; + }; + cl-cc-cps = { + url = "github:nerima-lisp/cl-cc-cps/v0.1.0"; + flake = false; + }; + # No release tag carries the cl-prolog -> cl-prolog-kit rename yet + # (v0.5.1 still says `:depends-on (... :cl-prolog ...)`), so this is + # pinned to the raw revision on main that does. Re-check before ever + # moving this to a tag. + cl-cc-optimize = { + url = "github:nerima-lisp/cl-cc-optimize/51c0db63ff125413568ec08c79e33dcf34f00fbf"; + flake = false; + }; + # Needed by cl-cc-binary, cl-cc-runtime and cl-cc-codegen-native's + # cl-cc-codegen system. + cl-log-kit = { + url = "github:nerima-lisp/cl-log-kit/v2.2.0"; + flake = false; + }; + # cl-log-kit's own dependency. + cl-date-kit = { + url = "github:nerima-lisp/cl-date-kit/v1.0.0"; + flake = false; + }; + # cl-log-kit's own dependency; itself needs cl-boundary-kit below. + cl-concurrent-kit = { + url = "github:nerima-lisp/cl-concurrent-kit/v0.6.1"; + flake = false; + }; + cl-boundary-kit = { + url = "github:nerima-lisp/cl-boundary-kit/v2.3.0"; + flake = false; + }; + # cl-process-kit's own dependency. + cl-codec-kit = { + url = "github:nerima-lisp/cl-codec-kit/v0.5.0"; + flake = false; + }; + # Needed by cl-cc-binary, cl-cc-runtime and cl-cc-codegen-native's + # cl-cc-codegen system. + cl-process-kit = { + url = "github:nerima-lisp/cl-process-kit/v3.2.0"; + flake = false; + }; + # Needed by cl-cc-vm. + cl-regex-kit = { + url = "github:nerima-lisp/cl-regex-kit/v2.0.0"; + flake = false; + }; + # Needed by cl-cc-vm. + cl-tty-kit = { + url = "github:nerima-lisp/cl-tty-kit/v1.6.1"; flake = false; }; @@ -93,10 +219,30 @@ nixpkgs, cl-cc, cl-weave, - cl-prolog, + cl-prolog-kit, cl-parser-kit, cl-json-kit, cl-host-kit, + cl-cc-ast, + cl-cc-bootstrap, + cl-cc-parse, + cl-cc-vm, + cl-cc-type, + cl-cc-binary, + cl-cc-runtime, + cl-cc-mir, + cl-cc-codegen-native, + cl-cc-expand, + cl-cc-cps, + cl-cc-optimize, + cl-log-kit, + cl-date-kit, + cl-concurrent-kit, + cl-boundary-kit, + cl-codec-kit, + cl-process-kit, + cl-regex-kit, + cl-tty-kit, treefmt-nix, }: let @@ -134,10 +280,30 @@ testEnv = { CL_CC_PHP_CL_CC_ROOT = "${cl-cc}"; CL_CC_PHP_CL_WEAVE_ROOT = "${cl-weave}"; - CL_CC_PHP_CL_PROLOG_ROOT = "${cl-prolog}"; + CL_CC_PHP_CL_PROLOG_KIT_ROOT = "${cl-prolog-kit}"; CL_CC_PHP_CL_PARSER_KIT_ROOT = "${cl-parser-kit}"; CL_CC_PHP_CL_JSON_KIT_ROOT = "${cl-json-kit}"; CL_CC_PHP_CL_HOST_KIT_ROOT = "${cl-host-kit}"; + CL_CC_PHP_CL_CC_AST_ROOT = "${cl-cc-ast}"; + CL_CC_PHP_CL_CC_BOOTSTRAP_ROOT = "${cl-cc-bootstrap}"; + CL_CC_PHP_CL_CC_PARSE_ROOT = "${cl-cc-parse}"; + CL_CC_PHP_CL_CC_VM_ROOT = "${cl-cc-vm}"; + CL_CC_PHP_CL_CC_TYPE_ROOT = "${cl-cc-type}"; + CL_CC_PHP_CL_CC_BINARY_ROOT = "${cl-cc-binary}"; + CL_CC_PHP_CL_CC_RUNTIME_ROOT = "${cl-cc-runtime}"; + CL_CC_PHP_CL_CC_MIR_ROOT = "${cl-cc-mir}"; + CL_CC_PHP_CL_CC_CODEGEN_NATIVE_ROOT = "${cl-cc-codegen-native}"; + CL_CC_PHP_CL_CC_EXPAND_ROOT = "${cl-cc-expand}"; + CL_CC_PHP_CL_CC_CPS_ROOT = "${cl-cc-cps}"; + CL_CC_PHP_CL_CC_OPTIMIZE_ROOT = "${cl-cc-optimize}"; + CL_CC_PHP_CL_LOG_KIT_ROOT = "${cl-log-kit}"; + CL_CC_PHP_CL_DATE_KIT_ROOT = "${cl-date-kit}"; + CL_CC_PHP_CL_CONCURRENT_KIT_ROOT = "${cl-concurrent-kit}"; + CL_CC_PHP_CL_BOUNDARY_KIT_ROOT = "${cl-boundary-kit}"; + CL_CC_PHP_CL_CODEC_KIT_ROOT = "${cl-codec-kit}"; + CL_CC_PHP_CL_PROCESS_KIT_ROOT = "${cl-process-kit}"; + CL_CC_PHP_CL_REGEX_KIT_ROOT = "${cl-regex-kit}"; + CL_CC_PHP_CL_TTY_KIT_ROOT = "${cl-tty-kit}"; }; # treefmt drives `nix fmt` and the `checks..formatting` gate. @@ -320,10 +486,30 @@ text = '' export CL_CC_PHP_CL_CC_ROOT="${cl-cc}" export CL_CC_PHP_CL_WEAVE_ROOT="${cl-weave}" - export CL_CC_PHP_CL_PROLOG_ROOT="${cl-prolog}" + export CL_CC_PHP_CL_PROLOG_KIT_ROOT="${cl-prolog-kit}" export CL_CC_PHP_CL_PARSER_KIT_ROOT="${cl-parser-kit}" export CL_CC_PHP_CL_JSON_KIT_ROOT="${cl-json-kit}" export CL_CC_PHP_CL_HOST_KIT_ROOT="${cl-host-kit}" + export CL_CC_PHP_CL_CC_AST_ROOT="${cl-cc-ast}" + export CL_CC_PHP_CL_CC_BOOTSTRAP_ROOT="${cl-cc-bootstrap}" + export CL_CC_PHP_CL_CC_PARSE_ROOT="${cl-cc-parse}" + export CL_CC_PHP_CL_CC_VM_ROOT="${cl-cc-vm}" + export CL_CC_PHP_CL_CC_TYPE_ROOT="${cl-cc-type}" + export CL_CC_PHP_CL_CC_BINARY_ROOT="${cl-cc-binary}" + export CL_CC_PHP_CL_CC_RUNTIME_ROOT="${cl-cc-runtime}" + export CL_CC_PHP_CL_CC_MIR_ROOT="${cl-cc-mir}" + export CL_CC_PHP_CL_CC_CODEGEN_NATIVE_ROOT="${cl-cc-codegen-native}" + export CL_CC_PHP_CL_CC_EXPAND_ROOT="${cl-cc-expand}" + export CL_CC_PHP_CL_CC_CPS_ROOT="${cl-cc-cps}" + export CL_CC_PHP_CL_CC_OPTIMIZE_ROOT="${cl-cc-optimize}" + export CL_CC_PHP_CL_LOG_KIT_ROOT="${cl-log-kit}" + export CL_CC_PHP_CL_DATE_KIT_ROOT="${cl-date-kit}" + export CL_CC_PHP_CL_CONCURRENT_KIT_ROOT="${cl-concurrent-kit}" + export CL_CC_PHP_CL_BOUNDARY_KIT_ROOT="${cl-boundary-kit}" + export CL_CC_PHP_CL_CODEC_KIT_ROOT="${cl-codec-kit}" + export CL_CC_PHP_CL_PROCESS_KIT_ROOT="${cl-process-kit}" + export CL_CC_PHP_CL_REGEX_KIT_ROOT="${cl-regex-kit}" + export CL_CC_PHP_CL_TTY_KIT_ROOT="${cl-tty-kit}" # Same reason as checks.default: the suite writes .cache/ relative # to the working directory, so it needs a writable tree rather # than the read-only store path. diff --git a/run-tests.lisp b/run-tests.lisp index 5720a04..b789280 100644 --- a/run-tests.lisp +++ b/run-tests.lisp @@ -39,8 +39,8 @@ arrives through its env var and this branch is not taken." (defvar *cl-weave-root* (%env-or "CL_CC_PHP_CL_WEAVE_ROOT" "../cl-weave")) -(defvar *cl-prolog-root* - (%env-or "CL_CC_PHP_CL_PROLOG_ROOT" "../cl-prolog")) +(defvar *cl-prolog-kit-root* + (%env-or "CL_CC_PHP_CL_PROLOG_KIT_ROOT" "../cl-prolog-kit")) (defvar *cl-parser-kit-root* (%env-or "CL_CC_PHP_CL_PARSER_KIT_ROOT" "../cl-parser-kit")) @@ -51,16 +51,64 @@ arrives through its env var and this branch is not taken." (defvar *cl-host-kit-root* (%env-or "CL_CC_PHP_CL_HOST_KIT_ROOT" "../cl-host-kit")) +;; cl-cc.asd itself says why these can't come from the cl-cc checkout above: +;; "cl-cc-bootstrap, cl-cc-vm, cl-cc-ast, cl-cc-type, cl-cc-binary, +;; cl-cc-runtime, cl-cc-mir and cl-cc-target ... live in the standalone +;; repositories of the same name under nerima-lisp and reach this build as +;; flake.nix inputs" -- that obligation falls on cl-cc-php too. Empirically +;; (loading :cl-cc-php/test and following each MISSING-DEPENDENCY error to +;; its system) the closure is wider than those eight: cl-cc-parse/optimize/ +;; expand/cps, cl-cc-codegen-native (which bundles cl-cc-codegen/emit/ +;; regalloc), and cl-log-kit's own dependency chain (cl-date-kit, +;; cl-concurrent-kit -> cl-boundary-kit, cl-process-kit -> cl-codec-kit) are +;; equally absent from the tree. +(defvar *cl-cc-ast-root* (%env-or "CL_CC_PHP_CL_CC_AST_ROOT" "../cl-cc-ast")) +(defvar *cl-cc-bootstrap-root* + (%env-or "CL_CC_PHP_CL_CC_BOOTSTRAP_ROOT" "../cl-cc-bootstrap")) +(defvar *cl-cc-parse-root* + (%env-or "CL_CC_PHP_CL_CC_PARSE_ROOT" "../cl-cc-parse")) +(defvar *cl-cc-vm-root* (%env-or "CL_CC_PHP_CL_CC_VM_ROOT" "../cl-cc-vm")) +(defvar *cl-cc-type-root* + (%env-or "CL_CC_PHP_CL_CC_TYPE_ROOT" "../cl-cc-type")) +(defvar *cl-cc-binary-root* + (%env-or "CL_CC_PHP_CL_CC_BINARY_ROOT" "../cl-cc-binary")) +(defvar *cl-cc-runtime-root* + (%env-or "CL_CC_PHP_CL_CC_RUNTIME_ROOT" "../cl-cc-runtime")) +;; Also provides cl-cc-target (see its own cl-cc-target.asd, nested in this +;; same tree). +(defvar *cl-cc-mir-root* (%env-or "CL_CC_PHP_CL_CC_MIR_ROOT" "../cl-cc-mir")) +;; Also provides cl-cc-codegen, cl-cc-emit and cl-cc-regalloc, each a +;; separate .asd nested under codegen/, emit/ and regalloc/. +(defvar *cl-cc-codegen-native-root* + (%env-or "CL_CC_PHP_CL_CC_CODEGEN_NATIVE_ROOT" "../cl-cc-codegen-native")) +(defvar *cl-cc-expand-root* + (%env-or "CL_CC_PHP_CL_CC_EXPAND_ROOT" "../cl-cc-expand")) +(defvar *cl-cc-cps-root* (%env-or "CL_CC_PHP_CL_CC_CPS_ROOT" "../cl-cc-cps")) +(defvar *cl-cc-optimize-root* + (%env-or "CL_CC_PHP_CL_CC_OPTIMIZE_ROOT" "../cl-cc-optimize")) +(defvar *cl-log-kit-root* + (%env-or "CL_CC_PHP_CL_LOG_KIT_ROOT" "../cl-log-kit")) +(defvar *cl-date-kit-root* + (%env-or "CL_CC_PHP_CL_DATE_KIT_ROOT" "../cl-date-kit")) +(defvar *cl-concurrent-kit-root* + (%env-or "CL_CC_PHP_CL_CONCURRENT_KIT_ROOT" "../cl-concurrent-kit")) +(defvar *cl-boundary-kit-root* + (%env-or "CL_CC_PHP_CL_BOUNDARY_KIT_ROOT" "../cl-boundary-kit")) +(defvar *cl-codec-kit-root* + (%env-or "CL_CC_PHP_CL_CODEC_KIT_ROOT" "../cl-codec-kit")) +(defvar *cl-process-kit-root* + (%env-or "CL_CC_PHP_CL_PROCESS_KIT_ROOT" "../cl-process-kit")) +(defvar *cl-regex-kit-root* + (%env-or "CL_CC_PHP_CL_REGEX_KIT_ROOT" "../cl-regex-kit")) +(defvar *cl-tty-kit-root* + (%env-or "CL_CC_PHP_CL_TTY_KIT_ROOT" "../cl-tty-kit")) + (defparameter *cl-cc-package-subdirs* - ;; Every packages// under the cl-cc checkout that :cl-cc-php/test - ;; needs, transitively, to load: cl-cc-php's own four dependencies - ;; (bootstrap ast parse vm) plus everything cl-cc-pipeline pulls in to - ;; compile-and-run PHP source end-to-end for the e2e suites. Determined - ;; empirically by loading :cl-cc-php/test and following each - ;; MISSING-DEPENDENCY error to its system. - '("bootstrap" "ast" "parse" "vm" "runtime" "type" "mir" "optimize" "emit" - "expand" "compile" "cps" "codegen" "target" "regalloc" "bytecode" "ir" - "binary" "stdlib" "javascript" "pipeline")) + ;; What's left under packages// in the cl-cc checkout once the 20 + ;; standalone systems above are accounted for: cl-cc-compile (itself + ;; :depends-on cl-cc-target/regalloc directly), cl-cc-pipeline (the e2e + ;; entry point cl-cc-php/test depends on), and cl-cc-stdlib. + '("compile" "pipeline" "stdlib")) (defun %tree (pathname) (list :tree (uiop:ensure-directory-pathname pathname))) @@ -69,10 +117,30 @@ arrives through its env var and this branch is not taken." (list* :source-registry (%tree (uiop:ensure-directory-pathname *cl-weave-root*)) - (%tree (uiop:ensure-directory-pathname *cl-prolog-root*)) + (%tree (uiop:ensure-directory-pathname *cl-prolog-kit-root*)) (%tree (uiop:ensure-directory-pathname *cl-parser-kit-root*)) (%tree (uiop:ensure-directory-pathname *cl-json-kit-root*)) (%tree (uiop:ensure-directory-pathname *cl-host-kit-root*)) + (%tree (uiop:ensure-directory-pathname *cl-cc-ast-root*)) + (%tree (uiop:ensure-directory-pathname *cl-cc-bootstrap-root*)) + (%tree (uiop:ensure-directory-pathname *cl-cc-parse-root*)) + (%tree (uiop:ensure-directory-pathname *cl-cc-vm-root*)) + (%tree (uiop:ensure-directory-pathname *cl-cc-type-root*)) + (%tree (uiop:ensure-directory-pathname *cl-cc-binary-root*)) + (%tree (uiop:ensure-directory-pathname *cl-cc-runtime-root*)) + (%tree (uiop:ensure-directory-pathname *cl-cc-mir-root*)) + (%tree (uiop:ensure-directory-pathname *cl-cc-codegen-native-root*)) + (%tree (uiop:ensure-directory-pathname *cl-cc-expand-root*)) + (%tree (uiop:ensure-directory-pathname *cl-cc-cps-root*)) + (%tree (uiop:ensure-directory-pathname *cl-cc-optimize-root*)) + (%tree (uiop:ensure-directory-pathname *cl-log-kit-root*)) + (%tree (uiop:ensure-directory-pathname *cl-date-kit-root*)) + (%tree (uiop:ensure-directory-pathname *cl-concurrent-kit-root*)) + (%tree (uiop:ensure-directory-pathname *cl-boundary-kit-root*)) + (%tree (uiop:ensure-directory-pathname *cl-codec-kit-root*)) + (%tree (uiop:ensure-directory-pathname *cl-process-kit-root*)) + (%tree (uiop:ensure-directory-pathname *cl-regex-kit-root*)) + (%tree (uiop:ensure-directory-pathname *cl-tty-kit-root*)) (%tree (uiop:getcwd)) (append (mapcar (lambda (subdir)