diff options
-rw-r--r-- | doc/install.doc | 2 | ||||
-rw-r--r-- | src/latexgen.cpp | 4 | ||||
-rw-r--r-- | src/portable.cpp | 51 |
3 files changed, 54 insertions, 3 deletions
diff --git a/doc/install.doc b/doc/install.doc index b711cd4..5f15d8a 100644 --- a/doc/install.doc +++ b/doc/install.doc @@ -251,7 +251,7 @@ Ghostscript can be <a href="https://sourceforge.net/projects/ghostscript/">downl from Sourceforge. After installing \LaTeX and Ghostscript you'll need to make sure the tools -latex.exe, pdflatex.exe, and gswin32c.exe are present in the search path of a +latex.exe, pdflatex.exe, and gswin32c.exe (or gswin64c.exe) are present in the search path of a command box. Follow <a href="https://www.computerhope.com/issues/ch000549.htm">these</a> instructions if you are unsure and run the commands from a command box to verify it works. diff --git a/src/latexgen.cpp b/src/latexgen.cpp index cdda22c..b8cac2f 100644 --- a/src/latexgen.cpp +++ b/src/latexgen.cpp @@ -42,6 +42,7 @@ #include "namespacedef.h" #include "filename.h" #include "resourcemgr.h" +#include "portable.h" static bool DoxyCodeOpen = FALSE; static bool DoxyCodeLineOpen = FALSE; @@ -421,7 +422,8 @@ static void writeMakeBat() t << mkidx_command << " refman.idx\n"; t << "%LATEX_CMD% refman.tex\n"; t << "dvips -o refman.ps refman.dvi\n"; - t << "gswin32c -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite " + t << Portable::ghostScriptCommand(); + t << " -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite " "-sOutputFile=refman.pdf -c save pop -f refman.ps\n"; } else // use pdflatex diff --git a/src/portable.cpp b/src/portable.cpp index e191b26..403b0ea 100644 --- a/src/portable.cpp +++ b/src/portable.cpp @@ -348,10 +348,59 @@ char Portable::pathListSeparator(void) #endif } +#if defined(_WIN32) && !defined(__CYGWIN__) +static const bool ExistsOnPath(const char *fileName) +{ + QFileInfo fi1(fileName); + if (fi1.exists()) return true; + + const char *p = Portable::getenv("PATH"); + char listSep = Portable::pathListSeparator(); + char pathSep = Portable::pathSeparator(); + QCString paths(p); + int strt = 0; + int idx; + while ((idx = paths.find(listSep,strt)) != -1) + { + QCString locFile(paths.mid(strt,idx-strt)); + locFile += pathSep; + locFile += fileName; + QFileInfo fi(locFile); + if (fi.exists()) return true; + strt = idx + 1; + } + // to be sure the last path component is checked as well + QCString locFile(paths.mid(strt)); + if (!locFile.isEmpty()) + { + locFile += pathSep; + locFile += fileName; + QFileInfo fi(locFile); + if (fi.exists()) return true; + } + return false; +} +#endif + const char *Portable::ghostScriptCommand(void) { #if defined(_WIN32) && !defined(__CYGWIN__) - return "gswin32c.exe"; + static char *gsexe = NULL; + if (!gsexe) + { + char *gsExec[] = {"gswin32c.exe","gswin64c.exe"}; + for (int i = 0; i < sizeof(gsExec) / sizeof(*gsExec); i++) + { + if (ExistsOnPath(gsExec[i])) + { + gsexe = gsExec[i]; + return gsexe; + } + } + gsexe = gsExec[0]; + return gsexe; + } + return gsexe; #else return "gs"; #endif |