#
# Makefile definition file for building GNU Emacs on Windows NT
+# Copyright (c) 1994-2001 Free Software Foundation, Inc.
#
# 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
# Define MSVCNT11 to be nonzero if you are using the MSVCNT 1.1 environment.
# MSVCNT11 = 1
+!ifndef MSVCNT11
MSVCNT11 = 0
+!endif
#
# END CONFIGURATION
#
+#
+# Allow detection of builds with MSVC 5 or later
+#
+_NMAKE_VER_5=162
+_NMAKE_VER_4=0
+
+!IFNDEF _NMAKE_VER
+_NMAKE_VER=$(_NMAKE_VER_4)
+!ENDIF
+
# Check that the INCLUDE and LIB environment variables are set.
#
!ifndef INCLUDE
# We're on Windows NT
CPU = $(PROCESSOR_ARCHITECTURE)
CONFIG_H = config.nt
-OS_TYPE = winnt
+OS_TYPE = windowsnt
! if "$(PROCESSOR_ARCHITECTURE)" == "x86"
ARCH = i386
CPU = i386
ARCH = i386
CPU = i386
CONFIG_H = config.nt
-OS_TYPE = win95
+OS_TYPE = windows95
!endif
# Include ntwin32.mak. So far, this file seems to be supported by every
-# Microsoft compiler on NT and Win95 and properly defines the executable
+# Microsoft compiler on NT and Windows 95 and properly defines the executable
# names and libraries necessary to build Emacs. I do not have access
# to any other vendor compilers, so I do not know if they supply this
# file, too. For now I'll assume that they do.
!if $(MSVCNT11)
BASE_LIBS = $(libc) $(baselibs) oldnames.lib
!else
-BASE_LIBS = $(libc) $(baselibs)
+BASE_LIBS = $(libc) $(baselibs) -nodefaultlib:oldnames.lib
!endif
# We want any debugging info in the executable.
!if "$(LINK)" == "link32"
-SYS_LDFLAGS =
+SYS_LDFLAGS = -nologo
!else
-SYS_LDFLAGS = -pdb:none -release -incremental:no -version:3.10
+SYS_LDFLAGS = -nologo -release -incremental:no -version:3.10
!endif
+# Tag the executables to run out of the swapfile when execute off CD or network shares
+SYS_LDFLAGS = $(SYS_LDFLAGS) -swaprun:cd -swaprun:net
+
INC = -I.
-CFLAGS_COMMON = -nologo $(INC) $(ARCH_CFLAGS) $(LOCAL_FLAGS) -DWIN32_LEAN_AND_MEAN -D$(ARCH)
+!if "$(BUILD_TYPE)" == "spd"
+CFLAGS_COMMON = -nologo $(INC) $(ARCH_CFLAGS) $(LOCAL_FLAGS) -DWIN32_LEAN_AND_MEAN -D$(ARCH) -Fd$(BLD)\vc.pdb
+!else
+CFLAGS_COMMON = -nologo $(INC) $(ARCH_CFLAGS) $(LOCAL_FLAGS) -DWIN32_LEAN_AND_MEAN -D$(ARCH) -Fd$(BLD)\vc.pdb -DEMACSDEBUG
+!endif
!if $(MSVCNT11)
CFLAGS = $(CFLAGS_COMMON) -D_CRTAPI1=_cdecl
!else
-CFLAGS = $(CFLAGS_COMMON)
-!endif
-!ifdef NTGUI
-CFLAGS = $(CFLAGS) -DHAVE_NTGUI=1
+CFLAGS = $(CFLAGS_COMMON) -D_CRTAPI1=_cdecl
!endif
!ifdef BUILD_TYPE
-mkdir $(BLD)
CP = copy
-CP_DIR = xcopy /f/r/i/e/d
+CP_DIR = xcopy /f/r/i/e/d/k
-!if "$(OS_TYPE)" == "win95"
+!if "$(OS_TYPE)" == "windows95"
DEL = deltree /y
DEL_TREE = deltree /y
!else
DEL = del
-# This is completely braindamaged, but it's the only routine known to be there
-DEL_TREE = echo y | rmdir /s
+# NT better way of killing a deltree
+DEL_TREE = rd /s/q
!endif
-# The location of the icon file
-EMACS_ICON_PATH = ..\nt\emacs.ico
-
# Lets us add icons to the GNU Emacs folder
ADDPM = ..\nt\$(BLD)\addpm.exe
!if "$(ARCH)" == "i386"
!if "$(BUILD_TYPE)" == "spd"
-ARCH_CFLAGS = -nologo -D_X86_=1 -c -Zel -W2 -H63 -O2b2 -G5d -Zi
+ARCH_CFLAGS = -nologo -D_X86_=1 -c -Zel -W2 -H63 -Oxsb2 -G6dF -Zi -Zp8
!else
-ARCH_CFLAGS = -nologo -D_X86_=1 -c -Zel -W2 -H63 -G3d -Zi -Od
+ARCH_CFLAGS = -nologo -D_X86_=1 -c -Zel -W2 -H63 -Od -G3d -Zi -Zp8
!endif
ARCH_LDFLAGS = -align:0x1000 $(SYS_LDFLAGS)
!else
!if "$(ARCH)" == "alpha"
-ARCH_CFLAGS = -D_ALPHA_=1 -c -Ze -Zi -W2 -D__stdcall= -D__cdecl=
+!if "$(BUILD_TYPE)" == "spd"
+ARCH_CFLAGS = -D_ALPHA_=1 -c -Ze -Zi -W2 -Od -D__stdcall= -D__cdecl=
+!else
+ARCH_CFLAGS = -D_ALPHA_=1 -c -Ze -Zi -W2 -O1 -D__stdcall= -D__cdecl=
+!endif
ARCH_LDFLAGS = -align:0x2000 $(SYS_LDFLAGS)
!else
!endif
!endif
!endif
+
+#
+# If the compiler supports compiling multiple .c files to .o files at
+# one time, use this feature.
+#
+!IF ("$(_NMAKE_VER)" == "$(_NMAKE_VER_4)")
+.c{$(BLD)}.obj:
+ $(CC) $(CFLAGS) -Fo$(BLD)\ $<
+!ELSE
+.c{$(BLD)}.obj::
+ $(CC) $(CFLAGS) -Fo$(BLD)\ $<
+!ENDIF