Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package grass for openSUSE:Factory checked in at 2026-08-09 21:36:25 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/grass (Old) and /work/SRC/openSUSE:Factory/.grass.new.16738 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "grass" Sun Aug 9 21:36:25 2026 rev:17 rq:1370143 version:8.5.0 Changes: -------- --- /work/SRC/openSUSE:Factory/grass/grass.changes 2026-02-01 22:06:06.526348941 +0100 +++ /work/SRC/openSUSE:Factory/.grass.new.16738/grass.changes 2026-08-09 21:38:16.048227595 +0200 @@ -1,0 +2,52 @@ +Thu Aug 6 09:18:58 UTC 2026 - Martin Pluskal <[email protected]> + +- Update to version 8.5.0: + * New grass.tools Python API to call GRASS tools as functions + * Documentation rewritten in Markdown and rendered with MkDocs + * Parallelisation added to r.mapcalc, r.texture, r.horizon and + v.surf.rst cross-validation + * JSON output added across dozens of tools + * New r.smooth.edgepreserve tool for edge-preserving smoothing + * Multiple masks per mapset, with a new r.mask.status tool + * RegionManager and MaskManager context managers in grass.script + * More than 500 security issues reported by Coverity were fixed + * Raised minimum requirements to GDAL 3.7, PROJ 9.0, C++17 and + Python 3.10, and switched to the CBLAS and LAPACKE interfaces +- Stop disabling the post-build checks. The package carried + "BuildRequires: -post-build-checks", which switched off + check-filelist, check-buildroot, check-rpaths, check-prereqs and the + rpmlint gate wholesale, hiding every problem listed below. It was + masking 79 directories owned by no package, so the file lists now + own their directories instead of only their contents +- Build with the distribution optflags: CFLAGS discarded them + entirely, so all C code was built without the mandatory hardening + options and without debug information +- Add a %check section that creates a temporary project and runs + modules and the Python scripting API through the freshly built + tree. It runs against the in-source build tree, because the + launcher ignores GISBASE and resolves itself from the compiled-in + prefix +- Generate the translation file list at install time instead of + maintaining it by hand: the si and uk catalogues were both tagged + as %lang(sl), and hi and sv were not packaged at all +- Byte-compile with hash-based invalidation and strip the shebang + from modules that are not executable: rpmlint errors drop from 440 + to 4, the remainder being upstream issues +- Add build dependencies on cblas, lapack and openblas, now required + directly by the C interfaces (boo#1273592) +- Raise the minimum versions of gdal and proj to match upstream +- Convert dependencies to their pkgconfig() form and escape the + strftime format in the reproducible-build timestamp, so that + spec-cleaner no longer rewrites either of them incorrectly +- Replace the hand-written ldconfig scriptlets with + %ldconfig_scriptlets +- Fix summaries of the doc and devel subpackages, which still + referred to GRASS GIS 7 +- Drop the conditionals for suse_version < 1550, no longer built + +------------------------------------------------------------------- +Tue Aug 4 06:03:18 UTC 2026 - Dirk Stoecker <[email protected]> + +- Drop old obsoletes statement + +------------------------------------------------------------------- @@ -528 +579,0 @@ - Old: ---- grass-8.4.2.tar.gz grass-8.4.2.tar.gz.sha256 New: ---- grass-8.5.0.tar.gz grass-8.5.0.tar.gz.sha256 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ grass.spec ++++++ --- /var/tmp/diff_new_pack.z0D4Up/_old 2026-08-09 21:38:16.664248702 +0200 +++ /var/tmp/diff_new_pack.z0D4Up/_new 2026-08-09 21:38:16.668248839 +0200 @@ -1,7 +1,7 @@ # # spec file for package grass # -# Copyright (c) 2024 SUSE LLC +# Copyright (c) 2026 SUSE LLC and contributors # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -17,84 +17,75 @@ # Notice to maintainer : move this package to real lfhs -%define shortver 84 -%if 0%{?suse_version} >= 1550 -BuildRequires: python3-wxPython -%else -BuildRequires: python-wxWidgets-devel >= 3.0 -%endif +%define shortver 85 Name: grass -Version: 8.4.2 +Version: 8.5.0 Release: 0 Summary: Geographic Resources Analysis Support System License: GPL-2.0-or-later -Group: Productivity/Scientific/Other URL: https://grass.osgeo.org/ Source0: https://github.com/OSGeo/grass/releases/download/%{version}/%{name}-%{version}.tar.gz Source1: https://github.com/OSGeo/grass/releases/download/%{version}/%{name}-%{version}.tar.gz.sha256 -BuildRequires: -post-build-checks -BuildRequires: PDAL-devel +BuildRequires: PDAL-devel >= 1.7.1 BuildRequires: bison BuildRequires: blas-devel BuildRequires: fdupes -BuildRequires: fftw3-devel BuildRequires: flex -BuildRequires: freetype2-devel BuildRequires: gcc-c++ BuildRequires: lapack-devel -BuildRequires: libXmu-devel -BuildRequires: libbz2-devel -BuildRequires: libgdal-devel >= 3 +BuildRequires: libgdal-devel >= 3.7 BuildRequires: libgeos-devel >= 3 BuildRequires: libjpeg-devel BuildRequires: libpng-devel -BuildRequires: libtiff-devel -BuildRequires: libzstd-devel BuildRequires: man BuildRequires: mysql-devel -BuildRequires: ncurses-devel >= 5.5 -BuildRequires: netcdf-devel BuildRequires: perl -BuildRequires: postgresql-devel -BuildRequires: proj >= 6 -BuildRequires: proj-devel >= 6 +BuildRequires: pkgconfig +BuildRequires: proj >= 9 BuildRequires: python3-dateutil -BuildRequires: python3-devel BuildRequires: python3-numpy BuildRequires: python3-opengl +BuildRequires: python3-wxPython BuildRequires: python3-xml BuildRequires: readline-devel BuildRequires: sqlite-devel -BuildRequires: unixODBC-devel -BuildRequires: zlib-devel +BuildRequires: pkgconfig(bzip2) BuildRequires: pkgconfig(cairo) +BuildRequires: pkgconfig(cblas) +BuildRequires: pkgconfig(fftw3) +BuildRequires: pkgconfig(freetype2) BuildRequires: pkgconfig(gl) BuildRequires: pkgconfig(glu) +BuildRequires: pkgconfig(lapack) +BuildRequires: pkgconfig(libpq) +BuildRequires: pkgconfig(libtiff-4) +BuildRequires: pkgconfig(libzstd) +BuildRequires: pkgconfig(ncurses) >= 5.5 +BuildRequires: pkgconfig(netcdf) +BuildRequires: pkgconfig(odbc) +BuildRequires: pkgconfig(openblas) +BuildRequires: pkgconfig(proj) >= 9 +BuildRequires: pkgconfig(python3) +BuildRequires: pkgconfig(xmu) +BuildRequires: pkgconfig(zlib) # proj contains the required common data files -Requires: proj >= 6 +Requires: proj >= 9 Requires: python3-dateutil Requires: python3-numpy Requires: python3-opengl +Requires: python3-wxPython Requires: python3-xml Requires: sqlite >= 3 Requires: unixODBC Requires: xterm Recommends: grass-doc -Obsoletes: grass7 -%if 0%{?suse_version} >= 1550 -Requires: python3-wxPython -%else -Requires: python-wxWidgets >= 2.8 -%endif %package doc -Summary: Documentation for GRASS GIS 7 -Group: Documentation/Other +Summary: Documentation for GRASS GIS %package devel -Summary: Development files for GRASS GIS 7 -Group: Development/Libraries/C and C++ +Summary: Development files for GRASS GIS Requires: grass = %{version} %description @@ -113,7 +104,7 @@ This package contains the HTML documentation files for GRASS GIS %prep -%setup -q -n grass-%{version} +%autosetup -n grass-%{version} %define grasver -@GRASS_VERSION_MAJOR@.@GRASS_VERSION_MINOR@.@GRASS_VERSION_RELEASE@ %define grasver2 '-${GRASS_VERSION_MAJOR}.${GRASS_VERSION_MINOR}.${GRASS_VERSION_RELEASE}' @@ -122,7 +113,7 @@ sed -i s/%{grasver}//g grass.pc.in sed -i s/%{grasver2}//g configure sed -i s/%{grasver2}//g Makefile -sed -i -e "/GRASS_HEADERS_/ s/@GRASS_HEADERS_GIT_.*@/"$(date -d @${SOURCE_DATE_EPOCH} -u +%FT%T%:z)"/" include/grass/version.h.in +sed -i -e "/GRASS_HEADERS_/ s/@GRASS_HEADERS_GIT_.*@/"$(date -d @${SOURCE_DATE_EPOCH} -u +%%FT%%T%%:z)"/" include/grass/version.h.in cat include/grass/version.h.in %define grassprefix %{_libdir} @@ -130,8 +121,8 @@ %define grasslib %{grassprefix}/%{name}%{shortver}/lib # configure with shared libs: -# Pick for upstream travis, normal optflags are not supported -export CFLAGS="-O2 -Werror=implicit-function-declaration" +export CFLAGS="%{optflags} -Werror=implicit-function-declaration" +export CXXFLAGS="%{optflags} -std=c++17" ./configure \ --prefix=%{grassprefix} \ @@ -175,15 +166,11 @@ %build # Make builds reproducible (e.g. "random" colortable example in documentation) export GRASS_RANDOM_SEED=1234 -make prefix=%{grassprefix} PREFIX=%{grassprefix} %{?_smp_mflags} +%make_build prefix=%{grassprefix} PREFIX=%{grassprefix} %install make prefix=%{buildroot}%{grassprefix} PREFIX=%{buildroot}%{grassprefix} install -# Program sets LD_LIBRARY_PATH pointing to in-source path -# resulting in wrong requires, prevent that -rm -rf dist.* - # don't create a non-standard-directory for a single file mkdir -p %{buildroot}%{_bindir} mv %{buildroot}%{grassprefix}/bin/grass %{buildroot}%{_bindir} @@ -194,6 +181,7 @@ sed -i s:%{buildroot}::g %{buildroot}%{grassdir}/include/Make/Grass.make sed -i s:%{buildroot}::g %{buildroot}%{grassdir}/include/Make/Platform.make sed -i s:%{buildroot}::g %{buildroot}%{grassdir}%{_sysconfdir}/fontcap +sed -i s:%{buildroot}::g %{buildroot}%{grassdir}%{_sysconfdir}/python/grass/app/resource_paths.py # make grass libraries available on the system install -d %{buildroot}%{_sysconfdir}/ld.so.conf.d @@ -204,67 +192,96 @@ mkdir -p %{buildroot}%{_datadir}/pixmaps ln -s %{grassdir}/share/icons/hicolor/192x192/apps/grass.png %{buildroot}%{_datadir}/pixmaps/grass.png +# The blanket shebang rewrite in %%prep lands #!/usr/bin/python3 on library +# modules that are not executable and are never run directly +# (rpmlint: non-executable-script). This must come BEFORE byte-compiling: +# editing the sources afterwards would invalidate the fresh bytecode again. +find %{buildroot}%{grassdir} -name '*.py' ! -perm -u+x -exec sed -i '1{/^#!\/usr\/bin\/python3$/d}' {} + + +# Byte-compile with hash-based invalidation (PEP 552). Timestamp-based .pyc +# cannot work here: the mtimes of the installed sources are clamped to +# SOURCE_DATE_EPOCH for reproducibility after %%install has run, so any +# timestamp we record is stale by the time the package is assembled +# (rpmlint: python-bytecode-inconsistent-mtime). +find %{buildroot}%{grassdir} -name __pycache__ -type d -prune -exec rm -rf {} + +python3 -m compileall -q --invalidation-mode checked-hash \ + -s %{buildroot} %{buildroot}%{grassdir} >/dev/null || : + rm -rf %{buildroot}%{_libdir}/grass%{shortver}/utils/__pycache__ echo %{grassdir} >%{buildroot}/%{_sysconfdir}/GRASSDIR %fdupes -s %{buildroot}%{grassdir} -%post -p /sbin/ldconfig -%postun -p /sbin/ldconfig +# Generate the translation file list instead of hardcoding it: the .mo files +# are compiled from locale/po/ at build time, so a hand-maintained list rots +# silently as upstream adds languages -- si and uk were both mistagged as +# %%lang(sl), and hi and sv were missing entirely. +: > %{_builddir}/grass.lang +for _mo in %{buildroot}%{grassdir}/locale/*/LC_MESSAGES; do + [ -d "$_mo" ] || continue + _lang=$(basename "$(dirname "$_mo")") + { + echo "%%lang($_lang) %%dir %{grassdir}/locale/$_lang" + echo "%%lang($_lang) %%dir %{grassdir}/locale/$_lang/LC_MESSAGES" + echo "%%lang($_lang) %{grassdir}/locale/$_lang/LC_MESSAGES/*.mo" + } >> %{_builddir}/grass.lang +done + +%check +# Exercise what was built. Use the in-source build tree, NOT the buildroot copy: +# %%install rewrites the buildroot's paths to the final install location, and +# GRASS's launcher deliberately ignores $GISBASE (RuntimePaths sets it with +# use_env_values=False). It only falls back to locating itself when +# %{grassdir} does not exist, so a buildroot-based check silently depends on no +# GRASS being installed on the build host. The in-source tree is self-consistent. +_grass="$(echo bin.*)/grass" + +# core: version reporting, region handling, and the Python scripting API +$_grass --tmp-project XY --exec g.version -rge +$_grass --tmp-project XY --exec g.region -p +$_grass --tmp-project EPSG:4326 --exec python3 -c \ + 'import grass.script as gs; assert gs.parse_command("g.version", flags="g")["version"].startswith("%{version}")' + +# The installed programs embed LD_LIBRARY_PATH pointing at this in-source tree; +# drop it now that the tests are done, so it cannot leak into the generated +# requires at packaging time. +rm -rf dist.* bin.* + +%ldconfig_scriptlets %files devel +%dir %{grassdir} %{grassdir}/include %{_sysconfdir}/GRASSDIR %files doc +%dir %{grassdir} %{grassdir}/docs -%files +%files -f %{_builddir}/grass.lang %config %{_sysconfdir}/ld.so.conf.d/grass-%{version}.conf %{_bindir}/%{name} -%{grassdir}/bin/* -%{grassdir}%{_sysconfdir}/* -%{grassdir}/gui/* -%{grassdir}/scripts/* +%dir %{grassdir} +%{grassdir}/bin +%{grassdir}%{_sysconfdir} +%{grassdir}/gui +%{grassdir}/scripts +%dir %{grassdir}/share +%dir %{grassdir}/share/applications %{grassdir}/share/applications/grass.desktop -%{grassdir}/share/icons/hicolor/* +%{grassdir}/share/icons +%dir %{grassdir}/share/metainfo %{grassdir}/share/metainfo/org.osgeo.grass.appdata.xml %{_datadir}/applications/grass.desktop %{_datadir}/pixmaps/grass.png -%lang(ar) %{grassdir}/locale/ar/LC_MESSAGES/*.mo -%lang(bn) %{grassdir}/locale/bn/LC_MESSAGES/*.mo -%lang(cs) %{grassdir}/locale/cs/LC_MESSAGES/*.mo -%lang(de) %{grassdir}/locale/de/LC_MESSAGES/*.mo -%lang(el) %{grassdir}/locale/el/LC_MESSAGES/*.mo -%lang(es) %{grassdir}/locale/es/LC_MESSAGES/*.mo -%lang(fr) %{grassdir}/locale/fr/LC_MESSAGES/*.mo -%lang(fi) %{grassdir}/locale/fi/LC_MESSAGES/*.mo -%lang(hu) %{grassdir}/locale/hu/LC_MESSAGES/*.mo -%lang(id) %{grassdir}/locale/id_ID/LC_MESSAGES/*.mo -%lang(it) %{grassdir}/locale/it/LC_MESSAGES/*.mo -%lang(ja) %{grassdir}/locale/ja/LC_MESSAGES/*.mo -%lang(ko) %{grassdir}/locale/ko/LC_MESSAGES/*.mo -%lang(lv) %{grassdir}/locale/lv/LC_MESSAGES/*.mo -%lang(ml) %{grassdir}/locale/ml/LC_MESSAGES/*.mo -%lang(pl) %{grassdir}/locale/pl/LC_MESSAGES/*.mo -%lang(pt) %{grassdir}/locale/pt/LC_MESSAGES/*.mo -%lang(pt_br) %{grassdir}/locale/pt_BR/LC_MESSAGES/*.mo -%lang(ru) %{grassdir}/locale/ru/LC_MESSAGES/*.mo -%lang(ro) %{grassdir}/locale/ro/LC_MESSAGES/*.mo -%lang(sl) %{grassdir}/locale/sl/LC_MESSAGES/*.mo -%lang(sl) %{grassdir}/locale/si/LC_MESSAGES/*.mo -%lang(ta) %{grassdir}/locale/ta/LC_MESSAGES/*.mo -%lang(th) %{grassdir}/locale/th/LC_MESSAGES/*.mo -%lang(tr) %{grassdir}/locale/tr/LC_MESSAGES/*.mo -%lang(sl) %{grassdir}/locale/uk/LC_MESSAGES/*.mo -%lang(vi) %{grassdir}/locale/vi/LC_MESSAGES/*.mo -%lang(zh) %{grassdir}/locale/zh/LC_MESSAGES/*.mo -%lang(zh_cn) %{grassdir}/locale/zh_CN/LC_MESSAGES/*.mo +%dir %{grassdir}/locale +%dir %{grassdir}/utils %{grassdir}/utils/*.py* %{grassdir}/utils/g.echo -%{grassdir}/driver/* -%{grassdir}/fonts/* +%{grassdir}/driver +%{grassdir}/fonts +%dir %{grasslib} %{grasslib}/*.so %{grassdir}/AUTHORS %{grassdir}/translators.csv ++++++ grass-8.4.2.tar.gz -> grass-8.5.0.tar.gz ++++++ /work/SRC/openSUSE:Factory/grass/grass-8.4.2.tar.gz /work/SRC/openSUSE:Factory/.grass.new.16738/grass-8.5.0.tar.gz differ: char 5, line 1 ++++++ grass-8.4.2.tar.gz.sha256 -> grass-8.5.0.tar.gz.sha256 ++++++ --- /work/SRC/openSUSE:Factory/grass/grass-8.4.2.tar.gz.sha256 2026-02-01 22:06:06.310339921 +0100 +++ /work/SRC/openSUSE:Factory/.grass.new.16738/grass-8.5.0.tar.gz.sha256 2026-08-09 21:38:16.040227321 +0200 @@ -1 +1 @@ -68abc6c119939e40736a96360e9f6ab73e56f74772ec88c31688136215047a8c grass-8.4.2.tar.gz +5d06c81504ea961fab709943cf41d8b3e27cdbaae7ccca5baf3f7bb0c5d9f33d grass-8.5.0.tar.gz
