Xcode: ensure framework with custom output directory can be consumed

Fixes: #24046
This commit is contained in:
Marc Chevrier
2022-10-13 17:20:38 +02:00
committed by Brad King
parent 20bfbf7838
commit 4aa86da827
3 changed files with 40 additions and 5 deletions

View File

@@ -3830,6 +3830,7 @@ void cmGlobalXCodeGenerator::AddDependAndLinkInformation(cmXCodeObject* target)
const auto& fwPaths = cli->GetFrameworkPaths();
emitted.insert(fwPaths.begin(), fwPaths.end());
BuildObjectListOrString libPaths(this, true);
BuildObjectListOrString fwSearchPaths(this, true);
for (auto const& libItem : configItemMap[configName]) {
auto const& libName = *libItem;
if (libName.IsPath == cmComputeLinkInformation::ItemIsPath::Yes) {
@@ -3846,8 +3847,8 @@ void cmGlobalXCodeGenerator::AddDependAndLinkInformation(cmXCodeObject* target)
emitted.insert(fwDescriptor->Directory).second) {
// This is a search path we had not added before and it isn't
// an implicit search path, so we need it
libPaths.Add("-F " +
this->XCodeEscapePath(fwDescriptor->Directory));
fwSearchPaths.Add(
this->XCodeEscapePath(fwDescriptor->Directory));
}
if (libName.GetFeatureName() == "__CMAKE_LINK_FRAMEWORK"_s) {
// use the full path
@@ -3886,9 +3887,16 @@ void cmGlobalXCodeGenerator::AddDependAndLinkInformation(cmXCodeObject* target)
target->AddDependTarget(configName, libName.Target->GetName());
}
}
this->AppendBuildSettingAttribute(target,
this->GetTargetLinkFlagsVar(gt),
libPaths.CreateList(), configName);
if (!libPaths.IsEmpty()) {
this->AppendBuildSettingAttribute(target,
this->GetTargetLinkFlagsVar(gt),
libPaths.CreateList(), configName);
}
if (!fwSearchPaths.IsEmpty()) {
this->AppendBuildSettingAttribute(target, "FRAMEWORK_SEARCH_PATHS",
fwSearchPaths.CreateList(),
configName);
}
}
}
}

View File

@@ -13,3 +13,21 @@ set_target_properties(Gui PROPERTIES
add_executable(app main.c)
target_link_libraries(app PRIVATE Gui)
# Same test but with generation done in custom directories
add_library(Gui2 SHARED Gui.c "${input_header}")
set_target_properties(Gui2 PROPERTIES
PUBLIC_HEADER "${input_header}"
FRAMEWORK TRUE
LIBRARY_OUTPUT_DIRECTORY lib
)
add_executable(app2 main2.c)
set_target_properties(Gui2 PROPERTIES
PUBLIC_HEADER "${input_header}"
FRAMEWORK TRUE
RUNTIME_OUTPUT_DIRECTORY bin
)
target_link_libraries(app2 PRIVATE Gui2)

View File

@@ -0,0 +1,9 @@
#include <Gui2/Gui.h>
int main()
{
foo();
return 0;
}