Bladeren bron

cxxmodules: Fix exported path to installed module sources in subdirs

When generating the `IMPORTED_CXX_MODULES_[CONFIG]` target property,
there was a missing path separator after a non-empty relative directory
part of the path to a module source file.

Co-authored-by: Brad King <[email protected]>
Tyler 2 jaren geleden
bovenliggende
commit
28ece63fee
19 gewijzigde bestanden met toevoegingen van 68 en 6 verwijderingen
  1. 4 0
      Source/cmDyndepCollation.cxx
  2. 3 1
      Tests/RunCMake/CXXModules/examples/export-bmi-and-interface-build/CMakeLists.txt
  3. 6 0
      Tests/RunCMake/CXXModules/examples/export-bmi-and-interface-build/subdir/importable.cxx
  4. 2 0
      Tests/RunCMake/CXXModules/examples/export-bmi-and-interface-build/test/CMakeLists.txt
  5. 3 1
      Tests/RunCMake/CXXModules/examples/export-bmi-and-interface-install/CMakeLists.txt
  6. 6 0
      Tests/RunCMake/CXXModules/examples/export-bmi-and-interface-install/subdir/importable.cxx
  7. 2 0
      Tests/RunCMake/CXXModules/examples/export-bmi-and-interface-install/test/CMakeLists.txt
  8. 3 1
      Tests/RunCMake/CXXModules/examples/export-interface-build/CMakeLists.txt
  9. 6 0
      Tests/RunCMake/CXXModules/examples/export-interface-build/subdir/importable.cxx
  10. 2 0
      Tests/RunCMake/CXXModules/examples/export-interface-build/test/CMakeLists.txt
  11. 3 1
      Tests/RunCMake/CXXModules/examples/export-interface-install/CMakeLists.txt
  12. 6 0
      Tests/RunCMake/CXXModules/examples/export-interface-install/subdir/importable.cxx
  13. 2 0
      Tests/RunCMake/CXXModules/examples/export-interface-install/test/CMakeLists.txt
  14. 3 1
      Tests/RunCMake/CXXModules/examples/export-interface-no-properties-build/CMakeLists.txt
  15. 6 0
      Tests/RunCMake/CXXModules/examples/export-interface-no-properties-build/subdir/importable.cxx
  16. 1 0
      Tests/RunCMake/CXXModules/examples/export-interface-no-properties-build/test/CMakeLists.txt
  17. 3 1
      Tests/RunCMake/CXXModules/examples/export-interface-no-properties-install/CMakeLists.txt
  18. 6 0
      Tests/RunCMake/CXXModules/examples/export-interface-no-properties-install/subdir/importable.cxx
  19. 1 0
      Tests/RunCMake/CXXModules/examples/export-interface-no-properties-install/test/CMakeLists.txt

+ 4 - 0
Source/cmDyndepCollation.cxx

@@ -358,6 +358,10 @@ cmDyndepCollation::ParseExportInfo(Json::Value const& tdi)
       fsi.Name = tdi_cxx_module_info["name"].asString();
       fsi.RelativeDirectory =
         tdi_cxx_module_info["relative-directory"].asString();
+      if (!fsi.RelativeDirectory.empty() &&
+          fsi.RelativeDirectory.back() != '/') {
+        fsi.RelativeDirectory = cmStrCat(fsi.RelativeDirectory, '/');
+      }
       fsi.SourcePath = tdi_cxx_module_info["source"].asString();
       fsi.Type = tdi_cxx_module_info["type"].asString();
       fsi.Visibility = cmFileSetVisibilityFromName(

+ 3 - 1
Tests/RunCMake/CXXModules/examples/export-bmi-and-interface-build/CMakeLists.txt

@@ -18,7 +18,9 @@ target_sources(export_bmi_and_interfaces
       BASE_DIRS
         "${CMAKE_CURRENT_SOURCE_DIR}"
       FILES
-        importable.cxx)
+        importable.cxx
+        subdir/importable.cxx
+  )
 target_compile_features(export_bmi_and_interfaces PUBLIC cxx_std_20)
 
 add_library(no_modules STATIC no_modules.cxx)

+ 6 - 0
Tests/RunCMake/CXXModules/examples/export-bmi-and-interface-build/subdir/importable.cxx

@@ -0,0 +1,6 @@
+export module subdir_importable;
+
+export int from_subdir()
+{
+  return 0;
+}

+ 2 - 0
Tests/RunCMake/CXXModules/examples/export-bmi-and-interface-build/test/CMakeLists.txt

@@ -21,6 +21,7 @@ get_property(file_set_files TARGET CXXModules::export_bmi_and_interfaces
   PROPERTY CXX_MODULE_SET_modules)
 set(expected_file_set_files
   "${expected_source_dir}/importable.cxx"
+  "${expected_source_dir}/subdir/importable.cxx"
   )
 if (NOT file_set_files STREQUAL "${expected_file_set_files}")
   message(FATAL_ERROR
@@ -31,6 +32,7 @@ get_property(imported_modules TARGET CXXModules::export_bmi_and_interfaces
   PROPERTY IMPORTED_CXX_MODULES_DEBUG)
 set(expected_imported_modules
   "importable=${expected_source_dir}/importable.cxx,${expected_binary_dir}/CMakeFiles/export_bmi_and_interfaces.dir(/Debug)?/importable.(gcm|pcm|ifc)"
+  "subdir_importable=${expected_source_dir}/subdir/importable.cxx,${expected_binary_dir}/CMakeFiles/export_bmi_and_interfaces.dir(/Debug)?/subdir_importable.(gcm|pcm|ifc)"
   )
 if (NOT imported_modules MATCHES "^${expected_imported_modules}$")
   message(FATAL_ERROR

+ 3 - 1
Tests/RunCMake/CXXModules/examples/export-bmi-and-interface-install/CMakeLists.txt

@@ -18,7 +18,9 @@ target_sources(export_bmi_and_interfaces
       BASE_DIRS
         "${CMAKE_CURRENT_SOURCE_DIR}"
       FILES
-        importable.cxx)
+        importable.cxx
+        subdir/importable.cxx
+  )
 target_compile_features(export_bmi_and_interfaces PUBLIC cxx_std_20)
 
 add_library(no_modules STATIC no_modules.cxx)

+ 6 - 0
Tests/RunCMake/CXXModules/examples/export-bmi-and-interface-install/subdir/importable.cxx

@@ -0,0 +1,6 @@
+export module subdir_importable;
+
+export int from_subdir()
+{
+  return 0;
+}

+ 2 - 0
Tests/RunCMake/CXXModules/examples/export-bmi-and-interface-install/test/CMakeLists.txt

@@ -21,6 +21,7 @@ get_property(file_set_files TARGET CXXModules::export_bmi_and_interfaces
   PROPERTY CXX_MODULE_SET_modules)
 set(expected_file_set_files
   "${expected_source_dir}/importable.cxx"
+  "${expected_source_dir}/subdir/importable.cxx"
   )
 if (NOT file_set_files STREQUAL "${expected_file_set_files}")
   message(FATAL_ERROR
@@ -31,6 +32,7 @@ get_property(imported_modules TARGET CXXModules::export_bmi_and_interfaces
   PROPERTY IMPORTED_CXX_MODULES_DEBUG)
 set(expected_imported_modules
   "importable=${expected_source_dir}/importable.cxx,${expected_binary_dir}/importable.(gcm|pcm|ifc)"
+  "subdir_importable=${expected_source_dir}/subdir/importable.cxx,${expected_binary_dir}/subdir_importable.(gcm|pcm|ifc)"
   )
 if (NOT imported_modules MATCHES "^${expected_imported_modules}$")
   message(FATAL_ERROR

+ 3 - 1
Tests/RunCMake/CXXModules/examples/export-interface-build/CMakeLists.txt

@@ -18,7 +18,9 @@ target_sources(export_interfaces
       BASE_DIRS
         "${CMAKE_CURRENT_SOURCE_DIR}"
       FILES
-        importable.cxx)
+        importable.cxx
+        subdir/importable.cxx
+  )
 target_compile_features(export_interfaces PUBLIC cxx_std_20)
 
 add_library(no_modules STATIC no_modules.cxx)

+ 6 - 0
Tests/RunCMake/CXXModules/examples/export-interface-build/subdir/importable.cxx

@@ -0,0 +1,6 @@
+export module subdir_importable;
+
+export int from_subdir()
+{
+  return 0;
+}

+ 2 - 0
Tests/RunCMake/CXXModules/examples/export-interface-build/test/CMakeLists.txt

@@ -21,6 +21,7 @@ get_property(file_set_files TARGET CXXModules::export_interfaces
   PROPERTY CXX_MODULE_SET_modules)
 set(expected_file_set_files
   "${expected_source_dir}/importable.cxx"
+  "${expected_source_dir}/subdir/importable.cxx"
   )
 if (NOT file_set_files STREQUAL "${expected_file_set_files}")
   message(FATAL_ERROR
@@ -31,6 +32,7 @@ get_property(imported_modules TARGET CXXModules::export_interfaces
   PROPERTY IMPORTED_CXX_MODULES_DEBUG)
 set(expected_imported_modules
   "importable=${expected_source_dir}/importable.cxx,${expected_binary_dir}/CMakeFiles/export_interfaces.dir(/Debug)?/importable.(gcm|pcm|ifc)"
+  "subdir_importable=${expected_source_dir}/subdir/importable.cxx,${expected_binary_dir}/CMakeFiles/export_interfaces.dir(/Debug)?/subdir_importable.(gcm|pcm|ifc)"
   )
 if (NOT imported_modules MATCHES "^${expected_imported_modules}$")
   message(FATAL_ERROR

+ 3 - 1
Tests/RunCMake/CXXModules/examples/export-interface-install/CMakeLists.txt

@@ -18,7 +18,9 @@ target_sources(export_interfaces
       BASE_DIRS
         "${CMAKE_CURRENT_SOURCE_DIR}"
       FILES
-        importable.cxx)
+        importable.cxx
+        subdir/importable.cxx
+  )
 target_compile_features(export_interfaces PUBLIC cxx_std_20)
 
 add_library(no_modules STATIC no_modules.cxx)

+ 6 - 0
Tests/RunCMake/CXXModules/examples/export-interface-install/subdir/importable.cxx

@@ -0,0 +1,6 @@
+export module subdir_importable;
+
+export int from_subdir()
+{
+  return 0;
+}

+ 2 - 0
Tests/RunCMake/CXXModules/examples/export-interface-install/test/CMakeLists.txt

@@ -21,6 +21,7 @@ get_property(file_set_files TARGET CXXModules::export_interfaces
   PROPERTY CXX_MODULE_SET_modules)
 set(expected_file_set_files
   "${expected_source_dir}/importable.cxx"
+  "${expected_source_dir}/subdir/importable.cxx"
   )
 if (NOT file_set_files STREQUAL "${expected_file_set_files}")
   message(FATAL_ERROR
@@ -31,6 +32,7 @@ get_property(imported_modules TARGET CXXModules::export_interfaces
   PROPERTY IMPORTED_CXX_MODULES_DEBUG)
 set(expected_imported_modules
   "importable=${expected_source_dir}/importable.cxx"
+  "subdir_importable=${expected_source_dir}/subdir/importable.cxx"
   )
 if (NOT imported_modules STREQUAL "${expected_imported_modules}")
   message(FATAL_ERROR

+ 3 - 1
Tests/RunCMake/CXXModules/examples/export-interface-no-properties-build/CMakeLists.txt

@@ -18,7 +18,9 @@ target_sources(export_interfaces_no_properties
       BASE_DIRS
         "${CMAKE_CURRENT_SOURCE_DIR}"
       FILES
-        importable.cxx)
+        importable.cxx
+        subdir/importable.cxx
+  )
 target_compile_features(export_interfaces_no_properties PUBLIC cxx_std_20)
 
 add_library(no_modules STATIC no_modules.cxx)

+ 6 - 0
Tests/RunCMake/CXXModules/examples/export-interface-no-properties-build/subdir/importable.cxx

@@ -0,0 +1,6 @@
+export module subdir_importable;
+
+export int from_subdir()
+{
+  return 0;
+}

+ 1 - 0
Tests/RunCMake/CXXModules/examples/export-interface-no-properties-build/test/CMakeLists.txt

@@ -21,6 +21,7 @@ get_property(file_set_files TARGET CXXModules::export_interfaces_no_properties
   PROPERTY CXX_MODULE_SET_modules)
 set(expected_file_set_files
   "${expected_dir}/importable.cxx"
+  "${expected_dir}/subdir/importable.cxx"
   )
 if (NOT file_set_files STREQUAL "${expected_file_set_files}")
   message(FATAL_ERROR

+ 3 - 1
Tests/RunCMake/CXXModules/examples/export-interface-no-properties-install/CMakeLists.txt

@@ -18,7 +18,9 @@ target_sources(export_interfaces_no_properties
       BASE_DIRS
         "${CMAKE_CURRENT_SOURCE_DIR}"
       FILES
-        importable.cxx)
+        importable.cxx
+        subdir/importable.cxx
+  )
 target_compile_features(export_interfaces_no_properties PUBLIC cxx_std_20)
 
 add_library(no_modules STATIC no_modules.cxx)

+ 6 - 0
Tests/RunCMake/CXXModules/examples/export-interface-no-properties-install/subdir/importable.cxx

@@ -0,0 +1,6 @@
+export module subdir_importable;
+
+export int from_subdir()
+{
+  return 0;
+}

+ 1 - 0
Tests/RunCMake/CXXModules/examples/export-interface-no-properties-install/test/CMakeLists.txt

@@ -21,6 +21,7 @@ get_property(file_set_files TARGET CXXModules::export_interfaces_no_properties
   PROPERTY CXX_MODULE_SET_modules)
 set(expected_file_set_files
   "${expected_dir}/importable.cxx"
+  "${expected_dir}/subdir/importable.cxx"
   )
 if (NOT file_set_files STREQUAL "${expected_file_set_files}")
   message(FATAL_ERROR