have buildno invocation conform to VERBOSE setting
[reactos.git] / reactos / Makefile
index e0d3f8b..4990f96 100644 (file)
@@ -1,7 +1,25 @@
+# Accepted environment variables:
+#
+#    ROS_INTERMEDIATE
+#        This variable controls where to put intermediate files. Intermediate
+#        files are generated files that are needed to generate the final
+#        output files. Examples of intermediate files include *.o, *.a, and
+#        *.coff. N.B. Don't put a path separator at the end. The variable
+#        defaults to .\obj-i386.
+#
+#    ROS_OUTPUT
+#        This variable controls where to put output files. Output files are
+#        generated files that makes up the result of the build process.
+#        Examples of output files include *.exe, *.dll, and *.sys. N.B. Don't
+#        put a path separator at the end. The variable defaults to .\output-i386.
+#
+
 .PHONY: all
 .PHONY: clean
 all: makefile.auto
 
+.SUFFIXES:
+
 ifeq ($(HOST),)
 ifeq ($(word 1,$(shell gcc -dumpmachine)),mingw32)
 HOST=mingw32-windows
@@ -14,16 +32,21 @@ endif
 ifeq ($(VERBOSE),no)
   Q = @
   HALFVERBOSEECHO = no
+  BUILDNO_QUIET = -q
 else
 ifeq ($(VERBOSE),yes)
   Q =
   HALFVERBOSEECHO = no
+  BUILDNO_QUIET =
 else
   Q = @
   HALFVERBOSEECHO = yes
+  BUILDNO_QUIET = -q
 endif
 endif
 ifeq ($(HALFVERBOSEECHO),yes)
+  ECHO_MKDIR  =@echo [MKDIR]   $@
+  ECHO_BUILDNO=@echo [BUILDNO] $@
   ECHO_INVOKE =@echo [INVOKE]  $<
   ECHO_PCH    =@echo [PCH]     $@
   ECHO_CC     =@echo [CC]      $<
@@ -37,11 +60,14 @@ ifeq ($(HALFVERBOSEECHO),yes)
   ECHO_LD     =@echo [LD]      $@
   ECHO_RBUILD =@echo [RBUILD]  $@
   ECHO_RSYM   =@echo [RSYM]    $@
+  ECHO_WMC    =@echo [WMC]     $@
   ECHO_NCI    =@echo [NCI]     $@
   ECHO_CABMAN =@echo [CABMAN]  $<
   ECHO_CDMAKE =@echo [CDMAKE]  $@
   ECHO_TEST   =@echo [TEST]    $@
 else
+  ECHO_MKDIR  =
+  ECHO_BUILDNO=
   ECHO_INVOKE =
   ECHO_PCH    =
   ECHO_CC     =
@@ -55,6 +81,7 @@ else
   ECHO_LD     =
   ECHO_RBUILD =
   ECHO_RSYM   =
+  ECHO_WMC    =
   ECHO_NCI    =
   ECHO_CABMAN =
   ECHO_CDMAKE =
@@ -71,7 +98,7 @@ ifeq ($(HOST),mingw32-linux)
        EXEPREFIX = ./
        EXEPOSTFIX =
        SEP = /
-       nmkdir = $(Q)mkdir -p
+       nmkdir = -$(Q)mkdir -p
        gcc = $(Q)mingw32-gcc
        gpp = $(Q)mingw32-g++
        ld = $(Q)mingw32-ld
@@ -85,8 +112,9 @@ ifeq ($(HOST),mingw32-linux)
 else # mingw32-windows
        EXEPREFIX =
        EXEPOSTFIX = .exe
-       SEP = \$(EMPTY_VAR)
-       nmkdir = $(Q)mkdir
+       ROS_EMPTY =
+       SEP = \$(ROS_EMPTY)
+       nmkdir = -$(Q)mkdir
        gcc = $(Q)gcc
        gpp = $(Q)g++
        ld = $(Q)ld
@@ -100,22 +128,36 @@ else # mingw32-windows
 endif
 
 ifneq ($(ROS_INTERMEDIATE),)
-$(ROS_INTERMEDIATE)tools: $(ROS_INTERMEDIATE)
-       ${nmkdir} $(ROS_INTERMEDIATE)tools
+  INTERMEDIATE = .$(SEP)$(ROS_INTERMEDIATE)$(SEP)
+  INTERMEDIATE_NO_SLASH := $(ROS_INTERMEDIATE)
+else
+  INTERMEDIATE = obj-i386$(SEP)
+  INTERMEDIATE_NO_SLASH = obj-i386
 endif
 
-ifneq ($(ROS_INTERMEDIATE),)
-$(ROS_INTERMEDIATE):
-       ${nmkdir} $(ROS_INTERMEDIATE)
+ifneq ($(ROS_OUTPUT),)
+  OUTPUT = $(ROS_OUTPUT)$(SEP)
+  OUTPUT_NO_SLASH = $(ROS_OUTPUT)
+else
+  OUTPUT = obj-i386$(SEP)
+  OUTPUT_NO_SLASH = obj-i386
 endif
 
-NTOSKRNL_MC = .$(SEP)ntoskrnl$(SEP)ntoskrnl.mc
-KERNEL32_MC = .$(SEP)lib$(SEP)kernel32$(SEP)kernel32.mc
-BUILDNO_H = .$(SEP)include$(SEP)reactos$(SEP)buildno.h
-BUGCODES_H = .$(SEP)include$(SEP)reactos$(SEP)bugcodes.h
-BUGCODES_RC = .$(SEP)ntoskrnl$(SEP)bugcodes.rc
-ERRCODES_H = .$(SEP)include$(SEP)reactos$(SEP)errcodes.h
-ERRCODES_RC = .$(SEP)lib$(SEP)kernel32$(SEP)errcodes.rc
+mkdir = -$(Q)$(INTERMEDIATE)rmkdir
+EXISTS = .exists
+INTERMEDIATE_EXISTS = $(INTERMEDIATE)$(EXISTS)
+
+$(INTERMEDIATE_EXISTS):
+       -${nmkdir} $(INTERMEDIATE_NO_SLASH) 2>$(NUL) >$(NUL)
+       @echo . > $@
+
+NTOSKRNL_MC = ntoskrnl$(SEP)ntoskrnl.mc
+KERNEL32_MC = lib$(SEP)kernel32$(SEP)kernel32.mc
+BUILDNO_H = include$(SEP)reactos$(SEP)buildno.h
+BUGCODES_H = include$(SEP)reactos$(SEP)bugcodes.h
+BUGCODES_RC = ntoskrnl$(SEP)bugcodes.rc
+ERRCODES_H = include$(SEP)reactos$(SEP)errcodes.h
+ERRCODES_RC = lib$(SEP)kernel32$(SEP)errcodes.rc
 
 include tools/tools.mak
 -include makefile.auto
@@ -128,18 +170,22 @@ PREAUTO := \
        $(ERRCODES_RC) \
        $(NCI_SERVICE_FILES)
 
-makefile.auto: $(RMKDIR_TARGET) $(RBUILD_TARGET) $(PREAUTO) $(XMLBUILDFILES)
+makefile.auto: $(RBUILD_TARGET) $(PREAUTO) $(XMLBUILDFILES)
        $(ECHO_RBUILD)
-       $(Q)tools$(SEP)rbuild$(SEP)rbuild$(EXEPOSTFIX) mingw
+       $(Q)$(RBUILD_TARGET) mingw
 
 
 $(BUGCODES_H) $(BUGCODES_RC): $(WMC_TARGET) $(NTOSKRNL_MC)
-       $(WMC_TARGET) -i -H $(BUGCODES_H) -o $(BUGCODES_RC) $(NTOSKRNL_MC)
+       $(ECHO_WMC)
+       $(Q)$(WMC_TARGET) -i -H $(BUGCODES_H) -o $(BUGCODES_RC) $(NTOSKRNL_MC)
 
 $(ERRCODES_H) $(ERRCODES_RC): $(WMC_TARGET) $(KERNEL32_MC)
-       $(WMC_TARGET) -i -H $(ERRCODES_H) -o $(ERRCODES_RC) $(KERNEL32_MC)
+       $(ECHO_WMC)
+       $(Q)$(WMC_TARGET) -i -H $(ERRCODES_H) -o $(ERRCODES_RC) $(KERNEL32_MC)
 
 .PHONY: makefile_auto_clean
 makefile_auto_clean:
        -@$(rm) makefile.auto $(PREAUTO) 2>$(NUL)
+
+.PHONY: clean
 clean: makefile_auto_clean