have buildno invocation conform to VERBOSE setting
[reactos.git] / reactos / Makefile
index f6289eb..4990f96 100644 (file)
-host_gcc = gcc
-host_gpp = g++
-host_ld = ld
-host_ar = ar
-host_objcopy = objcopy
+# 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
+else
+HOST=mingw32-linux
+endif
+endif
+
+# Default to half-verbose mode
+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]      $<
+  ECHO_GAS    =@echo [GAS]     $<
+  ECHO_NASM   =@echo [NASM]    $<
+  ECHO_AR     =@echo [AR]      $@
+  ECHO_WINEBLD=@echo [WINEBLD] $@
+  ECHO_WRC    =@echo [WRC]     $@
+  ECHO_BIN2RES=@echo [BIN2RES] $<
+  ECHO_DLLTOOL=@echo [DLLTOOL] $@
+  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     =
+  ECHO_GAS    =
+  ECHO_NASM   =
+  ECHO_AR     =
+  ECHO_WINEBLD=
+  ECHO_WRC    =
+  ECHO_BIN2RES=
+  ECHO_DLLTOOL=
+  ECHO_LD     =
+  ECHO_RBUILD =
+  ECHO_RSYM   =
+  ECHO_WMC    =
+  ECHO_NCI    =
+  ECHO_CABMAN =
+  ECHO_CDMAKE =
+  ECHO_TEST   =
+endif
+
+
+host_gcc = $(Q)gcc
+host_gpp = $(Q)g++
+host_ld = $(Q)ld
+host_ar = $(Q)ar
+host_objcopy = $(Q)objcopy
 ifeq ($(HOST),mingw32-linux)
        EXEPREFIX = ./
        EXEPOSTFIX =
        SEP = /
-       nmkdir = mkdir -p
-       gcc = mingw32-gcc
-       gpp = mingw32-g++
-       ld = mingw32-ld
-       ar = mingw32-ar
-       objcopy = mingw32-objcopy
-       dlltool = mingw32-dlltool
-       windres = mingw32-windres
+       nmkdir = -$(Q)mkdir -p
+       gcc = $(Q)mingw32-gcc
+       gpp = $(Q)mingw32-g++
+       ld = $(Q)mingw32-ld
+       ar = $(Q)mingw32-ar
+       objcopy = $(Q)mingw32-objcopy
+       dlltool = $(Q)mingw32-dlltool
+       windres = $(Q)mingw32-windres
        rm = rm -f
-       cp = cp
+       cp = $(Q)cp
        NUL = /dev/null
 else # mingw32-windows
        EXEPREFIX =
        EXEPOSTFIX = .exe
-       SEP = \$(EMPTY_VAR)
-       nmkdir = mkdir
-       gcc = gcc
-       gpp = g++
-       ld = ld
-       ar = ar
-       objcopy = objcopy
-       dlltool = dlltool
-       windres = windres
+       ROS_EMPTY =
+       SEP = \$(ROS_EMPTY)
+       nmkdir = -$(Q)mkdir
+       gcc = $(Q)gcc
+       gpp = $(Q)g++
+       ld = $(Q)ld
+       ar = $(Q)ar
+       objcopy = $(Q)objcopy
+       dlltool = $(Q)dlltool
+       windres = $(Q)windres
        rm = del /f /q
-       cp = copy /y
+       cp = $(Q)copy /y
        NUL = NUL
 endif
 
-.PHONY: all
-.PHONY: clean
-
-all: Makefile.auto
-
 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
 
-include tools/Makefile
--include Makefile.auto
+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
 
 PREAUTO := \
-       include$(SEP)reactos$(SEP)buildno.h \
-       include$(SEP)reactos$(SEP)bugcodes.h \
-       ntoskrnl$(SEP)bugcodes.rc \
-       include$(SEP)reactos$(SEP)errcodes.h \
-       lib$(SEP)kernel32$(SEP)errcodes.rc
+       $(BUILDNO_H) \
+       $(BUGCODES_H) \
+       $(BUGCODES_RC) \
+       $(ERRCODES_H) \
+       $(ERRCODES_RC) \
+       $(NCI_SERVICE_FILES)
 
-Makefile.auto: $(RMKDIR_TARGET) $(BUILDNO_TARGET) $(NCI_SERVICE_FILES) $(WMC_TARGET) $(CDMAKE_TARGET) $(RBUILD_TARGET) $(PREAUTO)
-       tools$(SEP)rbuild$(SEP)rbuild$(EXEPOSTFIX) mingw
-#      $(MAKE) $(MAKECMDGOALS)
+makefile.auto: $(RBUILD_TARGET) $(PREAUTO) $(XMLBUILDFILES)
+       $(ECHO_RBUILD)
+       $(Q)$(RBUILD_TARGET) mingw
 
 
-include$(SEP)reactos$(SEP)bugcodes.h ntoskrnl$(SEP)bugcodes.rc: $(WMC_TARGET) ntoskrnl$(SEP)ntoskrnl.mc
-       $(WMC_TARGET) -H include$(SEP)reactos$(SEP)bugcodes.h -o ntoskrnl$(SEP)bugcodes.rc ntoskrnl$(SEP)ntoskrnl.mc
+$(BUGCODES_H) $(BUGCODES_RC): $(WMC_TARGET) $(NTOSKRNL_MC)
+       $(ECHO_WMC)
+       $(Q)$(WMC_TARGET) -i -H $(BUGCODES_H) -o $(BUGCODES_RC) $(NTOSKRNL_MC)
 
-include$(SEP)reactos$(SEP)errcodes.h lib$(SEP)kernel32$(SEP)errcodes.rc: $(WMC_TARGET) lib$(SEP)kernel32$(SEP)kernel32.mc
-       $(WMC_TARGET) -H include$(SEP)reactos$(SEP)errcodes.h -o lib$(SEP)kernel32$(SEP)errcodes.rc lib$(SEP)kernel32$(SEP)kernel32.mc
+$(ERRCODES_H) $(ERRCODES_RC): $(WMC_TARGET) $(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)
+       -@$(rm) makefile.auto $(PREAUTO) 2>$(NUL)
+
+.PHONY: clean
 clean: makefile_auto_clean