OSGeo / grass

GRASS GIS - free and open-source geospatial processing engine
https://grass.osgeo.org
Other
827 stars 301 forks source link

[Build] Exclude specific module (r.geomorphon) at compilation #3731

Open waarmond opened 4 months ago

waarmond commented 4 months ago

Describe the bug

I can't finish the GRASS build due to one module not compiling:

Cannot parse interface for module r.geomorphon. Empty strings will be placed instead of description and keywords. Reason: Unable to fetch interface description for command '<r.geomorphon>'.

This is certainly my fault. Is there any way to disable one specific module at configuration time?

To reproduce

    ./configure \
    --prefix=/opt/$pkgname \
    --with-freetype-includes=/usr/include/freetype2 \
    --with-wxwidgets \
    --with-readline \
    --with-pthread \
    --with-netcdf \
    --with-nls \
    --with-geos \
    --with-postgres \
    --with-pdal \
    --with-bzlib \
    --with-zstd

    --disable-geomorphon ??

  make

System description

Additional context

neteler commented 4 months ago

Please post the full error with surrounding context.

waarmond commented 4 months ago

Is LC_ALL=C necessary?

../include/Make/Rules.make:16: Warnung: Das Rezept für das Ziel „./src/grass/dist.x86_64-pc-linux-gnu“ wird überschrieben
../include/Make/Rules.make:16: Warnung: Das alte Rezept für das Ziel „./src/grass/dist.x86_64-pc-linux-gnu“ wird ignoriert
../include/Make/Rules.make:16: Warnung: Das Rezept für das Ziel „./src/grass/bin.x86_64-pc-linux-gnu“ wird überschrieben
../include/Make/Rules.make:16: Warnung: Das alte Rezept für das Ziel „./src/grass/bin.x86_64-pc-linux-gnu“ wird ignoriert
../include/Make/Rules.make:16: Warnung: Das Rezept für das Ziel „./src/grass/dist.x86_64-pc-linux-gnu/include/grass“ wird überschrieben
../include/Make/Rules.make:16: Warnung: Das alte Rezept für das Ziel „./src/grass/dist.x86_64-pc-linux-gnu/include/grass“ wird ignoriert
../include/Make/Rules.make:16: Warnung: Das Rezept für das Ziel „./src/grass/dist.x86_64-pc-linux-gnu/lib“ wird überschrieben
../include/Make/Rules.make:16: Warnung: Das alte Rezept für das Ziel „./src/grass/dist.x86_64-pc-linux-gnu/lib“ wird ignoriert
../include/Make/Rules.make:16: Warnung: Das Rezept für das Ziel „./src/grass/dist.x86_64-pc-linux-gnu/bin“ wird überschrieben
../include/Make/Rules.make:16: Warnung: Das alte Rezept für das Ziel „./src/grass/dist.x86_64-pc-linux-gnu/bin“ wird ignoriert
../include/Make/Rules.make:16: Warnung: Das Rezept für das Ziel „./src/grass/dist.x86_64-pc-linux-gnu/etc“ wird überschrieben
../include/Make/Rules.make:16: Warnung: Das alte Rezept für das Ziel „./src/grass/dist.x86_64-pc-linux-gnu/etc“ wird ignoriert
../include/Make/Rules.make:16: Warnung: Das Rezept für das Ziel „./src/grass/dist.x86_64-pc-linux-gnu/driver“ wird überschrieben
../include/Make/Rules.make:16: Warnung: Das alte Rezept für das Ziel „./src/grass/dist.x86_64-pc-linux-gnu/driver“ wird ignoriert
../include/Make/Rules.make:16: Warnung: Das Rezept für das Ziel „./src/grass/dist.x86_64-pc-linux-gnu/driver/db“ wird überschrieben
../include/Make/Rules.make:16: Warnung: Das alte Rezept für das Ziel „./src/grass/dist.x86_64-pc-linux-gnu/driver/db“ wird ignoriert
../include/Make/Rules.make:16: Warnung: Das Rezept für das Ziel „./src/grass/dist.x86_64-pc-linux-gnu/fonts“ wird überschrieben
../include/Make/Rules.make:16: Warnung: Das alte Rezept für das Ziel „./src/grass/dist.x86_64-pc-linux-gnu/fonts“ wird ignoriert
../include/Make/Rules.make:16: Warnung: Das Rezept für das Ziel „./src/grass/dist.x86_64-pc-linux-gnu/docs“ wird überschrieben
../include/Make/Rules.make:16: Warnung: Das alte Rezept für das Ziel „./src/grass/dist.x86_64-pc-linux-gnu/docs“ wird ignoriert
../include/Make/Rules.make:16: Warnung: Das Rezept für das Ziel „./src/grass/dist.x86_64-pc-linux-gnu/docs/html“ wird überschrieben
../include/Make/Rules.make:16: Warnung: Das alte Rezept für das Ziel „./src/grass/dist.x86_64-pc-linux-gnu/docs/html“ wird ignoriert
../include/Make/Rules.make:16: Warnung: Das Rezept für das Ziel „./src/grass/dist.x86_64-pc-linux-gnu/docs/man“ wird überschrieben
../include/Make/Rules.make:16: Warnung: Das alte Rezept für das Ziel „./src/grass/dist.x86_64-pc-linux-gnu/docs/man“ wird ignoriert
../include/Make/Rules.make:16: Warnung: Das Rezept für das Ziel „./src/grass/dist.x86_64-pc-linux-gnu/docs/man/man1“ wird überschrieben
../include/Make/Rules.make:16: Warnung: Das alte Rezept für das Ziel „./src/grass/dist.x86_64-pc-linux-gnu/docs/man/man1“ wird ignoriert
../include/Make/Rules.make:16: Warnung: Das Rezept für das Ziel „./src/grass/dist.x86_64-pc-linux-gnu/utils“ wird überschrieben
../include/Make/Rules.make:16: Warnung: Das alte Rezept für das Ziel „./src/grass/dist.x86_64-pc-linux-gnu/utils“ wird ignoriert
../include/Make/Rules.make:19: Warnung: Das Rezept für das Ziel „OBJ.x86_64-pc-linux-gnu“ wird überschrieben
../include/Make/Rules.make:19: Warnung: Das alte Rezept für das Ziel „OBJ.x86_64-pc-linux-gnu“ wird ignoriert
../include/Make/Rules.make:56: Warnung: Das Rezept für das Ziel „clean“ wird überschrieben
../include/Make/Rules.make:56: Warnung: Das alte Rezept für das Ziel „clean“ wird ignoriert
WARNING: Weisberg-Bingham's W'' cannot be used for n < 50 or n > 99
make[4]: *** [../../include/Make/Html.make:14: r.geomorphon.tmp.html] Fehler 1
Makefile:13: Warnung: Das Rezept für das Ziel „./src/grass/dist.x86_64-pc-linux-gnu/etc/d.polar“ wird überschrieben
../../include/Make/ScriptRules.make:19: Warnung: Das alte Rezept für das Ziel „./src/grass/dist.x86_64-pc-linux-gnu/etc/d.polar“ wird ignoriert
Makefile:16: Warnung: Das Rezept für das Ziel „./src/grass/dist.x86_64-pc-linux-gnu/etc/db.test“ wird überschrieben
../../include/Make/ScriptRules.make:19: Warnung: Das alte Rezept für das Ziel „./src/grass/dist.x86_64-pc-linux-gnu/etc/db.test“ wird ignoriert
Creating translations (= 'make mo')
3361 übersetzte Meldungen, 164 ungenaue Übersetzungen, 747 unübersetzte Meldungen.
0 übersetzte Meldungen, 4272 unübersetzte Meldungen.
646 übersetzte Meldungen, 86 ungenaue Übersetzungen, 3540 unübersetzte Meldungen.
2192 übersetzte Meldungen, 142 ungenaue Übersetzungen, 1938 unübersetzte Meldungen.
po/grasswxpy_de.po:20658: Mehrfachdefinition der Meldung...
po/grasswxpy_de.po:4581: ...dies ist die Stelle der ersten Definition
msgfmt: found 1 fatal error
make[3]: *** [Makefile:100: ./src/grass/dist.x86_64-pc-linux-gnu/locale/de/LC_MESSAGES/grasswxpy.mo] Fehler 1
wenzeslaus commented 4 months ago

The "Cannot parse interface for module r.geomorphon." message is not a fatal error. GRASS GIS should compile regardless of these messages. With that said, the message is likely an indication of another error. r.geomorphon is one of the tools which should compile in any case (hence there is no flag to disable that one). Aren't there other messages but for other tools?

Is there a list of directories at the end of the compilation output with errors? It looks like this:

make[1]: Nothing to be done for 'manifests'.
make[1]: Leaving directory '/home/vpetras/Projects/grass/code/grass'
GRASS GIS 8.4.0dev 4f0137d0fb compilation log
--------------------------------------------------
Started compilation: Thu 23 May 2024 09:11:04 PM EDT
--
Errors in:
/home/vpetras/Projects/grass/code/grass/scripts/g.extension
--
In case of errors please change into the directory with error and run 'make'.
If you get multiple errors, you need to deal with them in the order they
appear in the error log. If you get an error building a library, you will
also get errors from anything which uses the library.
--
Finished compilation: Thu 23 May 2024 09:11:39 PM EDT
neteler commented 4 months ago

There is apparently a duplicate message after yesterday's gettext update in #3729:

po/grasswxpy_de.po:20658: Mehrfachdefinition der Meldung...
po/grasswxpy_de.po:4581: ...dies ist die Stelle der ersten Definition
msgfmt

We need to deduplicate the file in a new PR (and optimize the pot file update procedure).

neteler commented 4 months ago

See also #3465

waarmond commented 4 months ago

[./r.geomorphon]$ LC_ALL=C make

if [ "./grass/dist.x86_64-pc-linux-gnu/bin/r.geomorphon" != "" ] ; then GISRC=./grass/dist.x86_64-pc-linux-gnu/demolocation/.grassrc84 GISBASE=./grass/dist.x86_64-pc-linux-gnu PATH="./grass/dist.x86_64-pc-linux-gnu/bin:./grass/dist.x86_64-pc-linux-gnu/bin:./grass/dist.x86_64-pc-linux-gnu/scripts:$PATH" PYTHONPATH="./grass/dist.x86_64-pc-linux-gnu/etc/python:./grass/dist.x86_64-pc-linux-gnu/gui/wxpython:$PYTHONPATH" LD_LIBRARY_PATH="./grass/dist.x86_64-pc-linux-gnu/bin:./grass/dist.x86_64-pc-linux-gnu/bin:./grass/dist.x86_64-pc-linux-gnu/scripts:./grass/dist.x86_64-pc-linux-gnu/lib:./grass/dist.x86_64-pc-linux-gnu/lib:/usr/lib/dri/:" LC_ALL=C LANG=C LANGUAGE=C ./grass/dist.x86_64-pc-linux-gnu/bin/r.geomorphon --html-description < /dev/null | grep -v '</body>\|</html>\|</div> <!-- end container -->' > r.geomorphon.tmp.html ; fi
make: *** [../../include/Make/Html.make:14: r.geomorphon.tmp.html] Error 1
rm r.geomorphon.tmp.html

Now I'm getting to the Pudel's Kern: ./src/grass/dist.x86_64-pc-linux-gnu/bin/r.geomorphon: error while loading shared libraries: libgrass_raster.8.4.so: cannot open shared object file:

which exists at ./src/grass/dist.x86_64-pc-linux-gnu/lib/libgrass_raster.8.4.so

waarmond commented 4 months ago

GDB mistake

echoix commented 4 months ago

Just before continuing further, was the whole grass all configured+compiled fresh, or its an incremental compilation with existing libraries or installation on the system?

waarmond commented 4 months ago

I've deinstalled my existing grass installation. The build is happening through an ArchLinux PKGBUILD with a clean /src folder.

neteler commented 4 months ago

We need to deduplicate the file in a new PR

Done in #3733

neteler commented 4 months ago

@waarmond reopening in case there are other issues.

waarmond commented 4 months ago

Thanks for reopening. Sadly I won't be able to recompile before tomorrow.

waarmond commented 4 months ago

Here is the strace of my r.geomorphon crash:

openat(AT_FDCWD, "/usr/etc/ucx/ucx.conf", O_RDONLY) = -1 ENOENT (Datei oder Verzeichnis nicht gefunden)
--- SIGSEGV {si_signo=SIGSEGV, si_code=SEGV_ACCERR, si_addr=0x55ec34d73ea0} ---

Does anybody know openucx from OpenMPI ?

wenzeslaus commented 4 months ago

These error don't seem to be related to GRASS GIS. There is no OpenMPI or MPI specific code in this repo. Some very specific local system configuration or misconfiguration?

marisn commented 4 months ago

Here is the strace of my r.geomorphon crash:

This is a red herring. Run under GDB to get a backtrace of crash or under valgrind if memory corruption is suspected based on the GDB backtrace. Do you use any exotic compiler or flags (e.g. -O3)? Although recently we have done a great job to make code base not so GCC specific and cleaned up a lot of warnings, I am certain there is still a lot to do.

waarmond commented 4 months ago

Is r.geomorphon using GDAL?

Via gdal → armadillo → arpack → OpenMPI I had broken it.

gdb:

Using host libthread_db library "/usr/lib/libthread_db.so.1".

Program received signal SIGSEGV, Segmentation fault.
0x0000555555562ea0 in dirname ()
neteler commented 4 months ago

Concerning GDAL:

Now I'm getting to the Pudel's Kern: ./src/grass/dist.x86_64-pc-linux-gnu/bin/r.geomorphon: error while loading shared libraries: libgrass_raster.8.4.so: cannot open shared object file:

which exists at ./src/grass/dist.x86_64-pc-linux-gnu/lib/libgrass_raster.8.4.so

What does ldd report on the binary?