Author: ributzka Date: Fri Nov 13 13:08:07 2015 New Revision: 253060 URL: http://llvm.org/viewvc/llvm-project?rev=253060&view=rev Log: Fix auto-link for text-based dynamic library SDKs.
When linking against text-based dynamic library SDKs the library name of a framework has now more than one possible filename extensions. This fix tests for both possible extensions (none, and .tbd). This fixes rdar://problem/20609975 Added: cfe/trunk/test/Modules/Inputs/AutolinkTBD.framework/ cfe/trunk/test/Modules/Inputs/AutolinkTBD.framework/AutolinkTBD.tbd cfe/trunk/test/Modules/Inputs/AutolinkTBD.framework/Headers/ cfe/trunk/test/Modules/Inputs/AutolinkTBD.framework/Headers/AutolinkTBD.h cfe/trunk/test/Modules/autolinkTBD.m Modified: cfe/trunk/lib/Lex/ModuleMap.cpp Modified: cfe/trunk/lib/Lex/ModuleMap.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Lex/ModuleMap.cpp?rev=253060&r1=253059&r2=253060&view=diff ============================================================================== --- cfe/trunk/lib/Lex/ModuleMap.cpp (original) +++ cfe/trunk/lib/Lex/ModuleMap.cpp Fri Nov 13 13:08:07 2015 @@ -581,9 +581,18 @@ static void inferFrameworkLink(Module *M SmallString<128> LibName; LibName += FrameworkDir->getName(); llvm::sys::path::append(LibName, Mod->Name); - if (FileMgr.getFile(LibName)) { - Mod->LinkLibraries.push_back(Module::LinkLibrary(Mod->Name, - /*IsFramework=*/true)); + + // The library name of a framework has more than one possible extension since + // the introduction of the text-based dynamic library format. We need to check + // for both before we give up. + static const char *frameworkExtensions[] = {"", ".tbd"}; + for (const auto *extension : frameworkExtensions) { + llvm::sys::path::replace_extension(LibName, extension); + if (FileMgr.getFile(LibName)) { + Mod->LinkLibraries.push_back(Module::LinkLibrary(Mod->Name, + /*IsFramework=*/true)); + return; + } } } Added: cfe/trunk/test/Modules/Inputs/AutolinkTBD.framework/AutolinkTBD.tbd URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/AutolinkTBD.framework/AutolinkTBD.tbd?rev=253060&view=auto ============================================================================== --- cfe/trunk/test/Modules/Inputs/AutolinkTBD.framework/AutolinkTBD.tbd (added) +++ cfe/trunk/test/Modules/Inputs/AutolinkTBD.framework/AutolinkTBD.tbd Fri Nov 13 13:08:07 2015 @@ -0,0 +1 @@ +empty file - clang only needs to check if it exists. Added: cfe/trunk/test/Modules/Inputs/AutolinkTBD.framework/Headers/AutolinkTBD.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/AutolinkTBD.framework/Headers/AutolinkTBD.h?rev=253060&view=auto ============================================================================== --- cfe/trunk/test/Modules/Inputs/AutolinkTBD.framework/Headers/AutolinkTBD.h (added) +++ cfe/trunk/test/Modules/Inputs/AutolinkTBD.framework/Headers/AutolinkTBD.h Fri Nov 13 13:08:07 2015 @@ -0,0 +1 @@ +extern int foo(); Added: cfe/trunk/test/Modules/autolinkTBD.m URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/autolinkTBD.m?rev=253060&view=auto ============================================================================== --- cfe/trunk/test/Modules/autolinkTBD.m (added) +++ cfe/trunk/test/Modules/autolinkTBD.m Fri Nov 13 13:08:07 2015 @@ -0,0 +1,17 @@ +// RUN: rm -rf %t +// RUN: %clang_cc1 -emit-llvm -o - -fmodules-cache-path=%t -fmodules -fimplicit-module-maps -F %S/Inputs %s | FileCheck %s +// RUN: %clang_cc1 -emit-llvm -fno-autolink -o - -fmodules-cache-path=%t -fmodules -fimplicit-module-maps -F %S/Inputs %s | FileCheck --check-prefix=CHECK-AUTOLINK-DISABLED %s + +@import AutolinkTBD; + +int f() { + return foo(); +} + +// CHECK: !llvm.module.flags = !{{{.*}}} +// CHECK: !{{[0-9]+}} = !{i32 6, !"Linker Options", ![[AUTOLINK_OPTIONS:[0-9]+]]} +// CHECK: ![[AUTOLINK_OPTIONS]] = !{![[AUTOLINK_FRAMEWORK:[0-9]+]]} +// CHECK: ![[AUTOLINK_FRAMEWORK]] = !{!"-framework", !"AutolinkTBD"} + +// CHECK-AUTOLINK-DISABLED: !llvm.module.flags +// CHECK-AUTOLINK-DISABLED-NOT: "Linker Options" _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits