2 setlocal enabledelayedexpansion
4 REM =========================================================================
6 REM =========================================================================
8 if not exist "%~dpn0.ini" (
9 echo Configuration file "%~dpn0.ini" not found^^!
14 set "CONFVARS_TMP=%TMP%\~%RANDOM%$%RANDOM%$%RANDOM%.cmd"
15 "%~dp0\etc\utils\inifile.exe" "%~dpn0.ini" [PATHS] > "%CONFVARS_TMP%"
20 REM =========================================================================
22 REM =========================================================================
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^^!
32 if not exist "%GIT_PATH%\bin\git.exe" (
33 echo Git not found. Please check GIT_PATH and try again^^!
38 if not exist "%PANDOC_PATH%\pandoc.exe" (
39 echo Pandoc not found. Please check PANDOC_PATH and try again^^!
45 if not exist "%JAVA_HOME%\bin\java.exe" (
46 echo Java not found. Please check JAVA_HOME and try again^^!
51 if not exist "%ANT_HOME%\bin\ant.bat" (
52 echo Ant not found. Please check ANT_HOME and try again^^!
57 if not exist "%PYTHONHOME%\python.exe" (
58 echo Python not found. Please check PYTHONHOME and try again^^!
63 if not exist "%DELPHI_HOME%\bin\dcc32.exe" (
64 echo Delphi not found. Please check DELPHI_HOME and try again^^!
69 REM =========================================================================
70 REM SET UP ENVIRONMENT
71 REM =========================================================================
73 set "PATH=%GIT_PATH%\bin;%PATH%"
76 if exist "%MSVC_PATH%\Auxiliary\Build\vcvarsall.bat" (
77 call "%MSVC_PATH%\Auxiliary\Build\vcvarsall.bat" x86
81 if exist "%MSVC_PATH%\vcvarsall.bat" (
82 call "%MSVC_PATH%\vcvarsall.bat" x86
88 if "%VCINSTALLDIR%"=="" (
89 echo Error: Failed to set up MSVC environment^^!
94 REM =========================================================================
96 REM =========================================================================
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"
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"
109 if "%ISO_DATE%"=="" goto:buildate_error
110 if "%ISO_TIME%"=="" goto:buildate_error
111 goto:buildate_complete
114 echo Error: Failed to determine build date^^!
120 REM =========================================================================
121 REM READ VERSION NUMBER
122 REM =========================================================================
124 set MHASH384_VERSION_MAJOR=
125 set MHASH384_VERSION_MINOR=
126 set MHASH384_VERSION_PATCH=
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"
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
142 echo Error: Failed to determine library version from source code^^!
148 if %MHASH384_VERSION_MINOR% LSS 10 (
149 set "MHASH384_VERSION_STR=%MHASH384_VERSION_MAJOR%.0%MHASH384_VERSION_MINOR%-%MHASH384_VERSION_PATCH%"
151 set "MHASH384_VERSION_STR=%MHASH384_VERSION_MAJOR%.%MHASH384_VERSION_MINOR%-%MHASH384_VERSION_PATCH%"
154 REM =========================================================================
155 REM REMOVE EXISTING BINARIES
156 REM =========================================================================
158 for %%p in (bin,obj) do (
159 if exist "%~dp0\%%p\" rmdir /S /Q "%~dp0\%%p"
162 for %%p in (frontend,libmhash384,ports) do (
163 "%GIT_PATH%\bin\git.exe" clean -fdx "%~dp0\%%p"
166 REM =========================================================================
168 REM =========================================================================
170 set "PACK_PATH=%TMP%\~%RANDOM%$%RANDOM%.tmp"
174 echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
176 echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
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^^!
190 "%~dp0\etc\utils\rchhdrrsr.exe" "%~dp0\bin\Win32\Release\*.exe"
191 "%~dp0\etc\utils\rchhdrrsr.exe" "%~dp0\bin\.\x64\Release\*.exe"
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^^!
204 mkdir "%PACK_PATH%\win-x86"
205 mkdir "%PACK_PATH%\win-x64"
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"
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"
213 REM -----------------------------------------------------------
215 REM -----------------------------------------------------------
217 pushd "%~dp0\ports\dotnet"
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^^!
228 mkdir "%PACK_PATH%\dotnet"
229 copy /Y /B "libmhash384\bin\Release\mhash384*.dll" "%PACK_PATH%\dotnet"
234 for /F "tokens=*" %%a in ('csc.exe') do (
235 if "!CSHARP_VERSION!"=="" (
236 if not "%%~a"=="" set "CSHARP_VERSION=%%~a"
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"
243 REM -----------------------------------------------------------
245 REM -----------------------------------------------------------
247 pushd "%~dp0\ports\java"
249 set "PATH=%JAVA_HOME%\bin;%ANT_HOME%\bin;%PATH%"
252 if not "%ERRORLEVEL%"=="0" (
253 echo Error: Build has failed^^!
258 mkdir "%PACK_PATH%\java"
259 copy /Y /B "out\mhash384*.jar" "%PACK_PATH%\java"
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"
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"
273 REM -----------------------------------------------------------
275 REM -----------------------------------------------------------
277 pushd "%~dp0\ports\python"
279 set "PATH=%PYTHONHOME%;%PATH%"
280 set "PYTHONPATH=%CD%"
282 for %%f in (*.py) do (
283 python.exe -c "import py_compile; py_compile.compile(\"%%~ff\", \"%%~dpnf.pyc\", optimize=1)"
286 mkdir "%PACK_PATH%\python"
287 copy /Y /B "mhash384*.pyc" "%PACK_PATH%\python"
292 for /F "tokens=*" %%a in ('python.exe -c "import sys; print(sys.implementation.name+\" \"+sys.version)"') do (
294 if "!PYTHON_VERSION!"=="" set "PYTHON_VERSION=%%~a"
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"
301 REM -----------------------------------------------------------
303 REM -----------------------------------------------------------
305 pushd "%~dp0\ports\delphi"
306 set "PATH=%DELPHI_HOME%\bin;%PATH%"
309 dcc32.exe -B -CC -$O+ "MHash384Test.dpr"
312 mkdir "%PACK_PATH%\delphi"
314 copy /Y /B "test\*.exe" "%PACK_PATH%\delphi"
315 copy /Y /B "libmhash384\*.dcu" "%PACK_PATH%\delphi"
320 for /F "tokens=*" %%a in ('dcc32.exe --version') do (
322 if "!DELPHI_VERSION!"=="" set "DELPHI_VERSION=%%~a"
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"
329 REM =========================================================================
331 REM =========================================================================
333 set "PACKAGE_NAMES=win-x86,win-x64,java,dotnet,python,delphi"
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^^!
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
351 REM =========================================================================
353 REM =========================================================================
355 if not exist "%~dp0\out\" (
359 set "OUTNAME=MHash384.%ISO_DATE%"
362 for %%p in (%PACKAGE_NAMES%) do (
363 if exist "%~dp0\out\%OUTNAME%.%%p.zip" goto:next_outname
365 goto:outname_generated
368 set "OUTNAME=%OUTNAME%.new"
369 goto:validate_outname
373 REM =========================================================================
374 REM CREATE DISTRIBUTION PACKAGE
375 REM =========================================================================
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^^!
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^^!
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^^!
400 attrib +R "%~dp0\out\%OUTNAME%.*.zip"
401 attrib +R "%~dp0\out\%OUTNAME%.source.tgz"
403 REM =========================================================================
405 REM =========================================================================
407 rmdir /Q /S "%PACK_PATH%"