diff --git a/tools/clang-cc/DependencyFile.cpp b/tools/clang-cc/DependencyFile.cpp
index 34b6ecf..3306f82 100644
--- a/tools/clang-cc/DependencyFile.cpp
+++ b/tools/clang-cc/DependencyFile.cpp
@@ -34,7 +34,8 @@
   const Preprocessor *PP;
   std::vector<std::string> Targets;
   llvm::raw_ostream *OS;
-
+  bool IncludeSystemHeaders;
+  bool PhonyTarget;
 private:
   bool FileMatchesDepCriteria(const char *Filename,
                               SrcMgr::CharacteristicKind FileType);
@@ -43,9 +44,11 @@
 public:
   DependencyFileCallback(const Preprocessor *_PP, 
                          llvm::raw_ostream *_OS, 
-                         const std::vector<std::string> &_Targets)
-    : PP(_PP), Targets(_Targets), OS(_OS) {
-  }
+                         const std::vector<std::string> &_Targets,
+                         bool _IncludeSystemHeaders,
+                         bool _PhonyTarget)
+    : PP(_PP), Targets(_Targets), OS(_OS),
+      IncludeSystemHeaders(_IncludeSystemHeaders), PhonyTarget(_PhonyTarget) {}
 
   ~DependencyFileCallback() {
     OutputDependencyFile();
@@ -58,54 +61,18 @@
 };
 }
 
-//===----------------------------------------------------------------------===//
-// Dependency file options
-//===----------------------------------------------------------------------===//
-static llvm::cl::opt<std::string>
-DependencyFile("dependency-file",
-               llvm::cl::desc("Filename (or -) to write dependency output to"));
 
-static llvm::cl::opt<bool>
-DependenciesIncludeSystemHeaders("sys-header-deps",
-                 llvm::cl::desc("Include system headers in dependency output"));
 
-static llvm::cl::list<std::string>
-DependencyTargets("MT",
-         llvm::cl::desc("Specify target for dependency"));
-
-// FIXME: Implement feature
-static llvm::cl::opt<bool>
-PhonyDependencyTarget("MP",
-            llvm::cl::desc("Create phony target for each dependency "
-                           "(other than main file)"));
-
-bool clang::CreateDependencyFileGen(Preprocessor *PP,
-                                    std::string &ErrStr) {
-  ErrStr = "";
-  if (DependencyFile.empty())
-    return false;
-
-  if (DependencyTargets.empty()) {
-    ErrStr = "-dependency-file requires at least one -MT option\n";
-    return false;
-  }
-
-  std::string ErrMsg;
-  llvm::raw_ostream *OS;
-  if (DependencyFile == "-") {
-    OS = new llvm::raw_stdout_ostream();
-  } else {
-    OS = new llvm::raw_fd_ostream(DependencyFile.c_str(), false, ErrStr);
-    if (!ErrMsg.empty()) {
-      ErrStr = "unable to open dependency file: " + ErrMsg;
-      return false;
-    }
-  }
+void clang::AttachDependencyFileGen(Preprocessor *PP, llvm::raw_ostream *OS,
+                                    std::vector<std::string> &Targets,
+                                    bool IncludeSystemHeaders,
+                                    bool PhonyTarget) {
+  assert(!Targets.empty() && "Target required for dependency generation");
 
   DependencyFileCallback *PPDep = 
-    new DependencyFileCallback(PP, OS, DependencyTargets);
+    new DependencyFileCallback(PP, OS, Targets, IncludeSystemHeaders, 
+                               PhonyTarget);
   PP->setPPCallbacks(PPDep);
-  return true;
 }
 
 /// FileMatchesDepCriteria - Determine whether the given Filename should be
@@ -115,7 +82,7 @@
   if (strcmp("<built-in>", Filename) == 0)
     return false;
 
-  if (DependenciesIncludeSystemHeaders)
+  if (IncludeSystemHeaders)
     return true;
 
   return FileType == SrcMgr::C_User;
@@ -192,7 +159,7 @@
   *OS << '\n';
 
   // Create phony targets if requested.
-  if (PhonyDependencyTarget) {
+  if (PhonyTarget) {
     // Skip the first entry, this is always the input file itself.
     for (std::vector<std::string>::iterator I = Files.begin() + 1,
            E = Files.end(); I != E; ++I) {
diff --git a/tools/clang-cc/clang-cc.cpp b/tools/clang-cc/clang-cc.cpp
index 669c478..bf6bcee 100644
--- a/tools/clang-cc/clang-cc.cpp
+++ b/tools/clang-cc/clang-cc.cpp
@@ -1374,13 +1374,6 @@
     if (InitializePreprocessor(*PP, InitOpts))
       return 0;
 
-    std::string ErrStr;
-    bool DFG = CreateDependencyFileGen(PP.get(), ErrStr);
-    if (!DFG && !ErrStr.empty()) {
-      fprintf(stderr, "%s", ErrStr.c_str());
-      return 0;
-    }
-
     return PP.take();
   }
 };
@@ -1527,6 +1520,28 @@
 static llvm::cl::opt<bool>
 DumpDefines("dD", llvm::cl::desc("Print macro definitions in -E mode in "
                                 "addition to normal output"));
+
+//===----------------------------------------------------------------------===//
+// Dependency file options
+//===----------------------------------------------------------------------===//
+static llvm::cl::opt<std::string>
+DependencyFile("dependency-file",
+               llvm::cl::desc("Filename (or -) to write dependency output to"));
+
+static llvm::cl::opt<bool>
+DependenciesIncludeSystemHeaders("sys-header-deps",
+                 llvm::cl::desc("Include system headers in dependency output"));
+
+static llvm::cl::list<std::string>
+DependencyTargets("MT",
+         llvm::cl::desc("Specify target for dependency"));
+
+// FIXME: Implement feature
+static llvm::cl::opt<bool>
+PhonyDependencyTarget("MP",
+            llvm::cl::desc("Create phony target for each dependency "
+                           "(other than main file)"));
+
 //===----------------------------------------------------------------------===//
 // -dump-build-information Stuff
 //===----------------------------------------------------------------------===//
@@ -2133,6 +2148,30 @@
     if (!PP)
       continue;
 
+    // Handle generating dependencies, if requested
+    if (!DependencyFile.empty()) {
+      llvm::raw_ostream *DependencyOS;
+      if (DependencyTargets.empty()) {
+        // FIXME: Use a proper diagnostic
+        llvm::cerr << "-dependency-file requires at least one -MT option\n";
+        HadErrors = true;
+        continue;
+      }
+      std::string ErrStr;
+      DependencyOS =
+          new llvm::raw_fd_ostream(DependencyFile.c_str(), false, ErrStr);
+      if (!ErrStr.empty()) {
+        // FIXME: Use a proper diagnostic
+        llvm::cerr << "unable to open dependency file: " + ErrStr;
+        HadErrors = true;
+        continue;
+      }
+
+      AttachDependencyFileGen(PP.get(), DependencyOS, DependencyTargets,
+                              DependenciesIncludeSystemHeaders,
+                              PhonyDependencyTarget);
+    }
+
     if (ImplicitIncludePCH.empty() && 
         InitializeSourceManager(*PP.get(), InFile))
       continue;
diff --git a/tools/clang-cc/clang-cc.h b/tools/clang-cc/clang-cc.h
index 0322d2e..4ea03f8 100644
--- a/tools/clang-cc/clang-cc.h
+++ b/tools/clang-cc/clang-cc.h
@@ -64,9 +64,11 @@
 /// CheckDiagnostics - Gather the expected diagnostics and check them.
 bool CheckDiagnostics(Preprocessor &PP);
 
-/// CreateDependencyFileGen - Create dependency file generator.
-/// This is only done if either -MD or -MMD has been specified.
-bool CreateDependencyFileGen(Preprocessor *PP, std::string &ErrStr);
+/// AttachDependencyFileGen - Create a dependency file generator, and attach
+/// it to the given preprocessor.  This takes ownership of the output stream.
+void AttachDependencyFileGen(Preprocessor *PP, llvm::raw_ostream *OS,
+                             std::vector<std::string> &Targets,
+                             bool IncludeSystemHeaders, bool PhonyTarget);
 
 /// CacheTokens - Cache tokens for use with PCH. Note that this requires
 /// a seekable stream.
