Merge 13831:14550 from trunk
authorCasper Hornstrup <chorns@users.sourceforge.net>
Sun, 10 Apr 2005 14:32:30 +0000 (14:32 +0000)
committerCasper Hornstrup <chorns@users.sourceforge.net>
Sun, 10 Apr 2005 14:32:30 +0000 (14:32 +0000)
svn path=/branches/xmlbuildsystem/; revision=14575

58 files changed:
1  2 
reactos/Makefile
reactos/ReactOS.xml
reactos/apps/utils/net/ping/ping.xml
reactos/apps/utils/net/route/route.xml
reactos/baseaddress.xml
reactos/drivers/dd/serial/serial.xml
reactos/drivers/net/tcpip/tcpip/main.c
reactos/hal/hal/hal.c
reactos/hal/halx86/mp/halmp.xml
reactos/include/directory.xml
reactos/include/funcs.h
reactos/include/idl/idl.xml
reactos/lib/adns/adns.xml
reactos/lib/cpl/sysdm/sysdm.xml
reactos/lib/directory.xml
reactos/lib/gdi32/gdi32.xml
reactos/lib/iphlpapi/ifenum_reactos.c
reactos/lib/kernel32/kernel32.xml
reactos/lib/kernel32/makefile
reactos/lib/kernel32/misc/dllmain.c
reactos/lib/ntdll/ntdll.xml
reactos/lib/ole32/ole32.xml
reactos/lib/oleaut32/oleaut32.xml
reactos/lib/psapi/psapi.xml
reactos/lib/riched20/riched20.xml
reactos/lib/richedit/riched32.xml
reactos/lib/rtl/rtl.xml
reactos/lib/setupapi/cfgmgr.c
reactos/lib/setupapi/setupapi.xml
reactos/lib/smdll/smdll.xml
reactos/lib/smlib/smlib.xml
reactos/lib/uuid/uuid.c
reactos/media/themes/.gitignore
reactos/ntoskrnl/io/pnpreport.c
reactos/ntoskrnl/kd/gdbstub.c
reactos/ntoskrnl/ntoskrnl.xml
reactos/regtests/regtests/regtests.xml
reactos/services/rpcss/rpcss.xml
reactos/services/umpnpmgr/umpnpmgr.c
reactos/services/umpnpmgr/umpnpmgr.xml
reactos/subsys/smss/smss.xml
reactos/subsys/system/explorer/explorer.xml
reactos/subsys/system/explorer/taskbar/startmenu.cpp
reactos/subsys/system/format/format.xml
reactos/subsys/system/services/services.xml
reactos/subsys/win32k/main/dllmain.c
reactos/tools/rbuild/backend/mingw/mingw.cpp
reactos/tools/rbuild/backend/mingw/modulehandler.cpp
reactos/tools/rbuild/backend/mingw/modulehandler.h
reactos/tools/rbuild/bootstrap.cpp
reactos/tools/rbuild/module.cpp
reactos/tools/rbuild/rbuild.h
reactos/tools/rbuild/rbuild.txt
reactos/tools/tools.mak
reactos/tools/widl/widl.mak
reactos/tools/wrc/parser.y
reactos/tools/wrc/wrc.mak
reactos/tools/wrc/y.tab.c

 -# $Id$
 -#
 -# Global makefile
 -#
 -
 -PATH_TO_TOP = .
 -
 -include $(PATH_TO_TOP)/rules.mak
 -include $(PATH_TO_TOP)/config
 -
 -#
 -# Define to build ReactOS external targets
 -#
 -ifeq ($(ROS_BUILD_EXT),)
 -ROS_BUILD_EXT = no
 +# 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.
 +#
 +#    ROS_TEMPORARY
 +#        This variable controls where to put temporary files. Temporary files
 +#        are (usually small) generated files that are needed to generate the
 +#        intermediate or final output files. Examples of temporary files include
 +#        *.rci (preprocessed .rc files for wrc), *.tmp, and *.exp. N.B. Don't put
 +#        a path separator at the end. The variable defaults to the current
 +#        directory.
 +#
 +#    ROS_INSTALL
 +#        This variable controls where to install output files to when using
 +#        'make install'. N.B. Don't put a path separator at the end. The variable
 +#        defaults to .\reactos.
 +#
 +#    ROS_BUILDMAP
 +#        This variable controls if map files are to be generated for executable
 +#        output files. Map files have the extension .map. The value can be either
 +#        full (to build map files with assembly code), yes (to build map files
 +#        without source code) or no (to not build any map files). The variable
 +#        defaults to no.
 +#
 +#    ROS_RBUILDFLAGS
 +#        Pass parameters to rbuild.
 +#
 +
 +.PHONY: all
 +.PHONY: clean
 +all: makefile.auto
 +
 +.SUFFIXES:
 +
 +ifeq ($(HOST),)
 +ifeq ($(word 1,$(shell gcc -dumpmachine)),mingw32)
 +HOST=mingw32-windows
  else
 -ROS_BUILD_EXT = yes
 +HOST=mingw32-linux
 +endif
  endif
  
 -ifneq ($(MINIMALDEPENDENCIES),no)
 -IMPLIB =
 +# Default to half-verbose mode
 +ifeq ($(VERBOSE),no)
 +  Q = @
 +  HALFVERBOSEECHO = no
 +  BUILDNO_QUIET = -q
 +else
 +ifeq ($(VERBOSE),yes)
 +  Q =
 +  HALFVERBOSEECHO = no
 +  BUILDNO_QUIET =
  else
 -IMPLIB = implib
 +  Q = @
 +  HALFVERBOSEECHO = yes
 +  BUILDNO_QUIET = -q
  endif
 -
 -# Boot loaders
 -BOOT_LOADERS = freeldr
 -
 -# Required to run the system
 -COMPONENTS = ntoskrnl
 -
 -# Hardware Abstraction Layers
 -# halx86
 -HALS = halx86/up halx86/mp
 -
 -# Bus drivers
 -# acpi isapnp pci serenum
 -BUS = acpi isapnp pci serenum
 -
 -# Filesystem libraries
 -# vfatlib
 -LIB_FSLIB = vfatlib
 -
 -# libunicode, must be empty!
 -LIBUNICODE = 
 -
 -# Static libraries
 -LIB_STATIC = string rosrtl epsapi uuid libwine zlib rtl tgetopt pseh adns dxguid strmiids crt rossym wdmguid
 -
 -# Keyboard layout libraries
 -DLLS_KBD = kbdda kbddv kbdes kbdfr kbdgr kbdse kbduk kbdus
 -
 -# Control Panels
 -DLLS_CPL = cpl
 -
 -# Shell extensions
 -DLLS_SHELLEXT = shellext
 -
 -# User mode libraries
 -# libpcap packet epsapi
 -DLLS = acledit aclui advapi32 advpack cabinet cards comctl32 crtdll comdlg32 d3d8thk dbghelp expat fmifs freetype \
 -      gdi32 gdiplus glu32 hid imagehlp imm32 iphlpapi kernel32 lzexpand mesa32 midimap mmdrv mpr msacm msafd \
 -      msgina msi msimg32 msvcrt20 msvideo mswsock netapi32 ntdll ole32 oleaut32 oledlg olepro32 opengl32 \
 -      packet psapi riched20 richedit rpcrt4 samlib secur32 serialui setupapi shell32 shlwapi smlib smdll snmpapi \
 -      syssetup twain user32 userenv version wininet winmm winspool ws2help ws2_32 wsock32 wshirda dnsapi \
 -      urlmon shdocvw dinput dinput8 dxdiagn devenum dsound lsasrv $(DLLS_KBD) $(DLLS_CPL) $(DLLS_SHELLEXT)
 -
 -SUBSYS = smss win32k csrss ntvdm
 -
 -#
 -# Select the server(s) you want to build
 -#
 -#SERVERS = posix linux os2
 -SERVERS = win32
 -
 -# Driver support libraries
 -#bzip2 zlib oskittcp
 -DRIVERS_LIB = bzip2 oskittcp ip csq
 -
 -# Kernel mode device drivers
 -# Obsolete: ide
 -# beep blue floppy null parallel ramdrv serenum serial
 -DEVICE_DRIVERS = beep blue debugout null serial bootvid
 -
 -# Kernel mode input drivers
 -INPUT_DRIVERS = keyboard mouclass psaux sermouse
 -
 -# Kernel mode file system drivers
 -# cdfs ext2 fs_rec ms np vfat
 -FS_DRIVERS = cdfs fs_rec ms np vfat mup ntfs
 -
 -# Kernel mode networking drivers
 -# afd ndis npf tcpip tdi wshtcpip
 -NET_DRIVERS = afd ndis npf tcpip tdi wshtcpip
 -
 -# Kernel mode networking device drivers
 -# ne2000 pcnet
 -NET_DEVICE_DRIVERS = ne2000 pcnet
 -
 -# Kernel mode storage drivers
 -# atapi cdrom class2 disk scsiport
 -STORAGE_DRIVERS = atapi cdrom class2 disk floppy scsiport diskdump
 -
 -# System applications
 -# autochk cmd format services setup usetup welcome winlogon msiexec 
 -SYS_APPS = autochk calc cmd explorer expand format ibrowser msiexec regsvr32 \
 -  reporterror services setup taskmgr userinit usetup welcome vmwinst rundll32 \
 -  winlogon regedit winefile notepad reactos lsass
 -
 -# System services
 -SYS_SVC = rpcss eventlog umpnpmgr
 -
 -APPS = testsets utils
 -
 -
 -# External modules and (sub)systems for ReactOS
 -# rosapps posix os2 (requires c++) java (non-existant)
 -EXTERNALS = rosapps
 -
 -ifeq ($(ROS_BUILD_EXT),yes)
 -EXT_MODULES = $(EXTERNALS)
 +endif
 +ifeq ($(HALFVERBOSEECHO),yes)
 +  ECHO_CP      =@echo [COPY]     $@
 +  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_WIDL    =@echo [WIDL]     $@
 +  ECHO_BIN2RES =@echo [BIN2RES]  $<
 +  ECHO_DLLTOOL =@echo [DLLTOOL]  $@
 +  ECHO_LD      =@echo [LD]       $@
 +  ECHO_NM      =@echo [NM]       $@
 +  ECHO_OBJDUMP =@echo [OBJDUMP]  $@
 +  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_MKHIVE  =@echo [MKHIVE]   $@
 +  ECHO_REGTESTS=@echo [REGTESTS] $@
 +  ECHO_TEST    =@echo [TEST]     $@
  else
 -EXT_MODULES =
 +  ECHO_CP      =
 +  ECHO_MKDIR   =
 +  ECHO_BUILDNO =
 +  ECHO_INVOKE  =
 +  ECHO_PCH     =
 +  ECHO_CC      =
 +  ECHO_GAS     =
 +  ECHO_NASM    =
 +  ECHO_AR      =
 +  ECHO_WINEBLD =
 +  ECHO_WRC     =
++  ECHO_WIDL    =
 +  ECHO_BIN2RES =
 +  ECHO_DLLTOOL =
 +  ECHO_LD      =
 +  ECHO_NM      =
 +  ECHO_OBJDUMP =
 +  ECHO_RBUILD  =
 +  ECHO_RSYM    =
 +  ECHO_WMC     =
 +  ECHO_NCI     =
 +  ECHO_CABMAN  =
 +  ECHO_CDMAKE  =
 +  ECHO_MKHIVE  =
 +  ECHO_REGTESTS=
 +  ECHO_TEST    =
  endif
  
 -KERNEL_DRIVERS = $(DRIVERS_LIB) $(DEVICE_DRIVERS) $(INPUT_DRIVERS) $(FS_DRIVERS) \
 -      $(NET_DRIVERS) $(NET_DEVICE_DRIVERS) $(STORAGE_DRIVERS) VIDEO_DRIVERS USB_DRIVERS
 -
 -# Regression tests
 -REGTESTS = regtests
 -
 -all: bootstrap $(BOOT_LOADERS) $(COMPONENTS) $(REGTESTS) $(HALS) $(BUS) $(LIB_FSLIB) \
 -     $(DLLS) $(SUBSYS) $(KERNEL_DRIVERS) $(SYS_APPS) $(SYS_SVC) $(APPS) $(EXT_MODULES)
 -
 -bootstrap: dk implib iface_native
 -
 -depends: $(LIB_STATIC:%=%_depends) $(LIB_FSLIB:%=%_depends) msvcrt_depends $(DLLS:%=%_depends) \
 -         $(SUBSYS:%=%_depends) $(SYS_SVC:%=%_depends) \
 -         $(EXT_MODULES:%=%_depends) $(POSIX_LIBS:%=%_depends)
 -
 -implib: hallib $(LIB_STATIC) $(LIB_FSLIB) $(COMPONENTS:%=%_implib) $(HALS:%=%_implib) \
 -        $(BUS:%=%_implib) $(LIB_STATIC:%=%_implib) $(LIB_FSLIB:%=%_implib) \
 -        msvcrt_implib $(DLLS:%=%_implib) $(KERNEL_DRIVERS:%=%_implib) \
 -        $(SUBSYS:%=%_implib) $(SYS_APPS:%=%_implib) $(SYS_SVC:%=%_implib) \
 -        $(EXT_MODULES:%=%_implib) $(REGTESTS:%=%_implib)
 -
 -test: $(BOOT_LOADERS:%=%_test) $(COMPONENTS:%=%_test) $(HALS:%=%_test) $(BUS:%=%_test) \
 -          $(LIB_STATIC:%=%_test) $(LIB_FSLIB:%=%_test) msvcrt_test $(DLLS:%=%_test) \
 -          $(KERNEL_DRIVERS:%=%_test) $(SUBSYS:%=%_test) \
 -          $(SYS_SVC:%=%_test) $(EXT_MODULES:%=%_test)
 -
 -clean: tools dk_clean iface_native_clean hallib_clean \
 -       $(BOOT_LOADERS:%=%_clean) $(HALS:%=%_clean) $(COMPONENTS:%=%_clean) \
 -       $(BUS:%=%_clean) $(LIB_STATIC:%=%_clean) $(LIB_FSLIB:%=%_clean) \
 -       msvcrt_clean $(DLLS:%=%_clean) $(KERNEL_DRIVERS:%=%_clean) \
 -       $(SUBSYS:%=%_clean) $(SYS_APPS:%=%_clean) $(SYS_SVC:%=%_clean) \
 -       $(NET_APPS:%=%_clean) $(APPS:%=%_clean) $(EXT_MODULES:%=%_clean) \
 -       $(REGTESTS:%=%_clean) clean_after tools_clean
 -
 -clean_after:
 -      $(HALFVERBOSEECHO) [RM]      /include/roscfg.h
 -      $(RM) $(PATH_TO_TOP)/include/roscfg.h
 -
 -fastinstall: tools install_dirs install_before $(COMPONENTS:%=%_install) $(HALS:%=%_install) \
 -         $(BUS:%=%_install) $(LIB_STATIC:%=%_install) $(LIB_FSLIB:%=%_install) \
 -         msvcrt_install $(DLLS:%=%_install) $(KERNEL_DRIVERS:%=%_install) \
 -         $(SUBSYS:%=%_install) $(SYS_APPS:%=%_install) $(SYS_SVC:%=%_install) \
 -         $(APPS:%=%_install) $(EXT_MODULES:%=%_install) $(REGTESTS:%=%_install)
 -install: fastinstall registry
 -
 -FREELDR_DIR = boot/freeldr
 -
 -bootcd_directory_layout:
 -      $(HALFVERBOSEECHO) [RMKDIR]  $(BOOTCD_DIR)
 -      $(RMKDIR) $(BOOTCD_DIR)
 -      $(HALFVERBOSEECHO) [RMKDIR]  $(BOOTCD_DIR)/bootdisk
 -      $(RMKDIR) $(BOOTCD_DIR)/bootdisk
 -      $(HALFVERBOSEECHO) [RMKDIR]  $(BOOTCD_DIR)/loader
 -      $(RMKDIR) $(BOOTCD_DIR)/loader
 -      $(HALFVERBOSEECHO) [RMKDIR]  $(BOOTCD_DIR)/reactos
 -      $(RMKDIR) $(BOOTCD_DIR)/reactos
 -      $(HALFVERBOSEECHO) [RMKDIR]  $(BOOTCD_DIR)/reactos/system32
 -      $(RMKDIR) $(BOOTCD_DIR)/reactos/system32
 -
 -bootcd_bootstrap_files: $(BOOT_LOADERS:%=%_bootcd) $(COMPONENTS:%=%_bootcd) \
 -      $(HALS:%=%_bootcd) $(BUS:%=%_bootcd) $(LIB_STATIC:%=%_bootcd) \
 -      $(LIB_FSLIB:%=%_bootcd) msvcrt_bootcd $(DLLS:%=%_bootcd) \
 -      $(KERNEL_DRIVERS:%=%_bootcd) $(SUBSYS:%=%_bootcd) $(SYS_APPS:%=%_bootcd)
 -
 -bootcd_install_before:
 -      $(HALFVERBOSEECHO) [RLINE]   bootdata/autorun.inf to $(BOOTCD_DIR)/autorun.inf
 -      $(RLINE) bootdata/autorun.inf $(BOOTCD_DIR)/autorun.inf
 -      $(HALFVERBOSEECHO) [RLINE]   bootdata/readme.txt to $(BOOTCD_DIR)/readme.txt
 -      $(RLINE) bootdata/readme.txt $(BOOTCD_DIR)/readme.txt
 -      $(HALFVERBOSEECHO) [RLINE]   bootdata/hivecls.inf to $(BOOTCD_DIR)/reactos/hivecls.inf
 -      $(RLINE) bootdata/hivecls.inf $(BOOTCD_DIR)/reactos/hivecls.inf
 -      $(HALFVERBOSEECHO) [RLINE]   bootdata/hivedef.inf to $(BOOTCD_DIR)/reactos/hivedef.inf
 -      $(RLINE) bootdata/hivedef.inf $(BOOTCD_DIR)/reactos/hivedef.inf
 -      $(HALFVERBOSEECHO) [RLINE]   bootdata/hivesft.inf to $(BOOTCD_DIR)/reactos/hivesft.inf
 -      $(RLINE) bootdata/hivesft.inf $(BOOTCD_DIR)/reactos/hivesft.inf
 -      $(HALFVERBOSEECHO) [RLINE]   bootdata/hivesys.inf to $(BOOTCD_DIR)/reactos/hivesys.inf
 -      $(RLINE) bootdata/hivesys.inf $(BOOTCD_DIR)/reactos/hivesys.inf
 -      $(HALFVERBOSEECHO) [RLINE]   bootdata/txtsetup.sif to $(BOOTCD_DIR)/reactos/txtsetup.sif
 -      $(RLINE) bootdata/txtsetup.sif $(BOOTCD_DIR)/reactos/txtsetup.sif
 -      $(HALFVERBOSEECHO) [COPY]    bootdata/icon.ico to $(BOOTCD_DIR)/icon.ico
 -      $(CP) bootdata/icon.ico $(BOOTCD_DIR)/icon.ico
 -      $(HALFVERBOSEECHO) [COPY]    subsys/system/welcome/welcome.exe  to $(BOOTCD_DIR)/reactos/welcome.exe
 -      $(CP) subsys/system/welcome/welcome.exe $(BOOTCD_DIR)/reactos/welcome.exe
 -      $(HALFVERBOSEECHO) [COPY]    subsys/system/reactos/reactos.exe  to $(BOOTCD_DIR)/reactos/reactos.exe
 -      $(CP) subsys/system/reactos/reactos.exe $(BOOTCD_DIR)/reactos/reactos.exe
 -      $(HALFVERBOSEECHO) [COPY]    media/nls/c_1252.nls to $(BOOTCD_DIR)/reactos/c_1252.nls
 -      $(CP) media/nls/c_1252.nls $(BOOTCD_DIR)/reactos/c_1252.nls
 -      $(HALFVERBOSEECHO) [COPY]    media/nls/c_437.nls to $(BOOTCD_DIR)/reactos/c_437.nls
 -      $(CP) media/nls/c_437.nls $(BOOTCD_DIR)/reactos/c_437.nls
 -      $(HALFVERBOSEECHO) [COPY]    media/nls/l_intl.nls to $(BOOTCD_DIR)/reactos/l_intl.nls
 -      $(CP) media/nls/l_intl.nls $(BOOTCD_DIR)/reactos/l_intl.nls
 -      $(HALFVERBOSEECHO) [COPY]    media/drivers/etc/services to $(BOOTCD_DIR)/reactos/services
 -      $(CP) media/drivers/etc/services $(BOOTCD_DIR)/reactos/services
 -      $(HALFVERBOSEECHO) [COPY]    media/drivers/etc/KDBinit to $(BOOTCD_DIR)/reactos/KDBinit
 -      $(CP) media/drivers/etc/KDBinit $(BOOTCD_DIR)/reactos/KDBinit
 -
 -bootcd_basic: bootcd_directory_layout bootcd_bootstrap_files bootcd_install_before
 -
 -bootcd_makecd:
 -      $(CABMAN) /C bootdata/packages/reactos.dff /L $(BOOTCD_DIR)/reactos /I
 -      $(CABMAN) /C bootdata/packages/reactos.dff /RC $(BOOTCD_DIR)/reactos/reactos.inf /L $(BOOTCD_DIR)/reactos /N
 -      - $(RM) $(BOOTCD_DIR)/reactos/reactos.inf
 -      $(HALFVERBOSEECHO) [CDMAKE]  ReactOS.iso
 -      $(CDMAKE) -v -m -b $(BOOTCD_DIR)/../isoboot.bin $(BOOTCD_DIR) REACTOS ReactOS.iso
 -
 -ubootcd_unattend:
 -      $(HALFVERBOSEECHO) [COPY]    bootdata/unattend.inf to $(BOOTCD_DIR)/reactos/unattend.inf
 -      $(CP) bootdata/unattend.inf $(BOOTCD_DIR)/reactos/unattend.inf
 -
 -livecd_directory_layout:
 -      $(HALFVERBOSEECHO) [RMKDIR]  $(LIVECD_DIR)
 -      $(RMKDIR) $(LIVECD_DIR)
 -      $(HALFVERBOSEECHO) [RMKDIR]  $(LIVECD_DIR)/loader
 -      $(RMKDIR) $(LIVECD_DIR)/loader
 -      $(HALFVERBOSEECHO) [RMKDIR]  $(LIVECD_DIR)/reactos
 -      $(RMKDIR) $(LIVECD_DIR)/reactos
 -      $(HALFVERBOSEECHO) [RMKDIR]  $(LIVECD_DIR)/Profiles/All\ Users/Desktop
 -      $(RMKDIR) $(LIVECD_DIR)/Profiles/All\ Users/Desktop
 -      $(HALFVERBOSEECHO) [RMKDIR]  $(LIVECD_DIR)/Profiles/Default\ User/Desktop
 -      $(RMKDIR) $(LIVECD_DIR)/Profiles/Default\ User/Desktop
 -      $(HALFVERBOSEECHO) [RMKDIR]  $(LIVECD_DIR)/Profiles/Default\ User/My\ Documents
 -      $(RMKDIR) $(LIVECD_DIR)/Profiles/Default\ User/My\ Documents
 -      $(HALFVERBOSEECHO) [COPY]    ${FREELDR_DIR}/bootsect/isoboot.bin to ${LIVECD_DIR}/../isoboot.bin
 -      $(CP) ${FREELDR_DIR}/bootsect/isoboot.bin ${LIVECD_DIR}/../isoboot.bin
 -      $(HALFVERBOSEECHO) [COPY]    ${FREELDR_DIR}/freeldr/freeldr.sys to ${LIVECD_DIR}/loader/setupldr.sys
 -      $(CP) ${FREELDR_DIR}/freeldr/freeldr.sys ${LIVECD_DIR}/loader/setupldr.sys
 -      $(HALFVERBOSEECHO) [RLINE]   bootdata/livecd.ini to $(LIVECD_DIR)/freeldr.ini
 -      $(RLINE) bootdata/livecd.ini $(LIVECD_DIR)/freeldr.ini
 -
 -livecd_bootstrap_files:
 -      $(MAKE) LIVECD_INSTALL=yes fastinstall
 -
 -livecd_install_before:
 -      $(MKHIVE) bootdata $(LIVECD_DIR)/reactos/system32/config bootdata/livecd.inf bootdata/hiveinst.inf
 -
 -livecd_basic: livecd_directory_layout livecd_bootstrap_files livecd_install_before
 -
 -livecd_makecd:
 -      $(HALFVERBOSEECHO) [CDMAKE]  roslive.iso
 -      $(CDMAKE) -m -j -b $(LIVECD_DIR)/../isoboot.bin $(LIVECD_DIR) REACTOS roslive.iso
 -
 -bootcd: bootcd_basic bootcd_makecd
 -
 -ubootcd: bootcd_basic ubootcd_unattend bootcd_makecd
 -
 -livecd: livecd_basic livecd_makecd
 -
 -registry: tools
 -      $(MKHIVE) bootdata $(INSTALL_DIR)/system32/config bootdata/hiveinst.inf
 -
 -.PHONY: all bootstrap depends implib test clean clean_before install bootcd_directory_layout \
 -bootcd_bootstrap_files bootcd_install_before bootcd_basic bootcd_makecd ubootcd_unattend bootcd
 -
 -
 -#
 -# Boot Loaders
 -#
 -$(BOOT_LOADERS): %:
 -      $(MAKE) -C boot/$*
 -
 -$(BOOT_LOADERS:%=%_test): %_test:
 -      $(MAKE) -C boot/$* test
 -
 -$(BOOT_LOADERS:%=%_clean): %_clean:
 -      $(MAKE) -C boot/$* clean
 -
 -$(BOOT_LOADERS:%=%_bootcd): %_bootcd:
 -      $(MAKE) -C boot/$* bootcd
 -
 -.PHONY: $(BOOT_LOADERS) $(BOOT_LOADERS:%=%_test) $(BOOT_LOADERS:%=%_clean) \
 -        $(BOOT_LOADERS:%=%_bootcd)
 -
 -$(COMPONENTS): dk
 -
 -#
 -# System Applications
 -#
 -$(SYS_APPS): %: $(IMPLIB)
 -      $(MAKE) -C subsys/system/$*
 -
 -$(SYS_APPS:%=%_implib): %_implib: dk
 -      $(MAKE) --silent -C subsys/system/$* implib
 -
 -$(SYS_APPS:%=%_test): %_test:
 -      $(MAKE) -C subsys/system/$* test
 -
 -$(SYS_APPS:%=%_clean): %_clean:
 -      $(MAKE) -C subsys/system/$* clean
 -
 -$(SYS_APPS:%=%_install): %_install:
 -      $(MAKE) -C subsys/system/$* install
 -
 -$(SYS_APPS:%=%_bootcd): %_bootcd:
 -      $(MAKE) -C subsys/system/$* bootcd
 -
 -.PHONY: $(SYS_APPS) $(SYS_APPS:%=%_implib) $(SYS_APPS:%=%_test) \
 -  $(SYS_APPS:%=%_clean) $(SYS_APPS:%=%_install) $(SYS_APPS:%=%_bootcd)
 -
 -#
 -# System Services
 -#
 -$(SYS_SVC): %: $(IMPLIB)
 -      $(MAKE) -C services/$*
 -
 -$(SYS_SVC:%=%_depends): %_depends:
 -      $(MAKE) -C services/$* depends
 -
 -$(SYS_SVC:%=%_implib): %_implib: dk
 -      $(MAKE) --silent -C services/$* implib
 -
 -$(SYS_SVC:%=%_test): %_test:
 -      $(MAKE) -C services/$* test
 -
 -$(SYS_SVC:%=%_clean): %_clean:
 -      $(MAKE) -C services/$* clean
 -
 -$(SYS_SVC:%=%_install): %_install:
 -      $(MAKE) -C services/$* install
 -
 -.PHONY: $(SYS_SVC) $(SYS_SVC:%=%_depends) $(SYS_SVC:%=%_implib) \
 -  $(SYS_SVC:%=%_test) $(SYS_SVC:%=%_clean) $(SYS_SVC:%=%_install)
 -
 -
 -#
 -# Applications
 -#
 -#
 -# Extra (optional system) Applications
 -#
 -$(APPS): %: $(IMPLIB)
 -      $(MAKE) -C apps/$*
 -
 -# Not needed
 -# $(APPS:%=%_implib): %_implib: dk
 -#     $(MAKE) --silent -C apps/$* implib
 -
 -$(APPS:%=%_test): %_test:
 -      $(MAKE) -C apps/$* test
 -
 -$(APPS:%=%_clean): %_clean:
 -      $(MAKE) -C apps/$* clean
 -
 -$(APPS:%=%_install): %_install:
 -      $(MAKE) -C apps/$* install
 -
 -.PHONY: $(APPS) $(APPS:%=%_test) $(APPS:%=%_clean) $(APPS:%=%_install)
 -
 -
 -#
 -# External ports and subsystem personalities
 -#
 -$(EXTERNALS): %:
 -      $(MAKE) -C $(ROOT_PATH)/$*
 -
 -$(EXTERNALS:%=%_depends): %_depends:
 -      $(MAKE) -C $(ROOT_PATH)/$* depends
 -
 -$(EXTERNALS:%=%_implib): %_implib: dk
 -      $(MAKE) --silent -C $(ROOT_PATH)/$* implib
 -
 -$(EXTERNALS:%=%_clean): %_clean:
 -      $(MAKE) -C $(ROOT_PATH)/$* clean
 -
 -$(EXTERNALS:%=%_install): %_install:
 -      $(MAKE) -C $(ROOT_PATH)/$* install
 -
 -.PHONY: $(EXTERNALS) $(EXTERNALS:%=%_depends) $(EXTERNALS:%=%_implib) $(EXTERNALS:%=%_clean) $(EXTERNALS:%=%_install)
 -
 -
 -#
 -# Tools
 -#
 -tools:
 -      $(MAKE) --silent -C tools
 -
 -tools_implib:
 -      
 -
 -tools_test:
 -      
 -
 -tools_clean:
 -      $(MAKE) -C tools clean
 -
 -tools_install:
 -
 -.PHONY: tools tools_implib tools_test tools_clean tools_install
 -
 -
 -#
 -# Developer Kits
 -#
 -dk: tools
 -      @$(RMKDIR) $(DK_PATH)
 -      @$(RMKDIR) $(DDK_PATH)
 -      @$(RMKDIR) $(DDK_PATH_LIB)
 -      @$(RMKDIR) $(DDK_PATH_INC)
 -      @$(RMKDIR) $(SDK_PATH)
 -      @$(RMKDIR) $(SDK_PATH_LIB)
 -      @$(RMKDIR) $(SDK_PATH_INC)
 -      @$(RMKDIR) $(XDK_PATH)
 -      @$(RMKDIR) $(XDK_PATH_LIB)
 -#     @$(RMKDIR) $(XDK_PATH_INC)
 -
 -dk_implib:
 -
 -# WARNING! Be very sure that there are no important files
 -#          in these directories before cleaning them!!!
 -dk_clean:
 -      $(HALFVERBOSEECHO) [RM]      $(DDK_PATH_LIB)/*.a
 -      $(RM) $(DDK_PATH_LIB)/*.a
 -#     $(HALFVERBOSEECHO) [RM]      $(DDK_PATH_INC)/*.h
 -#     $(RM) $(DDK_PATH_INC)/*.h
 -      $(HALFVERBOSEECHO) [RMDIR]   $(DDK_PATH_LIB)
 -      $(RMDIR) $(DDK_PATH_LIB)
 -#     $(HALFVERBOSEECHO) [RMDIR]   $(DDK_PATH_INC)
 -#     $(RMDIR) $(DDK_PATH_INC)
 -      $(HALFVERBOSEECHO) [RM]      $(SDK_PATH_LIB)/*.a
 -      $(RM) $(SDK_PATH_LIB)/*.a
 -#     $(HALFVERBOSEECHO) [RM]      $(SDK_PATH_INC)/*.h
 -#     $(RM) $(SDK_PATH_INC)/*.h
 -      $(HALFVERBOSEECHO) [RMDIR]   $(SDK_PATH_LIB)
 -      $(RMDIR) $(SDK_PATH_LIB)
 -#     $(HALFVERBOSEECHO) [RMDIR]   $(SDK_PATH_INC)
 -#     $(RMDIR) $(SDK_PATH_INC)
 -      $(HALFVERBOSEECHO) [RM]      $(XDK_PATH_LIB)/*.a
 -      $(RM) $(XDK_PATH_LIB)/*.a
 -#     $(HALFVERBOSEECHO) [RM]      $(XDK_PATH_INC)/*.h
 -#     $(RM) $(XDK_PATH_INC)/*.h
 -      $(HALFVERBOSEECHO) [RMDIR]   $(XDK_PATH_LIB)
 -      $(RMDIR) $(XDK_PATH_LIB)
 -#     $(HALFVERBOSEECHO) [RMDIR]   $(XDK_PATH_INC)
 -#     $(RMDIR) $(XDK_PATH_INC)
 -
 -dk_install:
 -
 -.PHONY: dk dk_implib dk_clean dk_install
 -
 -
 -#
 -# Interfaces
 -#
 -iface_native:
 -      $(MAKE) --silent -C tools/nci
 -
 -iface_native_implib:
 -      
 -iface_native_test:
 -      
 -iface_native_clean:
 -      $(MAKE) --silent -C tools/nci clean
 -
 -iface_native_install:
 -
 -iface_native_bootcd:
 -
 -.PHONY: iface_native iface_native_implib iface_native_test iface_native_clean \
 -        iface_native_install iface_native_bootcd
 -
 -
 -#
 -# Bus driver rules
 -#
 -$(BUS): %: $(IMPLIB)
 -      $(MAKE) -C drivers/bus/$*
 -
 -$(BUS:%=%_implib): %_implib: dk
 -      $(MAKE) --silent -C drivers/bus/$* implib
 -
 -$(BUS:%=%_test): %_test:
 -      $(MAKE) -C drivers/bus/$* test
 -
 -$(BUS:%=%_clean): %_clean:
 -      $(MAKE) -C drivers/bus/$* clean
 -
 -$(BUS:%=%_install): %_install:
 -      $(MAKE) -C drivers/bus/$* install
 -
 -$(BUS:%=%_bootcd): %_bootcd:
 -      $(MAKE) -C drivers/bus/$* bootcd
 -
 -.PHONY: $(BUS) $(BUS:%=%_implib) $(BUS:%=%_clean) \
 -        $(BUS:%=%_install) $(BUS:%=%_bootcd)
 -
 -
 -#
 -# Driver support libraries rules
 -#
 -$(DRIVERS_LIB): %: $(IMPLIB)
 -      $(MAKE) -C drivers/lib/$*
 -
 -$(DRIVERS_LIB:%=%_implib): %_implib: dk
 -      $(MAKE) --silent -C drivers/lib/$* implib
 -
 -$(DRIVERS_LIB:%=%_test): %_test:
 -      $(MAKE) -C drivers/lib/$* test
 -
 -$(DRIVERS_LIB:%=%_clean): %_clean:
 -      $(MAKE) -C drivers/lib/$* clean
 -
 -$(DRIVERS_LIB:%=%_install): %_install:
 -      $(MAKE) -C drivers/lib/$* install
 -
 -$(DRIVERS_LIB:%=%_bootcd): %_bootcd:
 -      $(MAKE) -C drivers/lib/$* bootcd
 -
 -.PHONY: $(DRIVERS_LIB) $(DRIVERS_LIB:%=%_implib) $(DRIVERS_LIB:%=%_test) \
 -        $(DRIVERS_LIB:%=%_clean) $(DRIVERS_LIB:%=%_install) $(DRIVERS_LIB:%=%_bootcd)
 -
 -
 -#
 -# Device driver rules
 -#
 -$(DEVICE_DRIVERS): %: $(IMPLIB)
 -      $(MAKE) -C drivers/dd/$*
 -
 -$(DEVICE_DRIVERS:%=%_implib): %_implib: dk
 -      $(MAKE) --silent -C drivers/dd/$* implib
 -
 -$(DEVICE_DRIVERS:%=%_test): %_test:
 -      $(MAKE) -C drivers/dd/$* test
 -
 -$(DEVICE_DRIVERS:%=%_clean): %_clean:
 -      $(MAKE) -C drivers/dd/$* clean
 -
 -$(DEVICE_DRIVERS:%=%_install): %_install:
 -      $(MAKE) -C drivers/dd/$* install
 -
 -$(DEVICE_DRIVERS:%=%_bootcd): %_bootcd:
 -      $(MAKE) -C drivers/dd/$* bootcd
 -
 -.PHONY: $(DEVICE_DRIVERS) $(DEVICE_DRIVERS:%=%_implib) $(DEVICE_DRIVERS:%=%_test) \
 -        $(DEVICE_DRIVERS:%=%_clean) $(DEVICE_DRIVERS:%=%_install) $(DEVICE_DRIVERS:%=%_bootcd)
 -
 -
 -#
 -# Video device driver rules
 -#
 -VIDEO_DRIVERS: $(IMPLIB)
 -      $(MAKE) -C drivers/video
 -
 -VIDEO_DRIVERS_implib: dk
 -      $(MAKE) --silent -C drivers/video implib
 -
 -VIDEO_DRIVERS_test:
 -      $(MAKE) -C drivers/video test
 -
 -VIDEO_DRIVERS_clean:
 -      $(MAKE) -C drivers/video clean
 -
 -VIDEO_DRIVERS_install:
 -      $(MAKE) -C drivers/video install
 -
 -VIDEO_DRIVERS_bootcd:
 -      $(MAKE) -C drivers/video bootcd
 -
 -.PHONY: VIDEO_DRIVERS VIDEO_DRIVERS_implib VIDEO_DRIVERS_test\
 -        VIDEO_DRIVERS_clean VIDEO_DRIVERS_install VIDEO_DRIVERS_bootcd
 -
 -#
 -# USB device driver rules
 -#
 -USB_DRIVERS: $(IMPLIB)
 -      $(MAKE) -C drivers/usb
 -
 -USB_DRIVERS_implib: dk
 -      $(MAKE) --silent -C drivers/usb implib
 -
 -USB_DRIVERS_test:
 -      $(MAKE) -C drivers/usb test
 -
 -USB_DRIVERS_clean:
 -      $(MAKE) -C drivers/usb clean
 -
 -USB_DRIVERS_install:
 -      $(MAKE) -C drivers/usb install
 -
 -USB_DRIVERS_bootcd:
 -      $(MAKE) -C drivers/usb bootcd
 -
 -.PHONY: USB_DRIVERS USB_DRIVERS_implib USB_DRIVERS_test\
 -        USB_DRIVERS_clean USB_DRIVERS_install USB_DRIVERS_bootcd
 -
 -
 -#
 -# Input driver rules
 -#
 -$(INPUT_DRIVERS): %: $(IMPLIB)
 -      $(MAKE) -C drivers/input/$*
 -
 -$(INPUT_DRIVERS:%=%_implib): %_implib: dk
 -      $(MAKE) --silent -C drivers/input/$* implib
 -
 -$(INPUT_DRIVERS:%=%_test): %_test:
 -      $(MAKE) -C drivers/input/$* test
 -
 -$(INPUT_DRIVERS:%=%_clean): %_clean:
 -      $(MAKE) -C drivers/input/$* clean
 -
 -$(INPUT_DRIVERS:%=%_install): %_install:
 -      $(MAKE) -C drivers/input/$* install
 -
 -$(INPUT_DRIVERS:%=%_bootcd): %_bootcd:
 -      $(MAKE) -C drivers/input/$* bootcd
 -
 -.PHONY: $(INPUT_DRIVERS) $(INPUT_DRIVERS:%=%_implib) $(INPUT_DRIVERS:%=%_test) \
 -        $(INPUT_DRIVERS:%=%_clean) $(INPUT_DRIVERS:%=%_install) $(INPUT_DRIVERS:%=%_bootcd)
 -
 -#
 -# Filesystem driver rules
 -#
 -$(FS_DRIVERS): %: $(IMPLIB)
 -      $(MAKE) -C drivers/fs/$*
 -
 -$(FS_DRIVERS:%=%_implib): %_implib: dk
 -      $(MAKE) --silent -C drivers/fs/$* implib
 -
 -$(FS_DRIVERS:%=%_test): %_test:
 -      $(MAKE) -C drivers/fs/$* test
 -
 -$(FS_DRIVERS:%=%_clean): %_clean:
 -      $(MAKE) -C drivers/fs/$* clean
 -
 -$(FS_DRIVERS:%=%_install): %_install:
 -      $(MAKE) -C drivers/fs/$* install
 -
 -$(FS_DRIVERS:%=%_bootcd): %_bootcd:
 -      $(MAKE) -C drivers/fs/$* bootcd
 -
 -.PHONY: $(FS_DRIVERS) $(FS_DRIVERS:%=%_implib) $(FS_DRIVERS:%=%_test) \
 -        $(FS_DRIVERS:%=%_clean) $(FS_DRIVERS:%=%_install) $(FS_DRIVERS:%=%_bootcd)
 -
 -
 -#
 -# Network driver rules
 -#
 -$(NET_DRIVERS): %: $(IMPLIB)
 -      $(MAKE) -C drivers/net/$*
 -
 -$(NET_DRIVERS:%=%_implib): %_implib: dk
 -      $(MAKE) --silent -C drivers/net/$* implib
 -
 -$(NET_DRIVERS:%=%_test): %_test:
 -      $(MAKE) -C drivers/net/$* test
 -
 -$(NET_DRIVERS:%=%_clean): %_clean:
 -      $(MAKE) -C drivers/net/$* clean
 -
 -$(NET_DRIVERS:%=%_install): %_install:
 -      $(MAKE) -C drivers/net/$* install
 -
 -$(NET_DRIVERS:%=%_bootcd): %_bootcd:
 -      $(MAKE) -C drivers/net/$* bootcd
 -
 -.PHONY: $(NET_DRIVERS) $(NET_DRIVERS:%=%_implib) $(NET_DRIVERS:%=%_test) \
 -        $(NET_DRIVERS:%=%_clean) $(NET_DRIVERS:%=%_install) $(NET_DRIVERS:%=%_bootcd)
 -
 -
 -#
 -# Network device driver rules
 -#
 -$(NET_DEVICE_DRIVERS): %: $(IMPLIB)
 -      $(MAKE) -C drivers/net/dd/$*
 -
 -$(NET_DEVICE_DRIVERS:%=%_implib): %_implib: dk
 -      $(MAKE) --silent -C drivers/net/dd/$* implib
 -
 -$(NET_DEVICE_DRIVERS:%=%_test): %_test:
 -      $(MAKE) -C drivers/net/dd/$* test
 -
 -$(NET_DEVICE_DRIVERS:%=%_clean): %_clean:
 -      $(MAKE) -C drivers/net/dd/$* clean
 -
 -$(NET_DEVICE_DRIVERS:%=%_install): %_install:
 -      $(MAKE) -C drivers/net/dd/$* install
 -
 -$(NET_DEVICE_DRIVERS:%=%_bootcd): %_bootcd:
 -      $(MAKE) -C drivers/net/dd/$* bootcd
 -
 -.PHONY: $(NET_DEVICE_DRIVERS) $(NET_DEVICE_DRIVERS:%=%_clean) \
 -        $(NET_DEVICE_DRIVERS:%=%_implib) $(NET_DEVICE_DRIVERS:%=%_test) \
 -        $(NET_DEVICE_DRIVERS:%=%_install) $(NET_DEVICE_DRIVERS:%=%_bootcd)
 -
 -
 -#
 -# storage driver rules
 -#
 -$(STORAGE_DRIVERS): %: $(IMPLIB)
 -      $(MAKE) -C drivers/storage/$*
 -
 -$(STORAGE_DRIVERS:%=%_implib): %_implib: dk
 -      $(MAKE) --silent -C drivers/storage/$* implib
 -
 -$(STORAGE_DRIVERS:%=%_test): %_test:
 -      $(MAKE) -C drivers/storage/$* test
 -
 -$(STORAGE_DRIVERS:%=%_clean): %_clean:
 -      $(MAKE) -C drivers/storage/$* clean
 -
 -$(STORAGE_DRIVERS:%=%_install): %_install:
 -      $(MAKE) -C drivers/storage/$* install
 -
 -$(STORAGE_DRIVERS:%=%_bootcd): %_bootcd:
 -      $(MAKE) -C drivers/storage/$* bootcd
 -
 -.PHONY: $(STORAGE_DRIVERS) $(STORAGE_DRIVERS:%=%_clean) \
 -        $(STORAGE_DRIVERS:%=%_implib) $(STORAGE_DRIVERS:%=%_test) \
 -        $(STORAGE_DRIVERS:%=%_install) $(STORAGE_DRIVERS:%=%_bootcd)
 -
 -
 -#
 -# Required system components
 -#
 -ntoskrnl: bootstrap
 -      $(MAKE) -C ntoskrnl
 -
 -ntoskrnl_implib: dk
 -      $(MAKE) --silent -C ntoskrnl implib
 -
 -ntoskrnl_test:
 -      $(MAKE) -C ntoskrnl test
 -
 -ntoskrnl_clean:
 -      $(MAKE) -C ntoskrnl clean
 -
 -ntoskrnl_install:
 -      $(MAKE) -C ntoskrnl install
 -
 -ntoskrnl_bootcd:
 -      $(MAKE) -C ntoskrnl bootcd
 -
 -.PHONY: ntoskrnl ntoskrnl_implib ntoskrnl_test \
 -        ntoskrnl_clean ntoskrnl_install ntoskrnl_bootcd
 -
 -
 -#
 -# Hardware Abstraction Layer import library
 -#
 -hallib: $(PATH_TO_TOP)/include/roscfg.h ntoskrnl_implib
 -      $(MAKE) --silent -C hal/hal
 -
 -hallib_implib: dk ntoskrnl_implib
 -      $(MAKE) --silent -C hal/hal implib
 -
 -hallib_test:
 -      $(MAKE) -C hal/hal test
 -
 -hallib_clean:
 -      $(MAKE) -C hal/hal clean
 -
 -hallib_install:
 -      $(MAKE) -C hal/hal install
 -
 -hallib_bootcd:
 -      $(MAKE) -C hal/hal bootcd
 -
 -.PHONY: hallib hallib_implib hallib_test hallib_clean \
 -        hallib_install hallib_bootcd
  
 +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 = /
 +      mkdir = -$(Q)mkdir -p
 +      gcc = $(Q)mingw32-gcc
 +      gpp = $(Q)mingw32-g++
 +      ld = $(Q)mingw32-ld
 +      nm = $(Q)mingw32-nm
 +      objdump = $(Q)mingw32-objdump
 +      ar = $(Q)mingw32-ar
 +      objcopy = $(Q)mingw32-objcopy
 +      dlltool = $(Q)mingw32-dlltool
 +      windres = $(Q)mingw32-windres
 +      rm = $(Q)rm -f
 +      cp = $(Q)cp
 +      NUL = /dev/null
 +else # mingw32-windows
 +      EXEPREFIX =
 +      EXEPOSTFIX = .exe
 +      ROS_EMPTY =
 +      SEP = \$(ROS_EMPTY)
 +      mkdir = -$(Q)mkdir
 +      gcc = $(Q)gcc
 +      gpp = $(Q)g++
 +      ld = $(Q)ld
 +      nm = $(Q)nm
 +      objdump = $(Q)objdump
 +      ar = $(Q)ar
 +      objcopy = $(Q)objcopy
 +      dlltool = $(Q)dlltool
 +      windres = $(Q)windres
 +      rm = $(Q)del /f /q
 +      cp = $(Q)copy /y
 +      NUL = NUL
 +endif
  
 -#
 -# Hardware Abstraction Layers
 -#
 -ifeq ($(CONFIG_SMP),1)
 -halx86: halx86/mp
 +ifneq ($(ROS_INTERMEDIATE),)
 +  INTERMEDIATE := $(ROS_INTERMEDIATE)
  else
 -halx86: halx86/up
 +  INTERMEDIATE := obj-i386
  endif
 +INTERMEDIATE_ := $(INTERMEDIATE)$(SEP)
  
 -$(HALS): %: $(IMPLIB)
 -      $(MAKE) -C hal/$*
 -
 -$(HALS:%=%_implib): %_implib: dk
 -      $(MAKE) --silent -C hal/$* implib
 -
 -$(HALS:%=%_test): %_test:
 -      $(MAKE) -C hal/$* test
 -
 -$(HALS:%=%_clean): %_clean:
 -      $(MAKE) -C hal/$* clean
 -
 -$(HALS:%=%_install): %_install:
 -      $(MAKE) -C hal/$* install
 -
 -$(HALS:%=%_bootcd): %_bootcd:
 -      $(MAKE) -C hal/$* bootcd
 -
 -.PHONY: $(HALS) $(HALS:%=%_implib) $(HALS:%=%_test) \
 -        $(HALS:%=%_clean) $(HALS:%=%_install) $(HALS:%=%_bootcd)
 -
 -
 -#
 -# File system libraries
 -#
 -$(LIB_FSLIB): %: dk
 -      $(MAKE) -C lib/fslib/$*
 -
 -$(LIB_FSLIB:%=%_depends): %_depends:
 -      $(MAKE) -C lib/fslib/$* depends
 -
 -$(LIB_FSLIB:%=%_implib): %_implib: dk
 -      $(MAKE) --silent -C lib/fslib/$* implib
 -
 -$(LIB_FSLIB:%=%_test): %_test:
 -      $(MAKE) -C lib/fslib/$* test
 -
 -$(LIB_FSLIB:%=%_clean): %_clean:
 -      $(MAKE) -C lib/fslib/$* clean
 -
 -$(LIB_FSLIB:%=%_install): %_install:
 -      $(MAKE) -C lib/fslib/$* install
 -
 -$(LIB_FSLIB:%=%_bootcd): %_bootcd:
 -      $(MAKE) -C lib/fslib/$* bootcd
 -
 -.PHONY: $(LIB_FSLIB) $(LIB_FSLIB:%=%_depends) $(LIB_FSLIB:%=%_implib) \
 -        $(LIB_FSLIB:%=%_test) $(LIB_FSLIB:%=%_clean) \
 -        $(LIB_FSLIB:%=%_install) $(LIB_FSLIB:%=%_bootcd)
 -
 -
 -#
 -# Static libraries
 -#
 -$(LIB_STATIC): %: dk
 -      $(MAKE) --silent -C lib/$*
 -
 -$(LIB_STATIC:%=%_depends): %_depends:
 -      $(MAKE) -C lib/string depends
 -
 -$(LIB_STATIC:%=%_implib): %_implib: dk
 -      $(MAKE) --silent -C lib/$* implib
 -
 -$(LIB_STATIC:%=%_test): %_test:
 -      $(MAKE) -C lib/$* test
 -
 -$(LIB_STATIC:%=%_clean): %_clean:
 -      $(MAKE) -C lib/$* clean
 -
 -$(LIB_STATIC:%=%_install): %_install:
 -      $(MAKE) -C lib/$* install
 -
 -$(LIB_STATIC:%=%_bootcd): %_bootcd:
 -      $(MAKE) -C lib/$* bootcd
 -
 -.PHONY: $(LIB_STATIC) $(LIB_STATIC:%=%_depends) $(LIB_STATIC:%=%_implib) \
 -        $(LIB_STATIC:%=%_test) $(LIB_STATIC:%=%_clean) \
 -        $(LIB_STATIC:%=%_install) $(LIB_STATIC:%=%_bootcd)
 -
 -
 -#
 -# MSVCRT is seperate since CRTDLL depend on this
 -#
 -msvcrt: $(IMPLIB)
 -      $(MAKE) -C lib/msvcrt
 -
 -msvcrt_depends:
 -      $(MAKE) -C lib/msvcrt depends
 -
 -msvcrt_implib: dk
 -      $(MAKE) --silent -C lib/msvcrt implib
 -
 -msvcrt_test:
 -      $(MAKE) -C lib/msvcrt test
 -
 -msvcrt_clean:
 -      $(MAKE) -C lib/msvcrt clean
 -
 -msvcrt_install:
 -      $(MAKE) -C lib/msvcrt install
 -
 -msvcrt_bootcd:
 -      $(MAKE) -C lib/msvcrt bootcd
 -
 -.PHONY: msvcrt msvcrt_depends msvcrt_implib msvcrt_test \
 -        msvcrt_clean msvcrt_install msvcrt_bootcd
 -
 -
 -#
 -# DLLs
 -#
 -$(DLLS): %: $(IMPLIB) msvcrt
 -      $(MAKE) -C lib/$*
 -
 -$(DLLS:%=%_depends): %_depends:
 -      $(MAKE) -C lib/$* depends
 -
 -$(DLLS:%=%_implib): %_implib: dk
 -      $(MAKE) --silent -C lib/$* implib
 -
 -$(DLLS:%=%_test): %_test:
 -      $(MAKE) -C lib/$* test
 -
 -$(DLLS:%=%_clean): %_clean:
 -      $(MAKE) -C lib/$* clean
 -
 -$(DLLS:%=%_install): %_install:
 -      $(MAKE) -C lib/$* install
 -
 -$(DLLS:%=%_bootcd): %_bootcd:
 -      $(MAKE) -C lib/$* bootcd
 -
 -.PHONY: $(DLLS) $(DLLS:%=%_depends) $(DLLS:%=%_implib) $(DLLS:%=%_test) \
 -        $(DLLS:%=%_clean) $(DLLS:%=%_install) $(DLLS:%=%_bootcd)
 -
 -
 -#
 -# Subsystem support modules
 -#
 -$(SUBSYS): %: $(IMPLIB)
 -      $(MAKE) -C subsys/$*
 -
 -$(SUBSYS:%=%_depends): %_depends:
 -      $(MAKE) -C subsys/$* depends
 -
 -$(SUBSYS:%=%_implib): %_implib: dk
 -      $(MAKE) --silent -C subsys/$* implib
 -
 -$(SUBSYS:%=%_test): %_test:
 -      $(MAKE) -C subsys/$* test
 -
 -$(SUBSYS:%=%_clean): %_clean:
 -      $(MAKE) -C subsys/$* clean
 -
 -$(SUBSYS:%=%_install): %_install:
 -      $(MAKE) -C subsys/$* install
 -
 -$(SUBSYS:%=%_bootcd): %_bootcd:
 -      $(MAKE) -C subsys/$* bootcd
 -
 -.PHONY: $(SUBSYS) $(SUBSYS:%=%_depends) $(SUBSYS:%=%_implib) $(SUBSYS:%=%_test) \
 -        $(SUBSYS:%=%_clean) $(SUBSYS:%=%_install) $(SUBSYS:%=%_bootcd)
 -
 -#
 -# Regression testsuite
 -#
 -
 -$(REGTESTS): %: $(IMPLIB)
 -      $(MAKE) --silent -C regtests
 -
 -$(REGTESTS:%=%_implib): %_implib: dk
 -      $(MAKE) --silent -C regtests implib
 -
 -$(REGTESTS:%=%_clean): %_clean:
 -      $(MAKE) -C regtests clean
 -
 -$(REGTESTS:%=%_install): %_install:
 -      $(MAKE) -C regtests install
 -
 -.PHONY: $(REGTESTS) $(REGTESTS:%=%_depends) $(SUBSYS:%=%_clean) $(REGTESTS:%=%_install)
 -
 -
 -#
 -# Create an installation
 -#
 -
 -install_clean:
 -      $(HALFVERBOSEECHO) [RM]      $(INSTALL_DIR)/system32/drivers/*.*
 -      $(RM) $(INSTALL_DIR)/system32/drivers/*.*
 -      $(HALFVERBOSEECHO) [RM]      $(INSTALL_DIR)/system32/config/*.*
 -      $(RM) $(INSTALL_DIR)/system32/config/*.*
 -      $(HALFVERBOSEECHO) [RM]      $(INSTALL_DIR)/system32/*.*
 -      $(RM) $(INSTALL_DIR)/system32/*.*
 -      $(HALFVERBOSEECHO) [RM]      $(INSTALL_DIR)/media/fonts/*.*
 -      $(RM) $(INSTALL_DIR)/media/fonts/*.*
 -      $(HALFVERBOSEECHO) [RM]      $(INSTALL_DIR)/media/*.*
 -      $(RM) $(INSTALL_DIR)/media/*.*
 -      $(HALFVERBOSEECHO) [RM]      $(INSTALL_DIR)/inf/*.*
 -      $(RM) $(INSTALL_DIR)/inf/*.*
 -      $(HALFVERBOSEECHO) [RM]      $(INSTALL_DIR)/bin/*.*
 -      $(RM) $(INSTALL_DIR)/bin/*.*
 -      $(HALFVERBOSEECHO) [RMDIR]   $(INSTALL_DIR)/system32/drivers
 -      $(RMDIR) $(INSTALL_DIR)/system32/drivers
 -      $(HALFVERBOSEECHO) [RMDIR]   $(INSTALL_DIR)/system32/config
 -      $(RMDIR) $(INSTALL_DIR)/system32/config
 -      $(HALFVERBOSEECHO) [RMDIR]   $(INSTALL_DIR)/system32
 -      $(RMDIR) $(INSTALL_DIR)/system32
 -      $(HALFVERBOSEECHO) [RMDIR]   $(INSTALL_DIR)/media/fonts
 -      $(RMDIR) $(INSTALL_DIR)/media/fonts
 -      $(HALFVERBOSEECHO) [RMDIR]   $(INSTALL_DIR)/media
 -      $(RMDIR) $(INSTALL_DIR)/media
 -      $(HALFVERBOSEECHO) [RMDIR]   $(INSTALL_DIR)/inf
 -      $(RMDIR) $(INSTALL_DIR)/inf
 -      $(HALFVERBOSEECHO) [RMDIR]   $(INSTALL_DIR)/bin
 -      $(RMDIR) $(INSTALL_DIR)/bin
 -      $(HALFVERBOSEECHO) [RMDIR]   $(INSTALL_DIR)
 -      $(RMDIR) $(INSTALL_DIR)
 -
 -install_dirs:
 -      $(HALFVERBOSEECHO) [RMKDIR]  $(INSTALL_DIR)
 -      $(RMKDIR) $(INSTALL_DIR)
 -      $(HALFVERBOSEECHO) [RMKDIR]  $(INSTALL_DIR)/bin
 -      $(RMKDIR) $(INSTALL_DIR)/bin
 -      $(HALFVERBOSEECHO) [RMKDIR]  $(INSTALL_DIR)/inf
 -      $(RMKDIR) $(INSTALL_DIR)/inf
 -      $(HALFVERBOSEECHO) [RMKDIR]  $(INSTALL_DIR)/media
 -      $(RMKDIR) $(INSTALL_DIR)/media
 -      $(HALFVERBOSEECHO) [RMKDIR]  $(INSTALL_DIR)/media/fonts
 -      $(RMKDIR) $(INSTALL_DIR)/media/fonts
 -      $(HALFVERBOSEECHO) [RMKDIR]  $(INSTALL_DIR)/system32
 -      $(RMKDIR) $(INSTALL_DIR)/system32
 -      $(HALFVERBOSEECHO) [RMKDIR]  $(INSTALL_DIR)/system32/config
 -      $(RMKDIR) $(INSTALL_DIR)/system32/config
 -      $(HALFVERBOSEECHO) [RMKDIR]  $(INSTALL_DIR)/system32/drivers
 -      $(RMKDIR) $(INSTALL_DIR)/system32/drivers
 -      $(HALFVERBOSEECHO) [RMKDIR]  $(INSTALL_DIR)/system32/drivers/etc
 -      $(RMKDIR) $(INSTALL_DIR)/system32/drivers/etc
 -
 -install_before:
 -      $(HALFVERBOSEECHO) [INSTALL] media/inf to $(INSTALL_DIR)/inf
 -      $(CP) media/inf $(INSTALL_DIR)/inf
 -      $(HALFVERBOSEECHO) [INSTALL] media/fonts to $(INSTALL_DIR)/media/fonts
 -      $(CP) media/fonts $(INSTALL_DIR)/media/fonts
 -      $(HALFVERBOSEECHO) [INSTALL] media/nls to $(INSTALL_DIR)/system32
 -      $(CP) media/nls $(INSTALL_DIR)/system32
 -      $(HALFVERBOSEECHO) [INSTALL] media/nls/c_1252.nls to $(INSTALL_DIR)/system32/ansi.nls
 -      $(CP) media/nls/c_1252.nls $(INSTALL_DIR)/system32/ansi.nls
 -      $(HALFVERBOSEECHO) [INSTALL] media/nls/c_437.nls to $(INSTALL_DIR)/system32/oem.nls
 -      $(CP) media/nls/c_437.nls $(INSTALL_DIR)/system32/oem.nls
 -      $(HALFVERBOSEECHO) [INSTALL] media/nls/l_intl.nls to $(INSTALL_DIR)/system32/casemap.nls
 -      $(CP) media/nls/l_intl.nls $(INSTALL_DIR)/system32/casemap.nls
 -      $(HALFVERBOSEECHO) [INSTALL] media/drivers/etc/services to $(INSTALL_DIR)/system32/drivers/etc/services
 -      $(CP) media/drivers/etc/services $(INSTALL_DIR)/system32/drivers/etc/services
 -      $(HALFVERBOSEECHO) [INSTALL] media/drivers/etc/KDBinit to $(INSTALL_DIR)/system32/drivers/etc/KDBinit
 -      $(CP) media/drivers/etc/KDBinit $(INSTALL_DIR)/system32/drivers/etc/KDBinit
 -
 -.PHONY: install_clean install_dirs install_before
 +ifneq ($(ROS_OUTPUT),)
 +  OUTPUT := $(ROS_OUTPUT)
 +else
 +  OUTPUT := output-i386
 +endif
 +OUTPUT_ := $(OUTPUT)$(SEP)
  
 +ifneq ($(ROS_TEMPORARY),)
 +  TEMPORARY := $(ROS_TEMPORARY)
 +else
 +  TEMPORARY :=
 +endif
 +TEMPORARY_ := $(TEMPORARY)$(SEP)
  
 -etags:
 -      find . -name "*.[ch]" -print | etags --language=c -
 +ifneq ($(ROS_INSTALL),)
 +  INSTALL := $(ROS_INSTALL)
 +else
 +  INSTALL := reactos
 +endif
 +INSTALL_ := $(INSTALL)$(SEP)
  
 +$(INTERMEDIATE):
 +      ${mkdir} $@
  
 -docu:
 -      echo generating ReactOS NTOSKRNL documentation ...
 -      $(MAKE) -C ntoskrnl docu
 +ifneq ($(INTERMEDIATE),$(OUTPUT))
 +$(OUTPUT):
 +      ${mkdir} $@
 +endif
  
 -      echo generating ReactOS drivers documentation ...
 -      $(MAKE) -C drivers docu
  
 -      echo generating ReactOS NTDLL documentation ...
 -      $(MAKE) -C lib/ntdll docu
 +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
  
 -      echo generating ReactOS Freetype documentation ...
 -      $(MAKE) -C lib/freetype docu
 +include lib/lib.mak
 +include tools/tools.mak
 +-include makefile.auto
  
 -      echo generating ReactOS libs documentation ...
 -      $(MAKE) -C lib docu
 +PREAUTO := \
 +      $(BUILDNO_H) \
 +      $(BUGCODES_H) \
 +      $(BUGCODES_RC) \
 +      $(ERRCODES_H) \
 +      $(ERRCODES_RC) \
 +      $(NCI_SERVICE_FILES)
  
 -      echo generating ReactOS WIN32K documentation ...
 -      $(MAKE) -C subsys/win32k docu
 +makefile.auto: $(RBUILD_TARGET) $(PREAUTO) $(XMLBUILDFILES)
 +      $(ECHO_RBUILD)
 +      $(Q)$(RBUILD_TARGET) $(ROS_RBUILDFLAGS) mingw
  
 -      echo generating ReactOS apps+tools documentation ...
 -      $(MAKE) -C apps docu
  
 -      echo generating ReactOS explorer documentation ...
 -      $(MAKE) -C subsys/system/explorer full-docu
 +$(BUGCODES_H) $(BUGCODES_RC): $(WMC_TARGET) $(NTOSKRNL_MC)
 +      $(ECHO_WMC)
 +      $(Q)$(WMC_TARGET) -i -H $(BUGCODES_H) -o $(BUGCODES_RC) $(NTOSKRNL_MC)
  
 -      echo generating remaining ReactOS documentation ...
 -      doxygen Doxyfile
 +$(ERRCODES_H) $(ERRCODES_RC): $(WMC_TARGET) $(KERNEL32_MC)
 +      $(ECHO_WMC)
 +      $(Q)$(WMC_TARGET) -i -H $(ERRCODES_H) -o $(ERRCODES_RC) $(KERNEL32_MC)
  
 -.PHONY: docu
 +.PHONY: makefile_auto_clean
 +makefile_auto_clean:
 +      -@$(rm) makefile.auto $(PREAUTO) 2>$(NUL)
  
 -include $(TOOLS_PATH)/config.mk
 +.PHONY: clean
 +clean: makefile_auto_clean
index 284e19b,0000000..12437ee
mode 100644,000000..100644
--- /dev/null
@@@ -1,62 -1,0 +1,65 @@@
 +<?xml version="1.0"?>\r
 +<!DOCTYPE project SYSTEM "tools/rbuild/project.dtd">\r
 +<project name="ReactOS" makefile="makefile.auto" xmlns:xi="http://www.w3.org/2001/XInclude">\r
 +      <xi:include href="config.xml">\r
 +              <xi:fallback>\r
 +                      <xi:include href="config.template.xml" />\r
 +              </xi:fallback>\r
 +      </xi:include>\r
 +\r
 +      <xi:include href="baseaddress.xml" />\r
 +\r
 +      <define name="_M_IX86" />\r
 +      <if property="DBG" value="1">\r
 +              <define name="DBG" value="1" />\r
 +              <property name="DBG_OR_KDBG" value="true" />\r
 +      </if>\r
 +      <if property="KDBG" value="1">\r
 +              <define name="KDBG" value="1" />\r
 +              <property name="DBG_OR_KDBG" value="true" />\r
 +      </if>\r
 +\r
 +      <include>include</include>\r
 +      <include>w32api/include</include>\r
 +      <include>w32api/include/ddk</include>\r
 +\r
 +      <directory name="apps">\r
 +              <xi:include href="apps/directory.xml" />\r
 +      </directory>\r
 +      <directory name="boot">\r
 +              <xi:include href="boot/boot.xml" />\r
 +      </directory>\r
 +      <directory name="bootdata">\r
 +              <xi:include href="bootdata/bootdata.xml" />\r
 +      </directory>\r
 +      <directory name="drivers">\r
 +              <xi:include href="drivers/directory.xml" />\r
 +      </directory>\r
 +      <directory name="hal">\r
 +              <xi:include href="hal/directory.xml" />\r
 +      </directory>\r
++      <directory name="include">\r
++              <xi:include href="include/directory.xml" />\r
++      </directory>\r
 +      <directory name="lib">\r
 +              <xi:include href="lib/directory.xml" />\r
 +      </directory>\r
 +      <directory name="media">\r
 +              <xi:include href="media/directory.xml" />\r
 +      </directory>\r
 +      <directory name="ntoskrnl">\r
 +              <xi:include href="ntoskrnl/ntoskrnl.xml" />\r
 +      </directory>\r
 +      <directory name="regtests">\r
 +              <xi:include href="regtests/directory.xml" />\r
 +      </directory>\r
 +      <directory name="services">\r
 +              <xi:include href="services/directory.xml" />\r
 +      </directory>\r
 +      <directory name="subsys">\r
 +              <xi:include href="subsys/directory.xml" />\r
 +      </directory>\r
 +\r
 +      <module name="bootcd" type="iso">\r
 +      </module>\r
 +</project>\r
index 2e6a501,0000000..c604abd
mode 100644,000000..100644
--- /dev/null
@@@ -1,10 -1,0 +1,11 @@@
 +<module name="ping" type="win32cui" installbase="system32" installname="ping.exe">\r
 +      <include base="ping">.</include>\r
++      <define name="__USE_W32API" />\r
 +      <define name="__USE_W32_SOCKETS" />\r
 +      <define name="_WIN32_IE">0x600</define>\r
 +      <define name="_WIN32_WINNT">0x501</define>\r
 +      <library>kernel32</library>\r
 +      <library>ws2_32</library>\r
 +      <file>ping.c</file>\r
 +      <file>ping.rc</file>\r
 +</module>\r
index c1a435e,0000000..0760122
mode 100644,000000..100644
--- /dev/null
@@@ -1,8 -1,0 +1,9 @@@
 +<module name="route" type="win32cui">\r
 +      <include base="route">.</include>\r
++      <define name="__USE_W32API" />\r
 +      <library>kernel32</library>\r
 +      <library>ws2_32</library>\r
 +      <library>iphlpapi</library>\r
 +      <file>route.c</file>\r
 +      <file>route.rc</file>\r
 +</module>\r
index 56dafd3,0000000..2af4618
mode 100644,000000..100644
--- /dev/null
@@@ -1,101 -1,0 +1,102 @@@
 +<property name="BASEADDRESS_REGTESTS" value="0x07000000" />\r
 +<property name="BASEADDRESS_NOTIFYHOOK" value="0x08000000" />\r
 +<property name="BASEADDRESS_DEVENUM" value="0x35680000" />\r
 +<property name="BASEADDRESS_DINPUT" value="0x5F580000" />\r
 +<property name="BASEADDRESS_TIMEDATE" value="0x64DA0000" />\r
 +<property name="BASEADDRESS_SYSDM" value="0x64DD0000" />\r
 +<property name="BASEADDRESS_MAIN" value="0x64F40000" />\r
 +<property name="BASEADDRESS_INTL" value="0x64FB0000" />\r
 +<property name="BASEADDRESS_DESK" value="0x65080000" />\r
 +<property name="BASEADDRESS_APPWIZ" value="0x65100000" />\r
 +<property name="BASEADDRESS_ACCESS" value="0x65180000" />\r
 +<property name="BASEADDRESS_PSAPI" value="0x68f70000" />\r
 +<property name="BASEADDRESS_MSIMG32" value="0x69cc0000" />\r
 +<property name="BASEADDRESS_UNICODE" value="0x6b200000" />\r
 +<property name="BASEADDRESS_ADVPACK" value="0x6b300000" />\r
 +<property name="BASEADDRESS_CONTROL" value="0x6b310000" />\r
 +<property name="BASEADDRESS_NCPA" value="0x6b320000" />\r
 +<property name="BASEADDRESS_DBGHELP" value="0x6b330000" />\r
 +<property name="BASEADDRESS_DINPUT8" value="0x6b340000" />\r
 +<property name="BASEADDRESS_DXDIAGN" value="0x6b350000" />\r
 +<property name="BASEADDRESS_DSOUND" value="0x6b360000" />\r
 +<property name="BASEADDRESS_GLU32" value="0x6b370000" />\r
 +<property name="BASEADDRESS_MESA32" value="0x6b380000" />\r
 +<property name="BASEADDRESS_OPENGL32" value="0x6b390000" />\r
 +<property name="BASEADDRESS_SECUR32" value="0x6b3A0000" />\r
 +<property name="BASEADDRESS_SMDLL" value="0x6b3B0000" />\r
 +<property name="BASEADDRESS_URLMON" value="0x6b3C0000" />\r
 +<property name="BASEADDRESS_CARDS" value="0x701a0000" />\r
 +<property name="BASEADDRESS_WININET" value="0x70200000" />\r
 +<property name="BASEADDRESS_ACLUI" value="0x71550000" />\r
 +<property name="BASEADDRESS_SHDOCVW" value="0x71700000" />\r
 +<property name="BASEADDRESS_WSOCK32" value="0x71ab0000" />\r
 +<property name="BASEADDRESS_ACLEDIT" value="0x71b70000" />\r
 +<property name="BASEADDRESS_NETAPI32" value="0x71c00000" />\r
 +<property name="BASEADDRESS_LZ32" value="0x73d80000" />\r
 +<property name="BASEADDRESS_USERENV" value="0x74850000" />\r
 +<property name="BASEADDRESS_SYSSETUP" value="0x74a30000" />\r
 +<property name="BASEADDRESS_SAMLIB" value="0x750C0000" />\r
 +<property name="BASEADDRESS_CABINET" value="0x75120000" />\r
 +<property name="BASEADDRESS_MSGINA" value="0x75970000" />\r
 +<property name="BASEADDRESS_IMM32" value="0x75e60000" />\r
 +<property name="BASEADDRESS_RPCRT4" value="0x76000000" />\r
 +<property name="BASEADDRESS_SHLWAPI" value="0x76120000" />\r
 +<property name="BASEADDRESS_COMCTL32" value="0x76160000" />\r
 +<property name="BASEADDRESS_COMDLG32" value="0x76200000" />\r
 +<property name="BASEADDRESS_OLEAUT32" value="0x76260000" />\r
 +<property name="BASEADDRESS_RICHED32" value="0x76340000" />\r
++<property name="BASEADDRESS_RICHED20" value="0x76360000" />\r
 +<property name="BASEADDRESS_TWAIN_32" value="0x76380000" />\r
 +<property name="BASEADDRESS_MIDIMAP" value="0x76600000" />\r
 +<property name="BASEADDRESS_MPR" value="0x76620000" />\r
 +<property name="BASEADDRESS_SETUPAPI" value="0x76660000" />\r
 +<property name="BASEADDRESS_GDIPLUS" value="0x76a00000" />\r
 +<property name="BASEADDRESS_IMAGEHLP" value="0x76c90000" />\r
 +<property name="BASEADDRESS_FMIFS" value="0x76df0000" />\r
 +<property name="BASEADDRESS_SHELL32" value="0x77260000" />\r
 +<property name="BASEADDRESS_IPHLPAPI" value="0x77300000" />\r
 +<property name="BASEADDRESS_MMDRV" value="0x77500000" />\r
 +<property name="BASEADDRESS_CRTDLL" value="0x77630000" />\r
 +<property name="BASEADDRESS_MSAFD" value="0x777a0000" />\r
 +<property name="BASEADDRESS_SNMPAPI" value="0x777c0000" />\r
 +<property name="BASEADDRESS_WINMM" value="0x777d0000" />\r
 +<property name="BASEADDRESS_WS2HELP" value="0x777e0000" />\r
 +<property name="BASEADDRESS_WSHIRDA" value="0x777f0000" />\r
 +<property name="BASEADDRESS_WINSPOOL" value="0x77800000" />\r
 +<property name="BASEADDRESS_VERSION" value="0x77a90000" />\r
 +<property name="BASEADDRESS_WS2_32" value="0x777aa000" />\r
 +<property name="BASEADDRESS_OLE32" value="0x77a50000" />\r
 +<property name="BASEADDRESS_OLEPRO32" value="0x77aa0000" />\r
 +<property name="BASEADDRESS_ADVAPI32" value="0x77dc0000" />\r
 +<property name="BASEADDRESS_USER32" value="0x77e60000" />\r
 +<property name="BASEADDRESS_GDI32" value="0x77ed0000" />\r
 +<property name="BASEADDRESS_DNSAPI" value="0x77f00000" />\r
 +<property name="BASEADDRESS_KERNEL32" value="0x77800000" />\r
 +<property name="BASEADDRESS_MSVCRT" value="0x78000000" />\r
 +<property name="BASEADDRESS_MSVCRT20" value="0x78500000" />\r
 +<property name="BASEADDRESS_NTDLL" value="0x7C900000" />\r
 +<property name="BASEADDRESS_FREETYPE" value="0x7F000000" />\r
 +\r
 +<property name="BASEADDRESS_SLAYER" value="0x5C7E0000" />\r
 +<property name="BASEADDRESS_NCPL" value="0x64EA0000" />\r
 +<property name="BASEADDRESS_HID" value="0x688F0000" />\r
 +<property name="BASEADDRESS_PSXDLL" value="0x68eb0000" />\r
 +<property name="BASEADDRESS_NETPLWIZ" value="0x6a240000" />\r
 +<property name="BASEADDRESS_DISPLAY" value="DISPLAY" />\r
 +<property name="BASEADDRESS_ACLUI" value="0x71550000" />\r
 +<property name="BASEADDRESS_MSWSOCK" value="0x71a30000" />\r
 +<property name="BASEADDRESS_WINFAX" value="0x722C0000" />\r
 +<property name="BASEADDRESS_DEVMGR" value="0x72a90000" />\r
 +<property name="BASEADDRESS_WINSCARD" value="0x723D0000" />\r
 +<property name="BASEADDRESS_COREDLL" value="0x73d80000" />\r
 +<property name="BASEADDRESS_OLEDLG" value="0x74d00000" />\r
 +<property name="BASEADDRESS_COMMCTRL" value="0x75e60000" />\r
 +<property name="BASEADDRESS_D3D8THK" value="0x76340000" />\r
 +<property name="BASEADDRESS_LSASRV" value="0x76540000" />\r
 +<property name="BASEADDRESS_ODBC32" value="0x76660000" />\r
 +<property name="BASEADDRESS_MSACM32" value="0x77400000" />\r
 +<property name="BASEADDRESS_PACKET" value="0x77780000" />\r
 +<property name="BASEADDRESS_W2_32" value="0x77780000" />\r
 +<property name="BASEADDRESS_IPRTPRIO" value="0x777c0000" />\r
 +<property name="BASEADDRESS_WSHTCPIP" value="0x777c0000" />\r
 +<property name="BASEADDRESS_EXPAT" value="0x79000000" />\r
index 4d23158,0000000..04c24f4
mode 100644,000000..100644
--- /dev/null
@@@ -1,6 -1,0 +1,17 @@@
-       <file>serial.c</file>\r
 +<module name="serial" type="kernelmodedriver" installbase="system32/drivers" installname="serial.sys">\r
++      <define name="__USE_W32API" />\r
 +      <library>ntoskrnl</library>\r
 +      <library>hal</library>\r
++      <file>circularbuffer.c</file>\r
++      <file>cleanup.c</file>\r
++      <file>close.c</file>\r
++      <file>create.c</file>\r
++      <file>devctrl.c</file>\r
++      <file>info.c</file>\r
++      <file>legacy.c</file>\r
++      <file>misc.c</file>\r
++      <file>pnp.c</file>\r
++      <file>power.c</file>\r
++      <file>rw.c</file>\r
 +      <file>serial.rc</file>\r
 +</module>\r
Simple merge
index 1f83ac9,0000000..6b2d2e1
mode 100644,000000..100644
--- /dev/null
@@@ -1,20 -1,0 +1,22 @@@
 +<module name="halmp" type="kernelmodedll">\r
 +      <importlibrary definition="../../hal/hal.def" />\r
 +      <include base="hal_generic">../include</include>\r
 +      <include base="ntoskrnl">include</include>\r
 +      <define name="_DISABLE_TIDENTS" />\r
 +      <define name="CONFIG_SMP" />\r
 +      <define name="__NTHAL__" />\r
 +      <library>hal_generic</library>\r
 +      <library>hal_generic_pc</library>\r
 +      <library>ntoskrnl</library>\r
 +      <file>apic.c</file>\r
 +      <file>halinit_mp.c</file>\r
++      <file>ioapic.c</file>\r
 +      <file>ipi_mp.c</file>\r
++      <file>mpconfig.c</file>\r
 +      <file>mps.S</file>\r
 +      <file>mpsboot.asm</file>\r
 +      <file>mpsirql.c</file>\r
 +      <file>processor_mp.c</file>\r
 +      <file>resource_mp.c</file>\r
 +      <file>halmp.rc</file>\r
 +</module>\r
index 0000000,0000000..10b4d1f
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,3 @@@
++<directory name="idl">
++      <xi:include href="idl/idl.xml" />
++</directory>
Simple merge
index 0000000,0000000..57f5d45
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,12 @@@
++<module name="pnp_server" type="rpcserver">
++      <include base="ReactOS">.</include>
++      <include base="ReactOS">w32api/include</include>
++      <define name="_X86_" />
++      <file>pnp.idl</file>
++</module>
++<module name="pnp_client" type="rpcclient">
++      <include base="ReactOS">.</include>
++      <include base="ReactOS">w32api/include</include>
++      <define name="_X86_" />
++      <file>pnp.idl</file>
++</module>
index 784440f,0000000..4e34e94
mode 100644,000000..100644
--- /dev/null
@@@ -1,20 -1,0 +1,21 @@@
 +<module name="adns" type="staticlibrary">\r
 +      <include base="adns">src</include>\r
 +      <include base="adns">adns_win32</include>\r
++      <define name="__USE_W32API" />\r
 +      <define name="ADNS_JGAA_WIN32" />\r
 +      <directory name="adns_win32">\r
 +              <file>adns_unix_calls.c</file>\r
 +      </directory>\r
 +      <directory name="src">\r
 +              <file>check.c</file>\r
 +              <file>event.c</file>\r
 +              <file>general.c</file>\r
 +              <file>parse.c</file>\r
 +              <file>poll.c</file>\r
 +              <file>query.c</file>\r
 +              <file>reply.c</file>\r
 +              <file>setup.c</file>\r
 +              <file>transmit.c</file>\r
 +              <file>types.c</file>\r
 +      </directory>\r
 +</module>\r
index b616d68,0000000..518bdec
mode 100644,000000..100644
--- /dev/null
@@@ -1,21 -1,0 +1,21 @@@
- <module name="sysdm" type="win32dll" extension=".cpl" baseaddress="${BASEADDRESS_SYSDM}" installbase="system32" installname="sysdm.cpl">\r
++<module name="sysdm" type="win32dll" extension=".cpl" baseaddress="${BASEADDRESS_SYSDM}" installbase="system32" installname="sysdm.cpl" usewrc="false">\r
 +      <importlibrary definition="sysdm.def" />\r
 +      <include base="sysdm">.</include>\r
 +      <define name="UNICODE" />\r
 +      <define name="_UNICODE" />\r
 +      <define name="__REACTOS__" />\r
 +      <define name="__USE_W32API" />\r
 +      <define name="_WIN32_IE">0x600</define>\r
 +      <define name="_WIN32_WINNT">0x501</define>\r
 +      <library>kernel32</library>\r
 +      <library>user32</library>\r
 +      <library>comctl32</library>\r
 +      <file>advanced.c</file>\r
 +      <file>computer.c</file>\r
 +      <file>environment.c</file>\r
 +      <file>general.c</file>\r
 +      <file>hardware.c</file>\r
 +      <file>sysdm.c</file>\r
 +      <file>userprofile.c</file>\r
 +      <file>sysdm.rc</file>\r
 +</module>\r
index 05c33d1,0000000..7fe706b
mode 100644,000000..100644
--- /dev/null
@@@ -1,273 -1,0 +1,279 @@@
 +<directory name="acledit">\r
 +      <xi:include href="acledit/acledit.xml" />\r
 +</directory>\r
 +<directory name="aclui">\r
 +      <xi:include href="aclui/aclui.xml" />\r
 +</directory>\r
 +<directory name="adns">\r
 +      <xi:include href="adns/adns.xml" />\r
 +</directory>\r
 +<directory name="advapi32">\r
 +      <xi:include href="advapi32/advapi32.xml" />\r
 +</directory>\r
 +<directory name="advpack">\r
 +      <xi:include href="advpack/advpack.xml" />\r
 +</directory>\r
 +<directory name="cabinet">\r
 +      <xi:include href="cabinet/cabinet.xml" />\r
 +</directory>\r
 +<directory name="cards">\r
 +      <xi:include href="cards/cards.xml" />\r
 +</directory>\r
 +<directory name="comctl32">\r
 +      <xi:include href="comctl32/comctl32.xml" />\r
 +</directory>\r
 +<directory name="comdlg32">\r
 +      <xi:include href="comdlg32/comdlg32.xml" />\r
 +</directory>\r
 +<directory name="cpl">\r
 +      <xi:include href="cpl/directory.xml" />\r
 +</directory>\r
 +<directory name="crt">\r
 +      <xi:include href="crt/crt.xml" />\r
 +</directory>\r
 +<directory name="crtdll">\r
 +      <xi:include href="crtdll/crtdll.xml" />\r
 +</directory>\r
 +<directory name="dbghelp">\r
 +      <xi:include href="dbghelp/dbghelp.xml" />\r
 +</directory>\r
 +<directory name="devenum">\r
 +      <xi:include href="devenum/devenum.xml" />\r
 +</directory>\r
 +<directory name="dinput">\r
 +      <xi:include href="dinput/dinput.xml" />\r
 +</directory>\r
 +<directory name="dinput8">\r
 +      <xi:include href="dinput8/dinput8.xml" />\r
 +</directory>\r
 +<directory name="dnsapi">\r
 +      <xi:include href="dnsapi/dnsapi.xml" />\r
 +</directory>\r
 +<directory name="dsound">\r
 +      <xi:include href="dsound/dsound.xml" />\r
 +</directory>\r
 +<directory name="dxdiagn">\r
 +      <xi:include href="dxdiagn/dxdiagn.xml" />\r
 +</directory>\r
 +<directory name="dxguid">\r
 +      <xi:include href="dxguid/dxguid.xml" />\r
 +</directory>\r
 +<directory name="epsapi">\r
 +      <xi:include href="epsapi/epsapi.xml" />\r
 +</directory>\r
 +<directory name="expat">\r
 +      <xi:include href="expat/expat.xml" />\r
 +</directory>\r
 +<directory name="fmifs">\r
 +      <xi:include href="fmifs/fmifs.xml" />\r
 +</directory>\r
 +<directory name="freetype">\r
 +      <xi:include href="freetype/freetype.xml" />\r
 +</directory>\r
 +<directory name="fslib">\r
 +      <xi:include href="fslib/directory.xml" />\r
 +</directory>\r
 +<directory name="gdi32">\r
 +      <xi:include href="gdi32/gdi32.xml" />\r
 +</directory>\r
 +<directory name="gdiplus">\r
 +      <xi:include href="gdiplus/gdiplus.xml" />\r
 +</directory>\r
 +<directory name="glu32">\r
 +      <xi:include href="glu32/glu32.xml" />\r
 +</directory>\r
 +<directory name="imagehlp">\r
 +      <xi:include href="imagehlp/imagehlp.xml" />\r
 +</directory>\r
 +<directory name="imm32">\r
 +      <xi:include href="imm32/imm32.xml" />\r
 +</directory>\r
 +<directory name="iphlpapi">\r
 +      <xi:include href="iphlpapi/iphlpapi.xml" />\r
 +</directory>\r
 +<directory name="kbdda">\r
 +      <xi:include href="kbdda/kbdda.xml" />\r
 +</directory>\r
 +<directory name="kbddv">\r
 +      <xi:include href="kbddv/kbddv.xml" />\r
 +</directory>\r
 +<directory name="kbdes">\r
 +      <xi:include href="kbdes/kbdes.xml" />\r
 +</directory>\r
 +<directory name="kbdfr">\r
 +      <xi:include href="kbdfr/kbdfr.xml" />\r
 +</directory>\r
 +<directory name="kbdgr">\r
 +      <xi:include href="kbdgr/kbdgr.xml" />\r
 +</directory>\r
 +<directory name="kbdse">\r
 +      <xi:include href="kbdse/kbdse.xml" />\r
 +</directory>\r
 +<directory name="kbduk">\r
 +      <xi:include href="kbduk/kbduk.xml" />\r
 +</directory>\r
 +<directory name="kbdus">\r
 +      <xi:include href="kbdus/kbdus.xml" />\r
 +</directory>\r
 +<directory name="kernel32">\r
 +      <xi:include href="kernel32/kernel32.xml" />\r
 +</directory>\r
 +<directory name="kjs">\r
 +      <xi:include href="kjs/kjs.xml" />\r
 +</directory>\r
 +<directory name="libwine">\r
 +      <xi:include href="libwine/libwine.xml" />\r
 +</directory>\r
 +<directory name="lzexpand">\r
 +      <xi:include href="lzexpand/lz32.xml" />\r
 +</directory>\r
 +<directory name="mesa32">\r
 +      <xi:include href="mesa32/mesa32.xml" />\r
 +</directory>\r
 +<directory name="midimap">\r
 +      <xi:include href="midimap/midimap.xml" />\r
 +</directory>\r
 +<directory name="mmdrv">\r
 +      <xi:include href="mmdrv/mmdrv.xml" />\r
 +</directory>\r
 +<directory name="mpr">\r
 +      <xi:include href="mpr/mpr.xml" />\r
 +</directory>\r
 +<directory name="msacm">\r
 +      <xi:include href="msacm/msacm32.xml" />\r
 +</directory>\r
 +<directory name="msafd">\r
 +      <xi:include href="msafd/msafd.xml" />\r
 +</directory>\r
 +<directory name="msgina">\r
 +      <xi:include href="msgina/msgina.xml" />\r
 +</directory>\r
 +<directory name="msimg32">\r
 +      <xi:include href="msimg32/msimg32.xml" />\r
 +</directory>\r
 +<directory name="msvcrt">\r
 +      <xi:include href="msvcrt/msvcrt.xml" />\r
 +</directory>\r
 +<directory name="msvcrt20">\r
 +      <xi:include href="msvcrt20/msvcrt20.xml" />\r
 +</directory>\r
 +<directory name="netapi32">\r
 +      <xi:include href="netapi32/netapi32.xml" />\r
 +</directory>\r
 +<directory name="ntdll">\r
 +      <xi:include href="ntdll/ntdll.xml" />\r
 +</directory>\r
 +<directory name="ole32">\r
 +      <xi:include href="ole32/ole32.xml" />\r
 +</directory>\r
 +<directory name="oleaut32">\r
 +      <xi:include href="oleaut32/oleaut32.xml" />\r
 +</directory>\r
 +<directory name="olepro32">\r
 +      <xi:include href="olepro32/olepro32.xml" />\r
 +</directory>\r
 +<directory name="opengl32">\r
 +      <xi:include href="opengl32/opengl32.xml" />\r
 +</directory>\r
 +<directory name="psapi">\r
 +      <xi:include href="psapi/psapi.xml" />\r
 +</directory>\r
 +<directory name="pseh">\r
 +      <xi:include href="pseh/pseh.xml" />\r
 +</directory>\r
 +<directory name="richedit">\r
 +      <xi:include href="richedit/riched32.xml" />\r
 +</directory>\r
++<directory name="riched20">\r
++      <xi:include href="riched20/riched20.xml" />\r
++</directory>\r
 +<directory name="rosrtl">\r
 +      <xi:include href="rosrtl/rosrtl.xml" />\r
 +</directory>\r
 +<directory name="rossym">\r
 +      <xi:include href="rossym/rossym.xml" />\r
 +</directory>\r
 +<directory name="rpcrt4">\r
 +      <xi:include href="rpcrt4/rpcrt4.xml" />\r
 +</directory>\r
 +<directory name="rtl">\r
 +      <xi:include href="rtl/rtl.xml" />\r
 +</directory>\r
 +<directory name="samlib">\r
 +      <xi:include href="samlib/samlib.xml" />\r
 +</directory>\r
 +<directory name="secur32">\r
 +      <xi:include href="secur32/secur32.xml" />\r
 +</directory>\r
 +<directory name="setupapi">\r
 +      <xi:include href="setupapi/setupapi.xml" />\r
 +</directory>\r
 +<directory name="shdocvw">\r
 +      <xi:include href="shdocvw/shdocvw.xml" />\r
 +</directory>\r
 +<directory name="shell32">\r
 +      <xi:include href="shell32/shell32.xml" />\r
 +</directory>\r
 +<directory name="shlwapi">\r
 +      <xi:include href="shlwapi/shlwapi.xml" />\r
 +</directory>\r
 +<directory name="snmpapi">\r
 +      <xi:include href="snmpapi/snmpapi.xml" />\r
 +</directory>\r
 +<directory name="smdll">\r
 +      <xi:include href="smdll/smdll.xml" />\r
 +</directory>\r
++<directory name="smlib">\r
++      <xi:include href="smlib/smlib.xml" />\r
++</directory>\r
 +<directory name="string">\r
 +      <xi:include href="string/string.xml" />\r
 +</directory>\r
 +<directory name="strmiids">\r
 +      <xi:include href="strmiids/strmiids.xml" />\r
 +</directory>\r
 +<directory name="syssetup">\r
 +      <xi:include href="syssetup/syssetup.xml" />\r
 +</directory>\r
 +<directory name="twain">\r
 +      <xi:include href="twain/twain_32.xml" />\r
 +</directory>\r
 +<directory name="urlmon">\r
 +      <xi:include href="urlmon/urlmon.xml" />\r
 +</directory>\r
 +<directory name="user32">\r
 +      <xi:include href="user32/user32.xml" />\r
 +</directory>\r
 +<directory name="userenv">\r
 +      <xi:include href="userenv/userenv.xml" />\r
 +</directory>\r
 +<directory name="uuid">\r
 +      <xi:include href="uuid/uuid.xml" />\r
 +</directory>\r
 +<directory name="version">\r
 +      <xi:include href="version/version.xml" />\r
 +</directory>\r
 +<directory name="wininet">\r
 +      <xi:include href="wininet/wininet.xml" />\r
 +</directory>\r
 +<directory name="winmm">\r
 +      <xi:include href="winmm/winmm.xml" />\r
 +</directory>\r
 +<directory name="winspool">\r
 +      <xi:include href="winspool/winspool.xml" />\r
 +</directory>\r
 +<directory name="ws2_32">\r
 +      <xi:include href="ws2_32/ws2_32.xml" />\r
 +</directory>\r
 +<directory name="ws2help">\r
 +      <xi:include href="ws2help/ws2help.xml" />\r
 +</directory>\r
 +<directory name="wshirda">\r
 +      <xi:include href="wshirda/wshirda.xml" />\r
 +</directory>\r
 +<directory name="wsock32">\r
 +      <xi:include href="wsock32/wsock32.xml" />\r
 +</directory>\r
 +<directory name="zlib">\r
 +      <xi:include href="zlib/zlib.xml" />\r
 +</directory>\r
index b157624,0000000..7008492
mode 100644,000000..100644
--- /dev/null
@@@ -1,38 -1,0 +1,40 @@@
-               <file>bitblt.c</file>\r
 +<module name="gdi32" type="win32dll" baseaddress="${BASEADDRESS_GDI32}" installbase="system32" installname="gdi32.dll">\r
 +      <importlibrary definition="gdi32.def" />\r
 +      <include base="gdi32">include</include>\r
 +      <define name="_DISABLE_TIDENTS" />\r
 +      <define name="UNICODE" />\r
 +      <define name="__USE_W32API" />\r
 +      <define name="WINVER">0x0600</define>\r
 +      <define name="_WIN32_WINNT">0x0501</define>\r
 +      <library>ntdll</library>\r
 +      <library>rosrtl</library>\r
 +      <library>kernel32</library>\r
 +      <library>advapi32</library>\r
 +      <directory name="include">\r
 +              <pch>precomp.h</pch>\r
 +      </directory>\r
 +      <directory name="main">\r
 +              <file>dllmain.c</file>\r
 +      </directory>\r
 +      <directory name="misc">\r
 +              <file>heap.c</file>\r
 +              <file>misc.c</file>\r
 +              <file>stubs.c</file>\r
 +              <file>stubsa.c</file>\r
 +              <file>stubsw.c</file>\r
 +              <file>win32k.S</file>\r
 +              <file>wingl.c</file>\r
 +      </directory>\r
 +      <directory name="objects">\r
++              <file>bitmap.c</file>\r
++              <file>brush.c</file>\r
 +              <file>dc.c</file>\r
 +              <file>font.c</file>\r
 +              <file>linedda.c</file>\r
 +              <file>metafile.c</file>\r
 +              <file>region.c</file>\r
 +              <file>text.c</file>\r
++              <file>utils.c</file>\r
 +      </directory>\r
 +      <file>gdi32.rc</file>\r
 +</module>\r
Simple merge
index d4d562b,0000000..315f50f
mode 100644,000000..100644
--- /dev/null
@@@ -1,126 -1,0 +1,127 @@@
 +<module name="kernel32_base" type="objectlibrary">\r
 +      <include base="kernel32_base">.</include>\r
 +      <include base="kernel32_base">include</include>\r
 +      <define name="_DISABLE_TIDENTS" />\r
 +      <define name="_SEH_NO_NATIVE_NLG" />\r
 +      <define name="WINVER">0x0500</define>\r
 +      <pch>k32.h</pch>\r
 +      <directory name="debug">\r
 +              <file>break.c</file>\r
 +              <file>debugger.c</file>\r
 +              <file>output.c</file>\r
 +      </directory>\r
 +      <directory name="except">\r
 +              <file>except.c</file>\r
 +      </directory>\r
 +      <directory name="file">\r
 +              <file>backup.c</file>\r
 +              <file>bintype.c</file>\r
 +              <file>cnotify.c</file>\r
 +              <file>copy.c</file>\r
 +              <file>create.c</file>\r
 +              <file>curdir.c</file>\r
 +              <file>delete.c</file>\r
 +              <file>deviceio.c</file>\r
 +              <file>dir.c</file>\r
 +              <file>dosdev.c</file>\r
 +              <file>file.c</file>\r
 +              <file>find.c</file>\r
 +              <file>hardlink.c</file>\r
 +              <file>iocompl.c</file>\r
 +              <file>lfile.c</file>\r
 +              <file>lock.c</file>\r
 +              <file>mailslot.c</file>\r
 +              <file>move.c</file>\r
 +              <file>npipe.c</file>\r
 +              <file>pipe.c</file>\r
 +              <file>rw.c</file>\r
 +              <file>tape.c</file>\r
 +              <file>volume.c</file>\r
 +      </directory>\r
 +      <directory name="mem">\r
 +              <file>global.c</file>\r
 +              <file>heap.c</file>\r
 +              <file>isbad.c</file>\r
 +              <file>local.c</file>\r
 +              <file>procmem.c</file>\r
 +              <file>resnotify.c</file>\r
 +              <file>section.c</file>\r
 +              <file>virtual.c</file>\r
 +      </directory>\r
 +      <directory name="misc">\r
 +              <file>atom.c</file>\r
 +              <file>chartype.c</file>\r
 +              <file>comm.c</file>\r
 +              <file>computername.c</file>\r
 +              <file>console.c</file>\r
 +              <file>dllmain.c</file>\r
 +              <file>env.c</file>\r
 +              <file>error.c</file>\r
 +              <file>errormsg.c</file>\r
 +              <file>handle.c</file>\r
 +              <file>lang.c</file>\r
 +              <file>lcformat.c</file>\r
 +              <file>ldr.c</file>\r
 +              <file>lzexpand_main.c</file>\r
 +              <file>muldiv.c</file>\r
 +              <file>nls.c</file>\r
 +              <file>perfcnt.c</file>\r
 +              <file>profile.c</file>\r
 +              <file>res.c</file>\r
 +              <file>stubs.c</file>\r
 +              <file>sysinfo.c</file>\r
 +              <file>time.c</file>\r
 +              <file>timerqueue.c</file>\r
 +              <file>toolhelp.c</file>\r
++              <file>version.c</file>\r
 +      </directory>\r
 +      <directory name="process">\r
 +              <file>cmdline.c</file>\r
 +              <file>create.c</file>\r
 +              <file>job.c</file>\r
 +              <file>proc.c</file>\r
 +              <file>session.c</file>\r
 +      </directory>\r
 +      <directory name="string">\r
 +              <file>lstring.c</file>\r
 +      </directory>\r
 +      <directory name="synch">\r
 +              <file>critical.c</file>\r
 +              <file>event.c</file>\r
 +              <file>intrlck.c</file>\r
 +              <file>mutex.c</file>\r
 +              <file>sem.c</file>\r
 +              <file>timer.c</file>\r
 +              <file>wait.c</file>\r
 +      </directory>\r
 +      <directory name="thread">\r
 +              <directory name="i386">\r
 +                      <file>fiber.S</file>\r
 +              </directory>\r
 +              <file>fiber.c</file>\r
 +              <file>fls.c</file>\r
 +              <file>thread.c</file>\r
 +              <file>tls.c</file>\r
 +      </directory>\r
 +</module>\r
 +<module name="kernel32" type="win32dll" baseaddress="${BASEADDRESS_KERNEL32}" installbase="system32" installname="kernel32.dll">\r
 +      <importlibrary definition="kernel32.def" />\r
 +      <include base="kernel32">.</include>\r
 +      <include base="kernel32">include</include>\r
 +      <define name="_DISABLE_TIDENTS" />\r
 +      <define name="_SEH_NO_NATIVE_NLG" />\r
 +      <define name="WINVER">0x0500</define>\r
 +      <library>kernel32_base</library>\r
 +      <library>pseh</library>\r
 +      <library>rosrtl</library>\r
 +      <library>ntdll</library>\r
 +      <linkerflag>-lgcc</linkerflag>\r
 +      <linkerflag>-nostartfiles</linkerflag>\r
 +      <linkerflag>-nostdlib</linkerflag>\r
 +      <file>kernel32.rc</file>\r
 +</module>\r
 +<!--\r
 +<directory name="tests">\r
 +      <xi:include href="tests/kernel32.xml" />\r
 +</directory>\r
 +-->\r
Simple merge
Simple merge
index a5df8e6,0000000..fcb08f1
mode 100644,000000..100644
--- /dev/null
@@@ -1,110 -1,0 +1,107 @@@
-       <library>rosrtl</library>\r
 +<module name="ntdll" type="nativedll" baseaddress="${BASEADDRESS_NTDLL}" installbase="system32" installname="ntdll.dll">\r
 +      <bootstrap base="reactos/system32" />\r
 +      <importlibrary definition="def/ntdll.def" />\r
 +      <define name="__NTDLL__" />\r
 +      <define name="_DISABLE_TIDENTS" />\r
-                       <file>chkstk.s</file>\r
 +      <library>rtl</library>\r
++      <library>rosrtl</library>\r
 +      <library>string</library>\r
 +      <linkerflag>-lgcc</linkerflag>\r
 +      <directory name="csr">\r
 +              <file>capture.c</file>\r
 +              <file>lpc.c</file>\r
 +              <file>probe.c</file>\r
 +              <file>thread.c</file>\r
 +      </directory>\r
 +      <directory name="dbg">\r
 +              <file>brkpoint.c</file>\r
 +              <file>debug.c</file>\r
 +              <file>print.c</file>\r
 +      </directory>\r
 +      <directory name="ldr">\r
 +              <file>entry.S</file>\r
 +              <file>res.c</file>\r
 +              <file>startup.c</file>\r
 +              <file>utils.c</file>\r
 +      </directory>\r
 +      <directory name="main">\r
 +              <file>dllmain.c</file>\r
 +      </directory>\r
 +      <directory name="rtl">\r
 +              <directory name="i386">\r
 +                      <file>alldiv.s</file>\r
 +                      <file>allmul.s</file>\r
 +                      <file>allrem.s</file>\r
 +                      <file>allshl.s</file>\r
 +                      <file>allshr.s</file>\r
 +                      <file>aulldiv.s</file>\r
 +                      <file>aullrem.s</file>\r
 +                      <file>aullshr.s</file>\r
-               <file>ppb.c</file>\r
 +                      <file>exception.c</file>\r
 +                      <file>float.c</file>\r
 +                      <file>ftol.c</file>\r
 +              </directory>\r
 +              <file>access.c</file>\r
 +              <file>apc.c</file>\r
 +              <file>atom.c</file>\r
 +              <file>callback.c</file>\r
 +              <file>crc32.c</file>\r
 +              <file>critical.c</file>\r
 +              <file>dbgbuffer.c</file>\r
 +              <file>exception.c</file>\r
 +              <file>handle.c</file>\r
 +              <file>intrlck.c</file>\r
 +              <file>libsupp.c</file>\r
 +              <file>math.c</file>\r
 +              <file>message.c</file>\r
 +              <file>misc.c</file>\r
 +              <file>path.c</file>\r
-               <file>thread.c</file>\r
 +              <file>process.c</file>\r
 +              <file>propvar.c</file>\r
 +              <file>rangelist.c</file>\r
 +              <file>resource.c</file>\r
 +              <file>teb.c</file>\r
 +              <file>timerqueue.c</file>\r
 +      </directory>\r
 +      <directory name="stdio">\r
 +              <file>sprintf.c</file>\r
 +              <file>sscanf.c</file>\r
 +              <file>swprintf.c</file>\r
 +      </directory>\r
 +      <directory name="stdlib">\r
 +              <file>abs.c</file>\r
 +              <file>atoi64.c</file>\r
 +              <file>atoi.c</file>\r
 +              <file>atol.c</file>\r
 +              <file>bsearch.c</file>\r
 +              <file>itoa.c</file>\r
 +              <file>itow.c</file>\r
 +              <file>labs.c</file>\r
 +              <file>lfind.c</file>\r
 +              <file>mbstowcs.c</file>\r
 +              <file>splitp.c</file>\r
 +              <file>strtol.c</file>\r
 +              <file>strtoul.c</file>\r
 +              <file>wcstol.c</file>\r
 +              <file>wcstombs.c</file>\r
 +              <file>wcstoul.c</file>\r
 +              <file>wtoi64.c</file>\r
 +              <file>wtoi.c</file>\r
 +              <file>wtol.c</file>\r
 +      </directory>\r
 +      <directory name="string">\r
 +              <file>ctype.c</file>\r
 +              <file>memicmp.c</file>\r
 +              <file>stricmp.c</file>\r
 +              <file>strlwr.c</file>\r
 +              <file>strnicmp.c</file>\r
 +              <file>strpbrk.c</file>\r
 +              <file>strstr.c</file>\r
 +              <file>strupr.c</file>\r
 +              <file>wstring.c</file>\r
 +      </directory>\r
 +      <directory name="def">\r
 +              <file>ntdll.rc</file>\r
 +      </directory>\r
 +      <file>napi.S</file>\r
 +</module>\r
index fe35b86,0000000..9cc776b
mode 100644,000000..100644
--- /dev/null
@@@ -1,51 -1,0 +1,52 @@@
 +<module name="ole32" type="win32dll" baseaddress="${BASEADDRESS_OLE32}" installbase="system32" installname="ole32.dll">\r
 +      <importlibrary definition="ole32.spec.def" />\r
 +      <include base="ole32">.</include>\r
 +      <include base="ReactOS">include/wine</include>\r
 +      <define name="UNICODE" />\r
 +      <define name="_UNICODE" />\r
 +      <define name="__REACTOS__" />\r
 +      <define name="__USE_W32API" />\r
 +      <define name="_WIN32_IE">0x600</define>\r
 +      <define name="_WIN32_WINNT">0x501</define>\r
 +      <define name="WINVER">0x501</define>\r
 +      <library>wine</library>\r
 +      <library>uuid</library>\r
 +      <library>ntdll</library>\r
 +      <library>kernel32</library>\r
 +      <library>advapi32</library>\r
 +      <library>gdi32</library>\r
 +      <library>user32</library>\r
 +      <library>rpcrt4</library>\r
 +      <file>antimoniker.c</file>\r
 +      <file>bindctx.c</file>\r
 +      <file>clipboard.c</file>\r
 +      <file>compobj.c</file>\r
 +      <file>compositemoniker.c</file>\r
 +      <file>datacache.c</file>\r
 +      <file>defaulthandler.c</file>\r
 +      <file>errorinfo.c</file>\r
 +      <file>filemoniker.c</file>\r
 +      <file>ftmarshal.c</file>\r
 +      <file>git.c</file>\r
 +      <file>hglobalstream.c</file>\r
 +      <file>ifs.c</file>\r
 +      <file>itemmoniker.c</file>\r
 +      <file>marshal.c</file>\r
 +      <file>memlockbytes.c</file>\r
 +      <file>moniker.c</file>\r
 +      <file>ole2.c</file>\r
 +      <file>ole2stubs.c</file>\r
 +      <file>ole2impl.c</file>\r
 +      <file>ole32_main.c</file>\r
 +      <file>oleobj.c</file>\r
 +      <file>oleproxy.c</file>\r
 +      <file>regsvr.c</file>\r
 +      <file>rpc.c</file>\r
 +      <file>stg_bigblockfile.c</file>\r
++      <file>stg_prop.c</file>\r
 +      <file>stg_stream.c</file>\r
 +      <file>storage32.c</file>\r
 +      <file>stubmanager.c</file>\r
 +      <file>ole32res.rc</file>\r
 +      <file>ole32.spec</file>\r
 +</module>\r
index b718a7c,0000000..e885c4e
mode 100644,000000..100644
--- /dev/null
@@@ -1,43 -1,0 +1,45 @@@
 +<module name="oleaut32" type="win32dll" baseaddress="${BASEADDRESS_OLEAUT32}" installbase="system32" installname="oleaut32.dll">\r
 +      <importlibrary definition="oleaut32.spec.def" />\r
 +      <include base="oleaut32">.</include>\r
 +      <include base="ReactOS">include/wine</include>\r
 +      <define name="UNICODE" />\r
 +      <define name="_UNICODE" />\r
 +      <define name="__REACTOS__" />\r
 +      <define name="__USE_W32API" />\r
 +      <define name="_WIN32_IE">0x600</define>\r
 +      <define name="_WIN32_WINNT">0x501</define>\r
 +      <define name="WINVER">0x501</define>\r
 +      <define name="_STDDEF_H" />\r
 +      <define name="_OLEAUT32_" />\r
 +      <define name="COM_NO_WINDOWS_H" />\r
 +      <library>wine</library>\r
 +      <library>uuid</library>\r
 +      <library>ntdll</library>\r
 +      <library>kernel32</library>\r
 +      <library>advapi32</library>\r
 +      <library>gdi32</library>\r
 +      <library>user32</library>\r
 +      <library>rpcrt4</library>\r
 +      <library>ole32</library>\r
 +      <library>comctl32</library>\r
++      <library>urlmon</library>\r
 +      <file>connpt.c</file>\r
 +      <file>dispatch.c</file>\r
 +      <file>hash.c</file>\r
 +      <file>oaidl_p.c</file>\r
 +      <file>oleaut.c</file>\r
 +      <file>olefont.c</file>\r
 +      <file>olepicture.c</file>\r
++      <file>recinfo.c</file>\r
 +      <file>regsvr.c</file>\r
 +      <file>safearray.c</file>\r
 +      <file>stubs.c</file>\r
 +      <file>tmarshal.c</file>\r
 +      <file>typelib.c</file>\r
 +      <file>typelib2.c</file>\r
 +      <file>usrmarshal.c</file>\r
 +      <file>varformat.c</file>\r
 +      <file>variant.c</file>\r
 +      <file>vartype.c</file>\r
 +      <file>oleaut32.spec</file>\r
 +</module>\r
index 5e62992,0000000..81a2cfe
mode 100644,000000..100644
--- /dev/null
@@@ -1,14 -1,0 +1,15 @@@
 +<module name="psapi" type="win32dll" baseaddress="${BASEADDRESS_PSAPI}" installbase="system32" installname="psapi.dll">\r
 +      <importlibrary definition="psapi.def" />\r
 +      <include base="psapi">.</include>\r
 +      <include base="psapi">include</include>\r
 +      <define name="_DISABLE_TIDENTS" />\r
++      <define name="__USE_W32API" />\r
 +      <library>epsapi</library>\r
 +      <library>pseh</library>\r
 +      <library>ntdll</library>\r
 +      <library>kernel32</library>\r
 +      <pch>precomp.h</pch>\r
 +      <file>malloc.c</file>\r
 +      <file>psapi.c</file>\r
 +      <file>psapi.rc</file>\r
 +</module>\r
index 0000000,0000000..cfc5135
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,33 @@@
++<module name="riched20" type="win32dll" baseaddress="${BASEADDRESS_RICHED20}">
++      <importlibrary definition="riched20.spec.def" />
++      <include base="riched20">.</include>
++      <include base="ReactOS">include/wine</include>
++      <define name="UNICODE" />
++      <define name="_UNICODE" />
++      <define name="__REACTOS__" />
++      <define name="__USE_W32API" />
++      <define name="_WIN32_IE">0x600</define>
++      <define name="_WIN32_WINNT">0x501</define>
++      <define name="WINVER">0x501</define>
++      <library>uuid</library>
++      <library>wine</library>
++      <library>ntdll</library>
++      <library>kernel32</library>
++      <library>user32</library>
++      <library>gdi32</library>
++      <file>caret.c</file>
++      <file>context.c</file>
++      <file>editor.c</file>
++      <file>list.c</file>
++      <file>paint.c</file>
++      <file>para.c</file>
++      <file>reader.c</file>
++      <file>richole.c</file>
++      <file>row.c</file>
++      <file>run.c</file>
++      <file>string.c</file>
++      <file>style.c</file>
++      <file>undo.c</file>
++      <file>wrap.c</file>
++      <file>riched20.spec</file>
++</module>
index 69a875a,0000000..6500a26
mode 100644,000000..100644
--- /dev/null
@@@ -1,20 -1,0 +1,19 @@@
-       <file>reader.c</file>\r
 +<module name="riched32" type="win32dll" baseaddress="${BASEADDRESS_RICHED32}">\r
 +      <importlibrary definition="riched32.spec.def" />\r
 +      <include base="riched32">.</include>\r
 +      <include base="ReactOS">include/wine</include>\r
 +      <define name="UNICODE" />\r
 +      <define name="_UNICODE" />\r
 +      <define name="__REACTOS__" />\r
 +      <define name="__USE_W32API" />\r
 +      <define name="_WIN32_IE">0x600</define>\r
 +      <define name="_WIN32_WINNT">0x501</define>\r
 +      <define name="WINVER">0x501</define>\r
 +      <library>wine</library>\r
 +      <library>ntdll</library>\r
 +      <library>kernel32</library>\r
 +      <library>user32</library>\r
-       <file>text-writer.c</file>\r
++      <library>riched20</library>\r
 +      <file>richedit.c</file>\r
 +      <file>riched32.spec</file>\r
 +</module>\r
index 147aa85,0000000..9a68976
mode 100644,000000..100644
--- /dev/null
@@@ -1,35 -1,0 +1,39 @@@
 +<module name="rtl" type="staticlibrary">\r
 +      <directory name="i386">\r
++              <file>chkstk.s</file>\r
 +              <file>except.s</file>\r
 +              <file>exception.c</file>\r
 +      </directory>\r
 +      <file>acl.c</file>\r
 +      <file>bit.c</file>\r
 +      <file>bitmap.c</file>\r
 +      <file>bootdata.c</file>\r
 +      <file>compress.c</file>\r
 +      <file>dos8dot3.c</file>\r
 +      <file>encode.c</file>\r
 +      <file>env.c</file>\r
 +      <file>error.c</file>\r
 +      <file>exception.c</file>\r
 +      <file>generictable.c</file>\r
 +      <file>heap.c</file>\r
 +      <file>image.c</file>\r
 +      <file>largeint.c</file>\r
 +      <file>luid.c</file>\r
 +      <file>mem.c</file>\r
 +      <file>network.c</file>\r
 +      <file>nls.c</file>\r
++      <file>ppb.c</file>\r
++      <file>process.c</file>\r
 +      <file>random.c</file>\r
 +      <file>registry.c</file>\r
 +      <file>sd.c</file>\r
 +      <file>security.c</file>\r
 +      <file>sid.c</file>\r
 +      <file>splaytree.c</file>\r
++      <file>thread.c</file>\r
 +      <file>time.c</file>\r
 +      <file>timezone.c</file>\r
 +      <file>unicode.c</file>\r
 +      <file>unicodeprefix.c</file>\r
 +      <file>version.c</file>\r
 +</module>\r
  #include "winreg.h"\r
  #include "setupapi.h"\r
  #include "cfgmgr32.h"\r
 -#include "pnp.h"\r
+ #include "setupapi_private.h"\r
\r
+ #include "rpc.h"\r
\r
++#include "pnp_c.h"\r
  \r
  #include "wine/debug.h"\r
  \r
index cea0b8c,0000000..739d6c5
mode 100644,000000..100644
--- /dev/null
@@@ -1,33 -1,0 +1,36 @@@
 +<module name="setupapi" type="win32dll" baseaddress="${BASEADDRESS_SETUPAPI}" installbase="system32" installname="setupapi.dll">\r
 +      <importlibrary definition="setupapi.spec.def" />\r
 +      <include base="setupapi">.</include>\r
 +      <include base="ReactOS">include/wine</include>\r
++      <include base="pnp_client">.</include>\r
 +      <define name="UNICODE" />\r
 +      <define name="_UNICODE" />\r
 +      <define name="__REACTOS__" />\r
 +      <define name="__USE_W32API" />\r
 +      <define name="_WIN32_IE">0x600</define>\r
 +      <define name="_WIN32_WINNT">0x501</define>\r
 +      <define name="WINVER">0x501</define>\r
 +      <define name="__WINESRC__" />\r
 +      <define name="_SETUPAPI_" />\r
++      <library>pnp_client</library>\r
 +      <library>wine</library>\r
 +      <library>ntdll</library>\r
 +      <library>kernel32</library>\r
 +      <library>advapi32</library>\r
 +      <library>user32</library>\r
 +      <library>rpcrt4</library>\r
 +      <library>version</library>\r
 +      <file>cfgmgr.c</file>\r
 +      <file>devinst.c</file>\r
 +      <file>dirid.c</file>\r
 +      <file>diskspace.c</file>\r
 +      <file>install.c</file>\r
 +      <file>misc.c</file>\r
 +      <file>parser.c</file>\r
 +      <file>queue.c</file>\r
 +      <file>setupcab.c</file>\r
 +      <file>stubs.c</file>\r
++      <file>rpc.c</file>\r
 +      <file>setupapi.rc</file>\r
 +      <file>setupapi.spec</file>\r
 +</module>\r
index 4441cec,0000000..4344f47
mode 100644,000000..100644
--- /dev/null
@@@ -1,11 -1,0 +1,10 @@@
-       <file>connect.c</file>\r
-       <file>execpgm.c</file>\r
-       <file>compses.c</file>\r
 +<module name="smdll" type="win32dll" baseaddress="${BASEADDRESS_SMDLL}" installbase="system32" installname="smdll.dll">\r
 +      <importlibrary definition="smdll.def" />\r
 +      <include base="smdll">.</include>\r
 +      <define name="_DISABLE_TIDENTS" />\r
++      <library>smlib</library>\r
 +      <library>ntdll</library>\r
 +      <file>dllmain.c</file>\r
++      <file>query.c</file>\r
 +      <file>smdll.rc</file>\r
 +</module>\r
index 0000000,0000000..6b06eb1
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,7 @@@
++<module name="smlib" type="staticlibrary">
++      <include base="smlib">.</include>
++      <define name="_DISABLE_TIDENTS" />
++      <file>connect.c</file>
++      <file>execpgm.c</file>
++      <file>compses.c</file>
++</module>
Simple merge
index 0000000,0000000..e69de29
new file mode 100644 (file)
--- /dev/null
--- /dev/null
Simple merge
Simple merge
index 7665b57,0000000..d9aa917
mode 100644,000000..100644
--- /dev/null
@@@ -1,370 -1,0 +1,367 @@@
-       <library>rosrtl</library>\r
 +<module name="ntoskrnl" type="kernel" installbase="system32" installname="ntoskrnl.exe">\r
 +      <bootstrap base="reactos" />\r
 +      <importlibrary definition="ntoskrnl.def" />\r
 +      <define name="_SEH_NO_NATIVE_NLG" />\r
 +      <define name="_DISABLE_TIDENTS" />\r
 +      <define name="__NTOSKRNL__" />\r
 +      <define name="__3GB__" />\r
 +      <include base="kjs">include</include>\r
 +      <include base="ntoskrnl">include</include>\r
 +      <library>csq</library>\r
 +      <library>hal</library>\r
 +      <library>kjs</library>\r
 +      <library>pseh</library>\r
-                               <file>usercall.c</file>\r
 +      <library>rtl</library>\r
++      <library>rosrtl</library>\r
 +      <library>string</library>\r
 +      <library>rossym</library>\r
 +      <directory name="include">\r
 +              <pch>ntoskrnl.h</pch>\r
 +      </directory>\r
 +      <directory name="ke">\r
 +              <if property="ARCH" value="i386">\r
 +                      <directory name="i386">\r
 +                              <file first="true">main.S</file>\r
 +                              <file>bios.c</file>\r
 +                              <file>brkpoint.c</file>\r
 +                              <file>bthread.S</file>\r
 +                              <file>exp.c</file>\r
 +                              <file>fpu.c</file>\r
 +                              <file>gdt.c</file>\r
 +                              <file>i386-mcount.S</file>\r
 +                              <file>idt.c</file>\r
 +                              <file>irq.c</file>\r
 +                              <file>irqhand.s</file>\r
 +                              <file>kernel.c</file>\r
 +                              <file>ldt.c</file>\r
 +                              <file>stkswitch.S</file>\r
 +                              <file>syscall.S</file>\r
 +                              <file>thread.c</file>\r
 +                              <file>tlbflush.S</file>\r
 +                              <file>trap.s</file>\r
 +                              <file>tskswitch.S</file>\r
 +                              <file>tss.c</file>\r
-               <file>alert.c</file>\r
++                              <file>usercall.S</file>\r
 +                              <file>usertrap.c</file>\r
 +                              <file>v86m.c</file>\r
 +                              <file>v86m_sup.S</file>\r
 +                              <file>vdm.c</file>\r
 +                      </directory>\r
 +              </if>\r
-               <file>critical.c</file>\r
 +              <file>apc.c</file>\r
 +              <file>bug.c</file>\r
 +              <file>catch.c</file>\r
 +              <file>clock.c</file>\r
-               <file>error.c</file>\r
 +              <file>device.c</file>\r
 +              <file>dpc.c</file>\r
-               <file>btree.c</file>\r
 +              <file>event.c</file>\r
 +              <file>gmutex.c</file>\r
 +              <file>ipi.c</file>\r
 +              <file>kqueue.c</file>\r
 +              <file>kthread.c</file>\r
 +              <file>main.c</file>\r
 +              <file>mutex.c</file>\r
 +              <file>process.c</file>\r
 +              <file>profile.c</file>\r
 +              <file>queue.c</file>\r
 +              <file>sem.c</file>\r
 +              <file>spinlock.c</file>\r
 +              <file>timer.c</file>\r
++              <file>usercall.c</file>\r
 +              <file>wait.c</file>\r
 +      </directory>\r
 +      <directory name="cc">\r
 +              <file>cacheman.c</file>\r
 +              <file>copy.c</file>\r
 +              <file>fs.c</file>\r
 +              <file>mdl.c</file>\r
 +              <file>pin.c</file>\r
 +              <file>view.c</file>\r
 +      </directory>\r
 +      <directory name="cm">\r
 +              <file>import.c</file>\r
 +              <file>ntfunc.c</file>\r
 +              <file>regfile.c</file>\r
 +              <file>registry.c</file>\r
 +              <file>regobj.c</file>\r
 +      </directory>\r
 +      <directory name="dbg">\r
 +              <if property="ARCH" value="i386">\r
 +                      <directory name="i386">\r
 +                              <if property="KDBG" value="1">\r
 +                                      <group>\r
 +                                              <file>i386-dis.c</file>\r
 +                                              <file>kdb_help.S</file>\r
 +                                      </group>\r
 +                              </if>\r
 +                      </directory>\r
 +              </if>\r
 +              <if property="KDBG" value="1">\r
 +                      <file>kdb.c</file>\r
 +                      <file>kdb_keyboard.c</file>\r
 +                      <file>kdb_serial.c</file>\r
 +                      <file>rdebug.c</file>\r
 +              </if>\r
 +              <if property="DBG_OR_KDBG" value="true">\r
 +                      <file>kdb_symbols.c</file>\r
 +                      <file>profile.c</file>\r
 +              </if>\r
 +              <file>dbgctrl.c</file>\r
 +              <file>errinfo.c</file>\r
 +              <file>print.c</file>\r
 +              <file>user.c</file>\r
 +      </directory>\r
 +      <directory name="ex">\r
 +              <if property="ARCH" value="i386">\r
 +                      <directory name="i386">\r
 +                              <file>interlck.c</file>\r
 +                      </directory>\r
 +              </if>\r
-               <file>hashtab.c</file>\r
 +              <file>callback.c</file>\r
++              <file>error.c</file>\r
 +              <file>event.c</file>\r
 +              <file>evtpair.c</file>\r
 +              <file>fmutex.c</file>\r
-               <file>napi.c</file>\r
++              <file>handle.c</file>\r
 +              <file>init.c</file>\r
 +              <file>interlck.c</file>\r
 +              <file>list.c</file>\r
 +              <file>lookas.c</file>\r
 +              <file>mutant.c</file>\r
-               <file>stree.c</file>\r
 +              <file>power.c</file>\r
 +              <file>profile.c</file>\r
 +              <file>resource.c</file>\r
 +              <file>rundown.c</file>\r
 +              <file>sem.c</file>\r
-               <file>tinfo.c</file>\r
-               <file>w32call.c</file>\r
 +              <file>synch.c</file>\r
 +              <file>sysinfo.c</file>\r
 +              <file>time.c</file>\r
 +              <file>timer.c</file>\r
 +              <file>util.c</file>\r
 +              <file>uuid.c</file>\r
 +              <file>win32k.c</file>\r
 +              <file>work.c</file>\r
 +              <file>zone.c</file>\r
 +              <file>zw.S</file>\r
 +      </directory>\r
 +      <directory name="fs">\r
 +              <file>dbcsname.c</file>\r
 +              <file>filelock.c</file>\r
 +              <file>mcb.c</file>\r
 +              <file>mdl.c</file>\r
 +              <file>name.c</file>\r
 +              <file>notify.c</file>\r
 +              <file>oplock.c</file>\r
 +              <file>pool.c</file>\r
 +              <file>tunnel.c</file>\r
 +              <file>unc.c</file>\r
 +              <file>util.c</file>\r
 +      </directory>\r
 +      <directory name="inbv">\r
 +              <file>inbv.c</file>\r
 +      </directory>\r
 +      <directory name="io">\r
 +              <file>adapter.c</file>\r
 +              <file>arcname.c</file>\r
 +              <file>bootlog.c</file>\r
 +              <file>buildirp.c</file>\r
 +              <file>cancel.c</file>\r
 +              <file>cleanup.c</file>\r
 +              <file>cntrller.c</file>\r
 +              <file>create.c</file>\r
 +              <file>device.c</file>\r
 +              <file>deviface.c</file>\r
 +              <file>dir.c</file>\r
 +              <file>driver.c</file>\r
 +              <file>efi.c</file>\r
 +              <file>errlog.c</file>\r
 +              <file>error.c</file>\r
 +              <file>event.c</file>\r
 +              <file>file.c</file>\r
 +              <file>flush.c</file>\r
 +              <file>fs.c</file>\r
 +              <file>iocomp.c</file>\r
 +              <file>ioctrl.c</file>\r
 +              <file>iomgr.c</file>\r
 +              <file>iowork.c</file>\r
 +              <file>irp.c</file>\r
 +              <file>irq.c</file>\r
 +              <file>lock.c</file>\r
 +              <file>mailslot.c</file>\r
 +              <file>mdl.c</file>\r
 +              <file>npipe.c</file>\r
 +              <file>page.c</file>\r
 +              <file>parttab.c</file>\r
 +              <file>plugplay.c</file>\r
 +              <file>pnpdma.c</file>\r
 +              <file>pnpmgr.c</file>\r
 +              <file>pnpnotify.c</file>\r
 +              <file>pnpreport.c</file>\r
 +              <file>pnproot.c</file>\r
 +              <file>process.c</file>\r
 +              <file>queue.c</file>\r
 +              <file>rawfs.c</file>\r
 +              <file>remlock.c</file>\r
 +              <file>resource.c</file>\r
 +              <file>rw.c</file>\r
 +              <file>share.c</file>\r
 +              <file>shutdown.c</file>\r
 +              <file>symlink.c</file>\r
 +              <file>timer.c</file>\r
 +              <file>vpb.c</file>\r
 +              <file>wdm.c</file>\r
 +              <file>wmi.c</file>\r
 +              <file>xhaldisp.c</file>\r
 +              <file>xhaldrv.c</file>\r
 +      </directory>\r
 +      <directory name="kd">\r
 +              <file>dlog.c</file>\r
 +              <file>gdbstub.c</file>\r
 +              <file>kdebug.c</file>\r
 +              <file>mda.c</file>\r
 +              <file>service.c</file>\r
 +      </directory>\r
 +      <directory name="ldr">\r
 +              <file>init.c</file>\r
 +              <file>loader.c</file>\r
 +              <file>resource.c</file>\r
 +              <file>rtl.c</file>\r
 +              <file>sysdll.c</file>\r
 +              <file>userldr.c</file>\r
 +      </directory>\r
 +      <directory name="lpc">\r
 +              <file>close.c</file>\r
 +              <file>complete.c</file>\r
 +              <file>connect.c</file>\r
 +              <file>create.c</file>\r
 +              <file>listen.c</file>\r
 +              <file>port.c</file>\r
 +              <file>query.c</file>\r
 +              <file>queue.c</file>\r
 +              <file>receive.c</file>\r
 +              <file>reply.c</file>\r
 +              <file>send.c</file>\r
 +      </directory>\r
 +      <directory name="mm">\r
 +              <if property="ARCH" value="i386">\r
 +                      <directory name="i386">\r
 +                              <file>memsafe.s</file>\r
 +                              <file>page.c</file>\r
 +                              <file>pfault.c</file>\r
 +                      </directory>\r
 +              </if>\r
 +              <file>anonmem.c</file>\r
 +              <file>aspace.c</file>\r
 +              <file>balance.c</file>\r
 +              <file>cont.c</file>\r
 +              <file>drvlck.c</file>\r
 +              <file>elf32.c</file>\r
 +              <file>elf64.c</file>\r
 +              <file>freelist.c</file>\r
 +              <file>iospace.c</file>\r
 +              <file>kmap.c</file>\r
 +              <file>marea.c</file>\r
 +              <file>mdl.c</file>\r
 +              <file>mm.c</file>\r
 +              <file>mminit.c</file>\r
 +              <file>mpw.c</file>\r
 +              <file>ncache.c</file>\r
 +              <file>npool.c</file>\r
 +              <file>pagefile.c</file>\r
 +              <file>pageop.c</file>\r
 +              <file>pager.c</file>\r
 +              <file>pagfault.c</file>\r
 +              <file>paging.c</file>\r
 +              <file>pe.c</file>\r
 +              <file>physical.c</file>\r
 +              <file>pool.c</file>\r
 +              <file>ppool.c</file>\r
 +              <file>region.c</file>\r
 +              <file>rmap.c</file>\r
 +              <file>section.c</file>\r
 +              <file>verifier.c</file>\r
 +              <file>virtual.c</file>\r
 +              <file>wset.c</file>\r
 +      </directory>\r
 +      <directory name="ob">\r
 +              <file>dirobj.c</file>\r
 +              <file>handle.c</file>\r
 +              <file>namespc.c</file>\r
 +              <file>ntobj.c</file>\r
 +              <file>object.c</file>\r
 +              <file>sdcache.c</file>\r
 +              <file>security.c</file>\r
 +              <file>symlink.c</file>\r
++              <file>wait.c</file>\r
 +      </directory>\r
 +      <directory name="po">\r
 +              <file>power.c</file>\r
 +      </directory>\r
 +      <directory name="ps">\r
 +              <if property="ARCH" value="i386">\r
 +                      <directory name="i386">\r
 +                              <file>continue.c</file>\r
 +                      </directory>\r
 +              </if>\r
 +              <file>cid.c</file>\r
 +              <file>create.c</file>\r
 +              <file>debug.c</file>\r
 +              <file>idle.c</file>\r
 +              <file>job.c</file>\r
 +              <file>kill.c</file>\r
 +              <file>locale.c</file>\r
 +              <file>process.c</file>\r
 +              <file>psmgr.c</file>\r
++              <file>query.c</file>\r
++              <file>security.c</file>\r
 +              <file>suspend.c</file>\r
 +              <file>thread.c</file>\r
 +              <file>win32.c</file>\r
 +      </directory>\r
 +      <directory name="rtl">\r
 +              <if property="ARCH" value="i386">\r
 +                      <directory name="i386">\r
 +                              <file>alldiv.s</file>\r
 +                              <file>allmul.s</file>\r
 +                              <file>allrem.s</file>\r
 +                              <file>allshl.s</file>\r
 +                              <file>allshr.s</file>\r
 +                              <file>aulldiv.s</file>\r
 +                              <file>aullrem.s</file>\r
 +                              <file>aullshr.s</file>\r
 +                              <file>exception.c</file>\r
 +                              <file>seh.s</file>\r
 +                      </directory>\r
 +              </if>\r
 +              <file>atom.c</file>\r
 +              <file>capture.c</file>\r
 +              <file>ctype.c</file>\r
 +              <file>handle.c</file>\r
 +              <file>libsupp.c</file>\r
 +              <file>message.c</file>\r
 +              <file>misc.c</file>\r
 +              <file>nls.c</file>\r
 +              <file>purecall.c</file>\r
 +              <file>rangelist.c</file>\r
 +              <file>regio.c</file>\r
 +              <file>sprintf.c</file>\r
 +              <file>stdlib.c</file>\r
 +              <file>string.c</file>\r
 +              <file>strtok.c</file>\r
 +              <file>swprintf.c</file>\r
 +              <file>wstring.c</file>\r
 +      </directory>\r
 +      <directory name="se">\r
 +              <file>access.c</file>\r
 +              <file>acl.c</file>\r
 +              <file>audit.c</file>\r
 +              <file>lsa.c</file>\r
 +              <file>luid.c</file>\r
 +              <file>priv.c</file>\r
 +              <file>sd.c</file>\r
 +              <file>semgr.c</file>\r
 +              <file>sid.c</file>\r
 +              <file>token.c</file>\r
 +      </directory>\r
 +      <file>ntoskrnl.rc</file>\r
 +</module>\r
index 6a0cbc4,0000000..aee66c5
mode 100644,000000..100644
--- /dev/null
@@@ -1,6 -1,0 +1,7 @@@
 +<module name="regtests" type="win32dll" baseaddress="${BASEADDRESS_REGTESTS}">\r
 +      <importlibrary definition="regtests.def" />\r
 +      <include base="regtests">.</include>\r
++      <define name="__USE_W32API" />\r
 +      <library>kernel32</library>\r
 +      <file>regtests.c</file>\r
 +</module>\r
index 28474b0,0000000..2775a2b
mode 100644,000000..100644
--- /dev/null
@@@ -1,8 -1,0 +1,9 @@@
 +<module name="rpcss" type="win32cui">\r
 +      <include base="rpcss">.</include>\r
++      <define name="__USE_W32API" />\r
 +      <library>kernel32</library>\r
 +      <library>advapi32</library>\r
 +      <file>rpcss.c</file>\r
 +      <file>endpoint.c</file>\r
 +      <file>rpcss.rc</file>\r
 +</module>\r
@@@ -41,6 -38,8 +38,8 @@@
  #include <rpc.h>\r
  #include <rpcdce.h>\r
  \r
 -#include "pnp.h"\r
++#include "pnp_s.h"\r
\r
  #define DBG\r
  #define NDEBUG\r
  #include <debug.h>\r
index 20c6130,0000000..84ff6f9
mode 100644,000000..100644
--- /dev/null
@@@ -1,10 -1,0 +1,14 @@@
 +<module name="umpnpmgr" type="win32cui" installbase="system32" installname="umpnpmgr.exe">\r
 +      <include base="umpnpmgr">.</include>\r
++      <include base="pnp_server">.</include>\r
 +      <define name="__USE_W32API" />\r
++      <define name="UNICODE" />\r
++      <define name="_UNICODE" />\r
++      <library>pnp_server</library>\r
 +      <library>ntdll</library>\r
 +      <library>kernel32</library>\r
 +      <library>advapi32</library>\r
 +      <library>rpcrt4</library>\r
 +      <file>umpnpmgr.c</file>\r
 +      <file>umpnpmgr.rc</file>\r
 +</module>\r
index 6d6ba16,0000000..626b1c2
mode 100644,000000..100644
--- /dev/null
@@@ -1,26 -1,0 +1,27 @@@
 +<module name="smss" type="nativecui" installbase="system32" installname="smss.exe">\r
 +      <include base="smss">.</include>\r
 +      <define name="_DISABLE_TIDENTS" />\r
 +      <library>ntdll</library>\r
 +      <library>smdll</library>\r
 +      <linkerflag>-lgcc</linkerflag>\r
 +      <file>client.c</file>\r
 +      <file>debug.c</file>\r
 +      <file>init.c</file>\r
 +      <file>initdosdev.c</file>\r
 +      <file>initenv.c</file>\r
 +      <file>initheap.c</file>\r
 +      <file>initmv.c</file>\r
 +      <file>initobdir.c</file>\r
 +      <file>initpage.c</file>\r
 +      <file>initreg.c</file>\r
 +      <file>initrun.c</file>\r
 +      <file>initss.c</file>\r
 +      <file>initwkdll.c</file>\r
 +      <file>print.c</file>\r
 +      <file>smapi.c</file>\r
 +      <file>smapicomp.c</file>\r
 +      <file>smapiexec.c</file>\r
++      <file>smapiquery.c</file>\r
 +      <file>smss.c</file>\r
 +      <file>smss.rc</file>\r
 +</module>\r
index 525be8a,0000000..3a4d3a8
mode 100644,000000..100644
--- /dev/null
@@@ -1,69 -1,0 +1,74 @@@
-       <library>uuid</library>\r
 +<module name="explorer" type="win32gui" installbase="system32" installname="explorer.exe">\r
++      <linkerflag>-luuid</linkerflag>\r
++      <linkerflag>-lstdc++</linkerflag>\r
 +      <linkerflag>-fexceptions</linkerflag>\r
 +      <include base="explorer">.</include>\r
 +      <include base="ReactOS">include/expat</include>\r
 +      <define name="__USE_W32API" />\r
 +      <define name="UNICODE" />\r
 +      <define name="WIN32" />\r
 +      <define name="_ROS_" />\r
 +      <define name="_WIN32_IE">0x0600</define>\r
 +      <define name="_WIN32_WINNT">0x0501</define>\r
 +      <define name="WINVER">0x0500</define>\r
 +      <define name="__WINDRES__" />\r
-               <file>startup.c</file>\r
 +      <library>kernel32</library>\r
 +      <library>gdi32</library>\r
++      <library>user32</library>\r
 +      <library>ws2_32</library>\r
 +      <library>msimg32</library>\r
 +      <library>comctl32</library>\r
 +      <library>ole32</library>\r
 +      <library>oleaut32</library>\r
 +      <library>shell32</library>\r
 +      <library>expat</library>\r
 +      <library>notifyhook</library>\r
 +      <pch>precomp.h</pch>\r
 +      <directory name="desktop">\r
 +              <file>desktop.cpp</file>\r
 +      </directory>\r
 +      <directory name="dialogs">\r
 +              <file>searchprogram.cpp</file>\r
 +              <file>settings.cpp</file>\r
 +      </directory>\r
 +      <directory name="shell">\r
 +              <file>entries.cpp</file>\r
 +              <file>fatfs.cpp</file>\r
 +              <file>filechild.cpp</file>\r
 +              <file>shellfs.cpp</file>\r
 +              <file>mainframe.cpp</file>\r
 +              <file>ntobjfs.cpp</file>\r
 +              <file>pane.cpp</file>\r
 +              <file>regfs.cpp</file>\r
 +              <file>shellbrowser.cpp</file>\r
 +              <file>unixfs.cpp</file>\r
 +              <file>webchild.cpp</file>\r
 +              <file>winfs.cpp</file>\r
 +      </directory>\r
++      <directory name="services">\r
++              <file>shellservices.cpp</file>\r
++              <file>startup.c</file>\r
++      </directory>\r
 +      <directory name="taskbar">\r
 +              <file>desktopbar.cpp</file>\r
 +              <file>favorites.cpp</file>\r
 +              <file>taskbar.cpp</file>\r
 +              <file>startmenu.cpp</file>\r
 +              <file>traynotify.cpp</file>\r
 +              <file>quicklaunch.cpp</file>\r
 +      </directory>\r
 +      <directory name="utility">\r
 +              <file>shellclasses.cpp</file>\r
 +              <file>utility.cpp</file>\r
 +              <file>window.cpp</file>\r
 +              <file>dragdropimpl.cpp</file>\r
 +              <file>shellbrowserimpl.cpp</file>\r
 +              <file>xmlstorage.cpp</file>\r
 +      </directory>\r
 +      <file>explorer.cpp</file>\r
 +      <file>i386-stub-win32.c</file>\r
 +      <file>explorer.rc</file>\r
 +</module>\r
 +<directory name="notifyhook">\r
 +      <xi:include href="notifyhook/notifyhook.xml" />\r
 +</directory>\r
index 6b00bca,0000000..ec904da
mode 100644,000000..100644
--- /dev/null
@@@ -1,6 -1,0 +1,8 @@@
 +<module name="format" type="win32cui" installbase="system32" installname="format.exe">\r
 +      <include base="format">.</include>\r
++      <define name="__USE_W32API" />\r
 +      <library>ntdll</library>\r
++      <library>kernel32</library>\r
 +      <library>fmifs</library>\r
 +      <file>format.c</file>\r
 +</module>\r
index f98776b,0000000..46004e1
mode 100644,000000..100644
--- /dev/null
@@@ -1,10 -1,0 +1,11 @@@
 +<module name="services" type="win32cui">\r
 +      <include base="services">.</include>\r
++      <define name="__USE_W32API" />\r
 +      <library>ntdll</library>\r
 +      <library>kernel32</library>\r
 +      <library>user32</library>\r
 +      <library>advapi32</library>\r
 +      <file>services.c</file>\r
 +      <file>database.c</file>\r
 +      <file>services.rc</file>\r
 +</module>\r
Simple merge
index 320e5e1,0000000..4e34985
mode 100644,000000..100644
--- /dev/null
@@@ -1,773 -1,0 +1,776 @@@
-       if ( module.type == ObjectLibrary )\r
 +\r
 +#include "../../pch.h"\r
 +\r
 +#include "mingw.h"\r
 +#include <assert.h>\r
 +#include <dirent.h>\r
 +#include "modulehandler.h"\r
 +\r
 +#ifdef WIN32\r
 +#define MKDIR(s) mkdir(s)\r
 +#else\r
 +#define MKDIR(s) mkdir(s, 0755)\r
 +#endif\r
 +\r
 +using std::string;\r
 +using std::vector;\r
 +using std::set;\r
 +using std::map;\r
 +\r
 +typedef set<string> set_string;\r
 +\r
 +\r
 +string\r
 +v2s ( const string_list& v, int wrap_at )\r
 +{\r
 +      if ( !v.size() )\r
 +              return "";\r
 +      string s;\r
 +      int wrap_count = 0;\r
 +      for ( size_t i = 0; i < v.size(); i++ )\r
 +      {\r
 +              if ( !v[i].size() )\r
 +                      continue;\r
 +              if ( wrap_at > 0 && wrap_count++ == wrap_at )\r
 +                      s += " \\\n\t\t";\r
 +              else if ( s.size() )\r
 +                      s += " ";\r
 +              s += v[i];\r
 +      }\r
 +      return s;\r
 +}\r
 +\r
 +\r
 +Directory::Directory ( const string& name_ )\r
 +      : name(name_)\r
 +{\r
 +}\r
 +\r
 +void\r
 +Directory::Add ( const char* subdir )\r
 +{\r
 +      size_t i;\r
 +      string s1 = string ( subdir );\r
 +      if ( ( i = s1.find ( '$' ) ) != string::npos )\r
 +      {\r
 +              throw InvalidOperationException ( __FILE__,\r
 +                                                __LINE__,\r
 +                                                "No environment variables can be used here. Path was %s",\r
 +                                                subdir );\r
 +      }\r
 +\r
 +      const char* p = strpbrk ( subdir, "/\\" );\r
 +      if ( !p )\r
 +              p = subdir + strlen(subdir);\r
 +      string s ( subdir, p-subdir );\r
 +      if ( subdirs.find(s) == subdirs.end() )\r
 +              subdirs[s] = new Directory(s);\r
 +      if ( *p && *++p )\r
 +              subdirs[s]->Add ( p );\r
 +}\r
 +\r
 +bool\r
 +Directory::mkdir_p ( const char* path )\r
 +{\r
 +      DIR *directory;\r
 +      directory = opendir ( path );\r
 +      if ( directory != NULL )\r
 +      {\r
 +              closedir ( directory );\r
 +              return false;\r
 +      }\r
 +\r
 +      if ( MKDIR ( path ) != 0 )\r
 +              throw AccessDeniedException ( string ( path ) );\r
 +      return true;\r
 +}\r
 +\r
 +bool\r
 +Directory::CreateDirectory ( string path )\r
 +{\r
 +      size_t index = 0;\r
 +      size_t nextIndex;\r
 +      if ( isalpha ( path[0] ) && path[1] == ':' && path[2] == CSEP )\r
 +      {\r
 +              nextIndex = path.find ( CSEP, 3);\r
 +      }\r
 +      else\r
 +              nextIndex = path.find ( CSEP );\r
 +\r
 +      bool directoryWasCreated = false;\r
 +      while ( nextIndex != string::npos )\r
 +      {\r
 +              nextIndex = path.find ( CSEP, index + 1 );\r
 +              directoryWasCreated = mkdir_p ( path.substr ( 0, nextIndex ).c_str () );\r
 +              index = nextIndex;\r
 +      }\r
 +      return directoryWasCreated;\r
 +}\r
 +\r
 +string\r
 +Directory::ReplaceVariable ( string name,\r
 +                               string value,\r
 +                               string path )\r
 +{\r
 +      size_t i = path.find ( name );\r
 +      if ( i != string::npos )\r
 +              return path.replace ( i, name.length (), value );\r
 +      else\r
 +              return path;\r
 +}\r
 +\r
 +string\r
 +Directory::GetEnvironmentVariable ( const string& name )\r
 +{\r
 +      char* value = getenv ( name.c_str () );\r
 +      if ( value != NULL && strlen ( value ) > 0 )\r
 +              return ssprintf ( "%s",\r
 +                                value );\r
 +      else\r
 +              return "";\r
 +}\r
 +\r
 +string\r
 +Directory::GetEnvironmentVariablePathOrDefault ( const string& name,\r
 +                                                   const string& defaultValue )\r
 +{\r
 +      const string& environmentVariableValue = GetEnvironmentVariable ( name );\r
 +      if ( environmentVariableValue.length () > 0 )\r
 +              return NormalizeFilename ( environmentVariableValue );\r
 +      else\r
 +              return defaultValue;\r
 +}\r
 +\r
 +string\r
 +Directory::GetIntermediatePath ()\r
 +{\r
 +      return "obj-i386";\r
 +}\r
 +\r
 +string\r
 +Directory::GetOutputPath ()\r
 +{\r
 +      return "output-i386";\r
 +}\r
 +\r
 +string\r
 +Directory::GetInstallPath ()\r
 +{\r
 +      return GetEnvironmentVariablePathOrDefault ( "ROS_INSTALL",\r
 +                                                   "reactos" );\r
 +}\r
 +\r
 +void\r
 +Directory::ResolveVariablesInPath ( char* buf,\r
 +                                      string path )\r
 +{\r
 +      string s = ReplaceVariable ( "$(INTERMEDIATE)", GetIntermediatePath (), path );\r
 +      s = ReplaceVariable ( "$(OUTPUT)", GetOutputPath (), s );\r
 +      s = ReplaceVariable ( "$(INSTALL)", GetInstallPath (), s );\r
 +      strcpy ( buf, s.c_str () );\r
 +}\r
 +\r
 +void\r
 +Directory::GenerateTree ( const string& parent,\r
 +                            bool verbose )\r
 +{\r
 +      string path;\r
 +\r
 +      if ( parent.size() )\r
 +      {\r
 +              char buf[256];\r
 +              \r
 +              path = parent + SSEP + name;\r
 +              ResolveVariablesInPath ( buf, path );\r
 +              if ( CreateDirectory ( buf ) && verbose )\r
 +                      printf ( "Created %s\n", buf );\r
 +      }\r
 +      else\r
 +              path = name;\r
 +\r
 +      for ( directory_map::iterator i = subdirs.begin();\r
 +              i != subdirs.end();\r
 +              ++i )\r
 +      {\r
 +              i->second->GenerateTree ( path, verbose );\r
 +      }\r
 +}\r
 +\r
 +\r
 +static class MingwFactory : public Backend::Factory\r
 +{\r
 +public:\r
 +      MingwFactory() : Factory ( "mingw" ) {}\r
 +      Backend* operator() ( Project& project, bool verbose )\r
 +      {\r
 +              return new MingwBackend ( project, verbose );\r
 +      }\r
 +} factory;\r
 +\r
 +\r
 +MingwBackend::MingwBackend ( Project& project, bool verbose )\r
 +      : Backend ( project, verbose ),\r
 +        intermediateDirectory ( new Directory ("$(INTERMEDIATE)" ) ),\r
 +        outputDirectory ( new Directory ( "$(OUTPUT)" ) ),\r
 +        installDirectory ( new Directory ( "$(INSTALL)" ) )\r
 +{\r
 +}\r
 +\r
 +MingwBackend::~MingwBackend()\r
 +{\r
 +      delete intermediateDirectory;\r
 +      delete outputDirectory;\r
 +      delete installDirectory;\r
 +}\r
 +\r
 +string\r
 +MingwBackend::AddDirectoryTarget ( const string& directory,\r
 +                                     Directory* directoryTree )\r
 +{\r
 +      directoryTree->Add ( directory.c_str() );\r
 +      return directoryTree->name;\r
 +}\r
 +\r
 +void\r
 +MingwBackend::ProcessModules ()\r
 +{\r
 +      printf ( "Processing modules..." );\r
 +\r
 +      vector<MingwModuleHandler*> v;\r
 +      size_t i;\r
 +      for ( i = 0; i < ProjectNode.modules.size (); i++ )\r
 +      {\r
 +              Module& module = *ProjectNode.modules[i];\r
 +              MingwModuleHandler* h = MingwModuleHandler::InstanciateHandler (\r
 +                      module,\r
 +                      this );\r
 +              if ( module.host == HostDefault )\r
 +              {\r
 +                      module.host = h->DefaultHost();\r
 +                      assert ( module.host != HostDefault );\r
 +              }\r
 +              v.push_back ( h );\r
 +      }\r
 +\r
 +      size_t iend = v.size ();\r
 +\r
 +      for ( i = 0; i < iend; i++ )\r
 +              v[i]->GenerateObjectMacro();\r
 +      fprintf ( fMakefile, "\n" );\r
 +      for ( i = 0; i < iend; i++ )\r
 +              v[i]->GenerateTargetMacro();\r
 +      fprintf ( fMakefile, "\n" );\r
 +\r
 +      GenerateAllTarget ( v );\r
 +      GenerateInitTarget ();\r
 +\r
 +      for ( i = 0; i < iend; i++ )\r
 +              v[i]->GenerateOtherMacros();\r
 +\r
 +      for ( i = 0; i < iend; i++ )\r
 +      {\r
 +              MingwModuleHandler& h = *v[i];\r
 +              h.GeneratePreconditionDependencies ();\r
 +              h.Process ();\r
 +              h.GenerateInvocations ();\r
 +              h.GenerateCleanTarget ();\r
 +              delete v[i];\r
 +      }\r
 +\r
 +      printf ( "done\n" );\r
 +}\r
 +      \r
 +void\r
 +MingwBackend::Process ()\r
 +{\r
 +      DetectPipeSupport ();\r
 +      DetectPCHSupport ();\r
 +      CreateMakefile ();\r
 +      GenerateHeader ();\r
 +      GenerateGlobalVariables ();\r
 +      GenerateXmlBuildFilesMacro ();\r
 +      ProcessModules ();\r
 +      GenerateInstallTarget ();\r
 +      GenerateDirectories ();\r
 +      CheckAutomaticDependencies ();\r
 +      CloseMakefile ();\r
 +}\r
 +\r
 +void\r
 +MingwBackend::CreateMakefile ()\r
 +{\r
 +      fMakefile = fopen ( ProjectNode.makefile.c_str (), "w" );\r
 +      if ( !fMakefile )\r
 +              throw AccessDeniedException ( ProjectNode.makefile );\r
 +      MingwModuleHandler::SetBackend ( this );\r
 +      MingwModuleHandler::SetMakefile ( fMakefile );\r
 +      MingwModuleHandler::SetUsePch ( use_pch );\r
 +}\r
 +\r
 +void\r
 +MingwBackend::CloseMakefile () const\r
 +{\r
 +      if (fMakefile)\r
 +              fclose ( fMakefile );\r
 +}\r
 +\r
 +void\r
 +MingwBackend::GenerateHeader () const\r
 +{\r
 +      fprintf ( fMakefile, "# THIS FILE IS AUTOMATICALLY GENERATED, EDIT 'ReactOS.xml' INSTEAD\n\n" );\r
 +}\r
 +\r
 +void\r
 +MingwBackend::GenerateProjectCFlagsMacro ( const char* assignmentOperation,\r
 +                                           IfableData& data ) const\r
 +{\r
 +      size_t i;\r
 +\r
 +      fprintf (\r
 +              fMakefile,\r
 +              "PROJECT_CFLAGS %s",\r
 +              assignmentOperation );\r
 +      for ( i = 0; i < data.includes.size(); i++ )\r
 +      {\r
 +              fprintf (\r
 +                      fMakefile,\r
 +                      " -I%s",\r
 +                      data.includes[i]->directory.c_str() );\r
 +      }\r
 +\r
 +      for ( i = 0; i < data.defines.size(); i++ )\r
 +      {\r
 +              Define& d = *data.defines[i];\r
 +              fprintf (\r
 +                      fMakefile,\r
 +                      " -D%s",\r
 +                      d.name.c_str() );\r
 +              if ( d.value.size() )\r
 +                      fprintf (\r
 +                              fMakefile,\r
 +                              "=%s",\r
 +                              d.value.c_str() );\r
 +      }\r
 +      fprintf ( fMakefile, "\n" );\r
 +}\r
 +\r
 +void\r
 +MingwBackend::GenerateGlobalCFlagsAndProperties (\r
 +      const char* assignmentOperation,\r
 +      IfableData& data ) const\r
 +{\r
 +      size_t i;\r
 +\r
 +      for ( i = 0; i < data.properties.size(); i++ )\r
 +      {\r
 +              Property& prop = *data.properties[i];\r
 +              fprintf ( fMakefile, "%s := %s\n",\r
 +                      prop.name.c_str(),\r
 +                      prop.value.c_str() );\r
 +      }\r
 +\r
 +      if ( data.includes.size() || data.defines.size() )\r
 +      {\r
 +              GenerateProjectCFlagsMacro ( assignmentOperation,\r
 +                                           data );\r
 +      }\r
 +\r
 +      for ( i = 0; i < data.ifs.size(); i++ )\r
 +      {\r
 +              If& rIf = *data.ifs[i];\r
 +              if ( rIf.data.defines.size()\r
 +                      || rIf.data.includes.size()\r
 +                      || rIf.data.ifs.size() )\r
 +              {\r
 +                      fprintf (\r
 +                              fMakefile,\r
 +                              "ifeq (\"$(%s)\",\"%s\")\n",\r
 +                              rIf.property.c_str(),\r
 +                              rIf.value.c_str() );\r
 +                      GenerateGlobalCFlagsAndProperties (\r
 +                              "+=",\r
 +                              rIf.data );\r
 +                      fprintf (\r
 +                              fMakefile,\r
 +                              "endif\n\n" );\r
 +              }\r
 +      }\r
 +}\r
 +\r
 +string\r
 +MingwBackend::GenerateProjectLFLAGS () const\r
 +{\r
 +      string lflags;\r
 +      for ( size_t i = 0; i < ProjectNode.linkerFlags.size (); i++ )\r
 +      {\r
 +              LinkerFlag& linkerFlag = *ProjectNode.linkerFlags[i];\r
 +              if ( lflags.length () > 0 )\r
 +                      lflags += " ";\r
 +              lflags += linkerFlag.flag;\r
 +      }\r
 +      return lflags;\r
 +}\r
 +\r
 +void\r
 +MingwBackend::GenerateGlobalVariables () const\r
 +{\r
 +      GenerateGlobalCFlagsAndProperties (\r
 +              "=",\r
 +              ProjectNode.non_if_data );\r
 +      fprintf ( fMakefile, "PROJECT_RCFLAGS = $(PROJECT_CFLAGS)\n" );\r
++      fprintf ( fMakefile, "PROJECT_WIDLFLAGS = $(PROJECT_CFLAGS)\n" );\r
 +      fprintf ( fMakefile, "PROJECT_LFLAGS = %s\n",\r
 +                GenerateProjectLFLAGS ().c_str () );\r
 +      fprintf ( fMakefile, "\n" );\r
 +}\r
 +\r
 +bool\r
 +MingwBackend::IncludeInAllTarget ( const Module& module ) const\r
 +{\r
++      if ( MingwModuleHandler::ReferenceObjects ( module ) )\r
 +              return false;\r
 +      if ( module.type == BootSector )\r
 +              return false;\r
 +      if ( module.type == Iso )\r
 +              return false;\r
++      if ( module.type == Test )\r
++              return false;\r
 +      return true;\r
 +}\r
 +\r
 +void\r
 +MingwBackend::GenerateAllTarget ( const vector<MingwModuleHandler*>& handlers ) const\r
 +{\r
 +      fprintf ( fMakefile, "all:" );\r
 +      int wrap_count = 0;\r
 +      size_t iend = handlers.size ();\r
 +      for ( size_t i = 0; i < iend; i++ )\r
 +      {\r
 +              const Module& module = handlers[i]->module;\r
 +              if ( IncludeInAllTarget ( module ) )\r
 +              {\r
 +                      if ( wrap_count++ == 5 )\r
 +                              fprintf ( fMakefile, " \\\n\t\t" ), wrap_count = 0;\r
 +                      fprintf ( fMakefile,\r
 +                                " %s",\r
 +                                GetTargetMacro(module).c_str () );\r
 +              }\r
 +      }\r
 +      fprintf ( fMakefile, "\n\t\n\n" );\r
 +}\r
 +\r
 +string\r
 +MingwBackend::GetBuildToolDependencies () const\r
 +{\r
 +      string dependencies;\r
 +      for ( size_t i = 0; i < ProjectNode.modules.size (); i++ )\r
 +      {\r
 +              Module& module = *ProjectNode.modules[i];\r
 +              if ( module.type == BuildTool )\r
 +              {\r
 +                      if ( dependencies.length () > 0 )\r
 +                              dependencies += " ";\r
 +                      dependencies += module.GetDependencyPath ();\r
 +              }\r
 +      }\r
 +      return dependencies;\r
 +}\r
 +\r
 +void\r
 +MingwBackend::GenerateInitTarget () const\r
 +{\r
 +      fprintf ( fMakefile,\r
 +                "INIT = %s\n",\r
 +                GetBuildToolDependencies ().c_str () );\r
 +      fprintf ( fMakefile, "\n" );\r
 +}\r
 +\r
 +void\r
 +MingwBackend::GenerateXmlBuildFilesMacro() const\r
 +{\r
 +      fprintf ( fMakefile,\r
 +                "XMLBUILDFILES = %s \\\n",\r
 +                ProjectNode.GetProjectFilename ().c_str () );\r
 +      string xmlbuildFilenames;\r
 +      int numberOfExistingFiles = 0;\r
 +      for ( size_t i = 0; i < ProjectNode.xmlbuildfiles.size (); i++ )\r
 +      {\r
 +              XMLInclude& xmlbuildfile = *ProjectNode.xmlbuildfiles[i];\r
 +              if ( !xmlbuildfile.fileExists )\r
 +                      continue;\r
 +              numberOfExistingFiles++;\r
 +              if ( xmlbuildFilenames.length () > 0 )\r
 +                      xmlbuildFilenames += " ";\r
 +              xmlbuildFilenames += NormalizeFilename ( xmlbuildfile.topIncludeFilename );\r
 +              if ( numberOfExistingFiles % 5 == 4 || i == ProjectNode.xmlbuildfiles.size () - 1 )\r
 +              {\r
 +                      fprintf ( fMakefile,\r
 +                                "\t%s",\r
 +                                xmlbuildFilenames.c_str ());\r
 +                      if ( i == ProjectNode.xmlbuildfiles.size () - 1 )\r
 +                      {\r
 +                              fprintf ( fMakefile, "\n" );\r
 +                      }\r
 +                      else\r
 +                      {\r
 +                              fprintf ( fMakefile,\r
 +                                        " \\\n",\r
 +                                        xmlbuildFilenames.c_str () );\r
 +                      }\r
 +                      xmlbuildFilenames.resize ( 0 );\r
 +              }\r
 +              numberOfExistingFiles++;\r
 +      }\r
 +      fprintf ( fMakefile, "\n" );\r
 +}\r
 +\r
 +void\r
 +MingwBackend::CheckAutomaticDependencies ()\r
 +{\r
 +      printf ( "Checking automatic dependencies..." );\r
 +      AutomaticDependency automaticDependency ( ProjectNode );\r
 +      automaticDependency.Process ();\r
 +      automaticDependency.CheckAutomaticDependencies ( verbose );\r
 +      printf ( "done\n" );\r
 +}\r
 +\r
 +bool\r
 +MingwBackend::IncludeDirectoryTarget ( const string& directory ) const\r
 +{\r
 +      if ( directory == "$(INTERMEDIATE)" SSEP "tools")\r
 +              return false;\r
 +      else\r
 +              return true;\r
 +}\r
 +\r
 +void\r
 +MingwBackend::GenerateDirectories ()\r
 +{\r
 +      printf ( "Creating directories..." );\r
 +      intermediateDirectory->GenerateTree ( "", verbose );\r
 +      outputDirectory->GenerateTree ( "", verbose );\r
 +      installDirectory->GenerateTree ( "", verbose );\r
 +      printf ( "done\n" );\r
 +}\r
 +\r
 +void\r
 +MingwBackend::DetectPipeSupport ()\r
 +{\r
 +      printf ( "Detecting compiler -pipe support..." );\r
 +\r
 +      string pipe_detection = "tools" SSEP "rbuild" SSEP "backend" SSEP "mingw" SSEP "pipe_detection.c";\r
 +      string pipe_detectionObjectFilename = ReplaceExtension ( pipe_detection,\r
 +                                                               ".o" );\r
 +      string command = ssprintf (\r
 +              "gcc -pipe -c %s -o %s 2>%s",\r
 +              pipe_detection.c_str (),\r
 +              pipe_detectionObjectFilename.c_str (),\r
 +              NUL );\r
 +      int exitcode = system ( command.c_str () );\r
 +      FILE* f = fopen ( pipe_detectionObjectFilename.c_str (), "rb" );\r
 +      if ( f )\r
 +      {\r
 +              usePipe = (exitcode == 0);\r
 +              fclose ( f );\r
 +              unlink ( pipe_detectionObjectFilename.c_str () );\r
 +      }\r
 +      else\r
 +              usePipe = false;\r
 +\r
 +      if ( usePipe )\r
 +              printf ( "detected\n" );\r
 +      else\r
 +              printf ( "not detected\n" );\r
 +}\r
 +\r
 +void\r
 +MingwBackend::DetectPCHSupport ()\r
 +{\r
 +      printf ( "Detecting compiler pre-compiled header support..." );\r
 +\r
 +      string path = "tools" SSEP "rbuild" SSEP "backend" SSEP "mingw" SSEP "pch_detection.h";\r
 +      string cmd = ssprintf (\r
 +              "gcc -c %s 2>%s",\r
 +              path.c_str (),\r
 +              NUL );\r
 +      system ( cmd.c_str () );\r
 +      path += ".gch";\r
 +\r
 +      FILE* f = fopen ( path.c_str (), "rb" );\r
 +      if ( f )\r
 +      {\r
 +              use_pch = true;\r
 +              fclose ( f );\r
 +              unlink ( path.c_str () );\r
 +      }\r
 +      else\r
 +              use_pch = false;\r
 +\r
 +      if ( use_pch )\r
 +              printf ( "detected\n" );\r
 +      else\r
 +              printf ( "not detected\n" );\r
 +}\r
 +\r
 +void\r
 +MingwBackend::GetNonModuleInstallTargetFiles (\r
 +      vector<string>& out ) const\r
 +{\r
 +      for ( size_t i = 0; i < ProjectNode.installfiles.size (); i++ )\r
 +      {\r
 +              const InstallFile& installfile = *ProjectNode.installfiles[i];\r
 +              string targetFilenameNoFixup = installfile.base + SSEP + installfile.newname;\r
 +              string targetFilename = MingwModuleHandler::PassThruCacheDirectory (\r
 +                      NormalizeFilename ( targetFilenameNoFixup ),\r
 +                      installDirectory );\r
 +              out.push_back ( targetFilename );\r
 +      }\r
 +}\r
 +\r
 +void\r
 +MingwBackend::GetModuleInstallTargetFiles (\r
 +      vector<string>& out ) const\r
 +{\r
 +      for ( size_t i = 0; i < ProjectNode.modules.size (); i++ )\r
 +      {\r
 +              const Module& module = *ProjectNode.modules[i];\r
 +              if ( module.installName.length () > 0 )\r
 +              {\r
 +                      string targetFilenameNoFixup = module.installBase + SSEP + module.installName;\r
 +                      string targetFilename = MingwModuleHandler::PassThruCacheDirectory (\r
 +                              NormalizeFilename ( targetFilenameNoFixup ),\r
 +                              installDirectory );\r
 +                      out.push_back ( targetFilename );\r
 +              }\r
 +      }\r
 +}\r
 +\r
 +void\r
 +MingwBackend::GetInstallTargetFiles (\r
 +      vector<string>& out ) const\r
 +{\r
 +      GetNonModuleInstallTargetFiles ( out );\r
 +      GetModuleInstallTargetFiles ( out );\r
 +}\r
 +\r
 +void\r
 +MingwBackend::OutputInstallTarget ( const string& sourceFilename,\r
 +                                      const string& targetFilename,\r
 +                                      const string& targetDirectory )\r
 +{\r
 +      string normalizedTargetFilename = MingwModuleHandler::PassThruCacheDirectory (\r
 +              NormalizeFilename ( targetDirectory + SSEP + targetFilename ),\r
 +              installDirectory );\r
 +      string normalizedTargetDirectory = MingwModuleHandler::PassThruCacheDirectory (\r
 +              NormalizeFilename ( targetDirectory ),\r
 +              installDirectory );\r
 +      fprintf ( fMakefile,\r
 +                "%s: %s %s\n",\r
 +                normalizedTargetFilename.c_str (),\r
 +                sourceFilename.c_str (),\r
 +                normalizedTargetDirectory.c_str () );\r
 +      fprintf ( fMakefile,\r
 +                "\t$(ECHO_CP)\n" );\r
 +      fprintf ( fMakefile,\r
 +                "\t${cp} %s %s 1>$(NUL)\n",\r
 +                sourceFilename.c_str (),\r
 +                normalizedTargetFilename.c_str () );\r
 +}\r
 +\r
 +void\r
 +MingwBackend::OutputNonModuleInstallTargets ()\r
 +{\r
 +      for ( size_t i = 0; i < ProjectNode.installfiles.size (); i++ )\r
 +      {\r
 +              const InstallFile& installfile = *ProjectNode.installfiles[i];\r
 +              OutputInstallTarget ( installfile.GetPath (),\r
 +                                installfile.newname,\r
 +                                installfile.base );\r
 +      }\r
 +}\r
 +\r
 +void\r
 +MingwBackend::OutputModuleInstallTargets ()\r
 +{\r
 +      for ( size_t i = 0; i < ProjectNode.modules.size (); i++ )\r
 +      {\r
 +              const Module& module = *ProjectNode.modules[i];\r
 +              if ( module.installName.length () > 0 )\r
 +              {\r
 +                      string sourceFilename = MingwModuleHandler::PassThruCacheDirectory (\r
 +                              NormalizeFilename ( module.GetPath () ),\r
 +                              outputDirectory );\r
 +                      OutputInstallTarget ( sourceFilename,\r
 +                                        module.installName,\r
 +                                        module.installBase );\r
 +              }\r
 +      }\r
 +}\r
 +\r
 +string\r
 +MingwBackend::GetRegistrySourceFiles ()\r
 +{\r
 +      return "bootdata" SSEP "hivecls.inf "\r
 +              "bootdata" SSEP "hivedef.inf "\r
 +              "bootdata" SSEP "hiveinst.inf "\r
 +              "bootdata" SSEP "hivesft.inf "\r
 +              "bootdata" SSEP "hivesys.inf";\r
 +}\r
 +\r
 +string\r
 +MingwBackend::GetRegistryTargetFiles ()\r
 +{\r
 +      string system32ConfigDirectory = NormalizeFilename (\r
 +              MingwModuleHandler::PassThruCacheDirectory (\r
 +              "system32" SSEP "config" SSEP,\r
 +              installDirectory ) );\r
 +      return system32ConfigDirectory + SSEP "default " +\r
 +              system32ConfigDirectory + SSEP "sam " +\r
 +              system32ConfigDirectory + SSEP "security " +\r
 +              system32ConfigDirectory + SSEP "software " +\r
 +              system32ConfigDirectory + SSEP "system";\r
 +}\r
 +\r
 +void\r
 +MingwBackend::OutputRegistryInstallTarget ()\r
 +{\r
 +      string system32ConfigDirectory = NormalizeFilename (\r
 +              MingwModuleHandler::PassThruCacheDirectory (\r
 +              "system32" SSEP "config" SSEP,\r
 +              installDirectory ) );\r
 +\r
 +      string registrySourceFiles = GetRegistrySourceFiles ();\r
 +      string registryTargetFiles = GetRegistryTargetFiles ();\r
 +      fprintf ( fMakefile,\r
 +                "install_registry: %s\n",\r
 +                registryTargetFiles.c_str () );\r
 +      fprintf ( fMakefile,\r
 +                "%s: %s %s $(MKHIVE_TARGET)\n",\r
 +                registryTargetFiles.c_str (),\r
 +                registrySourceFiles.c_str (),\r
 +                system32ConfigDirectory.c_str () );\r
 +      fprintf ( fMakefile,\r
 +                "\t$(ECHO_MKHIVE)\n" );\r
 +      fprintf ( fMakefile,\r
 +                "\t$(MKHIVE_TARGET) bootdata %s bootdata" SSEP "hiveinst.inf\n",\r
 +                system32ConfigDirectory.c_str () );\r
 +      fprintf ( fMakefile,\r
 +                "\n" );\r
 +}\r
 +\r
 +void\r
 +MingwBackend::GenerateInstallTarget ()\r
 +{\r
 +      vector<string> vInstallTargetFiles;\r
 +      GetInstallTargetFiles ( vInstallTargetFiles );\r
 +      string installTargetFiles = v2s ( vInstallTargetFiles, 5 );\r
 +\r
 +      fprintf ( fMakefile,\r
 +                "install: %s install_registry\n",\r
 +                installTargetFiles.c_str () );\r
 +      OutputNonModuleInstallTargets ();\r
 +      OutputModuleInstallTargets ();\r
 +      OutputRegistryInstallTarget ();\r
 +      fprintf ( fMakefile,\r
 +                "\n" );\r
 +}\r
index 09e71f7,0000000..03e2514
mode 100644,000000..100644
--- /dev/null
@@@ -1,2423 -1,0 +1,2646 @@@
-       if ( importedModule.type == ObjectLibrary )\r
 +#include "../../pch.h"\r
 +#include <assert.h>\r
 +\r
 +#include "../../rbuild.h"\r
 +#include "mingw.h"\r
 +#include "modulehandler.h"\r
 +\r
 +using std::string;\r
 +using std::vector;\r
 +\r
 +#define CLEAN_FILE(f) clean_files.push_back ( f ); /*if ( module.name == "crt" ) printf ( "%s(%i): clean: %s\n", __FILE__, __LINE__, f.c_str() )*/\r
 +\r
 +static string ros_temp = "$(TEMPORARY)";\r
 +MingwBackend*\r
 +MingwModuleHandler::backend = NULL;\r
 +FILE*\r
 +MingwModuleHandler::fMakefile = NULL;\r
 +bool\r
 +MingwModuleHandler::use_pch = false;\r
 +\r
 +string\r
 +PrefixFilename (\r
 +      const string& filename,\r
 +      const string& prefix )\r
 +{\r
 +      if ( !prefix.length() )\r
 +              return filename;\r
 +      string out;\r
 +      const char* pfilename = filename.c_str();\r
 +      const char* p1 = strrchr ( pfilename, '/' );\r
 +      const char* p2 = strrchr ( pfilename, '\\' );\r
 +      if ( p1 || p2 )\r
 +      {\r
 +              if ( p2 > p1 )\r
 +                      p1 = p2;\r
 +              out += string(pfilename,p1-pfilename) + CSEP;\r
 +              pfilename = p1 + 1;\r
 +      }\r
 +      out += prefix + pfilename;\r
 +      return out;\r
 +}\r
 +\r
 +string\r
 +GetTargetMacro ( const Module& module, bool with_dollar )\r
 +{\r
 +      string s ( module.name );\r
 +      strupr ( &s[0] );\r
 +      s += "_TARGET";\r
 +      if ( with_dollar )\r
 +              return ssprintf ( "$(%s)", s.c_str() );\r
 +      return s;\r
 +}\r
 +\r
 +MingwModuleHandler::MingwModuleHandler (\r
 +      const Module& module_ )\r
 +\r
 +      : module(module_)\r
 +{\r
 +}\r
 +\r
 +MingwModuleHandler::~MingwModuleHandler()\r
 +{\r
 +}\r
 +\r
 +/*static*/ void\r
 +MingwModuleHandler::SetBackend ( MingwBackend* backend_ )\r
 +{\r
 +      backend = backend_;\r
 +}\r
 +\r
 +/*static*/ void\r
 +MingwModuleHandler::SetMakefile ( FILE* f )\r
 +{\r
 +      fMakefile = f;\r
 +}\r
 +\r
 +/*static*/ void\r
 +MingwModuleHandler::SetUsePch ( bool b )\r
 +{\r
 +      use_pch = b;\r
 +}\r
 +\r
 +/* static*/ string\r
 +MingwModuleHandler::RemoveVariables ( string path)\r
 +{\r
 +      size_t i = path.find ( '$' );\r
 +      if ( i != string::npos )\r
 +      {\r
 +              size_t j = path.find ( ')', i );\r
 +              if ( j != string::npos )\r
 +              {\r
 +                      if ( j + 2 < path.length () && path[j + 1] == CSEP )\r
 +                              return path.substr ( j + 2);\r
 +                      else\r
 +                              return path.substr ( j + 1);\r
 +              }\r
 +      }\r
 +      return path;\r
 +}\r
 +\r
 +/*static*/ string\r
 +MingwModuleHandler::PassThruCacheDirectory (\r
 +      const string &file,\r
 +      Directory* directoryTree )\r
 +{\r
 +      string directory ( GetDirectory ( RemoveVariables ( file ) ) );\r
 +      string generatedFilesDirectory = backend->AddDirectoryTarget ( directory,\r
 +                                                                     directoryTree );\r
 +      if ( directory.find ( generatedFilesDirectory ) != string::npos )\r
 +              /* This path already includes the generated files directory variable */\r
 +              return file;\r
 +      else\r
 +              return generatedFilesDirectory + SSEP + file;\r
 +}\r
 +\r
 +/*static*/ string\r
 +MingwModuleHandler::GetTargetFilename (\r
 +      const Module& module,\r
 +      string_list* pclean_files )\r
 +{\r
 +      string target = PassThruCacheDirectory (\r
 +              NormalizeFilename ( module.GetPath () ),\r
 +              backend->outputDirectory );\r
 +      if ( pclean_files )\r
 +      {\r
 +              string_list& clean_files = *pclean_files;\r
 +              CLEAN_FILE ( target );\r
 +      }\r
 +      return target;\r
 +}\r
 +\r
 +/*static*/ string\r
 +MingwModuleHandler::GetImportLibraryFilename (\r
 +      const Module& module,\r
 +      string_list* pclean_files )\r
 +{\r
 +      string target = PassThruCacheDirectory (\r
 +              NormalizeFilename ( module.GetDependencyPath () ),\r
 +              backend->outputDirectory );\r
 +      if ( pclean_files )\r
 +      {\r
 +              string_list& clean_files = *pclean_files;\r
 +              CLEAN_FILE ( target );\r
 +      }\r
 +      return target;\r
 +}\r
 +\r
 +/*static*/ MingwModuleHandler*\r
 +MingwModuleHandler::InstanciateHandler (\r
 +      const Module& module,\r
 +      MingwBackend* backend )\r
 +{\r
 +      MingwModuleHandler* handler;\r
 +      switch ( module.type )\r
 +      {\r
 +              case BuildTool:\r
 +                      handler = new MingwBuildToolModuleHandler ( module );\r
 +                      break;\r
 +              case StaticLibrary:\r
 +                      handler = new MingwStaticLibraryModuleHandler ( module );\r
 +                      break;\r
 +              case ObjectLibrary:\r
 +                      handler = new MingwObjectLibraryModuleHandler ( module );\r
 +                      break;\r
 +              case Kernel:\r
 +                      handler = new MingwKernelModuleHandler ( module );\r
 +                      break;\r
 +              case NativeCUI:\r
 +                      handler = new MingwNativeCUIModuleHandler ( module );\r
 +                      break;\r
 +              case Win32CUI:\r
 +                      handler = new MingwWin32CUIModuleHandler ( module );\r
 +                      break;\r
 +              case Win32GUI:\r
 +                      handler = new MingwWin32GUIModuleHandler ( module );\r
 +                      break;\r
 +              case KernelModeDLL:\r
 +                      handler = new MingwKernelModeDLLModuleHandler ( module );\r
 +                      break;\r
 +              case NativeDLL:\r
 +                      handler = new MingwNativeDLLModuleHandler ( module );\r
 +                      break;\r
 +              case Win32DLL:\r
 +                      handler = new MingwWin32DLLModuleHandler ( module );\r
 +                      break;\r
 +              case KernelModeDriver:\r
 +                      handler = new MingwKernelModeDriverModuleHandler ( module );\r
 +                      break;\r
 +              case BootLoader:\r
 +                      handler = new MingwBootLoaderModuleHandler ( module );\r
 +                      break;\r
 +              case BootSector:\r
 +                      handler = new MingwBootSectorModuleHandler ( module );\r
 +                      break;\r
 +              case Iso:\r
 +                      handler = new MingwIsoModuleHandler ( module );\r
 +                      break;\r
 +              case Test:\r
 +                      handler = new MingwTestModuleHandler ( module );\r
 +                      break;\r
++              case RpcServer:\r
++                      handler = new MingwRpcServerModuleHandler ( module );\r
++                      break;\r
++              case RpcClient:\r
++                      handler = new MingwRpcClientModuleHandler ( module );\r
++                      break;\r
 +              default:\r
 +                      throw UnknownModuleTypeException (\r
 +                              module.node.location,\r
 +                              module.type );\r
 +                      break;\r
 +      }\r
 +      return handler;\r
 +}\r
 +\r
 +string\r
 +MingwModuleHandler::GetWorkingDirectory () const\r
 +{\r
 +      return ".";\r
 +}\r
 +\r
 +string\r
 +MingwModuleHandler::GetBasename ( const string& filename ) const\r
 +{\r
 +      size_t index = filename.find_last_of ( '.' );\r
 +      if ( index != string::npos )\r
 +              return filename.substr ( 0, index );\r
 +      return "";\r
 +}\r
 +\r
 +string\r
 +MingwModuleHandler::GetActualSourceFilename (\r
 +      const string& filename ) const\r
 +{\r
 +      string extension = GetExtension ( filename );\r
 +      if ( extension == ".spec" || extension == ".SPEC" )\r
 +      {\r
 +              string basename = GetBasename ( filename );\r
 +              return PassThruCacheDirectory ( NormalizeFilename ( basename + ".stubs.c" ),\r
 +                                              backend->intermediateDirectory );\r
 +      }\r
++      else if ( extension == ".idl" || extension == ".IDL" )\r
++      {\r
++              string basename = GetBasename ( filename );\r
++              string newname;\r
++              if ( module.type == RpcServer )\r
++                      newname = basename + "_s.c";\r
++              else\r
++                      newname = basename + "_c.c";\r
++              return PassThruCacheDirectory ( NormalizeFilename ( newname ),\r
++                                              backend->intermediateDirectory );\r
++      }\r
 +      else\r
 +              return filename;\r
 +}\r
 +\r
 +string\r
 +MingwModuleHandler::GetModuleArchiveFilename () const\r
 +{\r
 +      if ( module.type == StaticLibrary )\r
 +              return GetTargetFilename ( module, NULL );\r
 +      return PassThruCacheDirectory ( ReplaceExtension (\r
 +              NormalizeFilename ( module.GetPath () ),\r
 +              ".temp.a" ),\r
 +              backend->intermediateDirectory );\r
 +}\r
 +\r
 +bool\r
 +MingwModuleHandler::IsGeneratedFile ( const File& file ) const\r
 +{\r
 +      string extension = GetExtension ( file.name );\r
 +      return ( extension == ".spec" || extension == ".SPEC" );\r
 +}\r
 +\r
++/*static*/ bool\r
++MingwModuleHandler::ReferenceObjects (\r
++      const Module& module )\r
++{\r
++      if ( module.type == ObjectLibrary )\r
++              return true;\r
++      if ( module.type == RpcServer )\r
++              return true;\r
++      if ( module.type == RpcClient )\r
++              return true;\r
++      return false;\r
++}\r
++\r
 +string\r
 +MingwModuleHandler::GetImportLibraryDependency (\r
 +      const Module& importedModule )\r
 +{\r
 +      string dep;\r
-       // TODO FIXME - do we *really* not want to call\r
-       // GetDefinitionDependencies() if dependencies.size() == 0 ???\r
++      if ( ReferenceObjects ( importedModule ) )\r
 +              dep = GetTargetMacro ( importedModule );\r
 +      else\r
 +              dep = GetImportLibraryFilename ( importedModule, NULL );\r
 +      return dep;\r
 +}\r
 +\r
++void\r
++MingwModuleHandler::GetTargets ( const Module& dependencyModule,\r
++                                   string_list& targets )\r
++{\r
++      if ( dependencyModule.invocations.size () > 0 )\r
++      {\r
++              for ( size_t i = 0; i < dependencyModule.invocations.size (); i++ )\r
++              {\r
++                      Invoke& invoke = *dependencyModule.invocations[i];\r
++                      invoke.GetTargets ( targets );\r
++              }\r
++      }\r
++      else\r
++              targets.push_back ( GetImportLibraryDependency ( dependencyModule ) );\r
++}\r
++\r
 +void\r
 +MingwModuleHandler::GetModuleDependencies (\r
 +      string_list& dependencies )\r
 +{\r
 +      size_t iend = module.dependencies.size ();\r
 +\r
-               dependencyModule.GetTargets ( dependencies );\r
 +      if ( iend == 0 )\r
 +              return;\r
 +      \r
 +      for ( size_t i = 0; i < iend; i++ )\r
 +      {\r
 +              const Dependency& dependency = *module.dependencies[i];\r
 +              const Module& dependencyModule = *dependency.dependencyModule;\r
-       fprintf ( fMakefile,\r
-                 "%s: %s $(WRC_TARGET) | %s\n",\r
-                 objectFilename.c_str (),\r
-                 sourceFilename.c_str (),\r
-                 GetDirectory ( objectFilename ).c_str () );\r
-       fprintf ( fMakefile, "\t$(ECHO_WRC)\n" );\r
-       fprintf ( fMakefile,\r
-                "\t${gcc} -xc -E -DRC_INVOKED ${%s} %s > %s\n",\r
-                windresflagsMacro.c_str (),\r
-                sourceFilename.c_str (),\r
-                rciFilename.c_str () );\r
-       fprintf ( fMakefile,\r
-                "\t$(Q)$(WRC_TARGET) ${%s} %s %s\n",\r
-                windresflagsMacro.c_str (),\r
-                rciFilename.c_str (),\r
-                resFilename.c_str () );\r
-       fprintf ( fMakefile,\r
-                "\t-@${rm} %s 2>$(NUL)\n",\r
-                rciFilename.c_str () );\r
-       fprintf ( fMakefile,\r
-                "\t${windres} %s -o $@\n",\r
-                resFilename.c_str () );\r
-       fprintf ( fMakefile,\r
-                "\t-@${rm} %s 2>$(NUL)\n",\r
-                resFilename.c_str () );\r
++              GetTargets ( dependencyModule,\r
++                           dependencies );\r
 +      }\r
 +      GetDefinitionDependencies ( dependencies );\r
 +}\r
 +\r
 +void\r
 +MingwModuleHandler::GetSourceFilenames (\r
 +      string_list& list,\r
 +      bool includeGeneratedFiles ) const\r
 +{\r
 +      size_t i;\r
 +\r
 +      const vector<File*>& files = module.non_if_data.files;\r
 +      for ( i = 0; i < files.size (); i++ )\r
 +      {\r
 +              if ( includeGeneratedFiles || !IsGeneratedFile ( *files[i] ) )\r
 +              {\r
 +                      list.push_back (\r
 +                              GetActualSourceFilename ( files[i]->name ) );\r
 +              }\r
 +      }\r
 +      // intentionally make a copy so that we can append more work in\r
 +      // the middle of processing without having to go recursive\r
 +      vector<If*> v = module.non_if_data.ifs;\r
 +      for ( i = 0; i < v.size (); i++ )\r
 +      {\r
 +              size_t j;\r
 +              If& rIf = *v[i];\r
 +              // check for sub-ifs to add to list\r
 +              const vector<If*>& ifs = rIf.data.ifs;\r
 +              for ( j = 0; j < ifs.size (); j++ )\r
 +                      v.push_back ( ifs[j] );\r
 +              const vector<File*>& files = rIf.data.files;\r
 +              for ( j = 0; j < files.size (); j++ )\r
 +              {\r
 +                      File& file = *files[j];\r
 +                      if ( includeGeneratedFiles || !IsGeneratedFile ( file ) )\r
 +                      {\r
 +                              list.push_back (\r
 +                                      GetActualSourceFilename ( file.name ) );\r
 +                      }\r
 +              }\r
 +      }\r
 +}\r
 +\r
 +void\r
 +MingwModuleHandler::GetSourceFilenamesWithoutGeneratedFiles (\r
 +      string_list& list ) const\r
 +{\r
 +      GetSourceFilenames ( list, false );\r
 +}\r
 +\r
 +string\r
 +MingwModuleHandler::GetObjectFilename (\r
 +      const string& sourceFilename,\r
 +      string_list* pclean_files ) const\r
 +{\r
 +      Directory* directoryTree;\r
 +\r
 +      string newExtension;\r
 +      string extension = GetExtension ( sourceFilename );\r
 +      if ( extension == ".rc" || extension == ".RC" )\r
 +              newExtension = ".coff";\r
 +      else if ( extension == ".spec" || extension == ".SPEC" )\r
 +              newExtension = ".stubs.o";\r
++      else if ( extension == ".idl" || extension == ".IDL" )\r
++      {\r
++              if ( module.type == RpcServer )\r
++                      newExtension = "_s.o";\r
++              else\r
++                      newExtension = "_c.o";\r
++      }\r
 +      else\r
 +              newExtension = ".o";\r
 +      \r
 +      if ( module.type == BootSector )\r
 +              directoryTree = backend->outputDirectory;\r
 +      else\r
 +              directoryTree = backend->intermediateDirectory;\r
 +\r
 +      string obj_file = PassThruCacheDirectory (\r
 +              NormalizeFilename ( ReplaceExtension (\r
 +                      RemoveVariables ( sourceFilename ),\r
 +                                        newExtension ) ),\r
 +                      directoryTree );\r
 +      if ( pclean_files )\r
 +      {\r
 +              string_list& clean_files = *pclean_files;\r
 +              CLEAN_FILE ( obj_file );\r
 +      }\r
 +      return obj_file;\r
 +}\r
 +\r
 +void\r
 +MingwModuleHandler::GenerateCleanTarget () const\r
 +{\r
 +      if ( 0 == clean_files.size() )\r
 +              return;\r
 +      fprintf ( fMakefile, ".PHONY: %s_clean\n", module.name.c_str() );\r
 +      fprintf ( fMakefile, "%s_clean:\n\t-@$(rm)", module.name.c_str() );\r
 +      for ( size_t i = 0; i < clean_files.size(); i++ )\r
 +      {\r
 +              if ( 9==((i+1)%10) )\r
 +                      fprintf ( fMakefile, " 2>$(NUL)\n\t-@$(rm)" );\r
 +              fprintf ( fMakefile, " %s", clean_files[i].c_str() );\r
 +      }\r
 +      fprintf ( fMakefile, " 2>$(NUL)\n" );\r
 +      fprintf ( fMakefile, "clean: %s_clean\n\n", module.name.c_str() );\r
 +}\r
 +\r
 +string\r
 +MingwModuleHandler::GetObjectFilenames ()\r
 +{\r
 +      const vector<File*>& files = module.non_if_data.files;\r
 +      if ( files.size () == 0 )\r
 +              return "";\r
 +      \r
 +      string objectFilenames ( "" );\r
 +      for ( size_t i = 0; i < files.size (); i++ )\r
 +      {\r
 +              if ( objectFilenames.size () > 0 )\r
 +                      objectFilenames += " ";\r
 +              objectFilenames +=\r
 +                      GetObjectFilename ( files[i]->name, NULL );\r
 +      }\r
 +      return objectFilenames;\r
 +}\r
 +\r
 +string\r
 +MingwModuleHandler::GenerateGccDefineParametersFromVector (\r
 +      const vector<Define*>& defines ) const\r
 +{\r
 +      string parameters;\r
 +      for ( size_t i = 0; i < defines.size (); i++ )\r
 +      {\r
 +              Define& define = *defines[i];\r
 +              if (parameters.length () > 0)\r
 +                      parameters += " ";\r
 +              parameters += "-D";\r
 +              parameters += define.name;\r
 +              if (define.value.length () > 0)\r
 +              {\r
 +                      parameters += "=";\r
 +                      parameters += define.value;\r
 +              }\r
 +      }\r
 +      return parameters;\r
 +}\r
 +\r
 +string\r
 +MingwModuleHandler::GenerateGccDefineParameters () const\r
 +{\r
 +      string parameters = GenerateGccDefineParametersFromVector ( module.project.non_if_data.defines );\r
 +      string s = GenerateGccDefineParametersFromVector ( module.non_if_data.defines );\r
 +      if ( s.length () > 0 )\r
 +      {\r
 +              parameters += " ";\r
 +              parameters += s;\r
 +      }\r
 +      return parameters;\r
 +}\r
 +\r
 +string\r
 +MingwModuleHandler::ConcatenatePaths (\r
 +      const string& path1,\r
 +      const string& path2 ) const\r
 +{\r
 +      if ( ( path1.length () == 0 ) || ( path1 == "." ) || ( path1 == "./" ) )\r
 +              return path2;\r
 +      if ( path1[path1.length ()] == CSEP )\r
 +              return path1 + path2;\r
 +      else\r
 +              return path1 + CSEP + path2;\r
 +}\r
 +\r
 +string\r
 +MingwModuleHandler::GenerateGccIncludeParametersFromVector ( const vector<Include*>& includes ) const\r
 +{\r
 +      string parameters;\r
 +      for ( size_t i = 0; i < includes.size (); i++ )\r
 +      {\r
 +              Include& include = *includes[i];\r
 +              if ( parameters.length () > 0 )\r
 +                      parameters += " ";\r
 +              parameters += "-I" + include.directory;\r
 +      }\r
 +      return parameters;\r
 +}\r
 +\r
 +string\r
 +MingwModuleHandler::GenerateGccIncludeParameters () const\r
 +{\r
 +      string parameters = GenerateGccIncludeParametersFromVector ( module.non_if_data.includes );\r
 +      string s = GenerateGccIncludeParametersFromVector ( module.project.non_if_data.includes );\r
 +      if ( s.length () > 0 )\r
 +      {\r
 +              parameters += " ";\r
 +              parameters += s;\r
 +      }\r
 +      return parameters;\r
 +}\r
 +\r
 +\r
 +string\r
 +MingwModuleHandler::GenerateCompilerParametersFromVector ( const vector<CompilerFlag*>& compilerFlags ) const\r
 +{\r
 +      string parameters;\r
 +      for ( size_t i = 0; i < compilerFlags.size (); i++ )\r
 +      {\r
 +              CompilerFlag& compilerFlag = *compilerFlags[i];\r
 +              if ( parameters.length () > 0 )\r
 +                      parameters += " ";\r
 +              parameters += compilerFlag.flag;\r
 +      }\r
 +      return parameters;\r
 +}\r
 +\r
 +string\r
 +MingwModuleHandler::GenerateLinkerParametersFromVector ( const vector<LinkerFlag*>& linkerFlags ) const\r
 +{\r
 +      string parameters;\r
 +      for ( size_t i = 0; i < linkerFlags.size (); i++ )\r
 +      {\r
 +              LinkerFlag& linkerFlag = *linkerFlags[i];\r
 +              if ( parameters.length () > 0 )\r
 +                      parameters += " ";\r
 +              parameters += linkerFlag.flag;\r
 +      }\r
 +      return parameters;\r
 +}\r
 +\r
 +string\r
 +MingwModuleHandler::GenerateImportLibraryDependenciesFromVector (\r
 +      const vector<Library*>& libraries )\r
 +{\r
 +      string dependencies ( "" );\r
 +      int wrap_count = 0;\r
 +      for ( size_t i = 0; i < libraries.size (); i++ )\r
 +      {\r
 +              if ( wrap_count++ == 5 )\r
 +                      dependencies += " \\\n\t\t", wrap_count = 0;\r
 +              else if ( dependencies.size () > 0 )\r
 +                      dependencies += " ";\r
 +              dependencies += GetImportLibraryDependency ( *libraries[i]->imported_module );\r
 +      }\r
 +      return dependencies;\r
 +}\r
 +\r
 +string\r
 +MingwModuleHandler::GenerateLinkerParameters () const\r
 +{\r
 +      return GenerateLinkerParametersFromVector ( module.linkerFlags );\r
 +}\r
 +\r
 +void\r
 +MingwModuleHandler::GenerateMacro (\r
 +      const char* assignmentOperation,\r
 +      const string& macro,\r
 +      const IfableData& data,\r
 +      const vector<CompilerFlag*>* compilerFlags )\r
 +{\r
 +      size_t i;\r
 +\r
 +      fprintf (\r
 +              fMakefile,\r
 +              "%s %s",\r
 +              macro.c_str(),\r
 +              assignmentOperation );\r
 +      \r
 +      if ( compilerFlags != NULL )\r
 +      {\r
 +              string compilerParameters = GenerateCompilerParametersFromVector ( *compilerFlags );\r
 +              if ( compilerParameters.size () > 0 )\r
 +              {\r
 +                      fprintf (\r
 +                              fMakefile,\r
 +                              " %s",\r
 +                              compilerParameters.c_str () );\r
 +              }\r
 +      }\r
 +\r
 +      for ( i = 0; i < data.includes.size(); i++ )\r
 +      {\r
 +              fprintf (\r
 +                      fMakefile,\r
 +                      " -I%s",\r
 +                      data.includes[i]->directory.c_str() );\r
 +      }\r
 +      for ( i = 0; i < data.defines.size(); i++ )\r
 +      {\r
 +              Define& d = *data.defines[i];\r
 +              fprintf (\r
 +                      fMakefile,\r
 +                      " -D%s",\r
 +                      d.name.c_str() );\r
 +              if ( d.value.size() )\r
 +                      fprintf (\r
 +                              fMakefile,\r
 +                              "=%s",\r
 +                              d.value.c_str() );\r
 +      }\r
 +      fprintf ( fMakefile, "\n" );\r
 +}\r
 +\r
 +void\r
 +MingwModuleHandler::GenerateMacros (\r
 +      const char* assignmentOperation,\r
 +      const IfableData& data,\r
 +      const vector<CompilerFlag*>* compilerFlags,\r
 +      const vector<LinkerFlag*>* linkerFlags )\r
 +{\r
 +      size_t i;\r
 +\r
 +      if ( data.includes.size () > 0 || data.defines.size () > 0 )\r
 +      {\r
 +              GenerateMacro ( assignmentOperation,\r
 +                              cflagsMacro,\r
 +                              data,\r
 +                              compilerFlags );\r
 +              GenerateMacro ( assignmentOperation,\r
 +                              windresflagsMacro,\r
 +                              data,\r
 +                              compilerFlags );\r
 +      }\r
 +      \r
 +      if ( linkerFlags != NULL )\r
 +      {\r
 +              string linkerParameters = GenerateLinkerParametersFromVector ( *linkerFlags );\r
 +              if ( linkerParameters.size () > 0 )\r
 +              {\r
 +                      fprintf (\r
 +                              fMakefile,\r
 +                              "%s %s %s\n",\r
 +                              linkerflagsMacro.c_str (),\r
 +                              assignmentOperation,\r
 +                              linkerParameters.c_str() );\r
 +              }\r
 +      }\r
 +\r
 +      if ( data.libraries.size () > 0 )\r
 +      {\r
 +              string deps = GenerateImportLibraryDependenciesFromVector ( data.libraries );\r
 +              if ( deps.size () > 0 )\r
 +              {\r
 +                      fprintf (\r
 +                              fMakefile,\r
 +                              "%s %s %s\n",\r
 +                              libsMacro.c_str(),\r
 +                              assignmentOperation,\r
 +                              deps.c_str() );\r
 +              }\r
 +      }\r
 +\r
 +      const vector<If*>& ifs = data.ifs;\r
 +      for ( i = 0; i < ifs.size(); i++ )\r
 +      {\r
 +              If& rIf = *ifs[i];\r
 +              if ( rIf.data.defines.size()\r
 +                      || rIf.data.includes.size()\r
 +                      || rIf.data.libraries.size()\r
 +                      || rIf.data.files.size()\r
 +                      || rIf.data.ifs.size() )\r
 +              {\r
 +                      fprintf (\r
 +                              fMakefile,\r
 +                              "ifeq (\"$(%s)\",\"%s\")\n",\r
 +                              rIf.property.c_str(),\r
 +                              rIf.value.c_str() );\r
 +                      GenerateMacros (\r
 +                              "+=",\r
 +                              rIf.data,\r
 +                              NULL,\r
 +                              NULL );\r
 +                      fprintf ( \r
 +                              fMakefile,\r
 +                              "endif\n\n" );\r
 +              }\r
 +      }\r
 +}\r
 +\r
 +void\r
 +MingwModuleHandler::GenerateObjectMacros (\r
 +      const char* assignmentOperation,\r
 +      const IfableData& data,\r
 +      const vector<CompilerFlag*>* compilerFlags,\r
 +      const vector<LinkerFlag*>* linkerFlags )\r
 +{\r
 +      size_t i;\r
 +\r
 +      const vector<File*>& files = data.files;\r
 +      if ( files.size () > 0 )\r
 +      {\r
 +              for ( i = 0; i < files.size (); i++ )\r
 +              {\r
 +                      File& file = *files[i];\r
 +                      if ( file.first )\r
 +                      {\r
 +                              fprintf ( fMakefile,\r
 +                                      "%s := %s $(%s)\n",\r
 +                                      objectsMacro.c_str(),\r
 +                                      GetObjectFilename (\r
 +                                              file.name, NULL ).c_str (),\r
 +                                      objectsMacro.c_str() );\r
 +                      }\r
 +              }\r
 +              fprintf (\r
 +                      fMakefile,\r
 +                      "%s %s",\r
 +                      objectsMacro.c_str (),\r
 +                      assignmentOperation );\r
 +              for ( i = 0; i < files.size(); i++ )\r
 +              {\r
 +                      File& file = *files[i];\r
 +                      if ( !file.first )\r
 +                      {\r
 +                              fprintf (\r
 +                                      fMakefile,\r
 +                                      "%s%s",\r
 +                                      ( i%10 == 9 ? " \\\n\t" : " " ),\r
 +                                      GetObjectFilename (\r
 +                                              file.name, NULL ).c_str () );\r
 +                      }\r
 +              }\r
 +              fprintf ( fMakefile, "\n" );\r
 +      }\r
 +\r
 +      const vector<If*>& ifs = data.ifs;\r
 +      for ( i = 0; i < ifs.size(); i++ )\r
 +      {\r
 +              If& rIf = *ifs[i];\r
 +              if ( rIf.data.defines.size()\r
 +                      || rIf.data.includes.size()\r
 +                      || rIf.data.libraries.size()\r
 +                      || rIf.data.files.size()\r
 +                      || rIf.data.ifs.size() )\r
 +              {\r
 +                      fprintf (\r
 +                              fMakefile,\r
 +                              "ifeq (\"$(%s)\",\"%s\")\n",\r
 +                              rIf.property.c_str(),\r
 +                              rIf.value.c_str() );\r
 +                      GenerateObjectMacros (\r
 +                              "+=",\r
 +                              rIf.data,\r
 +                              NULL,\r
 +                              NULL );\r
 +                      fprintf ( \r
 +                              fMakefile,\r
 +                              "endif\n\n" );\r
 +              }\r
 +      }\r
 +}\r
 +\r
 +void\r
 +MingwModuleHandler::GenerateGccCommand (\r
 +      const string& sourceFilename,\r
 +      const string& cc,\r
 +      const string& cflagsMacro )\r
 +{\r
 +      string deps = sourceFilename;\r
 +      if ( module.pch && use_pch )\r
 +              deps += " " + module.pch->header + ".gch";\r
++      \r
++      /* WIDL generated headers may be used */\r
++      deps += " " + GetLinkingDependenciesMacro ();\r
++\r
 +      string objectFilename = GetObjectFilename (\r
 +              sourceFilename, &clean_files );\r
 +      fprintf ( fMakefile,\r
 +                "%s: %s | %s\n",\r
 +                objectFilename.c_str (),\r
 +                deps.c_str (),\r
 +                GetDirectory ( objectFilename ).c_str () );\r
 +      fprintf ( fMakefile, "\t$(ECHO_CC)\n" );\r
 +      fprintf ( fMakefile,\r
 +               "\t%s -c $< -o $@ %s\n",\r
 +               cc.c_str (),\r
 +               cflagsMacro.c_str () );\r
 +}\r
 +\r
 +void\r
 +MingwModuleHandler::GenerateGccAssemblerCommand (\r
 +      const string& sourceFilename,\r
 +      const string& cc,\r
 +      const string& cflagsMacro )\r
 +{\r
 +      string objectFilename = GetObjectFilename (\r
 +              sourceFilename, &clean_files );\r
 +      fprintf ( fMakefile,\r
 +                "%s: %s | %s\n",\r
 +                objectFilename.c_str (),\r
 +                sourceFilename.c_str (),\r
 +                GetDirectory ( objectFilename ).c_str () );\r
 +      fprintf ( fMakefile, "\t$(ECHO_GAS)\n" );\r
 +      fprintf ( fMakefile,\r
 +                "\t%s -x assembler-with-cpp -c $< -o $@ -D__ASM__ %s\n",\r
 +                cc.c_str (),\r
 +                cflagsMacro.c_str () );\r
 +}\r
 +\r
 +void\r
 +MingwModuleHandler::GenerateNasmCommand (\r
 +      const string& sourceFilename,\r
 +      const string& nasmflagsMacro )\r
 +{\r
 +      string objectFilename = GetObjectFilename (\r
 +              sourceFilename, &clean_files );\r
 +      fprintf ( fMakefile,\r
 +                "%s: %s | %s\n",\r
 +                objectFilename.c_str (),\r
 +                sourceFilename.c_str (),\r
 +                GetDirectory ( objectFilename ).c_str () );\r
 +      fprintf ( fMakefile, "\t$(ECHO_NASM)\n" );\r
 +      fprintf ( fMakefile,\r
 +                "\t%s -f win32 $< -o $@ %s\n",\r
 +                "$(Q)nasm",\r
 +                nasmflagsMacro.c_str () );\r
 +}\r
 +\r
 +void\r
 +MingwModuleHandler::GenerateWindresCommand (\r
 +      const string& sourceFilename,\r
 +      const string& windresflagsMacro )\r
 +{\r
 +      string objectFilename =\r
 +              GetObjectFilename ( sourceFilename, &clean_files );\r
 +      string rciFilename = ros_temp +\r
 +              ReplaceExtension ( sourceFilename, ".rci" );\r
 +      string resFilename = ros_temp +\r
 +              ReplaceExtension ( sourceFilename, ".res" );\r
-       const string& windresflagsMacro )\r
++      if ( module.useWRC )\r
++      {\r
++              fprintf ( fMakefile,\r
++                        "%s: %s $(WRC_TARGET) | %s\n",\r
++                        objectFilename.c_str (),\r
++                        sourceFilename.c_str (),\r
++                        GetDirectory ( objectFilename ).c_str () );\r
++              fprintf ( fMakefile, "\t$(ECHO_WRC)\n" );\r
++              fprintf ( fMakefile,\r
++                       "\t${gcc} -xc -E -DRC_INVOKED ${%s} %s > %s\n",\r
++                       windresflagsMacro.c_str (),\r
++                       sourceFilename.c_str (),\r
++                       rciFilename.c_str () );\r
++              fprintf ( fMakefile,\r
++                       "\t$(Q)$(WRC_TARGET) ${%s} %s %s\n",\r
++                       windresflagsMacro.c_str (),\r
++                       rciFilename.c_str (),\r
++                       resFilename.c_str () );\r
++              fprintf ( fMakefile,\r
++                       "\t-@${rm} %s 2>$(NUL)\n",\r
++                       rciFilename.c_str () );\r
++              fprintf ( fMakefile,\r
++                       "\t${windres} %s -o $@\n",\r
++                       resFilename.c_str () );\r
++              fprintf ( fMakefile,\r
++                       "\t-@${rm} %s 2>$(NUL)\n",\r
++                       resFilename.c_str () );\r
++      }\r
++      else\r
++      {\r
++              fprintf ( fMakefile,\r
++                        "%s: %s $(WRC_TARGET) | %s\n",\r
++                        objectFilename.c_str (),\r
++                        sourceFilename.c_str (),\r
++                        GetDirectory ( objectFilename ).c_str () );\r
++              fprintf ( fMakefile, "\t$(ECHO_WRC)\n" );\r
++              fprintf ( fMakefile,\r
++                       "\t${windres} $(%s) %s -o $@\n",\r
++                       windresflagsMacro.c_str (),\r
++                       sourceFilename.c_str () );\r
++      }\r
 +}\r
 +\r
 +void\r
 +MingwModuleHandler::GenerateWinebuildCommands (\r
 +      const string& sourceFilename )\r
 +{\r
 +      string basename = GetBasename ( sourceFilename );\r
 +\r
 +      string def_file = PassThruCacheDirectory (\r
 +              basename + ".spec.def",\r
 +              backend->intermediateDirectory );\r
 +      CLEAN_FILE(def_file);\r
 +\r
 +      string stub_file = PassThruCacheDirectory (\r
 +              basename + ".stubs.c",\r
 +              backend->intermediateDirectory );\r
 +      CLEAN_FILE(stub_file)\r
 +\r
 +      fprintf ( fMakefile,\r
 +                "%s: %s $(WINEBUILD_TARGET)\n",\r
 +                def_file.c_str (),\r
 +                sourceFilename.c_str () );\r
 +      fprintf ( fMakefile, "\t$(ECHO_WINEBLD)\n" );\r
 +      fprintf ( fMakefile,\r
 +                "\t%s --def=%s -o %s\n",\r
 +                "$(Q)$(WINEBUILD_TARGET)",\r
 +                sourceFilename.c_str (),\r
 +                def_file.c_str () );\r
 +\r
 +      fprintf ( fMakefile,\r
 +                "%s: %s $(WINEBUILD_TARGET)\n",\r
 +                stub_file.c_str (),\r
 +                sourceFilename.c_str () );\r
 +      fprintf ( fMakefile, "\t$(ECHO_WINEBLD)\n" );\r
 +      fprintf ( fMakefile,\r
 +                "\t%s --pedll=%s -o %s\n",\r
 +                "$(Q)$(WINEBUILD_TARGET)",\r
 +                sourceFilename.c_str (),\r
 +                stub_file.c_str () );\r
 +}\r
 +\r
++void\r
++MingwModuleHandler::GenerateWidlCommandsServer (\r
++      const string& sourceFilename,\r
++      const string& widlflagsMacro )\r
++{\r
++      string basename = GetBasename ( sourceFilename );\r
++\r
++      /*string generatedHeaderFilename = PassThruCacheDirectory (\r
++              basename + ".h",\r
++              backend->intermediateDirectory );\r
++      CLEAN_FILE(generatedHeaderFilename);\r
++      */\r
++      string generatedHeaderFilename = basename + "_s.h";\r
++      CLEAN_FILE(generatedHeaderFilename);\r
++\r
++      string generatedServerFilename = PassThruCacheDirectory (\r
++              basename + "_s.c",\r
++              backend->intermediateDirectory );\r
++      CLEAN_FILE(generatedServerFilename);\r
++\r
++      fprintf ( fMakefile,\r
++                "%s %s: %s $(WIDL_TARGET) | %s\n",\r
++                generatedServerFilename.c_str (),\r
++                generatedHeaderFilename.c_str (),\r
++                sourceFilename.c_str (),\r
++                GetDirectory ( generatedServerFilename ).c_str () );\r
++      fprintf ( fMakefile, "\t$(ECHO_WIDL)\n" );\r
++      fprintf ( fMakefile,\r
++                "\t%s %s -h -H %s -s -S %s %s\n",\r
++                "$(Q)$(WIDL_TARGET)",\r
++                widlflagsMacro.c_str (),\r
++                generatedHeaderFilename.c_str (),\r
++                generatedServerFilename.c_str (),\r
++                sourceFilename.c_str () );\r
++}\r
++\r
++void\r
++MingwModuleHandler::GenerateWidlCommandsClient (\r
++      const string& sourceFilename,\r
++      const string& widlflagsMacro )\r
++{\r
++      string basename = GetBasename ( sourceFilename );\r
++\r
++      /*string generatedHeaderFilename = PassThruCacheDirectory (\r
++              basename + ".h",\r
++              backend->intermediateDirectory );\r
++      CLEAN_FILE(generatedHeaderFilename);\r
++      */\r
++      string generatedHeaderFilename = basename + "_c.h";\r
++      CLEAN_FILE(generatedHeaderFilename);\r
++\r
++      string generatedClientFilename = PassThruCacheDirectory (\r
++              basename + "_c.c",\r
++              backend->intermediateDirectory );\r
++      CLEAN_FILE(generatedClientFilename);\r
++\r
++      fprintf ( fMakefile,\r
++                "%s %s: %s $(WIDL_TARGET) | %s\n",\r
++                generatedClientFilename.c_str (),\r
++                generatedHeaderFilename.c_str (),\r
++                sourceFilename.c_str (),\r
++                GetDirectory ( generatedClientFilename ).c_str () );\r
++      fprintf ( fMakefile, "\t$(ECHO_WIDL)\n" );\r
++      fprintf ( fMakefile,\r
++                "\t%s %s -h -H %s -c -C %s %s\n",\r
++                "$(Q)$(WIDL_TARGET)",\r
++                widlflagsMacro.c_str (),\r
++                generatedHeaderFilename.c_str (),\r
++                generatedClientFilename.c_str (),\r
++                sourceFilename.c_str () );\r
++}\r
++\r
++void\r
++MingwModuleHandler::GenerateWidlCommands (\r
++      const string& sourceFilename,\r
++      const string& widlflagsMacro )\r
++{\r
++      if ( module.type == RpcServer )\r
++              GenerateWidlCommandsServer ( sourceFilename,\r
++                                           widlflagsMacro );\r
++      else\r
++              GenerateWidlCommandsClient ( sourceFilename,\r
++                                           widlflagsMacro );\r
++}\r
++\r
 +void\r
 +MingwModuleHandler::GenerateCommands (\r
 +      const string& sourceFilename,\r
 +      const string& cc,\r
 +      const string& cppc,\r
 +      const string& cflagsMacro,\r
 +      const string& nasmflagsMacro,\r
-       const string& windresflagsMacro )\r
++      const string& windresflagsMacro,\r
++      const string& widlflagsMacro )\r
 +{\r
 +      string extension = GetExtension ( sourceFilename );\r
 +      if ( extension == ".c" || extension == ".C" )\r
 +      {\r
 +              GenerateGccCommand ( sourceFilename,\r
 +                                   cc,\r
 +                                   cflagsMacro );\r
 +              return;\r
 +      }\r
 +      else if ( extension == ".cc" || extension == ".CC" ||\r
 +                extension == ".cpp" || extension == ".CPP" ||\r
 +                extension == ".cxx" || extension == ".CXX" )\r
 +      {\r
 +              GenerateGccCommand ( sourceFilename,\r
 +                                   cppc,\r
 +                                   cflagsMacro );\r
 +              return;\r
 +      }\r
 +      else if ( extension == ".s" || extension == ".S" )\r
 +      {\r
 +              GenerateGccAssemblerCommand ( sourceFilename,\r
 +                                            cc,\r
 +                                            cflagsMacro );\r
 +              return;\r
 +      }\r
 +      else if ( extension == ".asm" || extension == ".ASM" )\r
 +      {\r
 +              GenerateNasmCommand ( sourceFilename,\r
 +                                    nasmflagsMacro );\r
 +              return;\r
 +      }\r
 +      else if ( extension == ".rc" || extension == ".RC" )\r
 +      {\r
 +              GenerateWindresCommand ( sourceFilename,\r
 +                                       windresflagsMacro );\r
 +              return;\r
 +      }\r
 +      else if ( extension == ".spec" || extension == ".SPEC" )\r
 +      {\r
 +              GenerateWinebuildCommands ( sourceFilename );\r
 +              GenerateGccCommand ( GetActualSourceFilename ( sourceFilename ),\r
 +                                   cc,\r
 +                                   cflagsMacro );\r
 +              return;\r
 +      }\r
++      else if ( extension == ".idl" || extension == ".IDL" )\r
++      {\r
++              GenerateWidlCommands ( sourceFilename,\r
++                                     widlflagsMacro );\r
++              GenerateGccCommand ( GetActualSourceFilename ( sourceFilename ),\r
++                                   cc,\r
++                                   cflagsMacro );\r
++              return;\r
++      }\r
 +\r
 +      throw InvalidOperationException ( __FILE__,\r
 +                                        __LINE__,\r
 +                                        "Unsupported filename extension '%s' in file '%s'",\r
 +                                        extension.c_str (),\r
 +                                        sourceFilename.c_str () );\r
 +}\r
 +\r
 +void\r
 +MingwModuleHandler::GenerateBuildMapCode ()\r
 +{\r
 +      fprintf ( fMakefile,\r
 +                "ifeq ($(ROS_BUILDMAP),full)\n" );\r
 +\r
 +      string mapFilename = PassThruCacheDirectory (\r
 +              GetBasename ( module.GetPath () ) + ".map",\r
 +              backend->outputDirectory );\r
 +      CLEAN_FILE ( mapFilename );\r
 +      \r
 +      fprintf ( fMakefile,\r
 +                "\t$(ECHO_OBJDUMP)\n" );\r
 +      fprintf ( fMakefile,\r
 +                "\t$(Q)${objdump} -d -S $@ > %s\n",\r
 +                mapFilename.c_str () );\r
 +\r
 +      fprintf ( fMakefile,\r
 +                "else\n" );\r
 +      fprintf ( fMakefile,\r
 +                "ifeq ($(ROS_BUILDMAP),yes)\n" );\r
 +\r
 +      fprintf ( fMakefile,\r
 +                "\t$(ECHO_NM)\n" );\r
 +      fprintf ( fMakefile,\r
 +                "\t$(Q)${nm} --numeric-sort $@ > %s\n",\r
 +                mapFilename.c_str () );\r
 +\r
 +      fprintf ( fMakefile,\r
 +                "endif\n" );\r
 +\r
 +      fprintf ( fMakefile,\r
 +                "endif\n" );\r
 +}\r
 +\r
 +void\r
 +MingwModuleHandler::GenerateLinkerCommand (\r
 +      const string& dependencies,\r
 +      const string& linker,\r
 +      const string& linkerParameters,\r
 +      const string& objectsMacro,\r
 +      const string& libsMacro )\r
 +{\r
 +      string target ( GetTargetMacro ( module ) );\r
 +      string target_folder ( GetDirectory ( GetTargetFilename ( module, NULL ) ) );\r
 +\r
 +      fprintf ( fMakefile,\r
 +              "%s: %s $(RSYM_TARGET) | %s\n",\r
 +              target.c_str (),\r
 +              dependencies.c_str (),\r
 +              target_folder.c_str () );\r
 +      fprintf ( fMakefile, "\t$(ECHO_LD)\n" );\r
 +      string targetName ( module.GetTargetName () );\r
 +      if ( module.importLibrary != NULL )\r
 +      {\r
 +              string base_tmp = ros_temp + module.name + ".base.tmp";\r
 +              CLEAN_FILE ( base_tmp );\r
 +              string junk_tmp = ros_temp + module.name + ".junk.tmp";\r
 +              CLEAN_FILE ( junk_tmp );\r
 +              string temp_exp = ros_temp + module.name + ".temp.exp";\r
 +              CLEAN_FILE ( temp_exp );\r
 +              string def_file = GetDefinitionFilename ();\r
 +\r
 +              fprintf ( fMakefile,\r
 +                        "\t%s %s -Wl,--base-file,%s -o %s %s %s %s\n",\r
 +                        linker.c_str (),\r
 +                        linkerParameters.c_str (),\r
 +                        base_tmp.c_str (),\r
 +                        junk_tmp.c_str (),\r
 +                        objectsMacro.c_str (),\r
 +                        libsMacro.c_str (),\r
 +                        GetLinkerMacro ().c_str () );\r
 +\r
 +              fprintf ( fMakefile,\r
 +                        "\t-@${rm} %s 2>$(NUL)\n",\r
 +                        junk_tmp.c_str () );\r
 +\r
 +              string killAt = module.mangledSymbols ? "" : "--kill-at";\r
 +              fprintf ( fMakefile,\r
 +                        "\t${dlltool} --dllname %s --base-file %s --def %s --output-exp %s %s\n",\r
 +                        targetName.c_str (),\r
 +                        base_tmp.c_str (),\r
 +                        def_file.c_str (),\r
 +                        temp_exp.c_str (),\r
 +                        killAt.c_str () );\r
 +\r
 +              fprintf ( fMakefile,\r
 +                        "\t-@${rm} %s 2>$(NUL)\n",\r
 +                        base_tmp.c_str () );\r
 +\r
 +              fprintf ( fMakefile,\r
 +                        "\t%s %s %s -o %s %s %s %s\n",\r
 +                        linker.c_str (),\r
 +                        linkerParameters.c_str (),\r
 +                        temp_exp.c_str (),\r
 +                        target.c_str (),\r
 +                        objectsMacro.c_str (),\r
 +                        libsMacro.c_str (),\r
 +                        GetLinkerMacro ().c_str () );\r
 +\r
 +              fprintf ( fMakefile,\r
 +                        "\t-@${rm} %s 2>$(NUL)\n",\r
 +                        temp_exp.c_str () );\r
 +      }\r
 +      else\r
 +      {\r
 +              fprintf ( fMakefile,\r
 +                        "\t%s %s -o %s %s %s %s\n",\r
 +                        linker.c_str (),\r
 +                        linkerParameters.c_str (),\r
 +                        target.c_str (),\r
 +                        objectsMacro.c_str (),\r
 +                        libsMacro.c_str (),\r
 +                        GetLinkerMacro ().c_str () );\r
 +      }\r
 +\r
 +      GenerateBuildMapCode ();\r
 +\r
 +      fprintf ( fMakefile,\r
 +                "\t$(ECHO_RSYM)\n" );\r
 +      fprintf ( fMakefile,\r
 +                "\t$(Q)$(RSYM_TARGET) $@ $@\n\n" );\r
 +}\r
 +\r
 +void\r
 +MingwModuleHandler::GeneratePhonyTarget() const\r
 +{\r
 +      string targetMacro ( GetTargetMacro(module) );\r
 +      fprintf ( fMakefile, ".PHONY: %s\n\n",\r
 +                targetMacro.c_str ());\r
 +      fprintf ( fMakefile, "%s: | %s\n",\r
 +                targetMacro.c_str (),\r
 +                GetDirectory(GetTargetFilename(module,NULL)).c_str () );\r
 +}\r
 +\r
 +void\r
 +MingwModuleHandler::GenerateObjectFileTargets (\r
 +      const IfableData& data,\r
 +      const string& cc,\r
 +      const string& cppc,\r
 +      const string& cflagsMacro,\r
 +      const string& nasmflagsMacro,\r
-                                  windresflagsMacro );\r
++      const string& windresflagsMacro,\r
++      const string& widlflagsMacro )\r
 +{\r
 +      size_t i;\r
 +      \r
 +      const vector<File*>& files = data.files;\r
 +      for ( i = 0; i < files.size (); i++ )\r
 +      {\r
 +              string sourceFilename = files[i]->name;\r
 +              GenerateCommands ( sourceFilename,\r
 +                                 cc,\r
 +                                 cppc,\r
 +                                 cflagsMacro,\r
 +                                 nasmflagsMacro,\r
-                                           windresflagsMacro );\r
++                                 windresflagsMacro,\r
++                                 widlflagsMacro );\r
 +              fprintf ( fMakefile,\r
 +                        "\n" );\r
 +      }\r
 +\r
 +      const vector<If*>& ifs = data.ifs;\r
 +      for ( i = 0; i < ifs.size(); i++ )\r
 +      {\r
 +              GenerateObjectFileTargets ( ifs[i]->data,\r
 +                                          cc,\r
 +                                          cppc,\r
 +                                          cflagsMacro,\r
 +                                          nasmflagsMacro,\r
-       const string& windresflagsMacro )\r
++                                          windresflagsMacro,\r
++                                          widlflagsMacro );\r
 +      }\r
 +}\r
 +\r
 +void\r
 +MingwModuleHandler::GenerateObjectFileTargets (\r
 +      const string& cc,\r
 +      const string& cppc,\r
 +      const string& cflagsMacro,\r
 +      const string& nasmflagsMacro,\r
-                                   windresflagsMacro );\r
++      const string& windresflagsMacro,\r
++      const string& widlflagsMacro )\r
 +{\r
 +      if ( module.pch )\r
 +      {\r
 +              const string& pch_file = module.pch->header;\r
 +              string gch_file = pch_file + ".gch";\r
 +              CLEAN_FILE(gch_file);\r
 +              if ( use_pch )\r
 +              {\r
 +                      fprintf (\r
 +                              fMakefile,\r
 +                              "%s: %s\n",\r
 +                              gch_file.c_str(),\r
 +                              pch_file.c_str() );\r
 +                      fprintf ( fMakefile, "\t$(ECHO_PCH)\n" );\r
 +                      fprintf (\r
 +                              fMakefile,\r
 +                              "\t%s -o %s %s -g %s\n\n",\r
 +                              ( module.cplusplus ? cppc.c_str() : cc.c_str() ),\r
 +                              gch_file.c_str(),\r
 +                              cflagsMacro.c_str(),\r
 +                              pch_file.c_str() );\r
 +              }\r
 +      }\r
 +\r
 +      GenerateObjectFileTargets ( module.non_if_data,\r
 +                                  cc,\r
 +                                  cppc,\r
 +                                  cflagsMacro,\r
 +                                  nasmflagsMacro,\r
-       if ( module.type == ObjectLibrary )\r
++                                  windresflagsMacro,\r
++                                  widlflagsMacro );\r
 +      fprintf ( fMakefile, "\n" );\r
 +}\r
 +\r
 +string\r
 +MingwModuleHandler::GenerateArchiveTarget ( const string& ar,\r
 +                                            const string& objs_macro ) const\r
 +{\r
 +      string archiveFilename ( GetModuleArchiveFilename () );\r
 +      \r
 +      fprintf ( fMakefile,\r
 +                "%s: %s | %s\n",\r
 +                archiveFilename.c_str (),\r
 +                objs_macro.c_str (),\r
 +                GetDirectory(archiveFilename).c_str() );\r
 +\r
 +      fprintf ( fMakefile, "\t$(ECHO_AR)\n" );\r
 +\r
 +      fprintf ( fMakefile,\r
 +                "\t%s -rc $@ %s\n\n",\r
 +                ar.c_str (),\r
 +                objs_macro.c_str ());\r
 +\r
 +      return archiveFilename;\r
 +}\r
 +\r
 +string\r
 +MingwModuleHandler::GetCFlagsMacro () const\r
 +{\r
 +      return ssprintf ( "$(%s_CFLAGS)",\r
 +                        module.name.c_str () );\r
 +}\r
 +\r
 +/*static*/ string\r
 +MingwModuleHandler::GetObjectsMacro ( const Module& module )\r
 +{\r
 +      return ssprintf ( "$(%s_OBJS)",\r
 +                        module.name.c_str () );\r
 +}\r
 +\r
 +string\r
 +MingwModuleHandler::GetLinkingDependenciesMacro () const\r
 +{\r
 +      return ssprintf ( "$(%s_LINKDEPS)", module.name.c_str () );\r
 +}\r
 +\r
 +string\r
 +MingwModuleHandler::GetLibsMacro () const\r
 +{\r
 +      return ssprintf ( "$(%s_LIBS)", module.name.c_str () );\r
 +}\r
 +\r
 +string\r
 +MingwModuleHandler::GetLinkerMacro () const\r
 +{\r
 +      return ssprintf ( "$(%s_LFLAGS)",\r
 +                        module.name.c_str () );\r
 +}\r
 +\r
 +string\r
 +MingwModuleHandler::GetModuleTargets ( const Module& module )\r
 +{\r
-       if ( module.type != ObjectLibrary )\r
++      if ( ReferenceObjects ( module ) )\r
 +              return GetObjectsMacro ( module );\r
 +      else\r
 +              return GetTargetFilename ( module, NULL );\r
 +}\r
 +\r
 +void\r
 +MingwModuleHandler::GenerateObjectMacro ()\r
 +{\r
 +      objectsMacro = ssprintf ("%s_OBJS", module.name.c_str ());\r
 +\r
 +      GenerateObjectMacros (\r
 +              "=",\r
 +              module.non_if_data,\r
 +              &module.compilerFlags,\r
 +              &module.linkerFlags );\r
 +\r
 +      // future references to the macro will be to get its values\r
 +      objectsMacro = ssprintf ("$(%s)", objectsMacro.c_str ());\r
 +}\r
 +\r
 +void\r
 +MingwModuleHandler::GenerateTargetMacro ()\r
 +{\r
 +      fprintf ( fMakefile,\r
 +              "%s := %s\n",\r
 +              GetTargetMacro ( module, false ).c_str (),\r
 +              GetModuleTargets ( module ).c_str () );\r
 +}\r
 +\r
 +void\r
 +MingwModuleHandler::GenerateOtherMacros ()\r
 +{\r
 +      cflagsMacro = ssprintf ("%s_CFLAGS", module.name.c_str ());\r
 +      nasmflagsMacro = ssprintf ("%s_NASMFLAGS", module.name.c_str ());\r
 +      windresflagsMacro = ssprintf ("%s_RCFLAGS", module.name.c_str ());\r
++      widlflagsMacro = ssprintf ("%s_WIDLFLAGS", module.name.c_str ());\r
 +      linkerflagsMacro = ssprintf ("%s_LFLAGS", module.name.c_str ());\r
 +      libsMacro = ssprintf("%s_LIBS", module.name.c_str ());\r
 +      linkDepsMacro = ssprintf ("%s_LINKDEPS", module.name.c_str ());\r
 +\r
 +      GenerateMacros (\r
 +              "=",\r
 +              module.non_if_data,\r
 +              &module.compilerFlags,\r
 +              &module.linkerFlags );\r
 +\r
 +      if ( module.importLibrary )\r
 +      {\r
 +              string_list s;\r
 +              const vector<File*>& files = module.non_if_data.files;\r
 +              for ( size_t i = 0; i < files.size (); i++ )\r
 +              {\r
 +                      File& file = *files[i];\r
 +                      string extension = GetExtension ( file.name );\r
 +                      if ( extension == ".spec" || extension == ".SPEC" )\r
 +                              GetSpecObjectDependencies ( s, file.name );\r
 +              }\r
 +              if ( s.size () > 0 )\r
 +              {\r
 +                      fprintf (\r
 +                              fMakefile,\r
 +                              "%s +=",\r
 +                              linkDepsMacro.c_str() );\r
 +                      for ( size_t i = 0; i < s.size(); i++ )\r
 +                              fprintf ( fMakefile,\r
 +                                        " %s",\r
 +                                        s[i].c_str () );\r
 +                      fprintf ( fMakefile, "\n" );\r
 +              }\r
 +      }\r
 +\r
 +      string globalCflags = "-g";\r
 +      if ( backend->usePipe )\r
 +              globalCflags += " -pipe";\r
 +      \r
 +      fprintf (\r
 +              fMakefile,\r
 +              "%s += $(PROJECT_CFLAGS) %s\n",\r
 +              cflagsMacro.c_str (),\r
 +              globalCflags.c_str () );\r
 +\r
 +      fprintf (\r
 +              fMakefile,\r
 +              "%s += $(PROJECT_RCFLAGS)\n",\r
 +              windresflagsMacro.c_str () );\r
 +\r
++      fprintf (\r
++              fMakefile,\r
++              "%s += $(PROJECT_WIDLFLAGS)\n",\r
++              widlflagsMacro.c_str () );\r
++\r
 +      fprintf (\r
 +              fMakefile,\r
 +              "%s_LFLAGS += $(PROJECT_LFLAGS) -g\n",\r
 +              module.name.c_str () );\r
 +\r
 +      fprintf (\r
 +              fMakefile,\r
 +              "%s += $(%s)\n",\r
 +              linkDepsMacro.c_str (),\r
 +              libsMacro.c_str () );\r
 +\r
 +      string cflags = TypeSpecificCFlags();\r
 +      if ( cflags.size() > 0 )\r
 +      {\r
 +              fprintf ( fMakefile,\r
 +                        "%s += %s\n\n",\r
 +                        cflagsMacro.c_str (),\r
 +                        cflags.c_str () );\r
 +      }\r
 +\r
 +      string nasmflags = TypeSpecificNasmFlags();\r
 +      if ( nasmflags.size () > 0 )\r
 +      {\r
 +              fprintf ( fMakefile,\r
 +                        "%s += %s\n\n",\r
 +                        nasmflagsMacro.c_str (),\r
 +                        nasmflags.c_str () );\r
 +      }\r
 +\r
 +      fprintf ( fMakefile, "\n\n" );\r
 +\r
 +      // future references to the macros will be to get their values\r
 +      cflagsMacro = ssprintf ("$(%s)", cflagsMacro.c_str ());\r
 +      nasmflagsMacro = ssprintf ("$(%s)", nasmflagsMacro.c_str ());\r
++      widlflagsMacro = ssprintf ("$(%s)", widlflagsMacro.c_str ());\r
 +}\r
 +\r
 +void\r
 +MingwModuleHandler::GenerateRules ()\r
 +{\r
 +      string cc = ( module.host == HostTrue ? "${host_gcc}" : "${gcc}" );\r
 +      string cppc = ( module.host == HostTrue ? "${host_gpp}" : "${gpp}" );\r
 +      string ar = ( module.host == HostTrue ? "${host_ar}" : "${ar}" );\r
 +\r
 +      string targetMacro = GetTargetMacro ( module );\r
 +\r
 +      CLEAN_FILE ( targetMacro );\r
 +\r
 +      // generate phony target for module name\r
 +      fprintf ( fMakefile, ".PHONY: %s\n",\r
 +              module.name.c_str () );\r
 +      fprintf ( fMakefile, "%s: %s\n\n",\r
 +              module.name.c_str (),\r
 +              GetTargetMacro ( module ).c_str () );\r
 +\r
-                                                               windresflagsMacro );\r
++      if ( !ReferenceObjects ( module ) )\r
 +      {\r
 +              string ar_target ( GenerateArchiveTarget ( ar, objectsMacro ) );\r
 +              if ( targetMacro != ar_target )\r
 +              {\r
 +                      CLEAN_FILE ( ar_target );\r
 +              }\r
 +      }\r
 +\r
 +      GenerateObjectFileTargets ( cc,\r
 +                                                              cppc,\r
 +                                                              cflagsMacro,\r
 +                                                              nasmflagsMacro,\r
-       string targetMacro ( GetTargetMacro (module) ); // i.e. "$(NTOSKRNL_TARGET)"\r
++                                                              windresflagsMacro,\r
++                                                          widlflagsMacro );\r
 +}\r
 +\r
 +void\r
 +MingwModuleHandler::GetInvocationDependencies (\r
 +      const Module& module,\r
 +      string_list& dependencies )\r
 +{\r
 +      for ( size_t i = 0; i < module.invocations.size (); i++ )\r
 +      {\r
 +              Invoke& invoke = *module.invocations[i];\r
 +              if ( invoke.invokeModule == &module )\r
 +                      /* Protect against circular dependencies */\r
 +                      continue;\r
 +              invoke.GetTargets ( dependencies );\r
 +      }\r
 +}\r
 +\r
 +void\r
 +MingwModuleHandler::GenerateInvocations () const\r
 +{\r
 +      if ( module.invocations.size () == 0 )\r
 +              return;\r
 +      \r
 +      size_t iend = module.invocations.size ();\r
 +      for ( size_t i = 0; i < iend; i++ )\r
 +      {\r
 +              const Invoke& invoke = *module.invocations[i];\r
 +\r
 +              if ( invoke.invokeModule->type != BuildTool )\r
 +              {\r
 +                      throw InvalidBuildFileException ( module.node.location,\r
 +                                                        "Only modules of type buildtool can be invoked." );\r
 +              }\r
 +\r
 +              string invokeTarget = module.GetInvocationTarget ( i );\r
 +              string_list invoke_targets;\r
 +              assert ( invoke_targets.size() );\r
 +              invoke.GetTargets ( invoke_targets );\r
 +              fprintf ( fMakefile,\r
 +                        ".PHONY: %s\n\n",\r
 +                        invokeTarget.c_str () );\r
 +              fprintf ( fMakefile,\r
 +                        "%s:",\r
 +                        invokeTarget.c_str () );\r
 +              size_t j, jend = invoke_targets.size();\r
 +              for ( j = 0; j < jend; j++ )\r
 +              {\r
 +                      fprintf ( fMakefile,\r
 +                                " %s",\r
 +                                invoke_targets[i].c_str () );\r
 +              }\r
 +              fprintf ( fMakefile, "\n\n%s", invoke_targets[0].c_str () );\r
 +              for ( j = 1; j < jend; j++ )\r
 +                      fprintf ( fMakefile,\r
 +                                " %s",\r
 +                                invoke_targets[i].c_str () );\r
 +              fprintf ( fMakefile,\r
 +                        ": %s\n",\r
 +                        NormalizeFilename ( invoke.invokeModule->GetPath () ).c_str () );\r
 +              fprintf ( fMakefile, "\t$(ECHO_INVOKE)\n" );\r
 +              fprintf ( fMakefile,\r
 +                        "\t%s %s\n\n",\r
 +                        NormalizeFilename ( invoke.invokeModule->GetPath () ).c_str (),\r
 +                        invoke.GetParameters ().c_str () );\r
 +      }\r
 +}\r
 +\r
 +string\r
 +MingwModuleHandler::GetPreconditionDependenciesName () const\r
 +{\r
 +      return module.name + "_precondition";\r
 +}\r
 +\r
 +void\r
 +MingwModuleHandler::GetDefaultDependencies (\r
 +      string_list& dependencies ) const\r
 +{\r
 +      /* Avoid circular dependency */\r
 +      if ( module.type != BuildTool\r
 +              && module.name != "zlib"\r
 +              && module.name != "hostzlib" )\r
 +\r
 +              dependencies.push_back ( "$(INIT)" );\r
 +}\r
 +\r
 +void\r
 +MingwModuleHandler::GeneratePreconditionDependencies ()\r
 +{\r
 +      string preconditionDependenciesName = GetPreconditionDependenciesName ();\r
 +      string_list sourceFilenames;\r
 +      GetSourceFilenamesWithoutGeneratedFiles ( sourceFilenames );\r
 +      string_list dependencies;\r
 +      GetDefaultDependencies ( dependencies );\r
 +      GetModuleDependencies ( dependencies );\r
 +\r
 +      GetInvocationDependencies ( module, dependencies );\r
 +      \r
 +      if ( dependencies.size() )\r
 +      {\r
 +              fprintf ( fMakefile,\r
 +                        "%s =",\r
 +                        preconditionDependenciesName.c_str () );\r
 +              for ( size_t i = 0; i < dependencies.size(); i++ )\r
 +                      fprintf ( fMakefile,\r
 +                                " %s",\r
 +                                dependencies[i].c_str () );\r
 +              fprintf ( fMakefile, "\n\n" );\r
 +      }\r
 +\r
 +      for ( size_t i = 0; i < sourceFilenames.size(); i++ )\r
 +      {\r
 +              fprintf ( fMakefile,\r
 +                        "%s: ${%s}\n",\r
 +                        sourceFilenames[i].c_str(),\r
 +                        preconditionDependenciesName.c_str ());\r
 +      }\r
 +      fprintf ( fMakefile, "\n" );\r
 +}\r
 +\r
 +bool\r
 +MingwModuleHandler::IsWineModule () const\r
 +{\r
 +      if ( module.importLibrary == NULL)\r
 +              return false;\r
 +\r
 +      size_t index = module.importLibrary->definition.rfind ( ".spec.def" );\r
 +      return ( index != string::npos );\r
 +}\r
 +\r
 +string\r
 +MingwModuleHandler::GetDefinitionFilename () const\r
 +{\r
 +      string defFilename = module.GetBasePath () + SSEP + module.importLibrary->definition;\r
 +      if ( IsWineModule () )\r
 +              return PassThruCacheDirectory ( NormalizeFilename ( defFilename ),\r
 +                                              backend->intermediateDirectory );\r
 +      else\r
 +              return defFilename;\r
 +}\r
 +\r
 +void\r
 +MingwModuleHandler::GenerateImportLibraryTargetIfNeeded ()\r
 +{\r
 +      if ( module.importLibrary != NULL )\r
 +      {\r
 +              string library_target (\r
 +                      GetImportLibraryFilename ( module, &clean_files ) );\r
 +\r
 +              string_list deps;\r
 +              GetDefinitionDependencies ( deps );\r
 +\r
 +              fprintf ( fMakefile, "# IMPORT LIBRARY RULE:\n" );\r
 +\r
 +              fprintf ( fMakefile, "%s:",\r
 +                        library_target.c_str () );\r
 +\r
 +              size_t i, iend = deps.size();\r
 +              for ( i = 0; i < iend; i++ )\r
 +                      fprintf ( fMakefile, " %s",\r
 +                                deps[i].c_str () );\r
 +\r
 +              fprintf ( fMakefile, " | %s\n",\r
 +                        GetDirectory ( GetTargetFilename ( module, NULL ) ).c_str () );\r
 +\r
 +              fprintf ( fMakefile, "\t$(ECHO_DLLTOOL)\n" );\r
 +\r
 +              string killAt = module.mangledSymbols ? "" : "--kill-at";\r
 +              fprintf ( fMakefile,\r
 +                        "\t${dlltool} --dllname %s --def %s --output-lib %s %s\n\n",\r
 +                        module.GetTargetName ().c_str (),\r
 +                        GetDefinitionFilename ().c_str (),\r
 +                        library_target.c_str (),\r
 +                        killAt.c_str () );\r
 +      }\r
 +}\r
 +\r
 +void\r
 +MingwModuleHandler::GetSpecObjectDependencies (\r
 +      string_list& dependencies,\r
 +      const string& filename ) const\r
 +{\r
 +      string basename = GetBasename ( filename );\r
 +      string defDependency = PassThruCacheDirectory (\r
 +              NormalizeFilename ( basename + ".spec.def" ),\r
 +              backend->intermediateDirectory );\r
 +      dependencies.push_back ( defDependency );\r
 +      string stubsDependency = PassThruCacheDirectory (\r
 +              NormalizeFilename ( basename + ".stubs.c" ),\r
 +              backend->intermediateDirectory );\r
 +      dependencies.push_back ( stubsDependency );\r
 +}\r
 +\r
++void\r
++MingwModuleHandler::GetWidlObjectDependencies (\r
++      string_list& dependencies,\r
++      const string& filename ) const\r
++{\r
++      string basename = GetBasename ( filename );\r
++      string serverDependency = PassThruCacheDirectory (\r
++              NormalizeFilename ( basename + "_s.c" ),\r
++              backend->intermediateDirectory );\r
++      dependencies.push_back ( serverDependency );\r
++}\r
++\r
 +void\r
 +MingwModuleHandler::GetDefinitionDependencies (\r
 +      string_list& dependencies ) const\r
 +{\r
 +      string dkNkmLibNoFixup = "dk/nkm/lib";\r
 +      const vector<File*>& files = module.non_if_data.files;\r
 +      for ( size_t i = 0; i < files.size (); i++ )\r
 +      {\r
 +              File& file = *files[i];\r
 +              string extension = GetExtension ( file.name );\r
 +              if ( extension == ".spec" || extension == ".SPEC" )\r
 +              {\r
 +                      GetSpecObjectDependencies ( dependencies, file.name );\r
 +              }\r
++              if ( extension == ".idl" || extension == ".IDL" )\r
++              {\r
++                      GetWidlObjectDependencies ( dependencies, file.name );\r
++              }\r
 +      }\r
 +}\r
 +\r
 +\r
 +MingwBuildToolModuleHandler::MingwBuildToolModuleHandler ( const Module& module_ )\r
 +      : MingwModuleHandler ( module_ )\r
 +{\r
 +}\r
 +\r
 +void\r
 +MingwBuildToolModuleHandler::Process ()\r
 +{\r
 +      GenerateBuildToolModuleTarget ();\r
 +}\r
 +\r
 +void\r
 +MingwBuildToolModuleHandler::GenerateBuildToolModuleTarget ()\r
 +{\r
 +      string targetMacro ( GetTargetMacro (module) );\r
 +      string objectsMacro = GetObjectsMacro ( module );\r
 +      string linkDepsMacro = GetLinkingDependenciesMacro ();\r
 +      string libsMacro = GetLibsMacro ();\r
 +\r
 +      GenerateRules ();\r
 +\r
 +      string linker;\r
 +      if ( module.cplusplus )\r
 +              linker = "${host_gpp}";\r
 +      else\r
 +              linker = "${host_gcc}";\r
 +      \r
 +      fprintf ( fMakefile, "%s: %s %s | %s\n",\r
 +                targetMacro.c_str (),\r
 +                objectsMacro.c_str (),\r
 +                linkDepsMacro.c_str (),\r
 +                GetDirectory(GetTargetFilename(module,NULL)).c_str () );\r
 +      fprintf ( fMakefile, "\t$(ECHO_LD)\n" );\r
 +      fprintf ( fMakefile,\r
 +                "\t%s %s -o $@ %s %s\n\n",\r
 +                linker.c_str (),\r
 +                GetLinkerMacro ().c_str (),\r
 +                objectsMacro.c_str (),\r
 +                libsMacro.c_str () );\r
 +}\r
 +\r
 +\r
 +MingwKernelModuleHandler::MingwKernelModuleHandler (\r
 +      const Module& module_ )\r
 +\r
 +      : MingwModuleHandler ( module_ )\r
 +{\r
 +}\r
 +\r
 +void\r
 +MingwKernelModuleHandler::Process ()\r
 +{\r
 +      GenerateKernelModuleTarget ();\r
 +}\r
 +\r
 +void\r
 +MingwKernelModuleHandler::GenerateKernelModuleTarget ()\r
 +{\r
 +      string targetName ( module.GetTargetName () ); // i.e. "ntoskrnl.exe"\r
-       string targetMacro ( GetTargetMacro (module) );\r
++      string targetMacro ( GetTargetMacro ( module ) ); // i.e. "$(NTOSKRNL_TARGET)"\r
 +      string workingDirectory = GetWorkingDirectory ();\r
 +      string objectsMacro = GetObjectsMacro ( module );\r
 +      string linkDepsMacro = GetLinkingDependenciesMacro ();\r
 +      string libsMacro = GetLibsMacro ();\r
 +      string base_tmp = ros_temp + module.name + ".base.tmp";\r
 +      CLEAN_FILE ( base_tmp );\r
 +      string junk_tmp = ros_temp + module.name + ".junk.tmp";\r
 +      CLEAN_FILE ( junk_tmp );\r
 +      string temp_exp = ros_temp + module.name + ".temp.exp";\r
 +      CLEAN_FILE ( temp_exp );\r
 +      string gccOptions = ssprintf ("-Wl,-T,%s" SSEP "ntoskrnl.lnk -Wl,--subsystem,native -Wl,--entry,%s -Wl,--image-base,%s -Wl,--file-alignment,0x1000 -Wl,--section-alignment,0x1000 -nostartfiles -mdll",\r
 +                                    module.GetBasePath ().c_str (),\r
 +                                    module.entrypoint.c_str (),\r
 +                                    module.baseaddress.c_str () );\r
 +\r
 +      GenerateRules ();\r
 +\r
 +      GenerateImportLibraryTargetIfNeeded ();\r
 +\r
 +      fprintf ( fMakefile, "%s: %s %s $(RSYM_TARGET) | %s\n",\r
 +                targetMacro.c_str (),\r
 +                objectsMacro.c_str (),\r
 +                linkDepsMacro.c_str (),\r
 +                GetDirectory(GetTargetFilename(module,NULL)).c_str () );\r
 +      fprintf ( fMakefile, "\t$(ECHO_LD)\n" );\r
 +      fprintf ( fMakefile,\r
 +                "\t${gcc} %s %s -Wl,--base-file,%s -o %s %s %s\n",\r
 +                GetLinkerMacro ().c_str (),\r
 +                gccOptions.c_str (),\r
 +                base_tmp.c_str (),\r
 +                junk_tmp.c_str (),\r
 +                objectsMacro.c_str (),\r
 +                linkDepsMacro.c_str () );\r
 +      fprintf ( fMakefile,\r
 +                "\t-@${rm} %s 2>$(NUL)\n",\r
 +                junk_tmp.c_str () );\r
 +      string killAt = module.mangledSymbols ? "" : "--kill-at";\r
 +      fprintf ( fMakefile,\r
 +                "\t${dlltool} --dllname %s --base-file %s --def ntoskrnl/ntoskrnl.def --output-exp %s %s\n",\r
 +                targetName.c_str (),\r
 +                base_tmp.c_str (),\r
 +                temp_exp.c_str (),\r
 +                killAt.c_str () );\r
 +      fprintf ( fMakefile,\r
 +                "\t-@${rm} %s 2>$(NUL)\n",\r
 +                base_tmp.c_str () );\r
 +      fprintf ( fMakefile,\r
 +                "\t${gcc} %s %s -Wl,%s -o $@ %s %s\n",\r
 +                GetLinkerMacro ().c_str (),\r
 +                gccOptions.c_str (),\r
 +                temp_exp.c_str (),\r
 +                objectsMacro.c_str (),\r
 +                linkDepsMacro.c_str () );\r
 +      fprintf ( fMakefile,\r
 +                "\t-@${rm} %s 2>$(NUL)\n",\r
 +                temp_exp.c_str () );\r
 +      fprintf ( fMakefile, "\t$(ECHO_RSYM)\n" );\r
 +      fprintf ( fMakefile,\r
 +                "\t$(Q)$(RSYM_TARGET) $@ $@\n\n" );\r
 +}\r
 +\r
 +\r
 +MingwStaticLibraryModuleHandler::MingwStaticLibraryModuleHandler (\r
 +      const Module& module_ )\r
 +\r
 +      : MingwModuleHandler ( module_ )\r
 +{\r
 +}\r
 +\r
 +void\r
 +MingwStaticLibraryModuleHandler::Process ()\r
 +{\r
 +      GenerateStaticLibraryModuleTarget ();\r
 +}\r
 +\r
 +void\r
 +MingwStaticLibraryModuleHandler::GenerateStaticLibraryModuleTarget ()\r
 +{\r
 +      GenerateRules ();\r
 +}\r
 +\r
 +\r
 +MingwObjectLibraryModuleHandler::MingwObjectLibraryModuleHandler (\r
 +      const Module& module_ )\r
 +\r
 +      : MingwModuleHandler ( module_ )\r
 +{\r
 +}\r
 +\r
 +void\r
 +MingwObjectLibraryModuleHandler::Process ()\r
 +{\r
 +      GenerateObjectLibraryModuleTarget ();\r
 +}\r
 +\r
 +void\r
 +MingwObjectLibraryModuleHandler::GenerateObjectLibraryModuleTarget ()\r
 +{\r
 +      GenerateRules ();\r
 +}\r
 +\r
 +\r
 +MingwKernelModeDLLModuleHandler::MingwKernelModeDLLModuleHandler (\r
 +      const Module& module_ )\r
 +\r
 +      : MingwModuleHandler ( module_ )\r
 +{\r
 +}\r
 +\r
 +void\r
 +MingwKernelModeDLLModuleHandler::Process ()\r
 +{\r
 +      GenerateKernelModeDLLModuleTarget ();\r
 +}\r
 +\r
 +void\r
 +MingwKernelModeDLLModuleHandler::GenerateKernelModeDLLModuleTarget ()\r
 +{\r
++      string targetMacro ( GetTargetMacro ( module ) );\r
 +      string workingDirectory = GetWorkingDirectory ( );\r
 +      string objectsMacro = GetObjectsMacro ( module );\r
 +      string linkDepsMacro = GetLinkingDependenciesMacro ();\r
 +      string libsMacro = GetLibsMacro ();\r
 +\r
 +      GenerateImportLibraryTargetIfNeeded ();\r
 +\r
 +      if ( module.non_if_data.files.size () > 0 )\r
 +      {\r
 +              GenerateRules ();\r
 +\r
 +              string dependencies =\r
 +                      objectsMacro + " " + linkDepsMacro;\r
 +\r
 +              string linkerParameters = ssprintf ( "-Wl,--subsystem,native -Wl,--entry,%s -Wl,--image-base,%s -Wl,--file-alignment,0x1000 -Wl,--section-alignment,0x1000 -nostartfiles -mdll",\r
 +                                                   module.entrypoint.c_str (),\r
 +                                                   module.baseaddress.c_str () );\r
 +              GenerateLinkerCommand ( dependencies,\r
 +                                      "${gcc}",\r
 +                                      linkerParameters,\r
 +                                      objectsMacro,\r
 +                                      libsMacro );\r
 +      }\r
 +      else\r
 +      {\r
 +              GeneratePhonyTarget();\r
 +      }\r
 +}\r
 +\r
 +\r
 +MingwKernelModeDriverModuleHandler::MingwKernelModeDriverModuleHandler (\r
 +      const Module& module_ )\r
 +\r
 +      : MingwModuleHandler ( module_ )\r
 +{\r
 +}\r
 +\r
 +void\r
 +MingwKernelModeDriverModuleHandler::Process ()\r
 +{\r
 +      GenerateKernelModeDriverModuleTarget ();\r
 +}\r
 +\r
 +\r
 +void\r
 +MingwKernelModeDriverModuleHandler::GenerateKernelModeDriverModuleTarget ()\r
 +{\r
 +      string targetMacro ( GetTargetMacro (module) );\r
 +      string workingDirectory = GetWorkingDirectory ();\r
 +      string objectsMacro = GetObjectsMacro ( module );\r
 +      string linkDepsMacro = GetLinkingDependenciesMacro ();\r
 +      string libsMacro = GetLibsMacro ();\r
 +\r
 +      GenerateImportLibraryTargetIfNeeded ();\r
 +\r
 +      if ( module.non_if_data.files.size () > 0 )\r
 +      {\r
 +              GenerateRules ();\r
 +\r
 +              string dependencies = objectsMacro + " " + linkDepsMacro;\r
 +\r
 +              string linkerParameters = ssprintf ( "-Wl,--subsystem,native -Wl,--entry,%s -Wl,--image-base,%s -Wl,--file-alignment,0x1000 -Wl,--section-alignment,0x1000 -nostartfiles -mdll",\r
 +                                                   module.entrypoint.c_str (),\r
 +                                                   module.baseaddress.c_str () );\r
 +              GenerateLinkerCommand ( dependencies,\r
 +                                      "${gcc}",\r
 +                                      linkerParameters,\r
 +                                      objectsMacro,\r
 +                                      libsMacro );\r
 +      }\r
 +      else\r
 +      {\r
 +              GeneratePhonyTarget();\r
 +      }\r
 +}\r
 +\r
 +\r
 +MingwNativeDLLModuleHandler::MingwNativeDLLModuleHandler (\r
 +      const Module& module_ )\r
 +\r
 +      : MingwModuleHandler ( module_ )\r
 +{\r
 +}\r
 +\r
 +void\r
 +MingwNativeDLLModuleHandler::Process ()\r
 +{\r
 +      GenerateNativeDLLModuleTarget ();\r
 +}\r
 +\r
 +void\r
 +MingwNativeDLLModuleHandler::GenerateNativeDLLModuleTarget ()\r
 +{\r
 +      string targetMacro ( GetTargetMacro (module) );\r
 +      string workingDirectory = GetWorkingDirectory ( );\r
 +      string objectsMacro = GetObjectsMacro ( module );\r
 +      string linkDepsMacro = GetLinkingDependenciesMacro ();\r
 +      string libsMacro = GetLibsMacro ();\r
 +      \r
 +      GenerateImportLibraryTargetIfNeeded ();\r
 +\r
 +      if ( module.non_if_data.files.size () > 0 )\r
 +      {\r
 +              GenerateRules ();\r
 +\r
 +              string dependencies =\r
 +                      objectsMacro + " " + linkDepsMacro;\r
 +\r
 +              string linkerParameters = ssprintf ( "-Wl,--subsystem,native -Wl,--entry,%s -Wl,--image-base,%s -Wl,--file-alignment,0x1000 -Wl,--section-alignment,0x1000 -nostartfiles -nostdlib -mdll",\r
 +                                                   module.entrypoint.c_str (),\r
 +                                                   module.baseaddress.c_str () );\r
 +              GenerateLinkerCommand ( dependencies,\r
 +                                      "${gcc}",\r
 +                                      linkerParameters,\r
 +                                      objectsMacro,\r
 +                                      libsMacro );\r
 +      }\r
 +      else\r
 +      {\r
 +              GeneratePhonyTarget();\r
 +      }\r
 +}\r
 +\r
 +\r
 +MingwNativeCUIModuleHandler::MingwNativeCUIModuleHandler (\r
 +      const Module& module_ )\r
 +\r
 +      : MingwModuleHandler ( module_ )\r
 +{\r
 +}\r
 +\r
 +void\r
 +MingwNativeCUIModuleHandler::Process ()\r
 +{\r
 +      GenerateNativeCUIModuleTarget ();\r
 +}\r
 +\r
 +void\r
 +MingwNativeCUIModuleHandler::GenerateNativeCUIModuleTarget ()\r
 +{\r
 +      string targetMacro ( GetTargetMacro (module) );\r
 +      string workingDirectory = GetWorkingDirectory ( );\r
 +      string objectsMacro = GetObjectsMacro ( module );\r
 +      string linkDepsMacro = GetLinkingDependenciesMacro ();\r
 +      string libsMacro = GetLibsMacro ();\r
 +      \r
 +      GenerateImportLibraryTargetIfNeeded ();\r
 +\r
 +      if ( module.non_if_data.files.size () > 0 )\r
 +      {\r
 +              GenerateRules ();\r
 +\r
 +              string dependencies =\r
 +                      objectsMacro + " " + linkDepsMacro;\r
 +\r
 +              string linkerParameters = ssprintf ( "-Wl,--subsystem,native -Wl,--entry,%s -Wl,--image-base,%s -Wl,--file-alignment,0x1000 -Wl,--section-alignment,0x1000 -nostartfiles -nostdlib",\r
 +                                                   module.entrypoint.c_str (),\r
 +                                                   module.baseaddress.c_str () );\r
 +              GenerateLinkerCommand ( dependencies,\r
 +                                      "${gcc}",\r
 +                                      linkerParameters,\r
 +                                      objectsMacro,\r
 +                                      libsMacro );\r
 +      }\r
 +      else\r
 +      {\r
 +              GeneratePhonyTarget();\r
 +      }\r
 +}\r
 +\r
 +\r
 +MingwWin32DLLModuleHandler::MingwWin32DLLModuleHandler (\r
 +      const Module& module_ )\r
 +\r
 +      : MingwModuleHandler ( module_ )\r
 +{\r
 +}\r
 +\r
 +void\r
 +MingwWin32DLLModuleHandler::Process ()\r
 +{\r
 +      GenerateExtractWineDLLResourcesTarget ();\r
 +      GenerateWin32DLLModuleTarget ();\r
 +}\r
 +\r
 +void\r
 +MingwWin32DLLModuleHandler::GenerateExtractWineDLLResourcesTarget ()\r
 +{\r
 +      fprintf ( fMakefile, ".PHONY: %s_extractresources\n\n",\r
 +                module.name.c_str () );\r
 +      fprintf ( fMakefile, "%s_extractresources: $(BIN2RES_TARGET)\n",\r
 +                module.name.c_str () );\r
 +      const vector<File*>& files = module.non_if_data.files;\r
 +      for ( size_t i = 0; i < files.size (); i++ )\r
 +      {\r
 +              File& file = *files[i];\r
 +              string extension = GetExtension ( file.name );\r
 +              if ( extension == ".rc" || extension == ".RC" )\r
 +              {\r
 +                      string resource = NormalizeFilename ( file.name );\r
 +                      fprintf ( fMakefile, "\t$(ECHO_BIN2RES)\n" );\r
 +                      fprintf ( fMakefile, "\t@:echo ${bin2res} -f -x %s\n",\r
 +                                resource.c_str () );\r
 +              }\r
 +      }\r
 +      fprintf ( fMakefile, "\n");\r
 +}\r
 +\r
 +void\r
 +MingwWin32DLLModuleHandler::GenerateWin32DLLModuleTarget ()\r
 +{\r
 +      string targetMacro ( GetTargetMacro (module) );\r
 +      string workingDirectory = GetWorkingDirectory ( );\r
 +      string objectsMacro = GetObjectsMacro ( module );\r
 +      string linkDepsMacro = GetLinkingDependenciesMacro ();\r
 +      string libsMacro = GetLibsMacro ();\r
 +\r
 +      GenerateImportLibraryTargetIfNeeded ();\r
 +\r
 +      if ( module.non_if_data.files.size () > 0 )\r
 +      {\r
 +              GenerateRules ();\r
 +\r
 +              string dependencies = objectsMacro + " " + linkDepsMacro;\r
 +\r
 +              string linker;\r
 +              if ( module.cplusplus )\r
 +                      linker = "${gpp}";\r
 +              else\r
 +                      linker = "${gcc}";\r
 +\r
 +              string linkerParameters = ssprintf ( "-Wl,--subsystem,console -Wl,--entry,%s -Wl,--image-base,%s -Wl,--file-alignment,0x1000 -Wl,--section-alignment,0x1000 -mdll",\r
 +                                                   module.entrypoint.c_str (),\r
 +                                                   module.baseaddress.c_str () );\r
 +              GenerateLinkerCommand ( dependencies,\r
 +                                      linker,\r
 +                                      linkerParameters,\r
 +                                      objectsMacro,\r
 +                                      libsMacro );\r
 +      }\r
 +      else\r
 +      {\r
 +              GeneratePhonyTarget();\r
 +      }\r
 +}\r
 +\r
 +\r
 +MingwWin32CUIModuleHandler::MingwWin32CUIModuleHandler (\r
 +      const Module& module_ )\r
 +\r
 +      : MingwModuleHandler ( module_ )\r
 +{\r
 +}\r
 +\r
 +void\r
 +MingwWin32CUIModuleHandler::Process ()\r
 +{\r
 +      GenerateWin32CUIModuleTarget ();\r
 +}\r
 +\r
 +void\r
 +MingwWin32CUIModuleHandler::GenerateWin32CUIModuleTarget ()\r
 +{\r
 +      string targetMacro ( GetTargetMacro (module) );\r
 +      string workingDirectory = GetWorkingDirectory ( );\r
 +      string objectsMacro = GetObjectsMacro ( module );\r
 +      string linkDepsMacro = GetLinkingDependenciesMacro ();\r
 +      string libsMacro = GetLibsMacro ();\r
 +\r
 +      GenerateImportLibraryTargetIfNeeded ();\r
 +\r
 +      if ( module.non_if_data.files.size () > 0 )\r
 +      {\r
 +              GenerateRules ();\r
 +\r
 +              string dependencies =\r
 +                      objectsMacro + " " + linkDepsMacro;\r
 +\r
 +              string linker;\r
 +              if ( module.cplusplus )\r
 +                      linker = "${gpp}";\r
 +              else\r
 +                      linker = "${gcc}";\r
 +\r
 +              string linkerParameters = ssprintf ( "-Wl,--subsystem,console -Wl,--entry,%s -Wl,--image-base,%s -Wl,--file-alignment,0x1000 -Wl,--section-alignment,0x1000",\r
 +                                                   module.entrypoint.c_str (),\r
 +                                                   module.baseaddress.c_str () );\r
 +              GenerateLinkerCommand ( dependencies,\r
 +                                      linker,\r
 +                                      linkerParameters,\r
 +                                      objectsMacro,\r
 +                                      libsMacro );\r
 +      }\r
 +      else\r
 +      {\r
 +              GeneratePhonyTarget();\r
 +      }\r
 +}\r
 +\r
 +\r
 +MingwWin32GUIModuleHandler::MingwWin32GUIModuleHandler (\r
 +      const Module& module_ )\r
 +\r
 +      : MingwModuleHandler ( module_ )\r
 +{\r
 +}\r
 +\r
 +void\r
 +MingwWin32GUIModuleHandler::Process ()\r
 +{\r
 +      GenerateWin32GUIModuleTarget ();\r
 +}\r
 +\r
 +void\r
 +MingwWin32GUIModuleHandler::GenerateWin32GUIModuleTarget ()\r
 +{\r
 +      string targetMacro ( GetTargetMacro (module) );\r
 +      string workingDirectory = GetWorkingDirectory ( );\r
 +      string objectsMacro = GetObjectsMacro ( module );\r
 +      string linkDepsMacro = GetLinkingDependenciesMacro ();\r
 +      string libsMacro = GetLibsMacro ();\r
 +\r
 +      GenerateImportLibraryTargetIfNeeded ();\r
 +\r
 +      if ( module.non_if_data.files.size () > 0 )\r
 +      {\r
 +              GenerateRules ();\r
 +\r
 +              string dependencies =\r
 +                      objectsMacro + " " + linkDepsMacro;\r
 +\r
 +              string linker;\r
 +              if ( module.cplusplus )\r
 +                      linker = "${gpp}";\r
 +              else\r
 +                      linker = "${gcc}";\r
 +\r
 +              string linkerParameters = ssprintf ( "-Wl,--subsystem,windows -Wl,--entry,%s -Wl,--image-base,%s -Wl,--file-alignment,0x1000 -Wl,--section-alignment,0x1000",\r
 +                                                   module.entrypoint.c_str (),\r
 +                                                   module.baseaddress.c_str () );\r
 +              GenerateLinkerCommand ( dependencies,\r
 +                                      linker,\r
 +                                      linkerParameters,\r
 +                                      objectsMacro,\r
 +                                      libsMacro );\r
 +      }\r
 +      else\r
 +      {\r
 +              GeneratePhonyTarget();\r
 +      }\r
 +}\r
 +\r
 +\r
 +MingwBootLoaderModuleHandler::MingwBootLoaderModuleHandler (\r
 +      const Module& module_ )\r
 +\r
 +      : MingwModuleHandler ( module_ )\r
 +{\r
 +}\r
 +\r
 +void\r
 +MingwBootLoaderModuleHandler::Process ()\r
 +{\r
 +      GenerateBootLoaderModuleTarget ();\r
 +}\r
 +\r
 +void\r
 +MingwBootLoaderModuleHandler::GenerateBootLoaderModuleTarget ()\r
 +{\r
 +      string targetName ( module.GetTargetName () );\r
 +      string targetMacro ( GetTargetMacro (module) );\r
 +      string workingDirectory = GetWorkingDirectory ();\r
 +      string junk_tmp = ros_temp + module.name + ".junk.tmp";\r
 +      CLEAN_FILE ( junk_tmp );\r
 +      string objectsMacro = GetObjectsMacro ( module );\r
 +      string linkDepsMacro = GetLinkingDependenciesMacro ();\r
 +      string libsMacro = GetLibsMacro ();\r
 +\r
 +      GenerateRules ();\r
 +\r
 +      fprintf ( fMakefile, "%s: %s %s | %s\n",\r
 +                targetMacro.c_str (),\r
 +                objectsMacro.c_str (),\r
 +                linkDepsMacro.c_str (),\r
 +                GetDirectory(GetTargetFilename(module,NULL)).c_str () );\r
 +\r
 +      fprintf ( fMakefile, "\t$(ECHO_LD)\n" );\r
 +\r
 +      fprintf ( fMakefile,\r
 +                "\t${ld} %s -N -Ttext=0x8000 -o %s %s %s\n",\r
 +                GetLinkerMacro ().c_str (),\r
 +                junk_tmp.c_str (),\r
 +                objectsMacro.c_str (),\r
 +                linkDepsMacro.c_str () );\r
 +      fprintf ( fMakefile,\r
 +                "\t${objcopy} -O binary %s $@\n",\r
 +                junk_tmp.c_str () );\r
 +      fprintf ( fMakefile,\r
 +                "\t-@${rm} %s 2>$(NUL)\n",\r
 +                junk_tmp.c_str () );\r
 +}\r
 +\r
 +\r
 +MingwBootSectorModuleHandler::MingwBootSectorModuleHandler (\r
 +      const Module& module_ )\r
 +\r
 +      : MingwModuleHandler ( module_ )\r
 +{\r
 +}\r
 +\r
 +void\r
 +MingwBootSectorModuleHandler::Process ()\r
 +{\r
 +      GenerateBootSectorModuleTarget ();\r
 +}\r
 +\r
 +void\r
 +MingwBootSectorModuleHandler::GenerateBootSectorModuleTarget ()\r
 +{\r
 +      string objectsMacro = GetObjectsMacro ( module );\r
 +\r
 +      GenerateRules ();\r
 +\r
 +      fprintf ( fMakefile, ".PHONY: %s\n\n",\r
 +                module.name.c_str ());\r
 +      fprintf ( fMakefile,\r
 +                "%s: %s\n",\r
 +                module.name.c_str (),\r
 +                objectsMacro.c_str () );\r
 +}\r
 +\r
 +\r
 +MingwIsoModuleHandler::MingwIsoModuleHandler (\r
 +      const Module& module_ )\r
 +\r
 +      : MingwModuleHandler ( module_ )\r
 +{\r
 +}\r
 +\r
 +void\r
 +MingwIsoModuleHandler::Process ()\r
 +{\r
 +      GenerateIsoModuleTarget ();\r
 +}\r
 +\r
 +void\r
 +MingwIsoModuleHandler::OutputBootstrapfileCopyCommands (\r
 +      const string& bootcdDirectory )\r
 +{\r
 +      for ( size_t i = 0; i < module.project.modules.size (); i++ )\r
 +      {\r
 +              const Module& m = *module.project.modules[i];\r
 +              if ( m.bootstrap != NULL )\r
 +              {\r
 +                      string sourceFilename = PassThruCacheDirectory (\r
 +                              NormalizeFilename ( m.GetPath () ),\r
 +                              backend->outputDirectory );\r
 +                      string targetFilenameNoFixup ( bootcdDirectory + SSEP + m.bootstrap->base + SSEP + m.bootstrap->nameoncd );\r
 +                      string targetFilename = MingwModuleHandler::PassThruCacheDirectory (\r
 +                              NormalizeFilename ( targetFilenameNoFixup ),\r
 +                              backend->outputDirectory );\r
 +                      fprintf ( fMakefile,\r
 +                                "\t$(ECHO_CP)\n" );\r
 +                      fprintf ( fMakefile,\r
 +                                "\t${cp} %s %s 1>$(NUL)\n",\r
 +                                sourceFilename.c_str (),\r
 +                                targetFilename.c_str () );\r
 +              }\r
 +      }\r
 +}\r
 +\r
 +void\r
 +MingwIsoModuleHandler::OutputCdfileCopyCommands (\r
 +      const string& bootcdDirectory )\r
 +{\r
 +      for ( size_t i = 0; i < module.project.cdfiles.size (); i++ )\r
 +      {\r
 +              const CDFile& cdfile = *module.project.cdfiles[i];\r
 +              string targetFilenameNoFixup = bootcdDirectory + SSEP + cdfile.base + SSEP + cdfile.nameoncd;\r
 +              string targetFilename = MingwModuleHandler::PassThruCacheDirectory (\r
 +                      NormalizeFilename ( targetFilenameNoFixup ),\r
 +                      backend->outputDirectory );\r
 +              fprintf ( fMakefile,\r
 +                        "\t$(ECHO_CP)\n" );\r
 +              fprintf ( fMakefile,\r
 +                        "\t${cp} %s %s 1>$(NUL)\n",\r
 +                        cdfile.GetPath ().c_str (),\r
 +                        targetFilename.c_str () );\r
 +      }\r
 +}\r
 +\r
 +string\r
 +MingwIsoModuleHandler::GetBootstrapCdDirectories ( const string& bootcdDirectory )\r
 +{\r
 +      string directories;\r
 +      for ( size_t i = 0; i < module.project.modules.size (); i++ )\r
 +      {\r
 +              const Module& m = *module.project.modules[i];\r
 +              if ( m.bootstrap != NULL )\r
 +              {\r
 +                      string targetDirectory ( bootcdDirectory + SSEP + m.bootstrap->base );\r
 +                      if ( directories.size () > 0 )\r
 +                              directories += " ";\r
 +                      directories += PassThruCacheDirectory (\r
 +                              NormalizeFilename ( targetDirectory ),\r
 +                              backend->outputDirectory );\r
 +              }\r
 +      }\r
 +      return directories;\r
 +}\r
 +\r
 +string\r
 +MingwIsoModuleHandler::GetNonModuleCdDirectories ( const string& bootcdDirectory )\r
 +{\r
 +      string directories;\r
 +      for ( size_t i = 0; i < module.project.cdfiles.size (); i++ )\r
 +      {\r
 +              const CDFile& cdfile = *module.project.cdfiles[i];\r
 +              string targetDirectory ( bootcdDirectory + SSEP + cdfile.base );\r
 +              if ( directories.size () > 0 )\r
 +                      directories += " ";\r
 +              directories += PassThruCacheDirectory (\r
 +                      NormalizeFilename ( targetDirectory ),\r
 +                      backend->outputDirectory );\r
 +      }\r
 +      return directories;\r
 +}\r
 +\r
 +string\r
 +MingwIsoModuleHandler::GetCdDirectories ( const string& bootcdDirectory )\r
 +{\r
 +      string directories = GetBootstrapCdDirectories ( bootcdDirectory );\r
 +      directories += " " + GetNonModuleCdDirectories ( bootcdDirectory );\r
 +      return directories;\r
 +}\r
 +\r
 +void\r
 +MingwIsoModuleHandler::GetBootstrapCdFiles (\r
 +      vector<string>& out ) const\r
 +{\r
 +      for ( size_t i = 0; i < module.project.modules.size (); i++ )\r
 +      {\r
 +              const Module& m = *module.project.modules[i];\r
 +              if ( m.bootstrap != NULL )\r
 +              {\r
 +                      string filename = PassThruCacheDirectory (\r
 +                              NormalizeFilename ( m.GetPath () ),\r
 +                              backend->outputDirectory );\r
 +                      out.push_back ( filename );\r
 +              }\r
 +      }\r
 +}\r
 +\r
 +void\r
 +MingwIsoModuleHandler::GetNonModuleCdFiles (\r
 +      vector<string>& out ) const\r
 +{\r
 +      for ( size_t i = 0; i < module.project.cdfiles.size (); i++ )\r
 +      {\r
 +              const CDFile& cdfile = *module.project.cdfiles[i];\r
 +              out.push_back ( cdfile.GetPath () );\r
 +      }\r
 +}\r
 +\r
 +void\r
 +MingwIsoModuleHandler::GetCdFiles (\r
 +      vector<string>& out ) const\r
 +{\r
 +      GetBootstrapCdFiles ( out );\r
 +      GetNonModuleCdFiles ( out );\r
 +}\r
 +\r
 +void\r
 +MingwIsoModuleHandler::GenerateIsoModuleTarget ()\r
 +{\r
 +      string bootcdDirectory = "cd";\r
 +      string bootcd = PassThruCacheDirectory (\r
 +              NormalizeFilename ( bootcdDirectory + SSEP ),\r
 +              backend->outputDirectory );\r
 +      string isoboot = PassThruCacheDirectory (\r
 +              NormalizeFilename ( "boot" SSEP "freeldr" SSEP "bootsect" SSEP "isoboot.o" ),\r
 +              backend->outputDirectory );\r
 +      string bootcdReactosNoFixup = bootcdDirectory + SSEP "reactos";\r
 +      string bootcdReactos = PassThruCacheDirectory (\r
 +              NormalizeFilename ( bootcdReactosNoFixup ),\r
 +              backend->outputDirectory );\r
 +      CLEAN_FILE ( bootcdReactos );\r
 +      string reactosInf = PassThruCacheDirectory (\r
 +              NormalizeFilename ( bootcdReactosNoFixup + SSEP "reactos.inf" ),\r
 +              backend->outputDirectory );\r
 +      string reactosDff = NormalizeFilename ( "bootdata" SSEP "packages" SSEP "reactos.dff" );\r
 +      string cdDirectories = GetCdDirectories ( bootcdDirectory );\r
 +      vector<string> vCdFiles;\r
 +      GetCdFiles ( vCdFiles );\r
 +      string cdFiles = v2s ( vCdFiles, 5 );\r
 +\r
 +      fprintf ( fMakefile, ".PHONY: %s\n\n",\r
 +                module.name.c_str ());\r
 +      fprintf ( fMakefile,\r
 +                "%s: all %s %s %s %s $(CABMAN_TARGET) $(CDMAKE_TARGET)\n",\r
 +                module.name.c_str (),\r
 +                isoboot.c_str (),\r
 +                bootcdReactos.c_str (),\r
 +                cdDirectories.c_str (),\r
 +                cdFiles.c_str () );\r
 +      fprintf ( fMakefile, "\t$(ECHO_CABMAN)\n" );\r
 +      fprintf ( fMakefile,\r
 +                "\t$(Q)$(CABMAN_TARGET) -C %s -L %s -I -P $(OUTPUT)\n",\r
 +                reactosDff.c_str (),\r
 +                bootcdReactos.c_str () );\r
 +      fprintf ( fMakefile,\r
 +                "\t$(Q)$(CABMAN_TARGET) -C %s -RC %s -L %s -N -P $(OUTPUT)\n",\r
 +                reactosDff.c_str (),\r
 +                reactosInf.c_str (),\r
 +                bootcdReactos.c_str ());\r
 +      fprintf ( fMakefile,\r
 +                "\t-@${rm} %s 2>$(NUL)\n",\r
 +                reactosInf.c_str () );\r
 +      OutputBootstrapfileCopyCommands ( bootcdDirectory );\r
 +      OutputCdfileCopyCommands ( bootcdDirectory );\r
 +      fprintf ( fMakefile, "\t$(ECHO_CDMAKE)\n" );\r
 +      fprintf ( fMakefile,\r
 +                "\t$(Q)$(CDMAKE_TARGET) -v -m -b %s %s REACTOS ReactOS.iso\n",\r
 +                isoboot.c_str (),\r
 +                bootcd.c_str () );\r
 +      fprintf ( fMakefile,\r
 +                "\n" );\r
 +}\r
 +\r
 +\r
 +MingwTestModuleHandler::MingwTestModuleHandler (\r
 +      const Module& module_ )\r
 +\r
 +      : MingwModuleHandler ( module_ )\r
 +{\r
 +}\r
 +\r
 +void\r
 +MingwTestModuleHandler::Process ()\r
 +{\r
 +      GenerateTestModuleTarget ();\r
 +}\r
 +\r
 +void\r
 +MingwTestModuleHandler::GenerateTestModuleTarget ()\r
 +{\r
 +      string targetMacro ( GetTargetMacro ( module ) );\r
 +      string workingDirectory = GetWorkingDirectory ( );\r
 +      string objectsMacro = GetObjectsMacro ( module );\r
 +      string linkDepsMacro = GetLinkingDependenciesMacro ();\r
 +      string libsMacro = GetLibsMacro ();\r
 +\r
 +      GenerateImportLibraryTargetIfNeeded ();\r
 +\r
 +      if ( module.non_if_data.files.size () > 0 )\r
 +      {\r
 +              GenerateRules ();\r
 +\r
 +              string dependencies = objectsMacro + " " + linkDepsMacro;\r
 +\r
 +              string linker;\r
 +              if ( module.cplusplus )\r
 +                      linker = "${gpp}";\r
 +              else\r
 +                      linker = "${gcc}";\r
 +\r
 +              string linkerParameters = ssprintf ( "-Wl,--subsystem,console -Wl,--entry,%s -Wl,--image-base,%s -Wl,--file-alignment,0x1000 -Wl,--section-alignment,0x1000",\r
 +                                                   module.entrypoint.c_str (),\r
 +                                                   module.baseaddress.c_str () );\r
 +              GenerateLinkerCommand ( dependencies,\r
 +                                      linker,\r
 +                                      linkerParameters,\r
 +                                      objectsMacro,\r
 +                                      libsMacro );\r
 +      }\r
 +      else\r
 +      {\r
 +              GeneratePhonyTarget();\r
 +      }\r
 +}\r
++\r