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