In my own "native" Python module I declare a new type this way:
PyTypeObject calculatorType = {
PyVarObject_HEAD_INIT(NULL, 0)
.tp_name = "My.Calculator",
.tp_basicsize = sizeof(PyMyCalculator),
.tp_itemsize = 0,
.tp_dealloc = (destructor)NULL,
.tp_getattr = NULL,
.tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
.tp_doc = "Python wrapper of My Calculator",
.tp_methods = calculatorMethods,
.tp_members = NULL,
.tp_init = NULL,
.tp_new = calcInitialize
};
This works, but CLang (the default compiler on FreeBSD) produces a warning:
warning: mixture of designated and non-designated initializers in the same initializer list is a C99 extension [-Wc99-designator]
This is because the PyVarObject_HEAD_INIT-macro does not explicitly name the fields...
I like designated initializers for obvious reasons, but I don't want to trigger a useless warning either. Disabling it with -Wno-c99-designator would work for CLang, but on Linux we use g++14, which does not have this particular warning and complains:
unrecognized command-line option '-Wno-c99-designator'
How should I deal with it? I can make adding the flag conditional based on the operating system's name, but some day we might use CLang on Linux or GNU C++ on FreeBSD...
Is there a way to query, from inside setup.py, which compiler will be invoked -- a way, that would work with Python as old as 3.6?