summaryrefslogtreecommitdiffstats
path: root/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'clang-tools-extra/clang-doc/tool/ClangDocMain.cpp')
-rw-r--r--clang-tools-extra/clang-doc/tool/ClangDocMain.cpp17
1 files changed, 15 insertions, 2 deletions
diff --git a/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp b/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp
index e1eb3f88c64..89918701dc5 100644
--- a/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp
+++ b/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp
@@ -91,6 +91,15 @@ std::string getFormatString() {
llvm_unreachable("Unknown OutputFormatTy");
}
+// This function isn't referenced outside its translation unit, but it
+// can't use the "static" keyword because its address is used for
+// GetMainExecutable (since some platforms don't support taking the
+// address of main, and some platforms can't implement GetMainExecutable
+// without being given the address of a function in the main executable).
+std::string GetExecutablePath(const char *Argv0, void *MainAddr) {
+ return llvm::sys::fs::getMainExecutable(Argv0, MainAddr);
+}
+
bool CreateDirectory(const Twine &DirName, bool ClearDirectory = false) {
std::error_code OK;
llvm::SmallString<128> DocsRootPath;
@@ -129,7 +138,6 @@ llvm::Expected<llvm::SmallString<128>> getInfoOutputFile(StringRef Root,
StringRef RelativePath,
StringRef Name,
StringRef Ext) {
- std::error_code OK;
llvm::SmallString<128> Path;
llvm::sys::path::native(Root, Path);
llvm::sys::path::append(Path, RelativePath);
@@ -195,8 +203,10 @@ int main(int argc, const char **argv) {
// Mapping phase
llvm::outs() << "Mapping decls...\n";
+ void *MainAddr = (void *)(intptr_t)GetExecutablePath;
+ std::string ClangDocPath = GetExecutablePath(argv[0], MainAddr);
clang::doc::ClangDocContext CDCtx = {Exec->get()->getExecutionContext(),
- PublicOnly};
+ PublicOnly, OutDirectory, ClangDocPath};
auto Err =
Exec->get()->execute(doc::newMapperActionFactory(CDCtx), ArgAdjuster);
if (Err) {
@@ -239,5 +249,8 @@ int main(int argc, const char **argv) {
llvm::errs() << toString(std::move(Err)) << "\n";
}
+ if (!G->get()->createResources(CDCtx))
+ return 1;
+
return 0;
}
OpenPOWER on IntegriCloud