meson: ecpg: Split definition of static and shared libraries
authorAndres Freund <[email protected]>
Wed, 5 Oct 2022 16:56:05 +0000 (09:56 -0700)
committerAndres Freund <[email protected]>
Wed, 5 Oct 2022 16:56:05 +0000 (09:56 -0700)
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 <[email protected]>
Discussion: https://postgr.es/m/20220927011951[email protected]

src/interfaces/ecpg/compatlib/meson.build
src/interfaces/ecpg/ecpglib/meson.build
src/interfaces/ecpg/pgtypeslib/meson.build
src/interfaces/ecpg/test/meson.build

index 5887cb92b52f95ea04170afbb2f5f79900b8fdf2..b803000c708eeb275a9549a5229c5850f8c03783 100644 (file)
@@ -1,11 +1,29 @@
-export_file = custom_target('libpq.exports', kwargs: gen_export_kwargs)
-
-ecpg_compat = both_libraries('libecpg_compat',
+ecpg_compat_sources = files(
   'informix.c',
-  include_directories: ['.', ecpg_inc, postgres_inc, libpq_inc],
-  c_args: ['-DSO_MAJOR_VERSION=3'],
-  dependencies: [frontend_code, thread_dep],
-  link_with: [ecpglib, ecpg_pgtypes],
+)
+ecpg_compat_so_sources = [] # for shared lib, in addition to the above
+
+ecpg_compat_inc = [include_directories('.'), ecpg_inc, libpq_inc]
+ecpg_compat_c_args = ['-DSO_MAJOR_VERSION=3']
+export_file = custom_target('libecpg_compat.exports', kwargs: gen_export_kwargs)
+
+# see src/interfaces/libpq/meson.build
+ecpg_compat_st = static_library('libecpg_compat',
+  ecpg_compat_sources,
+  include_directories: ecpg_compat_inc,
+  c_args: ecpg_compat_c_args,
+  dependencies: [frontend_stlib_code, thread_dep],
+  link_with: [ecpglib_st, ecpg_pgtypes_st],
+  kwargs: default_lib_args,
+)
+ecpg_targets += ecpg_compat_st
+
+ecpg_compat_so = shared_library('libecpg_compat',
+  ecpg_compat_sources + ecpg_compat_so_sources,
+  include_directories: ecpg_compat_inc,
+  c_args: ecpg_compat_c_args,
+  dependencies: [frontend_shlib_code, thread_dep],
+  link_with: [ecpglib_so, ecpg_pgtypes_so],
   soversion: host_system != 'windows' ? '3' : '',
   darwin_versions: ['3', '3.' + pg_version_major.to_string()],
   version: '3.' + pg_version_major.to_string(),
@@ -13,10 +31,13 @@ ecpg_compat = both_libraries('libecpg_compat',
   link_depends: export_file,
   kwargs: default_lib_args,
 )
-ecpg_targets += [ecpg_compat.get_shared_lib(), ecpg_compat.get_static_lib()]
+ecpg_targets += ecpg_compat_so
 
 pkgconfig.generate(
-  ecpg_compat.get_shared_lib(),
+  name: 'libecpg_compat',
   description: 'PostgreSQL libecpg_compat library',
   url: pg_url,
+  libraries: ecpg_compat_so,
+  libraries_private: [frontend_stlib_code, thread_dep],
+  requires_private: ['libecpg', 'libpgtypes'],
 )
index 2da029ec8ea6172b23e8860d3e2e3edafc6ce3c0..6fdf019149cbf2a0706b9975ce97dfe594e2f42a 100644 (file)
@@ -10,15 +10,29 @@ ecpglib_sources = files(
   'sqlda.c',
   'typename.c',
 )
+ecpglib_so_sources = [] # for shared lib, in addition to the above
 
-export_file = custom_target('libpq.exports', kwargs: gen_export_kwargs)
+ecpglib_inc = [include_directories('.'), ecpg_inc]
+ecpglib_c_args = ['-DSO_MAJOR_VERSION=6']
+export_file = custom_target('libecpg.exports', kwargs: gen_export_kwargs)
 
-ecpglib = both_libraries('libecpg',
+# see src/interfaces/libpq/meson.build
+ecpglib_st = static_library('libecpg',
   ecpglib_sources,
-  include_directories: ['.', ecpg_inc, postgres_inc],
-  c_args: ['-DSO_MAJOR_VERSION=6'],
-  dependencies: [frontend_code, libpq, thread_dep],
-  link_with: [ecpg_pgtypes],
+  include_directories: ecpglib_inc,
+  c_args: ecpglib_c_args,
+  dependencies: [frontend_stlib_code, thread_dep, libpq],
+  link_with: [ecpg_pgtypes_st],
+  kwargs: default_lib_args,
+)
+ecpg_targets += ecpglib_st
+
+ecpglib_so = shared_library('libecpg',
+  ecpglib_sources + ecpglib_so_sources,
+  include_directories: ecpglib_inc,
+  c_args: ecpglib_c_args,
+  dependencies: [frontend_shlib_code, libpq, thread_dep],
+  link_with: ecpg_pgtypes_so,
   soversion: host_system != 'windows' ? '6' : '',
   darwin_versions: ['6', '6.' + pg_version_major.to_string()],
   version: '6.' + pg_version_major.to_string(),
@@ -26,12 +40,15 @@ ecpglib = both_libraries('libecpg',
   link_depends: export_file,
   kwargs: default_lib_args,
 )
-ecpg_targets += [ecpglib.get_shared_lib(), ecpglib.get_static_lib()]
+ecpg_targets += ecpglib_so
 
 pkgconfig.generate(
-  ecpglib.get_shared_lib(),
+  name: 'libecpg',
   description: 'PostgreSQL libecpg library',
   url: pg_url,
+  libraries: ecpglib_so,
+  libraries_private: [frontend_shlib_code, thread_dep],
+  requires_private: ['libpgtypes', 'libpq'],
 )
 
 subdir('po', if_found: libintl)
index 96489d9f1d732ed8e32f97d67ffad7f4c072ed4d..8e5d235810a4d364c80cdb447f28b6f290193522 100644 (file)
@@ -6,14 +6,27 @@ ecpg_pgtypes_sources = files(
   'numeric.c',
   'timestamp.c',
 )
+ecpg_pgtypes_so_sources = [] # for shared lib, in addition to the above
 
-export_file = custom_target('libpq.exports', kwargs: gen_export_kwargs)
+export_file = custom_target('libpgtypes.exports', kwargs: gen_export_kwargs)
+ecpg_pgtypes_inc = [include_directories('.'), ecpg_inc]
+ecpg_pgtypes_c_args = ['-DSO_MAJOR_VERSION=3']
 
-ecpg_pgtypes = both_libraries('libpgtypes',
+# see src/interfaces/libpq/meson.build
+ecpg_pgtypes_st = static_library('libpgtypes',
   ecpg_pgtypes_sources,
-  include_directories: ['.', ecpg_inc, postgres_inc],
-  c_args: ['-DSO_MAJOR_VERSION=3'],
-  dependencies: [frontend_code],
+  include_directories: ecpg_pgtypes_inc,
+  c_args: ecpg_pgtypes_c_args,
+  dependencies: frontend_stlib_code,
+  kwargs: default_lib_args,
+)
+ecpg_targets += ecpg_pgtypes_st
+
+ecpg_pgtypes_so = shared_library('libpgtypes',
+  ecpg_pgtypes_sources + ecpg_pgtypes_so_sources,
+  include_directories: ecpg_pgtypes_inc,
+  c_args: ecpg_pgtypes_c_args,
+  dependencies: frontend_shlib_code,
   version: '3.' + pg_version_major.to_string(),
   soversion: host_system != 'windows' ? '3' : '',
   darwin_versions: ['3', '3.' + pg_version_major.to_string()],
@@ -21,10 +34,12 @@ ecpg_pgtypes = both_libraries('libpgtypes',
   link_depends: export_file,
   kwargs: default_lib_args,
 )
-ecpg_targets += [ecpg_pgtypes.get_shared_lib(), ecpg_pgtypes.get_static_lib()]
+ecpg_targets += ecpg_pgtypes_so
 
 pkgconfig.generate(
-  ecpg_pgtypes.get_shared_lib(),
+  name: 'libpgtypes',
   description: 'PostgreSQL libpgtypes library',
   url: pg_url,
+  libraries: ecpg_pgtypes_so,
+  libraries_private: [frontend_stlib_code],
 )
index f0ace641f0c6e86dacfbc7e51bb11b7a485c4043..8904aa7fd90fd25f1e1607e0655fc2c9f9ba9199 100644 (file)
@@ -22,7 +22,7 @@ testprep_targets += pg_regress_ecpg
 ecpg_test_exec_kw = {
   'dependencies': [frontend_code, libpq],
   'include_directories': [ecpg_inc],
-  'link_with': [ecpglib, ecpg_compat, ecpg_pgtypes],
+  'link_with': [ecpglib_so, ecpg_compat_so, ecpg_pgtypes_so],
   'build_by_default': false,
   'install': false,
 }