xref: /aosp_15_r20/external/curl/projects/generate.bat (revision 6236dae45794135f37c4eb022389c904c8b0090d)
1*6236dae4SAndroid Build Coastguard Worker@echo off
2*6236dae4SAndroid Build Coastguard Workerrem ***************************************************************************
3*6236dae4SAndroid Build Coastguard Workerrem *                                  _   _ ____  _
4*6236dae4SAndroid Build Coastguard Workerrem *  Project                     ___| | | |  _ \| |
5*6236dae4SAndroid Build Coastguard Workerrem *                             / __| | | | |_) | |
6*6236dae4SAndroid Build Coastguard Workerrem *                            | (__| |_| |  _ <| |___
7*6236dae4SAndroid Build Coastguard Workerrem *                             \___|\___/|_| \_\_____|
8*6236dae4SAndroid Build Coastguard Workerrem *
9*6236dae4SAndroid Build Coastguard Workerrem * Copyright (C) Steve Holme, <[email protected]>.
10*6236dae4SAndroid Build Coastguard Workerrem *
11*6236dae4SAndroid Build Coastguard Workerrem * This software is licensed as described in the file COPYING, which
12*6236dae4SAndroid Build Coastguard Workerrem * you should have received as part of this distribution. The terms
13*6236dae4SAndroid Build Coastguard Workerrem * are also available at https://curl.se/docs/copyright.html.
14*6236dae4SAndroid Build Coastguard Workerrem *
15*6236dae4SAndroid Build Coastguard Workerrem * You may opt to use, copy, modify, merge, publish, distribute and/or sell
16*6236dae4SAndroid Build Coastguard Workerrem * copies of the Software, and permit persons to whom the Software is
17*6236dae4SAndroid Build Coastguard Workerrem * furnished to do so, under the terms of the COPYING file.
18*6236dae4SAndroid Build Coastguard Workerrem *
19*6236dae4SAndroid Build Coastguard Workerrem * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
20*6236dae4SAndroid Build Coastguard Workerrem * KIND, either express or implied.
21*6236dae4SAndroid Build Coastguard Workerrem *
22*6236dae4SAndroid Build Coastguard Workerrem * SPDX-License-Identifier: curl
23*6236dae4SAndroid Build Coastguard Workerrem *
24*6236dae4SAndroid Build Coastguard Workerrem ***************************************************************************
25*6236dae4SAndroid Build Coastguard Worker
26*6236dae4SAndroid Build Coastguard Worker:begin
27*6236dae4SAndroid Build Coastguard Worker  rem Check we are running on a Windows NT derived OS
28*6236dae4SAndroid Build Coastguard Worker  if not "%OS%" == "Windows_NT" goto nodos
29*6236dae4SAndroid Build Coastguard Worker
30*6236dae4SAndroid Build Coastguard Worker  rem Set our variables
31*6236dae4SAndroid Build Coastguard Worker  setlocal ENABLEEXTENSIONS
32*6236dae4SAndroid Build Coastguard Worker  set VERSION=ALL
33*6236dae4SAndroid Build Coastguard Worker  set MODE=GENERATE
34*6236dae4SAndroid Build Coastguard Worker
35*6236dae4SAndroid Build Coastguard Worker  rem Check we are not running on a network drive
36*6236dae4SAndroid Build Coastguard Worker  if "%~d0."=="\\." goto nonetdrv
37*6236dae4SAndroid Build Coastguard Worker
38*6236dae4SAndroid Build Coastguard Worker  rem Switch to this batch file's directory
39*6236dae4SAndroid Build Coastguard Worker  cd /d "%~0\.." 1>NUL 2>&1
40*6236dae4SAndroid Build Coastguard Worker
41*6236dae4SAndroid Build Coastguard Worker  rem Check we are running from a curl git repository
42*6236dae4SAndroid Build Coastguard Worker  if not exist ..\GIT-INFO.md goto norepo
43*6236dae4SAndroid Build Coastguard Worker
44*6236dae4SAndroid Build Coastguard Worker:parseArgs
45*6236dae4SAndroid Build Coastguard Worker  if "%~1" == "" goto start
46*6236dae4SAndroid Build Coastguard Worker
47*6236dae4SAndroid Build Coastguard Worker  if /i "%~1" == "pre" (
48*6236dae4SAndroid Build Coastguard Worker    set VERSION=PRE
49*6236dae4SAndroid Build Coastguard Worker  ) else if /i "%~1" == "vc10" (
50*6236dae4SAndroid Build Coastguard Worker    set VERSION=VC10
51*6236dae4SAndroid Build Coastguard Worker  ) else if /i "%~1" == "vc11" (
52*6236dae4SAndroid Build Coastguard Worker    set VERSION=VC11
53*6236dae4SAndroid Build Coastguard Worker  ) else if /i "%~1" == "vc12" (
54*6236dae4SAndroid Build Coastguard Worker    set VERSION=VC12
55*6236dae4SAndroid Build Coastguard Worker  ) else if /i "%~1" == "-clean" (
56*6236dae4SAndroid Build Coastguard Worker    set MODE=CLEAN
57*6236dae4SAndroid Build Coastguard Worker  ) else if /i "%~1" == "-?" (
58*6236dae4SAndroid Build Coastguard Worker    goto syntax
59*6236dae4SAndroid Build Coastguard Worker  ) else if /i "%~1" == "/?" (
60*6236dae4SAndroid Build Coastguard Worker    goto syntax
61*6236dae4SAndroid Build Coastguard Worker  ) else if /i "%~1" == "-h" (
62*6236dae4SAndroid Build Coastguard Worker    goto syntax
63*6236dae4SAndroid Build Coastguard Worker  ) else if /i "%~1" == "-help" (
64*6236dae4SAndroid Build Coastguard Worker    goto syntax
65*6236dae4SAndroid Build Coastguard Worker  ) else if /i "%~1" == "--help" (
66*6236dae4SAndroid Build Coastguard Worker    goto syntax
67*6236dae4SAndroid Build Coastguard Worker  ) else (
68*6236dae4SAndroid Build Coastguard Worker    goto unknown
69*6236dae4SAndroid Build Coastguard Worker  )
70*6236dae4SAndroid Build Coastguard Worker
71*6236dae4SAndroid Build Coastguard Worker  shift & goto parseArgs
72*6236dae4SAndroid Build Coastguard Worker
73*6236dae4SAndroid Build Coastguard Worker:start
74*6236dae4SAndroid Build Coastguard Worker  if exist ..\buildconf.bat (
75*6236dae4SAndroid Build Coastguard Worker    if "%MODE%" == "GENERATE" (
76*6236dae4SAndroid Build Coastguard Worker      call ..\buildconf
77*6236dae4SAndroid Build Coastguard Worker    ) else if "%VERSION%" == "PRE" (
78*6236dae4SAndroid Build Coastguard Worker      call ..\buildconf -clean
79*6236dae4SAndroid Build Coastguard Worker    ) else if "%VERSION%" == "ALL" (
80*6236dae4SAndroid Build Coastguard Worker      call ..\buildconf -clean
81*6236dae4SAndroid Build Coastguard Worker    )
82*6236dae4SAndroid Build Coastguard Worker  )
83*6236dae4SAndroid Build Coastguard Worker  if "%VERSION%" == "PRE" goto success
84*6236dae4SAndroid Build Coastguard Worker  if "%VERSION%" == "VC10" goto vc10
85*6236dae4SAndroid Build Coastguard Worker  if "%VERSION%" == "VC11" goto vc11
86*6236dae4SAndroid Build Coastguard Worker  if "%VERSION%" == "VC12" goto vc12
87*6236dae4SAndroid Build Coastguard Worker
88*6236dae4SAndroid Build Coastguard Worker:vc10
89*6236dae4SAndroid Build Coastguard Worker  echo.
90*6236dae4SAndroid Build Coastguard Worker
91*6236dae4SAndroid Build Coastguard Worker  if "%MODE%" == "GENERATE" (
92*6236dae4SAndroid Build Coastguard Worker    echo Generating VC10 project files
93*6236dae4SAndroid Build Coastguard Worker    call :generate vcxproj Windows\VC10\src\curl.tmpl Windows\VC10\src\curl.vcxproj
94*6236dae4SAndroid Build Coastguard Worker    call :generate vcxproj Windows\VC10\lib\libcurl.tmpl Windows\VC10\lib\libcurl.vcxproj
95*6236dae4SAndroid Build Coastguard Worker  ) else (
96*6236dae4SAndroid Build Coastguard Worker    echo Removing VC10 project files
97*6236dae4SAndroid Build Coastguard Worker    call :clean Windows\VC10\src\curl.vcxproj
98*6236dae4SAndroid Build Coastguard Worker    call :clean Windows\VC10\lib\libcurl.vcxproj
99*6236dae4SAndroid Build Coastguard Worker  )
100*6236dae4SAndroid Build Coastguard Worker
101*6236dae4SAndroid Build Coastguard Worker  if not "%VERSION%" == "ALL" goto success
102*6236dae4SAndroid Build Coastguard Worker
103*6236dae4SAndroid Build Coastguard Worker:vc11
104*6236dae4SAndroid Build Coastguard Worker  echo.
105*6236dae4SAndroid Build Coastguard Worker
106*6236dae4SAndroid Build Coastguard Worker  if "%MODE%" == "GENERATE" (
107*6236dae4SAndroid Build Coastguard Worker    echo Generating VC11 project files
108*6236dae4SAndroid Build Coastguard Worker    call :generate vcxproj Windows\VC11\src\curl.tmpl Windows\VC11\src\curl.vcxproj
109*6236dae4SAndroid Build Coastguard Worker    call :generate vcxproj Windows\VC11\lib\libcurl.tmpl Windows\VC11\lib\libcurl.vcxproj
110*6236dae4SAndroid Build Coastguard Worker  ) else (
111*6236dae4SAndroid Build Coastguard Worker    echo Removing VC11 project files
112*6236dae4SAndroid Build Coastguard Worker    call :clean Windows\VC11\src\curl.vcxproj
113*6236dae4SAndroid Build Coastguard Worker    call :clean Windows\VC11\lib\libcurl.vcxproj
114*6236dae4SAndroid Build Coastguard Worker  )
115*6236dae4SAndroid Build Coastguard Worker
116*6236dae4SAndroid Build Coastguard Worker  if not "%VERSION%" == "ALL" goto success
117*6236dae4SAndroid Build Coastguard Worker
118*6236dae4SAndroid Build Coastguard Worker:vc12
119*6236dae4SAndroid Build Coastguard Worker  echo.
120*6236dae4SAndroid Build Coastguard Worker
121*6236dae4SAndroid Build Coastguard Worker  if "%MODE%" == "GENERATE" (
122*6236dae4SAndroid Build Coastguard Worker    echo Generating VC12 project files
123*6236dae4SAndroid Build Coastguard Worker    call :generate vcxproj Windows\VC12\src\curl.tmpl Windows\VC12\src\curl.vcxproj
124*6236dae4SAndroid Build Coastguard Worker    call :generate vcxproj Windows\VC12\lib\libcurl.tmpl Windows\VC12\lib\libcurl.vcxproj
125*6236dae4SAndroid Build Coastguard Worker  ) else (
126*6236dae4SAndroid Build Coastguard Worker    echo Removing VC12 project files
127*6236dae4SAndroid Build Coastguard Worker    call :clean Windows\VC12\src\curl.vcxproj
128*6236dae4SAndroid Build Coastguard Worker    call :clean Windows\VC12\lib\libcurl.vcxproj
129*6236dae4SAndroid Build Coastguard Worker  )
130*6236dae4SAndroid Build Coastguard Worker
131*6236dae4SAndroid Build Coastguard Worker  goto success
132*6236dae4SAndroid Build Coastguard Worker
133*6236dae4SAndroid Build Coastguard Workerrem Main generate function.
134*6236dae4SAndroid Build Coastguard Workerrem
135*6236dae4SAndroid Build Coastguard Workerrem %1 - Project Type (vcxproj for VC10, VC11, VC12, VC14, VC14.10, VC14.20 and VC14.30)
136*6236dae4SAndroid Build Coastguard Workerrem %2 - Input template file
137*6236dae4SAndroid Build Coastguard Workerrem %3 - Output project file
138*6236dae4SAndroid Build Coastguard Workerrem
139*6236dae4SAndroid Build Coastguard Worker:generate
140*6236dae4SAndroid Build Coastguard Worker  if not exist %2 (
141*6236dae4SAndroid Build Coastguard Worker    echo.
142*6236dae4SAndroid Build Coastguard Worker    echo Error: Cannot open %2
143*6236dae4SAndroid Build Coastguard Worker    exit /B
144*6236dae4SAndroid Build Coastguard Worker  )
145*6236dae4SAndroid Build Coastguard Worker
146*6236dae4SAndroid Build Coastguard Worker  if exist %3 (
147*6236dae4SAndroid Build Coastguard Worker    del %3
148*6236dae4SAndroid Build Coastguard Worker  )
149*6236dae4SAndroid Build Coastguard Worker
150*6236dae4SAndroid Build Coastguard Worker  echo * %CD%\%3
151*6236dae4SAndroid Build Coastguard Worker  for /f "usebackq delims=" %%i in (`"findstr /n ^^ %2"`) do (
152*6236dae4SAndroid Build Coastguard Worker    set "var=%%i"
153*6236dae4SAndroid Build Coastguard Worker    setlocal enabledelayedexpansion
154*6236dae4SAndroid Build Coastguard Worker    set "var=!var:*:=!"
155*6236dae4SAndroid Build Coastguard Worker
156*6236dae4SAndroid Build Coastguard Worker    if "!var!" == "CURL_SRC_C_FILES" (
157*6236dae4SAndroid Build Coastguard Worker      for /f "delims=" %%c in ('dir /b ..\src\*.c') do call :element %1 src "%%c" %3
158*6236dae4SAndroid Build Coastguard Worker    ) else if "!var!" == "CURL_SRC_H_FILES" (
159*6236dae4SAndroid Build Coastguard Worker      for /f "delims=" %%h in ('dir /b ..\src\*.h') do call :element %1 src "%%h" %3
160*6236dae4SAndroid Build Coastguard Worker    ) else if "!var!" == "CURL_SRC_RC_FILES" (
161*6236dae4SAndroid Build Coastguard Worker      for /f "delims=" %%r in ('dir /b ..\src\*.rc') do call :element %1 src "%%r" %3
162*6236dae4SAndroid Build Coastguard Worker    ) else if "!var!" == "CURL_SRC_X_C_FILES" (
163*6236dae4SAndroid Build Coastguard Worker      call :element %1 lib "strtoofft.c" %3
164*6236dae4SAndroid Build Coastguard Worker      call :element %1 lib "timediff.c" %3
165*6236dae4SAndroid Build Coastguard Worker      call :element %1 lib "nonblock.c" %3
166*6236dae4SAndroid Build Coastguard Worker      call :element %1 lib "warnless.c" %3
167*6236dae4SAndroid Build Coastguard Worker      call :element %1 lib "curl_multibyte.c" %3
168*6236dae4SAndroid Build Coastguard Worker      call :element %1 lib "version_win32.c" %3
169*6236dae4SAndroid Build Coastguard Worker      call :element %1 lib "dynbuf.c" %3
170*6236dae4SAndroid Build Coastguard Worker      call :element %1 lib "base64.c" %3
171*6236dae4SAndroid Build Coastguard Worker    ) else if "!var!" == "CURL_SRC_X_H_FILES" (
172*6236dae4SAndroid Build Coastguard Worker      call :element %1 lib "config-win32.h" %3
173*6236dae4SAndroid Build Coastguard Worker      call :element %1 lib "curl_setup.h" %3
174*6236dae4SAndroid Build Coastguard Worker      call :element %1 lib "strtoofft.h" %3
175*6236dae4SAndroid Build Coastguard Worker      call :element %1 lib "timediff.h" %3
176*6236dae4SAndroid Build Coastguard Worker      call :element %1 lib "nonblock.h" %3
177*6236dae4SAndroid Build Coastguard Worker      call :element %1 lib "warnless.h" %3
178*6236dae4SAndroid Build Coastguard Worker      call :element %1 lib "curl_ctype.h" %3
179*6236dae4SAndroid Build Coastguard Worker      call :element %1 lib "curl_multibyte.h" %3
180*6236dae4SAndroid Build Coastguard Worker      call :element %1 lib "version_win32.h" %3
181*6236dae4SAndroid Build Coastguard Worker      call :element %1 lib "dynbuf.h" %3
182*6236dae4SAndroid Build Coastguard Worker      call :element %1 lib "curl_base64.h" %3
183*6236dae4SAndroid Build Coastguard Worker    ) else if "!var!" == "CURL_LIB_C_FILES" (
184*6236dae4SAndroid Build Coastguard Worker      for /f "delims=" %%c in ('dir /b ..\lib\*.c') do call :element %1 lib "%%c" %3
185*6236dae4SAndroid Build Coastguard Worker    ) else if "!var!" == "CURL_LIB_H_FILES" (
186*6236dae4SAndroid Build Coastguard Worker      for /f "delims=" %%h in ('dir /b ..\include\curl\*.h') do call :element %1 include\curl "%%h" %3
187*6236dae4SAndroid Build Coastguard Worker      for /f "delims=" %%h in ('dir /b ..\lib\*.h') do call :element %1 lib "%%h" %3
188*6236dae4SAndroid Build Coastguard Worker    ) else if "!var!" == "CURL_LIB_RC_FILES" (
189*6236dae4SAndroid Build Coastguard Worker      for /f "delims=" %%r in ('dir /b ..\lib\*.rc') do call :element %1 lib "%%r" %3
190*6236dae4SAndroid Build Coastguard Worker    ) else if "!var!" == "CURL_LIB_VAUTH_C_FILES" (
191*6236dae4SAndroid Build Coastguard Worker      for /f "delims=" %%c in ('dir /b ..\lib\vauth\*.c') do call :element %1 lib\vauth "%%c" %3
192*6236dae4SAndroid Build Coastguard Worker    ) else if "!var!" == "CURL_LIB_VAUTH_H_FILES" (
193*6236dae4SAndroid Build Coastguard Worker      for /f "delims=" %%h in ('dir /b ..\lib\vauth\*.h') do call :element %1 lib\vauth "%%h" %3
194*6236dae4SAndroid Build Coastguard Worker    ) else if "!var!" == "CURL_LIB_VQUIC_C_FILES" (
195*6236dae4SAndroid Build Coastguard Worker      for /f "delims=" %%c in ('dir /b ..\lib\vquic\*.c') do call :element %1 lib\vquic "%%c" %3
196*6236dae4SAndroid Build Coastguard Worker    ) else if "!var!" == "CURL_LIB_VQUIC_H_FILES" (
197*6236dae4SAndroid Build Coastguard Worker      for /f "delims=" %%h in ('dir /b ..\lib\vquic\*.h') do call :element %1 lib\vquic "%%h" %3
198*6236dae4SAndroid Build Coastguard Worker    ) else if "!var!" == "CURL_LIB_VSSH_C_FILES" (
199*6236dae4SAndroid Build Coastguard Worker      for /f "delims=" %%c in ('dir /b ..\lib\vssh\*.c') do call :element %1 lib\vssh "%%c" %3
200*6236dae4SAndroid Build Coastguard Worker    ) else if "!var!" == "CURL_LIB_VSSH_H_FILES" (
201*6236dae4SAndroid Build Coastguard Worker      for /f "delims=" %%h in ('dir /b ..\lib\vssh\*.h') do call :element %1 lib\vssh "%%h" %3
202*6236dae4SAndroid Build Coastguard Worker    ) else if "!var!" == "CURL_LIB_VTLS_C_FILES" (
203*6236dae4SAndroid Build Coastguard Worker      for /f "delims=" %%c in ('dir /b ..\lib\vtls\*.c') do call :element %1 lib\vtls "%%c" %3
204*6236dae4SAndroid Build Coastguard Worker    ) else if "!var!" == "CURL_LIB_VTLS_H_FILES" (
205*6236dae4SAndroid Build Coastguard Worker      for /f "delims=" %%h in ('dir /b ..\lib\vtls\*.h') do call :element %1 lib\vtls "%%h" %3
206*6236dae4SAndroid Build Coastguard Worker    ) else (
207*6236dae4SAndroid Build Coastguard Worker      echo.!var!>> %3
208*6236dae4SAndroid Build Coastguard Worker    )
209*6236dae4SAndroid Build Coastguard Worker
210*6236dae4SAndroid Build Coastguard Worker    endlocal
211*6236dae4SAndroid Build Coastguard Worker  )
212*6236dae4SAndroid Build Coastguard Worker  exit /B
213*6236dae4SAndroid Build Coastguard Worker
214*6236dae4SAndroid Build Coastguard Workerrem Generates a single file xml element.
215*6236dae4SAndroid Build Coastguard Workerrem
216*6236dae4SAndroid Build Coastguard Workerrem %1 - Project Type (vcxproj for VC10, VC11, VC12, VC14, VC14.10, VC14.20 and VC14.30)
217*6236dae4SAndroid Build Coastguard Workerrem %2 - Directory (src, lib, lib\vauth, lib\vquic, lib\vssh, lib\vtls)
218*6236dae4SAndroid Build Coastguard Workerrem %3 - Source filename
219*6236dae4SAndroid Build Coastguard Workerrem %4 - Output project file
220*6236dae4SAndroid Build Coastguard Workerrem
221*6236dae4SAndroid Build Coastguard Worker:element
222*6236dae4SAndroid Build Coastguard Worker  set "SPACES=    "
223*6236dae4SAndroid Build Coastguard Worker  if "%2" == "lib\vauth" (
224*6236dae4SAndroid Build Coastguard Worker    set "TABS=				"
225*6236dae4SAndroid Build Coastguard Worker  ) else if "%2" == "lib\vquic" (
226*6236dae4SAndroid Build Coastguard Worker    set "TABS=				"
227*6236dae4SAndroid Build Coastguard Worker  ) else if "%2" == "lib\vssh" (
228*6236dae4SAndroid Build Coastguard Worker    set "TABS=				"
229*6236dae4SAndroid Build Coastguard Worker  ) else if "%2" == "lib\vtls" (
230*6236dae4SAndroid Build Coastguard Worker    set "TABS=				"
231*6236dae4SAndroid Build Coastguard Worker  ) else (
232*6236dae4SAndroid Build Coastguard Worker    set "TABS=			"
233*6236dae4SAndroid Build Coastguard Worker  )
234*6236dae4SAndroid Build Coastguard Worker
235*6236dae4SAndroid Build Coastguard Worker  call :extension %3 ext
236*6236dae4SAndroid Build Coastguard Worker
237*6236dae4SAndroid Build Coastguard Worker  if "%1" == "dsp" (
238*6236dae4SAndroid Build Coastguard Worker    echo # Begin Source File>> %4
239*6236dae4SAndroid Build Coastguard Worker    echo.>> %4
240*6236dae4SAndroid Build Coastguard Worker    echo SOURCE=..\..\..\..\%2\%~3>> %4
241*6236dae4SAndroid Build Coastguard Worker    echo # End Source File>> %4
242*6236dae4SAndroid Build Coastguard Worker  ) else if "%1" == "vcproj1" (
243*6236dae4SAndroid Build Coastguard Worker    echo %TABS%^<File>> %4
244*6236dae4SAndroid Build Coastguard Worker    echo %TABS%	RelativePath="..\..\..\..\%2\%~3"^>>> %4
245*6236dae4SAndroid Build Coastguard Worker    echo %TABS%^</File^>>> %4
246*6236dae4SAndroid Build Coastguard Worker  ) else if "%1" == "vcproj2" (
247*6236dae4SAndroid Build Coastguard Worker    echo %TABS%^<File>> %4
248*6236dae4SAndroid Build Coastguard Worker    echo %TABS%	RelativePath="..\..\..\..\%2\%~3">> %4
249*6236dae4SAndroid Build Coastguard Worker    echo %TABS%^>>> %4
250*6236dae4SAndroid Build Coastguard Worker    echo %TABS%^</File^>>> %4
251*6236dae4SAndroid Build Coastguard Worker  ) else if "%1" == "vcxproj" (
252*6236dae4SAndroid Build Coastguard Worker    if "%ext%" == "c" (
253*6236dae4SAndroid Build Coastguard Worker      echo %SPACES%^<ClCompile Include=^"..\..\..\..\%2\%~3^" /^>>> %4
254*6236dae4SAndroid Build Coastguard Worker    ) else if "%ext%" == "h" (
255*6236dae4SAndroid Build Coastguard Worker      echo %SPACES%^<ClInclude Include=^"..\..\..\..\%2\%~3^" /^>>> %4
256*6236dae4SAndroid Build Coastguard Worker    ) else if "%ext%" == "rc" (
257*6236dae4SAndroid Build Coastguard Worker      echo %SPACES%^<ResourceCompile Include=^"..\..\..\..\%2\%~3^" /^>>> %4
258*6236dae4SAndroid Build Coastguard Worker    )
259*6236dae4SAndroid Build Coastguard Worker  )
260*6236dae4SAndroid Build Coastguard Worker
261*6236dae4SAndroid Build Coastguard Worker  exit /B
262*6236dae4SAndroid Build Coastguard Worker
263*6236dae4SAndroid Build Coastguard Workerrem Returns the extension for a given filename.
264*6236dae4SAndroid Build Coastguard Workerrem
265*6236dae4SAndroid Build Coastguard Workerrem %1 - The filename
266*6236dae4SAndroid Build Coastguard Workerrem %2 - The return value
267*6236dae4SAndroid Build Coastguard Workerrem
268*6236dae4SAndroid Build Coastguard Worker:extension
269*6236dae4SAndroid Build Coastguard Worker  set fname=%~1
270*6236dae4SAndroid Build Coastguard Worker  set ename=
271*6236dae4SAndroid Build Coastguard Worker:loop1
272*6236dae4SAndroid Build Coastguard Worker  if "%fname%"=="" (
273*6236dae4SAndroid Build Coastguard Worker    set %2=
274*6236dae4SAndroid Build Coastguard Worker    exit /B
275*6236dae4SAndroid Build Coastguard Worker  )
276*6236dae4SAndroid Build Coastguard Worker
277*6236dae4SAndroid Build Coastguard Worker  if not "%fname:~-1%"=="." (
278*6236dae4SAndroid Build Coastguard Worker    set ename=%fname:~-1%%ename%
279*6236dae4SAndroid Build Coastguard Worker    set fname=%fname:~0,-1%
280*6236dae4SAndroid Build Coastguard Worker    goto loop1
281*6236dae4SAndroid Build Coastguard Worker  )
282*6236dae4SAndroid Build Coastguard Worker
283*6236dae4SAndroid Build Coastguard Worker  set %2=%ename%
284*6236dae4SAndroid Build Coastguard Worker  exit /B
285*6236dae4SAndroid Build Coastguard Worker
286*6236dae4SAndroid Build Coastguard Workerrem Removes the given project file.
287*6236dae4SAndroid Build Coastguard Workerrem
288*6236dae4SAndroid Build Coastguard Workerrem %1 - The filename
289*6236dae4SAndroid Build Coastguard Workerrem
290*6236dae4SAndroid Build Coastguard Worker:clean
291*6236dae4SAndroid Build Coastguard Worker  echo * %CD%\%1
292*6236dae4SAndroid Build Coastguard Worker
293*6236dae4SAndroid Build Coastguard Worker  if exist %1 (
294*6236dae4SAndroid Build Coastguard Worker    del %1
295*6236dae4SAndroid Build Coastguard Worker  )
296*6236dae4SAndroid Build Coastguard Worker
297*6236dae4SAndroid Build Coastguard Worker  exit /B
298*6236dae4SAndroid Build Coastguard Worker
299*6236dae4SAndroid Build Coastguard Worker:syntax
300*6236dae4SAndroid Build Coastguard Worker  rem Display the help
301*6236dae4SAndroid Build Coastguard Worker  echo.
302*6236dae4SAndroid Build Coastguard Worker  echo Usage: generate [what] [-clean]
303*6236dae4SAndroid Build Coastguard Worker  echo.
304*6236dae4SAndroid Build Coastguard Worker  echo What to generate:
305*6236dae4SAndroid Build Coastguard Worker  echo.
306*6236dae4SAndroid Build Coastguard Worker  echo pre       - Prerequisites only
307*6236dae4SAndroid Build Coastguard Worker  echo vc10      - Use Visual Studio 2010
308*6236dae4SAndroid Build Coastguard Worker  echo vc11      - Use Visual Studio 2012
309*6236dae4SAndroid Build Coastguard Worker  echo vc12      - Use Visual Studio 2013
310*6236dae4SAndroid Build Coastguard Worker  echo.
311*6236dae4SAndroid Build Coastguard Worker  echo Only legacy Visual Studio project files can be generated.
312*6236dae4SAndroid Build Coastguard Worker  echo.
313*6236dae4SAndroid Build Coastguard Worker  echo To generate recent versions of Visual Studio project files use cmake.
314*6236dae4SAndroid Build Coastguard Worker  echo Refer to INSTALL-CMAKE in the docs directory.
315*6236dae4SAndroid Build Coastguard Worker  echo.
316*6236dae4SAndroid Build Coastguard Worker  echo -clean    - Removes the project files
317*6236dae4SAndroid Build Coastguard Worker  goto error
318*6236dae4SAndroid Build Coastguard Worker
319*6236dae4SAndroid Build Coastguard Worker:unknown
320*6236dae4SAndroid Build Coastguard Worker  echo.
321*6236dae4SAndroid Build Coastguard Worker  echo Error: Unknown argument '%1'
322*6236dae4SAndroid Build Coastguard Worker  goto error
323*6236dae4SAndroid Build Coastguard Worker
324*6236dae4SAndroid Build Coastguard Worker:nodos
325*6236dae4SAndroid Build Coastguard Worker  echo.
326*6236dae4SAndroid Build Coastguard Worker  echo Error: Only a Windows NT based Operating System is supported
327*6236dae4SAndroid Build Coastguard Worker  goto error
328*6236dae4SAndroid Build Coastguard Worker
329*6236dae4SAndroid Build Coastguard Worker:nonetdrv
330*6236dae4SAndroid Build Coastguard Worker  echo.
331*6236dae4SAndroid Build Coastguard Worker  echo Error: This batch file cannot run from a network drive
332*6236dae4SAndroid Build Coastguard Worker  goto error
333*6236dae4SAndroid Build Coastguard Worker
334*6236dae4SAndroid Build Coastguard Worker:norepo
335*6236dae4SAndroid Build Coastguard Worker  echo.
336*6236dae4SAndroid Build Coastguard Worker  echo Error: This batch file should only be used from a curl git repository
337*6236dae4SAndroid Build Coastguard Worker  goto error
338*6236dae4SAndroid Build Coastguard Worker
339*6236dae4SAndroid Build Coastguard Worker:seterr
340*6236dae4SAndroid Build Coastguard Worker  rem Set the caller's errorlevel.
341*6236dae4SAndroid Build Coastguard Worker  rem %1[opt]: Errorlevel as integer.
342*6236dae4SAndroid Build Coastguard Worker  rem If %1 is empty the errorlevel will be set to 0.
343*6236dae4SAndroid Build Coastguard Worker  rem If %1 is not empty and not an integer the errorlevel will be set to 1.
344*6236dae4SAndroid Build Coastguard Worker  setlocal
345*6236dae4SAndroid Build Coastguard Worker  set EXITCODE=%~1
346*6236dae4SAndroid Build Coastguard Worker  if not defined EXITCODE set EXITCODE=0
347*6236dae4SAndroid Build Coastguard Worker  echo %EXITCODE%|findstr /r "[^0-9\-]" 1>NUL 2>&1
348*6236dae4SAndroid Build Coastguard Worker  if %ERRORLEVEL% EQU 0 set EXITCODE=1
349*6236dae4SAndroid Build Coastguard Worker  exit /b %EXITCODE%
350*6236dae4SAndroid Build Coastguard Worker
351*6236dae4SAndroid Build Coastguard Worker:error
352*6236dae4SAndroid Build Coastguard Worker  if "%OS%" == "Windows_NT" endlocal
353*6236dae4SAndroid Build Coastguard Worker  exit /B 1
354*6236dae4SAndroid Build Coastguard Worker
355*6236dae4SAndroid Build Coastguard Worker:success
356*6236dae4SAndroid Build Coastguard Worker  endlocal
357*6236dae4SAndroid Build Coastguard Worker  exit /B 0
358