From d72ad4df929bc9d0882298fc1f85ecf589456ff6 Mon Sep 17 00:00:00 2001
From: Daniel Lundberg Pedersen <dlp@qtec.com>
Date: Thu, 23 Jan 2025 11:48:16 +0100
Subject: [PATCH] CMakeLists.txt: Add support for pkg-config

Create and install pkg-config (.pc) file for dependency detection.
Upstream-Status: Submitted [https://github.com/pybind/pybind11_json/pull/75]
Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
 CMakeLists.txt      | 24 ++++++++++++++++++++++++
 pybind11_json.pc.in |  7 +++++++
 2 files changed, 31 insertions(+)
 create mode 100644 pybind11_json.pc.in

diff --git a/CMakeLists.txt b/CMakeLists.txt
index c0ef675..a92240a 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -133,3 +133,27 @@ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${PROJECT_NAME}Config.cmake
 install(EXPORT ${PROJECT_NAME}-targets
         FILE ${PROJECT_NAME}Targets.cmake
         DESTINATION ${PYBIND11_JSON_CMAKECONFIG_INSTALL_DIR})
+
+# pkg-config support
+if(NOT prefix_for_pc_file)
+if(IS_ABSOLUTE "${CMAKE_INSTALL_DATAROOTDIR}")
+  set(prefix_for_pc_file "${CMAKE_INSTALL_PREFIX}")
+else()
+  set(pc_datarootdir "${CMAKE_INSTALL_DATAROOTDIR}")
+  if(CMAKE_VERSION VERSION_LESS 3.20)
+    set(prefix_for_pc_file "\${pcfiledir}/..")
+    while(pc_datarootdir)
+      get_filename_component(pc_datarootdir "${pc_datarootdir}" DIRECTORY)
+      string(APPEND prefix_for_pc_file "/..")
+    endwhile()
+  else()
+    cmake_path(RELATIVE_PATH CMAKE_INSTALL_PREFIX BASE_DIRECTORY CMAKE_INSTALL_DATAROOTDIR
+               OUTPUT_VARIABLE prefix_for_pc_file)
+  endif()
+endif()
+endif()
+set(includedir_for_pc_file "\${prefix}/${CMAKE_INSTALL_INCLUDEDIR}")
+configure_file("${CMAKE_CURRENT_SOURCE_DIR}/pybind11_json.pc.in"
+             "${CMAKE_CURRENT_BINARY_DIR}/pybind11_json.pc" @ONLY)
+install(FILES "${CMAKE_CURRENT_BINARY_DIR}/pybind11_json.pc"
+      DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/pkgconfig/")
diff --git a/pybind11_json.pc.in b/pybind11_json.pc.in
new file mode 100644
index 0000000..da5bfde
--- /dev/null
+++ b/pybind11_json.pc.in
@@ -0,0 +1,7 @@
+prefix=@prefix_for_pc_file@
+includedir=@includedir_for_pc_file@
+
+Name: @PROJECT_NAME@
+Description: Using nlohmann::json with pybind11
+Version: @PROJECT_VERSION@
+Cflags: -I${includedir}
