Author: rhc
Date: 2007-07-19 15:00:06 EDT (Thu, 19 Jul 2007)
New Revision: 15516
URL: https://svn.open-mpi.org/trac/ompi/changeset/15516
Log:
Ensure that the LD_LIBRARY_PATH and PATH get properly set for procs
locally spawned by mpirun.
Text files modified:
trunk/orte/tools/orterun/orterun.c | 55 ++++++++++++++++++++++
+++++++++++++++--
1 files changed, 52 insertions(+), 3 deletions(-)
Modified: trunk/orte/tools/orterun/orterun.c
====================================================================
==
========
--- trunk/orte/tools/orterun/orterun.c (original)
+++ trunk/orte/tools/orterun/orterun.c 2007-07-19 15:00:06 EDT
(Thu, 19 Jul 2007)
@@ -22,6 +22,8 @@
*/
#include "orte_config.h"
+#include "orte/orte_constants.h"
+
#include <stdio.h>
#ifdef HAVE_UNISTD_H
@@ -61,8 +63,7 @@
#include "opal/version.h"
#include "opal/runtime/opal.h"
-
-#include "orte/orte_constants.h"
+#include "opal/util/os_path.h"
#include "orte/class/orte_pointer_array.h"
#include "orte/util/proc_info.h"
@@ -351,7 +352,6 @@
/* Setup MCA params */
-
/* Check for some "global" command line params */
parse_globals(argc, argv, &cmd_line);
OBJ_DESTRUCT(&cmd_line);
@@ -400,6 +400,55 @@
return rc;
}
+ /* If we have a prefix, then modify the PATH and
+ LD_LIBRARY_PATH environment variables in our copy. This
+ will ensure that any locally-spawned children will
+ have our executables and libraries in their path
+
+ For now, default to the prefix_dir provided in the first
app_context.
+ Since there always MUST be at least one app_context, we
are safe in
+ doing this.
+ */
+ if (NULL != apps[0]->prefix_dir) {
+ char *oldenv, *newenv, *lib_base, *bin_base;
+
+ lib_base = opal_basename(opal_install_dirs.libdir);
+ bin_base = opal_basename(opal_install_dirs.bindir);
+
+ /* Reset PATH */
+ newenv = opal_os_path( false, apps[0]->prefix_dir,
bin_base, NULL );
+ oldenv = getenv("PATH");
+ if (NULL != oldenv) {
+ char *temp;
+ asprintf(&temp, "%s:%s", newenv, oldenv );
+ free( newenv );
+ newenv = temp;
+ }
+ opal_setenv("PATH", newenv, true, &orte_launch_environ);
+ if (orte_debug_flag) {
+ opal_output(0, "%s: reset PATH: %s", orterun_basename,
newenv);
+ }
+ free(newenv);
+ free(bin_base);
+
+ /* Reset LD_LIBRARY_PATH */
+ newenv = opal_os_path( false, apps[0]->prefix_dir,
lib_base, NULL );
+ oldenv = getenv("LD_LIBRARY_PATH");
+ if (NULL != oldenv) {
+ char* temp;
+ asprintf(&temp, "%s:%s", newenv, oldenv);
+ free(newenv);
+ newenv = temp;
+ }
+ opal_setenv("LD_LIBRARY_PATH", newenv, true,
&orte_launch_environ);
+ if (orte_debug_flag) {
+ opal_output(0, "%s: reset LD_LIBRARY_PATH: %s",
+ orterun_basename, newenv);
+ }
+ free(newenv);
+ free(lib_base);
+ }
+
/* since we are a daemon, we should *always* yield the
processor when idle */
opal_progress_set_yield_when_idle(true);
_______________________________________________
svn mailing list
s...@open-mpi.org
http://www.open-mpi.org/mailman/listinfo.cgi/svn