#  Makefile for GNU Emacs on the Microsoft W32 API.
#  Copyright (c) 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
#   Tim Fleehart (apollo@online.com)            17-Apr-92
#   Geoff Voelker (voelker@cs.washington.edu)   11-20-93
#
#  This file is part of GNU Emacs.
#
#  GNU Emacs is free software; you can redistribute it and/or modify
#  it under the terms of the GNU General Public License as published by
#  the Free Software Foundation; either version 2, or (at your option)
#  any later version.
#
#  GNU Emacs is distributed in the hope that it will be useful,
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#  GNU General Public License for more details.
#
#  You should have received a copy of the GNU General Public License
#  along with GNU Emacs; see the file COPYING.  If not, write to the
#  Free Software Foundation, Inc., 59 Temple Place - Suite 330,
#  Boston, MA 02111-1307, USA.
#

#
# Sets up the system dependent macros.
#
!include ..\nt\makefile.def

SUBSYSTEM=console

#
# HAVE_CONFIG_H is required by some generic gnu sources stuck into
# the emacs source tree.
#
LOCAL_FLAGS     = -Demacs=1 -DWINDOWSNT -DDOS_NT -DHAVE_CONFIG_H -I..\nt\inc
!ifdef NTGUI
LOCAL_FLAGS     = $(LOCAL_FLAGS) -DHAVE_NTGUI=1
!endif
!ifdef USE_CRT_DLL
LOCAL_FLAGS     = $(LOCAL_FLAGS) -DUSE_CRT_DLL=1 -MD
libc            = msvcrt.lib
LINK_FLAGS      = -nodefaultlib
!endif

# From MSVC 5.0 onwards, it seem base relocation information is not included,
# at least in release builds.  We need to ensure the reloc info is included
# in order to use the MSVC profiler.
!IF ("$(_NMAKE_VER)" == "$(_NMAKE_VER_4)")
EXTRA_LINK      =
!ELSE
EXTRA_LINK      = -profile
!ENDIF

EMACS           = $(BLD)\emacs.exe
TEMACS          = $(BLD)\temacs.exe
TEMACS_TMP      = $(BLD)\temacs.bin
TLIB0           = $(BLD)\temacs0.lib
TLIB1           = $(BLD)\temacs1.lib
TLIB2           = $(BLD)\temacs2.lib
!IFDEF NTGUI
TLIBW32         = $(BLD)\temacw32.lib
!ELSE
TLIBW32		=
!ENDIF
TOBJ            = $(BLD)\firstfile.obj
!if $(MSVCNT11)
TRES		= $(BLD)\emacs.res
!else
TRES		= $(BLD)\emacs.rbj
!endif
TLASTLIB	= $(BLD)\lastfile.lib

# see comments in allocate_heap in w32heap.c before changing any of the
# -stack, -heap, or -base settings.
!if "$(BUILD_TYPE)" == "spd"
LINK_FLAGS      = $(LINK_FLAGS) $(ARCH_LDFLAGS) -stack:0x00800000 -heap:0x00100000 -base:0x01000000 -debug:full -debugtype:both -pdb:$(BLD)\temacs.pdb -machine:$(ARCH) -subsystem:$(SUBSYSTEM) -entry:_start -map:$(BLD)\temacs.map -swaprun:net -swaprun:cd
!else
LINK_FLAGS      = $(LINK_FLAGS) $(ARCH_LDFLAGS) -stack:0x00800000 -heap:0x00100000 -base:0x01000000 -debug:full -debugtype:both -pdb:none -machine:$(ARCH) -subsystem:$(SUBSYSTEM) -entry:_start -map:$(BLD)\temacs.map -swaprun:net -swaprun:cd $(EXTRA_LINK)
!endif

#
# Split up the objects into two sets so that we don't run out of
# command line space when we link them into a library.
#
# Put emacs.obj in a separate lib, since we need to have firstfile.obj
# as the "main" object file when linking.
#
OBJ0 =  $(BLD)\emacs.obj

OBJ1 =  $(BLD)\abbrev.obj       \
	$(BLD)\alloc.obj        \
	$(BLD)\alloca.obj       \
	$(BLD)\atimer.obj       \
	$(BLD)\buffer.obj       \
	$(BLD)\bytecode.obj     \
	$(BLD)\callint.obj      \
	$(BLD)\callproc.obj     \
	$(BLD)\casefiddle.obj	\
	$(BLD)\cm.obj           \
	$(BLD)\cmds.obj         \
	$(BLD)\data.obj         \
	$(BLD)\dired.obj        \
	$(BLD)\dispnew.obj      \
	$(BLD)\doc.obj          \
	$(BLD)\doprnt.obj       \
	$(BLD)\editfns.obj      \
	$(BLD)\eval.obj         \
	$(BLD)\fileio.obj       \
	$(BLD)\filelock.obj     \
	$(BLD)\filemode.obj     \
	$(BLD)\fns.obj          \
	$(BLD)\indent.obj       \
	$(BLD)\insdel.obj       \
	$(BLD)\keyboard.obj     \
	$(BLD)\keymap.obj       \
	$(BLD)\lread.obj        \
	$(BLD)\macros.obj       \
	$(BLD)\marker.obj       \
        $(BLD)\md5.obj          \
	$(BLD)\minibuf.obj

OBJ2 =  $(BLD)\w32.obj           \
	$(BLD)\w32heap.obj       \
	$(BLD)\w32inevt.obj      \
	$(BLD)\w32proc.obj       \
	$(BLD)\w32console.obj       \
	$(BLD)\print.obj        \
	$(BLD)\process.obj      \
	$(BLD)\regex.obj        \
	$(BLD)\scroll.obj       \
	$(BLD)\search.obj       \
	$(BLD)\syntax.obj       \
	$(BLD)\sysdep.obj       \
	$(BLD)\term.obj         \
	$(BLD)\termcap.obj      \
	$(BLD)\tparam.obj       \
	$(BLD)\undo.obj         \
	$(BLD)\unexw32.obj       \
	$(BLD)\window.obj       \
	$(BLD)\xdisp.obj        \
	$(BLD)\casetab.obj      \
	$(BLD)\floatfns.obj     \
	$(BLD)\frame.obj        \
	$(BLD)\gmalloc.obj      \
	$(BLD)\intervals.obj    \
	$(BLD)\composite.obj    \
	$(BLD)\ralloc.obj       \
	$(BLD)\textprop.obj     \
	$(BLD)\vm-limit.obj	\
	$(BLD)\region-cache.obj	\
	$(BLD)\strftime.obj	\
	$(BLD)\charset.obj	\
	$(BLD)\coding.obj	\
	$(BLD)\category.obj	\
	$(BLD)\ccl.obj		\
	$(BLD)\fontset.obj

WIN32OBJ = $(BLD)\w32term.obj	\
	   $(BLD)\w32xfns.obj	\
	   $(BLD)\w32fns.obj	\
	   $(BLD)\xfaces.obj	\
	   $(BLD)\w32select.obj	\
	   $(BLD)\w32menu.obj	\
	   $(BLD)\w32reg.obj    \
	   $(BLD)\w32bdf.obj

LIBS =  $(TLIB0)	\
	$(TLIB1)	\
	$(TLIB2)	\
!IFDEF NTGUI
	$(TLIBW32)      \
!ENDIF
	$(TLASTLIB)	\
!IFDEF NTGUI
	gdi32.lib       \
	comdlg32.lib    \
!ENDIF
#	libcmt.lib      \
	$(BASE_LIBS)	\
	$(ADVAPI32)	\
	user32.lib	\
	mpr.lib		\
	shell32.lib	\
	setargv.obj

#
# Build the executable and dump it.
#
all:            $(BLD) $(EMACS)

#
# Headers we would preprocess if we could.
#
PREPARED_HEADERS = config.h epaths.h
config.h:	..\nt\$(CONFIG_H)
		$(CP) $** $@
epaths.h:	..\nt\paths.h
		$(CP) $** $@

#
# Make sure we have the DOC file in the right place.
#
DOC		= $(OBJDIR)\etc\DOC-X
$(DOC):;	cd ..\lib-src
		- $(DEL) DOC-X
		$(MAKE) $(MFLAGS) -f makefile.nt all
		cd ..\src

#
# The dumped executable
#
emacs:          $(EMACS)
$(EMACS):       $(DOC) $(TEMACS)
		$(MAKEDIR)\$(BLD)\temacs.exe -batch -l loadup dump

#
# The undumped executable
# Note the extra post-link step to insert a static preload heap section.
# If preload runs out of memory, increase the last argument to addsection
# (it is the preload heap size in MB).
#
temacs:         $(BLD) $(TEMACS)
$(TEMACS):      $(PREPARED_HEADERS) $(TLIB0) $(TLIB1) $(TLIB2) $(TLIBW32) $(TLASTLIB) $(TOBJ) $(TRES)
		$(LINK) -out:$(TEMACS_TMP) $(LINK_FLAGS) $(TOBJ) $(TRES) $(LIBS)
		..\nt\$(BLD)\addsection $(TEMACS_TMP) $(TEMACS) EMHEAP 16

bootstrap: bootstrap-emacs

#
# Build a temacs with a sufficiently large PURESIZE to load the
# Lisp files from loadup.el in source form.
#
bootstrap-temacs: bootstrap-clean
		$(MAKE) $(MFLAGS) -f makefile.nt temacs CFLAGS="$(CFLAGS) -DPURESIZE=5000000"

#
# Dump an Emacs executable named bootstrap-emacs containing the
# files from loadup.el in source form.
#
bootstrap-emacs: bootstrap-temacs
		$(MAKEDIR)\$(BLD)\temacs.exe -batch -l loadup bootstrap
		- mkdir ..\bin
		$(CP) $(EMACS) ..\bin

#
# Force recompile of files that depend on PURESIZE
#
bootstrap-clean:
		- $(DEL) $(BLD)\alloc.obj
		- $(DEL) $(BLD)\data.obj
		- $(DEL) $(BLD)\intervals.obj
		- $(DEL) $(BLD)\keyboard.obj
		- $(DEL) $(BLD)\keymap.obj

#
# The resource file.  NT 3.10 requires the use of cvtres; even though
# it is not necessary on later versions, it is still ok to use it.
#
$(TRES):	..\nt\emacs.rc
		$(RC) -i..\nt -Fo$(BLD)\emacs.res $**
!if !$(MSVCNT11)
		$(CVTRES) -r -$(ARCH) -o $@ $(BLD)\emacs.res
!endif

#
# Build the library.  Split up the build into two phases...otherwise we
# run out of command line space.
#
$(TLIB0):       $(OBJ0)
		@- $(AR) -out:$@ $**
$(TLIB1):       $(OBJ1)
		@- $(AR) -out:$@ $**
$(TLIB2):	$(OBJ2)
		@- $(AR) -out:$@ $**
!IFDEF NTGUI
$(TLIBW32):	$(WIN32OBJ)
		@- $(AR) -out:$@ $**
!ENDIF

#
# Place lastfile.obj in its own library so that it can be loaded after
# the source libraries but before any system libraries.  Doing so defines
# the end of Emacs' data section portably across compilers and systems.
#
$(TLASTLIB):	$(BLD)\lastfile.obj
		@- $(AR) -out:$@ $**

#
# Assuming INSTALL_DIR is defined, build and install emacs in it.
#
install:        all
		- mkdir $(INSTALL_DIR)\bin
		$(CP) $(EMACS) $(INSTALL_DIR)\bin

#
# Maintenance
#
clean:;         - $(DEL) *~ s\*~
		- $(DEL) *.pdb config.h epaths.h
		- $(DEL) *.orig *.rej *.crlf
		- $(DEL) s\*.orig s\*.rej s\*.crlf
		- $(DEL_TREE) deleted
		- $(DEL_TREE) obj
		- $(DEL_TREE) obj-spd

#
# These files are the ones that compile conditionally on CANNOT_DUMP...
# this target is mostly used for debugging.
#
cleandump:;     cd $(BLD)
		- $(DEL) callproc.obj data.obj dispnew.obj doc.obj editfns.obj emacs.obj lread.obj process.obj sysdep.obj term.obj w32heap.obj unexw32.obj
		cd ..\..


### DEPENDENCIES ###

EMACS_ROOT	= ..
SRC		= .

$(BLD)\abbrev.obj : \
	$(SRC)\abbrev.c \
	$(EMACS_ROOT)\src\s\ms-w32.h \
	$(EMACS_ROOT)\src\m\intel386.h \
	$(EMACS_ROOT)\src\config.h \
	$(SRC)\commands.h \
	$(SRC)\buffer.h \
	$(SRC)\window.h

$(BLD)\alloc.obj : \
	$(SRC)\alloc.c \
	$(EMACS_ROOT)\src\s\ms-w32.h \
	$(EMACS_ROOT)\src\m\intel386.h \
	$(EMACS_ROOT)\src\config.h \
	$(SRC)\dispextern.h \
	$(SRC)\w32gui.h \
	$(SRC)\intervals.h \
	$(SRC)\composite.h \
	$(SRC)\puresize.h \
	$(SRC)\buffer.h \
	$(SRC)\window.h \
	$(SRC)\frame.h \
	$(SRC)\blockinput.h \
	$(SRC)\syssignal.h

$(BLD)\alloca.obj : \
	$(SRC)\alloca.c \
	$(EMACS_ROOT)\src\s\ms-w32.h \
	$(EMACS_ROOT)\src\m\intel386.h \
	$(EMACS_ROOT)\src\config.h \
	$(SRC)\s\ms-w32.h \
	$(SRC)\m\intel386.h \
	$(SRC)\config.h \
	$(SRC)\blockinput.h

$(BLD)\atimer.obj : \
	$(SRC)\atimer.c \
	$(EMACS_ROOT)\src\s\ms-w32.h \
	$(EMACS_ROOT)\src\m\intel386.h \
	$(EMACS_ROOT)\src\config.h \
	$(SRC)\s\ms-w32.h \
	$(SRC)\m\intel386.h \
	$(SRC)\config.h \
	$(SRC)\atimer.h \
	$(SRC)\syssignal.h \
	$(SRC)\systime.h \
	$(SRC)\blockinput.h

$(BLD)\buffer.obj : \
	$(SRC)\buffer.c \
	$(EMACS_ROOT)\nt\inc\sys\param.h \
	$(EMACS_ROOT)\src\s\ms-w32.h \
	$(EMACS_ROOT)\src\m\intel386.h \
	$(EMACS_ROOT)\src\config.h \
	$(SRC)\dispextern.h \
	$(SRC)\w32gui.h \
	$(SRC)\intervals.h \
	$(SRC)\composite.h \
	$(SRC)\frame.h \
	$(SRC)\window.h \
	$(SRC)\commands.h \
	$(SRC)\buffer.h \
	$(SRC)\indent.h \
	$(SRC)\blockinput.h \
	$(SRC)\region-cache.h

$(BLD)\bytecode.obj : \
	$(SRC)\bytecode.c \
	$(EMACS_ROOT)\src\s\ms-w32.h \
	$(EMACS_ROOT)\src\m\intel386.h \
	$(EMACS_ROOT)\src\config.h \
	$(SRC)\buffer.h \
	$(SRC)\syntax.h

$(BLD)\callint.obj : \
	$(SRC)\callint.c \
	$(EMACS_ROOT)\src\s\ms-w32.h \
	$(EMACS_ROOT)\src\m\intel386.h \
	$(EMACS_ROOT)\src\config.h \
	$(SRC)\buffer.h \
	$(SRC)\commands.h \
	$(SRC)\keyboard.h \
	$(SRC)\window.h

$(BLD)\callproc.obj : \
	$(SRC)\callproc.c \
	$(EMACS_ROOT)\src\s\ms-w32.h \
	$(EMACS_ROOT)\src\m\intel386.h \
	$(EMACS_ROOT)\src\config.h \
	$(SRC)\msdos.h \
	$(EMACS_ROOT)\nt\inc\sys\param.h \
	$(SRC)\commands.h \
	$(SRC)\buffer.h \
	$(SRC)\process.h \
	$(SRC)\syssignal.h \
	$(EMACS_ROOT)\nt\inc\sys\ioctl.h \
	$(EMACS_ROOT)\nt\inc\sys\file.h \
	$(SRC)\systty.h

$(BLD)\casefiddle.obj : \
	$(SRC)\casefiddle.c \
	$(EMACS_ROOT)\src\s\ms-w32.h \
	$(EMACS_ROOT)\src\m\intel386.h \
	$(EMACS_ROOT)\src\config.h \
	$(SRC)\buffer.h \
	$(SRC)\commands.h \
	$(SRC)\syntax.h
	$(CC) $(CFLAGS) -Fo$@ casefiddle.c

$(BLD)\casetab.obj : \
	$(SRC)\casetab.c \
	$(EMACS_ROOT)\src\s\ms-w32.h \
	$(EMACS_ROOT)\src\m\intel386.h \
	$(EMACS_ROOT)\src\config.h \
	$(SRC)\buffer.h

$(BLD)\cm.obj : \
	$(SRC)\cm.c \
	$(EMACS_ROOT)\src\s\ms-w32.h \
	$(EMACS_ROOT)\src\m\intel386.h \
	$(EMACS_ROOT)\src\config.h \
	$(SRC)\cm.h \
	$(SRC)\termhooks.h

$(BLD)\cmds.obj : \
	$(SRC)\cmds.c \
	$(EMACS_ROOT)\src\s\ms-w32.h \
	$(EMACS_ROOT)\src\m\intel386.h \
	$(EMACS_ROOT)\src\config.h \
	$(SRC)\commands.h \
	$(SRC)\buffer.h \
	$(SRC)\syntax.h

$(BLD)\composite.obj : \
	$(SRC)\composite.c \
	$(SRC)\buffer.h \
	$(SRC)\charset.h \
	$(SRC)\intervals.h \
	$(SRC)\composite.h \
	$(EMACS_ROOT)\src\s\ms-w32.h \
	$(EMACS_ROOT)\src\m\intel386.h \
	$(EMACS_ROOT)\src\config.h

$(BLD)\data.obj : \
	$(SRC)\data.c \
	$(EMACS_ROOT)\src\s\ms-w32.h \
	$(EMACS_ROOT)\src\m\intel386.h \
	$(EMACS_ROOT)\src\config.h \
	$(SRC)\puresize.h \
	$(SRC)\buffer.h \
	$(SRC)\syssignal.h

$(BLD)\dired.obj : \
	$(SRC)\dired.c \
	$(EMACS_ROOT)\src\s\ms-w32.h \
	$(EMACS_ROOT)\src\m\intel386.h \
	$(EMACS_ROOT)\src\config.h \
	$(SRC)\ndir.h \
	$(SRC)\buffer.h \
	$(SRC)\commands.h \
	$(SRC)\regex.h

$(BLD)\dispnew.obj : \
	$(SRC)\dispnew.c \
	$(EMACS_ROOT)\src\s\ms-w32.h \
	$(EMACS_ROOT)\src\m\intel386.h \
	$(EMACS_ROOT)\src\config.h \
	$(SRC)\termchar.h \
	$(SRC)\termopts.h \
	$(SRC)\termhooks.h \
	$(SRC)\cm.h \
	$(SRC)\buffer.h \
	$(SRC)\frame.h \
	$(SRC)\window.h \
	$(SRC)\commands.h \
	$(SRC)\disptab.h \
	$(SRC)\indent.h \
	$(SRC)\dispextern.h \
	$(SRC)\intervals.h \
	$(SRC)\composite.h \
	$(EMACS_ROOT)\nt\inc\sys\ioctl.h \
	$(EMACS_ROOT)\nt\inc\sys\file.h \
	$(SRC)\systty.h \
	$(SRC)\w32term.h \
	$(SRC)\w32gui.h \
	$(SRC)\xterm.h \
	$(SRC)\systime.h

$(BLD)\doc.obj : \
	$(SRC)\doc.c \
	$(EMACS_ROOT)\src\s\ms-w32.h \
	$(EMACS_ROOT)\src\m\intel386.h \
	$(EMACS_ROOT)\src\config.h \
	$(EMACS_ROOT)\nt\inc\sys\file.h \
	$(SRC)\buffer.h \
	$(SRC)\keyboard.h

$(BLD)\doprnt.obj : \
	$(SRC)\doprnt.c \
	$(EMACS_ROOT)\src\s\ms-w32.h \
	$(EMACS_ROOT)\src\m\intel386.h \
	$(EMACS_ROOT)\src\config.h

$(BLD)\dosfns.obj : \
	$(SRC)\dosfns.c \
	$(EMACS_ROOT)\src\s\ms-w32.h \
	$(EMACS_ROOT)\src\m\intel386.h \
	$(EMACS_ROOT)\src\config.h \
	$(SRC)\buffer.h \
	$(SRC)\termchar.h \
	$(SRC)\termhooks.h \
	$(SRC)\frame.h \
	$(SRC)\dosfns.h \
	$(SRC)\msdos.h

$(BLD)\editfns.obj : \
	$(SRC)\editfns.c \
	$(EMACS_ROOT)\src\s\ms-w32.h \
	$(EMACS_ROOT)\src\m\intel386.h \
	$(EMACS_ROOT)\src\config.h \
	$(SRC)\uaf.h \
	$(EMACS_ROOT)\nt\inc\pwd.h \
	$(SRC)\dispextern.h \
	$(SRC)\w32gui.h \
	$(SRC)\intervals.h \
	$(SRC)\composite.h \
	$(SRC)\buffer.h \
	$(SRC)\window.h \
	$(SRC)\systime.h

$(BLD)\emacs.obj : \
	$(SRC)\emacs.c \
	$(EMACS_ROOT)\src\s\ms-w32.h \
	$(EMACS_ROOT)\src\m\intel386.h \
	$(EMACS_ROOT)\src\config.h \
	$(SRC)\commands.h \
	$(SRC)\dispextern.h \
	$(SRC)\w32gui.h \
	$(SRC)\intervals.h \
	$(SRC)\composite.h \
	$(EMACS_ROOT)\nt\inc\sys\ioctl.h \
	$(EMACS_ROOT)\nt\inc\sys\file.h \
	$(SRC)\systty.h \
	$(SRC)\syssignal.h \
	$(SRC)\process.h

$(BLD)\eval.obj : \
	$(SRC)\eval.c \
	$(EMACS_ROOT)\src\s\ms-w32.h \
	$(EMACS_ROOT)\src\m\intel386.h \
	$(EMACS_ROOT)\src\config.h \
	$(SRC)\blockinput.h \
	$(SRC)\commands.h \
	$(SRC)\keyboard.h

$(BLD)\fileio.obj : \
	$(SRC)\fileio.c \
	$(EMACS_ROOT)\src\s\ms-w32.h \
	$(EMACS_ROOT)\src\m\intel386.h \
	$(EMACS_ROOT)\src\config.h \
	$(SRC)\uaf.h \
	$(EMACS_ROOT)\nt\inc\pwd.h \
	$(SRC)\msdos.h \
	$(EMACS_ROOT)\nt\inc\sys\param.h \
	$(SRC)\dispextern.h \
	$(SRC)\w32gui.h \
	$(SRC)\intervals.h \
	$(SRC)\composite.h \
	$(SRC)\buffer.h \
	$(SRC)\window.h \
	$(EMACS_ROOT)\nt\inc\sys\file.h \
	$(SRC)\systime.h

$(BLD)\filelock.obj : \
	$(SRC)\filelock.c \
	$(EMACS_ROOT)\src\s\ms-w32.h \
	$(EMACS_ROOT)\src\m\intel386.h \
	$(EMACS_ROOT)\src\config.h \
	$(SRC)\uaf.h \
	$(EMACS_ROOT)\nt\inc\pwd.h \
	$(EMACS_ROOT)\nt\inc\sys\file.h \
	$(EMACS_ROOT)\src\epaths.h \
	$(SRC)\buffer.h \
	$(SRC)\ndir.h

$(BLD)\filemode.obj : \
	$(SRC)\filemode.c \
	$(EMACS_ROOT)\src\s\ms-w32.h \
	$(EMACS_ROOT)\src\m\intel386.h \
	$(EMACS_ROOT)\src\config.h \
	$(SRC)\s\ms-w32.h \
	$(SRC)\m\intel386.h \
	$(SRC)\config.h

$(BLD)\firstfile.obj : \
	$(SRC)\firstfile.c \
	$(EMACS_ROOT)\src\s\ms-w32.h \
	$(EMACS_ROOT)\src\m\intel386.h \
	$(EMACS_ROOT)\src\config.h

$(BLD)\floatfns.obj : \
	$(SRC)\floatfns.c \
	$(EMACS_ROOT)\src\s\ms-w32.h \
	$(EMACS_ROOT)\src\m\intel386.h \
	$(EMACS_ROOT)\src\config.h \
	$(SRC)\syssignal.h

$(BLD)\fns.obj : \
	$(SRC)\fns.c \
	$(EMACS_ROOT)\src\s\ms-w32.h \
	$(EMACS_ROOT)\src\m\intel386.h \
	$(EMACS_ROOT)\src\config.h \
	$(SRC)\commands.h \
	$(SRC)\buffer.h \
	$(SRC)\keyboard.h \
	$(SRC)\dispextern.h \
	$(SRC)\w32gui.h \
	$(SRC)\intervals.h \
	$(SRC)\composite.h \
        $(SRC)\md5.h

$(BLD)\frame.obj : \
	$(SRC)\frame.c \
	$(EMACS_ROOT)\src\s\ms-w32.h \
	$(EMACS_ROOT)\src\m\intel386.h \
	$(EMACS_ROOT)\src\config.h \
	$(SRC)\frame.h \
	$(SRC)\termhooks.h \
	$(SRC)\window.h \
	$(SRC)\buffer.h \
	$(SRC)\commands.h \
	$(SRC)\keyboard.h

$(BLD)\getloadavg.obj : \
	$(SRC)\getloadavg.c \
	$(EMACS_ROOT)\nt\inc\sys\param.h \
	$(EMACS_ROOT)\src\s\ms-w32.h \
	$(EMACS_ROOT)\src\m\intel386.h \
	$(EMACS_ROOT)\src\config.h \
	$(SRC)\s\ms-w32.h \
	$(SRC)\m\intel386.h \
	$(SRC)\config.h \
	$(EMACS_ROOT)\nt\inc\sys\file.h

$(BLD)\gmalloc.obj : \
	$(SRC)\gmalloc.c \
	$(EMACS_ROOT)\src\s\ms-w32.h \
	$(EMACS_ROOT)\src\m\intel386.h \
	$(EMACS_ROOT)\src\config.h \
	$(EMACS_ROOT)\nt\inc\sys\param.h \
	$(SRC)\getpagesize.h
	$(CC) $(CFLAGS) -D__STDC__ -Fo$@ gmalloc.c

$(BLD)\hftctl.obj : \
	$(SRC)\hftctl.c \
	$(EMACS_ROOT)\src\s\ms-w32.h \
	$(EMACS_ROOT)\src\m\intel386.h \
	$(EMACS_ROOT)\src\config.h \
	$(EMACS_ROOT)\nt\inc\sys\ioctl.h

$(BLD)\indent.obj : \
	$(SRC)\indent.c \
	$(EMACS_ROOT)\src\s\ms-w32.h \
	$(EMACS_ROOT)\src\m\intel386.h \
	$(EMACS_ROOT)\src\config.h \
	$(SRC)\buffer.h \
	$(SRC)\indent.h \
	$(SRC)\frame.h \
	$(SRC)\window.h \
	$(SRC)\termchar.h \
	$(SRC)\termopts.h \
	$(SRC)\disptab.h \
	$(SRC)\dispextern.h \
	$(SRC)\w32gui.h \
	$(SRC)\intervals.h \
	$(SRC)\region-cache.h \
	$(SRC)\composite.h

$(BLD)\insdel.obj : \
	$(SRC)\insdel.c \
	$(EMACS_ROOT)\src\s\ms-w32.h \
	$(EMACS_ROOT)\src\m\intel386.h \
	$(EMACS_ROOT)\src\config.h \
	$(SRC)\dispextern.h \
	$(SRC)\w32gui.h \
	$(SRC)\intervals.h \
	$(SRC)\composite.h \
	$(SRC)\buffer.h \
	$(SRC)\window.h \
	$(SRC)\blockinput.h

$(BLD)\intervals.obj : \
	$(SRC)\intervals.c \
	$(EMACS_ROOT)\src\s\ms-w32.h \
	$(EMACS_ROOT)\src\m\intel386.h \
	$(EMACS_ROOT)\src\config.h \
	$(SRC)\dispextern.h \
	$(SRC)\w32gui.h \
	$(SRC)\intervals.h \
	$(SRC)\composite.h \
	$(SRC)\keyboard.h \
	$(SRC)\buffer.h \
	$(SRC)\puresize.h

$(BLD)\keyboard.obj : \
	$(SRC)\keyboard.c \
	$(EMACS_ROOT)\src\s\ms-w32.h \
	$(EMACS_ROOT)\src\m\intel386.h \
	$(EMACS_ROOT)\src\config.h \
	$(SRC)\termchar.h \
	$(SRC)\termopts.h \
	$(SRC)\termhooks.h \
	$(SRC)\macros.h \
	$(SRC)\frame.h \
	$(SRC)\window.h \
	$(SRC)\commands.h \
	$(SRC)\buffer.h \
	$(SRC)\disptab.h \
	$(SRC)\keyboard.h \
	$(SRC)\dispextern.h \
	$(SRC)\intervals.h \
	$(SRC)\composite.h \
	$(SRC)\blockinput.h \
	$(SRC)\msdos.h \
	$(SRC)\syssignal.h \
	$(EMACS_ROOT)\nt\inc\sys\ioctl.h \
	$(EMACS_ROOT)\nt\inc\sys\file.h \
	$(SRC)\systty.h \
	$(SRC)\w32term.h \
	$(SRC)\w32gui.h \
	$(SRC)\xterm.h \
	$(SRC)\systime.h \
	$(SRC)\atimer.h

$(BLD)\keymap.obj : \
	$(SRC)\keymap.c \
	$(EMACS_ROOT)\src\s\ms-w32.h \
	$(EMACS_ROOT)\src\m\intel386.h \
	$(EMACS_ROOT)\src\config.h \
	$(SRC)\commands.h \
	$(SRC)\buffer.h \
	$(SRC)\keyboard.h \
	$(SRC)\termhooks.h \
	$(SRC)\blockinput.h

$(BLD)\lastfile.obj : \
	$(SRC)\lastfile.c \
	$(EMACS_ROOT)\src\s\ms-w32.h \
	$(EMACS_ROOT)\src\m\intel386.h \
	$(EMACS_ROOT)\src\config.h

$(BLD)\lread.obj : \
	$(SRC)\lread.c \
	$(EMACS_ROOT)\src\s\ms-w32.h \
	$(EMACS_ROOT)\src\m\intel386.h \
	$(EMACS_ROOT)\src\config.h \
	$(EMACS_ROOT)\nt\inc\sys\file.h \
	$(SRC)\buffer.h \
	$(EMACS_ROOT)\src\epaths.h \
	$(SRC)\commands.h \
	$(SRC)\keyboard.h \
	$(SRC)\termhooks.h \
	$(SRC)\msdos.h

$(BLD)\macros.obj : \
	$(SRC)\macros.c \
	$(EMACS_ROOT)\src\s\ms-w32.h \
	$(EMACS_ROOT)\src\m\intel386.h \
	$(EMACS_ROOT)\src\config.h \
	$(SRC)\macros.h \
	$(SRC)\commands.h \
	$(SRC)\buffer.h \
	$(SRC)\window.h

$(BLD)\marker.obj : \
	$(SRC)\marker.c \
	$(EMACS_ROOT)\src\s\ms-w32.h \
	$(EMACS_ROOT)\src\m\intel386.h \
	$(EMACS_ROOT)\src\config.h \
	$(SRC)\buffer.h

$(BLD)\md5.obj : \
        $(SRC)\md5.c \
        $(SRC)\md5.h

$(BLD)\minibuf.obj : \
	$(SRC)\minibuf.c \
	$(EMACS_ROOT)\src\s\ms-w32.h \
	$(EMACS_ROOT)\src\m\intel386.h \
	$(EMACS_ROOT)\src\config.h \
	$(SRC)\commands.h \
	$(SRC)\buffer.h \
	$(SRC)\dispextern.h \
	$(SRC)\w32gui.h \
	$(SRC)\frame.h \
	$(SRC)\window.h \
	$(SRC)\syntax.h

$(BLD)\w32.obj : \
	$(SRC)\w32.c \
	$(SRC)\w32.h \
	$(SRC)\s\ms-w32.h \
	$(SRC)\m\intel386.h \
	$(SRC)\config.h \
	$(EMACS_ROOT)\nt\inc\pwd.h \
	$(SRC)\w32heap.h

$(BLD)\w32heap.obj : \
	$(SRC)\w32heap.c \
	$(SRC)\w32heap.h \
	$(SRC)\s\ms-w32.h \
	$(SRC)\m\intel386.h \
	$(SRC)\config.h

$(BLD)\w32inevt.obj : \
	$(SRC)\w32inevt.c \
	$(SRC)\s\ms-w32.h \
	$(SRC)\m\intel386.h \
	$(SRC)\config.h \
	$(SRC)\frame.h \
	$(SRC)\blockinput.h \
	$(SRC)\termhooks.h \
	$(SRC)\w32heap.h \
	$(SRC)\w32term.h \
	$(SRC)\w32gui.h

$(BLD)\w32proc.obj : \
	$(SRC)\w32proc.c \
	$(SRC)\s\ms-w32.h \
	$(SRC)\m\intel386.h \
	$(SRC)\config.h \
	$(SRC)\w32.h \
	$(SRC)\w32heap.h \
	$(SRC)\systime.h

$(BLD)\w32console.obj : \
	$(SRC)\w32console.c \
	$(SRC)\s\ms-w32.h \
	$(SRC)\m\intel386.h \
	$(SRC)\config.h \
	$(SRC)\frame.h \
	$(SRC)\disptab.h \
	$(SRC)\termhooks.h \
	$(SRC)\w32inevt.h

$(BLD)\prefix-args.obj : \
	$(SRC)\prefix-args.c

$(BLD)\print.obj : \
	$(SRC)\print.c \
	$(EMACS_ROOT)\src\s\ms-w32.h \
	$(EMACS_ROOT)\src\m\intel386.h \
	$(EMACS_ROOT)\src\config.h \
	$(SRC)\buffer.h \
	$(SRC)\frame.h \
	$(SRC)\window.h \
	$(SRC)\process.h \
	$(SRC)\termchar.h \
	$(SRC)\dispextern.h \
	$(SRC)\w32gui.h \
	$(SRC)\intervals.h \
	$(SRC)\composite.h

$(BLD)\process.obj : \
	$(SRC)\process.c \
	$(EMACS_ROOT)\src\s\ms-w32.h \
	$(EMACS_ROOT)\src\m\intel386.h \
	$(EMACS_ROOT)\src\config.h \
	$(EMACS_ROOT)\nt\inc\sys\ioctl.h \
	$(EMACS_ROOT)\nt\inc\sys\file.h \
	$(SRC)\systty.h \
	$(SRC)\window.h \
	$(SRC)\buffer.h \
	$(SRC)\process.h \
	$(SRC)\termhooks.h \
	$(SRC)\commands.h \
	$(SRC)\frame.h \
	$(SRC)\syssignal.h \
	$(SRC)\syswait.h \
	$(SRC)\systime.h \
	$(SRC)\termopts.h \
	$(SRC)\composite.h \
	$(SRC)\atimer.h

$(BLD)\ralloc.obj : \
	$(SRC)\ralloc.c \
	$(EMACS_ROOT)\src\s\ms-w32.h \
	$(EMACS_ROOT)\src\m\intel386.h \
	$(EMACS_ROOT)\src\config.h \
	$(SRC)\s\ms-w32.h \
	$(SRC)\m\intel386.h \
	$(SRC)\config.h \
	$(EMACS_ROOT)\nt\inc\sys\param.h \
	$(SRC)\getpagesize.h

$(BLD)\regex.obj : \
	$(SRC)\regex.c \
	$(EMACS_ROOT)\src\s\ms-w32.h \
	$(EMACS_ROOT)\src\m\intel386.h \
	$(EMACS_ROOT)\src\config.h \
	$(SRC)\s\ms-w32.h \
	$(SRC)\m\intel386.h \
	$(SRC)\config.h \
	$(SRC)\buffer.h \
	$(SRC)\syntax.h \
	$(SRC)\regex.h

$(BLD)\region-cache.obj : \
	$(SRC)\region-cache.c \
	$(EMACS_ROOT)\src\s\ms-w32.h \
	$(EMACS_ROOT)\src\m\intel386.h \
	$(EMACS_ROOT)\src\config.h \
	$(SRC)\buffer.h \
	$(SRC)\region-cache.h

$(BLD)\scroll.obj : \
	$(SRC)\scroll.c \
	$(EMACS_ROOT)\src\s\ms-w32.h \
	$(EMACS_ROOT)\src\m\intel386.h \
	$(EMACS_ROOT)\src\config.h \
	$(SRC)\termchar.h \
	$(SRC)\dispextern.h \
	$(SRC)\w32gui.h \
	$(SRC)\frame.h

$(BLD)\search.obj : \
	$(SRC)\search.c \
	$(EMACS_ROOT)\src\s\ms-w32.h \
	$(EMACS_ROOT)\src\m\intel386.h \
	$(EMACS_ROOT)\src\config.h \
	$(SRC)\syntax.h \
	$(SRC)\buffer.h \
	$(SRC)\commands.h \
	$(SRC)\blockinput.h \
	$(SRC)\regex.h \
	$(SRC)\region-cache.h \
	$(SRC)\composite.h

$(BLD)\strftime.obj : \
	$(SRC)\strftime.c \
	$(EMACS_ROOT)\src\s\ms-w32.h \
	$(EMACS_ROOT)\src\m\intel386.h \
	$(EMACS_ROOT)\src\config.h

$(BLD)\syntax.obj : \
	$(SRC)\syntax.c \
	$(EMACS_ROOT)\src\s\ms-w32.h \
	$(EMACS_ROOT)\src\m\intel386.h \
	$(EMACS_ROOT)\src\config.h \
	$(SRC)\commands.h \
	$(SRC)\buffer.h \
	$(SRC)\syntax.h \
	$(SRC)\composite.h

$(BLD)\sysdep.obj : \
	$(SRC)\sysdep.c \
	$(EMACS_ROOT)\src\s\ms-w32.h \
	$(EMACS_ROOT)\src\m\intel386.h \
	$(EMACS_ROOT)\src\config.h \
	$(SRC)\blockinput.h \
	$(SRC)\dosfns.h \
	$(SRC)\msdos.h \
	$(EMACS_ROOT)\nt\inc\sys\param.h \
	$(EMACS_ROOT)\nt\inc\sys\file.h \
	$(EMACS_ROOT)\nt\inc\sys\ioctl.h \
	$(EMACS_ROOT)\nt\inc\sys\file.h \
	$(SRC)\systty.h \
	$(SRC)\syswait.h \
	$(SRC)\frame.h \
	$(SRC)\window.h \
	$(SRC)\termhooks.h \
	$(SRC)\termchar.h \
	$(SRC)\termopts.h \
	$(SRC)\dispextern.h \
	$(SRC)\w32gui.h \
	$(SRC)\process.h \
	$(SRC)\ndir.h \
	$(SRC)\syssignal.h \
	$(SRC)\systime.h \
	$(SRC)\uaf.h \
	$(EMACS_ROOT)\src\acldef.h \
	$(EMACS_ROOT)\src\chpdef.h

$(BLD)\term.obj : \
	$(SRC)\term.c \
	$(EMACS_ROOT)\src\s\ms-w32.h \
	$(EMACS_ROOT)\src\m\intel386.h \
	$(EMACS_ROOT)\src\config.h \
	$(SRC)\termchar.h \
	$(SRC)\termopts.h \
	$(SRC)\cm.h \
	$(SRC)\frame.h \
	$(SRC)\disptab.h \
	$(SRC)/dispextern.h \
	$(SRC)\termhooks.h \
	$(SRC)\keyboard.h

$(BLD)\termcap.obj : \
	$(SRC)\termcap.c \
	$(EMACS_ROOT)\src\s\ms-w32.h \
	$(EMACS_ROOT)\src\m\intel386.h \
	$(EMACS_ROOT)\src\config.h \
	$(EMACS_ROOT)\nt\inc\sys\file.h

$(BLD)\terminfo.obj : \
	$(SRC)\terminfo.c

$(BLD)\textprop.obj : \
	$(SRC)\textprop.c \
	$(EMACS_ROOT)\src\s\ms-w32.h \
	$(EMACS_ROOT)\src\m\intel386.h \
	$(EMACS_ROOT)\src\config.h \
	$(SRC)\dispextern.h \
	$(SRC)\w32gui.h \
	$(SRC)\intervals.h \
	$(SRC)\composite.h \
	$(SRC)\buffer.h \
	$(SRC)\window.h

$(BLD)\tparam.obj : \
	$(SRC)\tparam.c \
	$(EMACS_ROOT)\src\s\ms-w32.h \
	$(EMACS_ROOT)\src\m\intel386.h \
	$(EMACS_ROOT)\src\config.h

$(BLD)\undo.obj : \
	$(SRC)\undo.c \
	$(EMACS_ROOT)\src\s\ms-w32.h \
	$(EMACS_ROOT)\src\m\intel386.h \
	$(EMACS_ROOT)\src\config.h \
	$(SRC)\buffer.h \
	$(SRC)\commands.h

$(BLD)\unexw32.obj : \
	$(SRC)\unexw32.c \
	$(EMACS_ROOT)\src\s\ms-w32.h \
	$(EMACS_ROOT)\src\m\intel386.h \
	$(EMACS_ROOT)\src\config.h \
	$(SRC)\w32heap.h

$(BLD)\vm-limit.obj : \
	$(SRC)\vm-limit.c \
	$(EMACS_ROOT)\src\s\ms-w32.h \
	$(EMACS_ROOT)\src\m\intel386.h \
	$(EMACS_ROOT)\src\config.h \
	$(SRC)\mem-limits.h

$(BLD)\widget.obj : \
	$(SRC)\widget.c \
	$(EMACS_ROOT)\src\s\ms-w32.h \
	$(EMACS_ROOT)\src\m\intel386.h \
	$(EMACS_ROOT)\src\config.h \
	$(SRC)\xterm.h \
	$(SRC)\frame.h \
	$(SRC)\dispextern.h \
	$(SRC)\w32gui.h \
	$(SRC)\widget.h \
	$(SRC)\widgetprv.h

$(BLD)\window.obj : \
	$(SRC)\window.c \
	$(EMACS_ROOT)\src\s\ms-w32.h \
	$(EMACS_ROOT)\src\m\intel386.h \
	$(EMACS_ROOT)\src\config.h \
	$(SRC)\buffer.h \
	$(SRC)\frame.h \
	$(SRC)\window.h \
	$(SRC)\commands.h \
	$(SRC)\indent.h \
	$(SRC)\termchar.h \
	$(SRC)\disptab.h \
	$(SRC)\keyboard.h \
	$(SRC)\composite.h

$(BLD)\xdisp.obj : \
	$(SRC)\xdisp.c \
	$(EMACS_ROOT)\src\s\ms-w32.h \
	$(EMACS_ROOT)\src\m\intel386.h \
	$(EMACS_ROOT)\src\config.h \
	$(SRC)\frame.h \
	$(SRC)\window.h \
	$(SRC)\termchar.h \
	$(SRC)\buffer.h \
	$(SRC)\indent.h \
	$(SRC)\commands.h \
	$(SRC)\macros.h \
	$(SRC)\disptab.h \
	$(SRC)\termhooks.h \
	$(SRC)\dispextern.h \
	$(SRC)\w32gui.h \
	$(SRC)\intervals.h \
	$(SRC)\composite.h

$(BLD)\xfaces.obj: \
	$(EMACS_ROOT)\src\s\ms-w32.h \
	$(EMACS_ROOT)\src\m\intel386.h \
	$(EMACS_ROOT)\src\config.h \
	$(SRC)\xfaces.c \
	$(SRC)\charset.h \
	$(SRC)\fontset.h \
	$(SRC)\w32term.h \
	$(SRC)\w32gui.h \
	$(SRC)\buffer.h \
	$(SRC)\dispextern.h \
	$(SRC)\frame.h \
	$(SRC)\blockinput.h \
	$(SRC)\window.h \
	$(SRC)\intervals.h \
	$(SRC)\composite.h

$(BLD)\w32fns.obj: \
	$(EMACS_ROOT)\src\s\ms-w32.h \
	$(EMACS_ROOT)\src\m\intel386.h \
	$(EMACS_ROOT)\src\config.h \
	$(SRC)\w32fns.c \
	$(SRC)\w32term.h \
	$(SRC)\w32gui.h \
	$(SRC)\frame.h \
	$(SRC)\window.h \
	$(SRC)\buffer.h \
	$(SRC)\charset.h \
	$(SRC)\coding.h \
	$(SRC)\dispextern.h \
	$(SRC)\keyboard.h \
	$(SRC)\blockinput.h \
	$(SRC)\epaths.h \
	$(SRC)\w32heap.h \
	$(SRC)\termhooks.h

$(BLD)\w32menu.obj: \
	$(EMACS_ROOT)\src\s\ms-w32.h \
	$(EMACS_ROOT)\src\m\intel386.h \
	$(EMACS_ROOT)\src\config.h \
	$(SRC)\w32menu.c \
	$(SRC)\termhooks.h \
	$(SRC)\frame.h \
	$(SRC)\window.h \
	$(SRC)\keyboard.h \
	$(SRC)\blockinput.h \
	$(SRC)\buffer.h \
	$(SRC)\charset.h \
	$(SRC)\coding.h

$(BLD)\w32term.obj: \
	$(EMACS_ROOT)\src\s\ms-w32.h \
	$(EMACS_ROOT)\src\m\intel386.h \
	$(EMACS_ROOT)\src\config.h \
	$(SRC)\w32term.c \
	$(SRC)\blockinput.h \
	$(SRC)\w32heap.h \
	$(SRC)\w32term.h \
	$(SRC)\w32gui.h \
	$(SRC)\systty.h \
	$(SRC)\systime.h \
	$(SRC)\frame.h \
	$(SRC)\dispextern.h \
	$(SRC)\termhooks.h \
	$(SRC)\termopts.h \
	$(SRC)\termchar.h \
	$(SRC)\gnu.h \
	$(SRC)\disptab.h \
	$(SRC)\buffer.h \
	$(SRC)\window.h \
	$(SRC)\keyboard.h \
	$(SRC)\intervals.h \
	$(SRC)\composite.h \
	$(SRC)\atimer.h

$(BLD)\w32select.obj: \
	$(EMACS_ROOT)\src\s\ms-w32.h \
	$(EMACS_ROOT)\src\m\intel386.h \
	$(EMACS_ROOT)\src\config.h \
	$(SRC)\w32select.c \
	$(SRC)\w32term.h \
	$(SRC)\w32gui.h \
	$(SRC)\dispextern.h \
	$(SRC)\frame.h \
	$(SRC)\blockinput.h

$(BLD)\w32reg.obj: \
	$(EMACS_ROOT)\src\s\ms-w32.h \
	$(EMACS_ROOT)\src\m\intel386.h \
	$(EMACS_ROOT)\src\config.h \
	$(SRC)\w32reg.c \
	$(SRC)\w32term.h \
	$(SRC)\w32gui.h \
	$(SRC)\blockinput.h

$(BLD)\w32xfns.obj: \
	$(EMACS_ROOT)\src\s\ms-w32.h \
	$(EMACS_ROOT)\src\m\intel386.h \
	$(EMACS_ROOT)\src\config.h \
	$(SRC)\w32xfns.c \

$(BLD)\w32bdf.obj: \
	$(EMACS_ROOT)\src/s\ms-w32.h \
	$(EMACS_ROOT)\src/m\intel386.h \
	$(EMACS_ROOT)\src/config.h \
	$(SRC)\w32bdf.c \
	$(SRC)\charset.h \
	$(SRC)\frame.h \
	$(SRC)\dispextern.h \
	$(SRC)\fontset.h \
	$(SRC)\blockinput.h \
	$(SRC)\w32gui.h \
	$(SRC)\w32term.h \
	$(SRC)\w32gui.h \
	$(SRC)\w32bdf.h \
	$(SRC)\w32.h \
	$(SRC)\frame.h \
	$(SRC)\blockinput.h
