From b96dc0fd971a3569e2a986e833c2eb7f24db69f2 Mon Sep 17 00:00:00 2001 From: albert-github Date: Tue, 7 Jan 2020 15:04:41 +0100 Subject: Possibility to use gswin64c on Windows On windows the 32 bit executable is called gswin32c, but for the 64-bit systems also a gswin64c exists. The path is checked for the existing of these executables (with a preference for the 32 bit version). --- doc/install.doc | 2 +- src/latexgen.cpp | 3 ++- src/portable.cpp | 51 ++++++++++++++++++++++++++++++++++++++++++++++++++- 3 files changed, 53 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 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 these 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..0c0f117 100644 --- a/src/latexgen.cpp +++ b/src/latexgen.cpp @@ -421,7 +421,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 -- cgit v0.12