From 6b01a27f901b5eb392955fea322cde44a1b782a3 Mon Sep 17 00:00:00 2001
From: Brad King <brad.king@kitware.com>
Date: Fri, 25 Aug 2023 11:00:35 -0400
Subject: [PATCH] macOS: Simplify imported framework locations in find modules

Take advantage of commit d605f728f7 (macOS: Allow IMPORTED_LOCATION to
be a framework folder, 2023-06-16) to remove special-case framework
logic from find modules.

This changes link lines from `/path/to/Foo.framework/Foo[.tbd]` to
`-framework Foo`.  With the latter, the linker will automatically choose
the `.tbd` if it exists.

Issue: #24946
---
 Modules/FindGLUT.cmake   | 55 +++++++++++++---------------------------
 Modules/FindOpenAL.cmake | 12 +++------
 Modules/FindOpenGL.cmake | 26 +++----------------
 3 files changed, 25 insertions(+), 68 deletions(-)

diff --git a/Modules/FindGLUT.cmake b/Modules/FindGLUT.cmake
index 09403bc114..613d31565c 100644
--- a/Modules/FindGLUT.cmake
+++ b/Modules/FindGLUT.cmake
@@ -107,18 +107,8 @@ elseif(APPLE)
 
   if(GLUT_cocoa_LIBRARY AND NOT TARGET GLUT::Cocoa)
     add_library(GLUT::Cocoa UNKNOWN IMPORTED)
-    # Cocoa should always be a Framework, but we check to make sure.
-    if(GLUT_cocoa_LIBRARY MATCHES "/([^/]+)\\.framework$")
-      set(_glut_cocoa "${GLUT_cocoa_LIBRARY}/${CMAKE_MATCH_1}")
-      if(EXISTS "${_glut_cocoa}.tbd")
-        string(APPEND _glut_cocoa ".tbd")
-      endif()
-      set_target_properties(GLUT::Cocoa PROPERTIES
-        IMPORTED_LOCATION "${_glut_cocoa}")
-    else()
-      set_target_properties(GLUT::Cocoa PROPERTIES
-        IMPORTED_LOCATION "${GLUT_cocoa_LIBRARY}")
-    endif()
+    set_target_properties(GLUT::Cocoa PROPERTIES
+      IMPORTED_LOCATION "${GLUT_cocoa_LIBRARY}")
   endif()
 else()
   if(BEOS)
@@ -196,32 +186,23 @@ if (GLUT_FOUND)
     add_library(GLUT::GLUT UNKNOWN IMPORTED)
     set_target_properties(GLUT::GLUT PROPERTIES
       INTERFACE_INCLUDE_DIRECTORIES "${GLUT_INCLUDE_DIRS}")
-    if(GLUT_glut_LIBRARY MATCHES "/([^/]+)\\.framework$")
-      set(_glut_glut "${GLUT_glut_LIBRARY}/${CMAKE_MATCH_1}")
-      if(EXISTS "${_glut_glut}.tbd")
-        string(APPEND _glut_glut ".tbd")
-      endif()
+    if(GLUT_glut_LIBRARY_RELEASE)
+      set_property(TARGET GLUT::GLUT APPEND PROPERTY
+        IMPORTED_CONFIGURATIONS RELEASE)
+      set_target_properties(GLUT::GLUT PROPERTIES
+        IMPORTED_LOCATION_RELEASE "${GLUT_glut_LIBRARY_RELEASE}")
+    endif()
+
+    if(GLUT_glut_LIBRARY_DEBUG)
+      set_property(TARGET GLUT::GLUT APPEND PROPERTY
+        IMPORTED_CONFIGURATIONS DEBUG)
       set_target_properties(GLUT::GLUT PROPERTIES
-        IMPORTED_LOCATION "${_glut_glut}")
-    else()
-      if(GLUT_glut_LIBRARY_RELEASE)
-        set_property(TARGET GLUT::GLUT APPEND PROPERTY
-          IMPORTED_CONFIGURATIONS RELEASE)
-        set_target_properties(GLUT::GLUT PROPERTIES
-          IMPORTED_LOCATION_RELEASE "${GLUT_glut_LIBRARY_RELEASE}")
-      endif()
-
-      if(GLUT_glut_LIBRARY_DEBUG)
-        set_property(TARGET GLUT::GLUT APPEND PROPERTY
-          IMPORTED_CONFIGURATIONS DEBUG)
-        set_target_properties(GLUT::GLUT PROPERTIES
-          IMPORTED_LOCATION_DEBUG "${GLUT_glut_LIBRARY_DEBUG}")
-      endif()
-
-      if(NOT GLUT_glut_LIBRARY_RELEASE AND NOT GLUT_glut_LIBRARY_DEBUG)
-        set_property(TARGET GLUT::GLUT APPEND PROPERTY
-          IMPORTED_LOCATION "${GLUT_glut_LIBRARY}")
-      endif()
+        IMPORTED_LOCATION_DEBUG "${GLUT_glut_LIBRARY_DEBUG}")
+    endif()
+
+    if(NOT GLUT_glut_LIBRARY_RELEASE AND NOT GLUT_glut_LIBRARY_DEBUG)
+      set_property(TARGET GLUT::GLUT APPEND PROPERTY
+        IMPORTED_LOCATION "${GLUT_glut_LIBRARY}")
     endif()
 
     if(TARGET GLUT::Xmu)
diff --git a/Modules/FindOpenAL.cmake b/Modules/FindOpenAL.cmake
index 3d585694de..c8e295b53f 100644
--- a/Modules/FindOpenAL.cmake
+++ b/Modules/FindOpenAL.cmake
@@ -106,15 +106,9 @@ find_package_handle_standard_args(
 mark_as_advanced(OPENAL_LIBRARY OPENAL_INCLUDE_DIR)
 
 if(OPENAL_FOUND AND NOT TARGET OpenAL::OpenAL)
-  if(OPENAL_LIBRARY MATCHES "/([^/]+)\\.framework$")
-    add_library(OpenAL::OpenAL INTERFACE IMPORTED)
-    set_target_properties(OpenAL::OpenAL PROPERTIES
-      INTERFACE_LINK_LIBRARIES "${OPENAL_LIBRARY}")
-  else()
-    add_library(OpenAL::OpenAL UNKNOWN IMPORTED)
-    set_target_properties(OpenAL::OpenAL PROPERTIES
-      IMPORTED_LOCATION "${OPENAL_LIBRARY}")
-  endif()
+  add_library(OpenAL::OpenAL UNKNOWN IMPORTED)
+  set_target_properties(OpenAL::OpenAL PROPERTIES
+    IMPORTED_LOCATION "${OPENAL_LIBRARY}")
   set_target_properties(OpenAL::OpenAL PROPERTIES
     INTERFACE_INCLUDE_DIRECTORIES "${OPENAL_INCLUDE_DIR}")
 endif()
diff --git a/Modules/FindOpenGL.cmake b/Modules/FindOpenGL.cmake
index 843f7877ab..1527c31584 100644
--- a/Modules/FindOpenGL.cmake
+++ b/Modules/FindOpenGL.cmake
@@ -655,17 +655,8 @@ if(OPENGL_FOUND)
     # A legacy GL library is available, so use it for the legacy GL target.
     if(IS_ABSOLUTE "${OPENGL_gl_LIBRARY}")
       add_library(OpenGL::GL UNKNOWN IMPORTED)
-      if(OPENGL_gl_LIBRARY MATCHES "/([^/]+)\\.framework$")
-        set(_gl_fw "${OPENGL_gl_LIBRARY}/${CMAKE_MATCH_1}")
-        if(EXISTS "${_gl_fw}.tbd")
-          string(APPEND _gl_fw ".tbd")
-        endif()
-        set_target_properties(OpenGL::GL PROPERTIES
-          IMPORTED_LOCATION "${_gl_fw}")
-      else()
-        set_target_properties(OpenGL::GL PROPERTIES
-          IMPORTED_LOCATION "${OPENGL_gl_LIBRARY}")
-      endif()
+      set_target_properties(OpenGL::GL PROPERTIES
+        IMPORTED_LOCATION "${OPENGL_gl_LIBRARY}")
     else()
       add_library(OpenGL::GL INTERFACE IMPORTED)
       set_target_properties(OpenGL::GL PROPERTIES
@@ -709,17 +700,8 @@ if(OPENGL_FOUND)
   if(OPENGL_GLU_FOUND AND NOT TARGET OpenGL::GLU)
     if(IS_ABSOLUTE "${OPENGL_glu_LIBRARY}")
       add_library(OpenGL::GLU UNKNOWN IMPORTED)
-      if(OPENGL_glu_LIBRARY MATCHES "/([^/]+)\\.framework$")
-        set(_glu_fw "${OPENGL_glu_LIBRARY}/${CMAKE_MATCH_1}")
-        if(EXISTS "${_glu_fw}.tbd")
-          string(APPEND _glu_fw ".tbd")
-        endif()
-        set_target_properties(OpenGL::GLU PROPERTIES
-          IMPORTED_LOCATION "${_glu_fw}")
-      else()
-        set_target_properties(OpenGL::GLU PROPERTIES
-          IMPORTED_LOCATION "${OPENGL_glu_LIBRARY}")
-      endif()
+      set_target_properties(OpenGL::GLU PROPERTIES
+        IMPORTED_LOCATION "${OPENGL_glu_LIBRARY}")
     else()
       add_library(OpenGL::GLU INTERFACE IMPORTED)
       set_target_properties(OpenGL::GLU PROPERTIES
-- 
GitLab