* Revert changes to programs/dtsearchpath/libCliSrv/UnixEnv.C
  introduced by c3cb5b8aa6997138dfa06da39142bf793baeae60
  that could have produced disappearing Application Manager
  icons on FreeBSD
* Introduce SearchPath:useSystemPath() virtual method to tell
  dtsearchpath to leave some environment variables alone.

  It is currently overriden for FreeBSD only if the MANPATH
  is empty (system default). Other operating systems
  might want to override it if they prefer to have distribution
  specific control of a search path in effect.

* Symlink /usr/dt/share/man to /usr/dt/man for FreeBSD
  This allows dtsearchpath to actually include /usr/dt/man
  in the MANPATH when MANPATH override is in effect.
---
 cde/databases/CDE-MAN.udb                      |    4 +++
 cde/programs/dtsearchpath/dtsp/ManSearchPath.C |   33 +++++++++++++++---------
 cde/programs/dtsearchpath/dtsp/SearchPath.C    |   19 ++++++++++++--
 cde/programs/dtsearchpath/dtsp/SearchPath.h    |    4 +++
 cde/programs/dtsearchpath/libCliSrv/UnixEnv.C  |    2 +-
 5 files changed, 47 insertions(+), 15 deletions(-)

diff --git a/cde/databases/CDE-MAN.udb b/cde/databases/CDE-MAN.udb
index fed33d4..6915999 100644
--- a/cde/databases/CDE-MAN.udb
+++ b/cde/databases/CDE-MAN.udb
@@ -1288,6 +1288,10 @@ doc/C/man/man4/mwmrc.4
        install_target = /usr/dt/man
        type = sym_link
 }
+{ freebsd
+       install_target = /usr/dt/man
+       type = sym_link
+}
 #
 ./share/catman
 { uxp
diff --git a/cde/programs/dtsearchpath/dtsp/ManSearchPath.C 
b/cde/programs/dtsearchpath/dtsp/ManSearchPath.C
index a1cc948..96abf0d 100644
--- a/cde/programs/dtsearchpath/dtsp/ManSearchPath.C
+++ b/cde/programs/dtsearchpath/dtsp/ManSearchPath.C
@@ -42,12 +42,6 @@ ManSearchPath::ManSearchPath
        const char *     sep
        ) : SearchPath(user, envvar, sep)
 {
-#if defined(__FreeBSD__)
-    /* Installer on FreeBSD sets up man configuration so that
-     * setting MANPATH is not necessary
-     */
-    if (!user->OS()->MANPATH().isNull()) {
-#endif
     if (user->DTMANPATH())
        search_path = user->FactoryManPath() + "," + *user->DTMANPATH();
     else
@@ -61,9 +55,6 @@ ManSearchPath::ManSearchPath
 
     NormalizePath();
     TraversePath();
-#if defined(__FreeBSD__)
-    }
-#endif
 }
 
 
@@ -97,6 +88,22 @@ void ManSearchPath::MakePath
     }
 }
 
+#if defined(__FreeBSD__)
+/*****************************************************************
+ *  useSystemPath()
+ *
+ *         Check whether to leave MANPATH unmodified (or unset)
+ *
+ */
+int ManSearchPath::useSystemPath()
+{
+     if (user->OS()->getEnvironmentVariable("MANPATH").isNull()) {
+       return 1;
+     } else {
+       return 0;
+     }
+}
+#endif
 
 /*****************************************************************
  *  ExportPath()
@@ -106,9 +113,11 @@ void ManSearchPath::MakePath
  *****************************************************************/
 void ManSearchPath::ExportPath()
 {
-    CString env(GetEnvVar());
-    user->OS()->shell()->putToEnv(env,
+    if (!useSystemPath()) {
+      CString env(GetEnvVar());
+      user->OS()->shell()->putToEnv(env,
                       final_search_path.data());
+    }
 }
 
 
@@ -116,7 +125,7 @@ void ManSearchPath::Print()
 {
     printf("%s:\n", GetEnvVar());
     CString sp(GetSearchPath());
-    if (!sp.isNull()) {
+    if (!useSystemPath() && !sp.isNull()) {
        CTokenizedString path (sp,Separator().data());
        CString subpath = path.next();
        while (!subpath.isNull()) {
diff --git a/cde/programs/dtsearchpath/dtsp/SearchPath.C 
b/cde/programs/dtsearchpath/dtsp/SearchPath.C
index f0dd4a0..5e9d3f8 100644
--- a/cde/programs/dtsearchpath/dtsp/SearchPath.C
+++ b/cde/programs/dtsearchpath/dtsp/SearchPath.C
@@ -329,6 +329,19 @@ int SearchPath::validSearchPath
     return 0;
 }
 
+/*********************************************************************
+ *  useSystemPath()
+ *
+ *    This member function verifies whether system environment variable
+ *    should be left unmodified, since some other configuraton mechanism
+ *    is in effect.
+ *
+ */
+int SearchPath::useSystemPath()
+{
+    return 0;
+}
+
 /*****************************************************************
  *  ExportPath()
  *
@@ -340,7 +353,9 @@ void SearchPath::ExportPath()
     CString env(environment_var);
     env += "SEARCHPATH";
 
-    user->OS()->shell()->putToEnv(env, final_search_path.data());
+    if (!useSystemPath()) {
+      user->OS()->shell()->putToEnv(env, final_search_path.data());
+    }
 }
 
 
@@ -354,7 +369,7 @@ void SearchPath::Print()
 {
     printf("%sSEARCHPATH:\n", GetEnvVar());
     CString sp(GetSearchPath());
-    if (!sp.isNull()) {
+    if (!useSystemPath() && !sp.isNull()) {
        CTokenizedString path (sp,Separator().data());
        CString subpath = path.next();
        while (!subpath.isNull()) {
diff --git a/cde/programs/dtsearchpath/dtsp/SearchPath.h 
b/cde/programs/dtsearchpath/dtsp/SearchPath.h
index 0902590..ee0750d 100644
--- a/cde/programs/dtsearchpath/dtsp/SearchPath.h
+++ b/cde/programs/dtsearchpath/dtsp/SearchPath.h
@@ -78,6 +78,7 @@ class SearchPath {
   CString Separator() const    { return separator; }
 
   virtual int validSearchPath (const CString &) const;
+  virtual int useSystemPath();
 
   void    setSeparator (const char * sep) { separator = sep; }
 
@@ -193,6 +194,9 @@ class ManSearchPath : public SearchPath {
 
  protected:
   virtual void    MakePath (const CString &);
+#if defined(__FreeBSD__)
+  virtual int     useSystemPath();
+#endif
 
  private:
 };
diff --git a/cde/programs/dtsearchpath/libCliSrv/UnixEnv.C 
b/cde/programs/dtsearchpath/libCliSrv/UnixEnv.C
index 9b34e85..e00bb2c 100644
--- a/cde/programs/dtsearchpath/libCliSrv/UnixEnv.C
+++ b/cde/programs/dtsearchpath/libCliSrv/UnixEnv.C
@@ -83,7 +83,7 @@ UnixEnvironment::UnixEnvironment()
 #elif defined(__OpenBSD__)
        manpath = 
"/usr/share/man:/usr/X11R6/man:/usr/local/man:/usr/ports/infrastructure/man";
 #elif defined(__FreeBSD__)
-       manpath = temp;
+       manpath = "/usr/share/man:/usr/local/man";
 #endif
     else
        manpath = temp;
-- 
1.7.9.2


------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and 
threat landscape has changed and how IT managers can respond. Discussions 
will include endpoint security, mobile security and the latest in malware 
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
cdesktopenv-devel mailing list
cdesktopenv-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/cdesktopenv-devel

Reply via email to