mirror of
https://github.com/Kitware/CMake.git
synced 2026-01-09 23:30:35 -06:00
Xcode: Restore support for standalone IMPORTED_LOCATION_<CONFIG>
In commit 878ae03832 (macOS: IMPORTED framework: Honor SYSTEM target
property in all cases, 2023-08-27, v3.28.0-rc1~162^2) we broke support
for `IMPORTED_LOCATION_<CONFIG>` without `IMPORTED_CONFIGURATIONS`.
Previously it worked if the importing project's configurations match the
set of `IMPORTED_LOCATION_<CONFIG>` properties set. Fix that case.
Fixes: #25506
Issue: #25515
This commit is contained in:
@@ -8762,11 +8762,23 @@ bool cmGeneratorTarget::IsFrameworkOnApple() const
|
||||
bool cmGeneratorTarget::IsImportedFrameworkFolderOnApple(
|
||||
const std::string& config) const
|
||||
{
|
||||
return this->IsApple() && this->IsImported() &&
|
||||
(this->GetType() == cmStateEnums::STATIC_LIBRARY ||
|
||||
this->GetType() == cmStateEnums::SHARED_LIBRARY ||
|
||||
this->GetType() == cmStateEnums::UNKNOWN_LIBRARY) &&
|
||||
cmSystemTools::IsPathToFramework(this->GetLocation(config));
|
||||
if (this->IsApple() && this->IsImported() &&
|
||||
(this->GetType() == cmStateEnums::STATIC_LIBRARY ||
|
||||
this->GetType() == cmStateEnums::SHARED_LIBRARY ||
|
||||
this->GetType() == cmStateEnums::UNKNOWN_LIBRARY)) {
|
||||
std::string cfg = config;
|
||||
if (cfg.empty() && this->GetGlobalGenerator()->IsXcode()) {
|
||||
// FIXME(#25515): Remove the need for this workaround.
|
||||
// The Xcode generator queries include directories without any
|
||||
// specific configuration. Pick one in case this target does
|
||||
// not set either IMPORTED_LOCATION or IMPORTED_CONFIGURATIONS.
|
||||
cfg =
|
||||
this->Makefile->GetGeneratorConfigs(cmMakefile::IncludeEmptyConfig)[0];
|
||||
}
|
||||
return cmSystemTools::IsPathToFramework(this->GetLocation(cfg));
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool cmGeneratorTarget::IsAppBundleOnApple() const
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
enable_language(C)
|
||||
get_property(_isMultiConfig GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
|
||||
if(NOT _isMultiConfig AND NOT CMAKE_BUILD_TYPE)
|
||||
set(CMAKE_BUILD_TYPE "Debug")
|
||||
endif()
|
||||
|
||||
add_library(StaticImported STATIC IMPORTED)
|
||||
|
||||
# Test with no IMPORTED_CONFIGURATIONS, which works if the
|
||||
# imported target provides all exact-name configurations
|
||||
# built by this project. See issue #25515.
|
||||
set_target_properties(StaticImported PROPERTIES
|
||||
IMPORTED_LOCATION_DEBUG "a"
|
||||
IMPORTED_LOCATION_RELEASE "b"
|
||||
IMPORTED_LOCATION_MINSIZEREL "c"
|
||||
IMPORTED_LOCATION_RELWITHDEBINFO "d"
|
||||
)
|
||||
|
||||
add_library(StaticLib STATIC empty.c)
|
||||
|
||||
# The Xcode generator queries imported targets for system
|
||||
# include directories, but without any specific config.
|
||||
set_source_files_properties(empty.c PROPERTIES
|
||||
INCLUDE_DIRECTORIES "${CMAKE_CURRENT_SOURCE_DIR}"
|
||||
)
|
||||
|
||||
target_link_libraries(StaticLib PRIVATE StaticImported)
|
||||
@@ -25,6 +25,7 @@ run_cmake(CMP0108-NEW-self-link)
|
||||
run_cmake(ImportedTarget)
|
||||
run_cmake(ImportedTargetStub)
|
||||
run_cmake(ImportedTargetFailure)
|
||||
run_cmake(ImportedTargetPerConfig)
|
||||
run_cmake(MixedSignature)
|
||||
run_cmake(Separate-PRIVATE-LINK_PRIVATE-uses)
|
||||
run_cmake(SharedDepNotTarget)
|
||||
|
||||
Reference in New Issue
Block a user