From 05e328476f2d6ef8a0f3f44aca1e5b1cdb7499fc Mon Sep 17 00:00:00 2001
From: Shyamnath Premnadh <Shyamnath.Premnadh@qt.io>
Date: Wed, 28 May 2025 14:44:23 +0200
Subject: [PATCH] PySide6: Cleanup CMake configuration files

- Variables PYSIDE_PYTHONPATH, PYSIDE_TYPESYSTEMS, PYSIDE_GLUE were
  corrected to correctly reflect the paths for the build-tree in the
  CMake configuration files during super-project build of PySide6.
  These were also corrected for the install-tree based on the wheel
  structure.
- Introduce two new CMake variables PYSIDE_PYTHON_CONFIG_SUFFIX
  and PYSIDE_SO_VERSION shipped with the CMake config files.
- Fix pyside6qml to use the export set of pyside6.

Change-Id: I3b177bfed31af1d0e3a13fcc9469019a7f349d22
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
---
 sources/pyside6/cmake/PySideSetup.cmake       |  1 +
 sources/pyside6/libpyside/CMakeLists.txt      | 37 ++++++++++++-------
 .../libpyside/PySide6Config-spec.cmake.in     |  4 ++
 3 files changed, 28 insertions(+), 14 deletions(-)

diff --git a/sources/pyside6/cmake/PySideSetup.cmake b/sources/pyside6/cmake/PySideSetup.cmake
index 71c8206465..72d6a1ccf6 100644
--- a/sources/pyside6/cmake/PySideSetup.cmake
+++ b/sources/pyside6/cmake/PySideSetup.cmake
@@ -52,6 +52,7 @@ set(BINDING_API_MINOR_VERSION "${pyside_MINOR_VERSION}")
 set(BINDING_API_MICRO_VERSION "${pyside_MICRO_VERSION}")
 set(BINDING_API_PRE_RELEASE_VERSION_TYPE "${pyside_PRE_RELEASE_VERSION_TYPE}")
 set(BINDING_API_PRE_RELEASE_VERSION "${pyside_PRE_RELEASE_VERSION}")
+set(pyside6_library_so_version "${SHIBOKEN_SO_VERSION}")
 
 # Detect if the Python interpreter is actually PyPy
 execute_process(
diff --git a/sources/pyside6/libpyside/CMakeLists.txt b/sources/pyside6/libpyside/CMakeLists.txt
index 089e1c74e2..75c2328744 100644
--- a/sources/pyside6/libpyside/CMakeLists.txt
+++ b/sources/pyside6/libpyside/CMakeLists.txt
@@ -146,28 +146,29 @@ configure_file("${CMAKE_CURRENT_SOURCE_DIR}/pyside6.pc.in"
 include(CMakePackageConfigHelpers)
 
 # Build-tree / super project package config file.
-set(PYSIDE_PYTHONPATH "${pysidebindings_BINARY_DIR}/PySide6")
-set(PYSIDE_TYPESYSTEMS "${pysidebindings_SOURCE_DIR}/PySide6/templates/")
-set(PYSIDE_GLUE "${pysidebindings_SOURCE_DIR}/PySide6/glue")
+set(PYSIDE_PYTHONPATH "${PYTHON_SITE_PACKAGES}/PySide6")
+set(PYSIDE_TYPESYSTEMS "${CMAKE_INSTALL_PREFIX}/share/PySide6${pyside6_SUFFIX}/typesystems")
+set(PYSIDE_GLUE "${CMAKE_INSTALL_PREFIX}/share/PySide6${pyside6_SUFFIX}/glue")
 
 configure_package_config_file(
     "${CMAKE_CURRENT_SOURCE_DIR}/PySide6Config-spec.cmake.in"
     "${CMAKE_CURRENT_BINARY_DIR}/PySide6Config${SHIBOKEN_PYTHON_CONFIG_SUFFIX}.cmake"
-     INSTALL_DESTINATION "${CMAKE_CURRENT_BINARY_DIR}"
-     PATH_VARS PYSIDE_PYTHONPATH PYSIDE_TYPESYSTEMS PYSIDE_GLUE
-     INSTALL_PREFIX "${CMAKE_CURRENT_BINARY_DIR}"
+    INSTALL_DESTINATION "${CMAKE_CURRENT_BINARY_DIR}"
+    PATH_VARS PYSIDE_PYTHONPATH PYSIDE_TYPESYSTEMS PYSIDE_GLUE
+    INSTALL_PREFIX "${CMAKE_CURRENT_BINARY_DIR}"
 )
 
-set(PYSIDE_PYTHONPATH "${PYTHON_SITE_PACKAGES}/PySide6")
-set(PYSIDE_TYPESYSTEMS "${CMAKE_INSTALL_PREFIX}/share/PySide6${pyside6_SUFFIX}/typesystems")
-set(PYSIDE_GLUE "${CMAKE_INSTALL_PREFIX}/share/PySide6${pyside6_SUFFIX}/glue")
+# Install-tree / wheel configuration
+set(PYSIDE_PYTHONPATH "")
+set(PYSIDE_TYPESYSTEMS "typesystems")
+set(PYSIDE_GLUE "glue")
+set(PYSIDE_SOVERSION "${pyside6_library_so_version}")
 
-# Install-tree / relocatable package config file.
 configure_package_config_file(
     "${CMAKE_CURRENT_SOURCE_DIR}/PySide6Config-spec.cmake.in"
     "${CMAKE_CURRENT_BINARY_DIR}/install/PySide6Config${SHIBOKEN_PYTHON_CONFIG_SUFFIX}.cmake"
-     INSTALL_DESTINATION "${LIB_INSTALL_DIR}/cmake/PySide6"
-     PATH_VARS PYSIDE_PYTHONPATH PYSIDE_TYPESYSTEMS PYSIDE_GLUE
+    INSTALL_DESTINATION "${LIB_INSTALL_DIR}/cmake/PySide6"
+    PATH_VARS PYSIDE_PYTHONPATH PYSIDE_TYPESYSTEMS PYSIDE_GLUE
 )
 
 configure_file("${CMAKE_CURRENT_SOURCE_DIR}/PySide6Config.cmake.in"
@@ -178,12 +179,20 @@ configure_file("${CMAKE_CURRENT_SOURCE_DIR}/PySide6ConfigVersion.cmake.in"
 install(FILES ${libpyside_HEADERS}
         DESTINATION ${BINDING_NAME}${pyside6_SUFFIX}/include)
 
+# build-time installation
 install(TARGETS pyside6 EXPORT PySide6Targets
                         LIBRARY DESTINATION "${LIB_INSTALL_DIR}"
                         ARCHIVE DESTINATION "${LIB_INSTALL_DIR}"
                         RUNTIME DESTINATION bin)
-install(EXPORT PySide6Targets NAMESPACE PySide6::
-        DESTINATION "${LIB_INSTALL_DIR}/cmake/PySide6")
+
+# wheel installation
+set_target_properties(pyside6 PROPERTIES
+    VERSION ${PYSIDE_SOVERSION})
+
+install(TARGETS pyside6 EXPORT PySide6WheelTargets
+                        LIBRARY DESTINATION "PySide6"
+                        ARCHIVE DESTINATION "PySide6"
+                        RUNTIME DESTINATION "PySide6")
 
 install(FILES "${CMAKE_CURRENT_BINARY_DIR}/pyside6${pyside6_SUFFIX}.pc"
         DESTINATION "${LIB_INSTALL_DIR}/pkgconfig")
diff --git a/sources/pyside6/libpyside/PySide6Config-spec.cmake.in b/sources/pyside6/libpyside/PySide6Config-spec.cmake.in
index fd3de1e759..f9e9a4900e 100644
--- a/sources/pyside6/libpyside/PySide6Config-spec.cmake.in
+++ b/sources/pyside6/libpyside/PySide6Config-spec.cmake.in
@@ -10,6 +10,10 @@ if (NOT TARGET PySide6::pyside6)
     include("${CMAKE_CURRENT_LIST_DIR}/PySide6Targets.cmake")
 endif()
 
+# set static variables
+set(PYSIDE_PYTHON_CONFIG_SUFFIX "@PYTHON_CONFIG_SUFFIX@")
+set(PYSIDE_SO_VERSION "@pyside6_library_so_version@")
+
 # Set relocatable variables.
 set_and_check(PYSIDE_PYTHONPATH "@PACKAGE_PYSIDE_PYTHONPATH@")
 set_and_check(PYSIDE_TYPESYSTEMS "@PACKAGE_PYSIDE_TYPESYSTEMS@")
