mirror of
https://github.com/postgres/postgres.git
synced 2025-05-12 16:21:30 +03:00
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
186 lines
4.7 KiB
Meson
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')
|