cmake: Cleanup package config code
authorJuan Ramos <juan@lunarg.com>
Wed, 4 Oct 2023 20:34:47 +0000 (14:34 -0600)
committerJuan Ramos <114601453+juan-lunarg@users.noreply.github.com>
Wed, 4 Oct 2023 21:05:23 +0000 (15:05 -0600)
.github/workflows/build.yml
loader/CMakeLists.txt
loader/vulkan.pc.in

index de2968977dc09441e606910ff2efe0b3b1f5615a..003ed3e32b7ce333c2cb2e738a35b31c8594caf9 100644 (file)
@@ -73,6 +73,9 @@ jobs:
             - name: Install the loader
               run: cmake --install build --prefix build/install
 
+            - name: cat vulkan.pc
+              run: cat ./build/install/lib/pkgconfig/vulkan.pc
+
             - name: Validate pkg-config
               run: pkg-config --validate ./build/install/lib/pkgconfig/vulkan.pc
 
index 06563704006a1860bc8f41cc533bdcc8eb944b5a..132bc90e32ea0bd845e681326ca4221d60671bdb 100644 (file)
@@ -390,9 +390,24 @@ if (TARGET asm_offset)
     set_target_properties(asm_offset PROPERTIES ${LOADER_STANDARD_C_PROPERTIES})
 endif()
 
-# Generate pkg-config file.
-find_package(PkgConfig QUIET)
-if(PKG_CONFIG_FOUND)
+target_link_libraries(vulkan PRIVATE Vulkan::Headers)
+add_library(Vulkan::Loader ALIAS vulkan)
+
+if (APPLE AND BUILD_STATIC_LOADER)
+    # When exporting a static library all linked libraries - private or not - need to be exported.
+    return()
+endif()
+
+install(TARGETS vulkan EXPORT VulkanLoaderConfig)
+# Generate CMake Configuration File (IE: VulkanLoaderConfig.cmake)
+set_target_properties(vulkan PROPERTIES EXPORT_NAME "Loader")
+install(EXPORT VulkanLoaderConfig DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/VulkanLoader NAMESPACE Vulkan::)
+
+# Generate PkgConfig File (IE: vulkan.pc)
+# NOTE: Hopefully in the future CMake can generate .pc files natively.
+# https://gitlab.kitware.com/cmake/cmake/-/issues/22621
+find_package(PkgConfig)
+if (PKG_CONFIG_FOUND)
     set(PRIVATE_LIBS "")
     if (APPLE AND BUILD_STATIC_LOADER)
         # Libs.private should only be present when building a static loader
@@ -411,30 +426,17 @@ if(PKG_CONFIG_FOUND)
         endif()
     endif()
 
-    set(CMAKE_INSTALL_FULL_LIBDIR_PC ${CMAKE_INSTALL_FULL_LIBDIR})
-
-    # NOTE: Hopefully in the future CMake can generate .pc files natively so we can simplify our code.
-    # https://gitlab.kitware.com/cmake/cmake/-/issues/22621
+    # BUG: The following code will NOT work will with `cmake --install ... --prefix <dir>`
+    #
+    # ISSUE: vulkan.pc also adds an include path that incidentally points to the vulkan headers.
+    # This shouldn't have been added but removing it may break backcompat at this point.
     if ("${CMAKE_INSTALL_PREFIX}" STREQUAL "")
-        set(CMAKE_INSTALL_REL_LIBDIR_PC ${CMAKE_INSTALL_FULL_LIBDIR_PC})
-        set(CMAKE_INSTALL_REL_INCLUDEDIR_PC ${CMAKE_INSTALL_FULL_INCLUDEDIR})
+        set(CMAKE_INSTALL_LIBDIR_PC ${CMAKE_INSTALL_FULL_LIBDIR})
+        set(CMAKE_INSTALL_INCLUDEDIR_PC ${CMAKE_INSTALL_FULL_INCLUDEDIR})
     else()
-        file(RELATIVE_PATH CMAKE_INSTALL_REL_LIBDIR_PC ${CMAKE_INSTALL_PREFIX} ${CMAKE_INSTALL_FULL_LIBDIR_PC})
-        file(RELATIVE_PATH CMAKE_INSTALL_REL_INCLUDEDIR_PC ${CMAKE_INSTALL_PREFIX} ${CMAKE_INSTALL_FULL_INCLUDEDIR})
+        file(RELATIVE_PATH CMAKE_INSTALL_LIBDIR_PC ${CMAKE_INSTALL_PREFIX} ${CMAKE_INSTALL_FULL_LIBDIR})
+        file(RELATIVE_PATH CMAKE_INSTALL_INCLUDEDIR_PC ${CMAKE_INSTALL_PREFIX} ${CMAKE_INSTALL_FULL_INCLUDEDIR})
     endif()
-    set(VULKAN_LOADER_PKG_CONFIG_NAME "Vulkan-Loader")
     configure_file("vulkan.pc.in" "vulkan.pc" @ONLY)
     install(FILES "${CMAKE_CURRENT_BINARY_DIR}/vulkan.pc" DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
 endif()
-
-target_link_libraries(vulkan PRIVATE Vulkan::Headers)
-add_library(Vulkan::Loader ALIAS vulkan)
-
-if (APPLE AND BUILD_STATIC_LOADER)
-    # When exporting a static library all linked libraries - private or not - need to be exported.
-    return()
-endif()
-
-install(TARGETS vulkan EXPORT VulkanLoaderConfig)
-set_target_properties(vulkan PROPERTIES EXPORT_NAME "Loader")
-install(EXPORT VulkanLoaderConfig DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/VulkanLoader NAMESPACE Vulkan::)
index 80974e8a1b6f72b2097abc0509634beb9e7094ea..bcd800c9466af635285bfe4f15efcbc0bb9988c3 100644 (file)
@@ -1,11 +1,5 @@
-prefix=@CMAKE_INSTALL_PREFIX@
-exec_prefix=${prefix}
-libdir=${exec_prefix}/@CMAKE_INSTALL_REL_LIBDIR_PC@
-includedir=${prefix}/@CMAKE_INSTALL_REL_INCLUDEDIR_PC@
-
-Name: @VULKAN_LOADER_PKG_CONFIG_NAME@
+Name: Vulkan-Loader
 Description: Vulkan Loader
 Version: @VULKAN_LOADER_VERSION@
-Libs: -L${libdir} -lvulkan@VULKAN_LIB_SUFFIX@
-@PRIVATE_LIBS@
-Cflags: -I${includedir}
+Libs: -L@CMAKE_INSTALL_LIBDIR_PC@ -lvulkan@VULKAN_LIB_SUFFIX@ @PRIVATE_LIBS@
+Cflags: -I@CMAKE_INSTALL_INCLUDEDIR_PC@