* 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
[email protected]
https://lists.sourceforge.net/lists/listinfo/cdesktopenv-devel