aboutsummaryrefslogtreecommitdiff
path: root/utils/do-nmake.bat
blob: 84237424e43bb4f17052ed06d79fbcdf2c317976 (plain) (blame)
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