From 28ece63fee1d5b4cd37f79ea5c7f078509f44bcd Mon Sep 17 00:00:00 2001 From: Tyler Date: Fri, 12 May 2023 18:58:35 -0600 Subject: 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 --- Source/cmDyndepCollation.cxx | 4 ++++ .../examples/export-bmi-and-interface-build/CMakeLists.txt | 4 +++- .../examples/export-bmi-and-interface-build/subdir/importable.cxx | 6 ++++++ .../examples/export-bmi-and-interface-build/test/CMakeLists.txt | 2 ++ .../examples/export-bmi-and-interface-install/CMakeLists.txt | 4 +++- .../examples/export-bmi-and-interface-install/subdir/importable.cxx | 6 ++++++ .../examples/export-bmi-and-interface-install/test/CMakeLists.txt | 2 ++ .../CXXModules/examples/export-interface-build/CMakeLists.txt | 4 +++- .../examples/export-interface-build/subdir/importable.cxx | 6 ++++++ .../CXXModules/examples/export-interface-build/test/CMakeLists.txt | 2 ++ .../CXXModules/examples/export-interface-install/CMakeLists.txt | 4 +++- .../examples/export-interface-install/subdir/importable.cxx | 6 ++++++ .../examples/export-interface-install/test/CMakeLists.txt | 2 ++ .../examples/export-interface-no-properties-build/CMakeLists.txt | 4 +++- .../export-interface-no-properties-build/subdir/importable.cxx | 6 ++++++ .../export-interface-no-properties-build/test/CMakeLists.txt | 1 + .../examples/export-interface-no-properties-install/CMakeLists.txt | 4 +++- .../export-interface-no-properties-install/subdir/importable.cxx | 6 ++++++ .../export-interface-no-properties-install/test/CMakeLists.txt | 1 + 19 files changed, 68 insertions(+), 6 deletions(-) create mode 100644 Tests/RunCMake/CXXModules/examples/export-bmi-and-interface-build/subdir/importable.cxx create mode 100644 Tests/RunCMake/CXXModules/examples/export-bmi-and-interface-install/subdir/importable.cxx create mode 100644 Tests/RunCMake/CXXModules/examples/export-interface-build/subdir/importable.cxx create mode 100644 Tests/RunCMake/CXXModules/examples/export-interface-install/subdir/importable.cxx create mode 100644 Tests/RunCMake/CXXModules/examples/export-interface-no-properties-build/subdir/importable.cxx create mode 100644 Tests/RunCMake/CXXModules/examples/export-interface-no-properties-install/subdir/importable.cxx diff --git a/Source/cmDyndepCollation.cxx b/Source/cmDyndepCollation.cxx index f45d81b..80e1357 100644 --- a/Source/cmDyndepCollation.cxx +++ b/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( diff --git a/Tests/RunCMake/CXXModules/examples/export-bmi-and-interface-build/CMakeLists.txt b/Tests/RunCMake/CXXModules/examples/export-bmi-and-interface-build/CMakeLists.txt index 62971a3..71e7b62 100644 --- a/Tests/RunCMake/CXXModules/examples/export-bmi-and-interface-build/CMakeLists.txt +++ b/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) diff --git a/Tests/RunCMake/CXXModules/examples/export-bmi-and-interface-build/subdir/importable.cxx b/Tests/RunCMake/CXXModules/examples/export-bmi-and-interface-build/subdir/importable.cxx new file mode 100644 index 0000000..07d6af6 --- /dev/null +++ b/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; +} diff --git a/Tests/RunCMake/CXXModules/examples/export-bmi-and-interface-build/test/CMakeLists.txt b/Tests/RunCMake/CXXModules/examples/export-bmi-and-interface-build/test/CMakeLists.txt index a0cf4d9..3cb185c 100644 --- a/Tests/RunCMake/CXXModules/examples/export-bmi-and-interface-build/test/CMakeLists.txt +++ b/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 diff --git a/Tests/RunCMake/CXXModules/examples/export-bmi-and-interface-install/CMakeLists.txt b/Tests/RunCMake/CXXModules/examples/export-bmi-and-interface-install/CMakeLists.txt index bc19d93..e675507 100644 --- a/Tests/RunCMake/CXXModules/examples/export-bmi-and-interface-install/CMakeLists.txt +++ b/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) diff --git a/Tests/RunCMake/CXXModules/examples/export-bmi-and-interface-install/subdir/importable.cxx b/Tests/RunCMake/CXXModules/examples/export-bmi-and-interface-install/subdir/importable.cxx new file mode 100644 index 0000000..07d6af6 --- /dev/null +++ b/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; +} diff --git a/Tests/RunCMake/CXXModules/examples/export-bmi-and-interface-install/test/CMakeLists.txt b/Tests/RunCMake/CXXModules/examples/export-bmi-and-interface-install/test/CMakeLists.txt index 98f6e52..7b36f8c 100644 --- a/Tests/RunCMake/CXXModules/examples/export-bmi-and-interface-install/test/CMakeLists.txt +++ b/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 diff --git a/Tests/RunCMake/CXXModules/examples/export-interface-build/CMakeLists.txt b/Tests/RunCMake/CXXModules/examples/export-interface-build/CMakeLists.txt index 62352ff..136e885 100644 --- a/Tests/RunCMake/CXXModules/examples/export-interface-build/CMakeLists.txt +++ b/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) diff --git a/Tests/RunCMake/CXXModules/examples/export-interface-build/subdir/importable.cxx b/Tests/RunCMake/CXXModules/examples/export-interface-build/subdir/importable.cxx new file mode 100644 index 0000000..07d6af6 --- /dev/null +++ b/Tests/RunCMake/CXXModules/examples/export-interface-build/subdir/importable.cxx @@ -0,0 +1,6 @@ +export module subdir_importable; + +export int from_subdir() +{ + return 0; +} diff --git a/Tests/RunCMake/CXXModules/examples/export-interface-build/test/CMakeLists.txt b/Tests/RunCMake/CXXModules/examples/export-interface-build/test/CMakeLists.txt index 6005676..1874c97 100644 --- a/Tests/RunCMake/CXXModules/examples/export-interface-build/test/CMakeLists.txt +++ b/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 diff --git a/Tests/RunCMake/CXXModules/examples/export-interface-install/CMakeLists.txt b/Tests/RunCMake/CXXModules/examples/export-interface-install/CMakeLists.txt index 15c91d9..df87980 100644 --- a/Tests/RunCMake/CXXModules/examples/export-interface-install/CMakeLists.txt +++ b/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) diff --git a/Tests/RunCMake/CXXModules/examples/export-interface-install/subdir/importable.cxx b/Tests/RunCMake/CXXModules/examples/export-interface-install/subdir/importable.cxx new file mode 100644 index 0000000..07d6af6 --- /dev/null +++ b/Tests/RunCMake/CXXModules/examples/export-interface-install/subdir/importable.cxx @@ -0,0 +1,6 @@ +export module subdir_importable; + +export int from_subdir() +{ + return 0; +} diff --git a/Tests/RunCMake/CXXModules/examples/export-interface-install/test/CMakeLists.txt b/Tests/RunCMake/CXXModules/examples/export-interface-install/test/CMakeLists.txt index 6ea2831..78177ce 100644 --- a/Tests/RunCMake/CXXModules/examples/export-interface-install/test/CMakeLists.txt +++ b/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 diff --git a/Tests/RunCMake/CXXModules/examples/export-interface-no-properties-build/CMakeLists.txt b/Tests/RunCMake/CXXModules/examples/export-interface-no-properties-build/CMakeLists.txt index 7d04c50..a93e3a4 100644 --- a/Tests/RunCMake/CXXModules/examples/export-interface-no-properties-build/CMakeLists.txt +++ b/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) diff --git a/Tests/RunCMake/CXXModules/examples/export-interface-no-properties-build/subdir/importable.cxx b/Tests/RunCMake/CXXModules/examples/export-interface-no-properties-build/subdir/importable.cxx new file mode 100644 index 0000000..07d6af6 --- /dev/null +++ b/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; +} diff --git a/Tests/RunCMake/CXXModules/examples/export-interface-no-properties-build/test/CMakeLists.txt b/Tests/RunCMake/CXXModules/examples/export-interface-no-properties-build/test/CMakeLists.txt index 9ff88df..18e933c 100644 --- a/Tests/RunCMake/CXXModules/examples/export-interface-no-properties-build/test/CMakeLists.txt +++ b/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 diff --git a/Tests/RunCMake/CXXModules/examples/export-interface-no-properties-install/CMakeLists.txt b/Tests/RunCMake/CXXModules/examples/export-interface-no-properties-install/CMakeLists.txt index c0db766..99e67e7 100644 --- a/Tests/RunCMake/CXXModules/examples/export-interface-no-properties-install/CMakeLists.txt +++ b/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) diff --git a/Tests/RunCMake/CXXModules/examples/export-interface-no-properties-install/subdir/importable.cxx b/Tests/RunCMake/CXXModules/examples/export-interface-no-properties-install/subdir/importable.cxx new file mode 100644 index 0000000..07d6af6 --- /dev/null +++ b/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; +} diff --git a/Tests/RunCMake/CXXModules/examples/export-interface-no-properties-install/test/CMakeLists.txt b/Tests/RunCMake/CXXModules/examples/export-interface-no-properties-install/test/CMakeLists.txt index 9ff88df..18e933c 100644 --- a/Tests/RunCMake/CXXModules/examples/export-interface-no-properties-install/test/CMakeLists.txt +++ b/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 -- cgit v0.12