Re: Decouple C++ support in Meson's PGXS from LLVM enablement

From: Josef Šimánek <josef(dot)simanek(at)gmail(dot)com>
To: Tristan Partin <tristan(at)partin(dot)io>
Cc: pgsql-hackers <pgsql-hackers(at)postgresql(dot)org>, Andres Freund <andres(at)anarazel(dot)de>, Jelte Fennema-Nio <me(at)jeltef(dot)nl>
Subject: Re: Decouple C++ support in Meson's PGXS from LLVM enablement
Date: 2025-11-02 17:05:09
Message-ID: CAFp7QwrzNNQM7Hh-q5wVoDC53x_wRxJRW2Nd5AsDG7DaVt-tcw@mail.gmail.com
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

ne 2. 11. 2025 v 17:21 odesílatel Tristan Partin <tristan(at)partin(dot)io> napsal:
>
> Howdy folks,
>
> While playing around with pg_duckdb[0], a Postgres extension written in
> C++ which uses PGXS, I came across a strange build error:
>
> std=c++17 -Wno-sign-compare...
> /bin/sh: line 1: -Wno-sign-compare: command not found
>
> I was very confused by the error, but reading the command line, it made
> sense. After talking to Jelte off-list, he told me to try a Postgres
> installation that had been built with autotools. Today, I finally had
> a chance to try that tip, and building pg_duckdb succeeded.
>
> I spent some time exploring the Meson build a bit, and I realized that
> C++ support in PGXS is tied to LLVM enablement. Checking the autotools
> build in the configure.ac script indicates that that is not the case for
> it.
>
> On master, C++ support looks like:
>
> llvmopt = get_option('llvm')
> llvm = not_found_dep
> if add_languages('cpp', required: llvmopt, native: false)
> llvm = dependency('llvm', version: '>=14', method: 'config-tool', required: llvmopt)
> if llvm.found()
>
> cdata.set('USE_LLVM', 1)
>
> cpp = meson.get_compiler('cpp')
>
> By default, the `llvm` option is disabled, which Meson takes to mean,
> "do not check for C++ support". Thusly, add_languages() returns false.
> In addition, every check for adding to cxxflags, et. al. is gated on
> llvm.found(), which is always false for the `not_found_dep`. All this
> considered, the Makefile.global of a Postgres build roughly looked like:
>
> CXX =
> CXXFLAGS =
> ...

Did local build and review. I can confirm it detects CXX properly with
llvm disabled. Tested with

meson setup "$BUILD_DIR" \
--prefix="$INSTALL_DIR" \
--buildtype=debug \
-Dcassert=true \
-Dllvm=disabled

pre-patch (resulting into empty CXX) and post-patch (properly assigned
"ccache c++" to CXX).

> This then accounts for the original pg_duckdb command line looking the
> way that it did.
>
> Attached is a patch which decouples C++ support in PGXS from LLVM for
> a Meson-compiled Postgres.
>
> [0]: https://github.com/duckdb/pg_duckdb
>
> --
> Tristan Partin
> Neon (https://neon.tech)

In response to

Browse pgsql-hackers by date

  From Date Subject
Next Message Haiyang Li 2025-11-02 17:28:38 [PATCH] Add a guc parameter to control limit clause adjust path cost.
Previous Message Bryan Green 2025-11-02 16:52:52 Re: C nitpick about pgwin32_dispatch_queued_signals()