diff --git a/Makefile b/Makefile
index edfc2fdf76c9542a7bbc66516d09f65511463f59..b06b1ea46fe58f7848ba9f417633b5c442dd7180 100644
--- a/Makefile
+++ b/Makefile
@@ -893,8 +893,8 @@ INSTALL_HDR_PATH=$(objtree)/usr
 export INSTALL_HDR_PATH
 
 PHONY += headers_install
-headers_install: include/linux/version.h
-	$(Q)unifdef -Ux /dev/null
+headers_install: include/linux/version.h scripts_basic FORCE
+	$(Q)$(MAKE) $(build)=scripts scripts/unifdef
 	$(Q)rm -rf $(INSTALL_HDR_PATH)/include
 	$(Q)$(MAKE) -rR -f $(srctree)/scripts/Makefile.headersinst obj=include
 
diff --git a/scripts/Makefile b/scripts/Makefile
index 6f6b48f39f0ae1517fe7485c3883f9cc127f20fe..d531a1fcef0c951ea231654107f23befa96f267e 100644
--- a/scripts/Makefile
+++ b/scripts/Makefile
@@ -15,6 +15,9 @@ hostprogs-$(CONFIG_IKCONFIG)     += bin2c
 
 always		:= $(hostprogs-y)
 
+# The following hostprogs-y programs are only build on demand
+hostprogs-y += unifdef
+
 subdir-$(CONFIG_MODVERSIONS) += genksyms
 subdir-$(CONFIG_MODULES)     += mod
 
diff --git a/scripts/Makefile.headersinst b/scripts/Makefile.headersinst
index 12e1daf875c832931202467011e292bcd3575c0a..8c02d2df427820c16d4d0844eab66e2f16e00c34 100644
--- a/scripts/Makefile.headersinst
+++ b/scripts/Makefile.headersinst
@@ -7,7 +7,7 @@
 #
 # ==========================================================================
 
-UNIFDEF := unifdef -U__KERNEL__
+UNIFDEF := scripts/unifdef -U__KERNEL__
 
 # Eliminate the contents of (and inclusions of) compiler.h
 HDRSED  := sed 	-e "s/ inline / __inline__ /g" \