Index: /trunk/src/VBox/Additions/linux/Makefile.kmk
===================================================================
--- /trunk/src/VBox/Additions/linux/Makefile.kmk	(revision 68043)
+++ /trunk/src/VBox/Additions/linux/Makefile.kmk	(revision 68044)
@@ -45,5 +45,6 @@
 VBOX_LNX_ADD_INST_OTHER_DIR       := $(VBOX_LNX_ADD_INST_OUT_DIR)other/
 VBOX_LNX_ADD_INST_KMOD_DIR_BASE   := $(VBOX_LNX_ADD_INST_OUT_DIR)src/
-VBOX_LNX_ADD_INST_KMOD_DIR        := $(VBOX_LNX_ADD_INST_KMOD_DIR_BASE)vboxguest-$(VBOX_VERSION_STRING)/
+# This is a symbolic link, so no trailing slash.
+VBOX_LNX_ADD_INST_KMOD_PATH       := $(VBOX_LNX_ADD_INST_KMOD_DIR_BASE)vboxguest-$(VBOX_VERSION_STRING)
 VBOX_LNX_ADD_INST_INIT_DIR        := $(VBOX_LNX_ADD_INST_OUT_DIR)init/
 
@@ -53,6 +54,4 @@
 	$(VBOX_LNX_ADD_INST_SBIN_DIR) \
 	$(if $(VBOX_WITH_CROGL),$(VBOX_LNX_ADD_INST_LIB_DIR),) \
-	$(VBOX_LNX_ADD_INST_KMOD_DIR_BASE) \
-	$(VBOX_LNX_ADD_INST_KMOD_DIR) \
 	$(VBOX_LNX_ADD_INST_INIT_DIR)
 
@@ -109,4 +108,5 @@
 OTHER_CLEAN += \
 	$(PACKING) \
+	$(VBOX_LNX_ADD_INST_KMOD_PATH) \
 	$(foreach file, $(VBOX_LNX_ADD_ARCHIVES), $(VBOX_LNX_ADD_INST_STAGE_DIR)$(subst -r$(VBOX_SVN_REV),,$(notdir $(file))))
 
@@ -154,7 +154,4 @@
 	vboxvideo_drv.o
 
-VBOX_LNX_ADD_KMOD_FILES = Makefile build_in_tmp
-VBOX_LNX_ADD_KMOD_DIRS =  vboxguest/ vboxsf/ vboxvideo/
-
 VBOX_LNX_ADD_INIT = \
 	vboxadd \
@@ -173,10 +170,5 @@
 	$(addprefix $(VBOX_LNX_ADD_INST_OTHER_DIR),$(VBOX_LNX_ADD_MOD)) \
 	$(addprefix $(VBOX_LNX_ADD_INST_OTHER_DIR),$(VBOX_LNX_ADD_STRIP_OBJ)) \
-	$(addprefix $(VBOX_LNX_ADD_INST_KMOD_DIR),$(VBOX_LNX_ADD_KMOD_FILES)) \
 	$(addprefix $(VBOX_LNX_ADD_INST_INIT_DIR),$(VBOX_LNX_ADD_INIT))
-
-## @todo figure how to clean these... Or maybe rewrite everything here to somehow use install targets?
-VBOX_LNX_ADD_INST_DIRS := \
-	$(addprefix $(VBOX_LNX_ADD_INST_KMOD_DIR),$(VBOX_LNX_ADD_KMOD_DIRS))
 
 VBOX_LNX_ADD_DBG_FILES := \
@@ -271,25 +263,17 @@
 endif
 
-# pattern rules for copying the VBOX_LNX_ADD_KMOD files to the installation directory
-$(addprefix $(VBOX_LNX_ADD_INST_KMOD_DIR),$(VBOX_LNX_ADD_KMOD_DIRS)): \
-		$(VBOX_LNX_ADD_INST_KMOD_DIR)% : \
-		$(PATH_STAGE_BIN)/additions/src/% \
-		$(wildcard $(PATH_STAGE_BIN)/additions/src/%*) \
-		$(wildcard $(PATH_STAGE_BIN)/additions/src/%*/*) \
-		$(wildcard $(PATH_STAGE_BIN)/additions/src/%*/*/*) \
-		$(wildcard $(PATH_STAGE_BIN)/additions/src/%*/*/*/*) \
-		$(wildcard $(PATH_STAGE_BIN)/additions/src/%*/*/*/*/*) \
-		$(VBOX_VERSION_STAMP) $(VBOX_SVN_REV_HEADER) \
-		| $$(dir $$(patsubst $$(PERCENT)/,$$(PERCENT),$$@))
-	$(call MSG_INST_DIR,$<,$@)
-	$(QUIET)$(RM) -Rf $(filter-out $(VBOX_LNX_ADD_INST_KMOD_DIR),$(wildcard $(VBOX_LNX_ADD_INST_KMOD_DIR_BASE)*/))
-	$(QUIET)$(CP) -RPf -- $< $@
-
-$(addprefix $(VBOX_LNX_ADD_INST_KMOD_DIR),$(VBOX_LNX_ADD_KMOD_FILES)): \
-		$(VBOX_LNX_ADD_INST_KMOD_DIR)% : \
-		$(PATH_STAGE_BIN)/additions/src/% \
-		| $$(dir $$(patsubst $$(PERCENT)/,$$(PERCENT),$$@))
-	$(call MSG_INST_FILE,$<,$@)
-	$(QUIET)$(CP) -RPf -- $< $@
+include $(PATH_ROOT)/src/VBox/Additions/common/VBoxGuest/linux/files_vboxguest
+VBOX_LNX_ADD_INST_FILES_VBOXGUEST=$(patsubst =>%,$(PATH_STAGE_BIN)/additions/src/vboxguest/%,$(filter =>%,$(subst =>, =>,$(subst $(DQUOTE),,$(FILES_VBOXGUEST_NOBIN)))))
+include $(PATH_ROOT)/src/VBox/Additions/linux/sharedfolders/files_vboxsf
+VBOX_LNX_ADD_INST_FILES_VBOXSF=$(patsubst =>%,$(PATH_STAGE_BIN)/additions/src/vboxsf/%,$(filter =>%,$(subst =>, =>,$(subst $(DQUOTE),,$(FILES_VBOXSF_NOBIN)))))
+include $(PATH_ROOT)/src/VBox/Additions/linux/drm/files_vboxvideo_drv
+VBOX_LNX_ADD_INST_FILES_VBOXVIDEO=$(patsubst =>%,$(PATH_STAGE_BIN)/additions/src/vboxvideo/%,$(filter =>%,$(subst =>, =>,$(subst $(DQUOTE),,$(FILES_VBOXVIDEO_DRM_NOBIN)))))
+
+# special rule for the kernel modules
+$(VBOX_LNX_ADD_INST_KMOD_DIR_BASE): $(PATH_STAGE_BIN)/additions/src/ | $(dir $@)
+	$(call MSG_INST_SYM,$<,$@)
+	$(QUIET)$(RM) -Rf $@
+	$(QUIET)$(MKDIR) $@
+	$(QUIET)$(LN_SYMLINK) $< $(VBOX_LNX_ADD_INST_KMOD_PATH)
 
 INSTALLS += GuestDrivers-src
@@ -408,5 +392,13 @@
 	$(lnx_add_inst-license_2_STAGE_TARGETS) \
 	$(VBOX_LNX_ADD_INST_FILES) \
-	$(VBOX_LNX_ADD_INST_DIRS)
+	$(VBOX_LNX_ADD_INST_KMOD_DIR_BASE)
+
+VBOX_LNX_ADD_INST_ARCH_DEPS := \
+	$(VBOX_LNX_ADD_ARCH_FILES) \
+	$(VBOX_LNX_ADD_INST_DEP_ON_MAKEFILE) \
+	$(VBOX_VERSION_STAMP) \
+	$(VBOX_LNX_ADD_INST_FILES_VBOXGUEST) \
+	$(VBOX_LNX_ADD_INST_FILES_VBOXSF) \
+	$(VBOX_LNX_ADD_INST_FILES_VBOXVIDEO)
 
 #
@@ -414,7 +406,5 @@
 #
 $(VBOX_LNX_ADD_ARCHIVE.$(KBUILD_TARGET_ARCH)): \
-		$(VBOX_LNX_ADD_ARCH_FILES) \
-		$(VBOX_LNX_ADD_INST_DEP_ON_MAKEFILE) \
-		$(VBOX_VERSION_STAMP)
+		$(VBOX_LNX_ADD_INST_ARCH_DEPS)
 	$(call MSG_L1,Packing $@)
 	$(QUIET)$(RM) -f -- $(wildcard $(dir $@)VBoxGuestAdditions-*r*.tar.bz2)
