Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit a1261cd

Browse files
committed
meson: ecpg: Split definition of static and shared libraries
Required for correct resource file generation, as the resource files should only be added to the shared library. This also fixes a bunch of issues in the .pc files. Previously I tried to avoid building sources twice, once for the static and once for the shared libraries. We could still do so, but it's not clear that it's worth the complication. Reviewed-by: Peter Eisentraut <peter.eisentraut@enterprisedb.com> Discussion: https://postgr.es/m/20220927011951.j3h4o7n6bhf7dwau@awork3.anarazel.de
1 parent 089c0bc commit a1261cd

File tree

4 files changed

+78
-25
lines changed

4 files changed

+78
-25
lines changed
+30-9
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,43 @@
1-
export_file = custom_target('libpq.exports', kwargs: gen_export_kwargs)
2-
3-
ecpg_compat = both_libraries('libecpg_compat',
1+
ecpg_compat_sources = files(
42
'informix.c',
5-
include_directories: ['.', ecpg_inc, postgres_inc, libpq_inc],
6-
c_args: ['-DSO_MAJOR_VERSION=3'],
7-
dependencies: [frontend_code, thread_dep],
8-
link_with: [ecpglib, ecpg_pgtypes],
3+
)
4+
ecpg_compat_so_sources = [] # for shared lib, in addition to the above
5+
6+
ecpg_compat_inc = [include_directories('.'), ecpg_inc, libpq_inc]
7+
ecpg_compat_c_args = ['-DSO_MAJOR_VERSION=3']
8+
export_file = custom_target('libecpg_compat.exports', kwargs: gen_export_kwargs)
9+
10+
# see src/interfaces/libpq/meson.build
11+
ecpg_compat_st = static_library('libecpg_compat',
12+
ecpg_compat_sources,
13+
include_directories: ecpg_compat_inc,
14+
c_args: ecpg_compat_c_args,
15+
dependencies: [frontend_stlib_code, thread_dep],
16+
link_with: [ecpglib_st, ecpg_pgtypes_st],
17+
kwargs: default_lib_args,
18+
)
19+
ecpg_targets += ecpg_compat_st
20+
21+
ecpg_compat_so = shared_library('libecpg_compat',
22+
ecpg_compat_sources + ecpg_compat_so_sources,
23+
include_directories: ecpg_compat_inc,
24+
c_args: ecpg_compat_c_args,
25+
dependencies: [frontend_shlib_code, thread_dep],
26+
link_with: [ecpglib_so, ecpg_pgtypes_so],
927
soversion: host_system != 'windows' ? '3' : '',
1028
darwin_versions: ['3', '3.' + pg_version_major.to_string()],
1129
version: '3.' + pg_version_major.to_string(),
1230
link_args: export_fmt.format(export_file.full_path()),
1331
link_depends: export_file,
1432
kwargs: default_lib_args,
1533
)
16-
ecpg_targets += [ecpg_compat.get_shared_lib(), ecpg_compat.get_static_lib()]
34+
ecpg_targets += ecpg_compat_so
1735

1836
pkgconfig.generate(
19-
ecpg_compat.get_shared_lib(),
37+
name: 'libecpg_compat',
2038
description: 'PostgreSQL libecpg_compat library',
2139
url: pg_url,
40+
libraries: ecpg_compat_so,
41+
libraries_private: [frontend_stlib_code, thread_dep],
42+
requires_private: ['libecpg', 'libpgtypes'],
2243
)

src/interfaces/ecpg/ecpglib/meson.build

+25-8
Original file line numberDiff line numberDiff line change
@@ -10,28 +10,45 @@ ecpglib_sources = files(
1010
'sqlda.c',
1111
'typename.c',
1212
)
13+
ecpglib_so_sources = [] # for shared lib, in addition to the above
1314

14-
export_file = custom_target('libpq.exports', kwargs: gen_export_kwargs)
15+
ecpglib_inc = [include_directories('.'), ecpg_inc]
16+
ecpglib_c_args = ['-DSO_MAJOR_VERSION=6']
17+
export_file = custom_target('libecpg.exports', kwargs: gen_export_kwargs)
1518

16-
ecpglib = both_libraries('libecpg',
19+
# see src/interfaces/libpq/meson.build
20+
ecpglib_st = static_library('libecpg',
1721
ecpglib_sources,
18-
include_directories: ['.', ecpg_inc, postgres_inc],
19-
c_args: ['-DSO_MAJOR_VERSION=6'],
20-
dependencies: [frontend_code, libpq, thread_dep],
21-
link_with: [ecpg_pgtypes],
22+
include_directories: ecpglib_inc,
23+
c_args: ecpglib_c_args,
24+
dependencies: [frontend_stlib_code, thread_dep, libpq],
25+
link_with: [ecpg_pgtypes_st],
26+
kwargs: default_lib_args,
27+
)
28+
ecpg_targets += ecpglib_st
29+
30+
ecpglib_so = shared_library('libecpg',
31+
ecpglib_sources + ecpglib_so_sources,
32+
include_directories: ecpglib_inc,
33+
c_args: ecpglib_c_args,
34+
dependencies: [frontend_shlib_code, libpq, thread_dep],
35+
link_with: ecpg_pgtypes_so,
2236
soversion: host_system != 'windows' ? '6' : '',
2337
darwin_versions: ['6', '6.' + pg_version_major.to_string()],
2438
version: '6.' + pg_version_major.to_string(),
2539
link_args: export_fmt.format(export_file.full_path()),
2640
link_depends: export_file,
2741
kwargs: default_lib_args,
2842
)
29-
ecpg_targets += [ecpglib.get_shared_lib(), ecpglib.get_static_lib()]
43+
ecpg_targets += ecpglib_so
3044

3145
pkgconfig.generate(
32-
ecpglib.get_shared_lib(),
46+
name: 'libecpg',
3347
description: 'PostgreSQL libecpg library',
3448
url: pg_url,
49+
libraries: ecpglib_so,
50+
libraries_private: [frontend_shlib_code, thread_dep],
51+
requires_private: ['libpgtypes', 'libpq'],
3552
)
3653

3754
subdir('po', if_found: libintl)

src/interfaces/ecpg/pgtypeslib/meson.build

+22-7
Original file line numberDiff line numberDiff line change
@@ -6,25 +6,40 @@ ecpg_pgtypes_sources = files(
66
'numeric.c',
77
'timestamp.c',
88
)
9+
ecpg_pgtypes_so_sources = [] # for shared lib, in addition to the above
910

10-
export_file = custom_target('libpq.exports', kwargs: gen_export_kwargs)
11+
export_file = custom_target('libpgtypes.exports', kwargs: gen_export_kwargs)
12+
ecpg_pgtypes_inc = [include_directories('.'), ecpg_inc]
13+
ecpg_pgtypes_c_args = ['-DSO_MAJOR_VERSION=3']
1114

12-
ecpg_pgtypes = both_libraries('libpgtypes',
15+
# see src/interfaces/libpq/meson.build
16+
ecpg_pgtypes_st = static_library('libpgtypes',
1317
ecpg_pgtypes_sources,
14-
include_directories: ['.', ecpg_inc, postgres_inc],
15-
c_args: ['-DSO_MAJOR_VERSION=3'],
16-
dependencies: [frontend_code],
18+
include_directories: ecpg_pgtypes_inc,
19+
c_args: ecpg_pgtypes_c_args,
20+
dependencies: frontend_stlib_code,
21+
kwargs: default_lib_args,
22+
)
23+
ecpg_targets += ecpg_pgtypes_st
24+
25+
ecpg_pgtypes_so = shared_library('libpgtypes',
26+
ecpg_pgtypes_sources + ecpg_pgtypes_so_sources,
27+
include_directories: ecpg_pgtypes_inc,
28+
c_args: ecpg_pgtypes_c_args,
29+
dependencies: frontend_shlib_code,
1730
version: '3.' + pg_version_major.to_string(),
1831
soversion: host_system != 'windows' ? '3' : '',
1932
darwin_versions: ['3', '3.' + pg_version_major.to_string()],
2033
link_args: export_fmt.format(export_file.full_path()),
2134
link_depends: export_file,
2235
kwargs: default_lib_args,
2336
)
24-
ecpg_targets += [ecpg_pgtypes.get_shared_lib(), ecpg_pgtypes.get_static_lib()]
37+
ecpg_targets += ecpg_pgtypes_so
2538

2639
pkgconfig.generate(
27-
ecpg_pgtypes.get_shared_lib(),
40+
name: 'libpgtypes',
2841
description: 'PostgreSQL libpgtypes library',
2942
url: pg_url,
43+
libraries: ecpg_pgtypes_so,
44+
libraries_private: [frontend_stlib_code],
3045
)

src/interfaces/ecpg/test/meson.build

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ testprep_targets += pg_regress_ecpg
2222
ecpg_test_exec_kw = {
2323
'dependencies': [frontend_code, libpq],
2424
'include_directories': [ecpg_inc],
25-
'link_with': [ecpglib, ecpg_compat, ecpg_pgtypes],
25+
'link_with': [ecpglib_so, ecpg_compat_so, ecpg_pgtypes_so],
2626
'build_by_default': false,
2727
'install': false,
2828
}

0 commit comments

Comments
 (0)