Optional<std::string> macho::resolveDylibPath(StringRef dylibPath) {
// TODO: if a tbd and dylib are both present, we should check to make sure
// they are consistent.
- bool dylibExists = fs::exists(dylibPath);
- searchedDylib(dylibPath, dylibExists);
- if (dylibExists)
- return std::string(dylibPath);
-
SmallString<261> tbdPath = dylibPath;
path::replace_extension(tbdPath, ".tbd");
bool tbdExists = fs::exists(tbdPath);
searchedDylib(tbdPath, tbdExists);
if (tbdExists)
return std::string(tbdPath);
+
+ bool dylibExists = fs::exists(dylibPath);
+ searchedDylib(dylibPath, dylibExists);
+ if (dylibExists)
+ return std::string(dylibPath);
return {};
}
# RUN: -L%tD -L%t -lhello -lgoodbye -lSystem %t/test.o -search_dylibs_first
# RUN: llvm-objdump --macho --dylibs-used %t/test | FileCheck --check-prefix=DYLIB %s
+################ Test that we try the tbd file before the binary for frameworks too.
+# RUN: not %lld -dylib -F %t -framework Foo -o %t --print-dylib-search \
+# RUN: | FileCheck --check-prefix=FRAMEWORKSEARCH -DPATH=%t %s
+
# DYLIB: @executable_path/libhello.dylib
# DYLIB: @executable_path/libgoodbye.dylib
# DYLIB: /usr/lib/libSystem.dylib
# ARCHIVESEARCH: searched [[PATH]]{{[/\\]}}libhello.dylib, found
# ARCHIVESEARCH: searched [[PATH]]A{{[/\\]}}libgoodbye.a, found
+# FRAMEWORKSEARCH: searched [[PATH]]{{[/\\]}}Foo.framework{{[/\\]}}Foo.tbd, not found
+# FRAMEWORKSEARCH-NEXT: searched [[PATH]]{{[/\\]}}Foo.framework{{[/\\]}}Foo, not found
+
.section __TEXT,__text
.global _main