On Tue May 21, 2024 at 10:04 AM CDT, Andres Freund wrote:
Hi,

On 2024-05-20 11:58:05 +0100, Dave Page wrote:
> I have very little experience with Meson, and even less interpreting it's
> logs, but it seems to me that it's not including the extra lib and include
> directories when it runs the test compile, given the command line it's
> reporting:
> > cl C:\Users\dpage\git\postgresql\build\meson-private\tmpg_h4xcue\testfile.c
> /nologo /showIncludes /utf-8 /EP /nologo /showIncludes /utf-8 /EP /Od /Oi-
> > Bug, or am I doing something silly?

It's a buglet. We rely on meson's internal fallback detection of zlib, if it's
not provided via pkg-config or cmake. But it doesn't know about our
extra_include_dirs parameter. We should probably fix that...

Here is the relevant Meson code for finding zlib in the Postgres tree:

        postgres_inc_d = ['src/include']
        postgres_inc_d += get_option('extra_include_dirs')
        ...
        postgres_inc = [include_directories(postgres_inc_d)]
        ...
        zlibopt = get_option('zlib')
        zlib = not_found_dep
        if not zlibopt.disabled()
          zlib_t = dependency('zlib', required: zlibopt)

          if zlib_t.type_name() == 'internal'
                # if fallback was used, we don't need to test if headers are 
present (they
                # aren't built yet, so we can't test)
                zlib = zlib_t
          elif not zlib_t.found()
                warning('did not find zlib')
          elif not cc.has_header('zlib.h',
                  args: test_c_args, include_directories: postgres_inc,
                  dependencies: [zlib_t], required: zlibopt)
                warning('zlib header not found')
          elif not cc.has_type('z_streamp',
                  dependencies: [zlib_t], prefix: '#include <zlib.h>',
                  args: test_c_args, include_directories: postgres_inc)
                if zlibopt.enabled()
                  error('zlib version is too old')
                else
                  warning('zlib version is too old')
                endif
          else
                zlib = zlib_t
          endif

          if zlib.found()
                cdata.set('HAVE_LIBZ', 1)
          endif
        endif

You can see that we do pass the include dirs to the has_header check. Something seems to be going wrong here since your extra_include_dirs isn't being properly translated to include arguments.

--
Tristan Partin
https://tristan.partin.io


Reply via email to