OSDN Git Service

Microsoft.NET port: Fix Mono compatibility of unit tests.
[mhash384/mhash384.git] / build.cmd
1 @echo off
2 setlocal enabledelayedexpansion
3
4 REM =========================================================================
5 REM READ CONFIGURATION
6 REM =========================================================================
7
8 if not exist "%~dpn0.ini" (
9         echo Configuration file "%~dpn0.ini" not found^^!
10         pause
11         goto:eof
12 )
13
14 set "CONFVARS_TMP=%TMP%\~%RANDOM%$%RANDOM%$%RANDOM%.cmd"
15 "%~dp0\etc\utils\inifile.exe" "%~dpn0.ini" [PATHS] > "%CONFVARS_TMP%"
16
17 call "%CONFVARS_TMP%"
18 del  "%CONFVARS_TMP%"
19
20 REM =========================================================================
21 REM CHECK PATHS
22 REM =========================================================================
23
24 if not exist "%MSVC_PATH%\vcvarsall.bat" (
25         if not exist "%MSVC_PATH%\Auxiliary\Build\vcvarsall.bat" (
26                 echo MSVC not found. Please check MSVC_PATH and try again^^!
27                 pause
28                 goto:eof
29         )
30 )
31
32 if not exist "%GIT_PATH%\bin\git.exe" (
33         echo Git not found. Please check GIT_PATH and try again^^!
34         pause
35         goto:eof
36 )
37
38 if not exist "%PANDOC_PATH%\pandoc.exe" (
39         echo Pandoc not found. Please check PANDOC_PATH and try again^^!
40         pause
41         goto:eof
42 )
43
44
45 if not exist "%JAVA_HOME%\bin\java.exe" (
46         echo Java not found. Please check JAVA_HOME and try again^^!
47         pause
48         goto:eof
49 )
50
51 if not exist "%ANT_HOME%\bin\ant.bat" (
52         echo Ant not found. Please check ANT_HOME and try again^^!
53         pause
54         goto:eof
55 )
56
57 if not exist "%PYTHONHOME%\python.exe" (
58         echo Python not found. Please check PYTHONHOME and try again^^!
59         pause
60         goto:eof
61 )
62
63 if not exist "%DELPHI_HOME%\bin\dcc32.exe" (
64         echo Delphi not found. Please check DELPHI_HOME and try again^^!
65         pause
66         goto:eof
67 )
68
69 REM =========================================================================
70 REM SET UP ENVIRONMENT
71 REM =========================================================================
72
73 set "PATH=%GIT_PATH%\bin;%PATH%"
74 set VCINSTALLDIR=
75
76 if exist "%MSVC_PATH%\Auxiliary\Build\vcvarsall.bat" (
77         call "%MSVC_PATH%\Auxiliary\Build\vcvarsall.bat" x86
78         goto:msvc_initialized
79 )
80
81 if exist "%MSVC_PATH%\vcvarsall.bat" (
82         call "%MSVC_PATH%\vcvarsall.bat" x86
83         goto:msvc_initialized
84 )
85
86 :msvc_initialized
87
88 if "%VCINSTALLDIR%"=="" (
89         echo Error: Failed to set up MSVC environment^^!
90         pause
91         goto:eof
92 )
93
94 REM =========================================================================
95 REM DETECT BUILD DATE
96 REM =========================================================================
97
98 set "ISO_DATE="
99 set "ISO_TIME="
100
101 for /F "tokens=1,* delims=:" %%a in ('"%~dp0\etc\utils\date.exe" +ISODATE:%%Y-%%m-%%d') do (
102         if "%%a"=="ISODATE" set "ISO_DATE=%%b"
103 )
104
105 for /F "tokens=1,* delims=:" %%a in ('"%~dp0\etc\utils\date.exe" +ISOTIME:%%H:%%M:%%S') do (
106         if "%%a"=="ISOTIME" set "ISO_TIME=%%b"
107 )
108
109 if "%ISO_DATE%"=="" goto:buildate_error
110 if "%ISO_TIME%"=="" goto:buildate_error
111 goto:buildate_complete
112
113 :buildate_error
114 echo Error: Failed to determine build date^^!
115 pause
116 goto:eof
117
118 :buildate_complete
119
120 REM =========================================================================
121 REM READ VERSION NUMBER
122 REM =========================================================================
123
124 set MHASH384_VERSION_MAJOR=
125 set MHASH384_VERSION_MINOR=
126 set MHASH384_VERSION_PATCH=
127
128 for /f "tokens=1,2,3" %%u in (%~dp0\libmhash384\src\mhash384.cpp) do (
129         if "%%~u"=="#define" (
130                 if "%%~v"=="MHASH384_VERSION_MAJOR" set "MHASH384_VERSION_MAJOR=%%~w"
131                 if "%%~v"=="MHASH384_VERSION_MINOR" set "MHASH384_VERSION_MINOR=%%~w"
132                 if "%%~v"=="MHASH384_VERSION_PATCH" set "MHASH384_VERSION_PATCH=%%~w"
133         )
134 )
135
136 if "%MHASH384_VERSION_MAJOR%"=="" goto:version_error
137 if "%MHASH384_VERSION_MINOR%"=="" goto:version_error
138 if "%MHASH384_VERSION_PATCH%"=="" goto:version_error
139 goto:version_complete
140
141 :version_error
142 echo Error: Failed to determine library version from source code^^!
143 pause
144 goto:eof
145
146 :version_complete
147
148 if %MHASH384_VERSION_MINOR% LSS 10 (
149         set "MHASH384_VERSION_STR=%MHASH384_VERSION_MAJOR%.0%MHASH384_VERSION_MINOR%-%MHASH384_VERSION_PATCH%"
150 ) else (
151         set "MHASH384_VERSION_STR=%MHASH384_VERSION_MAJOR%.%MHASH384_VERSION_MINOR%-%MHASH384_VERSION_PATCH%"
152 )
153
154 REM =========================================================================
155 REM REMOVE EXISTING BINARIES
156 REM =========================================================================
157
158 for %%p in (bin,obj) do (
159         if exist "%~dp0\%%p\" rmdir /S /Q "%~dp0\%%p"
160 )
161
162 for %%p in (frontend,libmhash384,ports) do (
163         "%GIT_PATH%\bin\git.exe" clean -fdx "%~dp0\%%p"
164 )
165
166 REM =========================================================================
167 REM BUILD BINARIES
168 REM =========================================================================
169
170 set "PACK_PATH=%TMP%\~%RANDOM%$%RANDOM%.tmp"
171 mkdir "%PACK_PATH%"
172
173 echo.
174 echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
175 echo BUILD BINARIES
176 echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
177 echo.
178
179 for %%p in (Win32,x64) do (
180         for %%t in (Clean,Rebuild) do (
181                 MSBuild.exe /property:Configuration=Release /property:Platform=%%p /target:%%t /verbosity:normal "%~dp0\MHash384.sln"
182                 if not "!ERRORLEVEL!"=="0" (
183                         echo Error: Build has failed^^!
184                         pause
185                         goto:eof
186                 )
187         )
188 )
189
190 "%~dp0\etc\utils\rchhdrrsr.exe" "%~dp0\bin\Win32\Release\*.exe"
191 "%~dp0\etc\utils\rchhdrrsr.exe" "%~dp0\bin\.\x64\Release\*.exe"
192
193 for %%p in (Win32,x64) do (
194         for %%t in (Clean,Rebuild) do (
195                 MSBuild.exe /property:Configuration=Release /property:Platform=%%p /target:%%t /verbosity:normal "%~dp0\MHash384.sln"
196                 if not "!ERRORLEVEL!"=="0" (
197                         echo Error: Build has failed^^!
198                         pause
199                         goto:eof
200                 )
201         )
202 )
203
204 mkdir "%PACK_PATH%\win-x86"
205 mkdir "%PACK_PATH%\win-x64"
206
207 "%~dp0\bin\Win32\Release\MHash384.exe" --version > "%PACK_PATH%\win-x86\BUILD_TAG.txt"
208 "%~dp0\bin\.\x64\Release\MHash384.exe" --version > "%PACK_PATH%\win-x64\BUILD_TAG.txt"
209
210 copy /Y /B "%~dp0\bin\Win32\Release\MHash384.exe" "%PACK_PATH%\win-x86"
211 copy /Y /B "%~dp0\bin\.\x64\Release\MHash384.exe" "%PACK_PATH%\win-x64"
212
213 REM -----------------------------------------------------------
214 REM C# PORT
215 REM -----------------------------------------------------------
216
217 pushd "%~dp0\ports\dotnet"
218
219 for %%t in (Clean,Rebuild) do (
220         MSBuild.exe /property:Configuration=Release /property:Platform="Any CPU" /target:%%t /verbosity:normal ".\MHash384_DotNet.sln"
221         if not "!ERRORLEVEL!"=="0" (
222                 echo Error: Build has failed^^!
223                 pause
224                 goto:eof
225         )
226 )
227
228 mkdir "%PACK_PATH%\dotnet"
229 copy /Y /B "libmhash384\bin\Release\mhash384*.dll" "%PACK_PATH%\dotnet"
230
231 popd
232
233 set CSHARP_VERSION=
234 for /F "tokens=*" %%a in ('csc.exe') do (
235         if "!CSHARP_VERSION!"=="" (
236                 if not "%%~a"=="" set "CSHARP_VERSION=%%~a"
237         )
238 )
239
240 echo MHash-384 v%MHASH384_VERSION_STR% for Microsoft.NET>        "%PACK_PATH%\dotnet\BUILD_TAG.txt"
241 echo Built on %ISO_DATE% at %ISO_TIME%, using %CSHARP_VERSION%>> "%PACK_PATH%\dotnet\BUILD_TAG.txt"
242
243 REM -----------------------------------------------------------
244 REM JAVA PORT
245 REM -----------------------------------------------------------
246
247 pushd "%~dp0\ports\java"
248
249 set "PATH=%JAVA_HOME%\bin;%ANT_HOME%\bin;%PATH%"
250
251 call ant
252 if not "%ERRORLEVEL%"=="0" (
253         echo Error: Build has failed^^!
254         pause
255         goto:eof
256 )
257
258 mkdir "%PACK_PATH%\java"
259 copy /Y /B "out\mhash384*.jar" "%PACK_PATH%\java"
260
261 popd
262
263 set JAVA_VERSION=
264 for /F "tokens=*" %%a in ('java.exe -version 2^>^&1') do (
265         if not "%%~a"=="" set (
266                 if "!JAVA_VERSION!"=="" set "JAVA_VERSION=%%~a"
267         )
268 )
269
270 echo MHash-384 v%MHASH384_VERSION_STR% for Java>               "%PACK_PATH%\java\BUILD_TAG.txt"
271 echo Built on %ISO_DATE% at %ISO_TIME%, using %JAVA_VERSION%>> "%PACK_PATH%\java\BUILD_TAG.txt"
272
273 REM -----------------------------------------------------------
274 REM PYTHON PORT
275 REM -----------------------------------------------------------
276
277 pushd "%~dp0\ports\python"
278
279 set "PATH=%PYTHONHOME%;%PATH%"
280 set "PYTHONPATH=%CD%"
281
282 for %%f in (*.py) do (
283         python.exe -c "import py_compile; py_compile.compile(\"%%~ff\", \"%%~dpnf.pyc\", optimize=1)"
284 )
285
286 mkdir "%PACK_PATH%\python"
287 copy /Y /B "mhash384*.pyc" "%PACK_PATH%\python"
288
289 popd
290
291 set PYTHON_VERSION=
292 for /F "tokens=*" %%a in ('python.exe -c "import sys; print(sys.implementation.name+\" \"+sys.version)"') do (
293         if not "%%~a"=="" (
294                 if "!PYTHON_VERSION!"=="" set "PYTHON_VERSION=%%~a"
295         )
296 )
297
298 echo MHash-384 v%MHASH384_VERSION_STR% for Python>               "%PACK_PATH%\python\BUILD_TAG.txt"
299 echo Built on %ISO_DATE% at %ISO_TIME%, using %PYTHON_VERSION%>> "%PACK_PATH%\python\BUILD_TAG.txt"
300
301 REM -----------------------------------------------------------
302 REM DELPHI PORT
303 REM -----------------------------------------------------------
304
305 pushd "%~dp0\ports\delphi"
306 set "PATH=%DELPHI_HOME%\bin;%PATH%"
307
308 pushd "test"
309 dcc32.exe -B -CC -$O+ "MHash384Test.dpr"
310 popd
311
312 mkdir "%PACK_PATH%\delphi"
313
314 copy /Y /B "test\*.exe"        "%PACK_PATH%\delphi"
315 copy /Y /B "libmhash384\*.dcu" "%PACK_PATH%\delphi"
316
317 popd
318
319 set DELPHI_VERSION=
320 for /F "tokens=*" %%a in ('dcc32.exe --version') do (
321         if not "%%~a"=="" (
322                 if "!DELPHI_VERSION!"=="" set "DELPHI_VERSION=%%~a"
323         )
324 )
325
326 echo MHash-384 v%MHASH384_VERSION_STR% for Delphi>               "%PACK_PATH%\delphi\BUILD_TAG.txt"
327 echo Built on %ISO_DATE% at %ISO_TIME%, using %DELPHI_VERSION%>> "%PACK_PATH%\delphi\BUILD_TAG.txt"
328
329 REM =========================================================================
330 REM CREATE DOCUMENTS
331 REM =========================================================================
332
333 set "PACKAGE_NAMES=win-x86,win-x64,java,dotnet,python,delphi"
334
335 "%PANDOC_PATH%\pandoc.exe" --from markdown_github+pandoc_title_block+header_attributes+implicit_figures --to html5 --toc -N --standalone -H "%~dp0\..\Prerequisites\Pandoc\css\github-pandoc.inc" -o %~dp0\README.html "%~dp0\README.md"
336 if not "%ERRORLEVEL%"=="0" (
337         echo Error: Failed to generate documents^^!
338         pause
339         goto:eof
340 )
341
342 for %%p in (%PACKAGE_NAMES%) do (
343         mkdir                                 "%PACK_PATH%\%%p\img"
344         mkdir                                 "%PACK_PATH%\%%p\img\mhash384"
345         copy /Y /B "%~dp0\README.html"        "%PACK_PATH%\%%p"
346         copy /Y /B "%~dp0\COPYING.txt"        "%PACK_PATH%\%%p"
347         copy /Y /B "%~dp0\img\mhash384\*.jpg" "%PACK_PATH%\%%p\img\mhash384"
348         attrib +R                             "%PACK_PATH%\%%p\*.*" /S
349 )
350
351 REM =========================================================================
352 REM GENERATE OUTNAME
353 REM =========================================================================
354
355 if not exist "%~dp0\out\" (
356         mkdir "%~dp0\out"
357 )
358
359 set "OUTNAME=MHash384.%ISO_DATE%"
360
361 :validate_outname
362 for %%p in (%PACKAGE_NAMES%) do (
363         if exist "%~dp0\out\%OUTNAME%.%%p.zip" goto:next_outname
364 )
365 goto:outname_generated
366
367 :next_outname
368 set "OUTNAME=%OUTNAME%.new"
369 goto:validate_outname
370
371 :outname_generated
372
373 REM =========================================================================
374 REM CREATE DISTRIBUTION PACKAGE
375 REM =========================================================================
376
377 for %%p in (%PACKAGE_NAMES%) do (
378         pushd "%PACK_PATH%\%%p"
379         if not "!ERRORLEVEL!"=="0" (
380                 echo Error: Failed to change directory to PACK_PATH^^!
381                 pause
382                 goto:eof
383         )
384         "%~dp0\etc\utils\zip.exe" -r -9 -z "%~dp0\out\%OUTNAME%.%%p.zip" "*.*" < "%~dp0\COPYING.txt"
385         if not "!ERRORLEVEL!"=="0" (
386                 echo Error: Failed to create ZIP package^^!
387                 pause
388                 goto:eof
389         )
390         popd
391 )
392
393 "%GIT_PATH%\bin\git.exe" archive --verbose --format=tar.gz --output "%~dp0\out\%OUTNAME%.source.tgz" HEAD
394 if not "%ERRORLEVEL%"=="0" (
395         echo Error: Failed to export source codes^^!
396         pause
397         goto:eof
398 )
399
400 attrib +R "%~dp0\out\%OUTNAME%.*.zip"
401 attrib +R "%~dp0\out\%OUTNAME%.source.tgz"
402
403 REM =========================================================================
404 REM FINAL CLEAN-UP
405 REM =========================================================================
406
407 rmdir /Q /S "%PACK_PATH%"
408
409 echo.
410 echo COMPLETED
411 echo.
412
413 pause