ww build: honor output directories
This commit is contained in:
@@ -234,6 +234,28 @@ package with no selected test source validates production
|
||||
but publishes nothing and does not create an otherwise unneeded output
|
||||
directory. Successful `-c` output is silent apart from no-test reporting.
|
||||
|
||||
The package suite also pins the adjacent `ww build` output-directory branch.
|
||||
After normal loading, an existing directory (including a symlink to one) or an
|
||||
explicit spelling ending in `/` receives each command under its requested
|
||||
import-leaf name (or local directory-leaf fallback) even for exactly one
|
||||
selected root; a raw `.ww` command uses its source basename. A missing
|
||||
trailing-slash hierarchy is created from `0777`, filtered by umask, by the
|
||||
request transaction. A directory or raw no-main-only selection and an import
|
||||
failure run no tools and do not create output. Independently selected non-main
|
||||
siblings in a mixed request load but have no action; command dependencies still
|
||||
build. Package/import rejection precedes no-main, derived destination length,
|
||||
duplicate command basename, and implicit default-directory preflight. If the
|
||||
synthesized default command basename already exists as a directory,
|
||||
load/graph validation precedes a zero-tool rejection and preserves that
|
||||
directory; a non-main package has no corresponding default output.
|
||||
Persistent work reuse, invalidation, failures, interruption, and
|
||||
concurrent drivers retain the same action and rollback rules; output form does
|
||||
not enter package/import/action identity. This build branch starts no runtime
|
||||
process, while direct execution of its published binary remains an artifact
|
||||
check rather than part of `ww build`. Assembly-only `-S` still selects command
|
||||
actions and rejects a no-command directory request, but it performs no
|
||||
install-only destination validation or output-directory creation.
|
||||
|
||||
The retained executable is byte-identical to the temporary runnable and has
|
||||
executable mode `0777` filtered by the caller's umask, but it is never the path
|
||||
executed by the coordinator. Publication participates in the driver's one
|
||||
@@ -312,6 +334,24 @@ precede those coordinator-owned source-validation parses.
|
||||
Separate compilation is the only driver build path; no compatibility mode
|
||||
switch remains.
|
||||
|
||||
`test/package/package_test.ww` owns the focused dual-stage
|
||||
`single_root_build_output_directory` observer. It covers existing and missing
|
||||
directory spellings; trailing and non-trailing forms; literal, logical,
|
||||
default-dot, symlink, raw-file, and implicit-default routes; build/test
|
||||
adjacency; mixed and repeated roots; command-only publication, no-main and
|
||||
implicit-collision rejection, non-main default behavior; import
|
||||
diagnostic precedence over no-main, derived-path, duplicate-destination, and
|
||||
recursive implicit-collision checks; `-S -w` command selection with long,
|
||||
duplicate, implicit, and missing-directory publication preflight omitted;
|
||||
cold, warm, and invalidated persistence;
|
||||
compiler, assembler, and linker action traces; compiler/linker failure and
|
||||
linker signal; prior-state and directory-creation rollback; concurrent
|
||||
isolation; executable modes and runtime exit values; `.new`/transaction
|
||||
cleanup; and Cstage/WWstage diagnostic, binary, assembly, and persistent
|
||||
semantic-artifact byte parity. General output permissions, occupied stages,
|
||||
multi-product transactions, null discard, and test runtime timeout remain with
|
||||
their existing observers.
|
||||
|
||||
`test/package/package_test.ww` also owns the dual-stage
|
||||
`declared_name_identity_and_file_import_scope` and
|
||||
`explicit_import_alias_binding_modes` observers. They generate temporary
|
||||
|
||||
Reference in New Issue
Block a user