all::
clean::
test::
prep::
all:: prep
!include <Win32.Mak>
!ifdef NODEBUG
BUILD=rel
!else
BUILD=dbg
!endif
!if exist($(MAKEDIR)\windows\NTMakefile.w32)
SRC=$(MAKEDIR)
!elseif exist($(MAKEDIR)\..\windows\NTMakefile.w32)
SRC=$(MAKEDIR)\..
!elseif exist($(MAKEDIR)\..\..\windows\NTMakefile.w32)
SRC=$(MAKEDIR)\..\..
!elseif exist($(MAKEDIR)\..\..\..\windows\NTMakefile.w32)
SRC=$(MAKEDIR)\..\..\..
!elseif exist($(MAKEDIR)\..\..\..\..\windows\NTMakefile.w32)
SRC=$(MAKEDIR)\..\..\..\..
!else
! error Cant determine source directory
!endif
! if "$(CPU)"=="i386" || "$(CPU)"=="x86"
MCPU=x86
! elseif "$(CPU)"=="AMD64"
MCPU=amd64
! else
! error Unknown CPU
! endif
!include "NTMakefile.config"
DESTDIR =$(SRC)\out\dest_$(CPU)
OBJDIR =$(SRC)\out\obj_$(CPU)
INCDIR =$(DESTDIR)\inc
LIBDIR =$(DESTDIR)\lib
BINDIR =$(DESTDIR)\bin
PLUGINDIR =$(BINDIR)\plugin\krb5
DOCDIR =$(DESTDIR)\doc
SBINDIR =$(BINDIR)
LIBEXECDIR =$(BINDIR)
ASMDIR =$(BINDIR)
INSTDIR =$(DESTDIR)\install
SDKDIR =$(SRC)\out\sdk
SDKINCDIR =$(SDKDIR)\inc
SDKLIBDIR =$(SDKDIR)\lib\$(CPU)
SDKSRCDIR =$(SDKDIR)\src
SDKREDISTDIR =$(SDKDIR)\redist\$(CPU)
!ifdef RELDIR
SRCDIR =$(SRC)\$(RELDIR)
OBJ =$(OBJDIR)\$(RELDIR)
!else
OBJ =$(OBJDIR)
!endif
PATH=$(PATH);$(BINDIR)
RMAKE=nmake /nologo /f NTMakefile RECURSE=1
MKDIR=md
CP=copy /Y
LINK=link
LM=lib
RM=del /q
ECHO=echo
RC=rc
AWK_CMD=gawk.exe
YACC_CMD=bison.exe
LEX_CMD=flex.exe
PYTHON=python.exe
PERL=perl.exe
CMP=cmp.exe
SIGNTOOL=signtool.exe
MAKECAT=makecat.exe
HHC=hhc.exe
MAKEINFO=makeinfo.exe
SED=sed.exe
CANDLE_CMD=candle.exe
LIGHT_CMD=light.exe
SH=sh.exe
AWK=$(AWK_CMD)
YACC=$(YACC_CMD) -y
LEX=$(LEX_CMD)
CANDLE=$(CANDLE_CMD) -nologo
LIGHT=$(LIGHT_CMD) -nologo
!ifdef PTHREAD_INC
pthreadinc= -I$(PTHREAD_INC)
!endif
cincdirs=$(cincdirs) -I$(INCDIR) -I$(INCDIR)\krb5 $(pthreadinc)
cdefines=$(cdefines) -DHAVE_CONFIG_H
cdebug=$(cdebug) /Zi
ldebug=$(ldebug) /DEBUG
cwarn=$(cwarn) -D_CRT_SECURE_NO_WARNINGS -wd4996 -wd4127 -wd4244 -wd4100 -wd4706
cwarn=$(cwarn) -wd4214 -wd4267 -wd4018 -wd4389 -wd4204 -wd4221 -wd4295 -wd4146
!if "$(CPU)"=="i386"
libmach=/machine:X86
!elseif "$(CPU)"=="AMD64"
libmach=/machine:X64
!else
! error Unknown CPU value
!endif
!ifdef NO_MP
MPOPT=
!else
MPOPT=/MP
!endif
!ifndef STATICRUNTIME
C2OBJ_C = $(CC) $(cdebug) $(cflags) $(cvarsdll) $(AUXCFLAGS) $(intcflags) $(cdefines) $(cincdirs) $(cwarn)
EXECONLINK_C = $(LINK) $(ldebug) $(conlflags) $(conlibsdll) $(libmach)
EXEGUILINK_C = $(LINK) $(ldebug) $(guilflags) $(guilibsdll) $(libmach)
DLLCONLINK_C = $(LINK) $(ldebug) $(dlllflags) $(conlibsdll) $(libmach)
DLLGUILINK_C = $(LINK) $(ldebug) $(dlllflags) $(guilibsdll) $(libmach)
!else
C2OBJ_C = $(CC) $(cdebug) $(cflags) $(cvarsmt) $(AUXCFLAGS) $(intcflags) $(cdefines) $(cincdirs) $(cwarn)
EXECONLINK_C = $(LINK) $(ldebug) $(conlflags) $(conlibsmt) $(libmach)
EXEGUILINK_C = $(LINK) $(ldebug) $(guilflags) $(guilibsmt) $(libmach)
DLLCONLINK_C = $(LINK) $(ldebug) $(dlllflags) $(conlibsmt) $(libmach)
DLLGUILINK_C = $(LINK) $(ldebug) $(dlllflags) $(guilibsmt) $(libmach)
!endif
LIBGUI_C = $(LM) /nologo $(libmach) /SUBSYSTEM:WINDOWS
LIBCON_C = $(LM) /nologo $(libmach) /SUBSYSTEM:CONSOLE
C2OBJ = $(C2OBJ_C) -Fo$@ -Fd$(@D)\ $**
C2OBJ_NP = $(C2OBJ_C) $(MPOPT) $<
C2OBJ_P = $(C2OBJ_NP) -Fo$(OBJ)\ -Fd$(OBJ)\ EXECONLINK = $(EXECONLINK_C) -OUT:$@ $**
EXEGUILINK = $(EXEGUILINK_C) -OUT:$@ $**
DLLCONLINK = $(DLLCONLINK_C) -OUT:$@ $**
DLLGUILINK = $(DLLGUILINK_C) -OUT:$@ $**
LIBGUI = $(LIBGUI_C) /OUT:$@ $**
LIBCON = $(LIBCON_C) /OUT:$@ $**
CPREPROCESSOUT = $(CC) /EP /FI$(INCDIR)\config.h /TC /DCPP_ONLY=1
RC2RES_C = $(RC) $(cincdirs) $(AUXRCFLAGS)
RC2RES = $(RC2RES_C) -fo $@ $**
!ifndef RECURSE
REQUIRED_TOOLS= \
"$(AWK_CMD)" "$(YACC_CMD)" "$(LEX_CMD)" "$(PYTHON)" "$(PERL)" \
"$(CMP)" "$(SED)" "$(SIGNTOOL)" "$(MAKECAT)" "$(MAKEINFO)" "$(HHC)"
!ifdef BUILD_INSTALLERS
REQUIRED_TOOLS=$(REQUIRED_TOOLS) "$(CANDLE_CMD)" "$(LIGHT_CMD)"
!endif
OPTIONAL_TOOLS="$(SH)"
check-utils:
@for %%g in ( $(REQUIRED_TOOLS) ) do @( \
for /f %%f in ( "%%g" ) do @( \
if exist %%f @( \
echo Found %%f \
) else if "%%~$$PATH:f"=="" @( \
echo Could not find %%f in PATH && \
exit /b 1 \
) else @( \
echo Found %%~$$PATH:f \
) \
) \
)
@for %%g in ( $(OPTIONAL_TOOLS) ) do @( \
for /f %%f in ( "%%g" ) do @( \
if exist %%f @( \
echo Found %%f \
) else if "%%~$$PATH:f"=="" @( \
echo Could not find %%f in PATH && \
echo Optional targets may fail. \
) else @( \
echo Found %%~$$PATH:f \
) \
) \
)
prep:: check-utils
show-cmds:
@$(ECHO) C2OBJ=$(C2OBJ_C:\=\\)
@$(ECHO).
@$(ECHO) EXECONLINK=$(EXECONLINK_C)
@$(ECHO).
@$(ECHO) EXEGUILINK=$(EXEGUILINK_C)
@$(ECHO).
@$(ECHO) DLLCONLINK=$(DLLCONLINK_C)
@$(ECHO).
@$(ECHO) DLLGUILINK=$(DLLGUILINK_C)
@$(ECHO).
@$(ECHO) LIBGUI=$(LIBGUI_C)
@$(ECHO).
@$(ECHO) LIBCON=$(LIBCON_C)
prep:: show-cmds
!endif
{}.c{$(OBJ)}.obj::
$(C2OBJ_C) /Fd$(OBJ)\ /Fo$(OBJ)\ $(localcflags) $(MPOPT) @<<
$<
<<
{$(OBJ)}.c{$(OBJ)}.obj::
$(C2OBJ_C) /Fd$(OBJ)\ /Fo$(OBJ)\ $(extcflags) $(MPOPT) @<<
$<
<<
{}.cpp{$(OBJ)}.obj::
$(C2OBJ_C) /Fd$(OBJ)\ /Fo$(OBJ)\ $(localcflags) $(MPOPT) @<<
$<
<<
{$(OBJ)}.cpp{$(OBJ)}.obj::
$(C2OBJ_C) /Fd$(OBJ)\ /Fo$(OBJ)\ $(extcflags) $(MPOPT) @<<
$<
<<
{}.hin{$(INCDIR)}.h:
$(CP) $< $@
{}.h{$(INCDIR)}.h:
$(CP) $< $@
{}.h{$(INCDIR)\krb5}.h:
$(CP) $< $@
{$(OBJ)}.h{$(INCDIR)}.h:
$(CP) $< $@
{$(OBJ)}.x{$(OBJ)}.c:
$(CP) $< $@
{$(OBJ)}.hx{$(INCDIR)}.h:
$(CP) $< $@
{$(OBJ)}.hx{$(OBJ)}.h:
$(CP) $< $@
{}.rc{$(OBJ)}.res:
$(RC2RES)
!ifdef RELDIR
all:: announce
all-tools:: announce-tools
test:: announce
clean:: announce
announce:
@echo.
@echo --------- Entering $(RELDIR:\= ):
announce-tools:
@echo.
@echo --------- Entering $(RELDIR:\= ) tools:
!endif
prep:: mkdirs
mkdirs:
! if !exist($(OBJ))
$(MKDIR) $(OBJ)
! endif
! if !exist($(DESTDIR))
$(MKDIR) $(DESTDIR)
! endif
! if !exist($(LIBDIR))
$(MKDIR) $(LIBDIR)
! endif
! if !exist($(BINDIR))
$(MKDIR) $(BINDIR)
! endif
! if !exist($(PLUGINDIR))
$(MKDIR) $(PLUGINDIR)
! endif
! if !exist($(INCDIR))
$(MKDIR) $(INCDIR)
! endif
! if !exist($(DOCDIR))
$(MKDIR) $(DOCDIR)
! endif
! if !exist($(INCDIR)\gssapi)
$(MKDIR) $(INCDIR)\gssapi
! endif
! if !exist($(INCDIR)\hcrypto)
$(MKDIR) $(INCDIR)\hcrypto
! endif
! if !exist($(INCDIR)\kadm5)
$(MKDIR) $(INCDIR)\kadm5
! endif
! if !exist($(INCDIR)\krb5)
$(MKDIR) $(INCDIR)\krb5
! endif
!ifdef SUBDIRS
subdirs:
@for %%f in ( $(SUBDIRS) ) do @ (pushd %%f && $(RMAKE) && popd) || exit /b 1
clean-subdirs:
@for %%f in ( $(SUBDIRS) ) do @ (pushd %%f && $(RMAKE) clean && popd) || exit /b 1
test-subdirs:
@for %%f in ( $(SUBDIRS) ) do @ (pushd %%f && $(RMAKE) test && popd) || exit /b 1
all:: subdirs
clean:: clean-subdirs
test:: test-subdirs
!endif
!ifdef CLEANFILES
clean::
-$(RM) $(CLEANFILES)
!endif
!ifdef RELDIR
clean::
-$(RM) $(OBJ)\*.*
!endif
.SUFFIXES: .c .cpp .hin .h .x .hx
MT=mt.exe -nologo
_VC_MANIFEST_EMBED_EXE= \
( if exist $@.manifest $(MT) -outputresource:$@;1 -manifest $@.manifest $(APPMANIFEST) )
_VC_MANIFEST_EMBED_EXE_NOHEIM= \
( if exist $@.manifest $(MT) -outputresource:$@;1 -manifest $@.manifest )
_VC_MANIFEST_EMBED_DLL= \
( if exist $@.manifest $(MT) -outputresource:$@;2 -manifest $@.manifest )
_MERGE_MANIFEST_DLL= \
( $(MT) -inputresource:$@;2 -manifest $(APPMANIFEST) -outputresource:$@;2 )
_INSERT_APPMANIFEST_DLL= \
( $(MT) -manifest $(APPMANIFEST) -outputresource:$@;2 )
_VC_MANIFEST_CLEAN= \
( if exist $@.manifest $(RM) $@.manifest )
!ifdef CODESIGN
_CODESIGN=( $(CODESIGN) $@ )
!else
!ifdef SIGNTOOL_C
!ifndef SIGNTOOL_T
SIGNTOOL_T=/t http://timestamp.verisign.com/scripts/timstamp.dll
!endif
_CODESIGN=( $(SIGNTOOL) sign $(SIGNTOOL_O) $(SIGNTOOL_T) $(SIGNTOOL_C) /v $@ )
!else
_CODESIGN=( echo Skipping code sign )
!endif
!endif
EXEPREP=\
( $(_VC_MANIFEST_EMBED_EXE) && $(_VC_MANIFEST_CLEAN) && $(_CODESIGN) ) || ( $(RM) $@ && exit /b 1 )
EXEPREP_NOHEIM=\
( $(_VC_MANIFEST_EMBED_EXE_NOHEIM) && $(_VC_MANIFEST_CLEAN) && $(_CODESIGN) ) || ( $(RM) $@ && exit /b 1 )
EXEPREP_NODIST=\
( $(_VC_MANIFEST_EMBED_EXE_NOHEIM) && $(_VC_MANIFEST_CLEAN) ) || ( $(RM) $@ && exit /b 1 )
DLLPREP=\
( $(_VC_MANIFEST_EMBED_DLL) && $(_VC_MANIFEST_CLEAN) && $(_CODESIGN) ) || ( $(RM) $@ && exit /b 1 )
DLLPREP_NODIST=\
( $(_VC_MANIFEST_EMBED_DLL) && $(_VC_MANIFEST_CLEAN) ) || ( $(RM) $@ && exit /b 1 )
DLLPREP_MERGE=\
( ( $(_MERGE_MANIFEST_DLL) || $(_INSERT_APPMANIFEST_DLL) ) && $(_CODESIGN) ) || ( $(RM) $@ && exit /b 1 )
LIBASN1 =$(LIBDIR)\libasn1.lib
LIBCOMERR =$(LIBDIR)\libcom_err.lib
LIBEDITLINE =$(LIBDIR)\libeditline.lib
LIBGSSAPI =$(LIBDIR)\libgssapi.lib
LIBHCRYPTO =$(LIBDIR)\libhcrypto.lib
LIBHDB =$(LIBDIR)\libhdb.lib
LIBHEIMBASE =$(LIBDIR)\libheimbase.lib
LIBHEIMDAL =$(LIBDIR)\heimdal.lib
LIBHEIMIPCC =$(LIBDIR)\libheim-ipcc.lib
LIBHEIMIPCS =$(LIBDIR)\libheim-ipcs.lib
LIBHEIMNTLM =$(LIBDIR)\libheimntlm.lib
LIBHX509 =$(LIBDIR)\libhx509.lib
LIBKADM5CLNT=$(LIBDIR)\libkadm5clnt.lib
LIBKADM5SRV =$(LIBDIR)\libkadm5srv.lib
LIBKDC =$(LIBDIR)\libkdc.lib
LIBLTM =$(LIBDIR)\libltm.lib
LIBKRB5 =$(LIBDIR)\libkrb5.lib
LIBRFC3961 =$(LIBDIR)\librfc3961.lib
LIBROKEN =$(LIBDIR)\libroken.lib
LIBSL =$(LIBDIR)\libsl.lib
LIBSQLITE =$(LIBDIR)\libsqlite.lib
LIBVERS =$(LIBDIR)\libvers.lib
LIBWIND =$(LIBDIR)\libwind.lib
ASMKRBNAME =Heimdal.Kerberos
ASMGSSNAME =Heimdal.GSSAPI
APPMANIFEST =$(INCDIR)\Heimdal.Application.$(MCPU).manifest