jsonpath scanner: reentrant scanner
[pgsql.git] / src / common / meson.build
blob538e0f43d55b12146bb5cbb14b8680ef4c25a59a
1 # Copyright (c) 2022-2024, PostgreSQL Global Development Group
3 common_sources = files(
4   'archive.c',
5   'base64.c',
6   'binaryheap.c',
7   'blkreftable.c',
8   'checksum_helper.c',
9   'compression.c',
10   'controldata_utils.c',
11   'encnames.c',
12   'exec.c',
13   'file_perm.c',
14   'file_utils.c',
15   'hashfn.c',
16   'ip.c',
17   'jsonapi.c',
18   'keywords.c',
19   'kwlookup.c',
20   'link-canary.c',
21   'md5_common.c',
22   'parse_manifest.c',
23   'percentrepl.c',
24   'pg_get_line.c',
25   'pg_lzcompress.c',
26   'pg_prng.c',
27   'pgfnames.c',
28   'psprintf.c',
29   'relpath.c',
30   'rmtree.c',
31   'saslprep.c',
32   'scram-common.c',
33   'string.c',
34   'stringinfo.c',
35   'unicode_case.c',
36   'unicode_category.c',
37   'unicode_norm.c',
38   'username.c',
39   'wait_error.c',
40   'wchar.c',
43 if ssl.found()
44   common_sources += files(
45     'cryptohash_openssl.c',
46     'hmac_openssl.c',
47   )
48 else
49   common_sources += files(
50     'cryptohash.c',
51     'hmac.c',
52     'md5.c',
53     'sha1.c',
54     'sha2.c',
55   )
56 endif
58 common_kwlist = custom_target('kwlist',
59   input: files('../include/parser/kwlist.h'),
60   output: 'kwlist_d.h',
61   depend_files: gen_kwlist_deps,
62   command: [gen_kwlist_cmd, '--extern'])
63 generated_sources += common_kwlist
64 common_sources += common_kwlist
66 # The code imported from Ryu gets a pass on declaration-after-statement,
67 # in order to keep it more closely aligned with its upstream.
68 ryu_sources = files(
69   'd2s.c',
70   'f2s.c',
72 ryu_cflags = []
74 ryu_cflags += cflags_no_decl_after_statement
76 config_info_sources = files('config_info.c',)
77 config_info_cflags = [
78   '-DVAL_CC="@0@"'.format(var_cc),
79   '-DVAL_CPPFLAGS="@0@"'.format(var_cppflags),
80   '-DVAL_CFLAGS="@0@"'.format(var_cflags),
81   '-DVAL_CFLAGS_SL="@0@"'.format(var_cflags_sl),
82   '-DVAL_LDFLAGS="@0@"'.format(var_ldflags),
83   '-DVAL_LDFLAGS_EX="@0@"'.format(var_ldflags_ex),
84   '-DVAL_LDFLAGS_SL="@0@"'.format(var_ldflags_sl),
85   '-DVAL_LIBS="@0@"'.format(var_libs),
88 # Some files need to be built with different cflags. The different sets are
89 # defined here.
90 common_cflags = {
91   'ryu': ryu_cflags,
92   'config_info': config_info_cflags,
94 common_sources_cflags = {
95   'ryu': ryu_sources,
96   'config_info': config_info_sources
100 # A few files are currently only built for frontend, not server.
101 # logging.c is excluded from OBJS_FRONTEND_SHLIB (shared library) as
102 # a matter of policy, because it is not appropriate for general purpose
103 # libraries such as libpq to report errors directly.  fe_memutils.c is
104 # excluded because libpq must not exit() on allocation failure.
106 # The excluded files for _shlib builds are pulled into their own static
107 # library, for the benefit of test programs that need not follow the
108 # shlib rules.
110 common_sources_frontend_shlib = common_sources
111 common_sources_frontend_shlib += files(
112   'restricted_token.c',
113   'sprompt.c',
116 common_sources_excluded_shlib = files(
117   'fe_memutils.c',
118   'logging.c',
121 common_sources_frontend_static = [
122   common_sources_frontend_shlib,
123   common_sources_excluded_shlib,
126 # Build pgcommon once for backend, once for use in frontend binaries, and
127 # once for use in shared libraries
129 # XXX: in most environments we could probably link_whole pgcommon_shlib
130 # against pgcommon_static, instead of compiling twice.
132 # For the server build of pgcommon, depend on lwlocknames_h and because at
133 # least cryptohash_openssl.c, hmac_openssl.c depend on it.
134 # controldata_utils.c depends on wait_event_types_h. That's arguably a
135 # layering violation, but ...
136 pgcommon = {}
137 pgcommon_variants = {
138   '_srv': internal_lib_args + {
139     'sources': common_sources + [lwlocknames_h] + [wait_event_types_h],
140     'dependencies': [backend_common_code],
141   },
142   '': default_lib_args + {
143     'sources': common_sources_frontend_static,
144     'dependencies': [frontend_common_code],
145     # Files in libpgcommon.a should use/export the "xxx_private" versions
146     # of pg_char_to_encoding() and friends.
147     'c_args': ['-DUSE_PRIVATE_ENCODING_FUNCS'],
148   },
149   '_shlib': default_lib_args + {
150     'pic': true,
151     'sources': common_sources_frontend_shlib,
152     'dependencies': [frontend_common_code],
153     # The JSON API normally exits on out-of-memory; disable that behavior for
154     # shared library builds. This requires libpq's pqexpbuffer.h.
155     'c_args': ['-DJSONAPI_USE_PQEXPBUFFER'],
156     'include_directories': include_directories('../interfaces/libpq'),
157   },
160 foreach name, opts : pgcommon_variants
162   # Build internal static libraries for sets of files that need to be built
163   # with different cflags
164   cflag_libs = []
165   foreach cflagname, sources : common_sources_cflags
166     if sources.length() == 0
167       continue
168     endif
169     c_args = opts.get('c_args', []) + common_cflags[cflagname]
170     cflag_libs += static_library('libpgcommon@0@_@1@'.format(name, cflagname),
171       c_pch: pch_c_h,
172       kwargs: opts + {
173         'include_directories': [
174           include_directories('.'),
175           opts.get('include_directories', []),
176         ],
177         'sources': sources,
178         'c_args': c_args,
179         'build_by_default': false,
180         'install': false,
181       },
182     )
183   endforeach
185   lib = static_library('libpgcommon@0@'.format(name),
186       link_with: cflag_libs,
187       c_pch: pch_c_h,
188       kwargs: opts + {
189         'include_directories': [
190           include_directories('.'),
191           opts.get('include_directories', []),
192         ],
193         'dependencies': opts['dependencies'] + [ssl],
194       }
195     )
196   pgcommon += {name: lib}
197 endforeach
199 common_srv = pgcommon['_srv']
200 common_shlib = pgcommon['_shlib']
201 common_static = pgcommon['']
203 common_excluded_shlib = static_library('libpgcommon_excluded_shlib',
204   sources: common_sources_excluded_shlib,
205   dependencies: [frontend_common_code],
206   build_by_default: false,
207   kwargs: default_lib_args + {
208     'install': false,
209   },
212 subdir('unicode')