eliminate rmkdir and generate directory dependencies the right way. treat ROS_TEMPORARY, ROS_INTERMEDIATE, and ROS_OUTPUT as potential different directories. major refactor of mingw backend to simplify things, and fix some output bugs, as well as reduce makefile.auto size a bit. create all macros before we start writing rules ( create all target macros before any other ), this fixes bug with macros being empty because they're used before they're defined Modified: branches/xmlbuildsystem/reactos/Makefile Modified: branches/xmlbuildsystem/reactos/lib/zlib/zlib.mak Modified: branches/xmlbuildsystem/reactos/tools/bin2res/bin2res.mak Modified: branches/xmlbuildsystem/reactos/tools/buildno/buildno.mak Modified: branches/xmlbuildsystem/reactos/tools/cabman/cabman.mak Modified: branches/xmlbuildsystem/reactos/tools/cdmake/cdmake.mak Modified: branches/xmlbuildsystem/reactos/tools/nci/nci.mak Modified: branches/xmlbuildsystem/reactos/tools/rbuild/backend/mingw/mingw.cpp Modified: branches/xmlbuildsystem/reactos/tools/rbuild/backend/mingw/mingw.h Modified: branches/xmlbuildsystem/reactos/tools/rbuild/backend/mingw/modulehandler .cpp Modified: branches/xmlbuildsystem/reactos/tools/rbuild/backend/mingw/modulehandler .h Modified: branches/xmlbuildsystem/reactos/tools/rbuild/module.cpp Modified: branches/xmlbuildsystem/reactos/tools/rbuild/rbuild.h Modified: branches/xmlbuildsystem/reactos/tools/rbuild/rbuild.mak Modified: branches/xmlbuildsystem/reactos/tools/tools.mak Modified: branches/xmlbuildsystem/reactos/tools/unicode/unicode.mak Modified: branches/xmlbuildsystem/reactos/tools/winebuild/winebuild.mak Modified: branches/xmlbuildsystem/reactos/tools/wmc/wmc.mak Modified: branches/xmlbuildsystem/reactos/tools/wpp/wpp.mak Modified: branches/xmlbuildsystem/reactos/tools/wrc/wrc.mak _____
Modified: branches/xmlbuildsystem/reactos/Makefile --- branches/xmlbuildsystem/reactos/Makefile 2005-03-22 03:06:03 UTC (rev 14264) +++ branches/xmlbuildsystem/reactos/Makefile 2005-03-22 07:25:53 UTC (rev 14265) @@ -100,7 +100,7 @@
EXEPREFIX = ./ EXEPOSTFIX = SEP = / - nmkdir = -$(Q)mkdir -p + mkdir = -$(Q)mkdir -p gcc = $(Q)mingw32-gcc gpp = $(Q)mingw32-g++ ld = $(Q)mingw32-ld @@ -116,7 +116,7 @@ EXEPOSTFIX = .exe ROS_EMPTY = SEP = $(ROS_EMPTY) - nmkdir = -$(Q)mkdir + mkdir = -$(Q)mkdir gcc = $(Q)gcc gpp = $(Q)g++ ld = $(Q)ld @@ -130,28 +130,26 @@ endif
ifneq ($(ROS_INTERMEDIATE),) - INTERMEDIATE = .$(SEP)$(ROS_INTERMEDIATE)$(SEP) - INTERMEDIATE_NO_SLASH := $(ROS_INTERMEDIATE) + INTERMEDIATE := $(ROS_INTERMEDIATE) else - INTERMEDIATE = obj-i386$(SEP) - INTERMEDIATE_NO_SLASH = obj-i386 + INTERMEDIATE := obj-i386 endif +INTERMEDIATE_ := $(INTERMEDIATE)$(SEP)
ifneq ($(ROS_OUTPUT),) - OUTPUT = $(ROS_OUTPUT)$(SEP) - OUTPUT_NO_SLASH = $(ROS_OUTPUT) + OUTPUT := $(ROS_OUTPUT) else - OUTPUT = obj-i386$(SEP) - OUTPUT_NO_SLASH = obj-i386 + OUTPUT := obj-i386 endif +OUTPUT_ := $(OUTPUT)$(SEP)
-mkdir = -$(Q)$(INTERMEDIATE)rmkdir -EXISTS = .exists -INTERMEDIATE_EXISTS = $(INTERMEDIATE)$(EXISTS) +$(INTERMEDIATE): + ${mkdir} $@
-$(INTERMEDIATE_EXISTS): - -${nmkdir} $(INTERMEDIATE_NO_SLASH) 2>$(NUL) >$(NUL) - @echo . > $@ +ifneq ($(INTERMEDIATE),$(OUTPUT)) +$(OUTPUT): + ${mkdir} $@ +endif
NTOSKRNL_MC = ntoskrnl$(SEP)ntoskrnl.mc KERNEL32_MC = lib$(SEP)kernel32$(SEP)kernel32.mc @@ -161,6 +159,7 @@ ERRCODES_H = include$(SEP)reactos$(SEP)errcodes.h ERRCODES_RC = lib$(SEP)kernel32$(SEP)errcodes.rc
+include lib/lib.mak include tools/tools.mak -include makefile.auto
_____
Modified: branches/xmlbuildsystem/reactos/lib/zlib/zlib.mak --- branches/xmlbuildsystem/reactos/lib/zlib/zlib.mak 2005-03-22 03:06:03 UTC (rev 14264) +++ branches/xmlbuildsystem/reactos/lib/zlib/zlib.mak 2005-03-22 07:25:53 UTC (rev 14265) @@ -1,29 +1,31 @@
-ZLIB_BASE = lib$(SEP)zlib +ZLIB_BASE = $(LIB_BASE_)zlib +ZLIB_BASE_ = $(ZLIB_BASE)$(SEP)
-ZLIB_BASE_DIR = $(INTERMEDIATE)$(ZLIB_BASE) +ZLIB_INT = $(INTERMEDIATE_)$(ZLIB_BASE) +ZLIB_OUT = $(OUTPUT_)$(ZLIB_BASE)
- -#$(ZLIB_BASE_DIR): $(INTERMEDIATE_NO_SLASH) $(RMKDIR_TARGET) +#$(ZLIB_INT): $(INTERMEDIATE_NO_SLASH) $(RMKDIR_TARGET) # ${mkdir} $(INTERMEDIATE)$(ZLIB_BASE)
ZLIB_HOST_TARGET = \ - $(INTERMEDIATE)$(ZLIB_BASE)$(SEP)zlib.host.a + $(ZLIB_OUT)$(SEP)zlib.host.a
-ZLIB_HOST_SOURCES = \ - $(ZLIB_BASE)$(SEP)adler32.c \ - $(ZLIB_BASE)$(SEP)compress.c \ - $(ZLIB_BASE)$(SEP)crc32.c \ - $(ZLIB_BASE)$(SEP)gzio.c \ - $(ZLIB_BASE)$(SEP)uncompr.c \ - $(ZLIB_BASE)$(SEP)deflate.c \ - $(ZLIB_BASE)$(SEP)trees.c \ - $(ZLIB_BASE)$(SEP)zutil.c \ - $(ZLIB_BASE)$(SEP)inflate.c \ - $(ZLIB_BASE)$(SEP)infblock.c \ - $(ZLIB_BASE)$(SEP)inftrees.c \ - $(ZLIB_BASE)$(SEP)infcodes.c \ - $(ZLIB_BASE)$(SEP)infutil.c \ - $(ZLIB_BASE)$(SEP)inffast.c +ZLIB_HOST_SOURCES = $(addprefix $(ZLIB_BASE_), \ + adler32.c \ + compress.c \ + crc32.c \ + gzio.c \ + uncompr.c \ + deflate.c \ + trees.c \ + zutil.c \ + inflate.c \ + infblock.c \ + inftrees.c \ + infcodes.c \ + infutil.c \ + inffast.c \ + )
ZLIB_HOST_OBJECTS = \ $(ZLIB_HOST_SOURCES:.c=.o) @@ -34,9 +36,9 @@ .PHONY: zlib_host zlib_host: $(ZLIB_HOST_TARGET)
-$(ZLIB_HOST_TARGET): $(ZLIB_HOST_BASE_DIR) $(ZLIB_HOST_OBJECTS) +$(ZLIB_HOST_TARGET): $(ZLIB_HOST_OBJECTS) $(ZLIB_OUT) $(ECHO_AR) - $(host_ar) -r $(ZLIB_HOST_TARGET) $(ZLIB_HOST_OBJECTS) + $(host_ar) -r $@ $(ZLIB_HOST_OBJECTS)
$(ZLIB_HOST_OBJECTS): %.o : %.c $(ZLIB_BASE_DIR) $(ECHO_CC) _____
Modified: branches/xmlbuildsystem/reactos/tools/bin2res/bin2res.mak --- branches/xmlbuildsystem/reactos/tools/bin2res/bin2res.mak 2005-03-22 03:06:03 UTC (rev 14264) +++ branches/xmlbuildsystem/reactos/tools/bin2res/bin2res.mak 2005-03-22 07:25:53 UTC (rev 14265) @@ -1,35 +1,44 @@
-BIN2RES_BASE = $(TOOLS_BASE)$(SEP)bin2res +BIN2RES_BASE = $(TOOLS_BASE_)bin2res +BIN2RES_BASE_ = $(BIN2RES_BASE)$(SEP) +BIN2RES_INT = $(INTERMEDIATE_)$(BIN2RES_BASE) +BIN2RES_INT_ = $(BIN2RES_INT)$(SEP) +BIN2RES_OUT = $(OUTPUT_)$(BIN2RES_BASE) +BIN2RES_OUT_ = $(BIN2RES_OUT)$(SEP)
-BIN2RES_BASE_DIR = $(INTERMEDIATE)$(BIN2RES_BASE) -BIN2RES_BASE_DIR_EXISTS = $(BIN2RES_BASE_DIR)$(SEP)$(EXISTS) +$(BIN2RES_INT): $(TOOLS_INT) + $(ECHO_MKDIR) + ${mkdir} $@
-$(BIN2RES_BASE_DIR_EXISTS): $(TOOLS_BASE_DIR_EXISTS) - ${mkdir} $(BIN2RES_BASE_DIR) - @echo . >$(BIN2RES_BASE_DIR_EXISTS) +ifneq ($(INTERMEDIATE),$(OUTPUT)) +$(BIN2RES_OUT): $(TOOLS_OUT) + $(ECHO_MKDIR) + ${mkdir} $@ +endif
BIN2RES_TARGET = \ - $(BIN2RES_BASE_DIR)$(SEP)bin2res$(EXEPOSTFIX) + $(EXEPREFIX)$(BIN2RES_OUT_)bin2res$(EXEPOSTFIX)
-BIN2RES_SOURCES = \ - $(BIN2RES_BASE)$(SEP)bin2res.c \ - $(BIN2RES_BASE)$(SEP)mkstemps.c +BIN2RES_SOURCES = $(addprefix $(BIN2RES_BASE_), \ + bin2res.c \ + mkstemps.c \ + )
BIN2RES_OBJECTS = \ - $(BIN2RES_SOURCES:.c=.o) + $addprefix ( $(INTERMEDIATE_), $(BIN2RES_SOURCES:.c=.o) )
BIN2RES_HOST_CFLAGS = -Iinclude/wine -D__REACTOS__ -g -Werror -Wall
BIN2RES_HOST_LFLAGS = -g
-$(BIN2RES_TARGET): $(BIN2RES_OBJECTS) +$(BIN2RES_TARGET): $(BIN2RES_OBJECTS) $(BIN2RES_OUT) $(ECHO_LD) ${host_gcc} $(BIN2RES_OBJECTS) $(BIN2RES_HOST_LFLAGS) -o $@
-$(BIN2RES_BASE_DIR)$(SEP)bin2res.o: $(BIN2RES_BASE)$(SEP)bin2res.c $(BIN2RES_BASE_DIR_EXISTS) +$(BIN2RES_INT_)bin2res.o: $(BIN2RES_BASE_)bin2res.c $(BIN2RES_INT) $(ECHO_CC) ${host_gcc} $(BIN2RES_HOST_CFLAGS) -c $< -o $@
-$(BIN2RES_BASE_DIR)$(SEP)mkstemps.o: $(BIN2RES_BASE)$(SEP)mkstemps.c $(BIN2RES_BASE_DIR_EXISTS) +$(BIN2RES_INT_)mkstemps.o: $(BIN2RES_BASE_)mkstemps.c $(BIN2RES_INT) $(ECHO_CC) ${host_gcc} $(BIN2RES_HOST_CFLAGS) -c $< -o $@
_____
Modified: branches/xmlbuildsystem/reactos/tools/buildno/buildno.mak --- branches/xmlbuildsystem/reactos/tools/buildno/buildno.mak 2005-03-22 03:06:03 UTC (rev 14264) +++ branches/xmlbuildsystem/reactos/tools/buildno/buildno.mak 2005-03-22 07:25:53 UTC (rev 14265) @@ -1,46 +1,54 @@
-BUILDNO_BASE = $(TOOLS_BASE)$(SEP)buildno +BUILDNO_BASE = $(TOOLS_BASE_)buildno +BUILDNO_BASE_ = $(BUILDNO_BASE)$(SEP) +BUILDNO_INT = $(INTERMEDIATE_)$(BUILDNO_BASE) +BUILDNO_INT_ = $(BUILDNO_INT)$(SEP) +BUILDNO_OUT = $(OUTPUT_)$(BUILDNO_BASE) +BUILDNO_OUT_ = $(BUILDNO_OUT)$(SEP)
-BUILDNO_BASE_DIR = $(INTERMEDIATE)$(BUILDNO_BASE) -BUILDNO_BASE_DIR_EXISTS = $(BUILDNO_BASE_DIR)$(SEP)$(EXISTS) +$(BUILDNO_INT): $(TOOLS_INT) + $(ECHO_MKDIR) + ${mkdir} $@
-$(BUILDNO_BASE_DIR_EXISTS): $(TOOLS_BASE_DIR_EXISTS) +ifneq ($(INTERMEDIATE),$(OUTPUT)) +$(BUILDNO_OUT): $(TOOLS_OUT) $(ECHO_MKDIR) - ${mkdir} $(BUILDNO_BASE_DIR) - @echo. > $@ + ${mkdir} $@ +endif
BUILDNO_TARGET = \ - $(BUILDNO_BASE_DIR)$(SEP)buildno$(EXEPOSTFIX) + $(EXEPREFIX)$(BUILDNO_OUT_)buildno$(EXEPOSTFIX)
-BUILDNO_SOURCES = \ - $(BUILDNO_BASE)$(SEP)buildno.cpp \ - $(BUILDNO_BASE)$(SEP)exception.cpp \ - $(BUILDNO_BASE)$(SEP)ssprintf.cpp \ - $(BUILDNO_BASE)$(SEP)XML.cpp +BUILDNO_SOURCES = $(addprefix $(BUILDNO_BASE_), \ + buildno.cpp \ + exception.cpp \ + ssprintf.cpp \ + XML.cpp \ + )
BUILDNO_OBJECTS = \ - $(addprefix $(INTERMEDIATE), $(BUILDNO_SOURCES:.cpp=.o)) + $(addprefix $(INTERMEDIATE_), $(BUILDNO_SOURCES:.cpp=.o))
BUILDNO_HOST_CFLAGS = -Iinclude/reactos -g -Werror -Wall
BUILDNO_HOST_LFLAGS = -g
-$(BUILDNO_TARGET): $(BUILDNO_OBJECTS) +$(BUILDNO_TARGET): $(BUILDNO_OBJECTS) $(BUILDNO_OUT) $(ECHO_LD) - ${host_gpp} $(BUILDNO_OBJECTS) $(BUILDNO_HOST_LFLAGS) -o $(BUILDNO_TARGET) + ${host_gpp} $(BUILDNO_OBJECTS) $(BUILDNO_HOST_LFLAGS) -o $@
-$(BUILDNO_BASE_DIR)$(SEP)buildno.o: $(BUILDNO_BASE)$(SEP)buildno.cpp $(BUILDNO_BASE_DIR_EXISTS) +$(BUILDNO_INT_)buildno.o: $(BUILDNO_BASE_)buildno.cpp $(BUILDNO_INT) $(ECHO_CC) ${host_gpp} $(BUILDNO_HOST_CFLAGS) -c $< -o $@
-$(BUILDNO_BASE_DIR)$(SEP)exception.o: $(BUILDNO_BASE)$(SEP)exception.cpp $(BUILDNO_BASE_DIR_EXISTS) +$(BUILDNO_INT_)exception.o: $(BUILDNO_BASE_)exception.cpp $(BUILDNO_INT) $(ECHO_CC) ${host_gpp} $(BUILDNO_HOST_CFLAGS) -c $< -o $@
-$(BUILDNO_BASE_DIR)$(SEP)ssprintf.o: $(BUILDNO_BASE)$(SEP)ssprintf.cpp $(BUILDNO_BASE_DIR_EXISTS) +$(BUILDNO_INT_)ssprintf.o: $(BUILDNO_BASE_)ssprintf.cpp $(BUILDNO_INT) $(ECHO_CC) ${host_gpp} $(BUILDNO_HOST_CFLAGS) -c $< -o $@
-$(BUILDNO_BASE_DIR)$(SEP)XML.o: $(BUILDNO_BASE)$(SEP)XML.cpp $(BUILDNO_BASE_DIR_EXISTS) +$(BUILDNO_INT_)XML.o: $(BUILDNO_BASE_)XML.cpp $(BUILDNO_INT) $(ECHO_CC) ${host_gpp} $(BUILDNO_HOST_CFLAGS) -c $< -o $@
_____
Modified: branches/xmlbuildsystem/reactos/tools/cabman/cabman.mak --- branches/xmlbuildsystem/reactos/tools/cabman/cabman.mak 2005-03-22 03:06:03 UTC (rev 14264) +++ branches/xmlbuildsystem/reactos/tools/cabman/cabman.mak 2005-03-22 07:25:53 UTC (rev 14265) @@ -1,51 +1,64 @@
-CABMAN_BASE = tools$(SEP)cabman +CABMAN_BASE = $(TOOLS_BASE_)cabman +CABMAN_BASE_ = $(CABMAN_BASE)$(SEP) +CABMAN_INT = $(INTERMEDIATE_)$(CABMAN_BASE) +CABMAN_INT_ = $(CABMAN_INT)$(SEP) +CABMAN_OUT = $(OUTPUT_)$(CABMAN_BASE) +CABMAN_OUT_ = $(CABMAN_OUT)$(SEP)
-CABMAN_BASE_DIR = $(INTERMEDIATE)$(CABMAN_BASE) +$(CABMAN_INT): $(TOOLS_INT) + $(ECHO_MKDIR) + ${mkdir} $@
-$(CABMAN_BASE_DIR): $(RMKDIR_TARGET) - ${mkdir} $(INTERMEDIATE)$(CABMAN_BASE) +ifneq ($(INTERMEDIATE),$(OUTPUT)) +$(CABMAN_OUT): $(TOOLS_OUT) + $(ECHO_MKDIR) + ${mkdir} $@ +endif
CABMAN_TARGET = \ - $(CABMAN_BASE_DIR)$(SEP)cabman$(EXEPOSTFIX) + $(EXEPREFIX)$(CABMAN_OUT_)cabman$(EXEPOSTFIX)
-CABMAN_SOURCES = \ - $(CABMAN_BASE)$(SEP)cabinet.cxx \ - $(CABMAN_BASE)$(SEP)dfp.cxx \ - $(CABMAN_BASE)$(SEP)main.cxx \ - $(CABMAN_BASE)$(SEP)mszip.cxx \ - $(CABMAN_BASE)$(SEP)raw.cxx +CABMAN_SOURCES = $(addprefix $(CABMAN_INT_), \ + cabinet.cxx \ + dfp.cxx \ + main.cxx \ + mszip.cxx \ + raw.cxx \ + )
CABMAN_OBJECTS = \ - $(addprefix $(INTERMEDIATE), $(CABMAN_SOURCES:.cxx=.o)) + $(addprefix $(INTERMEDIATE_), $(CABMAN_SOURCES:.cxx=.o))
CABMAN_HOST_CFLAGS = -Iinclude/reactos -Ilib/zlib -g -Werror -Wall
-CABMAN_HOST_LFLAGS = -g $(ZLIB_HOST_TARGET) +CABMAN_HOST_LIBS = $(ZLIB_HOST_TARGET)
+CABMAN_HOST_LFLAGS = -g $(CABMAN_HOST_LIBS) + .PHONY: cabman cabman: $(CABMAN_TARGET)
-$(CABMAN_TARGET): $(CABMAN_OBJECTS) $(ZLIB_HOST_TARGET) +$(CABMAN_TARGET): $(CABMAN_OBJECTS) $(CABMAN_HOST_LIBS) $(CABMAN_OUT) $(ECHO_LD) ${host_gpp} $(CABMAN_OBJECTS) $(CABMAN_HOST_LFLAGS) -o $@
-$(CABMAN_BASE_DIR)$(SEP)cabinet.o: $(CABMAN_BASE)$(SEP)cabinet.cxx $(CABMAN_BASE_DIR) +$(CABMAN_INT_)cabinet.o: $(CABMAN_BASE_)cabinet.cxx $(CABMAN_BASE_DIR) $(ECHO_CC) ${host_gpp} $(CABMAN_HOST_CFLAGS) -c $< -o $@
-$(CABMAN_BASE_DIR)$(SEP)dfp.o: $(CABMAN_BASE)$(SEP)dfp.cxx $(CABMAN_BASE_DIR) +$(CABMAN_INT_)dfp.o: $(CABMAN_BASE_)dfp.cxx $(CABMAN_BASE_DIR) $(ECHO_CC) ${host_gpp} $(CABMAN_HOST_CFLAGS) -c $< -o $@
-$(CABMAN_BASE_DIR)$(SEP)main.o: $(CABMAN_BASE)$(SEP)main.cxx $(CABMAN_BASE_DIR) +$(CABMAN_INT_)main.o: $(CABMAN_BASE_)main.cxx $(CABMAN_BASE_DIR) $(ECHO_CC) ${host_gpp} $(CABMAN_HOST_CFLAGS) -c $< -o $@
-$(CABMAN_BASE_DIR)$(SEP)mszip.o: $(CABMAN_BASE)$(SEP)mszip.cxx $(CABMAN_BASE_DIR) +$(CABMAN_INT_)mszip.o: $(CABMAN_BASE_)mszip.cxx $(CABMAN_BASE_DIR) $(ECHO_CC) ${host_gpp} $(CABMAN_HOST_CFLAGS) -c $< -o $@
-$(CABMAN_BASE_DIR)$(SEP)raw.o: $(CABMAN_BASE)$(SEP)raw.cxx $(CABMAN_BASE_DIR) +$(CABMAN_INT_)raw.o: $(CABMAN_BASE_)raw.cxx $(CABMAN_BASE_DIR) $(ECHO_CC) ${host_gpp} $(CABMAN_HOST_CFLAGS) -c $< -o $@
_____
Modified: branches/xmlbuildsystem/reactos/tools/cdmake/cdmake.mak --- branches/xmlbuildsystem/reactos/tools/cdmake/cdmake.mak 2005-03-22 03:06:03 UTC (rev 14264) +++ branches/xmlbuildsystem/reactos/tools/cdmake/cdmake.mak 2005-03-22 07:25:53 UTC (rev 14265) @@ -1,22 +1,30 @@
-CDMAKE_BASE = $(TOOLS_BASE)$(SEP)cdmake +CDMAKE_BASE = $(TOOLS_BASE_)cdmake +CDMAKE_BASE_ = $(CDMAKE_BASE)$(SEP) +CDMAKE_INT = $(INTERMEDIATE_)$(CDMAKE_BASE) +CDMAKE_INT_ = $(CDMAKE_INT)$(SEP) +CDMAKE_OUT = $(OUTPUT_)$(CDMAKE_BASE) +CDMAKE_OUT_ = $(CDMAKE_OUT)$(SEP)
-CDMAKE_BASE_DIR = $(INTERMEDIATE)$(CDMAKE_BASE) -CDMAKE_BASE_DIR_EXISTS = $(CDMAKE_BASE_DIR)$(SEP)$(EXISTS) +$(CDMAKE_INT): $(TOOLS_INT) + $(ECHO_MKDIR) + ${mkdir} $@
-$(CDMAKE_BASE_DIR_EXISTS): $(TOOLS_BASE_DIR_EXISTS) +ifneq ($(INTERMEDIATE),$(OUTPUT)) +$(CDMAKE_OUT): $(TOOLS_OUT) $(ECHO_MKDIR) - ${mkdir} $(CDMAKE_BASE_DIR) - @echo . >$@ + ${mkdir} $@ +endif
CDMAKE_TARGET = \ - $(CDMAKE_BASE_DIR)$(SEP)cdmake$(EXEPOSTFIX) + $(EXEPREFIX)$(CDMAKE_OUT_)cdmake$(EXEPOSTFIX)
-CDMAKE_SOURCES = \ - $(CDMAKE_BASE)$(SEP)cdmake.c \ - $(CDMAKE_BASE)$(SEP)llmosrt.c +CDMAKE_SOURCES = $(addprefix $(CDMAKE_BASE_), \ + cdmake.c \ + llmosrt.c \ + )
CDMAKE_OBJECTS = \ - $(addprefix $(INTERMEDIATE), $(CDMAKE_SOURCES:.c=.o)) + $(addprefix $(INTERMEDIATE_), $(CDMAKE_SOURCES:.c=.o))
CDMAKE_HOST_CFLAGS = -Iinclude -g -Werror -Wall
@@ -25,15 +33,15 @@ .PHONY: cdmake cdmake: $(CDMAKE_TARGET)
-$(CDMAKE_TARGET): $(CDMAKE_OBJECTS) +$(CDMAKE_TARGET): $(CDMAKE_OBJECTS) $(CDMAKE_OUT) $(ECHO_LD) ${host_gcc} $(CDMAKE_OBJECTS) $(CDMAKE_HOST_LFLAGS) -o $@
-$(CDMAKE_BASE_DIR)$(SEP)cdmake.o: $(CDMAKE_BASE)$(SEP)cdmake.c $(CDMAKE_BASE_DIR_EXISTS) +$(CDMAKE_INT_)cdmake.o: $(CDMAKE_BASE_)cdmake.c $(CDMAKE_INT) $(ECHO_CC) ${host_gcc} $(CDMAKE_HOST_CFLAGS) -c $< -o $@
-$(CDMAKE_BASE_DIR)$(SEP)llmosrt.o: $(CDMAKE_BASE)$(SEP)llmosrt.c $(CDMAKE_BASE_DIR_EXISTS) +$(CDMAKE_INT_)llmosrt.o: $(CDMAKE_BASE_)llmosrt.c $(CDMAKE_INT) $(ECHO_CC) ${host_gcc} $(CDMAKE_HOST_CFLAGS) -c $< -o $@
_____
Modified: branches/xmlbuildsystem/reactos/tools/nci/nci.mak --- branches/xmlbuildsystem/reactos/tools/nci/nci.mak 2005-03-22 03:06:03 UTC (rev 14264) +++ branches/xmlbuildsystem/reactos/tools/nci/nci.mak 2005-03-22 07:25:53 UTC (rev 14265) @@ -1,30 +1,38 @@
-NCI_BASE = $(TOOLS_BASE)$(SEP)nci +NCI_BASE = $(TOOLS_BASE_)nci +NCI_BASE_ = $(NCI_BASE)$(SEP) +NCI_INT = $(INTERMEDIATE_)$(NCI_BASE) +NCI_INT_ = $(NCI_INT)$(SEP) +NCI_OUT = $(OUTPUT_)$(NCI_BASE) +NCI_OUT_ = $(NCI_OUT)$(SEP)
-NCI_BASE_DIR = $(INTERMEDIATE)$(NCI_BASE) -NCI_BASE_DIR_EXISTS = $(NCI_BASE_DIR)$(SEP)$(EXISTS) +$(NCI_INT): $(TOOLS_INT) + $(ECHO_MKDIR) + ${mkdir} $@
-$(NCI_BASE_DIR_EXISTS): $(TOOLS_BASE_DIR_EXIST) - ${mkdir} $(NCI_BASE_DIR) - @echo . > $@ +ifneq ($(INTERMEDIATE),$(OUTPUT)) +$(NCI_OUT): $(TOOLS_OUT) + $(ECHO_MKDIR) + ${mkdir} $@ +endif
NCI_TARGET = \ - $(NCI_BASE_DIR)$(SEP)nci$(EXEPOSTFIX) + $(EXEPREFIX)$(NCI_OUT_)nci$(EXEPOSTFIX)
NCI_SOURCES = \ - $(NCI_BASE)$(SEP)ncitool.c + $(NCI_BASE_)ncitool.c
NCI_OBJECTS = \ - $(addprefix $(INTERMEDIATE), $(NCI_SOURCES:.c=.o)) + $(addprefix $(INTERMEDIATE_), $(NCI_SOURCES:.c=.o))
NCI_HOST_CFLAGS = -Iinclude -g -Werror -Wall
NCI_HOST_LFLAGS = -g
-$(NCI_TARGET): $(NCI_OBJECTS) +$(NCI_TARGET): $(NCI_OBJECTS) $(NCI_OUT) $(ECHO_LD) - ${host_gcc} $(NCI_OBJECTS) $(NCI_HOST_CFLAGS) -o $(NCI_TARGET) + ${host_gcc} $(NCI_OBJECTS) $(NCI_HOST_LFLAGS) -o $@
-$(NCI_BASE_DIR)$(SEP)ncitool.o: $(NCI_BASE)$(SEP)ncitool.c $(NCI_BASE_DIR_EXISTS) +$(NCI_INT_)ncitool.o: $(NCI_BASE_)ncitool.c $(NCI_INT) $(ECHO_CC) ${host_gcc} $(NCI_HOST_CFLAGS) -c $< -o $@
@@ -34,13 +42,13 @@ clean: nci_clean
# WIN32K.SYS -WIN32K_SVC_DB = $(NCI_BASE)$(SEP)w32ksvc.db +WIN32K_SVC_DB = $(NCI_BASE_)w32ksvc.db WIN32K_SERVICE_TABLE = subsys$(SEP)win32k$(SEP)main$(SEP)svctab.c WIN32K_GDI_STUBS = lib$(SEP)gdi32$(SEP)misc$(SEP)win32k.S WIN32K_USER_STUBS = lib$(SEP)user32$(SEP)misc$(SEP)win32k.S
# NTOSKRNL.EXE -KERNEL_SVC_DB = $(NCI_BASE)$(SEP)sysfuncs.lst +KERNEL_SVC_DB = $(NCI_BASE_)sysfuncs.lst KERNEL_SERVICE_TABLE = include$(SEP)ntdll$(SEP)napi.h NTDLL_STUBS = lib$(SEP)ntdll$(SEP)napi.S KERNEL_STUBS = ntoskrnl$(SEP)ex$(SEP)zw.S _____
Modified: branches/xmlbuildsystem/reactos/tools/rbuild/backend/mingw/mingw.cpp --- branches/xmlbuildsystem/reactos/tools/rbuild/backend/mingw/mingw.cpp 2005-03-22 03:06:03 UTC (rev 14264) +++ branches/xmlbuildsystem/reactos/tools/rbuild/backend/mingw/mingw.cpp 2005-03-22 07:25:53 UTC (rev 14265) @@ -3,13 +3,76 @@
#include "mingw.h" #include <assert.h> +#include "modulehandler.h"
using std::string; using std::vector; using std::set; +using std::map;
typedef set<string> set_string; +typedef map<string,Directory*> directory_map;
+class Directory +{ +public: + string name; + directory_map subdirs; + Directory ( const string& name ); + void Add ( const char* subdir ); + void CreateRule ( FILE* f, const string& parent ); +}; + +Directory::Directory ( const string& name_ ) + : name(name_) +{ +} + +void Directory::Add ( const char* subdir ) +{ + const char* p = strpbrk ( subdir, "/\" ); + if ( !p ) + p = subdir + strlen(subdir); + string s ( subdir, p-subdir ); + if ( subdirs.find(s) == subdirs.end() ) + subdirs[s] = new Directory(s); + if ( *p && *++p ) + subdirs[s]->Add ( p ); +} + +void +Directory::CreateRule ( FILE* f, const string& parent ) +{ + string path; + + if ( parent.size() ) + { + fprintf ( f, + "%s%c%s: %s\n", + parent.c_str (), + CSEP, + name.c_str (), + parent.c_str () ); + + fprintf ( f, + "\t$(ECHO_MKDIR)\n" ); + + fprintf ( f, + "\t${mkdir} $@\n" ); + + path = parent + SSEP + name; + } + else + path = name; + + for ( directory_map::iterator i = subdirs.begin(); + i != subdirs.end(); + ++i ) + { + i->second->CreateRule ( f, path ); + } +} + static class MingwFactory : public Backend::Factory { public: @@ -22,33 +85,82 @@
MingwBackend::MingwBackend ( Project& project ) - : Backend ( project ) + : Backend ( project ), + int_directories ( new Directory("$(INTERMEDIATE)") ), + out_directories ( new Directory("$(OUTPUT)") ) { }
-void -MingwBackend::CreateDirectoryTargetIfNotYetCreated ( const string& directory ) +MingwBackend::~MingwBackend() { - directories.insert ( directory ); + delete int_directories; + delete out_directories; }
+string +MingwBackend::AddDirectoryTarget ( const string& directory, bool out ) +{ + const char* dir_name = "$(INTERMEDIATE)"; + Directory* dir = int_directories; + if ( out ) + { + dir_name = "$(OUTPUT)"; + dir = out_directories; + } + dir->Add ( directory.c_str() ); + return dir_name; +}
void MingwBackend::Process () { + size_t i; + DetectPCHSupport();
CreateMakefile (); GenerateHeader (); GenerateGlobalVariables (); - GenerateAllTarget (); - GenerateInitTarget (); GenerateXmlBuildFilesMacro(); - for ( size_t i = 0; i < ProjectNode.modules.size (); i++ ) + + vector<MingwModuleHandler*> v; + + for ( i = 0; i < ProjectNode.modules.size (); i++ ) { Module& module = *ProjectNode.modules[i]; - ProcessModule ( module ); + MingwModuleHandler* h = MingwModuleHandler::InstanciateHandler ( + module, + this ); + if ( module.host == HostDefault ) + { + module.host = h->DefaultHost(); + assert ( module.host != HostDefault ); + } + v.push_back ( h ); } + + size_t iend = v.size (); + + for ( i = 0; i < iend; i++ ) + v[i]->GenerateTargetMacro(); + fprintf ( fMakefile, "\n" ); + + GenerateAllTarget ( v ); + GenerateInitTarget (); + + for ( i = 0; i < iend; i++ ) + v[i]->GenerateOtherMacros(); + + for ( i = 0; i < iend; i++ ) + { + MingwModuleHandler& h = *v[i]; + h.GeneratePreconditionDependencies (); + h.Process (); + h.GenerateInvocations (); + h.GenerateCleanTarget (); + delete v[i]; + } + GenerateDirectoryTargets (); CheckAutomaticDependencies (); CloseMakefile (); @@ -60,6 +172,7 @@ fMakefile = fopen ( ProjectNode.makefile.c_str (), "w" ); if ( !fMakefile ) throw AccessDeniedException ( ProjectNode.makefile ); + MingwModuleHandler::SetBackend ( this ); MingwModuleHandler::SetMakefile ( fMakefile ); MingwModuleHandler::SetUsePch ( use_pch ); } @@ -129,7 +242,7 @@ if ( data.includes.size() || data.defines.size() ) { GenerateProjectCFlagsMacro ( assignmentOperation, - data ); + data ); }
for ( i = 0; i < data.ifs.size(); i++ ) @@ -171,15 +284,6 @@ void MingwBackend::GenerateGlobalVariables () const { -#define TOOL_PREFIX "$(Q)$(INTERMEDIATE)tools" SSEP - fprintf ( fMakefile, "winebuild = " TOOL_PREFIX "winebuild" SSEP "winebuild" EXEPOSTFIX "\n" ); - fprintf ( fMakefile, "bin2res = " TOOL_PREFIX "bin2res" SSEP "bin2res" EXEPOSTFIX "\n" ); - fprintf ( fMakefile, "cabman = " TOOL_PREFIX "cabman" SSEP "cabman" EXEPOSTFIX "\n" ); - fprintf ( fMakefile, "cdmake = " TOOL_PREFIX "cdmake" SSEP "cdmake" EXEPOSTFIX "\n" ); - fprintf ( fMakefile, "regtests = " TOOL_PREFIX "regtests" EXEPOSTFIX "\n" ); - fprintf ( fMakefile, "rsym = " TOOL_PREFIX "rsym" EXEPOSTFIX "\n" ); - fprintf ( fMakefile, "wrc = " TOOL_PREFIX "wrc" SSEP "wrc" EXEPOSTFIX "\n" ); - fprintf ( fMakefile, "\n" ); GenerateGlobalCFlagsAndProperties ( "=", ProjectNode.non_if_data ); @@ -202,20 +306,21 @@ }
void -MingwBackend::GenerateAllTarget () const +MingwBackend::GenerateAllTarget ( const vector<MingwModuleHandler*>& handlers ) const { fprintf ( fMakefile, "all:" ); int wrap_count = 0; - for ( size_t i = 0; i < ProjectNode.modules.size (); i++ ) + size_t iend = handlers.size (); + for ( size_t i = 0; i < iend; i++ ) { - Module& module = *ProjectNode.modules[i]; + const Module& module = handlers[i]->module; if ( IncludeInAllTarget ( module ) ) { if ( wrap_count++ == 5 ) fprintf ( fMakefile, " \\n\t\t" ), wrap_count = 0; fprintf ( fMakefile, " %s", - FixupTargetFilename ( module.GetPath () ).c_str () ); + GetTargetMacro(module).c_str () ); } } fprintf ( fMakefile, "\n\t\n\n" ); @@ -244,8 +349,7 @@ fprintf ( fMakefile, "INIT = %s\n", GetBuildToolDependencies ().c_str () ); - fprintf ( fMakefile, - "\n" ); + fprintf ( fMakefile, "\n" ); }
void @@ -272,8 +376,7 @@ xmlbuildFilenames.c_str ()); if ( i == ProjectNode.xmlbuildfiles.size () - 1 ) { - fprintf ( fMakefile, - "\n" ); + fprintf ( fMakefile, "\n" ); } else { @@ -285,8 +388,7 @@ } numberOfExistingFiles++; } - fprintf ( fMakefile, - "\n" ); + fprintf ( fMakefile, "\n" ); }
void @@ -297,27 +399,10 @@ automaticDependency.CheckAutomaticDependencies (); }
-void -MingwBackend::ProcessModule ( Module& module ) -{ - MingwModuleHandler* h = MingwModuleHandler::InstanciateHandler ( - module.node.location, - module.type, - this ); - MingwModuleHandler::string_list clean_files; - if ( module.host == HostDefault ) - { - module.host = h->DefaultHost(); - assert ( module.host != HostDefault ); - } - h->Process ( module, clean_files ); - h->GenerateCleanTarget ( module, clean_files ); -} - bool MingwBackend::IncludeDirectoryTarget ( const string& directory ) const { - if ( directory == "$(INTERMEDIATE)tools") + if ( directory == "$(INTERMEDIATE)" SSEP "tools") return false; else return true; @@ -326,7 +411,15 @@ void MingwBackend::GenerateDirectoryTargets () { - if ( directories.size () == 0 ) + // TODO FIXME - write new directory creation + for ( int i = 0; i < 2; i++ ) + { + Directory& d = *(!i ? int_directories : out_directories); + if ( i ) fprintf ( fMakefile, "ifneq ($(INTERMEDIATE),$(OUTPUT))\n" ); + d.CreateRule ( fMakefile, "" ); + if ( i ) fprintf ( fMakefile, "endif\n" ); + } + /*if ( directories.size () == 0 ) return; set_string::iterator i; @@ -345,13 +438,13 @@ } }
- directories.clear (); + directories.clear ();*/ }
string FixupTargetFilename ( const string& targetFilename ) { - return string("$(INTERMEDIATE)") + NormalizeFilename ( targetFilename ); + return NormalizeFilename ( targetFilename ); }
void _____
Modified: branches/xmlbuildsystem/reactos/tools/rbuild/backend/mingw/mingw.h --- branches/xmlbuildsystem/reactos/tools/rbuild/backend/mingw/mingw.h 2005-03-22 03:06:03 UTC (rev 14264) +++ branches/xmlbuildsystem/reactos/tools/rbuild/backend/mingw/mingw.h 2005-03-22 07:25:53 UTC (rev 14265) @@ -2,17 +2,18 @@
#define MINGW_H
#include "../backend.h" -#include "modulehandler.h"
+class Directory; +class MingwModuleHandler; + class MingwBackend : public Backend { public: MingwBackend ( Project& project ); - virtual ~MingwBackend () { }; + virtual ~MingwBackend (); virtual void Process (); - void CreateDirectoryTargetIfNotYetCreated ( const std::string& directory ); + std::string AddDirectoryTarget ( const std::string& directory, bool out ); private: - void ProcessModule ( Module& module ); void CreateMakefile (); void CloseMakefile () const; void GenerateHeader () const; @@ -24,16 +25,16 @@ void GenerateDirectoryTargets (); void GenerateGlobalVariables () const; bool IncludeInAllTarget ( const Module& module ) const; - void GenerateAllTarget () const; + void GenerateAllTarget ( const std::vector<MingwModuleHandler*>& handlers ) const; std::string GetBuildToolDependencies () const; void GenerateInitTarget () const; void GenerateXmlBuildFilesMacro() const; void CheckAutomaticDependencies (); bool IncludeDirectoryTarget ( const std::string& directory ) const; void DetectPCHSupport(); - std::setstd::string directories; FILE* fMakefile; bool use_pch; + Directory *int_directories, *out_directories; };
std::string FixupTargetFilename ( const std::string& targetFilename ); _____
Modified: branches/xmlbuildsystem/reactos/tools/rbuild/backend/mingw/modulehandler .cpp --- branches/xmlbuildsystem/reactos/tools/rbuild/backend/mingw/modulehandler .cpp 2005-03-22 03:06:03 UTC (rev 14264) +++ branches/xmlbuildsystem/reactos/tools/rbuild/backend/mingw/modulehandler .cpp 2005-03-22 07:25:53 UTC (rev 14265) @@ -10,29 +10,15 @@
#define CLEAN_FILE(f) clean_files.push_back ( f ); /*if ( module.name == "crt" ) printf ( "%s(%i): clean: %s\n", __FILE__, __LINE__, f.c_str() )*/
+static string ros_temp = "$(ROS_TEMPORARY)"; +MingwBackend* +MingwModuleHandler::backend = NULL; FILE* MingwModuleHandler::fMakefile = NULL; bool MingwModuleHandler::use_pch = false;
string -ReplaceExtension ( const string& filename, - const string& newExtension ) -{ - size_t index = filename.find_last_of ( '/' ); - if ( index == string::npos ) - index = 0; - size_t index2 = filename.find_last_of ( '\' ); - if ( index2 != string::npos && index2 > index ) - index = index2; - string tmp = filename.substr( index /*, filename.size() - index*/ ); - size_t ext_index = tmp.find_last_of( '.' ); - if ( ext_index != string::npos ) - return filename.substr ( 0, index + ext_index ) + newExtension; - return filename + newExtension; -} - -string PrefixFilename ( const string& filename, const string& prefix ) @@ -54,7 +40,8 @@ return out; }
-string v2s ( const vector<string>& v, int wrap_at ) +string +v2s ( const string_list& v, int wrap_at ) { if ( !v.size() ) return ""; @@ -73,88 +60,144 @@ return s; }
-MingwModuleHandler::MingwModuleHandler ( ModuleType moduletype, - MingwBackend* backend_ ) - : backend ( backend_ ) +string +GetTargetMacro ( const Module& module, bool with_dollar ) { + string s ( module.name ); + strupr ( &s[0] ); + s += "_TARGET"; + if ( with_dollar ) + return ssprintf ( "$(%s)", s.c_str() ); + return s; }
+MingwModuleHandler::MingwModuleHandler ( + const Module& module_ ) + + : module(module_) +{ +} + MingwModuleHandler::~MingwModuleHandler() { }
-const string & -MingwModuleHandler::PassThruCacheDirectory ( const string &file ) +/*static*/ void +MingwModuleHandler::SetBackend ( MingwBackend* backend_ ) { - backend->CreateDirectoryTargetIfNotYetCreated ( GetDirectory ( file ) ); - return file; + backend = backend_; }
-void +/*static*/ void MingwModuleHandler::SetMakefile ( FILE* f ) { fMakefile = f; }
-void +/*static*/ void MingwModuleHandler::SetUsePch ( bool b ) { use_pch = b; }
-MingwModuleHandler* -MingwModuleHandler::InstanciateHandler ( const string& location, - ModuleType moduletype, - MingwBackend* backend ) +/*static*/ string +MingwModuleHandler::PassThruCacheDirectory ( + const string &file, bool out ) { + string dir ( GetDirectory ( file ) ); + return backend->AddDirectoryTarget ( dir, out ) + SSEP + file; +} + +/*static*/ string +MingwModuleHandler::GetTargetFilename ( + const Module& module, + string_list* pclean_files ) +{ + string target = PassThruCacheDirectory ( + FixupTargetFilename ( module.GetPath () ), + true ); + if ( pclean_files ) + { + string_list& clean_files = *pclean_files; + CLEAN_FILE ( target ); + } + return target; +} [truncated at 1000 lines; 4465 more skipped]