1######################################################################## 2# 3# Copyright (c) 2009-2011, Secure Endpoints Inc. 4# All rights reserved. 5# 6# Redistribution and use in source and binary forms, with or without 7# modification, are permitted provided that the following conditions 8# are met: 9# 10# - Redistributions of source code must retain the above copyright 11# notice, this list of conditions and the following disclaimer. 12# 13# - Redistributions in binary form must reproduce the above copyright 14# notice, this list of conditions and the following disclaimer in 15# the documentation and/or other materials provided with the 16# distribution. 17# 18# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 21# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 22# COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 23# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 24# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 25# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 26# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 27# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 28# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 29# POSSIBILITY OF SUCH DAMAGE. 30# 31 32all:: 33 34clean:: 35 36test:: 37 38prep:: 39 40all:: prep 41 42!include "NTMakefile.sdk" 43 44!ifdef NODEBUG 45BUILD=rel 46!else 47BUILD=dbg 48!endif 49 50!if exist($(MAKEDIR)\windows\NTMakefile.w32) 51SRC=$(MAKEDIR) 52!elseif exist($(MAKEDIR)\..\windows\NTMakefile.w32) 53SRC=$(MAKEDIR)\.. 54!elseif exist($(MAKEDIR)\..\..\windows\NTMakefile.w32) 55SRC=$(MAKEDIR)\..\.. 56!elseif exist($(MAKEDIR)\..\..\..\windows\NTMakefile.w32) 57SRC=$(MAKEDIR)\..\..\.. 58!elseif exist($(MAKEDIR)\..\..\..\..\windows\NTMakefile.w32) 59SRC=$(MAKEDIR)\..\..\..\.. 60!else 61! error Cant determine source directory 62!endif 63 64! if "$(CPU)"=="i386" || "$(CPU)"=="x86" 65MCPU=x86 66! elseif "$(CPU)"=="AMD64" 67MCPU=amd64 68! else 69! error Unknown CPU 70! endif 71 72!include "NTMakefile.config" 73 74#---------------------------------------------------------------- 75# Directory macros 76 77DESTDIR =$(SRC)\out\dest_$(CPU) 78OBJDIR =$(SRC)\out\obj_$(CPU) 79 80INCDIR =$(DESTDIR)\inc 81LIBDIR =$(DESTDIR)\lib 82BINDIR =$(DESTDIR)\bin 83PLUGINDIR =$(BINDIR) 84DOCDIR =$(DESTDIR)\doc 85SBINDIR =$(BINDIR) 86LIBEXECDIR =$(BINDIR) 87ASMDIR =$(BINDIR) 88INSTDIR =$(DESTDIR)\install 89SDKDIR =$(SRC)\out\sdk 90SDKINCDIR =$(SDKDIR)\inc 91SDKLIBDIR =$(SDKDIR)\lib\$(CPU) 92SDKSRCDIR =$(SDKDIR)\src 93SDKREDISTDIR =$(SDKDIR)\redist\$(CPU) 94 95!ifdef RELDIR 96SRCDIR =$(SRC)\$(RELDIR) 97OBJ =$(OBJDIR)\$(RELDIR) 98!else 99OBJ =$(OBJDIR) 100!endif 101 102# For tests: 103PATH=$(PATH);$(BINDIR) 104 105#---------------------------------------------------------------- 106# Command macros 107 108RMAKE=nmake /nologo /f NTMakefile RECURSE=1 109MKDIR=md 110CP=copy /Y 111LINK=link 112LM=lib 113RM=del /q 114ECHO=echo 115RC=rc 116 117#---------------------------------------------------------------- 118# Program macros 119 120AWK_CMD=gawk.exe 121YACC_CMD=bison.exe 122LEX_CMD=flex.exe 123PYTHON=python.exe 124PERL=perl.exe 125CMP=cmp.exe 126MAKECAT=makecat.exe 127HHC=hhc.exe 128MAKEINFO=makeinfo.exe 129SED=sed.exe 130 131CANDLE_CMD=candle.exe 132LIGHT_CMD=light.exe 133 134# Only used for tests 135SH=sh.exe 136 137# Commands 138AWK=$(AWK_CMD) 139YACC=$(YACC_CMD) -y 140LEX=$(LEX_CMD) 141CANDLE=$(CANDLE_CMD) -nologo 142LIGHT=$(LIGHT_CMD) -nologo 143 144#---------------------------------------------------------------- 145# External dependencies 146 147# For pthread support to be enabled, both PTHREAD_INC and PTHREAD_LIB 148# should be defined. PTHREAD_INC should be the include directory 149# where pthread.h is to be found (i.e. $(PTHREAD_INC)\pthread.h should 150# exist), and PTHREAD_LIB is the full path to the pthread import 151# library. 152# 153# Note that both paths should not contain any whitespace. 154 155!ifdef PTHREAD_INC 156pthreadinc= -I$(PTHREAD_INC) 157!endif 158 159#---------------------------------------------------------------- 160# Build options 161 162cincdirs=$(cincdirs) -I$(INCDIR) -I$(INCDIR)\krb5 $(pthreadinc) 163cdefines=$(cdefines) -DHAVE_CONFIG_H 164# Windows CNG provider 165cdefines=$(cdefines) -DHCRYPTO_DEF_PROVIDER=w32crypto 166cdebug=$(cdebug) /Zi 167ldebug=$(ldebug) /DEBUG 168localcflags=$(localcflags) /Oy- 169 170# Disable warnings: 171# 172# C4996: 'function' was declared deprecated 173# C4127: Conditional expression is constant 174# C4244: Conversion from 'type1' to 'type2', possible loss of data 175# C4100: 'identifier': unreferenced formal parameter 176# C4706: Assignment within conditional expression 177# C4214: Nonstandard extension used 178# C4267: '': Conversion from 'type1' to 'type2', possible loss of data 179# C4018: '': Signed/unsigned mismatch 180# C4204: Nonstandard extension used: non-constant aggregate initializer 181# C4221: Nonstandard extension used: 'v1': cannot be initialized using address of automatic variable 'v2' 182# C4295: '': Array is too small to include a terminating null character 183# C4146: Unary minus operator applied to unsigned type, result still unsigned. 184# 185cwarn=$(cwarn) -D_CRT_SECURE_NO_WARNINGS -wd4996 -wd4127 -wd4244 -wd4100 -wd4706 186cwarn=$(cwarn) -wd4214 -wd4267 -wd4018 -wd4389 -wd4204 -wd4221 -wd4295 -wd4146 187 188!if "$(CPU)"=="i386" 189libmach=/machine:X86 190!elseif "$(CPU)"=="AMD64" 191libmach=/machine:X64 192!else 193! error Unknown CPU value 194!endif 195 196!ifdef NO_MP 197MPOPT= 198!else 199MPOPT=/MP 200!endif 201 202!ifndef STATICRUNTIME 203 204C2OBJ_C = $(CC) $(cdebug) $(cflags) $(cvarsdll) $(AUXCFLAGS) $(intcflags) $(cdefines) $(cincdirs) $(cwarn) 205EXECONLINK_C = $(LINK) $(ldebug) $(conlflags) $(conlibsdll) $(libmach) 206EXEGUILINK_C = $(LINK) $(ldebug) $(guilflags) $(guilibsdll) $(libmach) 207DLLCONLINK_C = $(LINK) $(ldebug) $(dlllflags) $(conlibsdll) $(libmach) 208DLLGUILINK_C = $(LINK) $(ldebug) $(dlllflags) $(guilibsdll) $(libmach) 209 210!else # STATICRUNTIME 211 212C2OBJ_C = $(CC) $(cdebug) $(cflags) $(cvarsmt) $(AUXCFLAGS) $(intcflags) $(cdefines) $(cincdirs) $(cwarn) 213EXECONLINK_C = $(LINK) $(ldebug) $(conlflags) $(conlibsmt) $(libmach) 214EXEGUILINK_C = $(LINK) $(ldebug) $(guilflags) $(guilibsmt) $(libmach) 215DLLCONLINK_C = $(LINK) $(ldebug) $(dlllflags) $(conlibsmt) $(libmach) 216DLLGUILINK_C = $(LINK) $(ldebug) $(dlllflags) $(guilibsmt) $(libmach) 217 218!endif 219 220LIBGUI_C = $(LM) /nologo $(libmach) /SUBSYSTEM:WINDOWS 221LIBCON_C = $(LM) /nologo $(libmach) /SUBSYSTEM:CONSOLE 222 223C2OBJ = $(C2OBJ_C) -Fo$@ -Fd$(@D)\ $** 224C2OBJ_NP = $(C2OBJ_C) $(MPOPT) $< 225C2OBJ_P = $(C2OBJ_NP) -Fo$(OBJ)\ -Fd$(OBJ)\ # 226EXECONLINK = $(EXECONLINK_C) -OUT:$@ $** 227EXEGUILINK = $(EXEGUILINK_C) -OUT:$@ $** 228DLLCONLINK = $(DLLCONLINK_C) -OUT:$@ $** 229DLLGUILINK = $(DLLGUILINK_C) -OUT:$@ $** 230LIBGUI = $(LIBGUI_C) /OUT:$@ $** 231LIBCON = $(LIBCON_C) /OUT:$@ $** 232 233# Preprocess files to stdout using config.h 234CPREPROCESSOUT = $(CC) /EP /FI$(INCDIR)\config.h /TC /DCPP_ONLY=1 235 236# Resources 237 238RC2RES_C = $(RC) $(cincdirs) $(AUXRCFLAGS) 239RC2RES = $(RC2RES_C) -fo $@ $** 240 241#---------------------------------------------------------------------- 242# If this is the initial invocation, we check if all the build 243# utilities are there. Also show the commands macros. 244 245!ifndef RECURSE 246 247REQUIRED_TOOLS= \ 248 "$(AWK_CMD)" "$(YACC_CMD)" "$(LEX_CMD)" "$(PYTHON)" "$(PERL)" \ 249 "$(CMP)" "$(SED)" "$(MAKECAT)" "$(MAKEINFO)" "$(HHC)" 250 251!ifdef BUILD_INSTALLERS 252REQUIRED_TOOLS=$(REQUIRED_TOOLS) "$(CANDLE_CMD)" "$(LIGHT_CMD)" 253!endif 254 255OPTIONAL_TOOLS="$(SH)" 256 257check-utils: 258 @for %%g in ( $(REQUIRED_TOOLS) ) do @( \ 259 for /f %%f in ( "%%g" ) do @( \ 260 if exist %%f @( \ 261 echo Found %%f \ 262 ) else if "%%~$$PATH:f"=="" @( \ 263 echo Could not find %%f in PATH && \ 264 exit /b 1 \ 265 ) else @( \ 266 echo Found %%~$$PATH:f \ 267 ) \ 268 ) \ 269 ) 270 @for %%g in ( $(OPTIONAL_TOOLS) ) do @( \ 271 for /f %%f in ( "%%g" ) do @( \ 272 if exist %%f @( \ 273 echo Found %%f \ 274 ) else if "%%~$$PATH:f"=="" @( \ 275 echo Could not find %%f in PATH && \ 276 echo Optional targets may fail. \ 277 ) else @( \ 278 echo Found %%~$$PATH:f \ 279 ) \ 280 ) \ 281 ) 282 283 284prep:: check-utils 285 286show-cmds: 287 @$(ECHO) C2OBJ=$(C2OBJ_C:\=\\) 288 @$(ECHO). 289 @$(ECHO) EXECONLINK=$(EXECONLINK_C) 290 @$(ECHO). 291 @$(ECHO) EXEGUILINK=$(EXEGUILINK_C) 292 @$(ECHO). 293 @$(ECHO) DLLCONLINK=$(DLLCONLINK_C) 294 @$(ECHO). 295 @$(ECHO) DLLGUILINK=$(DLLGUILINK_C) 296 @$(ECHO). 297 @$(ECHO) LIBGUI=$(LIBGUI_C) 298 @$(ECHO). 299 @$(ECHO) LIBCON=$(LIBCON_C) 300 301prep:: show-cmds 302 303!endif # RECURSE 304 305{}.c{$(OBJ)}.obj:: 306 $(C2OBJ_C) /Fd$(OBJ)\ /Fo$(OBJ)\ $(localcflags) $(MPOPT) @<< 307$< 308<< 309 310{$(OBJ)}.c{$(OBJ)}.obj:: 311 $(C2OBJ_C) /Fd$(OBJ)\ /Fo$(OBJ)\ $(extcflags) $(MPOPT) @<< 312$< 313<< 314 315{}.cpp{$(OBJ)}.obj:: 316 $(C2OBJ_C) /Fd$(OBJ)\ /Fo$(OBJ)\ $(localcflags) $(MPOPT) @<< 317$< 318<< 319 320{$(OBJ)}.cpp{$(OBJ)}.obj:: 321 $(C2OBJ_C) /Fd$(OBJ)\ /Fo$(OBJ)\ $(extcflags) $(MPOPT) @<< 322$< 323<< 324 325{}.hin{$(INCDIR)}.h: 326 $(CP) $< $@ 327 328{}.h{$(INCDIR)}.h: 329 $(CP) $< $@ 330 331{}.h{$(INCDIR)\krb5}.h: 332 $(CP) $< $@ 333 334{$(OBJ)}.h{$(INCDIR)}.h: 335 $(CP) $< $@ 336 337{$(OBJ)}.x{$(OBJ)}.c: 338 $(CP) $< $@ 339 340{$(OBJ)}.hx{$(INCDIR)}.h: 341 $(CP) $< $@ 342 343{$(OBJ)}.hx{$(OBJ)}.h: 344 $(CP) $< $@ 345 346{}.rc{$(OBJ)}.res: 347 $(RC2RES) 348 349#---------------------------------------------------------------------- 350# Announce the build directory 351 352!ifdef RELDIR 353all:: announce 354 355all-tools:: announce-tools 356 357test:: announce 358 359clean:: announce 360 361announce: 362 @echo. 363 @echo --------- Entering $(RELDIR:\= ): 364 365announce-tools: 366 @echo. 367 @echo --------- Entering $(RELDIR:\= ) tools: 368!endif 369 370#---------------------------------------------------------------------- 371# Create any required directories if they don't already exist 372 373prep:: mkdirs 374 375mkdirs: 376! if !exist("$(OBJ)") 377 -$(MKDIR) "$(OBJ)" 378! endif 379! if !exist("$(DESTDIR)") 380 -$(MKDIR) "$(DESTDIR)" 381! endif 382! if !exist("$(LIBDIR)") 383 -$(MKDIR) "$(LIBDIR)" 384! endif 385! if !exist("$(BINDIR)") 386 -$(MKDIR) "$(BINDIR)" 387! endif 388! if !exist("$(PLUGINDIR)") 389 -$(MKDIR) "$(PLUGINDIR)" 390! endif 391! if !exist("$(INCDIR)") 392 -$(MKDIR) "$(INCDIR)" 393! endif 394! if !exist("$(DOCDIR)") 395 -$(MKDIR) "$(DOCDIR)" 396! endif 397! if !exist("$(INCDIR)\gssapi") 398 -$(MKDIR) "$(INCDIR)\gssapi" 399! endif 400! if !exist("$(INCDIR)\hcrypto") 401 -$(MKDIR) "$(INCDIR)\hcrypto" 402! endif 403! if !exist("$(INCDIR)\kadm5") 404 -$(MKDIR) "$(INCDIR)\kadm5" 405! endif 406! if !exist("$(INCDIR)\krb5") 407 -$(MKDIR) "$(INCDIR)\krb5" 408! endif 409 410#---------------------------------------------------------------------- 411# If SUBDIRS is defined, we should recurse into the subdirectories 412 413!ifdef SUBDIRS 414subdirs: 415 @for %%f in ( $(SUBDIRS) ) do @ (pushd %%f && $(RMAKE) && popd) || exit /b 1 416 417clean-subdirs: 418 @for %%f in ( $(SUBDIRS) ) do @ (pushd %%f && $(RMAKE) clean && popd) || exit /b 1 419 420test-subdirs: 421 @for %%f in ( $(SUBDIRS) ) do @ (pushd %%f && $(RMAKE) test && popd) || exit /b 1 422 423all:: subdirs 424 425clean:: clean-subdirs 426 427test:: test-subdirs 428 429!endif 430 431#---------------------------------------------------------------------- 432# Clean targets 433 434!ifdef CLEANFILES 435clean:: 436 -$(RM) $(CLEANFILES) 437!endif 438!ifdef RELDIR 439clean:: 440 -$(RM) $(OBJ)\*.* 441!endif 442 443.SUFFIXES: .c .cpp .hin .h .x .hx 444 445#---------------------------------------------------------------------- 446# Manifest handling 447# 448# Starting with Visual Studio 8, the C compiler and the linker 449# generate manifests so that the applications will link with the 450# correct side-by-side DLLs at run-time. These are required for 451# correct operation under Windows XP and later. We also have custom 452# manifests which need to be merged with the manifests that VS 453# creates. 454# 455# The syntax for invoking the _VC_MANIFEST_EMBED_FOO macro is: 456# $(_VC_MANIFEST_EMBED_???) <additional manifests> 457# 458 459MT=mt.exe -nologo 460 461_VC_MANIFEST_EMBED_EXE= \ 462( if exist $@.manifest $(MT) -outputresource:$@;1 -manifest $@.manifest $(APPMANIFEST) ) 463 464_VC_MANIFEST_EMBED_EXE_NOHEIM= \ 465( if exist $@.manifest $(MT) -outputresource:$@;1 -manifest $@.manifest ) 466 467_VC_MANIFEST_EMBED_DLL= \ 468( if exist $@.manifest $(MT) -outputresource:$@;2 -manifest $@.manifest ) 469 470_MERGE_MANIFEST_DLL= \ 471( $(MT) -inputresource:$@;2 -manifest $(APPMANIFEST) -outputresource:$@;2 ) 472 473_INSERT_APPMANIFEST_DLL= \ 474( $(MT) -manifest $(APPMANIFEST) -outputresource:$@;2 ) 475 476# Note that if you are merging manifests, then the VS generated 477# manifest should be cleaned up after calling _VC_MANIFEST_EMBED_???. 478# This ensures that even if the DLL or EXE is executed in-place, the 479# embedded manifest will be used. Otherwise the $@.manifest file will 480# be used. 481 482_VC_MANIFEST_CLEAN= \ 483( if exist $@.manifest $(RM) $@.manifest ) 484 485# End of manifest handling 486 487#---------------------------------------------------------------------- 488# Code and assembly signing 489# 490# 491# SIGNTOOL is fullpath to signtool.exe from Windows v8.1 or later SDK 492# (earlier versions do not support SHA-2 signatures) 493# 494# SIGNTOOL_C is any set of options required for certificate/private 495# key selection for code signging. 496# 497# SIGNTOOL_O is any set of additional options to signtool.exe 498# 499# SIGNTOOL_T is the timestamp option 500 501!ifdef CODESIGN 502_CODESIGN=( $(CODESIGN) $@ ) 503_CODESIGN_SHA256=( $(CODESIGN_SHA256) $@ ) 504!else 505 506!ifndef SIGNTOOL 507SIGNTOOL=signtool.exe 508!endif 509 510!ifdef SIGNTOOL_C 511 512!ifndef SIGNTOOL_T 513SIGNTOOL_T=http://timestamp.verisign.com/scripts/timstamp.dll 514!endif 515!ifndef SIGNTOOL_T_SHA256 516SIGNTOOL_T_SHA256=http://sha256timestamp.ws.symantec.com/sha256/timestamp 517!endif 518 519_CODESIGN=( $(SIGNTOOL) sign /fd sha1 $(SIGNTOOL_O) /t $(SIGNTOOL_T) $(SIGNTOOL_C) /v $@ ) 520_CODESIGN_SHA256=( $(SIGNTOOL) sign /as /fd sha256 /td sha256 $(SIGNTOOL_O) /tr $(SIGNTOOL_T_SHA256) $(SIGNTOOL_C) /v $@ ) 521!else 522_CODESIGN=( echo Skipping code sign ) 523_CODESIGN_SHA256=( echo Skipping sha256 code sign ) 524!endif 525 526!endif 527 528#---------------------------------------------------------------------- 529# Symbol Store Support 530# 531# SYMSTORE_EXE is full path to symstore.exe 532# 533# SYMSTORE_ROOT is full path to root directory of symbol store 534# 535# SYMSTORE_COMMENT is optional comment to include in symbol store catalog entry 536# 537 538!IF DEFINED(SYMSTORE_EXE) && DEFINED(SYMSTORE_ROOT) 539!IF "$(SYMSTORE_COMMENT)" != "" 540SYMSTORE_COMMENT = |$(SYMSTORE_COMMENT) 541!ENDIF 542SYMSTORE_IMPORT= \ 543$(SYMSTORE_EXE) add /s $(SYMSTORE_ROOT) /t "Heimdal" /v "$(BUILD)-$(CPU)-$(VER_PACKAGE_VERSION)" /c "$(@F)$(SYMSTORE_COMMENT)" /f $*.* 544!ELSE 545SYMSTORE_IMPORT=@echo No symbol store 546!ENDIF 547 548#---------------------------------------------------------------------- 549# Convenience macros for preparing EXEs and DLLs. These are multiline 550# macros that deal with manifests and code signing. Unless we need to 551# include custom manifests, these are what we should be using to 552# prepare binaries. 553 554EXEPREP=\ 555( $(_VC_MANIFEST_EMBED_EXE) && $(_VC_MANIFEST_CLEAN) && $(SYMSTORE_IMPORT) && $(_CODESIGN) && $(_CODESIGN_SHA256) ) || ( $(RM) $@ && exit /b 1 ) 556 557EXEPREP_NOHEIM=\ 558( $(_VC_MANIFEST_EMBED_EXE_NOHEIM) && $(_VC_MANIFEST_CLEAN) && $(SYMSTORE_IMPORT) && $(_CODESIGN) && $(_CODESIGN_SHA256) ) || ( $(RM) $@ && exit /b 1 ) 559 560EXEPREP_NODIST=\ 561( $(_VC_MANIFEST_EMBED_EXE_NOHEIM) && $(_VC_MANIFEST_CLEAN) && $(SYMSTORE_IMPORT) ) || ( $(RM) $@ && exit /b 1 ) 562 563DLLPREP=\ 564( $(_VC_MANIFEST_EMBED_DLL) && $(_VC_MANIFEST_CLEAN) && $(SYMSTORE_IMPORT) && $(_CODESIGN) && $(_CODESIGN_SHA256) ) || ( $(RM) $@ && exit /b 1 ) 565 566DLLPREP_NODIST=\ 567( $(_VC_MANIFEST_EMBED_DLL) && $(_VC_MANIFEST_CLEAN) && $(SYMSTORE_IMPORT) ) || ( $(RM) $@ && exit /b 1 ) 568 569DLLPREP_MERGE=\ 570( ( $(_MERGE_MANIFEST_DLL) || $(_INSERT_APPMANIFEST_DLL) && $(SYMSTORE_IMPORT) ) && $(_CODESIGN) && $(_CODESIGN_SHA256) ) || ( $(RM) $@ && exit /b 1 ) 571 572#---------------------------------------------------------------------- 573# Convenience macros for import libraries and assemblies 574# 575 576LIBASN1 =$(LIBDIR)\libasn1.lib 577LIBCOMERR =$(LIBDIR)\libcom_err.lib 578LIBEDITLINE =$(LIBDIR)\libeditline.lib 579LIBGSSAPI =$(LIBDIR)\libgssapi.lib 580LIBHCRYPTO =$(LIBDIR)\libhcrypto.lib 581LIBHDB =$(LIBDIR)\libhdb.lib 582LIBHEIMBASE =$(LIBDIR)\libheimbase.lib 583LIBHEIMDAL =$(LIBDIR)\heimdal.lib 584LIBHEIMIPCC =$(LIBDIR)\libheim-ipcc.lib 585LIBHEIMIPCS =$(LIBDIR)\libheim-ipcs.lib 586LIBHEIMNTLM =$(LIBDIR)\libheimntlm.lib 587LIBHX509 =$(LIBDIR)\libhx509.lib 588LIBKADM5CLNT=$(LIBDIR)\libkadm5clnt.lib 589LIBKADM5SRV =$(LIBDIR)\libkadm5srv.lib 590LIBKDC =$(LIBDIR)\libkdc.lib 591LIBLTM =$(LIBDIR)\libltm.lib 592LIBKRB5 =$(LIBDIR)\libkrb5.lib 593LIBRFC3961 =$(LIBDIR)\librfc3961.lib 594LIBROKEN =$(LIBDIR)\libroken.lib 595LIBSL =$(LIBDIR)\libsl.lib 596LIBSQLITE =$(LIBDIR)\libsqlite.lib 597LIBVERS =$(LIBDIR)\libvers.lib 598LIBWIND =$(LIBDIR)\libwind.lib 599 600!ifdef VER_DEBUG 601ASM_DBG=.Debug 602!endif 603!ifdef VER_PRERELEASE 604ASM_PRE=.Pre 605!endif 606!ifdef VER_PRIVATE 607ASM_PVT=.Private 608!endif 609!ifdef VER_SPECIAL 610ASM_SPC=.Special 611!endif 612 613ASMKRBNAME =Heimdal.Kerberos$(ASM_SPC)$(ASM_PVT)$(ASM_PRE)$(ASM_DBG) 614APPMANIFEST =$(INCDIR)\Heimdal.Application.$(MCPU).manifest 615 616