-# $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
--- /dev/null
+<?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
--- /dev/null
+<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
--- /dev/null
+<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
--- /dev/null
+<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
--- /dev/null
- <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
--- /dev/null
+<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
--- /dev/null
--- /dev/null
++<directory name="idl">
++ <xi:include href="idl/idl.xml" />
++</directory>
--- /dev/null
--- /dev/null
++<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>
--- /dev/null
+<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
--- /dev/null
- <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
--- /dev/null
+<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
--- /dev/null
- <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
--- /dev/null
+<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
--- /dev/null
- <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
--- /dev/null
+<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
--- /dev/null
+<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
--- /dev/null
+<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
--- /dev/null
--- /dev/null
++<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>
--- /dev/null
- <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
--- /dev/null
+<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
--- /dev/null
+<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
--- /dev/null
- <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
--- /dev/null
--- /dev/null
++<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>
--- /dev/null
--- /dev/null
--- /dev/null
- <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
--- /dev/null
+<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
--- /dev/null
+<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
#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
--- /dev/null
+<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
--- /dev/null
+<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
--- /dev/null
- <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
--- /dev/null
+<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
--- /dev/null
+<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
--- /dev/null
- 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
--- /dev/null
- 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