Closed medvied closed 11 months ago
An issue with PG_VERSION_NUM definition for PostgreSQL < 15 has been revealed by #211: PG_VERSION_NUM is defined for PostgreSQL 16.
Inside the build environment for PostgreSQL 15 it looks like the following:
> grep -R PG_VERSION_NUM /usr/include/ /usr/include/postgresql/pg_config.h:#define PG_VERSION_NUM 160000 /usr/include/postgresql/15/server/pg_config.h:#define PG_VERSION_NUM 150004 /usr/include/postgresql/15/server/fmgr.h: PG_VERSION_NUM / 100, \
And the build command for, for example, src/hnsw/external_index.c looks like this:
src/hnsw/external_index.c
/usr/bin/cc -DLANTERN_USE_USEARCH -Dlantern_EXPORTS -I/tmp/lantern/./third_party/usearch/c -isystem /usr/include/postgresql -isystem /usr/include/postgresql/15/server -isystem /tmp/lantern/src -isystem /tmp/lantern -Wall -Wextra -Wno-conversion -Wno-unknown-pragmas -fPIC -MD -MT CMakeFiles/lantern.dir/src/hnsw/external_index.c.o -MF CMakeFiles/lantern.dir/src/hnsw/external_index.c.o.d -o CMakeFiles/lantern.dir/src/hnsw/external_index.c.o -c /tmp/lantern/src/hnsw/external_index.c
We see
-isystem /usr/include/postgresql
followed by
-isystem /usr/include/postgresql/15/server
which means that PG_VERSION_NUM would be defined as 160000.
PG_VERSION_NUM
160000
We see that the first file is from libpq-dev, which is not being used by Lantern.
libpq-dev
> dpkg -S /usr/include/postgresql/pg_config.h libpq-dev: /usr/include/postgresql/pg_config.h > dpkg -S /usr/include/postgresql/15/server/pg_config.h postgresql-server-dev-15: /usr/include/postgresql/15/server/pg_config.h
This patch changes the order of directories for header search to use the server dir first, so the right PG_VERSION_NUM would be defined for builds for the older PostgreSQL versions.
An issue with PG_VERSION_NUM definition for PostgreSQL < 15 has been revealed by #211: PG_VERSION_NUM is defined for PostgreSQL 16.
Inside the build environment for PostgreSQL 15 it looks like the following:
And the build command for, for example,
src/hnsw/external_index.c
looks like this:We see
followed by
which means that
PG_VERSION_NUM
would be defined as160000
.We see that the first file is from
libpq-dev
, which is not being used by Lantern.This patch changes the order of directories for header search to use the server dir first, so the right
PG_VERSION_NUM
would be defined for builds for the older PostgreSQL versions.