lanterndata / lantern

PostgreSQL vector database extension for building AI applications
https://lantern.dev
Other
755 stars 53 forks source link

cmake/FindPostgreSQL: put the server include dir first #217

Closed medvied closed 11 months ago

medvied commented 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:

/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.

We see that the first file is from libpq-dev, which is not being used by Lantern.

> 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.