From cf197b755095494fbc705d10e83fd24bdf070c4b Mon Sep 17 00:00:00 2001
From: Roland McGrath <roland@redhat.com>
Date: Mon, 25 Jan 1993 21:42:31 +0000
Subject: [PATCH] Formerly variable.c.~17~

---
 variable.c | 17 ++++++++++++-----
 1 file changed, 12 insertions(+), 5 deletions(-)

diff --git a/variable.c b/variable.c
index 2254639f..b77293f6 100644
--- a/variable.c
+++ b/variable.c
@@ -490,11 +490,18 @@ target_environment (file)
       for (b = table[i]; b != 0; b = b->next)
 	{
 	  register struct variable *v = b->variable;
-	  /* If V is recursively expanded, expand its value.  */
-	  char *value = v->recursive ? recursively_expand (v) : v->value;
-	  result[nvariables++] = concat (v->name, "=", value);
-	  if (v->recursive)
-	    free (value);
+	  /* If V is recursively expanded and didn't come from the environment,
+	     expand its value.  If it came from the environment, it should
+	     go back into the environment unchanged.  */
+	  if (v->recursive
+	      && v->origin != o_env && v->origin != o_env_override)
+	      {
+		char *value = recursively_expand (v);
+		result[nvariables++] = concat (v->name, "=", value);
+		free (value);
+	      }
+	  else
+	    result[nvariables++] = concat (v->name, "=", v->value);
 	}
     }
   result[nvariables] = (char *) xmalloc (100);