From 0dc45d5683e6dd1813bbb287b32c1bb8284bf5e9 Mon Sep 17 00:00:00 2001
From: "H. Vetinari" <h.vetinari@gmx.com>
Date: Fri, 21 Oct 2022 21:06:25 +1100
Subject: [PATCH 9/9] add pkgconfig metadata for shared windows builds

---
 CMake/AbseilDll.cmake     | 27 +++++++++++++++++++++++++++
 CMake/AbseilHelpers.cmake | 30 +++++++++++++++++++++++-------
 2 files changed, 50 insertions(+), 7 deletions(-)

diff --git a/CMake/AbseilDll.cmake b/CMake/AbseilDll.cmake
index 5e1316f0..8ac4cb40 100644
--- a/CMake/AbseilDll.cmake
+++ b/CMake/AbseilDll.cmake
@@ -548,6 +548,33 @@ function(absl_make_dll)
       ${ABSL_DEFAULT_COPTS}
   )
 
+  foreach(cflag ${ABSL_CC_LIB_COPTS})
+	if(${cflag} MATCHES "^(-Wno|/wd)")
+	  # These flags are needed to suppress warnings that might fire in our headers.
+	  set(PC_CFLAGS "${PC_CFLAGS} ${cflag}")
+	elseif(${cflag} MATCHES "^(-W|/w[1234eo])")
+	  # Don't impose our warnings on others.
+	else()
+	  set(PC_CFLAGS "${PC_CFLAGS} ${cflag}")
+	endif()
+  endforeach()
+  string(REPLACE ";" " " PC_LINKOPTS "${ABSL_CC_LIB_LINKOPTS}")
+
+  FILE(GENERATE OUTPUT "${CMAKE_BINARY_DIR}/lib/pkgconfig/abseil_dll.pc" CONTENT "\
+prefix=${CMAKE_INSTALL_PREFIX}\n\
+exec_prefix=\${prefix}\n\
+libdir=${CMAKE_INSTALL_FULL_LIBDIR}\n\
+includedir=${CMAKE_INSTALL_FULL_INCLUDEDIR}\n\
+\n\
+Name: abseil_dll\n\
+Description: Abseil DLL library\n\
+URL: https://abseil.io/\n\
+Version: ${absl_VERSION}\n\
+Libs: -L\${libdir} ${PC_LINKOPTS} $<$<NOT:$<BOOL:${ABSL_CC_LIB_IS_INTERFACE}>>:-labseil_dll>\n\
+Cflags: -I\${includedir}${PC_CFLAGS}\n")
+  INSTALL(FILES "${CMAKE_BINARY_DIR}/lib/pkgconfig/abseil_dll.pc"
+		  DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
+
   target_compile_definitions(
     abseil_dll
     PRIVATE
diff --git a/CMake/AbseilHelpers.cmake b/CMake/AbseilHelpers.cmake
index dbb09fe2..905cb2f4 100644
--- a/CMake/AbseilHelpers.cmake
+++ b/CMake/AbseilHelpers.cmake
@@ -143,8 +143,7 @@ function(absl_cc_library)
   endif()
 
   # Generate a pkg-config file for every library:
-  if((_build_type STREQUAL "static" OR _build_type STREQUAL "shared")
-     AND ABSL_ENABLE_INSTALL)
+  if(ABSL_ENABLE_INSTALL)
     if(NOT ABSL_CC_LIB_TESTONLY)
       if(absl_VERSION)
         set(PC_VERSION "${absl_VERSION}")
@@ -153,11 +152,28 @@ function(absl_cc_library)
       endif()
       foreach(dep ${ABSL_CC_LIB_DEPS})
         if(${dep} MATCHES "^absl::(.*)")
-	  # Join deps with commas.
-          if(PC_DEPS)
-            set(PC_DEPS "${PC_DEPS},")
+          # for DLL builds many libs are not created, but add
+          # the pkgconfigs nevertheless, pointing to the dll.
+          if(_build_type STREQUAL "dll")
+            # hide this MATCHES in an if-clause so it doesn't overwrite
+            # the CMAKE_MATCH_1 from (${dep} MATCHES "^absl::(.*)")
+            if(NOT PC_DEPS MATCHES "abseil_dll")
+              # Join deps with commas.
+              if(PC_DEPS)
+                set(PC_DEPS "${PC_DEPS},")
+              endif()
+              # don't duplicate dll-dep if it exists already
+              set(PC_DEPS "${PC_DEPS} abseil_dll = ${PC_VERSION}")
+              set(LNK_LIB "${LNK_LIB} -labseil_dll")
+            endif()
+          else()
+            # Join deps with commas.
+            if(PC_DEPS)
+              set(PC_DEPS "${PC_DEPS},")
+            endif()
+            set(PC_DEPS "${PC_DEPS} absl_${CMAKE_MATCH_1} = ${PC_VERSION}")
+            set(LNK_LIB "${LNK_LIB} -labsl_${_NAME}")
           endif()
-          set(PC_DEPS "${PC_DEPS} absl_${CMAKE_MATCH_1} = ${PC_VERSION}")
         endif()
       endforeach()
       foreach(cflag ${ABSL_CC_LIB_COPTS})
@@ -182,7 +198,7 @@ Description: Abseil ${_NAME} library\n\
 URL: https://abseil.io/\n\
 Version: ${PC_VERSION}\n\
 Requires:${PC_DEPS}\n\
-Libs: -L\${libdir} ${PC_LINKOPTS} $<$<NOT:$<BOOL:${ABSL_CC_LIB_IS_INTERFACE}>>:-labsl_${_NAME}>\n\
+Libs: -L\${libdir} ${PC_LINKOPTS} $<$<NOT:$<BOOL:${ABSL_CC_LIB_IS_INTERFACE}>>:${LNK_LIB}>\n\
 Cflags: -I\${includedir}${PC_CFLAGS}\n")
       INSTALL(FILES "${CMAKE_BINARY_DIR}/lib/pkgconfig/absl_${_NAME}.pc"
               DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
-- 
2.38.1.windows.1

