Skip to content

configure: update to latest config.guess and config.sub - #6

Open
github-actions[bot] wants to merge 3289 commits into
masterfrom
periodic/update-configure
Open

github-actions[bot] wants to merge 3289 commits into
masterfrom
periodic/update-configure

Conversation

@github-actions

@github-actions github-actions Bot commented Jan 3, 2024 •

Copy link
Copy Markdown

This updates config.guess and config.sub to their latest versions.
If the two files are deleted in this PR, please check the logs of the workflow here:
Workflow run summary

Automated changes by create-pull-request GitHub action

@github-actions
github-actions Bot force-pushed the periodic/update-configure branch from 6dde1e1 to 5936025 Compare February 7, 2024 10:35
@github-actions
github-actions Bot force-pushed the periodic/update-configure branch from 0e6b2b8 to 5c99be3 Compare March 6, 2024 10:37
@github-actions
github-actions Bot force-pushed the periodic/update-configure branch from d288976 to 39441b0 Compare April 3, 2024 10:35
@github-actions
github-actions Bot force-pushed the periodic/update-configure branch from c0ed318 to e2c6fd7 Compare May 1, 2024 10:38
@github-actions
github-actions Bot force-pushed the periodic/update-configure branch from e2c6fd7 to f547ed5 Compare August 7, 2024 10:38
@github-actions
github-actions Bot force-pushed the periodic/update-configure branch from f547ed5 to 35ebcb3 Compare November 6, 2024 10:41
@github-actions
github-actions Bot force-pushed the periodic/update-configure branch from f998d32 to 8cc8db2 Compare August 30, 2025 15:38
ninsbl and others added 16 commits July 13, 2026 12:50
…OSGeo#7672)

* set sqlite as default backend on init

* read tgis_db_version from globals if no DB is initialized

* add tests for STDS construction
…OSGeo#7337)

* move to Tools API

* add upper/lower filter range options) (backwards compatible) for both vector and raster based filtering

* propagate options of underlying tools (r.clump)

* add tests

Co-authored-by: Markus Neteler <markus@neteler.org>

* Edit html

* Unchange header line

* typos

---------

Co-authored-by: Edouard Choinière <27212526+echoix@users.noreply.github.com>
Co-authored-by: Markus Neteler <markus@neteler.org>
…e function" (OSGeo#7673)

Follow-up from OSGeo#7660

This PR applies the same logic as the other PR, where how sscanf can also return EOF "if input failure occurs before the first receiving argument was assigned". (See https://en.cppreference.com/c/io/fscanf).

Here, the little touch that is different for `raster/r.out.vtk/writeascii.c` and `raster3d/r3.out.vtk/writeVTKData.c`, is that I assume that if there's the `EOF` case, or any invalid case for the `null_value`, we would still want the null value to be 0. I think that's the design intention behind the code.


This was assisted by AI (Copilot-generated fix suggestions for code scanning alerts), but we can reason through it and I applied some myself in order to batch them in one single PR.

This should fix:
- https://github.com/OSGeo/grass/security/code-scanning/525
- https://github.com/OSGeo/grass/security/code-scanning/526
- https://github.com/OSGeo/grass/security/code-scanning/527
- https://github.com/OSGeo/grass/security/code-scanning/528
- https://github.com/OSGeo/grass/security/code-scanning/531
- https://github.com/OSGeo/grass/security/code-scanning/532
- https://github.com/OSGeo/grass/security/code-scanning/533


* Potential fix for code scanning alert no. 525: Incorrect return-value check for a 'scanf'-like function

Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>

* Potential fix for code scanning alert no. 528: Incorrect return-value check for a 'scanf'-like function

Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>

* Update writeascii.c

* r3.out.vtk: Fix "Incorrect return-value check for a 'scanf'-like function" for null value

* r.watershed: Fix "Incorrect return-value check for a 'scanf'-like function" for disturbed_land default value

Adresses https://github.com/OSGeo/grass/security/code-scanning/532

---------

Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
We observed some random, transient timeouts on different tests. For one of them, t.list, there was no reason to fail on macOS, where there are 3 cores instead of 2 in GitHub Actions. There's a possibility that there's a problem with the temporal library locking up somewhere, but there’s also a small chance that the r.mapcalc calls are now using multiple processors. It "costs" not much to add this env var so that the number of threads is limited, even if it doesn't fix all problems; it might just fix some potential ones, since we are already running in parallel in that section.
AI findings on a recently modified file found a typo in a translated string. This adds "be" in "Values should be in between"...

Apply suggested fix to raster3d/r3.out.vtk/writeVTKData.c from Copilot Autofix

Co-authored-by: Copilot Autofix powered by AI <223894421+github-code-quality[bot]@users.noreply.github.com>
The ctypes interface assigned the number of columns to the rows key and
the number of rows to the cols key, for raster as well as 3D raster maps.
The swapped values are stored in the temporal database when a map is
registered and are reported by t.info, which therefore disagreed with
r.info and r3.info. The number of cells was not affected, because it is
the product of both.

Maps registered before this fix keep the swapped values in the temporal
database until they are registered again.

Update the doctests which asserted the swapped values and add a test
comparing the metadata read through the interface with the output of
r.info and r3.info.

The test was written with the help of Claude Code.
Python 3.10 receives security fixes only and reaches end of life in
October 2026, before the next release. Per RFC 8, raise the minimum
supported Python version from 3.10 to 3.11.

Update the version in REQUIREMENTS.md, pyproject.toml (requires-python,
Black, Pylint, Pyright, and isort) and CI (pytest matrix and
MIN_PYTHON_VERSION).

Update places in code which add code for the older version:

- utils/mkdocs.py: datetime.fromisoformat parses the Z suffix used by
  recent Git natively since 3.11, so the fallback is no longer needed.
- Use the datetime.UTC alias added in 3.11. Ruff enables this check
  (UP017) once it infers the higher target version from requires-python.
- Drop the toml extra for bandit. It provided a TOML parser for reading
  the bandit configuration from pyproject.toml, which the standard
  library covers since 3.11 with tomllib. Here the deciding version is
  the one the workflow runs, which is well past 3.11 already.
* CMake: Build man pages from markdown
Generate the markdown documentation (--md-description + mkmarkdown.py)
in all three doc paths (modules, GUI, scripts) and convert man pages
from it with g.md2man instead of from HTML with g.html2man, mirroring
the Autotools build. Install g.md2man.py and gmd.py, and install the
generated docs/mkdocs tree, which was previously not installed at all.

Add man/build_manpages.py, a sweep run after the index scripts that
converts any markdown page without an up-to-date man page. It ports
man/Makefile's MANPAGES wildcard to CMake, which has no build-time
glob, and produces the index and dynamically named topic_* man pages
that the CMake build previously did not ship.

Run the doc generators in the tool source directory like Autotools
does. This fixes the SOURCE CODE footer in all CMake-built pages,
which previously pointed to a nonexistent build-directory path in the
repository and fell back to an Accessed date instead of the last
commit, and makes the copy-source-into-build-dir steps unnecessary.
Also fix build_class.py receiving the documentation directory as its
year argument.

Verified against an Autotools build: g.md2man output for the same
generated markdown is byte-identical.

Generated with AI assistance (Claude Fable), including the build
verification against the Autotools doc tree.

* address review
The table connection raised a new ImportError with the hint as its message,
so the message of the original error, which says which module is missing,
was replaced by the hint.

Add the hint as a note to the original error instead. From the Python
documentation of BaseException.add_note(): Add the string note to the
exception's notes which appear in the standard traceback after the exception
string. The traceback then shows both the missing module and the hint.

Exception notes need Python 3.11, which is now the minimum version.
The test loader raised a new ImportError to say which module could not be
imported. The message used e.message, which does not exist in Python 3, so
the handler raised AttributeError instead of the intended error.

Add the module name as a note to the original error instead. From the Python
documentation of BaseException.add_note(): Add the string note to the
exception's notes which appear in the standard traceback after the exception
string. The traceback then shows both the import error and the module name.

Exception notes need Python 3.11, which is now the minimum version.
)

An empty WHERE result left an empty data array, which the classification
algorithms then indexed at data[0] and data[count - 1]. The values printed
as class breaks were whatever the heap happened to hold, which is zeroed
on Linux but not on Windows, making the test flaky there.

Warn the user and keep the zero-initialized breaks when nothing is selected, and
reject an empty array in AS_class_apply_algorithm.
The Scatterplot, Timeline, and Temporal Plot tools raised a new ImportError
with the hint as its message, so the message of the original error, which
says which module is actually missing, was replaced by the hint.

Add the hint as a note to the original error instead. From the Python
documentation of BaseException.add_note(): Add the string note to the
exception's notes which appear in the standard traceback after the exception
string. The traceback then shows both the missing module and the hint.

The consumer code (various places) shows always its own message, so the
not, not the original message is not used. These changes do not change that.  

Exception notes need Python 3.11, which is now the minimum version.
…7697)

locale.getencoding() was added in Python 3.11, so the fallbacks to the
deprecated locale.getdefaultlocale() are never used now that 3.11 is the
minimal supported version. Call locale.getencoding() directly.

The two places calling locale.getlocale() get the same treatment. That
function is available in all supported versions, so those fallbacks could
not be reached even before.
Starting with GRASS 8.6, the GUI supports launching and managing Jupyter Notebooks directly. Users can access notebooks through two modes: Browser mode (default web browser) or Integrated mode (embedded in GUI).

Authored-by: Linda Karlovska <linda.karlovska@seznam.cz>
Co-authored-by: Tomas Zigo <tomas.zigo@slovanet.sk>
Co-authored-by: Edouard Choinière <27212526+echoix@users.noreply.github.com>
Co-authored-by: Anna Petrasova <kratochanna@gmail.com>
Co-authored-by: Vaclav Petras <wenzeslaus@gmail.com>
tmszi and others added 29 commits October 1, 2026 20:39
…ndocked 3D view window (OSGeo#7819)

* wxGUI/nviz: fix handling window resize event only if window is shown on the screen

Fix 'window must be shown' error message during docking undocked 3D view window.
)

The walker loop computed each thread's range of walkers by hand from
the thread number and count. A worksharing loop with static schedule
does the same with one pragma, and ends with an implicit barrier, so
code after the loop in the same parallel region sees all walkers
processed without adding an explicit barrier (no barrier in the
current code). The loop variable is private in
a worksharing loop, so it is no longer listed as firstprivate.

Single-threaded results do not change: the depth and discharge maps
computed from the NC SPM elevation, with and without infiltration and
diffusion, are byte-identical to those before this change, and the
run time is the same within noise.

Written with the help of Claude Code.
With nprocs > 1, walkers on different threads checked and reduced the
remaining infiltration capacity of a cell without synchronization. This
is a data race and undefined behavior in C: two walkers could both be
absorbed by the capacity left for one, or a reduction could be lost.

Run the unchanged infiltration code in a critical section, entered only
when an atomic read shows capacity left in the cell. Within the lock,
the code checks the capacity again, as another thread may have used it
up. The capacity is written atomically, since it is also read outside
of the lock. After the first step, few walkers are in a cell with
capacity left, so the lock is rarely taken.

The arithmetic and the conditions are unchanged. With one thread, the
depth maps computed from the elev_lid792_1m elevation, with and without
infiltration, are byte-identical to those before this change, and the
run time is the same within noise with 1 and 4 threads. With more
threads, the order in which walkers reach a cell still depends on
thread scheduling, as before. A new test checks that infiltration
removes exactly the capacity of the cells at 1 and 4 threads.

Written with the help of Claude Code.
With -t, r.sim.water wrote the series maps every (int)(output_step /
time step) iterations and named them by the simulated time rounded to
whole minutes. The truncated interval made the write times drift away
from the output steps, so two writes could round to the same minute and
the first map was overwritten, names could skip a minute or land on odd
minutes with an even output_step, and the last step was often missing.
When the time step was longer than output_step, the interval was zero
and no map was written at all while the tool still succeeded.

Write output step j at the iteration whose simulated time is closest to
j times output_step, and name and timestamp the maps by that time. The
time step comes from the cell size and the mean velocity, so iterations
usually do not fall on the output times. When one iteration is the
closest one to several steps, write only the step closest to it and
warn that the time step is longer than output_step. Do not write steps
past the duration. Always end the series with maps named by the
duration which hold the state at the end of the run, also when the
duration is not a multiple of output_step or when the run stopped
early. Walker vector maps follow the same schedule.

For users, each output step now appears once, named and timestamped by
a multiple of output_step, and the maps named by the duration are always
present. A series map holds the state at most half a time step before
or after the time in its name instead of up to several minutes before
it. The depth and discharge values are unchanged and so are the outputs
without -t. In the run summary, simulated_time of an output is the time
the maps were written and timestamp the time they are named by. New
tests check the names, timestamps and write times of the series, a
duration which is not a multiple of output_step, time steps longer
than output_step including its multiples, a step past the duration, and
an early stop.

Written with the help of Claude Code.
Store history region in g.region JSON format, use Tools API for region operations
…7999)

CI(deps): Update ubuntu:26.04 Docker digest to 88a381d

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
* CI(deps): Update dependency pylint to v4.1.1

* Python: Fix new pylint chained-comparison and comparison-with-itself messages

Pylint 4.1 reports R1716 (chained-comparison) and R0124
(comparison-with-itself). Rewrite the flagged conditions as chained
comparisons, with unchanged logic, and use math.isnan() for the NaN
checks in c_libraries_interface.

Needed for the pylint update in OSGeo#7996. Drafted with AI assistance
(Claude Code); the changes are mechanical and were checked with
pylint 4.1.1 and ruff.

* Update pylint to 4.1.2

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Edouard Choinière <27212526+echoix@users.noreply.github.com>
locale: Update translation files

Co-authored-by: echoix <27212526+echoix@users.noreply.github.com>
…SGeo#8009)

The resource_paths.py rule in python/grass/app/Makefile redirects sed
output into the destination directory without depending on it. With
parallel make, the redirect could run before the directory was created,
failing with "Directory nonexistent" and breaking the Docker builds
intermittently. Add the directory as an order-only prerequisite, as the
pattern rule for the other files already does.

Developed with AI assistance (Claude Code).
Tools which draw random numbers in parallel, or run ensembles, or keep
several model components reproducible on their own, cannot do so with
the one generator shared by the whole program: whichever thread asks
first gets the next value, and different seeds are related on this
generator (seeds 2^31 or 2^30 apart are shifted by a constant, and
consecutive seeds form a lattice). Add generators the program owns,
struct G_random_state, and layouts, struct G_random_layout, which place
one state per unit of work on the generator's cycle.

A layout is a seed plus the way the span is cut into streams of stride
draws, one stream per unit and batch. The span is the first quarter of
the cycle after the seed, 2^46 draws: the multiplier has order 2^46, so
positions 2^46, 2^47 or 3 * 2^46 apart give values differing by a
constant, and the other three quarters hold the same values plus 0.25,
0.5 and 0.75. Within the span no two positions are that far apart. The
basic layout, G_random_init_layout(), gives the units the whole span,
every unit the largest stream the span allows, in one batch, dividing
the span into an odd number of parts: with an even number, the unit
halfway along would start 2^45 draws after unit 0 and the unit a quarter
of the way along near 2^44, distances at which the values differ by two
or four constants in turn. It holds at most 2^20 units, because the
stride rounded down to odd loses up to two draws per unit, which
accumulate along the span; up to that count the units nearest to 2^45
and 2^44 start at least 0.48 and 0.24 of a stride away from them. An
exact layout takes the draws of a unit as given, so the streams are the
positions of a serial run and a tool keeps its earlier values; a bounded
layout takes a bound and rounds it up to odd, so that units a power of
two apart relate only a few low bits. A batch is one stream for every
unit, and batches are appended, never reserved, so an ensemble member
needs only its batch number. Batches start units * stride draws apart,
or one more when that number is even, so that the same draw of different
batches is as unrelated as the generator allows, as the odd strides do
for units; the relation remains between draws whose numbers differ, and
a layout gives streams which do not overlap, not independent ones. The
queries return the batches that fit and the stride; the two state calls
place a state on a unit's stream, or a unit's stream of a batch;
G_random_advance() moves a state by any number of draws in one jump;
G_random_state_from_seed() gives the shared generator's sequence, as the
single unit of a layout of the whole span.

Add G_random_generate_seed(), which reads GRASS_RANDOM_SEED, or else
SOURCE_DATE_EPOCH, as an integer: an empty value counts as not set, a
value which is not an integer or does not fit is a fatal error, a value
from -2^31 to 2^32 - 1 is used as it is, and a value outside that range
is reduced to its low 32 bits with a warning. Without either variable
the seed is a weak hash of the time and the process ID. G_srand48_auto()
seeds with that value and returns it; before, it returned an
environment value unreduced although it had used only its low 32 bits.
Add GRASS_RANDOM_SEED to the list of environment variables.

The shared generator is unchanged. Tests cover the identity of
G_random_state_from_seed() with G_srand48(), the three layouts, the
batches, the refusals, the absence of constant-shift twins within the
span, the distance of the units of a layout of the whole span from the
two- and four-constant levels for every unit count it accepts, the
low-bits rule, the advance, the seed from each environment source, and
independence from the shared generator and between threads.

Written with the help of Claude Code, while designing new random
numbers code for r.sim.water and r.mapcalc and documentation
for the library at the same time.
Translated using Weblate (Swedish)

Currently translated at 100.0% (10157 of 10157 strings)

Translated using Weblate (Swedish)

Currently translated at 100.0% (68 of 68 strings)

Translated using Weblate (Swedish)

Currently translated at 100.0% (3434 of 3434 strings)

Translated using Weblate (Swedish)

Currently translated at 100.0% (10157 of 10157 strings)

Translated using Weblate (Swedish)

Currently translated at 100.0% (1855 of 1855 strings)

Update translation files

Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Update translation files

Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Update translation files

Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Update translation files

Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Update translation files

Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Update translation files

Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.



Translate-URL: https://weblate.osgeo.org/projects/grass-gis/grassglossary/sv/
Translate-URL: https://weblate.osgeo.org/projects/grass-gis/grasslibs/
Translate-URL: https://weblate.osgeo.org/projects/grass-gis/grasslibs/sv/
Translate-URL: https://weblate.osgeo.org/projects/grass-gis/grassmods/
Translate-URL: https://weblate.osgeo.org/projects/grass-gis/grassmods/sv/
Translate-URL: https://weblate.osgeo.org/projects/grass-gis/grasswxpy/
Translate-URL: https://weblate.osgeo.org/projects/grass-gis/grasswxpy/sv/
Translation: GRASS/grassglossary
Translation: GRASS/grasslibs
Translation: GRASS/grassmods
Translation: GRASS/grasswxpy

Co-authored-by: Weblate <noreply@weblate.org>
Co-authored-by: Daniel Nylander <daniel@danielnylander.se>
* libvector: Use the same plural string for vertices registered in build_sfa.c

The message "One vertex registered" is used in build_nat.c with the plural
"%" PRId64 " vertices registered" and in build_sfa.c with "%d vertices
registered". A .pot file keeps only one plural form per singular msgid, and
xgettext keeps the first one it reads. The input file list comes from find,
whose order is not stable, so the template flipped between the two forms
from one update to the next. Each flip changed the msgid and made the
existing translations fuzzy.

Use the 64-bit form in build_sfa.c as well, casting the int counters, so
all three call sites share one msgid_plural.

Prepared with AI assistance (Claude Code); the root cause was found from
the history of locale/templates/grasslibs.pot.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>

* locale: Sort the input file lists for xgettext

The lists of files given to xgettext come from find, whose order depends
on the filesystem and can differ between runners. When the same msgid is
used with different plural forms, xgettext keeps the first one it reads, so
the generated .pot files could change without any change in the code.

Sort the lists with LC_ALL=C so that the order is the same everywhere.

Prepared with AI assistance (Claude Code).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>

* Apply batched suggestions from code review

Co-authored-by: Nicklas Larsson <n_larsson@yahoo.com>

---------

Co-authored-by: Nicklas Larsson <n_larsson@yahoo.com>
…gs (OSGeo#8020)

Adresses ” -Wshorten-64-to-32” Clang warnings.
…nings (OSGeo#8023)

Adresses ” -Wshorten-64-to-32” Clang warnings.
Each walker draws from a random number state of its own, placed on the
walker's stream of a bounded layout of the seed, instead of from the
shared generator. A walker's random numbers now depend only on the
seed and the walker's number, not on the thread which moves it or on
the order of the walkers, so walker paths are the same for any nprocs
as long as the depth-dependent diffusion and infiltration do not come
into play. The water depth and the sediment concentration still differ
slightly at nprocs > 1 because the order of the atomic additions to the
gama grid and the order in which walkers reach a cell with infiltration
capacity depend on the threads, which this does not change.

The streams hold 2 + 8 * steps + 48 values, over twice what a walker
draws on average: two values at placement and, per step, a normal pair
by the polar method, 8 / pi values on average, plus one in a cell of
the flow_control map (a trap in the code). The 8 per step hold the sum
over many steps, and the 48 allow a run of 24 rejected attempts within
one step, so that a walker exceeds its stream with a probability below
1e-16 and a run of 2^31 walkers, the most the int counts hold, with a
probability below 1e-6. In counted runs on the nc_spm elevation, the
most a walker drew over 145 or 158 steps was 628 values, at most 51% of
its stream. A run whose walkers and steps need more than one seed's
span provides gets a warning. The states are placed in parallel before
the walkers are, each a member of its walker's record, for which the
walkers get a type of their own, struct walker. A first version kept
the states in an array of their own beside the walkers, which cost 7 to
9% of the wall time at every thread count, likely for the extra stream
of memory reads and writes in each walker's step; in the record, the
state shares the cache line with the walker's position and weight and
the cost is gone. Without the contention on the shared generator,
nprocs > 1 is now faster than nprocs = 1: on the whole nc_spm elevation
(6 million walkers), 50 s at nprocs=1, 13 s at 4 and 4.8 s at 16,
against 68 s, 143 s and 159 s before. The build without OpenMP now
gives the same results as nprocs=1.

Without random_seed, the seed is generated, as in r.mapcalc, instead
of being 12345, and recorded in the history of the output maps and in
the -p summary, so that a run can be repeated. The results therefore
differ from run to run unless random_seed is set. The -s flag is
deprecated, and random_seed with -s is an error. The seed is parsed
with strtoll() and checked right after parsing, so a seed outside
-2^31 to 2^32 - 1 is an error instead of being silently reduced to 32
bits. The tool docs get a section on the random numbers, the seed and
reproducibility with more than one thread.

This change has the price of changed outputs also at nprocs=1, but
invests into results independent of the thread count where the model
allows it. The alternative, one state per thread, would keep the
values at nprocs=1 and give a different result for each thread count.
The outputs of r.sim.water and r.sim.sediment are sums over millions
of walkers, so a different realization of the same seed moves them
within their sampling noise, and from the user's perspective they do
not change much anyway. The gunittest references and the pinned
landform arrays are regenerated; the commands used reproduce the old
references exactly with the previous code.

Written with the help of Claude Code (Fable and Opus).
…o#8004)

Add the page gislib_random_streams, written in Markdown as
lib/gis/random_streams.dox.md and rendered by Doxygen as a subpage of
the library page. It defines eight terms once (generator, seed, state,
span, layout, unit, stride, batch), describes a single sequence, the
three layouts and batches, shows how a tool gets its seed and the usage
patterns with code (a single sequence, rows of a raster, items drawn
over time, ensembles), gives the capacity, explains the quality of the
values (a table of the issues, how the library avoids each and what
remains, the generator and the span, the relations by distance with
their expected occurrence for a round total of draws, what odd strides
and odd distances between batches fix and where the relation remains,
relations between seeds), and shows how to migrate from the shared
generator in a table of the calls before and after. Six figures draw the
ring with the span as the quarter after wherever the seed falls, the
constant-shift twins, the layouts, what an even number of parts would
give, the values of units at an even and an odd stride, and the values
of consecutive seeds next to those of batches. The page speaks of rows
of a raster and of items drawn over time rather than of particular
tools, so that it does not drift when tools change. The examples use
single-line comments and the formulas the multiplication sign, so that
the page renders as written and lints as Markdown. The figures are
written by lib/gis/random_streams_figures.py, which also prints the
numbers quoted on the page; a README in the directory points to it.

Add *.dox.md to the file patterns of both Doxygen configuration
templates and say in the style guide that library pages
may be Markdown.

Written with the help of Claude Code.
…eo#8026)

Enabling binaries that are needed during build process, to be found,
e.g. "output/lib/grass86/bin/Debug/g.mkfontcap", where 'Debug' is the
configuration.

In addition, generate fontcap from a separate custom target that
depends on the completed g.mkfontcap target. Addresses an ad-hoc
signature related build failure on Xcode.


Co-authored-by: Edouard Choinière <27212526+echoix@users.noreply.github.com>
Check for a zero divisor in the integer modulo, so that 5 % 0 gives
NULL as documented. It hung r.mapcalc on x86 Linux because the SIGFPE
handler returned and the division was executed again.

Remove the SIGFPE handler and the floating_point_exception flags.
Floating point exceptions do not trap by default, so the handler never
ran for floating point operations and the flags never became 1. Still,
every thread reset the shared flag to 0 for every cell, which made the
computation scale poorly with threads. Domain errors still give NaN,
which is NULL, and overflow still gives infinity.

Remove pre_exec(), post_exec(), and the two floating_point_exception
variables from the installed grass/calc.h and from libgrass_calc, so
technically a change to the API. Only r.mapcalc used them, so
practically not an issue.

Test division and modulo by zero, domain errors and infinite input of
the functions which had the flag check, their regular results, and
overflow, all with 1 and 4 threads.

The fix, tests, and benchmarks were prepared with AI assistance (Claude
Code with Opus 5.5).
…#8013)

Add `mul48()` to encapsulate multiplication modulo 2^48 and use it in
`lcg_step()` and `lcg_jump()`.

The multiplication may overflow `uint64_t` and wrap modulo 2^64. This is
intentional and does not affect the result modulo 2^48, since 2^48
divides 2^64. Consequently, masking the wrapped product to 48 bits gives
the same result as computing the full product modulo 2^48.

Centralising the operation in `mul48()` makes this property explicit and
avoids repeating potentially misleading unsigned multiplication
throughout the LCG implementation. It also provides a single location
for documenting or suppressing static-analysis warnings about the
intentional wraparound which is used for Coverity Scan now.
…nt attribute (OSGeo#7977)

grass.pygrass: Fix Ilist attribute access, indexing, and append issues

In `python/grass/pygrass/vector/basic.py`, `Ilist.extend()` and `Ilist.remove()`
incorrectly attempted to access `ilist.ilist` and `value.ilist`, which do not
exist on `Ilist` instances (the C pointer is stored in `c_ilist`), resulting
in an `AttributeError`.

Additionally:
- `Ilist.append()` previously used a bare `raise` when `Vect_list_append()` failed;
  raise `GrassError` from `grass.pygrass.errors` and coerce `value` with `int()`.
- `Ilist.__getitem__()` negative index calculation allowed negative out-of-bounds
  lookups without raising `IndexError`.
- `Ilist.__contains__()` now delegates directly to `contains()` using the C routine.
- Add comprehensive pytest unit tests in `python/grass/pygrass/vector/tests/test_basic.py`.

Fixes OSGeo#7976.

Signed-off-by: bhuvan-somisetty <somisettybhuvan5@gmail.com>
@github-actions
github-actions Bot force-pushed the periodic/update-configure branch from c764e41 to d58e02b Compare October 10, 2026 19:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.