From 2efd2800ad8f3c50e4a22093ac19fa65283d44d5 Mon Sep 17 00:00:00 2001 From: Andres Freund Date: Sat, 27 Aug 2022 09:52:03 -0700 Subject: [PATCH v9 1/6] meson: Add postgresql-extension.pc for building extension libraries This should work with several other buildsystems. TODO: Docs Author: Andres Freund Author: Nazir Bilal Yavuz Discussion: https://postgr.es/m/206b001d-1884-4081-bd02-bed5c92f02ba%40eisentraut.org --- src/backend/meson.build | 110 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 110 insertions(+) diff --git a/src/backend/meson.build b/src/backend/meson.build index 712a857cdb4..5b63bb9441b 100644 --- a/src/backend/meson.build +++ b/src/backend/meson.build @@ -188,6 +188,116 @@ pg_test_mod_args = pg_mod_args + { +############################################################### +# Define a .pc file that can be used to build server extensions +############################################################### + +pg_ext_vars = [] +pg_ext_vars_inst = [] +pg_ext_vars_uninst = [] + +pg_ext_cflags = pg_mod_c_args + cppflags +pg_ext_libs = [backend_mod_deps, thread_dep, ldflags, ldflags_mod] +pg_ext_subdirs = [''] + +# Compute directories to add include directories to the .pc files for. +# This is a bit more complicated due to port/win32 etc. +i = 0 +foreach incdir : postgres_inc_d + if fs.is_absolute(incdir) + # an absolute path from -Dextra_include_dirs + pg_ext_cflags += '-I@0@'.format(incdir) + continue + elif incdir.startswith('src/include') + subincdir = dir_include_pkg_rel / 'server' / incdir.split('src/include/').get(1, '') + else + subincdir = '' + endif + pg_ext_subdirs += subincdir + + # Add directories in source / build dir containing headers to cflags for the + # -uninstalled.pc. Older versions of pkg-config complain if a referenced + # variable is not defined, so we emit an empty one for the installed .pc + # file. + pg_ext_vars += [ + 'build_inc@0@=""'.format(i), + 'src_inc@0@=""'.format(i), + ] + pg_ext_vars_uninst += [ + 'build_inc@0@=-I${prefix}/@1@'.format(i, incdir), + 'src_inc@0@=-I${srcdir}/@1@'.format(i, incdir), + ] + pg_ext_cflags += [ + '${build_inc@0@}'.format(i), + '${src_inc@0@}'.format(i) + ] + + i += 1 +endforeach + + +# Extension modules should likely also use -fwrapv etc. But it it's a bit odd +# to expose it to a .pc file? +pg_ext_cflags_warn = pg_ext_cflags + cflags_warn +pg_ext_cflags += cflags + +# Directories for extensions to install into +# XXX: more needed +pg_ext_vars += 'pkglibdir=${prefix}/@0@'.format(dir_lib_pkg) +pg_ext_vars += 'dir_mod=${pkglibdir}' +pg_ext_vars += 'dir_data=${prefix}/@0@'.format(dir_data_extension) +pg_ext_vars += 'dir_include=${prefix}/@0@'.format(dir_include_extension) +pg_ext_vars += 'dir_doc=${prefix}/@0@'.format(dir_doc_extension) +pg_ext_vars += 'dir_bitcode=${prefix}/@0@'.format(dir_bitcode) +# referenced on some platforms, via mod_link_with_dir +pg_ext_vars += 'bindir=${prefix}/@0@'.format(dir_bin) + +# XXX: Define variables making it easy to define tests, too + +# Some platforms need linker flags to link with binary, they are the same +# between building with meson and .pc file, except that we have have to +# reference a variable to make it work for both normal and -uninstalled .pc +# files. +if mod_link_args_fmt.length() != 0 + assert(link_with_inst != '') + assert(link_with_uninst != '') + + pg_ext_vars_inst += 'mod_link_with=@0@'.format(link_with_inst) + pg_ext_vars_uninst += 'mod_link_with=@0@'.format(link_with_uninst) + + foreach el : mod_link_args_fmt + pg_ext_libs += el.format('${mod_link_with}') + endforeach +endif + +# main .pc to build extensions +pkgconfig.generate( + name: 'postgresql-extension', + description: 'PostgreSQL Extension Support', + url: pg_url, + + subdirs: pg_ext_subdirs, + libraries: pg_ext_libs, + extra_cflags: pg_ext_cflags, + + variables: pg_ext_vars + pg_ext_vars_inst, + uninstalled_variables: pg_ext_vars + pg_ext_vars_uninst, +) + +# a .pc depending on the above, but with all our warnings enabled +pkgconfig.generate( + name: 'postgresql-extension-warnings', + description: 'PostgreSQL Extension Support - Compiler Warnings', + requires: 'postgresql-extension', + url: pg_url, + extra_cflags: pg_ext_cflags_warn, + + variables: pg_ext_vars + pg_ext_vars_inst, + uninstalled_variables: pg_ext_vars + pg_ext_vars_uninst, +) + + + # Shared modules that, on some system, link against the server binary. Only # enter these after we defined the server build. -- 2.47.3