From e3f975730058498c4a89c3a5da5dfe46ea3e313a Mon Sep 17 00:00:00 2001
From: Morris Jette <jette@schedmd.com>
Date: Tue, 7 Oct 2014 09:18:22 -0700
Subject: [PATCH] add limited launch/poe support for srun --export

--export=NONE is not supported, but --export=name=value is supported.
---
 src/plugins/launch/poe/launch_poe.c | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)

diff --git a/src/plugins/launch/poe/launch_poe.c b/src/plugins/launch/poe/launch_poe.c
index 08dc8708088..f235e2923c4 100644
--- a/src/plugins/launch/poe/launch_poe.c
+++ b/src/plugins/launch/poe/launch_poe.c
@@ -756,12 +756,35 @@ extern int launch_p_create_job_step(srun_job_t *job, bool use_all_cpus,
  	return SLURM_SUCCESS;
 }
 
+static void _build_user_env(void)
+{
+	char *tmp_env, *tok, *save_ptr = NULL, *eq_ptr, *value;
+
+	tmp_env = xstrdup(opt.export_env);
+	tok = strtok_r(tmp_env, ",", &save_ptr);
+	while (tok) {
+		if (!strcasecmp(tok, "NONE"))
+			break;
+		eq_ptr = strchr(tok, '=');
+		if (eq_ptr) {
+			eq_ptr[0] = '\0';
+			value = eq_ptr + 1;
+			setenv(tok, value, 1);
+		}
+		tok = strtok_r(NULL, ",", &save_ptr);
+	}
+	xfree(tmp_env);
+}
+
 extern int launch_p_step_launch(
 	srun_job_t *job, slurm_step_io_fds_t *cio_fds, uint32_t *global_rc,
 	slurm_step_launch_callbacks_t *step_callbacks)
 {
 	int rc = 0;
 
+	if (opt.export_env)
+		_build_user_env();
+
 	poe_pid = fork();
 	if (poe_pid < 0) {
 		error("fork: %m");
-- 
GitLab