1@echo off
2rem ***************************************************************************
3rem *                                  _   _ ____  _
4rem *  Project                     ___| | | |  _ \| |
5rem *                             / __| | | | |_) | |
6rem *                            | (__| |_| |  _ <| |___
7rem *                             \___|\___/|_| \_\_____|
8rem *
9rem * Copyright (C) 2014 - 2016, 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.haxx.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
35:parseArgs
36  if "%~1" == "" goto prerequisites
37
38  if /i "%~1" == "-?" (
39    goto syntax
40  ) else if /i "%~1" == "-h" (
41    goto syntax
42  ) else if /i "%~1" == "-help" (
43    goto syntax
44  ) else if /i "%~1" == "lib" (
45    set CHECK_LIB=TRUE
46    set CHECK_SRC=FALSE
47    set CHECK_TESTS=FALSE
48    set CHECK_EXAMPLES=FALSE
49  ) else if /i "%~1" == "src" (
50    set CHECK_LIB=FALSE
51    set CHECK_SRC=TRUE
52    set CHECK_TESTS=FALSE
53    set CHECK_EXAMPLES=FALSE
54  ) else if /i "%~1" == "tests" (
55    set CHECK_LIB=FALSE
56    set CHECK_SRC=FALSE
57    set CHECK_TESTS=TRUE
58    set CHECK_EXAMPLES=FALSE
59  ) else if /i "%~1" == "examples" (
60    set CHECK_LIB=FALSE
61    set CHECK_SRC=FALSE
62    set CHECK_TESTS=FALSE
63    set CHECK_EXAMPLES=TRUE
64  ) else (
65    if not defined SRC_DIR (
66      set SRC_DIR=%~1%
67    ) else (
68      goto unknown
69    )
70  )
71
72  shift & goto parseArgs
73
74:prerequisites
75  rem Check we have Perl in our path
76  echo %PATH% | findstr /I /C:"\Perl" 1>nul
77  if errorlevel 1 (
78    rem It isn't so check we have it installed and set the path if it is
79    if exist "%SystemDrive%\Perl" (
80      set "PATH=%SystemDrive%\Perl\bin;%PATH%"
81    ) else (
82      if exist "%SystemDrive%\Perl64" (
83        set "PATH=%SystemDrive%\Perl64\bin;%PATH%"
84      ) else (
85        goto noperl
86      )
87    )
88  )
89
90:configure
91  if "%SRC_DIR%" == "" set SRC_DIR=..
92  if not exist "%SRC_DIR%" goto nosrc
93
94:start
95  if "%CHECK_SRC%" == "TRUE" (
96    rem Check the src directory
97    if exist %SRC_DIR%\src (
98      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"
99      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"
100    )
101  )
102
103  if "%CHECK_LIB%" == "TRUE" (
104    rem Check the lib directory
105    if exist %SRC_DIR%\lib (
106      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"
107      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 "%%i"
108    )
109
110    rem Check the lib\vauth directory
111    if exist %SRC_DIR%\lib\vauth (
112      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"
113      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"
114    )
115
116    rem Check the lib\vtls directory
117    if exist %SRC_DIR%\lib\vtls (
118      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"
119      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"
120    )
121  )
122
123  if "%CHECK_TESTS%" == "TRUE" (
124    rem Check the tests\libtest directory
125    if exist %SRC_DIR%\tests\libtest (
126      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"
127      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"
128    )
129
130    rem Check the tests\unit directory
131    if exist %SRC_DIR%\tests\unit (
132      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"
133      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"
134    )
135
136    rem Check the tests\server directory
137    if exist %SRC_DIR%\tests\server (
138      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"
139      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"
140    )
141  )
142
143  if "%CHECK_EXAMPLES%" == "TRUE" (
144    rem Check the docs\examples directory
145    if exist %SRC_DIR%\docs\examples (
146      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" "%%i"
147    )
148  )
149
150  goto success
151
152:syntax
153  rem Display the help
154  echo.
155  echo Usage: checksrc [what] [directory]
156  echo.
157  echo What to scan:
158  echo.
159  echo lib       - Scan the libcurl source
160  echo src       - Scan the command-line tool source
161  echo tests     - Scan the library tests and unit tests
162  echo examples  - Scan the examples
163  echo.
164  echo directory - Specifies the curl source directory
165  goto success
166
167:unknown
168  echo.
169  echo Error: Unknown argument '%1'
170  goto error
171
172:nodos
173  echo.
174  echo Error: Only a Windows NT based Operating System is supported
175  goto error
176
177:noperl
178  echo.
179  echo Error: Perl is not installed
180  goto error
181
182:nosrc
183  echo.
184  echo Error: "%SRC_DIR%" does not exist
185  goto error
186
187:error
188  if "%OS%" == "Windows_NT" endlocal
189  exit /B 1
190
191:success
192  endlocal
193  exit /B 0
194