diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-13 13:44:03 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-13 13:44:03 +0000 |
commit | 293913568e6a7a86fd1479e1cff8e2ecb58d6568 (patch) | |
tree | fc3b469a3ec5ab71b36ea97cc7aaddb838423a0c /src/port/meson.build | |
parent | Initial commit. (diff) | |
download | postgresql-16-293913568e6a7a86fd1479e1cff8e2ecb58d6568.tar.xz postgresql-16-293913568e6a7a86fd1479e1cff8e2ecb58d6568.zip |
Adding upstream version 16.2.upstream/16.2
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/port/meson.build')
-rw-r--r-- | src/port/meson.build | 197 |
1 files changed, 197 insertions, 0 deletions
diff --git a/src/port/meson.build b/src/port/meson.build new file mode 100644 index 0000000..0a16f1c --- /dev/null +++ b/src/port/meson.build @@ -0,0 +1,197 @@ +# Copyright (c) 2022-2023, PostgreSQL Global Development Group + +pgport_sources = [ + 'bsearch_arg.c', + 'chklocale.c', + 'inet_net_ntop.c', + 'noblock.c', + 'path.c', + 'pg_bitutils.c', + 'pg_strong_random.c', + 'pgcheckdir.c', + 'pgmkdirp.c', + 'pgsleep.c', + 'pgstrcasecmp.c', + 'pgstrsignal.c', + 'pqsignal.c', + 'qsort.c', + 'qsort_arg.c', + 'quotes.c', + 'snprintf.c', + 'strerror.c', + 'tar.c', + 'thread.c', +] + +if host_system == 'windows' + pgport_sources += files( + 'dirmod.c', + 'kill.c', + 'open.c', + 'system.c', + 'win32common.c', + 'win32dlopen.c', + 'win32env.c', + 'win32error.c', + 'win32fdatasync.c', + 'win32fseek.c', + 'win32getrusage.c', + 'win32link.c', + 'win32ntdll.c', + 'win32pread.c', + 'win32pwrite.c', + 'win32security.c', + 'win32setlocale.c', + 'win32stat.c', + ) +elif host_system == 'cygwin' + pgport_sources += files( + 'dirmod.c', + ) +endif + +if cc.get_id() == 'msvc' + pgport_sources += files( + 'dirent.c', + 'win32gettimeofday.c', + ) +endif + +# Replacement functionality to be built if corresponding configure symbol +# is false +replace_funcs_neg = [ + ['explicit_bzero'], + ['getopt'], + ['getopt_long'], + ['getpeereid'], + ['inet_aton'], + ['mkdtemp'], + ['preadv', 'HAVE_DECL_PREADV'], + ['pwritev', 'HAVE_DECL_PWRITEV'], + ['strlcat'], + ['strlcpy'], + ['strnlen'], +] + +if host_system != 'windows' + replace_funcs_neg += [['pthread_barrier_wait']] +endif + +# Replacement functionality to be built if corresponding configure symbol +# is true +replace_funcs_pos = [ + # x86/x64 + ['pg_crc32c_sse42', 'USE_SSE42_CRC32C'], + ['pg_crc32c_sse42', 'USE_SSE42_CRC32C_WITH_RUNTIME_CHECK', 'crc'], + ['pg_crc32c_sse42_choose', 'USE_SSE42_CRC32C_WITH_RUNTIME_CHECK'], + ['pg_crc32c_sb8', 'USE_SSE42_CRC32C_WITH_RUNTIME_CHECK'], + + # arm / aarch64 + ['pg_crc32c_armv8', 'USE_ARMV8_CRC32C'], + ['pg_crc32c_armv8', 'USE_ARMV8_CRC32C_WITH_RUNTIME_CHECK', 'crc'], + ['pg_crc32c_armv8_choose', 'USE_ARMV8_CRC32C_WITH_RUNTIME_CHECK'], + ['pg_crc32c_sb8', 'USE_ARMV8_CRC32C_WITH_RUNTIME_CHECK'], + + # generic fallback + ['pg_crc32c_sb8', 'USE_SLICING_BY_8_CRC32C'], +] + +pgport_cflags = {'crc': cflags_crc} +pgport_sources_cflags = {'crc': []} + +foreach f : replace_funcs_neg + func = f.get(0) + varname = f.get(1, 'HAVE_@0@'.format(func.to_upper())) + filename = '@0@.c'.format(func) + + val = '@0@'.format(cdata.get(varname, 'false')) + if val == 'false' or val == '0' + pgport_sources += files(filename) + endif +endforeach + +foreach f : replace_funcs_pos + func = f.get(0) + varname = f.get(1, 'HAVE_@0@'.format(func.to_upper())) + filename = '@0@.c'.format(func) + + val = '@0@'.format(cdata.get(varname, 'false')) + if val == 'true' or val == '1' + src = files(filename) + if f.length() > 2 + pgport_sources_cflags += {f[2]: pgport_sources_cflags[f[2]] + src} + else + pgport_sources += src + endif + endif +endforeach + + +if (host_system == 'windows' or host_system == 'cygwin') and \ + (cc.get_id() != 'msvc' or cc.version().version_compare('<14.0')) + + # Cygwin and (apparently, based on test results) Mingw both + # have a broken strtof(), so substitute its implementation. + # That's not a perfect fix, since it doesn't avoid double-rounding, + # but we have no better options. + pgport_sources += files('strtof.c') + message('On @0@ with compiler @1@ @2@ we will use our strtof wrapper.'.format( + host_system, cc.get_id(), cc.version())) +endif + + + +# Build pgport once for backend, once for use in frontend binaries, and once +# for use in shared libraries +pgport = {} +pgport_variants = { + '_srv': internal_lib_args + { + 'dependencies': [backend_port_code], + }, + '': default_lib_args + { + 'dependencies': [frontend_port_code], + }, + '_shlib': default_lib_args + { + 'pic': true, + 'dependencies': [frontend_port_code], + }, +} + +foreach name, opts : pgport_variants + + # Build internal static libraries for sets of files that need to be built + # with different cflags + cflag_libs = [] + foreach cflagname, sources : pgport_sources_cflags + if sources.length() == 0 + continue + endif + c_args = opts.get('c_args', []) + pgport_cflags[cflagname] + cflag_libs += static_library('libpgport@0@_@1@'.format(name, cflagname), + sources, + c_pch: pch_c_h, + kwargs: opts + { + 'c_args': c_args, + 'build_by_default': false, + 'install': false, + }, + ) + endforeach + + lib = static_library('libpgport@0@'.format(name), + pgport_sources, + link_with: cflag_libs, + c_pch: pch_c_h, + kwargs: opts + { + 'dependencies': opts['dependencies'] + [ssl], + } + ) + pgport += {name: lib} +endforeach + +pgport_srv = pgport['_srv'] +pgport_static = pgport[''] +pgport_shlib = pgport['_shlib'] + +# autoconf generates the file there, ensure we get a conflict +generated_sources_ac += {'src/port': ['pg_config_paths.h']} |