Commit Graph

2747 Commits

Author SHA1 Message Date
Darryl L. Miles 0518b6914a configure: locate scripts/ relative to the wrapper, not the CWD
The top-level ./configure wrapper did `cd scripts`, which is resolved
against the caller's current directory. Running it from anywhere other
than the source top (e.g. `mkdir build; cd build; ../configure`) failed
immediately with:

    ../configure: line 12: cd: scripts: No such file or directory

Derive the script's own location via `dirname "$0"` and cd into
"${basedir}/scripts" so the wrapper works regardless of CWD.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-26 14:54:11 -04:00
Darryl L. Miles 7d11b8e51b tcltk: don't discard piped stdin buffered before the stdin-channel swap
magic replaces Tcl's stdin channel with its own (TerminalInputProc) during
startup (_magic_startup).  The replacement builds a brand-new Tcl channel over
the same fd; the new channel starts with an empty buffer.  If anything had
already read() stdin bytes out of the kernel into the *old* channel's buffer
before the swap -- e.g. a script/commands piped in fast enough that Tcl buffered
them during startup -- those bytes were silently dropped, and every command
after that point vanished.  This was timing-dependent, so it surfaced only
intermittently ("piped input discarded sometimes").

Fix: before creating the replacement channel, drain any bytes still buffered in
the old channel (Tcl_InputBuffered / Tcl_ReadChars) and hand them to
TerminalInputProc via TxBuffer, which it already serves ahead of any fresh
read().  The swap is now lossless by construction rather than by luck.  On the
normal path Tcl_InputBuffered() is 0, so the new branch is inert.

How to reproduce / observe the original loss:
  Temporarily force the old channel to buffer input just before the swap, right
  after `fsOrig = Tcl_GetChannelInstanceData(oldchannel);` in _magic_startup():

      { Tcl_Obj *l = Tcl_NewObj(); Tcl_IncrRefCount(l);
        Tcl_GetsObj(oldchannel, l);       /* consume 1 line, buffering the rest */
        fprintf(stderr, "buffered=%d\n", (int)Tcl_InputBuffered(oldchannel));
        Tcl_DecrRefCount(l); }

  then pipe a burst of commands (more than one line):

      printf 'puts a\nputs b\n...\nquit -noprompt\n' | ./run_magicnull.sh

  Comment the drain out and every command after the first disappears; restore it
  and they all survive.  Measured with 218 bytes buffered: 0/20 commands survive
  without the drain, 19/20 with it (the one line the probe consumed aside).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-24 14:57:28 +00:00
Darryl L. Miles 3f1747b1fb crosshair: prevent crash from command usage in headless mode 2026-07-23 16:10:23 -04:00
Darryl L. Miles 1f5e6e6b4d lisp: Makefile should always install *.scm
make liblisp.o
make liblisp.a
make install

All seem to work ok now.
2026-07-23 16:10:09 -04:00
Darryl L. Miles be83d2954d lisp: Clean up compiler warnings
Mainly a 64bit port to support sizeof(int) != sizeof(void*)
2026-07-23 16:10:09 -04:00
Darryl L. Miles a7fed2b744 listInt.h: correct prototype names
My best guess:
 LispDispatch => TxLispDispatch
 LispModifyFrame => LispModifyBinding
2026-07-23 16:10:09 -04:00
Darryl L. Miles 9c33f1d460 lisp: Add needed system #include directives 2026-07-23 16:10:09 -04:00
Darryl L. Miles 7bfbc53b11 feat: add generate_sbom boolean input (disabled by default) and gate SBOM steps on it
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
2026-07-23 16:09:35 -04:00
Darryl L. Miles e44d25db2f appimage: README: update Tcl/Tk version information to match current builds 2026-07-23 16:09:35 -04:00
Darryl L. Miles 009e798ca8 appimage: README: Update docker instructions demonstrate xauth usage 2026-07-23 16:09:35 -04:00
Darryl L. Miles e438838725 fix: scan docker image for SBOM instead of extracted squashfs-root
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
2026-07-23 16:09:35 -04:00
Darryl L. Miles b0ba9db6a4 Add SBOM license enrichment for AppImage variants
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
2026-07-23 16:09:35 -04:00
Darryl L. Miles 298f19ce31 Item 10: Add SBOM generation step to all appimage workflows
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
2026-07-23 16:09:35 -04:00
Darryl L. Miles 51c36bcf19 Add AppStream metadata license and developer info
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
2026-07-23 16:09:35 -04:00
Darryl L. Miles d5d5ea363f Item 6 + 7: add metainfo.xml, --updateinformation, validate target, Validate AppImage step
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
2026-07-23 16:09:35 -04:00
Darryl L. Miles f5ff38ff2f Fix STEP_SUMMARY: use TCL/TK BUILD INFO heading, table format only in all 4 appimage workflows
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
2026-07-23 16:09:35 -04:00
Darryl L. Miles f34fa0778e Fix tcl_ref description example for appimage9/10 (use core-9-0-4 not core-8-6-18)
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
2026-07-23 16:09:35 -04:00
Darryl L. Miles d7071b65d4 Fix AppImage Tcl/Tk tag resolution and summary metadata
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
2026-07-23 16:09:35 -04:00
Darryl L. Miles d9ce60c773 Improve Tcl/Tk source output: show tarball/SHA details and git clone info
For tarball source: show tarball filename, download URL, and actual
SHA256 values with "(SHA matches expected value)" suffix, or
"expected SHA not known, please update workflow .yml" when no SHA is
known. The Tcl ref is omitted since it is derived and not user-supplied.

For github source: show clone URL, ref, and resolved commit-id/date.
Tarball and SHA rows are omitted as they are not relevant.

The TCL/TK BUILD INFO section in Create RELEASE-NOTES.txt is updated
with the same conditional logic using the exported env vars.

The TCL_SHA_STATUS env var is removed (replaced by per-SHA display
logic and the new TCL_TARBALL_FILENAME / TK_TARBALL_FILENAME vars).

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
2026-07-23 16:09:35 -04:00
Darryl L. Miles 265fbb05ed Improve resolver error clarity and trap cleanup ordering
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
2026-07-23 16:09:35 -04:00
Darryl L. Miles a5aa32883c Use trap-based Tcl metadata tmpdir cleanup in appimage workflows
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
2026-07-23 16:09:35 -04:00
Darryl L. Miles a365d5a5c1 Apply final readability and wording polish for appimage Tcl flow
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
2026-07-23 16:09:35 -04:00
Darryl L. Miles 0b51864ab4 Finalize resolver cleanup handling and EL7 git dependency note
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
2026-07-23 16:09:35 -04:00
Darryl L. Miles 5c83dc7bc3 Fix resolver function structure in appimage workflows
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
2026-07-23 16:09:35 -04:00
Darryl L. Miles 4b74c6df8e Harden Tcl tag resolution retries and Makefile Tcl ABI checks
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
2026-07-23 16:09:35 -04:00
Darryl L. Miles e28c93bb90 Polish Tcl/Tk workflow and Dockerfile review nits
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
2026-07-23 16:09:35 -04:00
Darryl L. Miles a05dd555a9 Address review feedback for Tcl/Tk appimage workflow changes
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
2026-07-23 16:09:35 -04:00
Darryl L. Miles 58d47312c1 Implement per-variant Tcl/Tk source and SHA strategy for appimage builds
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
2026-07-23 16:09:35 -04:00
Darryl L. Miles 23ab0ff2a0 toolchains/emscripten/defs.mak LINK with LD LDFLAGS 2026-07-23 16:09:35 -04:00
Darryl L. Miles 1bd1daf73a toolchains/emscripten/defs.mak LINK with LD 2026-07-23 16:09:35 -04:00
Darryl L. Miles adf5457eca wasm: emit debugging symbol source-map by default 2026-07-23 16:09:35 -04:00
Darryl L. Miles 665f65d61f configure: autoconf regen (2.69) LDFLAGS/CXXFLAGS/CXX/CC propagation fix 2026-07-23 16:09:35 -04:00
Darryl L. Miles dc31c1f6f6 Makefile: LDFLAGS autoconf propagation
Also fixed up CC/CXX/CXXFLAGS in the same way.

Main notable concern the tclmagic.so now has reordered position of
$LDFLAGS (was start AND end of list, now start of list only),
$LDDL_FLAGS would have already provided it start of list, so it
would be duplicated set of options.

@LDDL_FLAGS@ no longer prepend $LDFLAGS which is now explicit in the
Makefile to allow specific target control.

The purpose of all this is the toplevel ./configure now has LDFLAGS
control passed down to linker command lines as configure --help
indicates.
2026-07-23 16:09:35 -04:00
Darryl L. Miles b6429a3b0b configure: autoconf regen (2.69) ld_first_libs 2026-07-23 16:09:35 -04:00
Darryl L. Miles 12c7927e88 Makefile: LD_FIRST_LIBS high-priority lib order conf control point 2026-07-23 16:09:35 -04:00
Darryl L. Miles 2bcf9637cb GHA: appimage*.yml: fetch-tags: true workaround (see actions/checkout~issue#1471)
CoPilot analysis

Bonus: fetch-tags workaround may be removable

The appimage workflows have this comment throughout:
  #fetch-tags: true # this should work see actions/checkout~issue#1471

...and then manually run git fetch --tags as a workaround. The fetch-tags input bug referenced
in issue #1471 was fixed in a v4.x patch release. After upgrading to v7, it would be worth
testing fetch-tags: true directly and removing the manual git fetch --tags workaround in the
appimage "Create RELEASE-NOTES.txt" steps — though this is independent of the version upgrade
itself.
2026-07-23 16:09:35 -04:00
Darryl L. Miles 17e3ff0058 GHA: main-wasm.yml: fixup the artifact download naming and contents
Previously it was an archive of an archive (of the 'npm pack' output)
published under the same artifict filename (which becomes the default
download filenmame) which is a headache when you start to download more
than one (like when testing between versions).

Now the 'npm pack' output is attached as-is using its original filename,
but also the extracted contents are attached as standard GitHub
artifact ZIP, using a unique filename (based on the unique build version).
2026-07-23 16:09:35 -04:00
Darryl L. Miles b48ede74f3 GHA: main-wasm.yml: build with stable Tcl core-9-0-\d+ releases
Filter out unwanted tag version as candiates to build with:

refs/tags/core-9-0-b3 UNWANTED
refs/tags/core-9-0-b2 UNWANTED
refs/tags/core-9-0-b1-rc4 UNWANTED
refs/tags/core-9-0-b1 UNWANTED
refs/tags/core-9-0-a3 UNWANTED
refs/tags/core-9-0-a1 UNWANTED
refs/tags/core-9-0-4
refs/tags/core-9-0-3
refs/tags/core-9-0-2
refs/tags/core-9-0-1
refs/tags/core-9-0-0

Previously the lexical order would result in alpha/beta/rc
matching in preference to the stable Tcl version IDs.  So our WASM
build would not be against the upstream stable release which is
the intention.
2026-07-23 16:09:35 -04:00
Darryl L. Miles cb446b7ada GHA: main-wasm.yml: use newer node by default (v24 LTS)
previously node20 was the default, with override to force node22 but
node24 has been out since May 2025 and is current LTS, with node26
out since May 2026 and current stable (but non-LTS).
2026-07-23 16:09:35 -04:00
Darryl L. Miles 433f43accf GHA: uses actions/* softprops/* version bumps
uses: actions/checkout@v4 => actions/checkout@v7
uses: actions/checkout@v5 => actions/checkout@v7

uses: actions/upload-artifact@v4 => actions/upload-artifact@v7
uses: actions/upload-artifact@v5 => actions/upload-artifact@v7

uses: softprops/action-gh-release@v2 => softprops/action-gh-release@v3
2026-07-23 16:09:35 -04:00
Darryl L. Miles 3fb47d9668 GHA: canary-matrix.yml maintenance +ubuntu-26.04 +gcc-16 +clang22 2026-07-23 16:09:35 -04:00
R. Timothy Edwards 86fbd2b50f Corrected a subtle error in "def read" in which if a net declares a
non-default rule, but then does not contain any routed nets, the
non-default rule gets accidentally applied to the next routed net,
ignoring the end-of-statement in between.
2026-07-23 15:57:28 -04:00
R. Timothy Edwards a22b7508ac Moved the freeMagic() of the labelList created for isolated substrate
regions into extHardFreeAll(), where it is easy to detect if it has
already been freed along with the rest of the labeled regions, to avoid
a double free() call.
2026-07-17 13:39:51 -04:00
R. Timothy Edwards 42b346e318 Extended the function of the "findlabel" command; previously, the
documentation implied that "findlabel -glob <pattern> <n>" is a
meaningful set of command options, but in fact was not implemented
and did not raise an error for wrong number of arguments.  Instead,
this has now been implemented to mean find (and set the box position
to) the <n>th label containing <pattern>.
2026-07-17 12:07:25 -04:00
R. Timothy Edwards cc4da9a05f Corrected a subtle error in substrate extraction: In extHierSubstrate(),
extFindNodes() is called to find just the substrate node, then
ExtLabelRegions() is called to label the substrate node if such a label
exists.  The ExtLabelRegions() routine has a section at line 344 in which
if it finds a label on the substrate plane that is over space, then it
attaches the label to the default substrate region.  However, if the
label is inside an isolated substrate region, then it passes this check,
which never actually detects whether or not the label is over space.
Doing so is actually simple, since the preceding code detected connecting
tiles under the label, and that fact just needed to be carried forward
and checked.  The upshot of the error was that if an isolated substrate
region like a pwell inside deep nwell was *labeled*, then it would
mysteriously get shorted to the global substrate, which is clearly wrong.
Thanks to Mark Martin for providing the failing example (and apologies to
Mark Martin for spending time trying to debug a very obscure problem).
2026-07-11 17:09:26 -04:00
R. Timothy Edwards 17ac06a24a Fixed the handling of printed units when "units grid" is used. The
original implementation (which was added recently) used an inverted
output scale and multiplied by it instead of dividing by it,
resulting in incorrect units.  However, it was not even getting to
that point due to the use of uninitialized variable "crec", which
should have been set from the window pointer but was missing.
2026-07-10 19:59:05 -04:00
R. Timothy Edwards 23a1c501ff Updated the version to go along with the merge of pull request #540
from Darryl Miles (makes some updates to the code in the oa/
directory so that it at least will compile, even if it is not
usable).
2026-07-09 10:41:44 -04:00
Darryl L. Miles c6896e2a74 oa: apply code-review feedback — strcpy_s link fallback + argv cleanup
Follow-up to review-master-upstream-20249999-oa-dcff2f64-6535a4e1.md:

- strcpy_s: add an inline fallback implementation right after the declaration,
  guarded by #ifndef __STDC_LIB_EXT1__.  glibc never defines that macro and does
  not provide the C11 Annex K interfaces, so the bare declaration was an
  unresolved symbol at link time; the fallback makes magicOA.o self-contained
  (strcpy_s becomes a defined symbol) while a real Annex K libc still wins.
- magicInit.cpp / magicOA.cpp: use `char argvbuf[] = "tclsh"` for the mutable
  argv string instead of `char[32]` + snprintf.
2026-07-09 10:41:12 -04:00
Darryl L. Miles f3f824a6bb magicOA.c: strcpy_s declaration (FIXME remove/move this) 2026-07-09 10:41:12 -04:00
Darryl L. Miles dfa28d1cd3 oa: replace strcpy() with strcpy_s() 2026-07-09 10:41:12 -04:00