
!include <ntwin32.mak>	# bring in platform specific stuff.

#Fix a problem with ntwin32.mak and Visual C++
# problem is .mak defines "link=link32" and "lib=lib32"
# Problem is MSVC linker/library manager use these environment
# variables as additional flags to link/lib
# Consequently, link warns "link32.obj not found" and similarly lib.
#   This has really p___ed me of.  It has been very hard to get right.
#   The LIB variable is used by MSVC to locate system library files, and
#	damn ntwin32.mak sets lib.  Now although NMAKE is case sensitive, the OS'
#   environment vars arent.  Therefore /E option _must_ be specified for MSVC
# nmake itself is also very average :-(
#

# Damn it.  Even with .pyd in the suffixes, nmake wont infer a line
# mymodule.dll:
# and run up the .c->.obj, .obj->.pyd.  And with all debug turned on, all
# it says is "dont know how to make .."  Damn it (probably me, but I gave up:)
#.SUFFIXES :
#.SUFFIXES : .exe .dll .obj .asm .c .cpp .cxx .bas .cbl .for .pas .res .rc

# Version information.
pyversion=140
pypatchlevel=b1

pythondllext=pyd
linker=$(link)
libmgr=$(implib)
LINK=

#cdebug = -Z7 -Od	# Z7 for win32s debugging

#
# Additional common definitions
#
cinclude=/I$(pythondir)\Include
python_dll=Py$(pyversion)-$(pypatchlevel).dll
python_defs_lib=$(pythondir)\Modules\Python.lib
python_defs_exp=$(pythondir)\Modules\Python.exp
pythonopts=/DHAVE_CONFIG_H /nologo /MD /G3

#!IFDEF MSVC
# Although this is handled, it generates warning.  This is to avoid them
#cc=cl
#linker=link
#libmgr=lib
#!ENDIF

!IFNDEF NODEBUG
ldebug = -debug:full -debugtype:both
!ENDIF

!ifndef BUILD_DL
cdl=/DUSE_DL_EXPORT /DWIN32_PATCH_LEVEL=\"$(pyversion)-$(pypatchlevel)\"

.c.obj:
	@$(cc) $(cflags) $(ccustom) $(cdebug) $(cinclude) $(pythonopts) $(cdl) $*.c
!else
#
# Useful stuff for building DL modules under NT.
#

cdl=/DUSE_DL_IMPORT

#if you have a .DEF file, define HAVE_DEF
# if you dont want precompiled headers, define PCH=0 (in your makefile, not here!)
!ifndef PCH
PCH=1
!endif
!if "$(PCH)"=="1"
cpch=/YX
!else
cpch=
!endif

!ifdef HAVE_DEF
export_statements=/DEF:$*.def 
!else
export_statements=/EXPORT:init$(*:module=) 
!endif
# Note for 'C', I use /Tp, to force as CPP - this will allow .C to define types.
.c.obj:
	@echo Warning - compiling as C++ file
	@$(cc) $(cdl) $(cflags) $(ccustom) $(cdebug) $(cinclude) $(cpch) $(pythonopts) /DUSE_DL_IMPORT /Tp $*.c

.cpp.obj:
	@$(cc) $(cdl) $(cflags) $(ccustom) $(cdebug) $(cinclude) $(cpch) $(pythonopts) /DUSE_DL_IMPORT $*.cpp

.obj.$(pythondllext):
	@link -dll -out:$*.$(pythondllext) $*.obj $(ldebug) $(export_statements) $(guilibsdll) $(lcustom) $(python_defs_lib)

!endif # !BUILD_DL
