Index: /trunk/doc/manual/Makefile.kmk
===================================================================
--- /trunk/doc/manual/Makefile.kmk	(revision 56542)
+++ /trunk/doc/manual/Makefile.kmk	(revision 56543)
@@ -149,20 +149,43 @@
 # $(evalcall2 def_vbox_replace_paths_in_xslt)
 # @param    1   The XSLT source file (relative to Makefile dir).
-# @param    2   Optional output subdirectory.
+# @param    2   Optional output subdirectory (leading slash).
 define def_vbox_replace_paths_in_xslt
-OTHER_CLEAN += $$(VBOX_PATH_MANUAL_OUTBASE)/$2$(notdir $1)
-$$(VBOX_PATH_MANUAL_OUTBASE)/$2$(notdir $1): $$(VBOX_PATH_MANUAL_SRC)/$1 | $$$$(dir $$$$@)
-	$$(call MSG_GENERATE,,$$@,$$<)
+OTHER_CLEAN += $$(VBOX_PATH_MANUAL_OUTBASE)$2/$(notdir $1)
+$$(VBOX_PATH_MANUAL_OUTBASE)$2/$(notdir $1): $$(VBOX_PATH_MANUAL_SRC)/$1 | $$$$(dir $$$$@)
+	$$(call MSG_L1,Pre-processing $$(<) to $$(@))
 	$$(QUIET)$$(SED) \
 		-e 's|@VBOX_PATH_DOCBOOK@|$$(VBOX_PATH_DOCBOOK)|g' \
 		-e 's|@VBOX_PATH_MANUAL_SRC@|$$(VBOX_PATH_MANUAL_SRC)|g' \
 		-e 's|@VBOX_PATH_MANUAL_OUTBASE@|$$(VBOX_PATH_MANUAL_OUTBASE)|g' \
-		-e 's|@VBOX_PATH_MANUAL_OUT_LANG@|$$(VBOX_PATH_MANUAL_OUTBASE)$(if $2,/$(patsubst %/,%,$2),)|g' \
-		\
-		-e 's|@CFGPATH@|$$(VBOX_PATH_MANUAL_SRC)|g' \
-		-e 's|@TARGETPATH@|$$(@D)|g' \
+		-e 's|@VBOX_PATH_MANUAL_OUT_LANG@|$$(VBOX_PATH_MANUAL_OUTBASE)$2|g' \
 		--output "$$(@)" $$<
 endef
 
+##
+# Non-pattern-rule approach to editing XML files.
+# $(evalcall2 def_vbox_replace_stuff_in_xml)
+# @param    1   The XSLT source file (relative to Makefile dir).
+# @param    2   Optional output subdirectory (leading slash).
+#
+define def_vbox_replace_stuff_in_xml
+OTHER_CLEAN += $$(VBOX_PATH_MANUAL_OUTBASE)$2/$(notdir $1)
+$$(VBOX_PATH_MANUAL_OUTBASE)$2/$(notdir $1): $$(VBOX_PATH_MANUAL_SRC)/$1 $$(VBOX_VERSION_STAMP) | $$$$(dir $$$$@)
+	$$(call MSG_L1,Pre-processing $$(<) to $$(@))
+	$$(QUIET)$$(SED) \
+		-e 's|@VBOX_PATH_DOCBOOK@|$$(VBOX_PATH_DOCBOOK)|g' \
+		-e 's|@VBOX_PATH_MANUAL_SRC@|$$(VBOX_PATH_MANUAL_SRC)|g' \
+		-e 's|@VBOX_PATH_MANUAL_OUTBASE@|$$(VBOX_PATH_MANUAL_OUTBASE)|g' \
+		-e 's|@VBOX_PATH_MANUAL_OUT_LANG@|$$(VBOX_PATH_MANUAL_OUTBASE)$2|g' \
+               \
+		-e 's/@VBOX_VERSION_MAJOR@/$$(VBOX_VERSION_MAJOR)/g' \
+	        -e 's/@VBOX_VERSION_MINOR@/$$(VBOX_VERSION_MINOR)/g' \
+	        -e 's/@VBOX_VERSION_BUILD@/$$(VBOX_VERSION_BUILD)/g' \
+	        -e 's/@VBOX_VERSION_STRING@/$$(VBOX_VERSION_STRING)/g' \
+	        -e 's/@VBOX_VENDOR@/$$(VBOX_VENDOR)/g' \
+	        -e 's/@VBOX_PRODUCT@/$$(VBOX_PRODUCT)/g' \
+	        -e 's/@VBOX_C_YEAR@/$$(VBOX_C_YEAR)/g' \
+               \
+		--output "$$(@)" $$<
+endef
 
 ## List of refentry files (manpages).
@@ -431,19 +454,7 @@
 
 # intermediate step to do some variable replacement in the document
-$(foreach f,$(VBOX_MANUAL_LANGUAGES) \
-,$(addprefix $(VBOX_PATH_MANUAL_OUTBASE)/$f/,$(filter-out user_VBoxManage.xml,$(VBOX_MANUAL_XML_FILES_INCL_CHANGELOG)))): \
-		$(VBOX_PATH_MANUAL_OUTBASE)/% : $(VBOX_PATH_MANUAL_SRC)/% $(VBOX_VERSION_STAMP) | $$(dir $$@)
-	$(call MSG_L1,Pre-processing [1] $(@F) to $@)
-	$(QUIET)$(RM) -f $@ $@.tmp
-	$(QUIET)$(SED) -e 's/@VBOX_VERSION_MAJOR@/$(VBOX_VERSION_MAJOR)/g' \
-	               -e 's/@VBOX_VERSION_MINOR@/$(VBOX_VERSION_MINOR)/g' \
-	               -e 's/@VBOX_VERSION_BUILD@/$(VBOX_VERSION_BUILD)/g' \
-	               -e 's/@VBOX_VERSION_STRING@/$(VBOX_VERSION_STRING)/g' \
-	               -e 's/@VBOX_VENDOR@/$(VBOX_VENDOR)/g' \
-	               -e 's/@VBOX_PRODUCT@/$(VBOX_PRODUCT)/g' \
-	               -e 's/@VBOX_C_YEAR@/$(VBOX_C_YEAR)/g' \
-	               -e 's|@VBOX_PATH_MANUAL_SRC@|$(VBOX_PATH_MANUAL_SRC)|g' \
-	               --output $@.tmp $<
-	$(QUIET)$(MV) -f $@.tmp $@
+$(foreach lang,$(VBOX_MANUAL_LANGUAGES) \
+,$(foreach file,$(filter-out user_VBoxManage.xml,$(VBOX_MANUAL_XML_FILES_INCL_CHANGELOG)) \
+,$(evalcall2 def_vbox_replace_stuff_in_xml,/$(lang)/$(file),/$(lang))))
 
 # TODO: figure why the rule below doesn't cause kmk to rebuild the manual when a man page changes!
@@ -735,5 +746,5 @@
  # Microsoft Help Compiler.
  #
- $(foreach lang,$(VBOX_MANUAL_LANGUAGES),$(evalcall2 def_vbox_replace_paths_in_xslt,docbook-htmlhelp-formatcfg.xsl,$(lang)/))
+ $(foreach lang,$(VBOX_MANUAL_LANGUAGES),$(evalcall2 def_vbox_replace_paths_in_xslt,docbook-htmlhelp-formatcfg.xsl,/$(lang)))
 
  # Manual formatcfg dependencies for the above.
@@ -810,6 +821,6 @@
 #
 ##########################################################################################
-$(evalcall2 def_vbox_replace_paths_in_xslt,docbook-html-one-page-formatcfg.xsl,en_US/)
-$(evalcall2 def_vbox_replace_paths_in_xslt,docbook-html-chunks-formatcfg.xsl,en_US/)
+$(evalcall2 def_vbox_replace_paths_in_xslt,docbook-html-one-page-formatcfg.xsl,/en_US)
+$(evalcall2 def_vbox_replace_paths_in_xslt,docbook-html-chunks-formatcfg.xsl,/en_US)
 
 # Manual formatcfg dependencies.
@@ -867,5 +878,5 @@
 # with the actual change log contained in user_ChangeLogImpl.xml
 #
-$(evalcall2 def_vbox_replace_paths_in_xslt,docbook-changelog-formatcfg.xsl,en_US/)
+$(evalcall2 def_vbox_replace_paths_in_xslt,docbook-changelog-formatcfg.xsl,/en_US)
 $(VBOX_PATH_MANUAL_OUTBASE)/en_US/ChangeLog.html: \
 		$(VBOX_PATH_MANUAL_OUTBASE)/en_US/docbook-changelog-formatcfg.xsl \
