Subject: Re: Meson and Numa: C header not found

From: "Daniel Westermann (DWE)" <[email-masked]>
Date: Thu, 10 Apr 2025 17:18:31 +0000

>That's just weird then.  The only other theory that comes to mind
>is that there's something wrong with the SELinux attributes on these
>fles.  restorecon might help if so.

If that would be the case, then it is a packaging issue on Fedora, I guess.

Even after restorecon I get this:

Found pkg-config: YES (/usr/bin/pkg-config) 2.3.0
Run-time dependency numa found: YES 2.0.19

../postgresql/meson.build:957:12: ERROR: C header 'numa.h' not found

... which gives this in the log:

Run-time dependency numa found: YES 2.0.19
Using cached compile:
Cached command line:  cc /home/postgres/build/meson-private/tmpjon5_bg2/testfile.c -E -P -D_FILE_OFFSET_BITS=64 -P -O0 

Code:
 
        #ifdef __has_include
         #if !__has_include("numa.h")
          #error "Header 'numa.h' could not be found"
         #endif
        #else
         #include <numa.h>
        #endif
Cached compiler stdout:
 
Cached compiler stderr:
 /home/postgres/build/meson-private/tmpjon5_bg2/testfile.c:4:12: error: #error "Header 'numa.h' could not be found"
    4 |           #error "Header 'numa.h' could not be found"
      |            ^~~~~

../postgresql/meson.build:957:12: ERROR: C header 'numa.h' not found

Regards
Daniel

---

From: Tom Lane <[email-masked]>
Date: Thu, 10 Apr 2025 13:45:03 -0400

> Cached command line:  cc /home/postgres/build/meson-private/tmpjon5_bg2/testfile.c -E -P -D_FILE_OFFSET_BITS=64 -P -O0 

Ah-hah: the "cached" bit gave me the clue I needed.  I think
you ran "meson setup" without numactl-devel installed, and it
cached the fact that numa.h wasn't there.  I can reproduce
this error with

$ sudo dnf remove numactl-devel
$ git clean -dfxq
$ meson setup build
$ sudo dnf install numactl-devel
$ meson setup build --reconfigure

... which ends with

meson.build:957:12: ERROR: C header 'numa.h' not found

It's okay again after blowing away the build subdirectory
(e.g. via "git clean -dfxq") and trying again.

This implies that it caches info about header presence but
not library presence (else it wouldn't have thought that
the library was there either, I guess).  Kind of weird,
but I'm still learning about meson.

			regards, tom lane