Browse Source

build outputs: bootsupport punk::platform-0.1.0.tm + templates-0.2.0.tm modpod sync

make.tcl bootsupport pulled the newly-included punk::platform; the templates
modpod refresh used the established virgin-tclsh direct copy (cd6aec8f
precedent) because the in-process punkcheck copy fails while the running
interp holds the target modpod mounted ("invalid argument") - snapshot now
byte-identical to the built modules/punk/mix/templates-0.2.0.tm (carries the
G-121-era layout make.tcl payload).

Claude-Session: https://claude.ai/code/session_01Jz7wkUsknJzyuJ3tgMaL2t
Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
master
Julian Noble 5 days ago
parent
commit
5c34951441
  1. BIN
      src/bootsupport/modules/punk/mix/templates-0.2.0.tm
  2. 237
      src/bootsupport/modules/punk/platform-0.1.0.tm

BIN
src/bootsupport/modules/punk/mix/templates-0.2.0.tm

Binary file not shown.

237
src/bootsupport/modules/punk/platform-0.1.0.tm

@ -0,0 +1,237 @@
# -*- tcl -*-
# Maintenance Instruction: leave the 999999.xxx.x as is and use 'pmix make' or src/make.tcl to update from <pkg>-buildversion.txt
#
# Please consider using a BSD or MIT style license for greatest compatibility with the Tcl ecosystem.
# Code using preferred Tcl licenses can be eligible for inclusion in Tcllib, Tklib and the punk package repository.
# ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++
# (C) 2026
#
# @@ Meta Begin
# Application punk::platform 0.1.0
# Meta platform tcl
# Meta license BSD
# @@ Meta End
# ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++
## Requirements
package require platform ;#Tcl's own platform package (vendored 1.0.19 in kits; 1.1.x in tcl9 core) - the RAW identifier underneath this module's normalization
# ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++
namespace eval punk::platform {
#punk::platform - the CANONICAL punkshell platform naming layer (2026-07-22
#platform-folder synchronization; groundwork for the G-105 cross-target arc).
#
#punkshell artifact trees are organized by PLATFORM-DIR names of the form
#<os>-<cpu> (e.g win32-x86_64), used by: the punkbin artifact repo's top-level
#folders, bin/runtime/<platform>/ (the runtime store punk-runtime manages),
#lib_tclX/<platform> + vendorlib_tclX/<platform> auto_path dirs (wired by the
#boot machinery), and the G-103 runtime artifact metadata 'target' field.
#
#Tcl's platform package remains the raw identifier (platform::generic /
#platform::identify) but its outputs vary by version and pass some machine
#names through unmapped - the differences this module's normalize absorbs:
# - cpu 'amd64' (BSD machine names) -> x86_64
# - cpu 'aarch64' (linux arm64) -> arm64
# - os 'macos' (platform 1.1.x on osVersion>19; older versions and the
# boot's snipped copy say 'macosx') -> macosx
# - macosx cpu 'arm' -> arm64 (platform::generic's 'arm*' glob collapses
# the darwin 'arm64' machine name to 'arm'; Apple silicon is 64-bit only,
# so the arm token on macosx always means arm64. Elsewhere 'arm' is a
# genuine 32-bit token and is preserved.)
#The special name 'macosx' (no cpu suffix) is the RUNTIME-tier convention for
#universal (multi-arch) macOS binaries - punkbin and bin/runtime keep one
#universal folder; the per-arch macosx-x86_64/macosx-arm64 names serve the
#lib-tree tier where per-arch payloads are the norm.
#
#The boot machinery (punkboot::lib in src/vfs/_config/punk_main.tcl /
#project_main.tcl and src/make.tcl) cannot 'package require' at its stage and
#carries a snipped platform::generic plus an inline copy of THIS module's
#normalization mapping - if the mapping here changes, those copies must
#change with it (each carries a pointer comment to this module).
namespace eval argdoc {
variable PUNKARGS
}
#canonical platform records. status:
# supported - a punkshell target: artifact trees exist or are planned and
# tooling/build arcs (G-103/G-105) treat it as a real target
# dormant - recognized and folders may exist, but utility is under review
# recognized - a name the naming scheme reserves; no artifacts or tooling yet
#tiers: which artifact-tree tiers use the name -
# runtime = punkbin platform folders + bin/runtime/<platform>/
# lib = lib_tclX/<platform> + vendorlib_tclX/<platform> auto_path dirs
#buildsuite: whether OUR zig buildsuite system (src/buildsuites; G-103 kit
#family, G-105 cross-target) produces runtimes for the platform. A SEPARATE
#AXIS from tiers deliberately: punkbin (or a third-party repo using the same
#structure) can host runtimes built by any mechanism - a platform can be
#runtime-tier hosted while buildsuite=none (we may never build it ourselves).
# supported - a tracked suite produces family artifacts today
# planned - named in an active/proposed goal (e.g G-105 linux-first)
# candidate - plausible zig target, no committed goal
# none - no build intention; hosted/third-party runtimes only
variable platforms {
win32-x86_64 {status supported tiers {runtime lib} buildsuite supported notes "primary development platform (suite_tcl90)"}
win32-ix86 {status supported tiers {runtime lib} buildsuite candidate notes "32-bit x86; hosting for available third-party runtimes/libs - zig can target it but a buildsuite is undetermined"}
linux-x86_64 {status supported tiers {runtime lib} buildsuite planned notes "G-105 first cross-target, WSL-verified"}
linux-arm64 {status supported tiers {runtime lib} buildsuite candidate notes "aarch64; punkbin's existing arm kit predates the arm64 name and sits in linux-arm"}
linux-arm {status supported tiers {runtime lib} buildsuite candidate notes "32-bit arm"}
macosx {status supported tiers {runtime} buildsuite candidate notes "universal (multi-arch) macOS binaries - runtime tier keeps one folder; zig darwin cross needs SDK work"}
macosx-x86_64 {status supported tiers {lib} buildsuite none notes "would follow a macosx runtime arc"}
macosx-arm64 {status supported tiers {lib} buildsuite none notes "Apple silicon; would follow a macosx runtime arc"}
freebsd-x86_64 {status supported tiers {runtime lib} buildsuite candidate notes ""}
freebsd-arm64 {status supported tiers {runtime lib} buildsuite candidate notes "no artifacts yet"}
msys-x86_64 {status dormant tiers {lib} buildsuite none notes "msys/cygwin-built tclsh runtimes; utility under review"}
openbsd-x86_64 {status recognized tiers {runtime} buildsuite none notes "hosted third-party runtimes possible"}
netbsd-x86_64 {status recognized tiers {runtime} buildsuite none notes "hosted third-party runtimes possible"}
dragonflybsd-x86_64 {status recognized tiers {runtime} buildsuite none notes "hosted third-party runtimes possible"}
}
namespace eval argdoc {
variable PUNKARGS
lappend PUNKARGS [list {
@id -id ::punk::platform::platforms
@cmd -name punk::platform::platforms\
-summary\
"Canonical punkshell platform records."\
-help\
"Return the canonical punkshell platform-name records as a dict
keyed by platform-dir name (e.g win32-x86_64). Each value is a
dict with keys:
status supported|dormant|recognized
tiers which artifact-tree tiers use the name
(runtime = punkbin + bin/runtime folders,
lib = lib_tclX/vendorlib_tclX auto_path dirs)
buildsuite supported|planned|candidate|none - whether the
punkshell zig buildsuite system produces
runtimes for the platform. Deliberately a
separate axis from tiers: punkbin-structured
repos can host runtimes built by any mechanism,
so a platform can be runtime-tier hosted while
buildsuite=none.
notes free-text qualifiers
These names are the contract for punkbin platform folders,
bin/runtime/<platform>/, lib_tclX/vendorlib_tclX platform
dirs and the G-103 runtime-artifact metadata target field.
See also 'help platforms' in the punk shell."
@values -min 0 -max 0
}]
}
proc platforms {} {
variable platforms
return $platforms
}
namespace eval argdoc {
variable PUNKARGS
lappend PUNKARGS [list {
@id -id ::punk::platform::normalize
@cmd -name punk::platform::normalize\
-summary\
"Normalize a platform identifier to the canonical punkshell name."\
-help\
"Normalize a platform::generic-style <os>-<cpu> identifier (or an
already-canonical punkshell name) to the canonical punkshell
platform-dir name:
cpu amd64 -> x86_64, aarch64 -> arm64
os macos -> macosx (Tcl platform 1.1.x renamed modern macOS)
macosx cpu arm -> arm64 (platform::generic's arm* glob folds
the darwin arm64 machine name to arm; Apple silicon is
64-bit only - non-macosx 'arm' stays 32-bit arm)
Unrecognized os/cpu tokens pass through unchanged - normalize
never invents names, it only folds known aliases."
@values -min 1 -max 1
platform -type string -help\
"Platform identifier, e.g the result of platform::generic."
}]
}
proc normalize {platform} {
set parts [split $platform -]
if {[llength $parts] < 2} {
#single-token names (e.g the universal 'macosx') - fold macos only
if {$platform eq "macos"} {
return macosx
}
return $platform
}
#os may itself contain a dash in principle - treat last token as cpu
set cpu [lindex $parts end]
set os [join [lrange $parts 0 end-1] -]
switch -- $os {
macos {set os macosx}
}
switch -- $cpu {
amd64 {set cpu x86_64}
aarch64 {set cpu arm64}
i386 - i486 - i586 - i686 {set cpu ix86}
arm {
if {$os eq "macosx"} {
set cpu arm64
}
}
}
return "${os}-${cpu}"
}
namespace eval argdoc {
variable PUNKARGS
lappend PUNKARGS [list {
@id -id ::punk::platform::local
@cmd -name punk::platform::local\
-summary\
"Canonical punkshell platform name of the running interpreter."\
-help\
"Return the canonical punkshell platform-dir name for the running
interpreter: platform::generic normalized per
punk::platform::normalize.
With -tier runtime, macosx per-arch names collapse to the
universal 'macosx' (the runtime-store convention: punkbin and
bin/runtime keep one universal macOS folder; the same collapse
src/make.tcl applies when locating bin/runtime/<platform>).
-tier lib (the default) returns the per-arch name used by the
lib_tclX/vendorlib_tclX auto_path dirs."
@opts
-tier -type string -default lib -choices {lib runtime} -help\
"Artifact-tree tier the name is for."
@values -min 0 -max 0
}]
}
proc local {args} {
set tier lib
foreach {k v} $args {
switch -- $k {
-tier {
if {$v ni {lib runtime}} {
error "punk::platform::local - invalid -tier '$v' (expected lib|runtime)"
}
set tier $v
}
default {
error "punk::platform::local - unknown option '$k' (known: -tier)"
}
}
}
set p [normalize [::platform::generic]]
if {$tier eq "runtime" && [string match macosx-* $p]} {
return macosx
}
return $p
}
}
namespace eval ::punk::args::register {
#use fully qualified so 8.6 doesn't find existing var in global namespace
lappend ::punk::args::register::NAMESPACES ::punk::platform
}
# ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++
## Ready
package provide punk::platform [namespace eval punk::platform {
variable version
set version 0.1.0
}]
return
Loading…
Cancel
Save