On 18.06.25 08:40, Matt Smith (matts3) wrote:
Yes I understand what you're saying. I know Meson tries to set some of
these flags. But I want the source of truth for my flags for each target
type to be outside Meson. Which Meson is not designed to do.
When you're building many 3^rd party deps all with different build
systems and all trying to tweak flags here and there, it introduces much
better consistency to specify "all targets of a certain type use this
flag set". Otherwise you end up having to write logic to filter flags
per build system/package. And yes I realize we live in an imperfect
world and packages such as postgres will in fact need to set project-
specific flags, but this should be an exception.
I have raised an issue on Meson itself: https://github.com/mesonbuild/
meson/issues/14621 <https://github.com/mesonbuild/meson/issues/14621>
Cmake has functionality whereby you can specify linker flags per target
type and it will set them accordingly. Meson doesn't have this type of
feature and instead sets base flags itself across all targets.
Yeah, I see myself agreeing with the answers on that Meson issue. I
think this is just not how the tool was meant to be used.
So it would be helpful if postgresql could "drill a hole" as you say to
shared_library() flags because then at least those flags can be
overrriden externally just for those targets.
If you don't mind me asking - I assume ldflags_sl exists as a way for
postgres internally to be able to set flags across all shared libs?
I think this is all legacy from makefiles. With makefiles there isn't a
clear boundary between what variables are internal and external. And at
some point someone thought that it would be useful to document the
LDFLAGS_SL variable as external. But I don't know why anyone would use
it. I can make up some ideas retrospectively, perhaps someone wanted to
play around with -fvisibility or -fPIE or stuff like that. But even
then I would wonder whether it has the right granularity, since you
might need different flags for shared modules versus shared libraries.
That's why I asked you if you had a specific use case for an option to
pass. And then we could have thought about a way to expose that option
in a dedicated way perhaps. But I think this idea that you want to
control all the options yourself is just not the way this is meant to be
working.