#
#  Makefile definition file for building GNU Emacs on Windows NT
#  
#  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.
#
#     Geoff Voelker (voelker@cs.washington.edu)         9-6-94

#
# BEGIN CONFIGURATION
#

# Define the following to build the GUI version
#
NTGUI=1

# Set INSTALL_DIR to be the directory into which you want emacs installed.
#
!ifndef INSTALL_DIR
INSTALL_DIR     = C:\emacs
!endif

# Define MSVCNT11 to be nonzero if you are using the MSVCNT 1.1 environment.
# MSVCNT11	= 1
MSVCNT11        = 0

#
# END CONFIGURATION
#

# Check that the INCLUDE and LIB environment variables are set.
#
!ifndef INCLUDE
!error The INCLUDE environment variable needs to be set.
!endif
!ifndef LIB
!error The LIB environment variable needs to be set.
!endif

# Determine the architecture we're running on.
# Define ARCH for our purposes; 
# Define CPU for use by ntwin32.mak;
# Define CONFIG_H to the appropriate config.h for the system;
#
!ifdef PROCESSOR_ARCHITECTURE
# We're on Windows NT
CPU		= $(PROCESSOR_ARCHITECTURE)
CONFIG_H	= config.nt
OS_TYPE		= winnt
! if "$(PROCESSOR_ARCHITECTURE)" == "x86"
ARCH		= i386
CPU		= i386
! else
!  if "$(PROCESSOR_ARCHITECTURE)" == "MIPS"
ARCH		= mips
!  else
!   if "$(PROCESSOR_ARCHITECTURE)" == "ALPHA"
ARCH		= alpha
!   else
!    if "$(PROCESSOR_ARCHITECTURE)" == "PPC"
ARCH		= ppc
!    else
!error Unknown architecture type "$(PROCESSOR_ARCHITECTURE)"
!    endif
!   endif
!  endif
! endif
!else
# We're on Windows 95
ARCH		= i386
CPU		= i386
CONFIG_H	= config.nt
OS_TYPE		= win95
!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
# 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.
#
!include <ntwin32.mak>

# Using cvtres is necessary on NT 3.10 and doesn't hurt on later platforms.
CVTRES		= cvtres.exe
AR		= $(implib)
# The assignment $(CC) = $(cc) fails even though variables are case sensitive.
LINK_TMP	= $(link)
LINK		= $(LINK_TMP)
CC_TMP		= $(cc)
CC		= $(CC_TMP)

# advapi32.lib is left off of $(baselibs) on NT 3.10
!if "$(baselibs)" == "kernel32.lib "
ADVAPI32	= advapi32.lib
!else
ADVAPI32	=
!endif

# Older ntwin32.mak files do not define libc; do it for them.
!ifndef libc
libc		= libc.lib
!endif

# The base libraries for compiling Emacs on NT.  With MSVC, this should
# include oldnames.lib.
!if $(MSVCNT11)
BASE_LIBS	= $(libc) $(baselibs) oldnames.lib
!else
BASE_LIBS	= $(libc) $(baselibs)
!endif

# We want any debugging info in the executable.
!if "$(LINK)" == "link32"
SYS_LDFLAGS	= 
!else
SYS_LDFLAGS	= -pdb:none -release -incremental:no -version:3.10
!endif

INC             = -I.
CFLAGS_COMMON	= -nologo $(INC) $(ARCH_CFLAGS) $(LOCAL_FLAGS) -DWIN32_LEAN_AND_MEAN -D$(ARCH)
!if $(MSVCNT11)
CFLAGS          = $(CFLAGS_COMMON) -D_CRTAPI1=_cdecl
!else
CFLAGS          = $(CFLAGS_COMMON) 
!endif
!ifdef NTGUI
CFLAGS          = $(CFLAGS) -DHAVE_NTGUI=1
!endif

!ifdef BUILD_TYPE
OBJDIR          = obj-$(BUILD_TYPE)
!else
OBJDIR          = obj
!endif
$(OBJDIR):;	-mkdir $(OBJDIR)
BLD             = $(OBJDIR)\$(ARCH)
$(BLD):         $(OBJDIR)
		-mkdir $(BLD)

CP		= copy
CP_DIR		= xcopy /f/r/i/e/d

!if "$(OS_TYPE)" == "win95"
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
!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
!else
ARCH_CFLAGS     = -nologo -D_X86_=1 -c -Zel -W2 -H63 -G3d -Zi -Od
!endif
ARCH_LDFLAGS	= -align:0x1000 $(SYS_LDFLAGS)

!else
!if "$(ARCH)" == "mips"
ARCH_CFLAGS     = -D_MIPS_=1 -c -W2 -Zi -Od -Gt0
ARCH_LDFLAGS	= -align:0x1000 $(SYS_LDFLAGS)

!else
!if "$(ARCH)" == "alpha"
ARCH_CFLAGS     = -D_ALPHA_=1 -c -Ze -Zi -W2 -D__stdcall= -D__cdecl=
ARCH_LDFLAGS	= -align:0x2000 $(SYS_LDFLAGS)

!else
!if "$(ARCH)" == "ppc"
# These flags are a guess...if they don't work, please send me mail.
ARCH_CFLAGS	= -D_PPC_=1 -c -Ze -Zi -W2 -Od
ARCH_LDFLAGS	= -align:0x1000 $(SYS_LDFLAGS)

!else
!ERROR Unknown architecture type "$(ARCH)".
!endif
!endif
!endif
!endif
