Browse Source

Canonical punkshell platform names: punk::platform module, help topic, tree sync (G-105 groundwork)

Survey outcome (punkbin vs punkshell platform folders): five naming sites
had drifted - punkbin folders, bin/runtime, vendorlib_tclX dirs, the
punkboot platform_generic snips (an old platform::generic copy), and the
Tcl platform package itself whose outputs vary by version (1.1.x renamed
modern macOS to 'macos', aarch64/amd64 pass through unmapped).

Canon: <os>-<cpu> punkshell platform-dir names, cpu normalized
amd64->x86_64 and aarch64->arm64 (arm = 32-bit; on macosx arm folds to
arm64 - Apple silicon is 64-bit only), os macos->macosx. The universal
'macosx' name is the runtime-tier convention (punkbin + bin/runtime keep
one macOS folder, per make.tcl's existing collapse); per-arch
macosx-x86_64/macosx-arm64 serve the lib tier.

- new module punk::platform 0.1.0: platforms (canonical records with
  status supported/dormant/recognized + tiers), normalize, local
  ?-tier lib|runtime? - full PUNKARGS argdocs. Tcl's platform package
  stays the raw identifier underneath.
- punk 0.2.7: 'help platforms' topic (alias 'platform'; all prefixes
  mutually ambiguous so they fall through to command lookup, per the
  env/environment precedent) - canon table with the local interpreter
  marked and raw platform-package identifiers for comparison.
- boot: punkboot platform_punk (inline normalization copy, sync-comment
  contract with the module) in punk_main.tcl/project_main.tcl/make.tcl;
  all platform-dir call sites switched to it. make.tcl exercised live;
  main.tcl copies brace-verified.
- vendorlib_tcl8/9 synchronized to canon: freebsd-amd64 -> freebsd-x86_64
  (READMEs updated), freebsd-arm64/linux-arm64/macosx-arm64 added, tcl8's
  untracked-empty linux-arm now tracked + tcl9 gains linux-arm, stray
  untracked macosx-arm empties removed, msys-x86_64 marked dormant
  pending a utility decision, top-level READMEs state the canon contract.
- punk-runtime bash prongs emit canonical names: aarch64 -> linux-arm64
  (no fetch default until punkbin carries that folder), arch-aware
  freebsd/openbsd/netbsd/dragonflybsd via normalized cpu tokens.
  Rewrapped; roundtrip pin PASS; layout copy + .ps1 twin refreshed.

Flagged for user decisions (recorded in G-105 Notes): punkbin linux-arm
holds an arm64-named kit (recommend linux-arm64 folder at next arm
publish; artifacts immutable), msys-x86_64 disposition, optional
platform-1.1.x re-vendor, src/vfs stays mapvfs-categorized (recommend a
mapvfs platform column when cross-wraps land, not a .vfs tree
restructure). Project 0.18.0.

Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com
master
Julian Noble 3 weeks ago
parent
commit
cae9f36d3e
  1. 4
      CHANGELOG.md
  2. 8
      bin/AGENTS.md
  3. 35
      bin/punk-runtime.cmd
  4. 29
      goals/G-105-buildsuite-cross-target.md
  5. 2
      punkproject.toml
  6. 19
      src/make.tcl
  7. 69
      src/modules/punk-999999.0a1.0.tm
  8. 3
      src/modules/punk-buildversion.txt
  9. 219
      src/modules/punk/platform-999999.0a1.0.tm
  10. 4
      src/modules/punk/platform-buildversion.txt
  11. 35
      src/project_layouts/vendor/punk/project-0.1/bin/punk-runtime.cmd
  12. 35
      src/scriptapps/bin/punk-runtime.bash
  13. 8
      src/vendorlib_tcl8/README.md
  14. 9
      src/vendorlib_tcl8/freebsd-amd64/README.md
  15. 4
      src/vendorlib_tcl8/freebsd-arm64/README.md
  16. 5
      src/vendorlib_tcl8/freebsd-x86_64/README.md
  17. 4
      src/vendorlib_tcl8/linux-arm/README.md
  18. 4
      src/vendorlib_tcl8/linux-arm64/README.md
  19. 4
      src/vendorlib_tcl8/macosx-arm64/README.md
  20. 10
      src/vendorlib_tcl8/msys-x86_64/README.md
  21. 8
      src/vendorlib_tcl9/README.md
  22. 9
      src/vendorlib_tcl9/freebsd-amd64/README.md
  23. 4
      src/vendorlib_tcl9/freebsd-arm64/README.md
  24. 5
      src/vendorlib_tcl9/freebsd-x86_64/README.md
  25. 4
      src/vendorlib_tcl9/linux-arm/README.md
  26. 4
      src/vendorlib_tcl9/linux-arm64/README.md
  27. 4
      src/vendorlib_tcl9/macosx-arm64/README.md
  28. 10
      src/vendorlib_tcl9/msys-x86_64/README.md
  29. 19
      src/vfs/_config/project_main.tcl
  30. 21
      src/vfs/_config/punk_main.tcl

4
CHANGELOG.md

@ -5,6 +5,10 @@ The latest `## [X.Y.Z]` header must match the `version` field in `punkproject.to
Entries are newest-first; one bullet per notable change. See the root `AGENTS.md` Entries are newest-first; one bullet per notable change. See the root `AGENTS.md`
"Project Versioning" section for the bump policy. "Project Versioning" section for the bump policy.
## [0.18.0] - 2026-07-22
- Canonical punkshell platform names (platform-folder synchronization survey; G-105 groundwork). New module `punk::platform` 0.1.0: `platforms` (canonical records with status supported/dormant/recognized and artifact-tree tiers), `normalize` (folds Tcl platform-package version-dependent aliases: amd64->x86_64, aarch64->arm64, macos->macosx, macosx arm->arm64), `local ?-tier lib|runtime?` (runtime tier collapses macOS per-arch to the universal `macosx` runtime-store name). New `help platforms` shell topic (punk 0.2.7) renders the canon with the running interpreter marked and the raw platform-package identifiers for comparison. Boot machinery (punkboot platform_generic snips in punk_main.tcl/project_main.tcl/make.tcl) now normalizes via an inline copy of the same mapping (platform_punk). `src/vendorlib_tcl8`/`_tcl9` platform subfolders synchronized to the canon: freebsd-amd64 renamed freebsd-x86_64, new freebsd-arm64/linux-arm64/macosx-arm64 (+ tracked linux-arm), msys-x86_64 marked dormant pending a utility decision. punk-runtime bash platform prongs emit canonical names (aarch64->linux-arm64 with no fetch default yet, arch-aware freebsd/openbsd/netbsd/dragonflybsd).
## [0.17.9] - 2026-07-22 ## [0.17.9] - 2026-07-22
- `bin/punk-runtime.cmd` (G-103/G-105 groundwork): cross-platform staging surface - `fetch`/`list`/`use` accept `-platform <p>` (punkbin platform-dir names; default = local platform, overridable via `PUNK_RUNTIME_PLATFORM` env) for listing/fetching/selecting runtimes of OTHER platforms (cross-build staging and guest provisioning); foreign fetches require an explicit runtime name; `list` flags runtimes whose metadata `target` disagrees with their folder (`!TARGET-MISMATCH`); `run` stays local-only (rejects `-platform`, ignores the env override). New `help` action (full operator reference: actions, options, env vars, examples) and a proper usage block on no-args invocation. Bash payload's FreeBSD platform dir aligned to punkbin's actual `freebsd-x86_64` (was `freebsd-amd64`). Layout-shipped copy refreshed. - `bin/punk-runtime.cmd` (G-103/G-105 groundwork): cross-platform staging surface - `fetch`/`list`/`use` accept `-platform <p>` (punkbin platform-dir names; default = local platform, overridable via `PUNK_RUNTIME_PLATFORM` env) for listing/fetching/selecting runtimes of OTHER platforms (cross-build staging and guest provisioning); foreign fetches require an explicit runtime name; `list` flags runtimes whose metadata `target` disagrees with their folder (`!TARGET-MISMATCH`); `run` stays local-only (rejects `-platform`, ignores the env override). New `help` action (full operator reference: actions, options, env vars, examples) and a proper usage block on no-args invocation. Bash payload's FreeBSD platform dir aligned to punkbin's actual `freebsd-x86_64` (was `freebsd-amd64`). Layout-shipped copy refreshed.

8
bin/AGENTS.md

@ -113,9 +113,11 @@ whose metadata `target` disagrees with the folder it sits in (`!TARGET-MISMATCH`
`run` is LOCAL ONLY - it rejects a leading `-platform` and ignores the env override `run` is LOCAL ONLY - it rejects a leading `-platform` and ignores the env override
(later `run` args pass through to the runtime untouched). A no-args invocation prints (later `run` args pass through to the runtime untouched). A no-args invocation prints
a short usage block; the `help` action gives the full operator reference (actions, a short usage block; the `help` action gives the full operator reference (actions,
options, env vars incl `PUNKBIN_URL`, examples). The bash payload's FreeBSD platform options, env vars incl `PUNKBIN_URL`, examples). Platform names follow the CANONICAL
dir was aligned to punkbin's actual folder name (`freebsd-x86_64`; previously punkshell platform-dir names defined by the `punk::platform` module and surfaced as
`freebsd-amd64`). `help platforms` in the punk shell (cpu tokens normalized: amd64->x86_64,
aarch64->arm64; the bash payload's local-platform prongs emit canonical names - the
FreeBSD dir was realigned from `freebsd-amd64` to `freebsd-x86_64` accordingly).
### Interactive verification shells ### Interactive verification shells

35
bin/punk-runtime.cmd

@ -1299,41 +1299,54 @@ arch=$(uname -m) #machine/architecture
plat=$(uname -s) #platform/system plat=$(uname -s) #platform/system
#even though most of the platform prongs are very similar, #even though most of the platform prongs are very similar,
#we keep the code separate so it can be tweaked easily for unexpected differences #we keep the code separate so it can be tweaked easily for unexpected differences
#each prong sets local_platform (the punkbin/bin-runtime platform-DIR name) and, #each prong sets local_platform (the CANONICAL punkshell platform-DIR name - see
#where a runtime is published for the platform, rt_default (default runtime name). #punk::platform / 'help platforms': cpu tokens normalized amd64->x86_64,
#aarch64->arm64) and, where a runtime is published for the platform, rt_default
#(default runtime name).
narch="$arch"
case "$narch" in
amd64) narch="x86_64";;
aarch64|arm64) narch="arm64";;
esac
if [[ "$plat" = "Linux"* ]]; then if [[ "$plat" = "Linux"* ]]; then
if [[ "$arch" = "x86_64"* ]]; then if [[ "$arch" = "x86_64"* ]]; then
local_platform="linux-x86_64" local_platform="linux-x86_64"
rt_default="tclkit-902-Linux64-intel-dyn" rt_default="tclkit-902-Linux64-intel-dyn"
runtime_available=1 runtime_available=1
elif [[ "$narch" = "arm64" ]]; then
#canonical arm64 (aarch64). punkbin's existing arm kit predates the
#arm64 name and sits in linux-arm - no fetch default here until a
#linux-arm64 punkbin folder exists; name runtimes explicitly.
local_platform="linux-arm64"
elif [[ "$arch" = "arm"* ]]; then elif [[ "$arch" = "arm"* ]]; then
#32-bit arm
local_platform="linux-arm" local_platform="linux-arm"
rt_default="tclkit-902-Linux64-arm-dyn" rt_default="tclkit-902-Linux64-arm-dyn"
runtime_available=1 runtime_available=1
else else
local_platform="linux-$arch" local_platform="linux-$narch"
fi fi
os="linux" os="linux"
elif [[ "$plat" = "Darwin"* ]]; then elif [[ "$plat" = "Darwin"* ]]; then
os="macosx" os="macosx"
#assumed to be Mach-O 'universal binaries' for both x86-64 and arm? - REVIEW #universal (multi-arch) binaries - the runtime tier keeps ONE macosx folder
#(per-arch macosx-x86_64/macosx-arm64 names serve the lib tree tier)
local_platform="macosx" local_platform="macosx"
rt_default="tclkit-902-Darwin64-dyn" rt_default="tclkit-902-Darwin64-dyn"
runtime_available=1 runtime_available=1
elif [[ "$plat" = "FreeBSD"* ]]; then elif [[ "$plat" = "FreeBSD"* ]]; then
#aligned 2026-07-22 to the punkbin repo's actual folder name (freebsd-x86_64; #canonical names (2026-07-22): freebsd-x86_64 (punkbin's actual folder; this
#this payload previously said freebsd-amd64 - the G-105 platform-dir naming #payload previously said freebsd-amd64) / freebsd-arm64
#alignment item) local_platform="freebsd-$narch"
local_platform="freebsd-x86_64"
os="freebsd" os="freebsd"
elif [[ "$plat" == "DragonFly"* ]]; then elif [[ "$plat" == "DragonFly"* ]]; then
local_platform="dragonflybsd-$arch" local_platform="dragonflybsd-$narch"
os="dragonflybsd" os="dragonflybsd"
elif [[ "$plat" == "NetBSD"* ]]; then elif [[ "$plat" == "NetBSD"* ]]; then
local_platform="netbsd-$arch" local_platform="netbsd-$narch"
os="netbsd" os="netbsd"
elif [[ "$plat" == "OpenBSD"* ]]; then elif [[ "$plat" == "OpenBSD"* ]]; then
local_platform="openbsd-amd64" local_platform="openbsd-$narch"
os="openbsd" os="openbsd"
elif [[ "$plat" == "MINGW32"* ]]; then elif [[ "$plat" == "MINGW32"* ]]; then
#REVIEW #REVIEW

29
goals/G-105-buildsuite-cross-target.md

@ -73,3 +73,32 @@ dimension), G-102 (achieved 2026-07-21 - driver shape settled; target becomes a
Still open for this goal's alignment item: the zig-triple <-> platform-dir Still open for this goal's alignment item: the zig-triple <-> platform-dir
mapping itself, openbsd-amd64 (payload) vs the x86_64 convention, and a mapping itself, openbsd-amd64 (payload) vs the x86_64 convention, and a
windows-arm default for the ps1 payload once punkbin carries such a folder. windows-arm default for the ps1 payload once punkbin carries such a folder.
- 2026-07-22 CANONICAL PLATFORM NAMES SETTLED (user-directed survey of punkbin vs
punkshell platform folders; resolves this goal's "platform-dir naming alignment"
item on the punkshell side - the zig-triple <-> platform-dir mapping remains this
goal's build-time work). Canon = punk::platform module (src/modules/punk/
platform-999999.0a1.0.tm; 'help platforms' topic): <os>-<cpu> punkshell
platform-dir names with cpu normalized amd64->x86_64, aarch64->arm64 (arm =
32-bit; on macosx arm folds to arm64), os macos->macosx; special universal
'macosx' for the runtime tier (punkbin + bin/runtime keep ONE macOS folder -
make.tcl convention blessed), per-arch macosx-x86_64/macosx-arm64 for lib trees.
Supported: win32-x86_64, linux-x86_64, linux-arm64, linux-arm, macosx,
macosx-x86_64, macosx-arm64, freebsd-x86_64, freebsd-arm64. Dormant:
msys-x86_64 (utility under user review). Recognized (no artifacts):
openbsd/netbsd/dragonflybsd-x86_64. Tcl's platform package stays the RAW
identifier (version-varying outputs: 1.1.x renamed macos, aarch64 passthrough);
punk::platform::normalize is the folding layer; the punkboot platform_generic
snips (punk_main/project_main/make.tcl) gained an inline platform_punk
normalization (kept in sync by comment contract). vendorlib_tcl8/9 platform
subfolders synchronized to canon (freebsd-amd64 -> freebsd-x86_64 rename;
freebsd-arm64/linux-arm64/macosx-arm64 added; stray untracked macosx-arm
empties removed). punk-runtime prongs emit canon (linux-arm64 has NO fetch
default until punkbin carries that folder). FLAGGED for user decisions:
(a) punkbin linux-arm holds tclkit-902-Linux64-arm-dyn which by its name is an
arm64 build - recommend a linux-arm64 punkbin folder at next arm publish
(artifacts immutable, no moves); (b) msys-x86_64 disposition; (c) vendored
platform-1.0.19 vs core 1.1.x re-vendor (normalization makes punkshell robust
either way - upgrade optional); (d) src/vfs stays UNcategorized by platform
(mapvfs mappings + purpose-names carry the platform axis) - acceptable now;
recommend revisiting when G-105 cross-wraps land (a mapvfs platform column per
make.tcl's existing x-platform TODO beats restructuring the .vfs tree).

2
punkproject.toml

@ -1,4 +1,4 @@
[project] [project]
name = "punkshell" name = "punkshell"
version = "0.17.9" version = "0.18.0"
license = "BSD-2-Clause" license = "BSD-2-Clause"

19
src/make.tcl

@ -278,6 +278,23 @@ namespace eval ::punkboot::lib {
return "${plat}-${cpu}" return "${plat}-${cpu}"
} }
proc platform_punk {} {
#canonical punkshell platform-dir name: platform_generic normalized.
#INLINE COPY of punk::platform::normalize (src/modules/punk/platform-*.tm;
#'help platforms' documents the canon) - the boot stage cannot package
#require, so keep this mapping in sync with that module:
#amd64->x86_64, aarch64->arm64, macos->macosx, macosx arm->arm64.
set parts [split [platform_generic] -]
set cpu [lindex $parts end]
set os [join [lrange $parts 0 end-1] -]
if {$os eq "macos"} {set os macosx}
switch -- $cpu {
amd64 {set cpu x86_64}
aarch64 {set cpu arm64}
arm {if {$os eq "macosx"} {set cpu arm64}}
}
return "${os}-${cpu}"
}
} }
@ -370,7 +387,7 @@ set startdir [pwd]
# ------------------------------------------------------------------------------------- # -------------------------------------------------------------------------------------
set bootsupport_module_paths [list] set bootsupport_module_paths [list]
set bootsupport_library_paths [list] set bootsupport_library_paths [list]
set this_platform_generic [punkboot::lib::platform_generic] set this_platform_generic [punkboot::lib::platform_punk] ;#normalized punkshell platform-dir name (punk::platform canon)
#we always create these lists in order of desired precedence. #we always create these lists in order of desired precedence.
# - this is the same order when adding to auto_path - but will need to be reversed when using tcl:tm::add # - this is the same order when adding to auto_path - but will need to be reversed when using tcl:tm::add
if {[file exists [file join $::punkboot::scriptfolder bootsupport]]} { if {[file exists [file join $::punkboot::scriptfolder bootsupport]]} {

69
src/modules/punk-999999.0a1.0.tm

@ -8983,10 +8983,71 @@ namespace eval punk {
return $chunks return $chunks
} }
register topics {help} "List help topics" punk::args::define {
register tcl {} "Tcl version warnings" @id -id ::punk::helptopic::platforms
register env {environment} "punkshell environment vars" @cmd -name "help platforms"\
register console {term terminal} "Some console behaviour tests and warnings" -summary\
"Canonical punkshell platform names."\
-help\
"Show the canonical punkshell platform-dir names
(punk::platform::platforms) with status and the artifact-tree
tiers each name serves, marking the running interpreter's own
platform. These names organize the punkbin artifact repo's
platform folders, bin/runtime/<platform>/ (punk-runtime
fetch/list/use -platform), the lib_tclX / vendorlib_tclX
auto_path dirs wired by the boot, and the runtime-artifact
metadata target field. The raw Tcl platform-package identifiers
are shown for comparison (punk::platform::normalize folds their
version-dependent aliases - amd64/aarch64/macos - into the
canonical names)."
@values -min 0 -max 0
}
proc platforms {context args} {
if {[catch {package require punk::platform} errM]} {
return [list [list stderr "help platforms: punk::platform package not available ($errM)\n"]]
}
set frametype [dict get $context frametype]
set chunks [list]
set local_lib [punk::platform::local -tier lib]
set local_runtime [punk::platform::local -tier runtime]
set title "[a+ brightgreen] Canonical punkshell platform names: "
set t [textblock::class::table new -show_seps 0]
$t configure -frametype $frametype
$t add_column -headers [list "Platform"]
$t add_column -headers [list "Status"]
$t add_column -headers [list "Tiers"]
$t add_column -headers [list "Notes"]
dict for {p pinfo} [punk::platform::platforms] {
set pshown $p
if {$p eq $local_lib || $p eq $local_runtime} {
set pshown "* $p"
}
$t add_row [list $pshown [dict get $pinfo status] [join [dict get $pinfo tiers] ,] [dict get $pinfo notes]]
}
foreach c {0 1 2} {
$t configure_column $c -minwidth [expr {[$t column_datawidth $c] + 2}]
}
$t configure -title $title
set text [$t print]
$t destroy
lappend chunks [list stdout $text]
set detail "* = this interpreter. local: lib-tier $local_lib"
if {$local_runtime ne $local_lib} {
append detail " runtime-tier $local_runtime"
}
append detail "\ntiers: runtime = punkbin + bin/runtime folders; lib = lib_tclX/vendorlib_tclX auto_path dirs"
catch {
append detail "\nraw Tcl platform package ([package present platform]): generic [platform::generic] identify [platform::identify]"
}
lappend chunks [list stdout $detail\n]
return $chunks
}
register topics {help} "List help topics"
register tcl {} "Tcl version warnings"
register env {environment} "punkshell environment vars"
register console {term terminal} "Some console behaviour tests and warnings"
register platforms {platform} "Canonical punkshell platform names"
} }
#return list of {chan chunk} elements #return list of {chan chunk} elements

3
src/modules/punk-buildversion.txt

@ -1,6 +1,7 @@
0.2.6 0.2.7
#First line must be a semantic version number #First line must be a semantic version number
#all other lines are ignored. #all other lines are ignored.
#0.2.7 - new 'help platforms' topic (aliases: platform): canonical punkshell platform-dir names from punk::platform::platforms rendered with status/tiers/notes, the running interpreter's lib-tier and runtime-tier names marked, and the raw Tcl platform-package identifiers (generic/identify) shown for comparison. Degrades cleanly when punk::platform is unavailable. All platform/platforms prefixes are mutually ambiguous so they fall through to command lookup (env/environment precedent).
#0.2.6 - G-076: 'help tcl' renders the mitigated/mitigation buginfo axis (punk::lib 0.4.3+): a triggered check reporting mitigated keeps its severity level but displays 'warning level: <level> (mitigated)' in subdued grey (term-grey foreground) instead of the level colour, followed by an indented 'mitigated: <text>' block when mitigation text is supplied. Unmitigated warnings render unchanged. #0.2.6 - G-076: 'help tcl' renders the mitigated/mitigation buginfo axis (punk::lib 0.4.3+): a triggered check reporting mitigated keeps its severity level but displays 'warning level: <level> (mitigated)' in subdued grey (term-grey foreground) instead of the level colour, followed by an indented 'mitigated: <text>' block when mitigation text is supplied. Unmitigated warnings render unchanged.
#0.2.5 - G-045: ::punk::helptopic::define_docs converts from interim left-margin authoring to indented block-form values under the new punk::args @normalize directive (the constructed-definition normalization consumer proof): basehelp/topichelp/help_chunks-extra are braced indented blocks with a structural leading newline, the generated definitions declare @normalize, and the -unindentedfields declarations from punk 0.2.4 are dropped. Rendered 'i help'/'i help_chunks' output unchanged (verified aligned incl. the blank-line separator in help_chunks). #0.2.5 - G-045: ::punk::helptopic::define_docs converts from interim left-margin authoring to indented block-form values under the new punk::args @normalize directive (the constructed-definition normalization consumer proof): basehelp/topichelp/help_chunks-extra are braced indented blocks with a structural leading newline, the generated definitions declare @normalize, and the -unindentedfields declarations from punk 0.2.4 are dropped. Rendered 'i help'/'i help_chunks' output unchanged (verified aligned incl. the blank-line separator in help_chunks).
#0.2.4 - G-045: 'i help' usage table alignment - ::punk::helptopic::define_docs authors its help text at the left margin and declares -unindentedfields {-help} on both the generated @cmd line (honoured as of punk::args 0.6.1) and the topic argument line. Previously the @cmd -help braced literal carried ~16 spaces of source indent into the constructed definition (no whole-block normalization), rendering Description continuations +12 right of the first line, and the \n-relative topic -help rendered its first line +4 (the injected display prefix). Both blocks now render flush. Text content unchanged (manual ~70-col folding retained). #0.2.4 - G-045: 'i help' usage table alignment - ::punk::helptopic::define_docs authors its help text at the left margin and declares -unindentedfields {-help} on both the generated @cmd line (honoured as of punk::args 0.6.1) and the topic argument line. Previously the @cmd -help braced literal carried ~16 spaces of source indent into the constructed definition (no whole-block normalization), rendering Description continuations +12 right of the first line, and the \n-relative topic -help rendered its first line +4 (the injected display prefix). Both blocks now render flush. Text content unchanged (manual ~70-col folding retained).

219
src/modules/punk/platform-999999.0a1.0.tm

@ -0,0 +1,219 @@
# -*- 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 999999.0a1.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
variable platforms {
win32-x86_64 {status supported tiers {runtime lib} notes "primary development platform"}
linux-x86_64 {status supported tiers {runtime lib} notes ""}
linux-arm64 {status supported tiers {runtime lib} notes "aarch64; punkbin's existing arm kit predates the arm64 name and sits in linux-arm"}
linux-arm {status supported tiers {runtime lib} notes "32-bit arm"}
macosx {status supported tiers {runtime} notes "universal (multi-arch) macOS binaries - runtime tier keeps one folder"}
macosx-x86_64 {status supported tiers {lib} notes ""}
macosx-arm64 {status supported tiers {lib} notes "Apple silicon"}
freebsd-x86_64 {status supported tiers {runtime lib} notes ""}
freebsd-arm64 {status supported tiers {runtime lib} notes "no artifacts yet"}
msys-x86_64 {status dormant tiers {lib} notes "msys/cygwin-built tclsh runtimes; utility under review"}
openbsd-x86_64 {status recognized tiers {} notes ""}
netbsd-x86_64 {status recognized tiers {} notes ""}
dragonflybsd-x86_64 {status recognized tiers {} notes ""}
}
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)
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}
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 999999.0a1.0
}]
return

4
src/modules/punk/platform-buildversion.txt

@ -0,0 +1,4 @@
0.1.0
#First line must be a semantic version number
#all other lines are ignored.
#0.1.0 - initial release (2026-07-22 platform-folder synchronization; G-105 groundwork): the canonical punkshell platform naming layer over Tcl's platform package - platforms (canonical records: status/tiers/notes), normalize (amd64->x86_64, aarch64->arm64, macos->macosx, macosx arm->arm64), local ?-tier lib|runtime? (runtime tier collapses macosx per-arch to the universal macosx runtime-store name). Canon consumed by: punkbin platform folders, bin/runtime/<platform>/, lib_tclX/vendorlib_tclX platform dirs, G-103 artifact metadata targets, 'help platforms' topic. The boot machinery (punkboot::lib platform_generic snips in punk_main.tcl/project_main.tcl/make.tcl) carries an inline copy of the normalization mapping - keep in sync.

35
src/project_layouts/vendor/punk/project-0.1/bin/punk-runtime.cmd vendored

@ -1299,41 +1299,54 @@ arch=$(uname -m) #machine/architecture
plat=$(uname -s) #platform/system plat=$(uname -s) #platform/system
#even though most of the platform prongs are very similar, #even though most of the platform prongs are very similar,
#we keep the code separate so it can be tweaked easily for unexpected differences #we keep the code separate so it can be tweaked easily for unexpected differences
#each prong sets local_platform (the punkbin/bin-runtime platform-DIR name) and, #each prong sets local_platform (the CANONICAL punkshell platform-DIR name - see
#where a runtime is published for the platform, rt_default (default runtime name). #punk::platform / 'help platforms': cpu tokens normalized amd64->x86_64,
#aarch64->arm64) and, where a runtime is published for the platform, rt_default
#(default runtime name).
narch="$arch"
case "$narch" in
amd64) narch="x86_64";;
aarch64|arm64) narch="arm64";;
esac
if [[ "$plat" = "Linux"* ]]; then if [[ "$plat" = "Linux"* ]]; then
if [[ "$arch" = "x86_64"* ]]; then if [[ "$arch" = "x86_64"* ]]; then
local_platform="linux-x86_64" local_platform="linux-x86_64"
rt_default="tclkit-902-Linux64-intel-dyn" rt_default="tclkit-902-Linux64-intel-dyn"
runtime_available=1 runtime_available=1
elif [[ "$narch" = "arm64" ]]; then
#canonical arm64 (aarch64). punkbin's existing arm kit predates the
#arm64 name and sits in linux-arm - no fetch default here until a
#linux-arm64 punkbin folder exists; name runtimes explicitly.
local_platform="linux-arm64"
elif [[ "$arch" = "arm"* ]]; then elif [[ "$arch" = "arm"* ]]; then
#32-bit arm
local_platform="linux-arm" local_platform="linux-arm"
rt_default="tclkit-902-Linux64-arm-dyn" rt_default="tclkit-902-Linux64-arm-dyn"
runtime_available=1 runtime_available=1
else else
local_platform="linux-$arch" local_platform="linux-$narch"
fi fi
os="linux" os="linux"
elif [[ "$plat" = "Darwin"* ]]; then elif [[ "$plat" = "Darwin"* ]]; then
os="macosx" os="macosx"
#assumed to be Mach-O 'universal binaries' for both x86-64 and arm? - REVIEW #universal (multi-arch) binaries - the runtime tier keeps ONE macosx folder
#(per-arch macosx-x86_64/macosx-arm64 names serve the lib tree tier)
local_platform="macosx" local_platform="macosx"
rt_default="tclkit-902-Darwin64-dyn" rt_default="tclkit-902-Darwin64-dyn"
runtime_available=1 runtime_available=1
elif [[ "$plat" = "FreeBSD"* ]]; then elif [[ "$plat" = "FreeBSD"* ]]; then
#aligned 2026-07-22 to the punkbin repo's actual folder name (freebsd-x86_64; #canonical names (2026-07-22): freebsd-x86_64 (punkbin's actual folder; this
#this payload previously said freebsd-amd64 - the G-105 platform-dir naming #payload previously said freebsd-amd64) / freebsd-arm64
#alignment item) local_platform="freebsd-$narch"
local_platform="freebsd-x86_64"
os="freebsd" os="freebsd"
elif [[ "$plat" == "DragonFly"* ]]; then elif [[ "$plat" == "DragonFly"* ]]; then
local_platform="dragonflybsd-$arch" local_platform="dragonflybsd-$narch"
os="dragonflybsd" os="dragonflybsd"
elif [[ "$plat" == "NetBSD"* ]]; then elif [[ "$plat" == "NetBSD"* ]]; then
local_platform="netbsd-$arch" local_platform="netbsd-$narch"
os="netbsd" os="netbsd"
elif [[ "$plat" == "OpenBSD"* ]]; then elif [[ "$plat" == "OpenBSD"* ]]; then
local_platform="openbsd-amd64" local_platform="openbsd-$narch"
os="openbsd" os="openbsd"
elif [[ "$plat" == "MINGW32"* ]]; then elif [[ "$plat" == "MINGW32"* ]]; then
#REVIEW #REVIEW

35
src/scriptapps/bin/punk-runtime.bash

@ -19,41 +19,54 @@ arch=$(uname -m) #machine/architecture
plat=$(uname -s) #platform/system plat=$(uname -s) #platform/system
#even though most of the platform prongs are very similar, #even though most of the platform prongs are very similar,
#we keep the code separate so it can be tweaked easily for unexpected differences #we keep the code separate so it can be tweaked easily for unexpected differences
#each prong sets local_platform (the punkbin/bin-runtime platform-DIR name) and, #each prong sets local_platform (the CANONICAL punkshell platform-DIR name - see
#where a runtime is published for the platform, rt_default (default runtime name). #punk::platform / 'help platforms': cpu tokens normalized amd64->x86_64,
#aarch64->arm64) and, where a runtime is published for the platform, rt_default
#(default runtime name).
narch="$arch"
case "$narch" in
amd64) narch="x86_64";;
aarch64|arm64) narch="arm64";;
esac
if [[ "$plat" = "Linux"* ]]; then if [[ "$plat" = "Linux"* ]]; then
if [[ "$arch" = "x86_64"* ]]; then if [[ "$arch" = "x86_64"* ]]; then
local_platform="linux-x86_64" local_platform="linux-x86_64"
rt_default="tclkit-902-Linux64-intel-dyn" rt_default="tclkit-902-Linux64-intel-dyn"
runtime_available=1 runtime_available=1
elif [[ "$narch" = "arm64" ]]; then
#canonical arm64 (aarch64). punkbin's existing arm kit predates the
#arm64 name and sits in linux-arm - no fetch default here until a
#linux-arm64 punkbin folder exists; name runtimes explicitly.
local_platform="linux-arm64"
elif [[ "$arch" = "arm"* ]]; then elif [[ "$arch" = "arm"* ]]; then
#32-bit arm
local_platform="linux-arm" local_platform="linux-arm"
rt_default="tclkit-902-Linux64-arm-dyn" rt_default="tclkit-902-Linux64-arm-dyn"
runtime_available=1 runtime_available=1
else else
local_platform="linux-$arch" local_platform="linux-$narch"
fi fi
os="linux" os="linux"
elif [[ "$plat" = "Darwin"* ]]; then elif [[ "$plat" = "Darwin"* ]]; then
os="macosx" os="macosx"
#assumed to be Mach-O 'universal binaries' for both x86-64 and arm? - REVIEW #universal (multi-arch) binaries - the runtime tier keeps ONE macosx folder
#(per-arch macosx-x86_64/macosx-arm64 names serve the lib tree tier)
local_platform="macosx" local_platform="macosx"
rt_default="tclkit-902-Darwin64-dyn" rt_default="tclkit-902-Darwin64-dyn"
runtime_available=1 runtime_available=1
elif [[ "$plat" = "FreeBSD"* ]]; then elif [[ "$plat" = "FreeBSD"* ]]; then
#aligned 2026-07-22 to the punkbin repo's actual folder name (freebsd-x86_64; #canonical names (2026-07-22): freebsd-x86_64 (punkbin's actual folder; this
#this payload previously said freebsd-amd64 - the G-105 platform-dir naming #payload previously said freebsd-amd64) / freebsd-arm64
#alignment item) local_platform="freebsd-$narch"
local_platform="freebsd-x86_64"
os="freebsd" os="freebsd"
elif [[ "$plat" == "DragonFly"* ]]; then elif [[ "$plat" == "DragonFly"* ]]; then
local_platform="dragonflybsd-$arch" local_platform="dragonflybsd-$narch"
os="dragonflybsd" os="dragonflybsd"
elif [[ "$plat" == "NetBSD"* ]]; then elif [[ "$plat" == "NetBSD"* ]]; then
local_platform="netbsd-$arch" local_platform="netbsd-$narch"
os="netbsd" os="netbsd"
elif [[ "$plat" == "OpenBSD"* ]]; then elif [[ "$plat" == "OpenBSD"* ]]; then
local_platform="openbsd-amd64" local_platform="openbsd-$narch"
os="openbsd" os="openbsd"
elif [[ "$plat" == "MINGW32"* ]]; then elif [[ "$plat" == "MINGW32"* ]]; then
#REVIEW #REVIEW

8
src/vendorlib_tcl8/README.md

@ -6,3 +6,11 @@ These should generally be kept to a minimum
- todo: dependency and version number tracking; along with the provision of a mechanism for the project end-users to update. - todo: dependency and version number tracking; along with the provision of a mechanism for the project end-users to update.
Platform subfolder structure (2026-07-22): the platform-named subfolders
follow the CANONICAL punkshell platform-dir names defined by the
punk::platform module (also surfaced as 'help platforms' in the punk shell)
plus the special 'allplatforms' folder for platform-independent libraries.
The boot machinery adds allplatforms plus the running platform's folder to
auto_path. Keep the set of subfolders here in sync with punk::platform's
supported/dormant records across BOTH vendorlib_tcl8 and vendorlib_tcl9.

9
src/vendorlib_tcl8/freebsd-amd64/README.md

@ -1,9 +0,0 @@
Tcl library dependencies
pkgIndex.tcl based libraries specific to the freebsd-amd64 platform.
Note that amd64 is equivalent to x86_64 in this context.

4
src/vendorlib_tcl8/freebsd-arm64/README.md

@ -0,0 +1,4 @@
Tcl library dependencies
pkgIndex.tcl based libraries specific to the freebsd-arm64 platform.
(Canonical punkshell platform name - see punk::platform / 'help platforms')

5
src/vendorlib_tcl8/freebsd-x86_64/README.md

@ -0,0 +1,5 @@
Tcl library dependencies
pkgIndex.tcl based libraries specific to the freebsd-x86_64 platform.
(Renamed from freebsd-amd64 2026-07-22: punkshell canonical platform names
normalize amd64 to x86_64 - see punk::platform / 'help platforms')

4
src/vendorlib_tcl8/linux-arm/README.md

@ -0,0 +1,4 @@
Tcl library dependencies
pkgIndex.tcl based libraries specific to the linux-arm platform.
(Canonical punkshell platform name - see punk::platform / 'help platforms')

4
src/vendorlib_tcl8/linux-arm64/README.md

@ -0,0 +1,4 @@
Tcl library dependencies
pkgIndex.tcl based libraries specific to the linux-arm64 platform.
(Canonical punkshell platform name - see punk::platform / 'help platforms')

4
src/vendorlib_tcl8/macosx-arm64/README.md

@ -0,0 +1,4 @@
Tcl library dependencies
pkgIndex.tcl based libraries specific to the macosx-arm64 platform.
(Canonical punkshell platform name - see punk::platform / 'help platforms')

10
src/vendorlib_tcl8/msys-x86_64/README.md

@ -1,8 +1,6 @@
Tcl library dependencies Tcl library dependencies
pkgIndex.tcl based libraries specific to the msys-x86_64 platform. pkgIndex.tcl based libraries specific to the msys-x86_64 platform
This is a somewhat unix-like environment running on windows. (msys/cygwin-built tclsh runtimes).
Status: DORMANT - recognized canonical name but utility under review
(2026-07-22 platform survey; see punk::platform / 'help platforms').

8
src/vendorlib_tcl9/README.md

@ -6,3 +6,11 @@ These should generally be kept to a minimum
- todo: dependency and version number tracking; along with the provision of a mechanism for the project end-users to update. - todo: dependency and version number tracking; along with the provision of a mechanism for the project end-users to update.
Platform subfolder structure (2026-07-22): the platform-named subfolders
follow the CANONICAL punkshell platform-dir names defined by the
punk::platform module (also surfaced as 'help platforms' in the punk shell)
plus the special 'allplatforms' folder for platform-independent libraries.
The boot machinery adds allplatforms plus the running platform's folder to
auto_path. Keep the set of subfolders here in sync with punk::platform's
supported/dormant records across BOTH vendorlib_tcl8 and vendorlib_tcl9.

9
src/vendorlib_tcl9/freebsd-amd64/README.md

@ -1,9 +0,0 @@
Tcl library dependencies
pkgIndex.tcl based libraries specific to the freebsd-amd64 platform.
Note that amd64 is equivalent to x86_64 in this context.

4
src/vendorlib_tcl9/freebsd-arm64/README.md

@ -0,0 +1,4 @@
Tcl library dependencies
pkgIndex.tcl based libraries specific to the freebsd-arm64 platform.
(Canonical punkshell platform name - see punk::platform / 'help platforms')

5
src/vendorlib_tcl9/freebsd-x86_64/README.md

@ -0,0 +1,5 @@
Tcl library dependencies
pkgIndex.tcl based libraries specific to the freebsd-x86_64 platform.
(Renamed from freebsd-amd64 2026-07-22: punkshell canonical platform names
normalize amd64 to x86_64 - see punk::platform / 'help platforms')

4
src/vendorlib_tcl9/linux-arm/README.md

@ -0,0 +1,4 @@
Tcl library dependencies
pkgIndex.tcl based libraries specific to the linux-arm platform.
(Canonical punkshell platform name - see punk::platform / 'help platforms')

4
src/vendorlib_tcl9/linux-arm64/README.md

@ -0,0 +1,4 @@
Tcl library dependencies
pkgIndex.tcl based libraries specific to the linux-arm64 platform.
(Canonical punkshell platform name - see punk::platform / 'help platforms')

4
src/vendorlib_tcl9/macosx-arm64/README.md

@ -0,0 +1,4 @@
Tcl library dependencies
pkgIndex.tcl based libraries specific to the macosx-arm64 platform.
(Canonical punkshell platform name - see punk::platform / 'help platforms')

10
src/vendorlib_tcl9/msys-x86_64/README.md

@ -1,8 +1,6 @@
Tcl library dependencies Tcl library dependencies
pkgIndex.tcl based libraries specific to the msys-x86_64 platform. pkgIndex.tcl based libraries specific to the msys-x86_64 platform
This is a somewhat unix-like environment running on windows. (msys/cygwin-built tclsh runtimes).
Status: DORMANT - recognized canonical name but utility under review
(2026-07-22 platform survey; see punk::platform / 'help platforms').

19
src/vfs/_config/project_main.tcl

@ -124,6 +124,23 @@ apply { args {
return "${plat}-${cpu}" return "${plat}-${cpu}"
} }
proc platform_punk {} {
#canonical punkshell platform-dir name: platform_generic normalized.
#INLINE COPY of punk::platform::normalize (src/modules/punk/platform-*.tm;
#'help platforms' documents the canon) - the boot stage cannot package
#require, so keep this mapping in sync with that module:
#amd64->x86_64, aarch64->arm64, macos->macosx, macosx arm->arm64.
set parts [split [platform_generic] -]
set cpu [lindex $parts end]
set os [join [lrange $parts 0 end-1] -]
if {$os eq "macos"} {set os macosx}
switch -- $cpu {
amd64 {set cpu x86_64}
aarch64 {set cpu arm64}
arm {if {$os eq "macosx"} {set cpu arm64}}
}
return "${os}-${cpu}"
}
} }
set has_zipfs [expr {[info commands tcl::zipfs::root] ne ""}] set has_zipfs [expr {[info commands tcl::zipfs::root] ne ""}]
@ -609,7 +626,7 @@ apply { args {
#so we prepend to auto_path using a slightly inefficient method. Should be fine on relatively small list like this #so we prepend to auto_path using a slightly inefficient method. Should be fine on relatively small list like this
#eventually it should just be something like 'ledit ::auto_path -1 -1 $libfolder' #eventually it should just be something like 'ledit ::auto_path -1 -1 $libfolder'
if {"dev" in $package_modes} { if {"dev" in $package_modes} {
set platform [::punkboot::platform_generic] set platform [::punkboot::platform_punk]
#on windows - case differences dont matter - but can stop us finding path in auto_path #on windows - case differences dont matter - but can stop us finding path in auto_path
#on other platforms, case differences could represent different paths #on other platforms, case differences could represent different paths
#review #review

21
src/vfs/_config/punk_main.tcl

@ -219,6 +219,23 @@ apply { args {
return "${plat}-${cpu}" return "${plat}-${cpu}"
} }
proc platform_punk {} {
#canonical punkshell platform-dir name: platform_generic normalized.
#INLINE COPY of punk::platform::normalize (src/modules/punk/platform-*.tm;
#'help platforms' documents the canon) - the boot stage cannot package
#require, so keep this mapping in sync with that module:
#amd64->x86_64, aarch64->arm64, macos->macosx, macosx arm->arm64.
set parts [split [platform_generic] -]
set cpu [lindex $parts end]
set os [join [lrange $parts 0 end-1] -]
if {$os eq "macos"} {set os macosx}
switch -- $cpu {
amd64 {set cpu x86_64}
aarch64 {set cpu arm64}
arm {if {$os eq "macosx"} {set cpu arm64}}
}
return "${os}-${cpu}"
}
proc is_interactive {} { proc is_interactive {} {
if {"windows" eq $::tcl_platform(platform) && [package vcompare [info patchlevel] 9.0] == -1} { if {"windows" eq $::tcl_platform(platform) && [package vcompare [info patchlevel] 9.0] == -1} {
#tcl 8.6 etc #tcl 8.6 etc
@ -801,7 +818,7 @@ apply { args {
#so we prepend to auto_path using a slightly inefficient method. Should be fine on relatively small list like this #so we prepend to auto_path using a slightly inefficient method. Should be fine on relatively small list like this
#eventually it should just be something like 'ledit ::auto_path -1 -1 $libfolder' #eventually it should just be something like 'ledit ::auto_path -1 -1 $libfolder'
if {"dev" in $package_modes} { if {"dev" in $package_modes} {
set platform [::punkboot::platform_generic] set platform [::punkboot::platform_punk]
#on windows - case differences dont matter - but can stop us finding path in auto_path #on windows - case differences dont matter - but can stop us finding path in auto_path
#on other platforms, case differences could represent different paths #on other platforms, case differences could represent different paths
#review #review
@ -855,7 +872,7 @@ apply { args {
#src mode: add unbuilt source library paths from the project's src/ tree. #src mode: add unbuilt source library paths from the project's src/ tree.
if {"src" in $package_modes && [info exists src_project_root] && $src_project_root ne ""} { if {"src" in $package_modes && [info exists src_project_root] && $src_project_root ne ""} {
set platform [::punkboot::platform_generic] set platform [::punkboot::platform_punk]
set src_lib_base [file join $src_project_root src] set src_lib_base [file join $src_project_root src]
#src/lib and src/lib_tcl<tclmajor> (editable library source) #src/lib and src/lib_tcl<tclmajor> (editable library source)
foreach libsub [list lib_tcl$tclmajorv lib] { foreach libsub [list lib_tcl$tclmajorv lib] {

Loading…
Cancel
Save