Index: /trunk/src/kmk/kbuild.c
===================================================================
--- /trunk/src/kmk/kbuild.c	(revision 2012)
+++ /trunk/src/kmk/kbuild.c	(revision 2013)
@@ -1,9 +1,9 @@
 /* $Id$ */
 /** @file
- *
  * kBuild specific make functionality.
- *
- * Copyright (c) 2006-2007 knut st. osmundsen <bird-kBuild-spam@anduin.net>
- *
+ */
+
+/*
+ * Copyright (c) 2006-2008 knut st. osmundsen <bird-kBuild-spam@anduin.net>
  *
  * This file is part of kBuild.
@@ -465,5 +465,5 @@
 
     MY_ASSERT_MSG(strlen(pVar->value) == pVar->value_length,
-                  ("%u != %u %.*s\n", pVar->value_length, strlen(pVar->value), (int)cchName, pVar->name));
+                  ("%u != %u %.*s\n", pVar->value_length, (unsigned int)strlen(pVar->value), (int)cchName, pVar->name));
     return pVar;
 }
@@ -485,5 +485,5 @@
 
     MY_ASSERT_MSG(strlen(pVar->value) == pVar->value_length,
-                  ("%u != %u %s\n", pVar->value_length, strlen(pVar->value), pVar->name));
+                  ("%u != %u %s\n", pVar->value_length, (unsigned int)strlen(pVar->value), pVar->name));
     return pVar;
 }
@@ -503,5 +503,5 @@
     struct variable *pVar = lookup_variable(pszName, cchName);
     MY_ASSERT_MSG(!pVar || strlen(pVar->value) == pVar->value_length,
-                  ("%u != %u %.*s\n", pVar->value_length, strlen(pVar->value), (int)cchName, pVar->name));
+                  ("%u != %u %.*s\n", pVar->value_length, (unsigned int)strlen(pVar->value), (int)cchName, pVar->name));
     return pVar;
 }
@@ -540,5 +540,5 @@
 #endif
             free(pVar->value);
-        assert (pVar->origin != o_automatic);
+        assert(pVar->origin != o_automatic);
         pVar->value = pszExpanded;
         pVar->value_length = value_len;
@@ -565,5 +565,5 @@
     {
         MY_ASSERT_MSG(strlen(pVar->value) == pVar->value_length,
-                      ("%u != %u %.*s\n", pVar->value_length, strlen(pVar->value), (int)cchName, pVar->name));
+                      ("%u != %u %.*s\n", pVar->value_length, (unsigned int)strlen(pVar->value), (int)cchName, pVar->name));
 
         /* Make sure the variable is simple, convert it if necessary. */
@@ -2115,16 +2115,8 @@
     _OUT_FILES      += $($(target)_$(source)_OUTPUT_) $($(target)_$(source)_OUTPUT_MAYBE_)
     */
-    /** @todo use append? */
     pVar = kbuild_get_variable_n(ST("_OUT_FILES"));
-    psz = pszVal = xmalloc(pVar->value_length + 1 + pOutput->value_length + 1 + pOutputMaybe->value_length + 1);
-    memcpy(psz, pVar->value, pVar->value_length); psz += pVar->value_length;
-    *psz++ = ' ';
-    memcpy(psz, pOutput->value, pOutput->value_length); psz += pOutput->value_length;
-    *psz++ = ' ';
-    memcpy(psz, pOutputMaybe->value, pOutputMaybe->value_length + 1);
-    do_variable_definition_2(NILF, "_OUT_FILES", pszVal,
-                             pVar->value_length + 1 + pOutput->value_length + 1 + pOutputMaybe->value_length,
-                             !pVar->recursive && !pOutput->recursive && !pOutputMaybe->recursive,
-                             pszVal, o_file, f_simple, 0 /* !target_var */);
+    append_string_to_variable(pVar, pOutput->value, pOutput->value_length, 1 /* append */);
+    if (pOutputMaybe->value_length)
+        append_string_to_variable(pVar, pOutputMaybe->value, pOutputMaybe->value_length, 1 /* append */);
 
     /*
@@ -2132,6 +2124,19 @@
     */
     memcpy(pszDstVar + pTarget->value_length, "_OBJS_", sizeof("_OBJS_"));
-    do_variable_definition_2(NILF, pszDstVar, pObj->value, pObj->value_length,
-                             !pObj->recursive, 0, o_file, f_append, 0 /* !target_var */);
+    pVar = kbuild_query_recursive_variable_n(pszDstVar, pTarget->value_length + sizeof("_OBJS_") - 1);
+    if (pVar)
+    {
+        if (pVar->recursive)
+            pVar = kbuild_simplify_variable(pVar);
+        assert(!pObj->recursive);
+        append_string_to_variable(pVar, pObj->value, pObj->value_length, 1 /* append */);
+    }
+    else
+        define_variable_vl_global(pszDstVar, pTarget->value_length + sizeof("_OBJS_") - 1,
+                                  pObj->value, pObj->value_length,
+                                  1 /* duplicate_value */,
+                                  o_file,
+                                  0 /* recursive */,
+                                  NULL /* flocp */);
 
     /*
@@ -2140,5 +2145,5 @@
     pVar = kbuild_get_recursive_variable("def_target_source_rule");
     pszVal = variable_expand_string_2 (o, pVar->value, pVar->value_length, &psz);
-    assert (!((size_t)pszVal & 3));
+    assert(!((size_t)pszVal & 3));
 
     install_variable_buffer(&pszSavedVarBuf, &cchSavedVarBuf);
