1
0
mirror of https://github.com/postgres/postgres.git synced 2025-05-12 16:21:30 +03:00
postgres/src/common/meson.build
Jeff Davis 5c40364dd6 Unicode case mapping tables and functions.
Implements Unicode simple case mapping, in which all code points map
to exactly one other code point unconditionally.

These tables are generated from UnicodeData.txt, which is already
being used by other infrastructure in src/common/unicode. The tables
are checked into the source tree, so they only need to be regenerated
when we update the Unicode version.

In preparation for the builtin collation provider, and possibly useful
for other callers.

Discussion: https://postgr.es/m/ff4c2f2f9c8fc7ca27c1c24ae37ecaeaeaff6b53.camel%40j-davis.com
Reviewed-by: Peter Eisentraut, Daniel Verite, Jeremy Schneider
2024-03-07 11:15:06 -08:00

186 lines
4.7 KiB
Meson

# Copyright (c) 2022-2024, PostgreSQL Global Development Group
common_sources = files(
'archive.c',
'base64.c',
'binaryheap.c',
'blkreftable.c',
'checksum_helper.c',
'compression.c',
'controldata_utils.c',
'encnames.c',
'exec.c',
'file_perm.c',
'file_utils.c',
'hashfn.c',
'ip.c',
'jsonapi.c',
'keywords.c',
'kwlookup.c',
'link-canary.c',
'md5_common.c',
'parse_manifest.c',
'percentrepl.c',
'pg_get_line.c',
'pg_lzcompress.c',
'pg_prng.c',
'pgfnames.c',
'psprintf.c',
'relpath.c',
'rmtree.c',
'saslprep.c',
'scram-common.c',
'string.c',
'stringinfo.c',
'unicode_case.c',
'unicode_category.c',
'unicode_norm.c',
'username.c',
'wait_error.c',
'wchar.c',
)
if ssl.found()
common_sources += files(
'cryptohash_openssl.c',
'hmac_openssl.c',
'protocol_openssl.c',
)
else
common_sources += files(
'cryptohash.c',
'hmac.c',
'md5.c',
'sha1.c',
'sha2.c',
)
endif
common_kwlist = custom_target('kwlist',
input: files('../include/parser/kwlist.h'),
output: 'kwlist_d.h',
depend_files: gen_kwlist_deps,
command: [gen_kwlist_cmd, '--extern'])
generated_sources += common_kwlist
common_sources += common_kwlist
# The code imported from Ryu gets a pass on declaration-after-statement,
# in order to keep it more closely aligned with its upstream.
ryu_sources = files(
'd2s.c',
'f2s.c',
)
ryu_cflags = []
ryu_cflags += cflags_no_decl_after_statement
config_info_sources = files('config_info.c',)
config_info_cflags = [
'-DVAL_CC="@0@"'.format(var_cc),
'-DVAL_CPPFLAGS="@0@"'.format(var_cppflags),
'-DVAL_CFLAGS="@0@"'.format(var_cflags),
'-DVAL_CFLAGS_SL="@0@"'.format(var_cflags_sl),
'-DVAL_LDFLAGS="@0@"'.format(var_ldflags),
'-DVAL_LDFLAGS_EX="@0@"'.format(var_ldflags_ex),
'-DVAL_LDFLAGS_SL="@0@"'.format(var_ldflags_sl),
'-DVAL_LIBS="@0@"'.format(var_libs),
]
# Some files need to be built with different cflags. The different sets are
# defined here.
common_cflags = {
'ryu': ryu_cflags,
'config_info': config_info_cflags,
}
common_sources_cflags = {
'ryu': ryu_sources,
'config_info': config_info_sources
}
# A few files are currently only built for frontend, not server.
# logging.c is excluded from OBJS_FRONTEND_SHLIB (shared library) as
# a matter of policy, because it is not appropriate for general purpose
# libraries such as libpq to report errors directly.
common_sources_frontend_shlib = common_sources
common_sources_frontend_shlib += files(
'fe_memutils.c',
'restricted_token.c',
'sprompt.c',
)
common_sources_frontend_static = common_sources_frontend_shlib
common_sources_frontend_static += files(
'logging.c',
)
# Build pgcommon once for backend, once for use in frontend binaries, and
# once for use in shared libraries
#
# XXX: in most environments we could probably link_whole pgcommon_shlib
# against pgcommon_static, instead of compiling twice.
#
# For the server build of pgcommon, depend on lwlocknames_h and because at
# least cryptohash_openssl.c, hmac_openssl.c depend on it.
# controldata_utils.c depends on wait_event_types_h. That's arguably a
# layering violation, but ...
pgcommon = {}
pgcommon_variants = {
'_srv': internal_lib_args + {
'sources': common_sources + [lwlocknames_h] + [wait_event_types_h],
'dependencies': [backend_common_code],
},
'': default_lib_args + {
'sources': common_sources_frontend_static,
'dependencies': [frontend_common_code],
# Files in libpgcommon.a should use/export the "xxx_private" versions
# of pg_char_to_encoding() and friends.
'c_args': ['-DUSE_PRIVATE_ENCODING_FUNCS'],
},
'_shlib': default_lib_args + {
'pic': true,
'sources': common_sources_frontend_shlib,
'dependencies': [frontend_common_code],
},
}
foreach name, opts : pgcommon_variants
# Build internal static libraries for sets of files that need to be built
# with different cflags
cflag_libs = []
foreach cflagname, sources : common_sources_cflags
if sources.length() == 0
continue
endif
c_args = opts.get('c_args', []) + common_cflags[cflagname]
cflag_libs += static_library('libpgcommon@0@_@1@'.format(name, cflagname),
c_pch: pch_c_h,
include_directories: include_directories('.'),
kwargs: opts + {
'sources': sources,
'c_args': c_args,
'build_by_default': false,
'install': false,
},
)
endforeach
lib = static_library('libpgcommon@0@'.format(name),
link_with: cflag_libs,
c_pch: pch_c_h,
include_directories: include_directories('.'),
kwargs: opts + {
'dependencies': opts['dependencies'] + [ssl],
}
)
pgcommon += {name: lib}
endforeach
common_srv = pgcommon['_srv']
common_shlib = pgcommon['_shlib']
common_static = pgcommon['']
subdir('unicode')