1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
|
# Copyright (c) 2022-2025, PostgreSQL Global Development Group
libpq_sources = files(
'fe-auth-scram.c',
'fe-auth.c',
'fe-cancel.c',
'fe-connect.c',
'fe-exec.c',
'fe-lobj.c',
'fe-misc.c',
'fe-print.c',
'fe-protocol3.c',
'fe-secure.c',
'fe-trace.c',
'legacy-pqsignal.c',
'libpq-events.c',
'pqexpbuffer.c',
)
libpq_so_sources = [] # for shared lib, in addition to the above
if host_system == 'windows'
libpq_sources += files('pthread-win32.c', 'win32.c')
libpq_so_sources += rc_lib_gen.process(win32ver_rc, extra_args: [
'--NAME', 'libpq',
'--FILEDESC', 'PostgreSQL Access Library',])
endif
if ssl.found()
libpq_sources += files('fe-secure-common.c')
libpq_sources += files('fe-secure-openssl.c')
endif
if gssapi.found()
libpq_sources += files(
'fe-gssapi-common.c',
'fe-secure-gssapi.c',
)
endif
export_file = custom_target('libpq.exports',
kwargs: gen_export_kwargs,
)
# port needs to be in include path due to pthread-win32.h
libpq_inc = include_directories('.', '../../port')
libpq_c_args = ['-DSO_MAJOR_VERSION=5']
# Not using both_libraries() here as
# 1) resource files should only be in the shared library
# 2) we want the .pc file to include a dependency to {pgport,common}_static for
# libpq_st, and {pgport,common}_shlib for libpq_sh
#
# We could try to avoid building the source files twice, but it probably adds
# more complexity than its worth (reusing object files requires also linking
# to the library on windows or breaks precompiled headers).
libpq_st = static_library('libpq',
libpq_sources,
include_directories: [libpq_inc],
c_args: libpq_c_args,
c_pch: pch_postgres_fe_h,
dependencies: [frontend_stlib_code, libpq_deps],
kwargs: default_lib_args,
)
libpq_so = shared_library('libpq',
libpq_sources + libpq_so_sources,
include_directories: [libpq_inc, postgres_inc],
c_args: libpq_c_args,
c_pch: pch_postgres_fe_h,
version: '5.' + pg_version_major.to_string(),
soversion: host_system != 'windows' ? '5' : '',
darwin_versions: ['5', '5.' + pg_version_major.to_string()],
dependencies: [frontend_shlib_code, libpq_deps],
link_depends: export_file,
link_args: export_fmt.format(export_file.full_path()),
kwargs: default_lib_args,
)
libpq = declare_dependency(
link_with: [libpq_so],
include_directories: [include_directories('.')]
)
pkgconfig.generate(
name: 'libpq',
description: 'PostgreSQL libpq library',
url: pg_url,
libraries: libpq,
libraries_private: [frontend_stlib_code, libpq_deps],
)
install_headers(
'libpq-fe.h',
'libpq-events.h',
)
install_headers(
'libpq-int.h',
'pqexpbuffer.h',
'fe-auth-sasl.h',
install_dir: dir_include_internal,
)
install_data('pg_service.conf.sample',
install_dir: dir_data,
)
subdir('test')
tests += {
'name': 'libpq',
'sd': meson.current_source_dir(),
'bd': meson.current_build_dir(),
'tap': {
'tests': [
't/001_uri.pl',
't/002_api.pl',
't/003_load_balance_host_list.pl',
't/004_load_balance_dns.pl',
't/005_negotiate_encryption.pl',
],
'env': {
'with_ssl': ssl_library,
'with_gssapi': gssapi.found() ? 'yes' : 'no',
'with_krb_srvnam': 'postgres',
},
'deps': libpq_test_deps,
},
}
subdir('po', if_found: libintl)
|