summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--clang-tools-extra/clang-doc/Generators.cpp4
-rw-r--r--clang-tools-extra/clang-doc/Generators.h2
-rw-r--r--clang-tools-extra/clang-doc/HTMLGenerator.cpp61
-rw-r--r--clang-tools-extra/clang-doc/tool/ClangDocMain.cpp5
4 files changed, 44 insertions, 28 deletions
diff --git a/clang-tools-extra/clang-doc/Generators.cpp b/clang-tools-extra/clang-doc/Generators.cpp
index 355744e22b0..65bdc05413a 100644
--- a/clang-tools-extra/clang-doc/Generators.cpp
+++ b/clang-tools-extra/clang-doc/Generators.cpp
@@ -57,7 +57,9 @@ std::string getTagType(TagTypeKind AS) {
llvm_unreachable("Unknown TagTypeKind");
}
-bool Generator::createResources(ClangDocContext &CDCtx) { return true; }
+llvm::Error Generator::createResources(ClangDocContext &CDCtx) {
+ return llvm::Error::success();
+}
// A function to add a reference to Info in Idx.
// Given an Info X with the following namespaces: [B,A]; a reference to X will
diff --git a/clang-tools-extra/clang-doc/Generators.h b/clang-tools-extra/clang-doc/Generators.h
index 8b28a85ffcd..799d503b102 100644
--- a/clang-tools-extra/clang-doc/Generators.h
+++ b/clang-tools-extra/clang-doc/Generators.h
@@ -32,7 +32,7 @@ public:
// It can be overwritten by any of the inherited generators.
// If the override method wants to run this it should call
// Generator::createResources(CDCtx);
- virtual bool createResources(ClangDocContext &CDCtx);
+ virtual llvm::Error createResources(ClangDocContext &CDCtx);
static void addInfoToIndex(Index &Idx, const doc::Info *Info);
};
diff --git a/clang-tools-extra/clang-doc/HTMLGenerator.cpp b/clang-tools-extra/clang-doc/HTMLGenerator.cpp
index 5f190825cbe..2f88df2ed7e 100644
--- a/clang-tools-extra/clang-doc/HTMLGenerator.cpp
+++ b/clang-tools-extra/clang-doc/HTMLGenerator.cpp
@@ -829,7 +829,7 @@ public:
llvm::Error generateDocForInfo(Info *I, llvm::raw_ostream &OS,
const ClangDocContext &CDCtx) override;
- bool createResources(ClangDocContext &CDCtx) override;
+ llvm::Error createResources(ClangDocContext &CDCtx) override;
};
const char *HTMLGenerator::Format = "html";
@@ -883,7 +883,7 @@ static std::string getRefType(InfoType IT) {
llvm_unreachable("Unknown InfoType");
}
-static bool SerializeIndex(ClangDocContext &CDCtx) {
+static llvm::Error SerializeIndex(ClangDocContext &CDCtx) {
std::error_code OK;
std::error_code FileErr;
llvm::SmallString<128> FilePath;
@@ -891,8 +891,9 @@ static bool SerializeIndex(ClangDocContext &CDCtx) {
llvm::sys::path::append(FilePath, "index_json.js");
llvm::raw_fd_ostream OS(FilePath, FileErr, llvm::sys::fs::F_None);
if (FileErr != OK) {
- llvm::errs() << "Error creating index file: " << FileErr.message() << "\n";
- return false;
+ return llvm::make_error<llvm::StringError>(
+ "Error creating index file: " + FileErr.message() + "\n",
+ llvm::inconvertibleErrorCode());
}
CDCtx.Idx.sort();
llvm::json::OStream J(OS, 2);
@@ -911,7 +912,7 @@ static bool SerializeIndex(ClangDocContext &CDCtx) {
OS << "var JsonIndex = `\n";
IndexToJSON(CDCtx.Idx);
OS << "`;\n";
- return true;
+ return llvm::Error::success();
}
// Generates a main HTML node that has the main content of the file that shows
@@ -932,15 +933,16 @@ static std::unique_ptr<TagNode> genIndexFileMainNode() {
return MainNode;
}
-static bool GenIndex(const ClangDocContext &CDCtx) {
+static llvm::Error GenIndex(const ClangDocContext &CDCtx) {
std::error_code FileErr, OK;
llvm::SmallString<128> IndexPath;
llvm::sys::path::native(CDCtx.OutDirectory, IndexPath);
llvm::sys::path::append(IndexPath, "index.html");
llvm::raw_fd_ostream IndexOS(IndexPath, FileErr, llvm::sys::fs::F_None);
if (FileErr != OK) {
- llvm::errs() << "Error creating main index: " << FileErr.message() << "\n";
- return false;
+ return llvm::make_error<llvm::StringError>(
+ "Error creating main index: " + FileErr.message() + "\n",
+ llvm::inconvertibleErrorCode());
}
HTMLFile F;
@@ -958,10 +960,10 @@ static bool GenIndex(const ClangDocContext &CDCtx) {
F.Render(IndexOS);
- return true;
+ return llvm::Error::success();
}
-static bool CopyFile(StringRef FilePath, StringRef OutDirectory) {
+static llvm::Error CopyFile(StringRef FilePath, StringRef OutDirectory) {
llvm::SmallString<128> PathWrite;
llvm::sys::path::native(OutDirectory, PathWrite);
llvm::sys::path::append(PathWrite, llvm::sys::path::filename(FilePath));
@@ -970,24 +972,33 @@ static bool CopyFile(StringRef FilePath, StringRef OutDirectory) {
std::error_code OK;
std::error_code FileErr = llvm::sys::fs::copy_file(PathRead, PathWrite);
if (FileErr != OK) {
- llvm::errs() << "Error creating file "
- << llvm::sys::path::filename(FilePath) << ": "
- << FileErr.message() << "\n";
- return false;
+ return llvm::make_error<llvm::StringError>(
+ "Error creating file " + llvm::sys::path::filename(FilePath) + ": " +
+ FileErr.message() + "\n",
+ llvm::inconvertibleErrorCode());
}
- return true;
+ return llvm::Error::success();
}
-bool HTMLGenerator::createResources(ClangDocContext &CDCtx) {
- if (!SerializeIndex(CDCtx) || !GenIndex(CDCtx))
- return false;
- for (const auto &FilePath : CDCtx.UserStylesheets)
- if (!CopyFile(FilePath, CDCtx.OutDirectory))
- return false;
- for (const auto &FilePath : CDCtx.FilesToCopy)
- if (!CopyFile(FilePath, CDCtx.OutDirectory))
- return false;
- return true;
+llvm::Error HTMLGenerator::createResources(ClangDocContext &CDCtx) {
+ auto Err = SerializeIndex(CDCtx);
+ if (Err)
+ return Err;
+ Err = GenIndex(CDCtx);
+ if (Err)
+ return Err;
+
+ for (const auto &FilePath : CDCtx.UserStylesheets) {
+ Err = CopyFile(FilePath, CDCtx.OutDirectory);
+ if (Err)
+ return Err;
+ }
+ for (const auto &FilePath : CDCtx.FilesToCopy) {
+ Err = CopyFile(FilePath, CDCtx.OutDirectory);
+ if (Err)
+ return Err;
+ }
+ return llvm::Error::success();
}
static GeneratorRegistry::Add<HTMLGenerator> HTML(HTMLGenerator::Format,
diff --git a/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp b/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp
index b0c21134439..ecc062f0864 100644
--- a/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp
+++ b/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp
@@ -326,8 +326,11 @@ int main(int argc, const char **argv) {
return 1;
llvm::outs() << "Generating assets for docs...\n";
- if (!G->get()->createResources(CDCtx))
+ Err = G->get()->createResources(CDCtx);
+ if (Err) {
+ llvm::errs() << toString(std::move(Err)) << "\n";
return 1;
+ }
return 0;
}
OpenPOWER on IntegriCloud