1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
|
@if not "%verboseBuild%"=="y" echo off
rem Shave and a Haircut
rem (c) 2019 Epic Games
rem US Patent 6720962
rem Arg 1 is 'vs10', 'vs11', 'vs14', etc
rem Arg 2 is 'release' or 'debug'
rem Arg 3 is '32' or '64'
rem Args 4 through 9 are passed directly to the nmake command.
setlocal
set scriptName=do-nmake
set usage=n
rem Get the Visual Studio version.
rem
rem Note that we cannot use the newer if / else statements here because we
rem are dealing with pathnames which may have parentheses in them which
rem make Miscrosoft's bug-ridden command parser barf.
if /i not "%1"=="vs7" goto elseif1
set vsVersion=vs7
set varName=VS71COMNTOOLS
set commonToolsDir=%VS71COMNTOOLS%
set vcDir=%VS71COMNTOOLS:~0,-14%Vc7
set dllDir=%VS71COMNTOOLS:~0,-6%IDE
goto endif1
:elseif1
if /i not "%1"=="vs8" goto elseif2
set vsVersion=vs8
set varName=VS80COMNTOOLS
set commonToolsDir=%VS80COMNTOOLS%
set vcDir=%VS80COMNTOOLS:~0,-14%VC
set dllDir=%VS80COMNTOOLS:~0,-6%IDE
goto endif1
:elseif2
if /i not "%1"=="vs10" goto elseif3
set vsVersion=vs10
set varName=VS100COMNTOOLS
set commonToolsDir=%VS100COMNTOOLS%
set vcDir=%VS100COMNTOOLS:~0,-14%VC
set dllDir=%VS100COMNTOOLS:~0,-6%IDE
goto endif1
:elseif3
if /i not "%1"=="vs11" goto elseif4
set vsVersion=vs11
set varName=VS110COMNTOOLS
set commonToolsDir=%VS110COMNTOOLS%
set vcDir=%VS110COMNTOOLS:~0,-14%VC
set dllDir=%VS110COMNTOOLS:~0,-6%IDE
goto endif1
:elseif4
if /i not "%1"=="vs14" goto else1
set vsVersion=vs14
set varName=VS140COMNTOOLS
set commonToolsDir=%VS140COMNTOOLS%
set vcDir=%VS140COMNTOOLS:~0,-14%VC
set dllDir=%VS140COMNTOOLS:~0,-6%IDE
goto endif1
:else1
if "%1"=="" (
set usage=y
) else (
echo %scriptName%: Error: Visual Studio version '%1' not supported. Must be 'vs7', 'vs8', 'vs10', 'vs11' or 'vs14'.
goto error
)
:endif1
rem Get the build flavour.
if /i "%2"=="release" (
set flavour=release
) else if /i "%2"=="debug" (
set flavour=debug
) else (
if "%2"=="" (
set usage=y
) else (
echo %scriptName%: Error: Build flavour '%2' not recognized. Must be 'release' or 'debug'.
goto error
)
)
if "%3"=="32" (
set setupScript=vcvars32.bat
) else if "%3"=="64" (
if "%vsVersion%"=="vs7" (
echo %scriptName%: Error: Visual Studio 7 does not support 64-bit builds
goto error
)
set setupScript=x86_amd64\vcvarsx86_amd64.bat
) else if "%3"=="" (
set usage=y
) else (
echo %scriptName%: Error: target platform bit size '%3' is invalid
goto error
)
if "%usage%"=="y" (
echo %scriptName%: Error: Usage is: %scriptName% vs11/vs14 release/debug 64 [nmake arguments]
goto error
)
set binDir=%vcDir%\Bin
set incDir=%vcDir%\Include;%vcDir%\PlatformSDK\Include
set libDir=%vcDir%\Lib;%vcDir%\PlatformSDK\Lib
set buildDir=%flavour%-%vsVersion%
if exist "%commonToolsDir%" goto endif2
echo %scriptName%: Error: %varName% does not point to the Visual Studio Common Tools directory
goto error
:endif2
if exist "%binDir%\nmake.exe" goto endif3
echo %scriptName%: Error: cannot find NMAKE.EXE in '%binDir%'.
goto error
:endif3
if exist "%binDir%\%setupScript%" goto endif4
echo %scriptName%: Error: could not find %vsVersion% setup script '%binDir%\%setupScript%'
goto error
:endif4
call "%binDir%\%setupScript%" >NUL 2>&1
echo on
nmake FLAVOUR=%flavour% VSVERSION=%vsVersion% %4 %5 %6 %7 %8 %9 >do-nmake.log 2>&1
@if not "%verboseBuild%"=="y" echo off
if errorlevel 1 (
type do-nmake.log
goto error
)
if "%verboseBuild%"=="y" type do-nmake.log
endlocal
set result=0
goto done
:error
endlocal
set result=1
:done
if exist do-nmake.log del do-nmake.log
|