Files
odfstudio/pyuno
Michael Weghorn 4a8d42fc6d pyuno: Include Python.h first to avoid _POSIX_C_SOURCE redefinitions
As

    commit a545badd65
    Author: Stephan Bergmann <sbergman@redhat.com>
    Date:   Thu Feb 16 18:15:04 2012 +0100

        Work around macro redefinition warning

already did for pyuno/source/module/pyuno_dlopenwrapper.c ,
also include the <Python.h> header first
in more pyuno source files.

Quoting from the Python/C API reference manual about include
files [1]:

> Note: Since Python may define some pre-processor definitions
> which affect the standard headers on some systems, you must
> include Python.h before any standard headers are included.

This avoids build errors like the following otherwise seen
on Debian testing after a glibc update from 2.42-17 to 2.43-3:

    In file included from /home/michi/development/git/libreoffice/pyuno/source/module/pyuno_struct.cxx:28:
    In file included from /home/michi/development/git/libreoffice/pyuno/source/module/pyuno_impl.hxx:26:
    In file included from /home/michi/development/git/libreoffice/workdir/UnpackedTarball/python3/Include/Python.h:14:
    /home/michi/development/git/libreoffice/workdir/UnpackedTarball/python3/pyconfig.h:1985:9: error: '_POSIX_C_SOURCE' macro redefined [-Werror,-Wmacro-redefined]
     1985 | #define _POSIX_C_SOURCE 200809L
          |         ^
    /usr/include/features.h:319:10: note: previous definition is here
      319 | # define _POSIX_C_SOURCE        202405L
          |          ^

[1] https://docs.python.org/3/c-api/intro.html#include-files

Change-Id: I4ae90cfc9b92b559181d3884cdc8d51ee11f922d
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/209871
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2026-08-26 11:39:00 +02:00
..
…
…
…
…

Python UNO Bindings

UNO bindings for the Python programming language.

To have much joy debugging Python extensions you need to:

  • a) edit pythonloader.py in your install setting DEBUG=1 at the top
  • b) touch pyuno/source/module/pyuno_runtime.cxx and make debug=true in pyuno

Then you'll start to see your exceptions on the console instead of them getting lost at the UNO interface.

Python also comes with a gdb script libpython$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)m.so.1.0-gdb.py that is copied to instdir and will be auto-loaded by gdb; it provides commands like py-bt to get a Python-level backtrace, and py-print to print Python variables.

Another way to debug Python code is to use pdb: edit some initialization function to insert import pdb; pdb.set_trace() (somewhere so that it is executed early), then run soffice from a terminal and a command-line Python debugger will appear where you can set Python-level breakpoints.