make: expand .EXPORT/.makeenv variables
authorSimon Schubert <corecode@dragonflybsd.org>
Mon, 27 Jul 2009 09:43:58 +0000 (11:43 +0200)
committerSimon Schubert <corecode@dragonflybsd.org>
Mon, 27 Jul 2009 21:29:45 +0000 (23:29 +0200)
We need to expand the value of a variable we want to put into the
environment, otherwise they might appear as FOO=bar_${baz}.

usr.bin/make/var.c

index b059f22..f408a99 100644 (file)
@@ -1002,8 +1002,12 @@ Var_Set(const char name[], const char val[], GNode *ctxt)
                         * are automatically exported to the
                         * environment (as per POSIX standard)
                         */
-                       if (setenv(n, val, 1) == -1)
+                       char *exp_value;
+
+                       exp_value = Buf_Peel(Var_Subst(val, ctxt, false));
+                       if (setenv(n, exp_value, 1) == -1)
                                Punt( "setenv: %s: can't allocate memory", n);
+                       free(exp_value);
                }
 
        }
@@ -1052,9 +1056,13 @@ Var_SetEnv(const char name[], GNode *ctxt)
                Error("Warning: .EXPORTVAR: set on undefined variable %s", name);
        } else {
                if ((v->flags & VAR_TO_ENV) == 0) {
+                       char *value;
+
+                       value = Buf_Peel(Var_Subst(Buf_Data(v->val), ctxt, false));
                        v->flags |= VAR_TO_ENV;
-                       if (setenv(v->name, Buf_Data(v->val), 1) == -1)
+                       if (setenv(v->name, value, 1) == -1)
                                Punt( "setenv: %s: can't allocate memory", v->name);    
+                       free(value);
                }
        }
 }