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')
|