#1063825 ognibuild: crashes when building hexchat due to parsing meson stderr as JSON

Package:
ognibuild
Source:
ognibuild
Description:
Detect and run any build system
Submitter:
Paul Wise
Date:
2024-02-13 04:03:04 UTC
Severity:
normal
#1063825#5
Date:
2024-02-13 03:58:17 UTC
From:
To:
With hexchat, `ogni build` crashes because meson prints a warning
to stderr and that gets parsed as JSON by ognibuild/buildsystem.py.

https://github.com/hexchat/hexchat/

Probably the right fix would be to not parse meson stderror as JSON
and instead direct stderr to the terminal ogni is running on.

   hexchat (master =) $ ogni build
   Preparing directory .
   Using requirement resolver: [cpan, ctan, pypi, npm, go, hackage, cran, bioconductor, octave-forge]
   Detected buildsystems: meson
   Checking that declared requirements are present
   Running ['meson', 'introspect', '--scan-dependencies', './meson.build']
   Trying to enter misc which has already been visited --> Skipping
   [{"name": "gio-2.0", "required": true, "version": [">= 2.36.0"], "has_fallback": false, "conditional": false}, {"name": "gmodule-2.0", "required": true, "version": [], "has_fallback": false, "conditional": false}, {"name": "libcanberra", "required": true, "version": [">= 0.22"], "has_fallback": false, "conditional": false}, {"name": "dbus-glib-1", "required": true, "version": [], "has_fallback": false, "conditional": false}, {"name": "openssl", "required": true, "version": [">= 0.9.8"], "has_fallback": false, "conditional": true}, {"name": "gtk+-2.0", "required": true, "version": [">= 2.24.0"], "has_fallback": false, "conditional": false}, {"name": "x11", "required": true, "version": [], "has_fallback": false, "conditional": true}, {"name": "iso-codes", "required": false, "version": [], "has_fallback": false, "conditional": false}, {"name": "-embed", "required": false, "version": [">= 3.3"], "has_fallback": false, "conditional": true}, {"name": "libpci", "required": false, "version": [], "has_fallback": false, "conditional": true}]
   Traceback (most recent call last):
     File "/usr/bin/ogni", line 33, in <module>
       sys.exit(load_entry_point('ognibuild==0.0.18', 'console_scripts', 'ogni')())
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
     File "/usr/bin/ogni", line 25, in importlib_load_entry_point
       return next(matches).load()
              ^^^^^^^^^^^^^^^^^^^^
     File "/usr/lib/python3.11/importlib/metadata/__init__.py", line 202, in load
       module = import_module(match.group('module'))
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
     File "/usr/lib/python3.11/importlib/__init__.py", line 126, in import_module
       return _bootstrap._gcd_import(name[level:], package, level)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
     File "<frozen importlib._bootstrap>", line 1204, in _gcd_import
     File "<frozen importlib._bootstrap>", line 1176, in _find_and_load
     File "<frozen importlib._bootstrap>", line 1147, in _find_and_load_unlocked
     File "<frozen importlib._bootstrap>", line 690, in _load_unlocked
     File "<frozen importlib._bootstrap_external>", line 940, in exec_module
     File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
     File "/usr/lib/python3/dist-packages/ognibuild/__main__.py", line 329, in <module>
       sys.exit(main())
                ^^^^^^
     File "/usr/lib/python3/dist-packages/ognibuild/__main__.py", line 233, in main
       install_necessary_declared_requirements(
     File "/usr/lib/python3/dist-packages/ognibuild/__main__.py", line 65, in install_necessary_declared_requirements
       buildsystem.install_declared_requirements(
     File "/usr/lib/python3/dist-packages/ognibuild/buildsystem.py", line 98, in install_declared_requirements
       relevant = get_necessary_declared_requirements(
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
     File "/usr/lib/python3/dist-packages/ognibuild/buildsystem.py", line 76, in get_necessary_declared_requirements
       for stage, req in requirements:
     File "/usr/lib/python3/dist-packages/ognibuild/buildsystem.py", line 943, in get_declared_dependencies
       resp = self._introspect(session, fixers, ["--scan-dependencies"])
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
     File "/usr/lib/python3/dist-packages/ognibuild/buildsystem.py", line 940, in _introspect
       return json.loads(''.join(ret))
              ^^^^^^^^^^^^^^^^^^^^^^^^
     File "/usr/lib/python3.11/json/__init__.py", line 346, in loads
       return _default_decoder.decode(s)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^
     File "/usr/lib/python3.11/json/decoder.py", line 337, in decode
       obj, end = self.raw_decode(s, idx=_w(s, 0).end())
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
     File "/usr/lib/python3.11/json/decoder.py", line 355, in raw_decode
       raise JSONDecodeError("Expecting value", s, err.value) from None
   json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

   hexchat (master =) $ meson introspect --scan-dependencies ./meson.build > /dev/null
   Trying to enter misc which has already been visited --> Skipping

   hexchat (master =) $ meson introspect --scan-dependencies ./meson.build 2> /dev/null
   [{"name": "gio-2.0", "required": true, "version": [">= 2.36.0"], "has_fallback": false, "conditional": false}, {"name": "gmodule-2.0", "required": true, "version": [], "has_fallback": false, "conditional": false}, {"name": "libcanberra", "required": true, "version": [">= 0.22"], "has_fallback": false, "conditional": false}, {"name": "dbus-glib-1", "required": true, "version": [], "has_fallback": false, "conditional": false}, {"name": "openssl", "required": true, "version": [">= 0.9.8"], "has_fallback": false, "conditional": true}, {"name": "gtk+-2.0", "required": true, "version": [">= 2.24.0"], "has_fallback": false, "conditional": false}, {"name": "x11", "required": true, "version": [], "has_fallback": false, "conditional": true}, {"name": "iso-codes", "required": false, "version": [], "has_fallback": false, "conditional": false}, {"name": "-embed", "required": false, "version": [">= 3.3"], "has_fallback": false, "conditional": true}, {"name": "libpci", "required": false, "version": [], "has_fallback": false, "conditional": true}]