Index: /trunk/src/VBox/Main/Makefile.kmk
===================================================================
--- /trunk/src/VBox/Main/Makefile.kmk	(revision 66642)
+++ /trunk/src/VBox/Main/Makefile.kmk	(revision 66643)
@@ -136,10 +136,12 @@
 # recompile every time a comma in the documentation is changed.
 #
+$(call KB_FN_AUTO_CMD_DEPS,$(VBOX_XIDL_FILE).ts)
 $(VBOX_XIDL_FILE).ts +| $(VBOX_XIDL_FILE): \
 		$(VBOX_XIDL_FILE_SRC) \
 		$(VBOX_PATH_MAIN_SRC)/idl/docstrip.xsl \
 		| $$(dir $$@)
-# 	$(CP) -fv $< $(VBOX_XIDL_FILE).ts
-	$(QUIET)$(VBOX_XSLTPROC) -o $(VBOX_XIDL_FILE).ts $(VBOX_PATH_MAIN_SRC)/idl/docstrip.xsl $<
+	$(call KB_FN_AUTO_CMD_DEPS_COMMANDS)
+# 	$(CP) -fv $(VBOX_XIDL_FILE_SRC) $(VBOX_XIDL_FILE).ts
+	$(QUIET)$(VBOX_XSLTPROC) -o $(VBOX_XIDL_FILE).ts $(VBOX_PATH_MAIN_SRC)/idl/docstrip.xsl $(VBOX_XIDL_FILE_SRC)
 	$(QUIET)$(CP) --changed -fv $(VBOX_XIDL_FILE).ts $(VBOX_XIDL_FILE)
 
@@ -240,21 +242,21 @@
 
 ifdef VBOX_WITH_PYTHON
-INSTALLS += VBox-python-glue
-VBox-python-glue_INST = $(INST_SDK)installer/vboxapi/
-VBox-python-glue_MODE = a+r,u+w
-VBox-python-glue_SOURCES = \
-	glue/vboxapi.py=>__init__.py \
-	$(VBox-python-glue_0_OUTDIR)/VirtualBox_constants.py
-VBox-python-glue_CLEAN = \
-	$(VBox-python-glue_0_OUTDIR)/VirtualBox_constants.py
-
- ## @todo $(call KB_FN_AUTO_CMD_DEPS,$$(VBox-python-glue_0_OUTDIR)/VirtualBox_constants.py) - need to fix the double expansion here
-$$(VBox-python-glue_0_OUTDIR)/VirtualBox_constants.py:  \
+ INSTALLS += VBox-python-glue
+ VBox-python-glue_INST = $(INST_SDK)installer/vboxapi/
+ VBox-python-glue_MODE = a+r,u+w
+ VBox-python-glue_SOURCES = \
+ 	glue/vboxapi.py=>__init__.py \
+ 	$(VBox-python-glue_0_OUTDIR)/VirtualBox_constants.py
+ VBox-python-glue_CLEAN = \
+ 	$(VBox-python-glue_0_OUTDIR)/VirtualBox_constants.py
+ $(call KB_FN_DO_PASS0_ON_TARGET,VBox-python-glue)
+ $(call KB_FN_AUTO_CMD_DEPS,$(VBox-python-glue_0_OUTDIR)/VirtualBox_constants.py)
+ $(VBox-python-glue_0_OUTDIR)/VirtualBox_constants.py:  \
 		$(VBOX_PATH_MAIN_SRC)/glue/constants-python.xsl \
 		$(VBOX_XIDL_FILE) \
 		| $$(dir $$@)
+	$(call KB_FN_AUTO_CMD_DEPS_COMMANDS)
 	$(call MSG_TOOL,xsltproc,Python constants,$<,$@)
-	$(QUIET)$(VBOX_XSLTPROC) -o $@ $< $(VBOX_XIDL_FILE)
-
+	$(QUIET)$(VBOX_XSLTPROC) -o $@ $(VBOX_PATH_MAIN_SRC)/glue/constants-python.xsl $(VBOX_XIDL_FILE)
 endif # VBOX_WITH_PYTHON
 
@@ -274,40 +276,50 @@
 #
 if defined(VBOX_WITH_SDS) && "$(KBUILD_TARGET)" == "win"
-PROGRAMS += VBoxSDS
-VBoxSDS_TEMPLATE = VBOXMAINEXE
-VBoxSDS_DEFS = \
-VBoxSDS_DEFS.win += VBOX_COM_OUTOFPROC_MODULE
-VBoxSDS_DEFS.win += _WIN32_WINNT=0x0510
-VBoxSDS_INCS = \
-	include \
-	$(VBoxSDS_0_OUTDIR) \
-	$(VBOX_MAIN_APIWRAPPER_INCS)
-VBoxSDS_INCS.win = \
-	$(VBoxCOM_0_OUTDIR)
-VBoxSDS_LIBS += \
-	$(PATH_STAGE_LIB)/VBoxAPIWrap$(VBOX_SUFF_LIB)
-VBoxSDS_INTERMEDIATES = \
-	$(VBOX_MAIN_PREREQS) \
-	$(VBOX_MAIN_APIWRAPPER_GEN_HDRS)
-VBoxSDS_SOURCES = \
-	src-all/Global.cpp \
-	src-all/AutoCaller.cpp \
-	src-all/VirtualBoxBase.cpp \
-	src-all/VirtualBoxErrorInfoImpl.cpp \
-	src-global/VirtualBoxSDSImpl.cpp
-VBoxSDS_SOURCES.win = \
-	src-global/win/VBoxSDS.cpp \
-	src-global/win/VBoxSDS.rc
-
-src-global/win/VBoxSDS.rc_INCS  = $(VBoxSDS_0_OUTDIR)
-src-global/win/VBoxSDS.rc_DEPS  = $(VBoxSDS_0_OUTDIR)/VBoxSDS.rgs $(VBoxSDS_0_OUTDIR)/VBoxSDS-icon.rc
-src-global/win/VBoxSDS.rc_CLEAN = $(VBoxSDS_0_OUTDIR)/VBoxSDS.rgs $(VBoxSDS_0_OUTDIR)/VBoxSDS-icon.rc
-
-$$(VBoxSDS_0_OUTDIR)/VBoxSDS-icon.rc: $(MAKEFILE_CURRENT) $(VBOX_WINDOWS_ICON_FILE) | $$(dir $$(@D))
+ PROGRAMS += VBoxSDS
+ VBoxSDS_TEMPLATE = VBOXMAINEXE
+ VBoxSDS_DEFS = \
+ VBoxSDS_DEFS.win += VBOX_COM_OUTOFPROC_MODULE
+ VBoxSDS_DEFS.win += _WIN32_WINNT=0x0510
+ VBoxSDS_INCS = \
+ 	include \
+ 	$(VBoxSDS_0_OUTDIR) \
+ 	$(VBOX_MAIN_APIWRAPPER_INCS)
+ VBoxSDS_INCS.win = \
+ 	$(VBoxCOM_0_OUTDIR)
+ VBoxSDS_LIBS += \
+ 	$(PATH_STAGE_LIB)/VBoxAPIWrap$(VBOX_SUFF_LIB)
+ VBoxSDS_INTERMEDIATES = \
+ 	$(VBOX_MAIN_PREREQS) \
+ 	$(VBOX_MAIN_APIWRAPPER_GEN_HDRS)
+ VBoxSDS_SOURCES = \
+ 	src-all/Global.cpp \
+ 	src-all/AutoCaller.cpp \
+ 	src-all/VirtualBoxBase.cpp \
+ 	src-all/VirtualBoxErrorInfoImpl.cpp \
+ 	src-global/VirtualBoxSDSImpl.cpp
+ VBoxSDS_SOURCES.win = \
+ 	src-global/win/VBoxSDS.cpp \
+ 	src-global/win/VBoxSDS.rc
+ $(call KB_FN_DO_PASS0_ON_TARGET,VBoxSDS) # Sets VBoxSDS_0_OUTDIR
+
+ src-global/win/VBoxSDS.rc_INCS  = $(VBoxSDS_0_OUTDIR)
+ src-global/win/VBoxSDS.rc_DEPS  = $(VBoxSDS_0_OUTDIR)/VBoxSDS-icon.rc #$(VBoxSDS_0_OUTDIR)/VBoxSDS.rgs
+ src-global/win/VBoxSDS.rc_CLEAN = $(VBoxSDS_0_OUTDIR)/VBoxSDS-icon.rc #$(VBoxSDS_0_OUTDIR)/VBoxSDS.rgs
+
+ $(call KB_FN_AUTO_CMD_DEPS,$(VBoxSDS_0_OUTDIR)/VBoxSDS-icon.rc)
+ $(VBoxSDS_0_OUTDIR)/VBoxSDS-icon.rc: $(VBOX_WINDOWS_ICON_FILE) | $$(dir $$@)
+	$(call KB_FN_AUTO_CMD_DEPS_COMMANDS)
 	$(APPEND) -t $@ '1 ICON DISCARDABLE "$(subst /,\\,$(VBOX_WINDOWS_ICON_FILE))"'
 
-$$(VBoxSDS_0_OUTDIR)/VBoxSDS.rgs: $(VBOX_PATH_MAIN_SRC)/src-all/win/VirtualBox_rgs.xsl $(VBOX_XIDL_FILE) | $$(dir $$(@D))
-	$(VBOX_XSLTPROC) --stringparam Application "VirtualBox System" --stringparam Module VBoxSDS -o $@ $< $(VBOX_XIDL_FILE)
-
+# $(call KB_FN_AUTO_CMD_DEPS,$(VBoxSDS_0_OUTDIR)/VBoxSDS.rgs)
+# $(VBoxSDS_0_OUTDIR)/VBoxSDS.rgs: $(VBOX_PATH_MAIN_SRC)/src-all/win/VirtualBox_rgs.xsl $(VBOX_XIDL_FILE) | $$(dir $$@)
+#	$(call KB_FN_AUTO_CMD_DEPS_COMMANDS)
+#	$(VBOX_XSLTPROC) \
+#		--stringparam Application "VirtualBox System" \
+#		--stringparam Module VBoxSDS \
+#		-o $@ \
+#		$(VBOX_PATH_MAIN_SRC)/src-all/win/VirtualBox_rgs.xsl \
+#		$(VBOX_XIDL_FILE)
+#
 endif #if defined(VBOX_WITH_SDS) && "$(KBUILD_TARGET)" == "win"
 
@@ -582,4 +594,6 @@
 endif
 
+$(call KB_FN_DO_PASS0_ON_TARGET,VBoxSVC) # Sets VBoxSVC_0_OUTDIR
+
 ifdef VBOX_WITH_MAIN_USB_ID_DATABASE  # Generate a database of USB vendor IDs and device IDs.
  VBoxSVC_DEFS    += VBOX_WITH_MAIN_USB_ID_DATABASE
@@ -587,7 +601,9 @@
  VBoxSVC_CLEAN   += $(VBoxSVC_0_OUTDIR)/USBIdDatabase.cpp
 
- $$(VBoxSVC_0_OUTDIR)/USBIdDatabase.cpp:  $$(USBIdDatabaseGenerator_1_TARGET) \
+ $(call KB_FN_AUTO_CMD_DEPS,$(VBoxSVC_0_OUTDIR)/USBIdDatabase.cpp)
+ $(VBoxSVC_0_OUTDIR)/USBIdDatabase.cpp:  $$(USBIdDatabaseGenerator_1_TARGET) \
  		$(PATH_SUB_CURRENT)/src-server/usb.ids $(PATH_SUB_CURRENT)/src-server/custom.ids | $$(dir $$@)
-	$(call MSG_GENERATE,USBIdDatabase,$@,$<)
+	$(call KB_FN_AUTO_CMD_DEPS_COMMANDS)
+	$(call MSG_GENERATE,USBIdDatabase,$@,$(USBIdDatabaseGenerator_1_TARGET))
 	$(QUIET)$(USBIdDatabaseGenerator_1_TARGET) -o "$@" $(filter %.ids,$^)
 
@@ -602,12 +618,21 @@
 src-server/win/VBoxSVC.rc_DEPS  = $(VBoxSVC_0_OUTDIR)/VBoxSVC-icon.rc
 src-server/win/VBoxSVC.rc_CLEAN = $(VBoxSVC_0_OUTDIR)/VBoxSVC-icon.rc
-$$(VBoxSVC_0_OUTDIR)/VBoxSVC-icon.rc: $(MAKEFILE_CURRENT) $(VBOX_WINDOWS_ICON_FILE) | $$(dir $$(@D))
+$(call KB_FN_AUTO_CMD_DEPS,$(VBoxSVC_0_OUTDIR)/VBoxSVC-icon.rc)
+$(VBoxSVC_0_OUTDIR)/VBoxSVC-icon.rc: $(VBOX_WINDOWS_ICON_FILE) | $$(dir $$@)
+	$(call KB_FN_AUTO_CMD_DEPS_COMMANDS)
 	$(APPEND) -t $@ '1 ICON DISCARDABLE "$(subst /,\\,$(VBOX_WINDOWS_ICON_FILE))"'
 
 ifndef VBOX_WITH_MIDL_PROXY_STUB
-src-server/win/VBoxSVC.rc_DEPS  += $(VBoxSVC_0_OUTDIR)/VBoxSVC.rgs
-src-server/win/VBoxSVC.rc_CLEAN += $(VBoxSVC_0_OUTDIR)/VBoxSVC.rgs
-$$(VBoxSVC_0_OUTDIR)/VBoxSVC.rgs: $(VBOX_PATH_MAIN_SRC)/src-all/win/VirtualBox_rgs.xsl $(VBOX_XIDL_FILE) | $$(dir $$(@D))
-	$(VBOX_XSLTPROC) --stringparam Application VirtualBox --stringparam Module VBoxSVC -o $@ $< $(VBOX_XIDL_FILE)
+ src-server/win/VBoxSVC.rc_DEPS  += $(VBoxSVC_0_OUTDIR)/VBoxSVC.rgs
+ src-server/win/VBoxSVC.rc_CLEAN += $(VBoxSVC_0_OUTDIR)/VBoxSVC.rgs
+ $(call KB_FN_AUTO_CMD_DEPS,$(VBoxSVC_0_OUTDIR)/VBoxSVC.rgs)
+ $(VBoxSVC_0_OUTDIR)/VBoxSVC.rgs: $(VBOX_PATH_MAIN_SRC)/src-all/win/VirtualBox_rgs.xsl $(VBOX_XIDL_FILE) | $$(dir $$@)
+	$(call KB_FN_AUTO_CMD_DEPS_COMMANDS)
+	$(VBOX_XSLTPROC) \
+		--stringparam Application VirtualBox \
+		--stringparam Module VBoxSVC \
+		-o $@ \
+		$(VBOX_PATH_MAIN_SRC)/src-all/win/VirtualBox_rgs.xsl \
+		$(VBOX_XIDL_FILE)
 endif
 
@@ -648,5 +673,5 @@
 
 #
-# Generate some event stuff for VBoxSVC and VBoxC.       $(MAKEFILE
+# Generate some event stuff for VBoxSVC and VBoxC.
 #
 $(VBOX_AUTOGEN_EVENT_H): $(VBOX_PATH_MAIN_SRC)/idl/comimpl.xsl $(VBOX_XIDL_FILE) | $$(dir $$@)
@@ -925,8 +950,12 @@
 endif
 
+$(call KB_FN_DO_PASS0_ON_TARGET,VBoxC) # Sets VBoxC_0_OUTDIR
+
 ifeq ($(KBUILD_TARGET),darwin)
-VBoxC_ORDERDEPS += $(VBoxC_0_OUTDIR)/VBoxC.def
-VBoxC_CLEAN     += $(VBoxC_0_OUTDIR)/VBoxC.def
-$$(VBoxC_0_OUTDIR)/VBoxC.def: $(MAKEFILE_CURRENT)
+ VBoxC_ORDERDEPS += $(VBoxC_0_OUTDIR)/VBoxC.def
+ VBoxC_CLEAN     += $(VBoxC_0_OUTDIR)/VBoxC.def
+ $(call KB_FN_AUTO_CMD_DEPS,$(VBoxC_0_OUTDIR)/VBoxC.def)
+ $(VBoxC_0_OUTDIR)/VBoxC.def:
+	$(call KB_FN_AUTO_CMD_DEPS_COMMANDS)
 	$(RM) -f $@
 	$(APPEND) $@ _NSGetModule
@@ -939,9 +968,14 @@
 
 src-client/win/VBoxC.rc_DEPS = $(VBoxC_0_OUTDIR)/VBoxC.rgs $(VBoxCOM_0_OUTDIR)/VirtualBox.tlb
-VBoxC_CLEAN.win  += $(VBoxC_0_OUTDIR)/VBoxC.rgs
-
- ## @todo $(call KB_FN_AUTO_CMD_DEPS,$$(VBoxC_0_OUTDIR)/VBoxC.rgs) - need to fix the double expansion here
-$$(VBoxC_0_OUTDIR)/VBoxC.rgs: $(VBOX_PATH_MAIN_SRC)/src-all/win/VirtualBox_rgs.xsl $(VBOX_XIDL_FILE) | $$(dir $$@)
-	$(VBOX_XSLTPROC) --stringparam Application VirtualBox --stringparam Module VBoxC -o $@ $< $(VBOX_XIDL_FILE)
+VBoxC_CLEAN.win             += $(VBoxC_0_OUTDIR)/VBoxC.rgs
+$(call KB_FN_AUTO_CMD_DEPS,$(VBoxC_0_OUTDIR)/VBoxC.rgs)
+$(VBoxC_0_OUTDIR)/VBoxC.rgs: $(VBOX_PATH_MAIN_SRC)/src-all/win/VirtualBox_rgs.xsl $(VBOX_XIDL_FILE) | $$(dir $$@)
+	$(call KB_FN_AUTO_CMD_DEPS_COMMANDS)
+	$(VBOX_XSLTPROC) \
+		--stringparam Application VirtualBox \
+		--stringparam Module VBoxC \
+		-o $@ \
+		$(VBOX_PATH_MAIN_SRC)/src-all/win/VirtualBox_rgs.xsl \
+		$(VBOX_XIDL_FILE)
 
 ifdef VBOX_WITH_32_ON_64_MAIN_API
@@ -996,14 +1030,21 @@
 	$(PATH_SDK_$(VBOX_WINPSDK)_LIB.x86)/WbemUuid.Lib
  VBoxClient-x86_CLEAN.win += $(VBoxClient-x86_0_OUTDIR)/VBoxClient-x86.rgs
+ $(call KB_FN_DO_PASS0_ON_TARGET,VBoxClient-x86) # Sets VBoxClient-x86_0_OUTDIR
+
  src-client/win/VBoxClient-x86.rc_DEPS = \
  	$(VBoxClient-x86_0_OUTDIR)/VBoxClient-x86.rgs \
  	$(VBoxCOM-x86_0_OUTDIR)/VirtualBox-x86.tlb
 
- ## @todo $(call KB_FN_AUTO_CMD_DEPS,$$(VBoxClient-x86_0_OUTDIR)/VBoxClient-x86.rgs) - need to fix the double expansion here
- $$(VBoxClient-x86_0_OUTDIR)/VBoxClient-x86.rgs: \
+ $(call KB_FN_AUTO_CMD_DEPS,$(VBoxClient-x86_0_OUTDIR)/VBoxClient-x86.rgs)
+ $(VBoxClient-x86_0_OUTDIR)/VBoxClient-x86.rgs: \
  		$(VBOX_PATH_MAIN_SRC)/src-all/win/VirtualBox_rgs.xsl \
 		$(VBOX_XIDL_FILE) | $$(dir $$@)
-	$(VBOX_XSLTPROC) --stringparam Application VirtualBox --stringparam Module VBoxC -o $@ $< $(VBOX_XIDL_FILE)
-
+	$(call KB_FN_AUTO_CMD_DEPS_COMMANDS)
+	$(VBOX_XSLTPROC) \
+		--stringparam Application VirtualBox \
+		--stringparam Module VBoxC \
+		-o $@ \
+		$(VBOX_PATH_MAIN_SRC)/src-all/win/VirtualBox_rgs.xsl \
+		$(VBOX_XIDL_FILE)
 endif
 
@@ -1275,8 +1316,10 @@
 # Note! We're checking for win.amd64 below when setting the target because of the SDK build which happens on linux.amd64
 #       but with a 32-bit Wine.
-$(if $(VBOX_WITH_MIDL_PROXY_STUB),$(VBoxCOM_0_OUTDIR)/VirtualBox_p.c + $(VBoxCOM_0_OUTDIR)/dlldata.c +,) \
+$(call KB_FN_AUTO_CMD_DEPS,$(VBoxCOM_0_OUTDIR)/VirtualBox_i.c)
 $(VBoxCOM_0_OUTDIR)/VirtualBox_i.c \
+$(if $(VBOX_WITH_MIDL_PROXY_STUB), + $(VBoxCOM_0_OUTDIR)/VirtualBox_p.c + $(VBoxCOM_0_OUTDIR)/dlldata.c,) \
 + $(VBoxCOM_0_OUTDIR)/VirtualBox.h \
 + $(VBoxCOM_0_OUTDIR)/VirtualBox.tlb: $(VBOX_IDL_FILE.MSCOM) | $$(dir $$@)
+	$(call KB_FN_AUTO_CMD_DEPS_COMMANDS)
 	$(VBOX_WIN_MIDL) /nologo /W4 \
 		/env $(if-expr "$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)" == "win.amd64" ,amd64,win32) \
@@ -1286,5 +1329,5 @@
 		/I $(call VBOX_FN_MAKE_WIN_PATH,$(PATH_SDK_$(VBOX_WINPSDK)_INC)) \
 		/I idl \
-		$(call VBOX_FN_MAKE_WIN_PATH,$<)
+		$(call VBOX_FN_MAKE_WIN_PATH,$(VBOX_IDL_FILE.MSCOM))
 	$(call def_VBoxMainDisableMscWarnings,$(VBoxCOM_0_OUTDIR)/VirtualBox.h)
 	$(call def_VBoxMainDisableMscWarnings,$(VBoxCOM_0_OUTDIR)/VirtualBox_i.c)
@@ -1296,4 +1339,5 @@
 #  that using an older MIDL compiler (v7.00.0499 instead of v7.00.0555) helps. But the W2K3 fix also works.
 # To avoid 32-bit vs. 64-bit differences, we do the same for 32-bit windows versions.
+$(call KB_FN_AUTO_CMD_DEPS,$(VBoxCOM_0_OUTDIR)/legacy/VirtualBox_i.c)
 $(VBoxCOM_0_OUTDIR)/legacy/VirtualBox_i.c \
 + $(VBoxCOM_0_OUTDIR)/legacy/VirtualBox_p.c\
@@ -1301,4 +1345,5 @@
 + $(VBoxCOM_0_OUTDIR)/legacy/VirtualBox.h \
 + $(VBoxCOM_0_OUTDIR)/legacy/VirtualBox.tlb: $(VBOX_IDL_FILE.MSCOM) | $$(dir $$@)
+	$(call KB_FN_AUTO_CMD_DEPS_COMMANDS)
 	$(VBOX_WIN_MIDL) /nologo /W4 \
 		$(if-expr "$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)" == "win.amd64" \
@@ -1309,5 +1354,5 @@
 		/I $(call VBOX_FN_MAKE_WIN_PATH,$(PATH_SDK_$(VBOX_WINPSDK)_INC)) \
 		/I idl \
-		$(call VBOX_FN_MAKE_WIN_PATH,$<)
+		$(call VBOX_FN_MAKE_WIN_PATH,$(VBOX_IDL_FILE.MSCOM))
 	$(call def_VBoxMainDisableMscWarnings,$(VBoxCOM_0_OUTDIR)/legacy/VirtualBox.h)
 	$(call def_VBoxMainDisableMscWarnings,$(VBoxCOM_0_OUTDIR)/legacy/VirtualBox_i.c)
@@ -1317,8 +1362,10 @@
 # The XP targetted 32-bit proxy stub works with all versions of windows (the
 # issues leading to the VBoxProxyStubLegacy.dll are only on 64-bit windows).
-$(if $(VBOX_WITH_MIDL_PROXY_STUB),$(VBoxCOM-x86_0_OUTDIR)/VirtualBox_p.c + $(VBoxCOM-x86_0_OUTDIR)/dlldata.c +,) \
+$(call KB_FN_AUTO_CMD_DEPS,$(VBoxCOM-x86_0_OUTDIR)/VirtualBox_i.c)
 $(VBoxCOM-x86_0_OUTDIR)/VirtualBox_i.c \
+$(if $(VBOX_WITH_MIDL_PROXY_STUB), + $(VBoxCOM-x86_0_OUTDIR)/VirtualBox_p.c + $(VBoxCOM-x86_0_OUTDIR)/dlldata.c,) \
 + $(VBoxCOM-x86_0_OUTDIR)/VirtualBox.h \
 + $(VBoxCOM-x86_0_OUTDIR)/VirtualBox-x86.tlb: $(VBOX_IDL_FILE.MSCOM) | $$(dir $$@)
+	$(call KB_FN_AUTO_CMD_DEPS_COMMANDS)
 	$(VBOX_WIN_MIDL) /nologo /W4 \
 		/env win32 /target NT51 /robust /protocol all  \
@@ -1328,5 +1375,5 @@
 		/I $(call VBOX_FN_MAKE_WIN_PATH,$(PATH_SDK_$(VBOX_WINPSDK)_INC)) \
 		/I idl \
-		$(call VBOX_FN_MAKE_WIN_PATH,$<)
+		$(call VBOX_FN_MAKE_WIN_PATH,$(VBOX_IDL_FILE.MSCOM))
 	$(call def_VBoxMainDisableMscWarnings,$(VBoxCOM-x86_0_OUTDIR)/VirtualBox.h)
 	$(call def_VBoxMainDisableMscWarnings,$(VBoxCOM-x86_0_OUTDIR)/VirtualBox_i.c)
@@ -1353,33 +1400,34 @@
 ifdef VBOX_WITH_JMSCOM
 
-#
-# Java glue JAR files
-#
-VBOX_JMSCOM_JAR     = $(VBoxJMscom-inst-jar_0_OUTDIR)/vboxjmscom.jar
-VBOX_JMSCOM_TARGET := $(PATH_TARGET)/vboxjmscom-gen
-VBOX_JMSCOM_GEN     = $(VBOX_JMSCOM_TARGET)/jmscomgen
-VBOX_JMSCOM_JDEST  := $(VBOX_JMSCOM_TARGET)/jdest
-VBOX_GLUE_XSLT_DIR := $(PATH_ROOT)/src/VBox/Main/glue
-VBOX_JACOB_DIR     := $(PATH_ROOT)/src/libs/jacob-1.17
-
-INSTALLS += VBoxJMscom-inst-jar
-VBoxJMscom-inst-jar_INST = $(INST_SDK)bindings/mscom/java/
-VBoxJMscom-inst-jar_MODE = a+r,u+w
-VBoxJMscom-inst-jar_SOURCES = \
-	$(VBOX_JMSCOM_JAR)
-VBoxJMscom-inst-jar_CLEAN = \
-	$(VBOX_JMSCOM_JAR) \
-	$(VBOX_JMSCOM_GEN)/jmscomglue.list \
-	$(wildcard \
-		$(VBOX_JMSCOM_GEN)/java/*.java \
-		$(VBOX_JMSCOM_JDEST)/*.class \
-		$(VBOX_JMSCOM_JDEST)/*/*.class \
-		$(VBOX_JMSCOM_JDEST)/*/*/*.class \
-		$(VBOX_JMSCOM_JDEST)/*/*/*/*.class \
-	)
-VBoxJMscom-inst-jar_BLDDIRS += $(VBOX_JMSCOM_GEN)/java
-
-$(call KB_FN_AUTO_CMD_DEPS,$(VBOX_JMSCOM_GEN)/jmscomglue.list)
-$(VBOX_JMSCOM_GEN)/jmscomglue.list: \
+ #
+ # Java glue JAR files
+ #
+ VBOX_JMSCOM_JAR     = $(VBoxJMscom-inst-jar_0_OUTDIR)/vboxjmscom.jar
+ VBOX_JMSCOM_TARGET := $(PATH_TARGET)/vboxjmscom-gen
+ VBOX_JMSCOM_GEN     = $(VBOX_JMSCOM_TARGET)/jmscomgen
+ VBOX_JMSCOM_JDEST  := $(VBOX_JMSCOM_TARGET)/jdest
+ VBOX_GLUE_XSLT_DIR := $(PATH_ROOT)/src/VBox/Main/glue
+ VBOX_JACOB_DIR     := $(PATH_ROOT)/src/libs/jacob-1.17
+
+ INSTALLS += VBoxJMscom-inst-jar
+ VBoxJMscom-inst-jar_INST = $(INST_SDK)bindings/mscom/java/
+ VBoxJMscom-inst-jar_MODE = a+r,u+w
+ VBoxJMscom-inst-jar_SOURCES = \
+ 	$(VBoxJMscom-inst-jar_0_OUTDIR)/vboxjmscom.jar
+ VBoxJMscom-inst-jar_CLEAN = \
+ 	$(VBoxJMscom-inst-jar_0_OUTDIR)/vboxjmscom.jar \
+ 	$(VBOX_JMSCOM_GEN)/jmscomglue.list \
+ 	$(wildcard \
+ 		$(VBOX_JMSCOM_GEN)/java/*.java \
+ 		$(VBOX_JMSCOM_JDEST)/*.class \
+ 		$(VBOX_JMSCOM_JDEST)/*/*.class \
+ 		$(VBOX_JMSCOM_JDEST)/*/*/*.class \
+ 		$(VBOX_JMSCOM_JDEST)/*/*/*/*.class \
+ 	)
+ VBoxJMscom-inst-jar_BLDDIRS += $(VBOX_JMSCOM_GEN)/java
+ $(call KB_FN_DO_PASS0_ON_TARGET,VBoxJMscom-inst-jar) # Sets VBoxJMscom-inst-jar_0_OUTDIR
+
+ $(call KB_FN_AUTO_CMD_DEPS,$(VBOX_JMSCOM_GEN)/jmscomglue.list)
+ $(VBOX_JMSCOM_GEN)/jmscomglue.list: \
 		$(VBOX_XIDL_FILE) \
 		$(VBOX_GLUE_XSLT_DIR)/glue-java.xsl \
@@ -1398,6 +1446,7 @@
 	$(QUIET)echo $(VBOX_JMSCOM_GEN)/java/*.java > $@
 
-## @todo $(call KB_FN_AUTO_CMD_DEPS,$(VBOX_JMSCOM_JAR)) - need to fix the double expansion here
-$$(VBOX_JMSCOM_JAR): $(VBOX_JMSCOM_GEN)/jmscomglue.list | $$(dir $$@)
+ $(call KB_FN_AUTO_CMD_DEPS,$(VBoxJMscom-inst-jar_0_OUTDIR)/vboxjmscom.jar)
+ $(VBoxJMscom-inst-jar_0_OUTDIR)/vboxjmscom.jar: $(VBOX_JMSCOM_GEN)/jmscomglue.list | $$(dir $$@)
+	$(call KB_FN_AUTO_CMD_DEPS_COMMANDS)
 	$(call MSG_TOOL,javac,$(notdir $@),jmscomglue.list,)
 	$(QUIET)$(RM) -Rf $(VBOX_JMSCOM_JDEST)
@@ -1409,6 +1458,5 @@
 	$(QUIET)$(VBOX_JAR) cf $@ -C $(VBOX_JMSCOM_JDEST) .
 
-## @todo compile TestVBox.java (see below) to have sanity checking
-
+ ## @todo compile TestVBox.java (see below) to have sanity checking
 endif # VBOX_WITH_JMSCOM
 
