OSDN Git Service

Updated README file.
[mhash384/mhash384.git] / build.cmd
index d049d20..3fa7c2e 100644 (file)
--- a/build.cmd
+++ b/build.cmd
@@ -54,11 +54,23 @@ if not exist "%ANT_HOME%\bin\ant.bat" (
        goto:eof
 )
 
+if not exist "%PYTHONHOME%\python.exe" (
+       echo Python not found. Please check PYTHONHOME and try again^^!
+       pause
+       goto:eof
+)
+
+if not exist "%DELPHI_HOME%\bin\dcc32.exe" (
+       echo Delphi not found. Please check DELPHI_HOME and try again^^!
+       pause
+       goto:eof
+)
+
 REM =========================================================================
 REM SET UP ENVIRONMENT
 REM =========================================================================
 
-set "PATH=%GIT_PATH%\bin;%ANT_HOME%\bin;%JAVA_HOME%\bin;%PATH%"
+set "PATH=%GIT_PATH%\bin;%PATH%"
 set VCINSTALLDIR=
 
 if exist "%MSVC_PATH%\Auxiliary\Build\vcvarsall.bat" (
@@ -84,33 +96,80 @@ REM DETECT BUILD DATE
 REM =========================================================================
 
 set "ISO_DATE="
+set "ISO_TIME="
 
-for /F "tokens=1,2 delims=:" %%a in ('"%~dp0\etc\utils\date.exe" +ISODATE:%%Y-%%m-%%d') do (
+for /F "tokens=1,* delims=:" %%a in ('"%~dp0\etc\utils\date.exe" +ISODATE:%%Y-%%m-%%d') do (
        if "%%a"=="ISODATE" set "ISO_DATE=%%b"
 )
 
-if "%ISO_DATE%"=="" (
-       echo Error: Failed to determine build date^^!
-       pause
-       goto:eof
+for /F "tokens=1,* delims=:" %%a in ('"%~dp0\etc\utils\date.exe" +ISOTIME:%%H:%%M:%%S') do (
+       if "%%a"=="ISOTIME" set "ISO_TIME=%%b"
+)
+
+if "%ISO_DATE%"=="" goto:buildate_error
+if "%ISO_TIME%"=="" goto:buildate_error
+goto:buildate_complete
+
+:buildate_error
+echo Error: Failed to determine build date^^!
+pause
+goto:eof
+
+:buildate_complete
+
+REM =========================================================================
+REM READ VERSION NUMBER
+REM =========================================================================
+
+set MHASH384_VERSION_MAJOR=
+set MHASH384_VERSION_MINOR=
+set MHASH384_VERSION_PATCH=
+
+for /f "tokens=1,2,3" %%u in (%~dp0\libmhash384\src\mhash384.cpp) do (
+       if "%%~u"=="#define" (
+               if "%%~v"=="MHASH384_VERSION_MAJOR" set "MHASH384_VERSION_MAJOR=%%~w"
+               if "%%~v"=="MHASH384_VERSION_MINOR" set "MHASH384_VERSION_MINOR=%%~w"
+               if "%%~v"=="MHASH384_VERSION_PATCH" set "MHASH384_VERSION_PATCH=%%~w"
+       )
+)
+
+if "%MHASH384_VERSION_MAJOR%"=="" goto:version_error
+if "%MHASH384_VERSION_MINOR%"=="" goto:version_error
+if "%MHASH384_VERSION_PATCH%"=="" goto:version_error
+goto:version_complete
+
+:version_error
+echo Error: Failed to determine library version from source code^^!
+pause
+goto:eof
+
+:version_complete
+
+if %MHASH384_VERSION_MINOR% LSS 10 (
+       set "MHASH384_VERSION_STR=%MHASH384_VERSION_MAJOR%.0%MHASH384_VERSION_MINOR%-%MHASH384_VERSION_PATCH%"
+) else (
+       set "MHASH384_VERSION_STR=%MHASH384_VERSION_MAJOR%.%MHASH384_VERSION_MINOR%-%MHASH384_VERSION_PATCH%"
 )
 
 REM =========================================================================
 REM REMOVE EXISTING BINARIES
 REM =========================================================================
 
-if exist "%~dp0\bin\" (
-       rmdir /S /Q "%~dp0\bin"
+for %%p in (bin,obj) do (
+       if exist "%~dp0\%%p\" rmdir /S /Q "%~dp0\%%p"
 )
 
-if exist "%~dp0\obj\" (
-       rmdir /S /Q "%~dp0\obj"
+for %%p in (frontend,libmhash384,ports) do (
+       "%GIT_PATH%\bin\git.exe" clean -fdx "%~dp0\%%p"
 )
 
 REM =========================================================================
 REM BUILD BINARIES
 REM =========================================================================
 
+set "PACK_PATH=%TMP%\~%RANDOM%$%RANDOM%.tmp"
+mkdir "%PACK_PATH%"
+
 echo.
 echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 echo BUILD BINARIES
@@ -142,11 +201,20 @@ for %%p in (Win32,x64) do (
        )
 )
 
+mkdir "%PACK_PATH%\win-x86"
+mkdir "%PACK_PATH%\win-x64"
+
+"%~dp0\bin\Win32\Release\MHash384.exe" --version > "%PACK_PATH%\win-x86\BUILD_TAG.txt"
+"%~dp0\bin\.\x64\Release\MHash384.exe" --version > "%PACK_PATH%\win-x64\BUILD_TAG.txt"
+
+copy /Y /B "%~dp0\bin\Win32\Release\MHash384.exe" "%PACK_PATH%\win-x86"
+copy /Y /B "%~dp0\bin\.\x64\Release\MHash384.exe" "%PACK_PATH%\win-x64"
+
 REM -----------------------------------------------------------
 REM C# PORT
 REM -----------------------------------------------------------
 
-pushd "%~dp0\ports\c-sharp"
+pushd "%~dp0\ports\dotnet"
 
 for %%t in (Clean,Rebuild) do (
        MSBuild.exe /property:Configuration=Release /property:Platform="Any CPU" /target:%%t /verbosity:normal ".\MHash384_DotNet.sln"
@@ -157,14 +225,29 @@ for %%t in (Clean,Rebuild) do (
        )
 )
 
+mkdir "%PACK_PATH%\dotnet"
+copy /Y /B "libmhash384\bin\Release\mhash384*.dll" "%PACK_PATH%\dotnet"
+
 popd
 
+set CSHARP_VERSION=
+for /F "tokens=*" %%a in ('csc.exe') do (
+       if "!CSHARP_VERSION!"=="" (
+               if not "%%~a"=="" set "CSHARP_VERSION=%%~a"
+       )
+)
+
+echo MHash-384 v%MHASH384_VERSION_STR% for Microsoft.NET>        "%PACK_PATH%\dotnet\BUILD_TAG.txt"
+echo Built on %ISO_DATE% at %ISO_TIME%, using %CSHARP_VERSION%>> "%PACK_PATH%\dotnet\BUILD_TAG.txt"
+
 REM -----------------------------------------------------------
 REM JAVA PORT
 REM -----------------------------------------------------------
 
 pushd "%~dp0\ports\java"
 
+set "PATH=%JAVA_HOME%\bin;%ANT_HOME%\bin;%PATH%"
+
 call ant
 if not "%ERRORLEVEL%"=="0" (
        echo Error: Build has failed^^!
@@ -172,34 +255,83 @@ if not "%ERRORLEVEL%"=="0" (
        goto:eof
 )
 
+mkdir "%PACK_PATH%\java"
+copy /Y /B "out\mhash384*.jar" "%PACK_PATH%\java"
+
+popd
+
+set JAVA_VERSION=
+for /F "tokens=*" %%a in ('java.exe -version 2^>^&1') do (
+       if not "%%~a"=="" set (
+               if "!JAVA_VERSION!"=="" set "JAVA_VERSION=%%~a"
+       )
+)
+
+echo MHash-384 v%MHASH384_VERSION_STR% for Java>               "%PACK_PATH%\java\BUILD_TAG.txt"
+echo Built on %ISO_DATE% at %ISO_TIME%, using %JAVA_VERSION%>> "%PACK_PATH%\java\BUILD_TAG.txt"
+
+REM -----------------------------------------------------------
+REM PYTHON PORT
+REM -----------------------------------------------------------
+
+pushd "%~dp0\ports\python"
+
+set "PATH=%PYTHONHOME%;%PATH%"
+set "PYTHONPATH=%CD%"
+
+for %%f in (*.py) do (
+       python.exe -c "import py_compile; py_compile.compile(\"%%~ff\", \"%%~dpnf.pyc\", optimize=1)"
+)
+
+mkdir "%PACK_PATH%\python"
+copy /Y /B "mhash384*.pyc" "%PACK_PATH%\python"
+
 popd
 
-REM =========================================================================
-REM COPY DISTRIBUTION FILES
-REM =========================================================================
+set PYTHON_VERSION=
+for /F "tokens=*" %%a in ('python.exe -c "import sys; print(sys.implementation.name+\" \"+sys.version)"') do (
+       if not "%%~a"=="" (
+               if "!PYTHON_VERSION!"=="" set "PYTHON_VERSION=%%~a"
+       )
+)
 
-echo.
-echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-echo CREATE PACKAGE
-echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-echo.
+echo MHash-384 v%MHASH384_VERSION_STR% for Python>               "%PACK_PATH%\python\BUILD_TAG.txt"
+echo Built on %ISO_DATE% at %ISO_TIME%, using %PYTHON_VERSION%>> "%PACK_PATH%\python\BUILD_TAG.txt"
 
-set "PACK_PATH=%TMP%\~%RANDOM%$%RANDOM%$%RANDOM%.tmp"
+REM -----------------------------------------------------------
+REM DELPHI PORT
+REM -----------------------------------------------------------
 
-mkdir "%PACK_PATH%"
-for %%p in (win-x86,win-x64,java,dotnet) do (
-       mkdir "%PACK_PATH%\%%p"
+pushd "%~dp0\ports\delphi"
+set "PATH=%DELPHI_HOME%\bin;%PATH%"
+
+pushd "test"
+dcc32.exe -B -CC -$O+ "MHash384Test.dpr"
+popd
+
+mkdir "%PACK_PATH%\delphi"
+
+copy /Y /B "test\*.exe"        "%PACK_PATH%\delphi"
+copy /Y /B "libmhash384\*.dcu" "%PACK_PATH%\delphi"
+
+popd
+
+set DELPHI_VERSION=
+for /F "tokens=*" %%a in ('dcc32.exe --version') do (
+       if not "%%~a"=="" (
+               if "!DELPHI_VERSION!"=="" set "DELPHI_VERSION=%%~a"
+       )
 )
 
-copy /Y "%~dp0\bin\Win32\Release\MHash384.exe"                      "%PACK_PATH%\win-x86"
-copy /Y "%~dp0\bin\x64\Release\MHash384.exe"                        "%PACK_PATH%\win-x64"
-copy /Y "%~dp0\ports\java\out\mhash384*.jar"                        "%PACK_PATH%\java"
-copy /Y "%~dp0\ports\c-sharp\libmhash384\bin\Release\mhash384*.dll" "%PACK_PATH%\dotnet"
+echo MHash-384 v%MHASH384_VERSION_STR% for Delphi>               "%PACK_PATH%\delphi\BUILD_TAG.txt"
+echo Built on %ISO_DATE% at %ISO_TIME%, using %DELPHI_VERSION%>> "%PACK_PATH%\delphi\BUILD_TAG.txt"
 
 REM =========================================================================
 REM CREATE DOCUMENTS
 REM =========================================================================
 
+set "PACKAGE_NAMES=win-x86,win-x64,java,dotnet,python,delphi"
+
 "%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"
 if not "%ERRORLEVEL%"=="0" (
        echo Error: Failed to generate documents^^!
@@ -207,17 +339,13 @@ if not "%ERRORLEVEL%"=="0" (
        goto:eof
 )
 
-for %%p in (win-x86,win-x64,java,dotnet) do (
-       mkdir                              "%PACK_PATH%\%%p\img"
-       mkdir                              "%PACK_PATH%\%%p\img\mhash384"
-       copy /Y "%~dp0\README.html"        "%PACK_PATH%\%%p"
-       copy /Y "%~dp0\COPYING.txt"        "%PACK_PATH%\%%p"
-       copy /Y "%~dp0\img\mhash384\*.jpg" "%PACK_PATH%\%%p\img\mhash384"
-       attrib +R "%PACK_PATH%\%%p\*.*" /S
-)
-
-for %%p in (win-x86,win-x64) do (
-       "%PACK_PATH%\%%p\MHash384.exe" --version > "%PACK_PATH%\%%p\BUILD_TAG.txt"
+for %%p in (%PACKAGE_NAMES%) do (
+       mkdir                                 "%PACK_PATH%\%%p\img"
+       mkdir                                 "%PACK_PATH%\%%p\img\mhash384"
+       copy /Y /B "%~dp0\README.html"        "%PACK_PATH%\%%p"
+       copy /Y /B "%~dp0\COPYING.txt"        "%PACK_PATH%\%%p"
+       copy /Y /B "%~dp0\img\mhash384\*.jpg" "%PACK_PATH%\%%p\img\mhash384"
+       attrib +R                             "%PACK_PATH%\%%p\*.*" /S
 )
 
 REM =========================================================================
@@ -231,7 +359,7 @@ if not exist "%~dp0\out\" (
 set "OUTNAME=MHash384.%ISO_DATE%"
 
 :validate_outname
-for %%p in (win-x86,win-x64,java,dotnet) do (
+for %%p in (%PACKAGE_NAMES%) do (
        if exist "%~dp0\out\%OUTNAME%.%%p.zip" goto:next_outname
 )
 goto:outname_generated
@@ -243,10 +371,10 @@ goto:validate_outname
 :outname_generated
 
 REM =========================================================================
-REM CREATE PACKAGE
+REM CREATE DISTRIBUTION PACKAGE
 REM =========================================================================
 
-for %%p in (win-x86,win-x64,java,dotnet) do (
+for %%p in (%PACKAGE_NAMES%) do (
        pushd "%PACK_PATH%\%%p"
        if not "!ERRORLEVEL!"=="0" (
                echo Error: Failed to change directory to PACK_PATH^^!
@@ -278,10 +406,6 @@ REM =========================================================================
 
 rmdir /Q /S "%PACK_PATH%"
 
-REM =========================================================================
-REM COMPLETED
-REM =========================================================================
-
 echo.
 echo COMPLETED
 echo.