Author: dgregor
Date: Mon Sep 12 15:41:59 2011
New Revision: 139538

URL: http://llvm.org/viewvc/llvm-project?rev=139538&view=rev
Log:
Introduce a cc1-level option to provide the path to the module cache,
where the compiler will look for module files. Eliminates the
egregious hack where we looked into the header search paths for
modules.

Modified:
    cfe/trunk/include/clang/Driver/CC1Options.td
    cfe/trunk/include/clang/Frontend/HeaderSearchOptions.h
    cfe/trunk/include/clang/Lex/HeaderSearch.h
    cfe/trunk/lib/Frontend/CompilerInstance.cpp
    cfe/trunk/lib/Frontend/CompilerInvocation.cpp
    cfe/trunk/lib/Frontend/InitHeaderSearch.cpp
    cfe/trunk/lib/Lex/HeaderSearch.cpp
    cfe/trunk/test/Modules/diamond.c
    cfe/trunk/test/Modules/load_failure.c
    cfe/trunk/test/Modules/lookup.cpp
    cfe/trunk/test/Modules/lookup.m
    cfe/trunk/test/Modules/macros.c
    cfe/trunk/test/Modules/module-private.cpp
    cfe/trunk/test/Modules/objc-categories.m

Modified: cfe/trunk/include/clang/Driver/CC1Options.td
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/CC1Options.td?rev=139538&r1=139537&r2=139538&view=diff
==============================================================================
--- cfe/trunk/include/clang/Driver/CC1Options.td (original)
+++ cfe/trunk/include/clang/Driver/CC1Options.td Mon Sep 12 15:41:59 2011
@@ -605,6 +605,10 @@
   HelpText<"Disable standard #include directories for the C++ standard 
library">;
 def nobuiltininc : Flag<"-nobuiltininc">,
   HelpText<"Disable builtin #include directories">;
+def fmodule_cache_path : JoinedOrSeparate<"-fmodule-cache-path">, 
+  MetaVarName<"<directory>">,
+  HelpText<"Specify the module cache path">;           
+
 def F : JoinedOrSeparate<"-F">, MetaVarName<"<directory>">,
   HelpText<"Add directory to framework include search path">;
 def I : JoinedOrSeparate<"-I">, MetaVarName<"<directory>">,

Modified: cfe/trunk/include/clang/Frontend/HeaderSearchOptions.h
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Frontend/HeaderSearchOptions.h?rev=139538&r1=139537&r2=139538&view=diff
==============================================================================
--- cfe/trunk/include/clang/Frontend/HeaderSearchOptions.h (original)
+++ cfe/trunk/include/clang/Frontend/HeaderSearchOptions.h Mon Sep 12 15:41:59 
2011
@@ -75,6 +75,9 @@
   /// etc.).
   std::string ResourceDir;
 
+  /// \brief The directory used for the module cache.
+  std::string ModuleCachePath;
+  
   /// Include the compiler builtin includes.
   unsigned UseBuiltinIncludes : 1;
 

Modified: cfe/trunk/include/clang/Lex/HeaderSearch.h
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Lex/HeaderSearch.h?rev=139538&r1=139537&r2=139538&view=diff
==============================================================================
--- cfe/trunk/include/clang/Lex/HeaderSearch.h (original)
+++ cfe/trunk/include/clang/Lex/HeaderSearch.h Mon Sep 12 15:41:59 2011
@@ -129,6 +129,9 @@
   unsigned SystemDirIdx;
   bool NoCurDirSearch;
 
+  /// \brief The path to the module cache.
+  std::string ModuleCachePath;
+  
   /// FileInfo - This contains all of the preprocessor-specific data about 
files
   /// that are included.  The vector is indexed by the FileEntry's UID.
   ///
@@ -193,6 +196,11 @@
     //LookupFileCache.clear();
   }
 
+  /// \brief Set the path to the module cache.
+  void setModuleCachePath(StringRef Path) {
+    ModuleCachePath = Path;
+  }
+  
   /// ClearFileInfo - Forget everything we know about headers so far.
   void ClearFileInfo() {
     FileInfo.clear();
@@ -308,6 +316,13 @@
   /// FileEntry, uniquing them through the the 'HeaderMaps' datastructure.
   const HeaderMap *CreateHeaderMap(const FileEntry *FE);
 
+  /// \brief Search in the module cache path for a module with the given
+  /// name.
+  ///
+  /// \returns A file describing the named module, if available, or NULL to
+  /// indicate that the module could not be found.
+  const FileEntry *lookupModule(StringRef ModuleName);
+  
   void IncrementFrameworkLookupCount() { ++NumFrameworkLookups; }
 
   typedef std::vector<HeaderFileInfo>::const_iterator header_file_iterator;

Modified: cfe/trunk/lib/Frontend/CompilerInstance.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/CompilerInstance.cpp?rev=139538&r1=139537&r2=139538&view=diff
==============================================================================
--- cfe/trunk/lib/Frontend/CompilerInstance.cpp (original)
+++ cfe/trunk/lib/Frontend/CompilerInstance.cpp Mon Sep 12 15:41:59 2011
@@ -636,14 +636,8 @@
     CurFile = SourceMgr.getFileEntryForID(SourceMgr.getMainFileID());
 
   // Search for a module with the given name.
-  std::string Filename = ModuleName.getName().str();
-  Filename += ".pcm";
-  const DirectoryLookup *CurDir = 0;  
   const FileEntry *ModuleFile
-    = PP->getHeaderSearchInfo().LookupFile(Filename, /*isAngled=*/false,
-                                           /*FromDir=*/0, CurDir, CurFile, 
-                                           /*SearchPath=*/0, 
-                                           /*RelativePath=*/0);
+    = PP->getHeaderSearchInfo().lookupModule(ModuleName.getName());
   if (!ModuleFile) {
     getDiagnostics().Report(ModuleNameLoc, diag::err_module_not_found)
       << ModuleName.getName()

Modified: cfe/trunk/lib/Frontend/CompilerInvocation.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/CompilerInvocation.cpp?rev=139538&r1=139537&r2=139538&view=diff
==============================================================================
--- cfe/trunk/lib/Frontend/CompilerInvocation.cpp (original)
+++ cfe/trunk/lib/Frontend/CompilerInvocation.cpp Mon Sep 12 15:41:59 2011
@@ -576,6 +576,10 @@
     Res.push_back("-resource-dir");
     Res.push_back(Opts.ResourceDir);
   }
+  if (!Opts.ModuleCachePath.empty()) {
+    Res.push_back("-fmodule-cache-path");
+    Res.push_back(Opts.ModuleCachePath);
+  }
   if (!Opts.UseStandardIncludes)
     Res.push_back("-nostdinc");
   if (!Opts.UseStandardCXXIncludes)
@@ -1378,7 +1382,8 @@
   if (const Arg *A = Args.getLastArg(OPT_stdlib_EQ))
     Opts.UseLibcxx = (strcmp(A->getValue(Args), "libc++") == 0);
   Opts.ResourceDir = Args.getLastArgValue(OPT_resource_dir);
-
+  Opts.ModuleCachePath = Args.getLastArgValue(OPT_fmodule_cache_path);
+  
   // Add -I..., -F..., and -index-header-map options in order.
   bool IsIndexHeaderMap = false;
   for (arg_iterator it = Args.filtered_begin(OPT_I, OPT_F, 
@@ -1426,7 +1431,7 @@
                  ((*it)->getOption().matches(OPT_cxx_isystem) ?
                    frontend::CXXSystem : frontend::System),
                  true, false, !(*it)->getOption().matches(OPT_iwithsysroot));
-
+  
   // FIXME: Need options for the various environment variables!
 }
 

Modified: cfe/trunk/lib/Frontend/InitHeaderSearch.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/InitHeaderSearch.cpp?rev=139538&r1=139537&r2=139538&view=diff
==============================================================================
--- cfe/trunk/lib/Frontend/InitHeaderSearch.cpp (original)
+++ cfe/trunk/lib/Frontend/InitHeaderSearch.cpp Mon Sep 12 15:41:59 2011
@@ -1161,5 +1161,7 @@
   if (HSOpts.UseStandardIncludes)
     Init.AddDefaultSystemIncludePaths(Lang, Triple, HSOpts);
 
+  HS.setModuleCachePath(HSOpts.ModuleCachePath);
+  
   Init.Realize(Lang);
 }

Modified: cfe/trunk/lib/Lex/HeaderSearch.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Lex/HeaderSearch.cpp?rev=139538&r1=139537&r2=139538&view=diff
==============================================================================
--- cfe/trunk/lib/Lex/HeaderSearch.cpp (original)
+++ cfe/trunk/lib/Lex/HeaderSearch.cpp Mon Sep 12 15:41:59 2011
@@ -98,6 +98,16 @@
   return 0;
 }
 
+const FileEntry *HeaderSearch::lookupModule(StringRef ModuleName) {
+  // If we don't have a module cache path, we can't do anything.
+  if (ModuleCachePath.empty())
+    return 0;
+  
+  llvm::SmallString<256> FileName(ModuleCachePath);
+  llvm::sys::path::append(FileName, ModuleName + ".pcm");
+  return getFileMgr().getFile(FileName);
+}
+
 
//===----------------------------------------------------------------------===//
 // File lookup within a DirectoryLookup scope
 
//===----------------------------------------------------------------------===//

Modified: cfe/trunk/test/Modules/diamond.c
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/diamond.c?rev=139538&r1=139537&r2=139538&view=diff
==============================================================================
--- cfe/trunk/test/Modules/diamond.c (original)
+++ cfe/trunk/test/Modules/diamond.c Mon Sep 12 15:41:59 2011
@@ -21,7 +21,7 @@
 }
 
 // RUN: %clang_cc1 -emit-module -o %T/diamond_top.pcm %S/Inputs/diamond_top.h
-// RUN: %clang_cc1 -I %T -emit-module -o %T/diamond_left.pcm 
%S/Inputs/diamond_left.h
-// RUN: %clang_cc1 -I %T -emit-module -o %T/diamond_right.pcm 
%S/Inputs/diamond_right.h
-// RUN: %clang_cc1 -I %T -emit-module -o %T/diamond_bottom.pcm 
%S/Inputs/diamond_bottom.h
-// RUN: %clang_cc1 -I %T %s -verify
+// RUN: %clang_cc1 -fmodule-cache-path %T -emit-module -o %T/diamond_left.pcm 
%S/Inputs/diamond_left.h
+// RUN: %clang_cc1 -fmodule-cache-path %T -emit-module -o %T/diamond_right.pcm 
%S/Inputs/diamond_right.h
+// RUN: %clang_cc1 -fmodule-cache-path %T -emit-module -o 
%T/diamond_bottom.pcm %S/Inputs/diamond_bottom.h
+// RUN: %clang_cc1 -fmodule-cache-path %T %s -verify

Modified: cfe/trunk/test/Modules/load_failure.c
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/load_failure.c?rev=139538&r1=139537&r2=139538&view=diff
==============================================================================
--- cfe/trunk/test/Modules/load_failure.c (original)
+++ cfe/trunk/test/Modules/load_failure.c Mon Sep 12 15:41:59 2011
@@ -7,10 +7,10 @@
 #endif
 
 // RUN: %clang_cc1 -x c++ -emit-module -o %T/load_failure.pcm 
%S/Inputs/load_failure.h
-// RUN: %clang_cc1 -I %T %s -DNONEXISTENT 2>&1 | FileCheck 
-check-prefix=CHECK-NONEXISTENT %s
+// RUN: %clang_cc1 -fmodule-cache-path %T %s -DNONEXISTENT 2>&1 | FileCheck 
-check-prefix=CHECK-NONEXISTENT %s
 // CHECK-NONEXISTENT: load_failure.c:2:19: fatal error: module 
'load_nonexistent' not found
 
-// RUN: not %clang_cc1 -I %T %s -DFAILURE 2> %t
+// RUN: not %clang_cc1 -fmodule-cache-path %T %s -DFAILURE 2> %t
 // RUN: FileCheck -check-prefix=CHECK-FAILURE %s < %t
 
 // FIXME: Clean up diagnostic text below and give it a location

Modified: cfe/trunk/test/Modules/lookup.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/lookup.cpp?rev=139538&r1=139537&r2=139538&view=diff
==============================================================================
--- cfe/trunk/test/Modules/lookup.cpp (original)
+++ cfe/trunk/test/Modules/lookup.cpp Mon Sep 12 15:41:59 2011
@@ -16,8 +16,8 @@
 
 // RUN: %clang_cc1 -emit-module -x c++ -verify -o %T/lookup_left_cxx.pcm 
%S/Inputs/lookup_left.hpp
 // RUN: %clang_cc1 -emit-module -x c++ -o %T/lookup_right_cxx.pcm 
%S/Inputs/lookup_right.hpp
-// RUN: %clang_cc1 -x c++ -I %T %s -verify
-// RUN: %clang_cc1 -ast-print -x c++ -I %T %s | FileCheck 
-check-prefix=CHECK-PRINT %s
+// RUN: %clang_cc1 -x c++ -fmodule-cache-path %T %s -verify
+// RUN: %clang_cc1 -ast-print -x c++ -fmodule-cache-path %T %s | FileCheck 
-check-prefix=CHECK-PRINT %s
 
 // CHECK-PRINT: int *f0(int *);
 // CHECK-PRINT: float *f0(float *);

Modified: cfe/trunk/test/Modules/lookup.m
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/lookup.m?rev=139538&r1=139537&r2=139538&view=diff
==============================================================================
--- cfe/trunk/test/Modules/lookup.m (original)
+++ cfe/trunk/test/Modules/lookup.m Mon Sep 12 15:41:59 2011
@@ -10,8 +10,8 @@
 
 // RUN: %clang_cc1 -emit-module -x objective-c -o %T/lookup_left_objc.pcm 
%S/Inputs/lookup_left.h
 // RUN: %clang_cc1 -emit-module -x objective-c -o %T/lookup_right_objc.pcm 
%S/Inputs/lookup_right.h
-// RUN: %clang_cc1 -x objective-c -I %T -verify %s
-// RUN: %clang_cc1 -ast-print -x objective-c -I %T %s | FileCheck 
-check-prefix=CHECK-PRINT %s
+// RUN: %clang_cc1 -x objective-c -fmodule-cache-path %T -verify %s
+// RUN: %clang_cc1 -ast-print -x objective-c -fmodule-cache-path %T %s | 
FileCheck -check-prefix=CHECK-PRINT %s
 
 // CHECK-PRINT: - (int) method;
 // CHECK-PRINT: - (double) method

Modified: cfe/trunk/test/Modules/macros.c
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/macros.c?rev=139538&r1=139537&r2=139538&view=diff
==============================================================================
--- cfe/trunk/test/Modules/macros.c (original)
+++ cfe/trunk/test/Modules/macros.c Mon Sep 12 15:41:59 2011
@@ -1,5 +1,5 @@
 // RUN: %clang_cc1 -emit-module -o %t/macros.pcm -DMODULE %s
-// RUN: %clang_cc1 -verify -I %t %s
+// RUN: %clang_cc1 -verify -fmodule-cache-path %t %s
 
 #if defined(MODULE)
 #define INTEGER(X) int

Modified: cfe/trunk/test/Modules/module-private.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/module-private.cpp?rev=139538&r1=139537&r2=139538&view=diff
==============================================================================
--- cfe/trunk/test/Modules/module-private.cpp (original)
+++ cfe/trunk/test/Modules/module-private.cpp Mon Sep 12 15:41:59 2011
@@ -1,7 +1,7 @@
 // RUN: mkdir -p %t
 // RUN: %clang_cc1 -x c++ -emit-module -o %t/left.pcm %s -D MODULE_LEFT
 // RUN: %clang_cc1 -x c++ -emit-module -o %t/right.pcm %s -D MODULE_RIGHT
-// RUN: %clang_cc1 -I %t %s -verify
+// RUN: %clang_cc1 -fmodule-cache-path %t %s -verify
 
 #if defined(MODULE_LEFT)
 

Modified: cfe/trunk/test/Modules/objc-categories.m
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/objc-categories.m?rev=139538&r1=139537&r2=139538&view=diff
==============================================================================
--- cfe/trunk/test/Modules/objc-categories.m (original)
+++ cfe/trunk/test/Modules/objc-categories.m Mon Sep 12 15:41:59 2011
@@ -1,9 +1,9 @@
 // RUN: mkdir -p %t
 // RUN: %clang_cc1 -emit-module -o %t/diamond_top.pcm %s -D MODULE_TOP
-// RUN: %clang_cc1 -I %t -emit-module -o %t/diamond_left.pcm %s -D MODULE_LEFT
-// RUN: %clang_cc1 -I %t -emit-module -o %t/diamond_right.pcm %s -D 
MODULE_RIGHT
-// RUN: %clang_cc1 -I %t -emit-module -o %t/diamond_bottom.pcm %s -D 
MODULE_BOTTOM
-// RUN: %clang_cc1 -I %t %s -verify
+// RUN: %clang_cc1 -fmodule-cache-path %t -emit-module -o %t/diamond_left.pcm 
%s -D MODULE_LEFT
+// RUN: %clang_cc1 -fmodule-cache-path %t -emit-module -o %t/diamond_right.pcm 
%s -D MODULE_RIGHT
+// RUN: %clang_cc1 -fmodule-cache-path %t -emit-module -o 
%t/diamond_bottom.pcm %s -D MODULE_BOTTOM
+// RUN: %clang_cc1 -fmodule-cache-path %t %s -verify
 
 
/*============================================================================*/
 #ifdef MODULE_TOP


_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to