From 1db1c13d6cb6149ee529d1a9bcc2282a0728ed2e Mon Sep 17 00:00:00 2001
From: Nazir Bilal Yavuz <byavuz81@gmail.com>
Date: Tue, 12 Aug 2025 20:46:57 +0300
Subject: [PATCH v2 1/2] meson: windows: Add _shared suffix to the .pdb files
 of shared libraries

Otherwise static and shared libraries overwrite each other's .pdb
(debug) files.

Suggested-by: Andres Freund <andres@anarazel.de>
Author: Nazir Bilal Yavuz <byavuz81@gmail.com>
Reviewed-by: Jacob Champion <jacob.champion@enterprisedb.com>
Reviewed-by: Peter Eisentraut <peter@eisentraut.org>
Reviewed-by: Tom Lane <tgl@sss.pgh.pa.us>
Discussion: https://postgr.es/m/CAN55FZ1RuBhJmPWs3Oi%3D9UoezDfrtO-VaU67db5%2B0_uy19uF%2BA%40mail.gmail.com
---
 src/interfaces/libpq/meson.build           | 9 ++++++++-
 src/interfaces/ecpg/compatlib/meson.build  | 9 ++++++++-
 src/interfaces/ecpg/ecpglib/meson.build    | 9 ++++++++-
 src/interfaces/ecpg/pgtypeslib/meson.build | 9 ++++++++-
 4 files changed, 32 insertions(+), 4 deletions(-)

diff --git a/src/interfaces/libpq/meson.build b/src/interfaces/libpq/meson.build
index a74e885b169..d0203901fa7 100644
--- a/src/interfaces/libpq/meson.build
+++ b/src/interfaces/libpq/meson.build
@@ -66,6 +66,13 @@ libpq_st = static_library('libpq',
   kwargs: default_lib_args,
 )
 
+# Change shared library's .pdb name so it won't conflict with static library's
+# .pdb file
+libpq_pdb_args = []
+if host_system == 'windows'
+  libpq_pdb_args = ['/PDB:' + meson.current_build_dir() / 'libpq_shared.pdb']
+endif
+
 libpq_so = shared_library('libpq',
   libpq_sources + libpq_so_sources,
   include_directories: [libpq_inc, postgres_inc],
@@ -76,7 +83,7 @@ libpq_so = shared_library('libpq',
   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()),
+  link_args: [export_fmt.format(export_file.full_path())] + libpq_pdb_args,
   kwargs: default_lib_args,
 )
 
diff --git a/src/interfaces/ecpg/compatlib/meson.build b/src/interfaces/ecpg/compatlib/meson.build
index 56e0a21651b..42bc87869ff 100644
--- a/src/interfaces/ecpg/compatlib/meson.build
+++ b/src/interfaces/ecpg/compatlib/meson.build
@@ -26,6 +26,13 @@ ecpg_compat_st = static_library('libecpg_compat',
 )
 ecpg_targets += ecpg_compat_st
 
+# Change shared library's .pdb name so it won't conflict with static library's
+# .pdb file
+ecpg_compat_pdb_args = []
+if host_system == 'windows'
+  ecpg_compat_pdb_args = ['/PDB:' + meson.current_build_dir() / 'libecpg_compat_shared.pdb']
+endif
+
 ecpg_compat_so = shared_library('libecpg_compat',
   ecpg_compat_sources + ecpg_compat_so_sources,
   include_directories: ecpg_compat_inc,
@@ -35,7 +42,7 @@ ecpg_compat_so = shared_library('libecpg_compat',
   soversion: host_system != 'windows' ? '3' : '',
   darwin_versions: ['3', '3.' + pg_version_major.to_string()],
   version: '3.' + pg_version_major.to_string(),
-  link_args: export_fmt.format(export_file.full_path()),
+  link_args: [export_fmt.format(export_file.full_path())] + ecpg_compat_pdb_args,
   link_depends: export_file,
   kwargs: default_lib_args,
 )
diff --git a/src/interfaces/ecpg/ecpglib/meson.build b/src/interfaces/ecpg/ecpglib/meson.build
index 8f478c6a73e..1d090489a69 100644
--- a/src/interfaces/ecpg/ecpglib/meson.build
+++ b/src/interfaces/ecpg/ecpglib/meson.build
@@ -36,6 +36,13 @@ ecpglib_st = static_library('libecpg',
 )
 ecpg_targets += ecpglib_st
 
+# Change shared library's .pdb name so it won't conflict with static library's
+# .pdb file
+ecpglib_pdb_args = []
+if host_system == 'windows'
+  ecpglib_pdb_args = ['/PDB:' + meson.current_build_dir() / 'libecpg_shared.pdb']
+endif
+
 ecpglib_so = shared_library('libecpg',
   ecpglib_sources + ecpglib_so_sources,
   include_directories: ecpglib_inc,
@@ -46,7 +53,7 @@ ecpglib_so = shared_library('libecpg',
   soversion: host_system != 'windows' ? '6' : '',
   darwin_versions: ['6', '6.' + pg_version_major.to_string()],
   version: '6.' + pg_version_major.to_string(),
-  link_args: export_fmt.format(export_file.full_path()),
+  link_args: [export_fmt.format(export_file.full_path())] + ecpglib_pdb_args,
   link_depends: export_file,
   kwargs: default_lib_args,
 )
diff --git a/src/interfaces/ecpg/pgtypeslib/meson.build b/src/interfaces/ecpg/pgtypeslib/meson.build
index 02301ec9acb..80a1f0db28e 100644
--- a/src/interfaces/ecpg/pgtypeslib/meson.build
+++ b/src/interfaces/ecpg/pgtypeslib/meson.build
@@ -31,6 +31,13 @@ ecpg_pgtypes_st = static_library('libpgtypes',
 )
 ecpg_targets += ecpg_pgtypes_st
 
+# Change shared library's .pdb name so it won't conflict with static library's
+# .pdb file
+ecpg_pgtypes_pdb_args = []
+if host_system == 'windows'
+  ecpg_pgtypes_pdb_args = ['/PDB:' + meson.current_build_dir() / 'libpgtypes_shared.pdb']
+endif
+
 ecpg_pgtypes_so = shared_library('libpgtypes',
   ecpg_pgtypes_sources + ecpg_pgtypes_so_sources,
   include_directories: ecpg_pgtypes_inc,
@@ -40,7 +47,7 @@ ecpg_pgtypes_so = shared_library('libpgtypes',
   version: '3.' + pg_version_major.to_string(),
   soversion: host_system != 'windows' ? '3' : '',
   darwin_versions: ['3', '3.' + pg_version_major.to_string()],
-  link_args: export_fmt.format(export_file.full_path()),
+  link_args: [export_fmt.format(export_file.full_path())] + ecpg_pgtypes_pdb_args,
   link_depends: export_file,
   kwargs: default_lib_args,
 )
-- 
2.50.1

