Merge topic 'genex-LINK_LIBRARY-check-supported-properties' into release-3.24

913ea78d7a Genex LINK_LIBRARY and LINK_GROUP: check supported properties

Acked-by: Kitware Robot <kwrobot@kitware.com>
Tested-by: buildbot <buildbot@kitware.com>
Merge-request: !7454
diff --git a/Modules/FindLAPACK.cmake b/Modules/FindLAPACK.cmake
index 50d4ebd..b08b359 100644
--- a/Modules/FindLAPACK.cmake
+++ b/Modules/FindLAPACK.cmake
@@ -663,6 +663,10 @@
     elseif(_lapack_sizeof_integer EQUAL 4)
       string(APPEND _lapack_nvhpc_lib "_lp64")
     endif()
+    set(_lapack_nvhpc_flags)
+    if(";${CMAKE_C_COMPILER_ID};${CMAKE_CXX_COMPILER_ID};${CMAKE_Fortran_COMPILER_ID};" MATCHES ";(NVHPC|PGI);")
+      set(_lapack_nvhpc_flags "-fortranlibs")
+    endif()
 
     check_lapack_libraries(
       LAPACK_LIBRARIES
@@ -670,7 +674,7 @@
       cheev
       ""
       "${_lapack_nvhpc_lib}"
-      "-fortranlibs"
+      "${_lapack_nvhpc_flags}"
       ""
       ""
       "${BLAS_LIBRARIES}"
@@ -688,7 +692,7 @@
         cheev
         ""
         "${_lapack_nvhpc_lib}"
-        "-fortranlibs"
+        "${_lapack_nvhpc_flags}"
         ""
         ""
         "${BLAS_LIBRARIES}"
@@ -696,6 +700,7 @@
     endif()
 
     unset(_lapack_nvhpc_lib)
+    unset(_lapack_nvhpc_flags)
   endif()
 
   # Generic LAPACK library?
diff --git a/Modules/FindwxWidgets.cmake b/Modules/FindwxWidgets.cmake
index 9e7937e..19eba95 100644
--- a/Modules/FindwxWidgets.cmake
+++ b/Modules/FindwxWidgets.cmake
@@ -53,8 +53,6 @@
   wxWidgets_USE_UNIVERSAL
   wxWidgets_USE_STATIC
 
-
-
 There is also a wxWidgets_CONFIG_OPTIONS variable for all other
 options that need to be passed to the wx-config utility.  For example,
 to use the base toolkit found in the /usr/local path, set the variable
@@ -244,7 +242,7 @@
 #=====================================================================
 # Determine whether unix or win32 paths should be used
 #=====================================================================
-if(WIN32 AND NOT CYGWIN AND NOT MSYS AND NOT MINGW AND NOT CMAKE_CROSSCOMPILING)
+if(WIN32 AND NOT CYGWIN AND NOT MSYS AND NOT CMAKE_CROSSCOMPILING)
   set(wxWidgets_FIND_STYLE "win32")
 else()
   set(wxWidgets_FIND_STYLE "unix")
@@ -470,10 +468,12 @@
 
   # If wxWidgets_ROOT_DIR changed, clear lib dir.
   if(NOT WX_ROOT_DIR STREQUAL wxWidgets_ROOT_DIR)
+    if(NOT wxWidgets_LIB_DIR OR WX_ROOT_DIR)
+      set(wxWidgets_LIB_DIR "wxWidgets_LIB_DIR-NOTFOUND"
+          CACHE PATH "Cleared." FORCE)
+    endif()
     set(WX_ROOT_DIR ${wxWidgets_ROOT_DIR}
         CACHE INTERNAL "wxWidgets_ROOT_DIR")
-    set(wxWidgets_LIB_DIR "wxWidgets_LIB_DIR-NOTFOUND"
-        CACHE PATH "Cleared." FORCE)
   endif()
 
   if(WX_ROOT_DIR)
@@ -652,11 +652,17 @@
     endif()
   endif()
 
+  if(MINGW AND NOT wxWidgets_FOUND)
+    # Try unix search mode as well.
+    set(wxWidgets_FIND_STYLE "unix")
+    dbg_msg_v("wxWidgets_FIND_STYLE changed to unix")
+  endif()
+endif()
+
 #=====================================================================
 # UNIX_FIND_STYLE
 #=====================================================================
-else()
-  if(wxWidgets_FIND_STYLE STREQUAL "unix")
+if(wxWidgets_FIND_STYLE STREQUAL "unix")
     #-----------------------------------------------------------------
     # UNIX: Helper MACROS
     #-----------------------------------------------------------------
@@ -920,19 +926,6 @@
       endif()
       unset(_cygpath_exe CACHE)
     endif()
-
-#=====================================================================
-# Neither UNIX_FIND_STYLE, nor WIN32_FIND_STYLE
-#=====================================================================
-  else()
-    if(NOT wxWidgets_FIND_QUIETLY)
-      message(STATUS
-        "${CMAKE_CURRENT_LIST_FILE}(${CMAKE_CURRENT_LIST_LINE}): \n"
-        "  Platform unknown/unsupported. It's neither WIN32 nor UNIX "
-        "find style."
-        )
-    endif()
-  endif()
 endif()
 
 # Check that all libraries are present, as wx-config does not check it
diff --git a/Source/cmComputeLinkInformation.cxx b/Source/cmComputeLinkInformation.cxx
index e156e3d..850b7a3 100644
--- a/Source/cmComputeLinkInformation.cxx
+++ b/Source/cmComputeLinkInformation.cxx
@@ -549,6 +549,17 @@
     if (linkEntry.Kind == cmComputeLinkDepends::LinkEntry::Group) {
       const auto& groupFeature = this->GetGroupFeature(linkEntry.Feature);
       if (groupFeature.Supported) {
+        if (linkEntry.Item.Value == "</LINK_GROUP>" &&
+            currentFeature != nullptr) {
+          // emit feature suffix, if any
+          if (!currentFeature->Suffix.empty()) {
+            this->Items.emplace_back(
+              BT<std::string>{ currentFeature->Suffix,
+                               this->Items.back().Value.Backtrace },
+              ItemIsPath::No);
+          }
+          currentFeature = nullptr;
+        }
         this->Items.emplace_back(
           BT<std::string>{ linkEntry.Item.Value == "<LINK_GROUP>"
                              ? groupFeature.Prefix
diff --git a/Tests/RunCMake/target_link_libraries-LINK_GROUP/LINK_GROUP-with-LINK_LIBRARY2-check.cmake b/Tests/RunCMake/target_link_libraries-LINK_GROUP/LINK_GROUP-with-LINK_LIBRARY2-check.cmake
new file mode 100644
index 0000000..b6cabf5
--- /dev/null
+++ b/Tests/RunCMake/target_link_libraries-LINK_GROUP/LINK_GROUP-with-LINK_LIBRARY2-check.cmake
@@ -0,0 +1,4 @@
+
+if (NOT actual_stdout MATCHES "(/|-)-START_GROUP\"? +\"?(/|-)-PREFIX_LIBRARY\"? +\"?(/|-)-LIBFLAG.*${LINK_SHARED_LIBRARY_PREFIX}base1${LINK_SHARED_LIBRARY_SUFFIX}\"? +\"?(/|-)-LIBFLAG.*${LINK_SHARED_LIBRARY_PREFIX}base2${LINK_SHARED_LIBRARY_SUFFIX}\"? +\"?(/|-)-SUFFIX_LIBRARY\"? +\"?(/|-)-END_GROUP")
+  set (RunCMake_TEST_FAILED "Not found expected '--START_GROUP --PREFIX_LIBRARY --LIBFLAG<base1> --LIBFLAG<base2> --END_GROUP'.")
+endif()
diff --git a/Tests/RunCMake/target_link_libraries-LINK_GROUP/LINK_GROUP-with-LINK_LIBRARY2-result.txt b/Tests/RunCMake/target_link_libraries-LINK_GROUP/LINK_GROUP-with-LINK_LIBRARY2-result.txt
new file mode 100644
index 0000000..8d98f9d
--- /dev/null
+++ b/Tests/RunCMake/target_link_libraries-LINK_GROUP/LINK_GROUP-with-LINK_LIBRARY2-result.txt
@@ -0,0 +1 @@
+.*
diff --git a/Tests/RunCMake/target_link_libraries-LINK_GROUP/LINK_GROUP.cmake b/Tests/RunCMake/target_link_libraries-LINK_GROUP/LINK_GROUP.cmake
index 31eb7e2..fea2f91 100644
--- a/Tests/RunCMake/target_link_libraries-LINK_GROUP/LINK_GROUP.cmake
+++ b/Tests/RunCMake/target_link_libraries-LINK_GROUP/LINK_GROUP.cmake
@@ -20,6 +20,9 @@
 set(CMAKE_C_LINK_LIBRARY_USING_feat1 "--LIBFLAG<LIBRARY>")
 set(CMAKE_C_LINK_LIBRARY_USING_feat1_SUPPORTED TRUE)
 
+set(CMAKE_C_LINK_LIBRARY_USING_feat2 "--PREFIX_LIBRARY" "--LIBFLAG<LIBRARY>" "--SUFFIX_LIBRARY")
+set(CMAKE_C_LINK_LIBRARY_USING_feat2_SUPPORTED TRUE)
+
 set(CMAKE_C_LINK_GROUP_USING_feat2 "--START_GROUP" "--END_GROUP")
 set(CMAKE_LINK_GROUP_USING_feat2 "--START_GROUP" "--END_GROUP")
 set(CMAKE_LINK_GROUP_USING_feat2_SUPPORTED TRUE)
@@ -53,6 +56,9 @@
 add_library(LinkGroup_with-LINK_LIBRARY SHARED lib.c)
 target_link_libraries(LinkGroup_with-LINK_LIBRARY PRIVATE "$<LINK_GROUP:feat1,$<LINK_LIBRARY:feat1,base1>,base2>")
 
+add_library(LinkGroup_with-LINK_LIBRARY2 SHARED lib.c)
+target_link_libraries(LinkGroup_with-LINK_LIBRARY2 PRIVATE "$<LINK_GROUP:feat1,$<LINK_LIBRARY:feat2,base1,base2>>")
+
 
 add_library(LinkGroup_with-LINK_LIBRARY_OVERRIDE SHARED lib.c)
 target_link_libraries(LinkGroup_with-LINK_LIBRARY_OVERRIDE PRIVATE "$<LINK_GROUP:feat1,$<LINK_LIBRARY:feat1,base1,base3>,base2>")
diff --git a/Tests/RunCMake/target_link_libraries-LINK_GROUP/RunCMakeTest.cmake b/Tests/RunCMake/target_link_libraries-LINK_GROUP/RunCMakeTest.cmake
index c1d74d0..3ebe269 100644
--- a/Tests/RunCMake/target_link_libraries-LINK_GROUP/RunCMakeTest.cmake
+++ b/Tests/RunCMake/target_link_libraries-LINK_GROUP/RunCMakeTest.cmake
@@ -46,6 +46,7 @@
   run_cmake_target(LINK_GROUP multiple-groups LinkGroup_multiple-groups)
   run_cmake_target(LINK_GROUP group-and-single LinkGroup_group-and-single)
   run_cmake_target(LINK_GROUP with-LINK_LIBRARY LinkGroup_with-LINK_LIBRARY)
+  run_cmake_target(LINK_GROUP with-LINK_LIBRARY2 LinkGroup_with-LINK_LIBRARY2)
   run_cmake_target(LINK_GROUP with-LINK_LIBRARY_OVERRIDE LinkGroup_with-LINK_LIBRARY_OVERRIDE)
 
   run_cmake(imported-target)