File pstoedit-pkglibdir.patch of Package pstoedit

Fix for pstoedit search for plugins.

By default, pstoedit "make install" installs to PSTOEDITLIBDIR, so if
nobody moves them to another location, then it is sufficient to search in
PSTOEDITLIBDIR.


But the way how pstoedit searches for plugins is broken:

If pstoedit.reg does not exist or does not contain common/plugindir, then
it tries $exepath/../lib/pstoedit, always sets pluginsloaded, and never
tries PSTOEDITLIBDIR.

If pstoedit.reg contains common/plugindir, then it tries that path,
always sets pluginsloaded, and never tries PSTOEDITLIBDIR.

=> The default installation directory is never tried, if it is not equal
to one of above.


The implementation has just another problem:

If pstoedit.reg contains common/plugindir, and the directory defined
there is equal to $pkglibdir, but the string is not literally
"{expansion_of_bindir}/../lib/pstoedit", then plugins are loaded twice.
So the check as it is makes only a little sense, because nobody would
create ~/.pstoedit.reg containing:

common/plugindir=/usr/bin/../lib/pstoedit


The new implementation does things differently:

If common/plugindir is defined, it checks only that directory.

It swaps the check order: First checks whether PSTOEDITLIBDIR exists. If
it exists, it skips blind attempts to find plugins.

As PSTOEDITLIBDIR is always defined by makefile, the blind fallback will
be attempted only in obscure environments.


Index: pstoedit-3.70/src/pstoedit.cpp
===================================================================
--- pstoedit-3.70.orig/src/pstoedit.cpp
+++ pstoedit-3.70/src/pstoedit.cpp
@@ -30,6 +30,7 @@
 #include I_string_h
 
 #include <assert.h>
+#include <sys/stat.h>
 
 #include "pstoeditoptions.h"
 
@@ -261,33 +262,33 @@ static void loadpstoeditplugins(const ch
 		loadPlugInDrivers(plugindir.c_str(), errstream, verbose);	// load the driver plugins
 		pluginsloaded = true;
 	}
-	// also look in the directory where the pstoedit .exe/dll was found
-	char szExePath[1000];
-	szExePath[0] = '\0';
-	const unsigned long r = P_GetPathToMyself(progname, szExePath, sizeof(szExePath));
-	if (verbose)  errstream << "pstoedit : path to myself:" << progname << " " << r << " " << szExePath<< endl;
-	char *p = 0;
-	if (r && (p = strrchr(szExePath, directoryDelimiter)) != 0) {
-		*p = '\0';
-		if (!strequal(szExePath, plugindir.c_str())) {
-			loadPlugInDrivers(szExePath, errstream,verbose);
-			pluginsloaded = true;
-		}
-	}
-	// now try also $exepath/../lib/pstoedit
-	strcat_s(szExePath,1000,"/../lib/pstoedit");
-	if (!strequal(szExePath, plugindir.c_str())) {
-    	loadPlugInDrivers(szExePath, errstream,verbose);
-		pluginsloaded = true;
-	}
-
 #ifdef PSTOEDITLIBDIR
-	if (!pluginsloaded) {
+	struct stat s;
+	if (!pluginsloaded &&
+	    !stat(PSTOEDITLIBDIR, &s) &&
+	    S_ISDIR(s.st_mode)) {
   	  // also try to load drivers from the PSTOEDITLIBDIR
 	  loadPlugInDrivers(PSTOEDITLIBDIR, errstream,verbose);
 	  pluginsloaded = true;
 	}
 #endif
+	// If the above failed, also look in the directory where the pstoedit .exe/dll was found
+	if (!pluginsloaded) {
+	  char szExePath[1000];
+	  szExePath[0] = '\0';
+	  const unsigned long r = P_GetPathToMyself(progname, szExePath, sizeof(szExePath));
+	  if (verbose)  errstream << "pstoedit : path to myself:" << progname << " " << r << " " << szExePath<< endl;
+	  char *p = 0;
+	  if (r && (p = strrchr(szExePath, directoryDelimiter)) != 0) {
+		*p = '\0';
+		loadPlugInDrivers(szExePath, errstream,verbose);
+	  }
+	  // now try also $exepath/../lib/pstoedit
+	  strcat_s(szExePath,1000,"/../lib/pstoedit");
+	  if (!strequal(szExePath, plugindir.c_str())) {
+	  loadPlugInDrivers(szExePath, errstream,verbose);
+	  }
+	}
 
 	// delete[]plugindir;
 }
Index: pstoedit-3.70/doc/pstoedit.tex
===================================================================
--- pstoedit-3.70.orig/doc/pstoedit.tex
+++ pstoedit-3.70/doc/pstoedit.tex
@@ -352,7 +352,7 @@ If  the \Opt{-fontmap} option is not spe
   \item MS Windows: The same directory where the \Prog{pstoedit} executable is located
 
   \item Unix:\\
-  $<$\emph{The directory where the pstoedit executable is located}$>$\verb+/../lib/+
+  The default installation directory. If it fails, then $<$\emph{The directory where the pstoedit executable is located}$>$\verb+/../lib/+
 
 \end{itemize}
 
Index: pstoedit-3.70/doc/pstoedit.1
===================================================================
--- pstoedit-3.70.orig/doc/pstoedit.1
+++ pstoedit-3.70/doc/pstoedit.1
@@ -1,5 +1,5 @@
 '\" t
-.\" Manual page created with latex2man on Thu Jan  1 20:55:12 CET 2015
+.\" Manual page created with latex2man on Fri Mar 13 20:58:53 CET 2015
 .\" NOTE: This file is generated, DO NOT EDIT.
 .de Vb
 .ft CW
@@ -10,7 +10,7 @@
 
 .fi
 ..
-.TH "PSTOEDIT" "1" "01 January 2015" "Conversion Tools " "Conversion Tools "
+.TH "PSTOEDIT" "1" "13 March 2015" "Conversion Tools " "Conversion Tools "
 .SH NAME
 
 pstoedit
@@ -367,7 +367,7 @@ MS Windows: The same directory where the
 .B *
 Unix:
 .br 
-<\fIThe directory where the pstoedit executable is located\fP>
+The default installation directory. If it fails, then <\fIThe directory where the pstoedit executable is located\fP>
 /../lib/ 
 .RS
 .PP
Index: pstoedit-3.70/doc/pstoedit.htm
===================================================================
--- pstoedit-3.70.orig/doc/pstoedit.htm
+++ pstoedit-3.70/doc/pstoedit.htm
@@ -1,5 +1,5 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<!-- Manual page created with latex2man on Thu Jan  1 20:55:13 CET 2015
+<!-- Manual page created with latex2man on Fri Mar 13 20:58:54 CET 2015
 ** Author of latex2man: Juergen.Vollmer@informatik-vollmer.de
 ** NOTE: This file is generated, DO NOT EDIT. -->
 <html>
@@ -9,7 +9,7 @@
 PSTOEDIT 
 </h1>
 <h4 align=center>Dr. Wolfgang Glunz </h4>
-<h4 align=center>01 January 2015</h4>
+<h4 align=center>13 March 2015</h4>
 <h4 align=center>Version 3.70 </h4>
 <tt>pstoedit</tt>
 - a tool converting PostScript and PDF files into various 
@@ -561,7 +561,7 @@ in the installation directory and uses t
 </li>
 <li>Unix:<br>
  
-&lt;<em>The directory where the pstoedit executable is located</em>&gt;
+The default installation directory. If it fails, then &lt;<em>The directory where the pstoedit executable is located</em>&gt;
 <tt>/../lib/</tt> 
 <p>
 </li>