[PATCH] D11877: [Support] On Windows, generate PDF files for graphs and open with associated viewer
Aaron Ballman via llvm-commits
llvm-commits at lists.llvm.org
Mon Aug 17 09:16:26 PDT 2015
On Mon, Aug 17, 2015 at 12:06 PM, Michael Kruse via llvm-commits
<llvm-commits at lists.llvm.org> wrote:
> Meinersbur added a comment.
>
> ping
>
>
> Repository:
> rL LLVM
>
> http://reviews.llvm.org/D11877
> Index: lib/Support/GraphWriter.cpp
> ===================================================================
> --- lib/Support/GraphWriter.cpp
> +++ lib/Support/GraphWriter.cpp
> @@ -189,32 +189,47 @@
> return ExecGraphViewer(ViewerPath, args, Filename, wait, ErrMsg);
> }
>
> - enum PSViewerKind { PSV_None, PSV_OSXOpen, PSV_XDGOpen, PSV_Ghostview };
> - PSViewerKind PSViewer = PSV_None;
> + enum ViewerKind {
> + PSV_None,
> + PSV_OSXOpen,
> + PSV_XDGOpen,
> + PSV_Ghostview,
> + PDFV_CmdStart
Why is this prefixed with PDFV_ instead of PSV_ like the rest of the
enumerators? Should have the same prefix since it's part of the same
enumeration.
> + };
> + ViewerKind Viewer = PSV_None;
> #ifdef __APPLE__
> - if (!PSViewer && S.TryFindProgram("open", ViewerPath))
> - PSViewer = PSV_OSXOpen;
> + if (!Viewer && S.TryFindProgram("open", ViewerPath))
> + Viewer = PSV_OSXOpen;
> +#endif
> + if (!Viewer && S.TryFindProgram("gv", ViewerPath))
> + Viewer = PSV_Ghostview;
> + if (!Viewer && S.TryFindProgram("xdg-open", ViewerPath))
> + Viewer = PSV_XDGOpen;
> +#ifdef LLVM_ON_WIN32
> + if (!Viewer && S.TryFindProgram("cmd", ViewerPath)) {
> + Viewer = PDFV_CmdStart;
> + }
Is there an advantage to using cmd instead of manually opening the
file with the related PDF viewer via ShellExecuteEx (or one of the
other Shell APIs)?
> #endif
> - if (!PSViewer && S.TryFindProgram("gv", ViewerPath))
> - PSViewer = PSV_Ghostview;
> - if (!PSViewer && S.TryFindProgram("xdg-open", ViewerPath))
> - PSViewer = PSV_XDGOpen;
>
> - // PostScript graph generator + PostScript viewer
> + // PostScript or PDF graph generator + PostScript/PDF viewer
> std::string GeneratorPath;
> - if (PSViewer &&
> + if (Viewer &&
> (S.TryFindProgram(getProgramName(program), GeneratorPath) ||
> S.TryFindProgram("dot|fdp|neato|twopi|circo", GeneratorPath))) {
> - std::string PSFilename = Filename + ".ps";
> + std::string OutputFilename =
> + Filename + (Viewer == PDFV_CmdStart ? ".pdf" : ".ps");
>
> std::vector<const char *> args;
> args.push_back(GeneratorPath.c_str());
> - args.push_back("-Tps");
> + if (Viewer == PDFV_CmdStart)
> + args.push_back("-Tpdf");
> + else
> + args.push_back("-Tps");
> args.push_back("-Nfontname=Courier");
> args.push_back("-Gsize=7.5,10");
> args.push_back(Filename.c_str());
> args.push_back("-o");
> - args.push_back(PSFilename.c_str());
> + args.push_back(OutputFilename.c_str());
> args.push_back(nullptr);
>
> errs() << "Running '" << GeneratorPath << "' program... ";
> @@ -222,20 +237,30 @@
> if (ExecGraphViewer(GeneratorPath, args, Filename, wait, ErrMsg))
> return true;
>
> + std::string StartArg;
> + if (Viewer == PDFV_CmdStart)
> + StartArg =
> + (StringRef("start ") + (wait ? "/WAIT " : "") + OutputFilename).str();
> +
> args.clear();
> args.push_back(ViewerPath.c_str());
> - switch (PSViewer) {
> + switch (Viewer) {
> case PSV_OSXOpen:
> args.push_back("-W");
> - args.push_back(PSFilename.c_str());
> + args.push_back(OutputFilename.c_str());
> break;
> case PSV_XDGOpen:
> wait = false;
> - args.push_back(PSFilename.c_str());
> + args.push_back(OutputFilename.c_str());
> break;
> case PSV_Ghostview:
> args.push_back("--spartan");
> - args.push_back(PSFilename.c_str());
> + args.push_back(OutputFilename.c_str());
> + break;
> + case PDFV_CmdStart:
> + args.push_back("/S");
> + args.push_back("/C");
> + args.push_back(StartArg.c_str());
> break;
> case PSV_None:
> llvm_unreachable("Invalid viewer");
> @@ -243,7 +268,7 @@
> args.push_back(nullptr);
>
> ErrMsg.clear();
> - return ExecGraphViewer(ViewerPath, args, PSFilename, wait, ErrMsg);
> + return ExecGraphViewer(ViewerPath, args, OutputFilename, wait, ErrMsg);
> }
>
> // dotty
>
~Aaron
More information about the llvm-commits
mailing list