1@echo off
2rem ***************************************************************************
3rem *                                  _   _ ____  _
4rem *  Project                     ___| | | |  _ \| |
5rem *                             / __| | | | |_) | |
6rem *                            | (__| |_| |  _ <| |___
7rem *                             \___|\___/|_| \_\_____|
8rem *
9rem * Copyright (C) 2014 - 2020, Steve Holme, <steve_holme@hotmail.com>.
10rem *
11rem * This software is licensed as described in the file COPYING, which
12rem * you should have received as part of this distribution. The terms
13rem * are also available at https://curl.se/docs/copyright.html.
14rem *
15rem * You may opt to use, copy, modify, merge, publish, distribute and/or sell
16rem * copies of the Software, and permit persons to whom the Software is
17rem * furnished to do so, under the terms of the COPYING file.
18rem *
19rem * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
20rem * KIND, either express or implied.
21rem *
22rem ***************************************************************************
23
24:begin
25  rem Check we are running on a Windows NT derived OS
26  if not "%OS%" == "Windows_NT" goto nodos
27
28  rem Set our variables
29  setlocal
30  set CHECK_LIB=TRUE
31  set CHECK_SRC=TRUE
32  set CHECK_TESTS=TRUE
33  set CHECK_EXAMPLES=TRUE
34  set SRC_DIR=
35  set CUR_DIR=%cd%
36  set ARG0_DIR=%~dp0
37
38:parseArgs
39  if "%~1" == "" goto prerequisites
40
41  if /i "%~1" == "-?" (
42    goto syntax
43  ) else if /i "%~1" == "-h" (
44    goto syntax
45  ) else if /i "%~1" == "-help" (
46    goto syntax
47  ) else if /i "%~1" == "lib" (
48    set CHECK_LIB=TRUE
49    set CHECK_SRC=FALSE
50    set CHECK_TESTS=FALSE
51    set CHECK_EXAMPLES=FALSE
52  ) else if /i "%~1" == "src" (
53    set CHECK_LIB=FALSE
54    set CHECK_SRC=TRUE
55    set CHECK_TESTS=FALSE
56    set CHECK_EXAMPLES=FALSE
57  ) else if /i "%~1" == "tests" (
58    set CHECK_LIB=FALSE
59    set CHECK_SRC=FALSE
60    set CHECK_TESTS=TRUE
61    set CHECK_EXAMPLES=FALSE
62  ) else if /i "%~1" == "examples" (
63    set CHECK_LIB=FALSE
64    set CHECK_SRC=FALSE
65    set CHECK_TESTS=FALSE
66    set CHECK_EXAMPLES=TRUE
67  ) else (
68    if not defined SRC_DIR (
69      set SRC_DIR=%~1%
70    ) else (
71      goto unknown
72    )
73  )
74
75  shift & goto parseArgs
76
77:prerequisites
78  rem Check we have Perl in our path
79  perl --version <NUL 1>NUL 2>&1
80  if errorlevel 1 (
81    rem It isn't so check we have it installed and set the path if it is
82    if exist "%SystemDrive%\Perl" (
83      set "PATH=%SystemDrive%\Perl\bin;%PATH%"
84    ) else (
85      if exist "%SystemDrive%\Perl64" (
86        set "PATH=%SystemDrive%\Perl64\bin;%PATH%"
87      ) else (
88        goto noperl
89      )
90    )
91  )
92
93:configure
94  if "%SRC_DIR%" == "" (
95    rem Are we being executed from the "projects" or main directory?
96    if "%CUR_DIR%\" == "%ARG0_DIR%" (
97      set SRC_DIR=..
98    ) else if exist projects (
99      if exist docs (
100        if exist lib (
101          if exist src (
102            if exist tests (
103              set SRC_DIR=.
104            )
105          )
106        )
107      )
108    )
109  )
110  if not exist "%SRC_DIR%" goto nosrc
111
112:start
113  if "%CHECK_SRC%" == "TRUE" (
114    rem Check the src directory
115    if exist %SRC_DIR%\src (
116      for /f "delims=" %%i in ('dir "%SRC_DIR%\src\*.c.*" /b 2^>NUL') do @perl "%SRC_DIR%\lib\checksrc.pl" "-D%SRC_DIR%\src" -Wtool_hugehelp.c "%%i"
117      for /f "delims=" %%i in ('dir "%SRC_DIR%\src\*.h.*" /b 2^>NUL') do @perl "%SRC_DIR%\lib\checksrc.pl" "-D%SRC_DIR%\src" "%%i"
118    )
119  )
120
121  if "%CHECK_LIB%" == "TRUE" (
122    rem Check the lib directory
123    if exist %SRC_DIR%\lib (
124      for /f "delims=" %%i in ('dir "%SRC_DIR%\lib\*.c.*" /b 2^>NUL') do @perl "%SRC_DIR%\lib\checksrc.pl" "-D%SRC_DIR%\lib" "%%i"
125      for /f "delims=" %%i in ('dir "%SRC_DIR%\lib\*.h.*" /b 2^>NUL') do @perl "%SRC_DIR%\lib\checksrc.pl" "-D%SRC_DIR%\lib" -Wcurl_config.h.cmake -Wcurl_config.h.in -Wcurl_config.h "%%i"
126    )
127
128    rem Check the lib\vauth directory
129    if exist %SRC_DIR%\lib\vauth (
130      for /f "delims=" %%i in ('dir "%SRC_DIR%\lib\vauth\*.c.*" /b 2^>NUL') do @perl "%SRC_DIR%\lib\checksrc.pl" "-D%SRC_DIR%\lib\vauth" "%%i"
131      for /f "delims=" %%i in ('dir "%SRC_DIR%\lib\vauth\*.h.*" /b 2^>NUL') do @perl "%SRC_DIR%\lib\checksrc.pl" "-D%SRC_DIR%\lib\vauth" "%%i"
132    )
133
134    rem Check the lib\vquic directory
135    if exist %SRC_DIR%\lib\vquic (
136      for /f "delims=" %%i in ('dir "%SRC_DIR%\lib\vquic\*.c.*" /b 2^>NUL') do @perl "%SRC_DIR%\lib\checksrc.pl" "-D%SRC_DIR%\lib\vquic" "%%i"
137      for /f "delims=" %%i in ('dir "%SRC_DIR%\lib\vquic\*.h.*" /b 2^>NUL') do @perl "%SRC_DIR%\lib\checksrc.pl" "-D%SRC_DIR%\lib\vquic" "%%i"
138    )
139
140    rem Check the lib\vssh directory
141    if exist %SRC_DIR%\lib\vssh (
142      for /f "delims=" %%i in ('dir "%SRC_DIR%\lib\vssh\*.c.*" /b 2^>NUL') do @perl "%SRC_DIR%\lib\checksrc.pl" "-D%SRC_DIR%\lib\vssh" "%%i"
143      for /f "delims=" %%i in ('dir "%SRC_DIR%\lib\vssh\*.h.*" /b 2^>NUL') do @perl "%SRC_DIR%\lib\checksrc.pl" "-D%SRC_DIR%\lib\vssh" "%%i"
144    )
145
146    rem Check the lib\vtls directory
147    if exist %SRC_DIR%\lib\vtls (
148      for /f "delims=" %%i in ('dir "%SRC_DIR%\lib\vtls\*.c.*" /b 2^>NUL') do @perl "%SRC_DIR%\lib\checksrc.pl" "-D%SRC_DIR%\lib\vtls" "%%i"
149      for /f "delims=" %%i in ('dir "%SRC_DIR%\lib\vtls\*.h.*" /b 2^>NUL') do @perl "%SRC_DIR%\lib\checksrc.pl" "-D%SRC_DIR%\lib\vtls" "%%i"
150    )
151  )
152
153  if "%CHECK_TESTS%" == "TRUE" (
154    rem Check the tests\libtest directory
155    if exist %SRC_DIR%\tests\libtest (
156      for /f "delims=" %%i in ('dir "%SRC_DIR%\tests\libtest\*.c.*" /b 2^>NUL') do @perl "%SRC_DIR%\lib\checksrc.pl" "-D%SRC_DIR%\tests\libtest" "%%i"
157      for /f "delims=" %%i in ('dir "%SRC_DIR%\tests\libtest\*.h.*" /b 2^>NUL') do @perl "%SRC_DIR%\lib\checksrc.pl" "-D%SRC_DIR%\tests\libtest" "%%i"
158    )
159
160    rem Check the tests\unit directory
161    if exist %SRC_DIR%\tests\unit (
162      for /f "delims=" %%i in ('dir "%SRC_DIR%\tests\unit\*.c.*" /b 2^>NUL') do @perl "%SRC_DIR%\lib\checksrc.pl" "-D%SRC_DIR%\tests\unit" "%%i"
163      for /f "delims=" %%i in ('dir "%SRC_DIR%\tests\unit\*.h.*" /b 2^>NUL') do @perl "%SRC_DIR%\lib\checksrc.pl" "-D%SRC_DIR%\tests\unit" "%%i"
164    )
165
166    rem Check the tests\server directory
167    if exist %SRC_DIR%\tests\server (
168      for /f "delims=" %%i in ('dir "%SRC_DIR%\tests\server\*.c.*" /b 2^>NUL') do @perl "%SRC_DIR%\lib\checksrc.pl" "-D%SRC_DIR%\tests\server" "%%i"
169      for /f "delims=" %%i in ('dir "%SRC_DIR%\tests\server\*.h.*" /b 2^>NUL') do @perl "%SRC_DIR%\lib\checksrc.pl" "-D%SRC_DIR%\tests\server" "%%i"
170    )
171  )
172
173  if "%CHECK_EXAMPLES%" == "TRUE" (
174    rem Check the docs\examples directory
175    if exist %SRC_DIR%\docs\examples (
176      for /f "delims=" %%i in ('dir "%SRC_DIR%\docs\examples\*.c.*" /b 2^>NUL') do @perl "%SRC_DIR%\lib\checksrc.pl" "-D%SRC_DIR%\docs\examples" -ASNPRINTF "%%i"
177    )
178  )
179
180  goto success
181
182:syntax
183  rem Display the help
184  echo.
185  echo Usage: checksrc [what] [directory]
186  echo.
187  echo What to scan:
188  echo.
189  echo lib       - Scan the libcurl source
190  echo src       - Scan the command-line tool source
191  echo tests     - Scan the library tests and unit tests
192  echo examples  - Scan the examples
193  echo.
194  echo directory - Specifies the curl source directory
195  goto success
196
197:unknown
198  echo.
199  echo Error: Unknown argument '%1'
200  goto error
201
202:nodos
203  echo.
204  echo Error: Only a Windows NT based Operating System is supported
205  goto error
206
207:noperl
208  echo.
209  echo Error: Perl is not installed
210  goto error
211
212:nosrc
213  echo.
214  echo Error: "%SRC_DIR%" does not exist
215  goto error
216
217:error
218  if "%OS%" == "Windows_NT" endlocal
219  exit /B 1
220
221:success
222  endlocal
223  exit /B 0
224