vcswatch reports that
this package seems to have a new changelog entry (version
1:2.10.0~pre1, distribution
UNRELEASED) and new commits
in its VCS. You should consider whether it's time to make
an upload.
Here are the relevant commit messages:
commit ab930078a55e06a8c591fe25ade20f729be22d34
Merge: aff321fd 279862a2
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Sun Aug 23 07:17:49 2026 +0800
Merge pull request #4450 from BsAtHome/halgs_rm-pyhal-module
hal: Remove pyhal module that is incompatible with getter/setter
commit aff321fd831efc5c40800b2ae147206d6c820b57
Merge: 009dc496 329f0bd5
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Sun Aug 23 07:17:34 2026 +0800
Merge pull request #4449 from BsAtHome/halgs_rm-old-hal-hh
hal: Remove old unused hal.hh
commit 009dc496c0b4bb712cb517ae64b6b72c1f160bec
Merge: e5c8c75f dc05c2e7
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Sun Aug 23 07:01:05 2026 +0800
Merge pull request #4451 from Sigma1912/patch-1
SimConfigs: Increase VERSION in 3axistutorial
commit e5c8c75fadc2a37902a9b23d4d4e1efbe619f497
Merge: 5c41560e 858a83bb
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Sun Aug 23 06:43:52 2026 +0800
Merge pull request #4369 from BsAtHome/halgs_hostmot2
hal: Update the hostmot2 drivers to getter/setter
commit dc05c2e7db8c50e1bcc4be744fa0d2b1c8f097c5
Author: Sigma1912 <46067220+Sigma1912@users.noreply.github.com>
Date: Sat Aug 22 16:32:37 2026 +0200
SimConfigs: Increase VERSION in 3axistutorial
Increase [EMC]VERSION to 1.1 so the 'automatic update' popup does not show.
commit 279862a2bda312945e8b6f04cd2d233b21268c14
Author: Bertho Stultiens <bertho@vagrearg.org>
Date: Sat Aug 22 13:41:42 2026 +0200
hal: Remove pyhal module that is incompatible with getter/setter.
commit 5c41560ebbc3a40f84a5547bc6f7c5cd9278ba6b
Merge: fb5f59b1 2751ae85
Author: BsAtHome <bertho@vagrearg.org>
Date: Sat Aug 22 13:21:27 2026 +0200
Merge pull request #4448 from grandixximo/include-brackets
src: include exported headers with angle brackets where they are used
commit 329f0bd5d385d7e68002a210c299e61a31c1e8dc
Author: Bertho Stultiens <bertho@vagrearg.org>
Date: Sat Aug 22 13:03:37 2026 +0200
hal: Remove old unused hal.hh. It will be replaced at a later stage.
commit 2751ae8561b8c5ce3cf34713e1d25c1df1b407a0
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Wed Aug 12 21:30:56 2026 +1000
src: include exported headers with angle brackets where they are used
The build copies every SRCHEADERS entry into include/, so an exported
header exists twice: the source under src/ and the copy modules compile
against. A quoted include searches the includer's own directory before
the -I path, an angled include does not, so the two forms can reach
different copies of the same header and both compile.
An exported header travels to include/ and takes its siblings with it,
so it keeps the quoted form and finds them wherever it lands, and so
does its implementation, wanting the source rather than a stale export.
The files changed here are users, and build out of tree where only the
exported copies exist.
commit fb5f59b185849c46d50542d564a1bf5d65ced0a8
Merge: ce5c6890 c3c6fc24
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Sat Aug 22 15:46:08 2026 +0800
Merge pull request #4440 from Sigma1912/Glnav_Add_is_lathe
Glnav: Add is_lathe method
commit ce5c6890489b2f06097245ef07e3e9ff9fd66e33
Merge: 3aadbe0c 813da03e
Author: BsAtHome <bertho@vagrearg.org>
Date: Sat Aug 22 09:40:30 2026 +0200
Merge pull request #4438 from grandixximo/unused-includes
tree: remove includes that nothing in the file uses
commit 3aadbe0cc5032b1ece804d5ae2f7655cde9f2e7b
Merge: a1559d17 2508c98f
Author: BsAtHome <bertho@vagrearg.org>
Date: Sat Aug 22 09:39:58 2026 +0200
Merge pull request #4445 from grandixximo/nml-tooldata-cut
emc: cut the nml_intf dependency on tooldata
commit a1559d175ca3713011af2ee921bac089ba20961e
Merge: 458a64b5 6973b377
Author: BsAtHome <bertho@vagrearg.org>
Date: Sat Aug 22 09:39:37 2026 +0200
Merge pull request #4446 from grandixximo/report-buckets
include-dep-report: bucket by what the build links, not by directory depth
commit 458a64b5f6dcd297ad14db3973256d3880444074
Merge: fe00dfbd 515e9dc7
Author: BsAtHome <bertho@vagrearg.org>
Date: Sat Aug 22 09:39:05 2026 +0200
Merge pull request #4443 from grandixximo/posemath-sincos
posemath: retire pm_sincos
commit c3c6fc2479316fd5015b8448252cece414d0b3d2
Author: david mueller <mueller_david@hotmail.com>
Date: Fri Aug 21 16:51:29 2026 +0200
Glnav: Add is_lathe method
Currently undefined and preview widgets that need it (gremlin, axis, qt5_graphics) override it
commit 2508c98f73a6f4798b2d27fe8a95aeb42c233574
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Sat Aug 22 12:30:25 2026 +1000
emc: cut the nml_intf dependency on tooldata
EMC_TOOL_STAT::operator= has no caller; deleting it builds the tree in
both the default and --enable-toolnml configurations, and its stated
reason, array members, never applied since implicit copy assignment
copies those anyway.
The default state of an entry moves next to the type as
CANON_TOOL_TABLE_INIT, so the constructor no longer borrows
tooldata_entry_init(). Default member initializers would read better but
make the struct non-POD, which clang rejects for tooldata_entry_init(),
declared extern "C" and returning it by value.
commit 6973b377a80b62ba601ef65b0046866f203f1743
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Sat Aug 22 12:04:53 2026 +1000
include-dep-report: bucket by what the build links, not by directory depth
The six libnml subdirectories are in SUBDIRS and each has an empty
Submakefile, present only to satisfy SUBMAKEFILES. Every source is listed
in libnml/Submakefile and links into one libnml.so, so the five-way cycle
the report showed between them was a directory layout, not a dependency.
Fold a subdirectory into its parent when the parent's Submakefile lists
its sources. emc/tp keeps its own bucket, the top-level Makefile builds it
into tpmod.
commit 515e9dc772272f83fdcdc2c3daa4c03ace7f68d0
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Wed Aug 19 22:44:00 2026 +1000
posemath: retire pm_sincos
A two line wrapper around sin() and cos(), writing through pointers. Its
eleven call sites now call sin() and cos() directly, as both files already do
everywhere else. sincos.c and sincos.h go, with the nine module object lists
that named libposemath/sincos.o. $(MATHSTUB) stays on all nine.
-fno-builtin-sin, -cos and -sincos stay. They reach only the realtime compile
and are what stops the compiler folding an adjacent sin()/cos() pair back into
a sincos() libcall that realtime cannot resolve. Afterwards the realtime
_posemath.o still has U sin and U cos and no sincos.
commit 813da03e9e757a93597c2b4d1b81da61cd2fac5b
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Thu Aug 20 00:06:55 2026 +1000
tree: remove includes that nothing in the file uses
104 #include lines across 82 files, of 30 distinct in-tree headers. None of
them provides a name the including file mentions.
Found by taking the names each in-tree header declares, macros, typedefs,
tags, prototypes, extern variables and enum members, and checking whether any
of them appears in the file that includes it. A heuristic that size is going
to be wrong somewhere, so nothing here rests on it: every candidate was then
put to the compiler. 209 came out of the heuristic, all 209 were removed at
once and the tree built, the files that failed had their includes put back,
and this is what survived a build with all of them gone together. Configured
--with-realtime=uspace, no errors and no warnings.
That build does not cover everything. Five of the files are outside what a
uspace configuration compiles, so they were read by hand instead, and two of
them kept their include: rtai_ulapi.c needs rtapi_rtai_shm_wrap.h, which
declares nothing itself and only wraps rtai_shm.h, and fifousr.c takes
FIFO_KEY and FIFO_SIZE from an anonymous enum in its own common.h.
The ones that repeat are rtapi_math.h 21 times, rtapi_string.h 15, config.h
10, block.h 7, rtapi_slab.h and rtapi_mutex.h 6 each.
An include costs nothing to leave in place, which is why these accumulated,
but it is not free to a reader or to a dependency graph: each one asserts a
relationship between two directories that turns out not to exist.
commit fe00dfbd8c9c1ae70a001c533a9e40a44910efa2
Merge: 7a29eb2b d8c9d027
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Sat Aug 22 06:42:08 2026 +0800
Merge pull request #4442 from weblate/weblate-linuxcnc-linuxcnc
Translations update from Hosted Weblate
commit d8c9d02741925e5a66eeb1d253f57a8d3288ccc6
Author: xiezhihai <xiezhihai7321@outlook.com>
Date: Fri Aug 21 21:51:33 2026 +0200
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 88.5% (3434 of 3877 strings)
Co-authored-by: xiezhihai <xiezhihai7321@outlook.com>
Translate-URL: https://hosted.weblate.org/projects/linuxcnc/linuxcnc/zh_Hans/
Translation: LinuxCNC/LinuxCNC
commit 7a29eb2b930825c75cfd4d7698b37b9ea94a564c
Merge: 59b5219c eb0ef6f3
Author: BsAtHome <bertho@vagrearg.org>
Date: Fri Aug 21 17:56:26 2026 +0200
Merge pull request #4430 from grandixximo/classicladder-headers
classicladder: give the headers include guards and their own dependencies
commit 59b5219ccf5fe7e78048c8d8f33ba0b1cecd8bfe
Merge: 6df29fcd 1472affe
Author: BsAtHome <bertho@vagrearg.org>
Date: Fri Aug 21 17:56:06 2026 +0200
Merge pull request #4411 from grandixximo/posemath-split
posemath: split the header, move EmcPose, stop exporting gomath and sincos
commit 6df29fcdabee8b55d240d10f43324f30d33689e9
Merge: 15dd6482 de8c2ef4
Author: BsAtHome <bertho@vagrearg.org>
Date: Fri Aug 21 17:38:16 2026 +0200
Merge pull request #4439 from grandixximo/docs-raster-path
docs: fix the raster test path in hal_port(3)
commit de8c2ef46bf0c95097122081e0d1dc80c32d2f6a
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Sat Aug 22 00:42:42 2026 +1000
docs: fix the raster test path in hal_port(3)
The test program is at tests/raster, not src/tests/raster.
commit 1472affefe4c3bfce272d8334f831aba1f52f709
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Sat Aug 15 15:24:36 2026 +1000
posemath: stop exporting gomath, gotypes and sincos
The build copies gomath.h, gotypes.h and sincos.h into include/, which makes
them part of what LinuxCNC offers to code built against it. Nothing outside
libposemath needs them to be: gomath and gotypes are included by two files,
both part of genserkins, and sincos.h declares one function, a shim over
sin() and cos() that posemath itself calls.
Those users include them by path instead, which is what src/-relative quoted
includes are for, and the three headers come off the exported list. With the
split in place the installed pose math surface is posemath.h and the two
headers under it, plus emcpose.h, in one directory.
Porting genserkins and scorbot off gomath, so that the N-DOF matrix code can
move into posemath and gomath can go, is easier once the symbols are private.
scorbot is already off it: scorbot-kins.c includes gotypes.h and uses nothing
from it, so that include goes here.
gomath.h included rtapi_math.h with quotes, which was right while gomath.h
was itself exported and had to carry its siblings to include/. It is a user
now, so it takes angle brackets, and it reaches the standard headers through
rtapi_math.h rather than around it. gotypes.h wanted float.h for FLT_MAX and
DBL_MAX and gomath.h wanted stddef.h for NULL; rtapi_math.h includes float.h
and rtapi.h includes stddef.h, in both the kernel and the userspace branch.
commit 4206e03e641c939171ac88291662ee940c2b4cbb
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Sat Aug 15 15:23:18 2026 +1000
posemath: move EmcPose next to the pose math it is built from
EmcPose is a machine pose made of a PmCartesian and six more doubles, and
emcpose.c is arithmetic on it. Neither is an NML message, so neither belongs
in nml_intf. The split across two headers was historical as well: emcpos.h
held the type and emcpose.h the operations, and code that wanted the type
included the one that could not stand alone.
Fold both into src/libposemath/emcpose.h and move emcpose.c with it, into
libposemath rather than liblinuxcnc, which is the only in-tree caller anyway
by way of tpmod. emcpos.h stays where it is and includes the new header, so
the hundred and twenty odd files that include it are untouched and out of
tree code keeps compiling.
The declarations gain an extern "C" block. They had none, so a C++ caller
would have compiled and then failed to link; there is no such caller today.
libposemath.so.0 gains the fifteen emcPose entry points and liblinuxcnc.a
loses them. Nothing in userspace calls them.
commit 4015e8d36cefb09921f0f3abc8f76f8a12f9a474
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Mon Aug 17 00:09:45 2026 +1000
posemath: split the header by language
posemath.h declares two libraries in one file: a set of C++ classes with
their operators, and the C API that the real time side uses. The tree already
has a shape for that, in inifile.h and inifile.hh and in hal.h and hal.hh,
where the plain suffix is the C interface and the double one is the C++
interface, so follow it.
posemath.h keeps the C API and gains posemath_types.h, which holds the data
types and the constants. posemath.hh takes the classes, the operators and the
copy templates, and refuses to be compiled as C. posemath.h ends by including
posemath.hh under __cplusplus, so C++ code that includes posemath.h still
gets the classes and nothing out of tree changes. The two headers include
each other and the guards make either order safe.
What this buys is for C++ code: a file that wants no more than PmCartesian,
which is most of what reaches posemath through emcpos.h, can include
posemath_types.h and stop parsing four hundred lines of class declarations.
C compilers were never affected either way, since the classes have always sat
behind an ifdef.
Declaration text is moved verbatim, indentation included. The one edit is
PmAxis, which was an unnamed enum in C and a typedef of the C++ enum PM_AXIS
in C++; the types come first now, so the enum takes its tag and one
definition serves both languages.
Preprocessing posemath.h before and after, in C and in C++, gives the same
declarations in both languages, differing only in the order they appear and
in that PmAxis line. libposemath.so.0 exports the same 390 symbols.
commit 2146e12a2d07497010be208e7750cda25a0ca6b3
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Sat Aug 22 00:29:41 2026 +1000
tests: remove mathtest.c
Nothing builds it. src/tests has no Submakefile and is not in SUBDIRS,
so the file has never been part of any target; it only tested that a
2004-era kernel module linking libm came out with no unresolved symbols.
The concern it stood for is handled by the -fno-builtin-sin, -cos and
-sincos flags at src/Makefile:917 and by the realtime link itself.
It also defines its own isnan() over the bytes of a double, assuming
little-endian IEEE 754, and math_test() has no caller.
commit eb0ef6f3a67120744b5c5c820ca13ebf50e4d064
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Fri Aug 21 10:28:02 2026 +1000
classicladder: give the headers include guards and their own dependencies
30 of the 34 headers in hal/classicladder have no include guard, and 12 do
not compile on their own. They name StrRung, StrSection, StrSymbol, StrStep,
cairo_t or the gtk types without including whatever declares them, and build
only because the file that included them had already got there.
Guards go in first, since including classicladder.h from twelve places
without them redefines everything. Then the twelve name what they use:
classicladder.h for the ladder types, sequential.h for StrStep and
StrTransition in drawing_sequential.h, <gtk/gtk.h> for the five _gtk headers,
<cairo.h> and <stddef.h> for drawing.h, and <stdio.h> for the FILE * in
files.h.
The guards are named CLASSICLADDER_<FILE>_H. The four headers here that had
one already used a leading underscore, which is reserved to the
implementation, so they are renamed to match rather than left as a second
convention in the same directory. Plain uppercase with no underscore is what
most of the tree uses; the prefix is because names like FILES_H, CALC_H and
GLOBAL_H are too general to leave unqualified.
All 34 compile standalone afterwards, one translation unit per header against
the userspace include path, where 22 did before. Full build clean, no errors
and no warnings.
The stdio.h line in files.h is also in #4425, which reaches it from the other
direction; the two overlap by that one line and nothing else.
commit 15dd6482032c8867d9b512200a55a0d165902ef0
Merge: 806e41a3 d6c1a5c2
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Fri Aug 21 22:12:21 2026 +0800
Merge pull request #4437 from BsAtHome/fix_docs-architecture-svg
docs: Update LinuxCNC architecture diagram
commit 806e41a32974553e70d6cb83dcda4502d1626afd
Merge: c5ce4b82 14b07146
Author: BsAtHome <bertho@vagrearg.org>
Date: Fri Aug 21 16:04:21 2026 +0200
Merge pull request #4428 from Sigma1912/SimConfigs_Reorganisation
Sim configs: Vismach reorganisation
commit c5ce4b8265301d02639b32c7e088741586ee4357
Merge: bae5676d f9606a84
Author: BsAtHome <bertho@vagrearg.org>
Date: Fri Aug 21 15:54:34 2026 +0200
Merge pull request #4425 from grandixximo/untangle-cycle
untangle: break the src/ include cycle into three
commit d6c1a5c2b1f226a1c5f5115a8e29b57e707300fd
Author: Bertho Stultiens <bertho@vagrearg.org>
Date: Fri Aug 21 15:19:12 2026 +0200
docs: Update LinuxCNC architecture diagram.
commit bae5676d037f5f68cb4ed7bb70a5cdd90e1a6f55
Merge: 9a4a3537 0690ee38
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Fri Aug 21 08:22:35 2026 +0800
Merge pull request #4405 from BsAtHome/fix_halrmt-ipv4
halrmt: Allow IPv4 as fallback when IPv6 is disabled.
commit 14b07146b5c6670b6362100e94b3d4c954132610
Author: david mueller <mueller_david@hotmail.com>
Date: Thu Aug 20 17:27:01 2026 +0200
SimConfigs: Make sim confis use local vismach models
- Deprecate vismach models in 'src/hal/user_comps/vismach
commit 9a4a35373ad403459c60fa84e4a77a9669d3c7ee
Merge: c8b521a3 2511cf11
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Thu Aug 20 21:46:27 2026 +0800
Merge pull request #4427 from grandixximo/merge-2.9-to-master
Merge branch '2.9' into master
commit 8180987710b210f637af0920139fc41abcef8dcb
Author: david mueller <mueller_david@hotmail.com>
Date: Thu Aug 20 15:17:13 2026 +0200
SimConfigs: Copy orphaned 'maho600gui' to the configs folder
- Also changed the component name to match the file name so the model can actually be loaded into hal
commit 8bd316aa8fb2174ffdcdba4b231c2a0ff72f2e14
Author: david mueller <mueller_david@hotmail.com>
Date: Thu Aug 20 15:12:41 2026 +0200
SimConfigs: Add melfa simulation using the newly added 'three21kins
commit f8eee455bdbfeb5b01d5cdf23bb626b1acde541a
Author: david mueller <mueller_david@hotmail.com>
Date: Thu Aug 20 14:57:16 2026 +0200
SimConfigs: Move rotary- and linear-delta sim configs into their own folder
commit f9606a8459cbe0662b9413f5053079122be04695
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Thu Aug 20 21:20:03 2026 +1000
scripts: read the include statement in a comp declaration section
A .comp only becomes C below its ;; line, but the declaration section above
it has its own include statement, "include" Header ";" at halcompile.g:53,
which halcompile copies into the generated C. Reading only below the line
missed 22 includes across 14 components, five of them naming an in-tree
header.
One is a directory edge the report did not have: mesa_pktgyro_test.comp
takes hal/drivers/mesa-hostmot2/hostmot2.h, so hal/components on
hal/drivers, and the count goes from 136 to 137. Headers reached from both
compiles go from 73 to 77. No cycle changes.
commit 2511cf1174e102d955d3753654873d454dc4fd40
Merge: c8b521a3 5a7a31a2
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Thu Aug 20 17:20:57 2026 +0800
Merge branch '2.9'
Carries #4385 (rs274 private tool mmap) and the improved SITEPY
detection from #4413. Everything else on 2.9 was already in master.
commit 0690ee3877ebe0041b74bb44f2ce9f9035d244e5
Author: Bertho Stultiens <bertho@vagrearg.org>
Date: Tue Aug 18 10:19:56 2026 +0200
halrmt: Allow IPv4 as fallback when IPv6 is disabled.
commit bb1fa4c089c003a6f968feab66344915e204b6f3
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Thu Aug 20 19:43:53 2026 +1000
tree: name stdio in the headers that use FILE
Three exported-or-not headers put FILE * in a prototype without including
stdio, so they only compile where the includer happened to have it already:
emc/rs274ngc/rs274ngc_interp.hh:648 FILE *find_ngc_file(...)
hal/classicladder/files.h:30 char *cl_fgets(..., FILE *stream)
hal/utils/scope_usr.h:261 void write_horiz_config(FILE *fp)
They name it themselves now. stdio.h is a system header, so this adds no
directory dependency and the report still counts 136 edges.
This does not make files.h standalone. It has no include guard around its
prototypes, only around the macro block at the top, and it names StrRung,
StrTimer and StrMonostable without including classicladder.h. Both are
classicladder problems rather than include-path ones.
commit 2fb782361cd0162b9f1e55fe722e5060cc2622a9
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Thu Aug 20 19:34:11 2026 +1000
emc: report the unexpected tool index through rcs_print_error
emcops.cc and emccanon.cc each open coded
fprintf(stderr,"UNEXPECTED idx %s %d\n",__FILE__,__LINE__);
for a tooldata_get() that did not return IDX_OK. emc/nml_intf/interpl.cc
already reports through rcs_print_error() in the same directory and it is the
channel the rest of the NML code uses, so both sites take it.
emcops.cc had no other stdio call, so the <stdio.h> added for that one line
goes away again. emccanon.cc keeps its own, it has 42 more.
No new directory dependency, since emc/nml_intf and emc/task both already
reach libnml/rcs. The report still counts 136 edges and the same three
cycles.
The same line is open coded at five further sites and the same macro is
defined locally in six files. That is a wider cleanup than this PR.
commit 5a7a31a26c30baae5de88a2305c404b5e6d7896e
Merge: 76f6cd63 f61e3fa4
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Thu Aug 20 17:08:52 2026 +0800
Merge pull request #4385 from tzuohann/rs274-private-toolmmap
sai: give rs274 its own tool mmap instead of truncating $HOME/.tool.mmap
commit c8b521a319b74d7f42c118ef4b70f99cd0c0d263
Merge: a67befa7 85065f30
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Thu Aug 20 17:00:07 2026 +0800
Merge pull request #4407 from BsAtHome/fix_test-debug-verbosity
tests: Reduce the debug verbosity so it is easier to see problems in CI
commit 85065f3070468f4c74cc4d30feee4e26eb06253c
Author: Bertho Stultiens <bertho@vagrearg.org>
Date: Tue Aug 18 16:02:25 2026 +0200
tests: Reduce the debug verbosity so it is easier to see problems in CI.
commit 3df82210d2d5e64f791249534325e2b1c1815251
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Wed Aug 19 22:36:06 2026 +1000
scripts: add a directory dependency report for src/
Resolves every #include in the tree the way the compiler that sees it would,
buckets each file into a directory at the granularity of SUBDIRS, and reports
the edges between those buckets as markdown.
The two compiles do not get the same -I. Userspace gets INCLUDE from
src/Makefile, "." plus the "emc" added by src/emc/Submakefile. Realtime gets
only what EXTRA_CFLAGS carries, $(BASEPWD) and the exported include/, so a
quoted emc/... form that compiles in userspace does not compile in a realtime
module. Each file is resolved under the rules of the compile it goes through,
taken from the -objs lists, and .comp sources are scanned below their ;; line
and resolved the way halcompile does, with the component's own directory
first. The exported header set is read out of SRCHEADERS, so it follows what
the build installs rather than a list of its own.
What it prints: the dependency cycles, the cycle edges that are a single
include, any include that would not resolve in a realtime compile, the headers
reached from both compiles, and the exported headers with no user outside
their own directory.
That last-but-one list is the one the graph cannot give. An edge records that
a header was included; it cannot say whether the header was needed to build
the code or to interface to it. A header pulled in by both compiles has to
serve both, so it is where that question has to be asked.
This is what the four commits before it were measured with. On the tree as it
stands it reports three cycles over nine directories, all inside libnml or
between a pair; before them it was one cycle over seventeen.
commit 8e9d79dbd50700105d578fca6b39e5c816e5098d
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Wed Aug 19 22:29:20 2026 +1000
emc: move emcmotcfg.h to the interface directory
emcmotcfg.h holds compile-time sizes and defaults and includes nothing. It
is an exported header and every user takes it as <emcmotcfg.h> out of
include/, so nothing about how it is reached changes and no source needs
touching. What changes is which directory owns it: emc/kinematics (9
includes), emc/nml_intf (3) and emc/ini (1) depended on emc/motion for this
header and for nothing else.
emc/motion/Submakefile existed only to copy it into include/, so it goes,
and emc/motion comes off SUBDIRS with it.
What is left of the cycle is three small ones: libnml's five directories
among themselves, emc/nml_intf with emc/tooldata, and emc/motion with
emc/tp.
commit 14237de641f7aea7fe1a04d91b07b3c206b7b97b
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Thu Aug 20 13:29:05 2026 +1000
emc: move the interpreter and motion interface types into nml_intf
Four includes in emc/nml_intf reached up into emc/rs274ngc, and one in
emc/rs274ngc reached into emc/motion, for types that neither of those
directories owns.
state_tag_t is filled in by the interpreter and carried in motion messages
and in TC_STRUCT; its own header says the info "isn't actually used by
motion directly". StateTag is its C++ form, embedded in canon.hh, emc.hh
and emc_nml.hh, and emc/nml_intf/Submakefile already compiled modal_state.cc
into libemc from across the tree. Both move to emc/nml_intf, which is where
the rest of the shared interface already lives.
emc_nml.hh included rs274ngc.hh, and so the whole interpreter class
hierarchy, for three array sizes. ACTIVE_G_CODES, ACTIVE_M_CODES and
ACTIVE_SETTINGS move into emc/nml_intf/interp_codes.h, included by
interp_base.hh where they were and by emc_nml.hh where they are used.
Two includes go with that. modal_state.cc included interp_base.hh and used
nothing from it. emcmodule.cc was reaching debugflags.h through the
rs274ngc.hh chain and now names it.
emc/nml_intf no longer depends on emc/rs274ngc and emc/rs274ngc no longer
depends on emc/motion, which takes emc/rs274ngc, emc/ini and
emc/pythonplugin out of the cycle.
Twelve libc includes go in with it. emc_nml.hh no longer pulls in the
interpreter header chain, and eight files under emc/ were reaching stdio.h,
stdlib.h and unistd.h through it rather than naming them. On Debian sid that
chain does not lead there and getpid() in shcom.cc and emcsvr.cc does not
compile; on bookworm and trixie it still does, which is why one package job
caught it and the rest did not.
commit a67befa7e080c17f8076c9bf1ad47e9443080f59
Merge: 25310d3d 6aafad75
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Thu Aug 20 11:20:07 2026 +0800
Merge pull request #4403 from BsAtHome/fix_emcrsh-ipv4
linuxcncrsh: Allow IPv4 as fallback when IPv6 is disabled
commit 76f6cd63165c6fb06ca67d2ed317693ada10a1a6
Merge: 2895ccdf aa6d0b92
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Thu Aug 20 09:37:30 2026 +0800
Merge pull request #4413 from NTULINUX/generic-sitepy
Fix python site-packages dir
commit 2895ccdfcf805d5827be2180d4998e80f2d21828
Merge: 31fedeab 290251cd
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Thu Aug 20 09:37:00 2026 +0800
Merge pull request #4412 from NTULINUX/generic-tcllibpath
Drop the need for exporting TCLLIBPATH, use system path
commit 25310d3dea70bdc3f0fdd09f29eb2e72a34399c5
Merge: 53df060f 773474d7
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Thu Aug 20 08:13:28 2026 +0800
Merge pull request #4417 from BsAtHome/fix_gmoccapy-cycle-time
gmoccapy: Fix reading [DISPLAY]CYCLE_TIME when set as a real
commit 773474d714c592dc7a323e910bc3ca4af46bd6b3
Author: Bertho Stultiens <bertho@vagrearg.org>
Date: Wed Aug 19 13:50:45 2026 +0200
gmoccapy: Fix reading [DISPLAY]CYCLE_TIME when wrongly set as a real value.
commit 6aafad755bc0864b4e4365e51a3b11172177326f
Author: Bertho Stultiens <bertho@vagrearg.org>
Date: Mon Aug 17 23:39:49 2026 +0200
linuxcncrsh: Allow IPv4 as fallback when IPv6 is disabled.
commit aa6d0b927e6dd8f24d3445a463bd44b03c92a92d
Author: Alec Ari <neotheuser@ymail.com>
Date: Sat Apr 25 03:09:43 2026 -0500
Fix python site-packages dir
Suggested-by: Luca Toniolo <luca@aitalmac.com>
Signed-off-by: Alec Ari <neotheuser@ymail.com>
commit 53df060fecb55876715324dc2c7135a32c29f82c
Merge: 0bb86dd6 c951b47e
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Wed Aug 19 21:44:59 2026 +0800
Merge pull request #4349 from Zia-research/docs-audit-fixes
docs: correct statements that no longer match the source (Code Notes, G-code, HAL)
commit 5842686f5bea618d20a8eba12df74a44df236d06
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Wed Aug 19 22:28:53 2026 +1000
hal: move setps_util beside the code that links it
setps_util.c is named in hal/Submakefile for the python module and in
hal/utils/Submakefile for halcmd, halsh and halrmt, so hal/ was reaching
down into hal/utils/ for both a source file and a header. It is shared HAL
support rather than a halcmd utility, so it moves up to hal/ and its three
users in hal/utils/ name the new path.
The same object is built into the same four targets. With the edge gone
hal and hal/utils leave the include cycle, which is down to 8 directories.
commit 6b18f6ad542c190b20f7968ae4a88a380f69702f
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Wed Aug 19 22:28:42 2026 +1000
rtapi: drop the unused hal.h include
uspace_rtapi_main.cc includes <hal.h> and uses nothing declared in it. The
one HAL entry point it reaches, hal_comp_invoke_make(), is resolved with
dlsym() through a function pointer typedef written beside the call, so the
declaration in hal.h is never consulted.
That include is the only thing making rtapi depend on hal. Removing it
splits the tree's single 17 directory include cycle into one of 10 and one
of 5, and leaves rtapi and libposemath with no cycle at all.
commit c951b47eea755adc92d3e8c849786250702fbc7d
Author: Zia-research <309084419+Zia-research@users.noreply.github.com>
Date: Sun Aug 9 19:48:35 2026 +0200
docs: ini-config - the S-curve jerk threshold is 1.0, not non-zero
The PLANNER_TYPE entry said S-curve planning is active when
PLANNER_TYPE = 1 AND MAX_LINEAR_JERK > 0. The threshold is 1.0: both
routes that set the planner type force it back to trapezoidal below
that, inihal.cc:302 and :320 on the HAL side and initraj.cc:159 on the
INI side, the latter under its own "FIXME: Should write a warning
message to the user".
So a configuration with PLANNER_TYPE = 1 and MAX_LINEAR_JERK = 0.5
satisfies the documented condition and does not get S-curve planning,
without being told.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
commit 4452c5190b4b216231576102d3ea7914f615012a
Author: Zia-research <309084419+Zia-research@users.noreply.github.com>
Date: Sun Aug 9 19:26:36 2026 +0200
docs: apply the review on #4349
Six of the eight review comments, applied.
- the command note now names ENABLE_WATCHDOG, DISABLE_WATCHDOG and
SET_TELEOP_VECTOR and carries no counts and no date, so it cannot go
stale the way 73/70 and 6/5/2020 did
- the ENABLE requirement no longer claims a hardware enable chain must be
satisfied; motion.enable defaults to TRUE and an unconnected machine is
never refused
- PAUSE cut to the two sentences the behaviour needs plus the
synchronized-motion exception; the jerk sentence goes with it, which
also removes the duplicate of ini-config.adoc
- the two parentheticals that had the document tracking its own history
are gone, and the only British spelling in the file went with the first
of them
- the velocity-limit line comes back to g-code.adoc as a NOTE in both the
G33 and the G33.1 lists, worded to say only what has been read: there is
no interpreter check and no error message for that case
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
commit 7fa8e6dfda3b257ee4c307799fda110f564c597e
Author: Zia-research <309084419+Zia-research@users.noreply.github.com>
Date: Mon Aug 3 19:23:31 2026 +0200
docs: g-code - align G33/G33.1, G64 and G96 error lists with the interpreter
Each change verified against src/emc/rs274ngc at the current source:
- G33 and G33.1: the error lists claimed "The requested linear motion
exceeds machine velocity limits due to the spindle speed". No such
check exists anywhere - the interpreter's only checks are axis word
present, K present, F absent, valid $, and spindle commanded turning
(interp_check.cc:375-378, interp_convert.cc:5496-5529). Replaced the
phantom error with the two real ones that were missing (K word
required, F word forbidden), and stated that "spindle not turning"
tests the commanded state (M3/M4), which is what
settings->spindle_turning holds.
- G33.1: documented that an I word below 1 is treated as 1
(interp_convert.cc:5522-5527).
- G64: documented that changing path control mode is an error while
cutter radius compensation is active ("Cannot change control mode
with cutter radius compensation on", interp_convert.cc:2221).
- G96: removed "A feed move is specified in G96 mode while the spindle
is not turning" from the error list. No such check exists in the
interpreter, task or motion; the spindle-not-turning checks apply
only to G33/G33.1/G76 and the tapping cycles. Documented that
without D the interpreter applies no RPM limit in CSS mode
(SET_SPINDLE_MODE is called with 1e30, interp_convert.cc:5087).
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
commit 2dd96e3a9cf026e5eae8696eeabe112a6618c302
Author: Zia-research <309084419+Zia-research@users.noreply.github.com>
Date: Mon Aug 3 19:23:31 2026 +0200
docs: code-notes - correct stale and self-contradictory statements
Seven corrections, each verified against the current source:
- Buffer line types: only SHMEM, LOCMEM and PHANTOM are implemented.
FILEMEM and GLOBMEM are recognised nowhere in src/libnml/; RTLMEM is
rejected explicitly by cms_config(). (cms_cfg.cc:729,819,844,849)
- OVERRIDE_LIMITS: the "currently broken" note described a bug fixed
long ago. Limits are automatically re-enabled at the end of the next
jog, and only tripped limits are overridden, via a mask built from
the joints' hard-limit flags. (command.c:702-730)
- The 2020 command-count note: figures updated 73/70 -> 76/73 (the
same three commands still lack handlers).
- PAUSE: documented the actual semantics - deceleration to a stop
within the current segment at that segment's acceleration limit, and
the exception that pause is bypassed during position-synchronized
(threading / rigid tapping) segments. (tp.c:243-252,2782-2787)
The run-down is jerk-limited only where the S-curve planner is
selected: [TRAJ]PLANNER_TYPE defaults to 0 = trapezoidal
(emccfg.h:57, initraj.cc:157) and is forced back to 0 when jerk is
below 1.0 (initraj.cc:159-162, inihal.cc:302,320), while MAX_JERK
itself defaults to 0 (emccfg.h:51,70,87). tp.c enters the S-curve
branch only for type 1 (tp.c:3660,3664), so a stock machine never
plans one.
Velocity-synchronized segments are the G95 feed-per-revolution case,
not G96. G_95 enqueues SET_FEED_MODE(spindle, 1)
(interp_convert.cc:2841-2846); SET_FEED_MODE is the only writer of
canon.feed_mode (emccanon.cc:521), and every call that passes
velocity_mode = 1 to START_SPEED_FEED_SYNCH is guarded by it
(emccanon.cc:530 and the feed-mode restore sites), which yields
TC_SYNC_VELOCITY (tp.c:4159-4162). The interpreter's own calls for
G33, G33.1 and G76 all pass 0 (interp_convert.cc:5505,5520,
5644-5662), and G96 goes through SET_SPINDLE_MODE instead
(interp_convert.cc:5075-5087).
Thanks to grandixximo for three catches in this one paragraph: the
first wording implied jerk limiting always applies; its replacement
gave the threshold as "non-zero" when a jerk below 1.0 forces the
planner back to trapezoidal; and the velocity-synchronized sentence
said G96.
- ENABLE / STEP Requirements: neither is "always accepted". ENABLE is
rejected while the motion.enable HAL pin is low (command.c:1366);
STEP is rejected unless the planner is already paused
(command.c:1261).
- EMCIO chapter: removed the leftover "iocontrol main loop process"
wording that contradicted the chapter's own first line; noted the
iocontrol.0 / [EMCIO] names are kept for compatibility.
- Reckoning of joints and axes: the initraj.cc:loadTraj() example
pointed at code that has since been fixed to handle all nine axes.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
commit cf8283818be06821edbe0b4838863439e7ad92da
Author: Zia-research <309084419+Zia-research@users.noreply.github.com>
Date: Mon Aug 3 19:23:30 2026 +0200
docs: initf example funct is lcec.activate, not lcec.0.activate
The linuxcnc-ethercat driver exports its activation funct globally:
rtapi_snprintf(name, HAL_NAME_LEN, %s.activate, LCEC_MODULE_NAME);
(src/lcec_main.c:408 in linuxcnc-ethercat at 87a72a8). Only the cyclic
read/write functs are per-master (lcec.<master>.read / .write). A user
copying the manual's example into a .hal file gets a funct that does
not exist.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
commit 290251cda68faa8ae0457dd51bccb23eaa63c455
Author: Alec Ari <neotheuser@ymail.com>
Date: Mon Jun 8 09:24:23 2026 -0500
Drop the need for exporting TCLLIBPATH, use system path
Signed-off-by: Alec Ari <neotheuser@ymail.com>
commit 0bb86dd6675ecdcd8646b14a4e5d5de2820bf386
Merge: 185f4866 8da75f1a
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Wed Aug 19 13:05:39 2026 +0800
Merge pull request #4410 from grandixximo/docs-adoc-xref-fence
docs: fix the two remaining htmldocs CI warnings
commit 185f486621357c97b31df3ae6092b187cf9d6a32
Merge: 64485b96 7995b5c5
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Wed Aug 19 11:21:45 2026 +0800
Merge pull request #4409 from weblate/weblate-linuxcnc-linuxcnc-docs
Translations update from Hosted Weblate
commit 8da75f1a8f39d8b39236c1e960826c49dd788550
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Wed Aug 19 12:51:06 2026 +1000
docs: use a listing block instead of a markdown fence in hm2_rpspi.9
The rc.local example was written as a markdown-style ``` fenced block.
Asciidoctor renders that correctly for English, but po4a's asciidoc parser
does not recognise the fences: it extracts the block as an ordinary
paragraph and reflows it onto one line. In every translated build the
opening fence then read as an unterminated listing block, so asciidoctor
warned about it and swallowed the rest of the page. The German manpage,
for example, lost the NOTE, AUTHOR and LICENSE sections entirely and put
the shell commands in a data-lang attribute.
With a proper ---- listing block po4a classifies it as a verbatim block
and keeps the line breaks, and the translated pages render in full.
commit 4b7e696d91456cc14ca0a6f5ecdd935458cfc9a8
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Wed Aug 19 12:51:06 2026 +1000
docs: fix broken lcnc_realtime cross-references in python-hal-interface
The three links to the LinuxCNC realtime check used inter-document xref
syntax (xref:python-lcnc_realtime.adoc[]). The documentation is built as a
single book, so asciidoctor emitted href="#python-lcnc_realtime.adoc",
a fragment that does not exist anywhere in the output. htmlcheck.sh
reported the resulting broken fragments for every language.
Use the anchor the target chapter actually declares,
<<cha:python-lcnc_realtime>>, matching the reference style already used in
hal/halmodule.adoc.
commit 7995b5c5e4bb72c688828d5d7dafc4405beacdbf
Author: Américo Monteiro <a_monteiro@gmx.com>
Date: Wed Aug 19 03:52:18 2026 +0200
Translated using Weblate (Portuguese)
Currently translated at 29.5% (10038 of 33994 strings)
Author: Américo Monteiro <a_monteiro@gmx.com>
Co-authored-by: Américo Monteiro <a_monteiro@gmx.com>
Translate-URL: https://hosted.weblate.org/projects/linuxcnc/linuxcnc-docs/pt/
Translation: LinuxCNC/LinuxCNC Documentation
commit 0fa28088c668fe948f8196ba9386aa2e08db32c7
Author: Luca Toniolo <toniolo.luca@outlook.com>
Date: Wed Aug 19 03:52:15 2026 +0200
Translated using Weblate (German)
Currently translated at 99.6% (33891 of 33994 strings)
Author: Luca Toniolo <toniolo.luca@outlook.com>
Co-authored-by: Luca Toniolo <toniolo.luca@outlook.com>
Translate-URL: https://hosted.weblate.org/projects/linuxcnc/linuxcnc-docs/de/
Translation: LinuxCNC/LinuxCNC Documentation
commit 282bf5fb5d2cbcf0f370bab10c8ebc7432ba6c65
Author: Salvador Peña <salvadorp74@hotmail.com>
Date: Wed Aug 19 03:52:13 2026 +0200
Translated using Weblate (Spanish)
Currently translated at 33.2% (11315 of 33994 strings)
Author: Salvador Peña <salvadorp74@hotmail.com>
Co-authored-by: Salvador Peña <salvadorp74@hotmail.com>
Translate-URL: https://hosted.weblate.org/projects/linuxcnc/linuxcnc-docs/es/
Translation: LinuxCNC/LinuxCNC Documentation
commit f61e3fa40c5a0aa079fe7bb9389c4869757e7c37
Author: tzuohann <2057796+tzuohann@users.noreply.github.com>
Date: Tue Aug 18 20:16:24 2026 -0400
tooldata: use nullptr rather than casting 0 to a pointer
BsAtHome, review 2026-08-18: `(char*)0` is a hand-written null pointer. Both
occurrences in tooldata_mmap.cc now use nullptr. No behaviour change.
commit 64485b9624d9c8efdb4f66174808acf0c8248dda
Merge: 0f0cda35 e09b80d5
Author: c-morley <c-morley@users.noreply.github.com>
Date: Tue Aug 18 16:22:22 2026 -0700
Merge pull request #4402 from alex-pres/fix-qt5_graphics-bg
qt5_graphics bg fix
commit e09b80d5e6463b239c164d61e4094725546d0793
Author: Alexey Presnyakov <309782758+alex-pres@users.noreply.github.com>
Date: Tue Aug 18 11:49:48 2026 +0400
qt5_graphics bg fix #4379
invalid vertex shaped used for background drawing
commit 31fedeabffae4f67199e466f843c7252d22d9de7
Merge: a3dcd6b0 8ee4b896
Author: BsAtHome <bertho@vagrearg.org>
Date: Tue Aug 18 09:35:50 2026 +0200
Merge pull request #4396 from grandixximo/mesa-modbus-deprecate-2.9
mesa_modbus: mark as superseded by hm2_modbus (2.9 backport)
commit 0f0cda35c1c6744baaa0afb58632984628194580
Merge: 8a8d449f 0bc80c5e
Author: BsAtHome <bertho@vagrearg.org>
Date: Tue Aug 18 09:34:23 2026 +0200
Merge pull request #4399 from grandixximo/gstat-file-loaded-pending
hal_glib: defer file-loaded when the interp is already running
commit 8a8d449fadc17467c7c3f28ca3197d4385d9c0a2
Merge: a130105a ff925d40
Author: BsAtHome <bertho@vagrearg.org>
Date: Tue Aug 18 09:32:44 2026 +0200
Merge pull request #4387 from grandixximo/posemath-cleanup
posemath: drop the dead knobs and give it its own directory
commit a130105ae3b47678ee496e5c3583aa2f4bab3774
Merge: 7bfe887c c83bc111
Author: BsAtHome <bertho@vagrearg.org>
Date: Tue Aug 18 09:32:24 2026 +0200
Merge pull request #4394 from grandixximo/headless-ci
CI: test headless (--disable-gui) build
commit 7bfe887cdbb415f3cb12fbf53ef4a54ad38fb6fb
Merge: 7a029f40 c141dc62
Author: BsAtHome <bertho@vagrearg.org>
Date: Mon Aug 17 21:54:58 2026 +0200
Merge pull request #4372 from grandixximo/switchkins-n
switchkins: allow more than three kinematics types
commit 7a029f408029d7224336d3b64fa0653fd4598973
Merge: b3a596f9 485413ad
Author: BsAtHome <bertho@vagrearg.org>
Date: Mon Aug 17 21:53:59 2026 +0200
Merge pull request #4398 from grandixximo/fix-4397-motion-logger-expected
tests: add missing SET_SCURVE_PEAK_SCALE to m98m99 expected output
commit 485413ad0ae265f17e35dd25c660f5cc9de89857
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Mon Aug 17 23:19:09 2026 +1000
tests: add missing SET_SCURVE_PEAK_SCALE to m98m99 expected output
The SCURVE_PEAK_SCALE change updated the expected files under
tests/motion-logger/ but missed the one in
tests/interp/m98m99/12-M99-endless-main-program.
Fixes #4397
commit 0bc80c5ed9d7e21c3d4fe702c4eb018428d44b81
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Mon Aug 17 20:53:31 2026 +0800
hal_glib: defer file-loaded when the interp is already running
GSTAT only emits 'file-loaded' if the poll that first sees stat.file
change finds the interp IDLE. A client doing program_open + AUTO_RUN
back to back starts the program within ms, so every 100 ms poll sees
the file with the interp busy, the remap guard swallows the change,
and the signal is never emitted: gmoccapy sits at 'No Program loaded'
with an empty editor and preview after an externally driven run, and
whether it does depends on poll timing.
Emit a skipped change on the first poll with the interp back at IDLE.
Remap protection unchanged: merge() ignores the file name at call
level != 0.
commit c141dc62bebc7cc580a2f96fdde3dd7e91583bbd
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Mon Aug 17 23:07:14 2026 +1000
docs: outline the two routes to a kinstype
The Code Notes describe switchkinsSetup() and switchkinsRegister()
separately but never show them together, and this PR adds the second
route without an in-tree caller to read.
Add an outline of one switchkinsSetup() filling in types 0 to 2 through
the pointer arguments and registering a fourth, and say plainly that no
in-tree module registers one yet.
commit b3a596f9044f7b27bd3e901881851a943c9a32aa
Merge: 000c0a40 478e2b6b
Author: BsAtHome <bertho@vagrearg.org>
Date: Mon Aug 17 14:07:19 2026 +0200
Merge pull request #4370 from Sigma1912/Vismach_Add-functions
Vismach: Merge functions from twp-vismach.py
commit ff925d400307057b513df0b323c87e31edd5d6a2
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Sat Aug 15 12:57:49 2026 +1000
posemath: move out of libnml into its own directory
posemath is not part of NML and never has been. It includes nothing from
libnml, uses none of its types, and builds into its own shared library,
libposemath.so. The only edge between them runs the other way: cms_pm.cc
includes <posemath.h> to serialise the classes.
Sitting inside libnml/ made it look like an NML component, which is
misleading for anyone reading the tree and awkward for anything that wants
to depend on the maths without the messaging.
Pure move. The files are unchanged, and what follows is the paths that
named the old location: the Submakefile's own prefixes, the SRCHEADERS
entries and per-module object lists in src/Makefile, the two USE_TOPDIR
includes in tpcomp.comp, and the copyright stanza in debian/.
SUBDIRS gains libposemath as an entry of its own rather than one buried in
the libnml group, since that grouping was the thing being corrected.
commit 754b3f89e14bc851c63514f9936c0984bf23496f
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Sat Aug 15 12:56:26 2026 +1000
posemath: drop the knobs that are never turned
posemath.h carries four switches that have only ever had one setting, and
they hide what the declarations actually say.
USE_CONST, USE_CCONST and USE_REF are defined unconditionally a few lines
above the blocks that test them, so PM_CONST and PM_CCONST are always
const and PM_REF is always a reference. Spelling them out turns
declarations like
PM_CARTESIAN(PM_CONST PM_SPHERICAL PM_REF s);
into what they have always meant:
PM_CARTESIAN(const PM_SPHERICAL & s);
INCLUDE_POSEMATH_COPY_CONSTRUCTORS is guarded by __cplusplus < 201103L, so
it is never defined in a tree built as C++20. The comment beside it
already explains that the compiler generates better copy constructors than
the ones it hides, and every one of them has been dead code since the move
to C++11.
PM_LOOSE_NAMESPACE would typedef VECTOR, MATRIX, POSE and friends into the
global namespace. Nothing defines it.
The remaining #if 0 blocks go too: the norm() declarations and their
definitions, and a note about a call being ambiguous on g++ 2.8 and 2.9.
The deliberate poison macro for pmCartNorm() stays, since it is there to
turn a use into a compile error rather than to be compiled out.
No behaviour change: the preprocessor already resolved all of this the same
way on every build.
commit c83bc111b47d81180e26220b08b883a758a3615c
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Mon Aug 17 19:19:19 2026 +0800
CI: add rip-headless job testing --disable-gui builds
keeps working. The new rip-headless job configures with --disable-gui
--disable-manpages --disable-build-documentation using a minimal
dependency set without X11, Tk or GTK development packages, so a
regression that reintroduces a GUI dependency into the headless build
fails at configure or build time instead of being masked by full
build-deps. After the build it asserts that GUI artifacts (axis,
touchy, halshow, pyvcp, ...) are absent and core headless artifacts
(linuxcncrsh, halcmd, halui, ...) exist, then runs the full test
suite.
Also included, all found by running the full suite on a headless
build:
- pyvcp and gladevcp were still built with --disable-gui (#4364
guarded only the install rules); guard USER_COMP_PY in
hal/user_comps/Submakefile.
- preview_helpers.py moved from the GUI-gated gremlin directory to
lib/python: it is a pure-Python helper needed by the GUI-free
tests/interp_initcode test.
- Tests needing Tcl/GUI bits a headless build does not provide
(pyvcp, twopass, twopass-personality, tclsh-extensions, tooledit,
ui-smoke) get skip scripts, the mechanism the ui-smoke tests
already use. The ui-smoke skip helper now takes the GUI binary
under test as an argument.
commit 8ee4b8968bffbe1f819821c0238956bdab6e7e76
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Mon Aug 17 19:01:36 2026 +0800
mesa_modbus: mark as superseded by hm2_modbus (2.9 backport)
Backport of the master deprecation with status adjusted for 2.9, per
the PR #4386 and #4396 review discussions: mesa_modbus is superseded
by the hm2_modbus driver and mesambccc-compiled MBCCB files. It
remains available throughout the 2.9 series, while new configurations
are encouraged to migrate.
Only build-time and documentation notes in 2.9, no load-time warning:
the driver is still fully supported in this series, so a nudge at
modcompile time is enough.
Add a stderr note to modcompile and notes in the README, the
mesa_modbus driver doc, the modcompile man page and the docs index.
commit 000c0a401f7dd1e8b684a42aaccc56b60fdc7ba2
Merge: 90f3f5df e620cf96
Author: BsAtHome <bertho@vagrearg.org>
Date: Mon Aug 17 13:06:26 2026 +0200
Merge pull request #4395 from grandixximo/rtapi-math-constants
rtapi: define the math constants that are missing in kernel space
commit 90f3f5dfeed88869cd8145a5c0b6d94073cee7da
Merge: 204a6f05 d5503143
Author: BsAtHome <bertho@vagrearg.org>
Date: Mon Aug 17 13:01:31 2026 +0200
Merge pull request #4312 from grandixximo/issue-4300-docs
docs: add standalone pyvcp testing example
commit 204a6f050a94acad06016956dcff5fb8b089484e
Merge: b40cee65 46074f8c
Author: BsAtHome <bertho@vagrearg.org>
Date: Mon Aug 17 12:48:06 2026 +0200
Merge pull request #4386 from grandixximo/mesa-modbus-deprecate
mesa_modbus: deprecate in favor of hm2_modbus
commit b40cee65092baafe829406ed862abb5b82bccc33
Author: sliptonic <shopinthewoods@gmail.com>
Date: Mon Aug 17 05:43:49 2026 -0500
Feature/mtconnect/agent (#4318)
mtconnect: native MTConnect agent for LinuxCNC
commit 8c8e0484707794c3d0706679653d108e049a505c
Author: tzuohann <2057796+tzuohann@users.noreply.github.com>
Date: Sun Aug 16 00:36:52 2026 -0400
sai: give rs274 its own tool mmap instead of truncating $HOME/.tool.mmap
tool_mmap_creator() opens the file O_RDWR|O_CREAT|O_TRUNC
(tooldata_mmap.cc:33, used at :135) and sai calls it at driver.cc:570 --
before getopt() at :578. Every rs274 invocation therefore empties
$HOME/.tool.mmap, including `rs274 --help` and including one that supplies
-t, since -t is not read until :583.
That file is not scratch space: tool_mmap_fname() builds it from
secure_getenv("HOME") with a fixed name, and io, milltask, halui and the
Python bindings all map that same inode MAP_SHARED. An offline parse run
beside a live session therefore replaces the running machine's tool table
with the compiled-in sample table. O_TRUNC preserves the inode, so nothing
re-maps and nothing is notified: the session simply observes its tools
change. Observed on a machine using [EMCIO]DB_PROGRAM -- 15 tools became the
4 sample entries mid-session, G43 applied 0.0000 for a tool that was no
longer in the table, and the tool-number/drawbar guard inhibited jog and
feed. DB_PROGRAM neither prevents nor repairs it: ioControl.cc creates the
mmap before the DB_ACTIVE branch, and io does not re-read afterwards.
Give sai its own file and unlink it on exit. tool_mmap_close() already
unlinks and tool_mmap_fname() already honours a preset filename -- this only
adds the setter to reach it. io and milltask are untouched and remain the
only creators of the shared file.
Two points from review, both addressed here:
mkstemp(), not a name built from the pid (grandixximo). TMPDIR is
world-writable and a pid is guessable, and the creator opens without O_EXCL
or O_NOFOLLOW, so a predictable name can be pre-created as a symlink and the
victim's rs274 then truncates the attacker's chosen file -- and an attacker
can blanket a pid range in advance. mkstemp() creates it atomically with
O_EXCL and mode 0600, and TOOL_MMAP_CREATOR_OPEN_FLAGS gains O_NOFOLLOW so
the creator refuses a symlink at that path even if one appears in the gap.
tool_mmap_close() is now safe as an atexit handler (BsAtHome). It called
exit(EXIT_FAILURE) when munmap failed, and calling exit() from within an
atexit handler is undefined behaviour; _exit would skip the remaining
handlers, so that is not the answer either. It now reports the failure,
closes the fd and returns.
Reproduce before the change:
rm -rf /tmp/rsx && mkdir -p /tmp/rsx
HOME=/tmp/rsx rs274 -g /dev/null
# /tmp/rsx/.tool.mmap, last_index=4, holding
# T1 z0.511 d0.125 / T2 z0.100 d0.0625 / T3 z1.273 d0.201 / T99999 P123
After: rs274 writes $TMPDIR/rs274.tool.mmap.XXXXXX, removes it on exit, and
does not open $HOME/.tool.mmap. Verified on a live machine: an rs274 run with
the real $HOME left last_index=15 and every tool untouched.
commit e620cf96687526f56393f3a78c4fb242d66d5a35
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Sun Aug 16 23:47:08 2026 +1000
rtapi: define the math constants that are missing in kernel space
The math constants are not in ISO C. Userspace takes them from math.h; a
kernel build takes the other branch of this header, which includes no math.h,
so the header already defines M_PI, M_PIl and M_PI_2l when they are absent.
The other twelve of glibc's set are absent in kernel space, so using one in
real time code builds on uspace and fails on RTAI. Define them under the same
guard, with the values glibc uses. M_PI itself was spelled with the long
double digits truncated; it rounds to the same double, but write it as glibc
does. The typed variants are left out apart from the two already here.
commit 5ee1ecefa8f2e9070d65a2f190e5f0a102807fea
Merge: d19b5bd9 556fd7b6
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Sun Aug 16 20:24:55 2026 +0800
Merge pull request #4392 from grandixximo/dead-motion-cmds
motion: remove dead commands ENABLE_WATCHDOG, DISABLE_WATCHDOG, SET_TELEOP_VECTOR
commit d19b5bd985e31225f395dd9f7816b8937682bbc8
Merge: 5cb34168 ac15ce8a
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Sun Aug 16 20:24:06 2026 +0800
Merge pull request #4390 from grandixximo/jerk-fallback-warn
ini: warn when PLANNER_TYPE=1 falls back to trapezoidal due to low jerk
commit 556fd7b6c9abec874b01f8f25c13e4efae76bc94
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Sun Aug 16 19:27:37 2026 +0800
motion: remove dead commands ENABLE_WATCHDOG, DISABLE_WATCHDOG, SET_TELEOP_VECTOR
No handler in command.c, no sender anywhere in the tree; the only
references were unreachable log cases in motion-logger.c. Remove the
enum entries, the logger cases, and the Code Notes sections that
documented them. Fixes #4359.