* 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