OSDN Git Service

Improved Make script.
[mhash384/mhash384.git] / Make.cmd
1 @echo off
2 setlocal enabledelayedexpansion
3 cd /d "%~dp0"
4
5 REM ///////////////////////////////////////////////////////////////////////////
6 REM // Setup environment
7 REM ///////////////////////////////////////////////////////////////////////////
8
9 set "MSVC_PATH=C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC"
10 set "PDOC_PATH=C:\Program Files (x86)\Pandoc"
11 set "GIT2_PATH=C:\Program Files\Git\bin"
12
13 REM Java Paths
14 set "JDK_HOME=C:\Program Files\Java\jdk1.8.0_77"
15 set "ANT_HOME=C:\Eclipse\apache-ant"
16
17 REM Python Paths
18 set "PYTHON_HOME_X86=C:\Program Files (x86)\Python35-32"
19 set "PYTHON_HOME_X64=C:\Program Files\Python35"
20
21 REM Delphi Paths
22 set "DELPHI_PATH=C:\Program Files (x86)\Borland\Delphi7"
23
24
25 REM ///////////////////////////////////////////////////////////////////////////
26 REM // Check paths
27 REM ///////////////////////////////////////////////////////////////////////////
28
29 if not exist "%MSVC_PATH%\vcvarsall.bat" (
30         "%~dp0\tools\cecho.exe" RED "\nMSVC not found.\n%MSVC_PATH:\=\\%\\vcvarsall.bat\n"
31         pause & goto:eof
32 )
33
34 if not exist "%PDOC_PATH%\pandoc.exe" (
35         "%~dp0\tools\cecho.exe" RED "\nPandoc not found.\n%PDOC_PATH:\=\\%\\pandoc.exe\n"
36         pause & goto:eof
37 )
38
39 if not exist "%GIT2_PATH%\git.exe" (
40         "%~dp0\tools\cecho.exe" RED "\nGIT not found.\n%GIT2_PATH:\=\\%\\git.exe\n"
41         pause & goto:eof
42 )
43
44 if not exist "%JDK_HOME%\lib\tools.jar" (
45         "%~dp0\tools\cecho.exe" RED "\nJava not found.\n%JDK_HOME:\=\\%\\lib\\tools.jar\n"
46         pause & goto:eof
47 )
48
49 if not exist "%JDK_HOME%\bin\javac.exe" (
50         "%~dp0\tools\cecho.exe" RED "\nJava not found.\n%JDK_HOME:\=\\%\\bin\\javac.exe\n"
51         pause & goto:eof
52 )
53
54 if not exist "%ANT_HOME%\bin\ant.bat" (
55         "%~dp0\tools\cecho.exe" RED "\nAnt not found.\n%ANT_HOME:\=\\%\\bin\\ant.cmd\n"
56         pause & goto:eof
57 )
58
59 if not exist "%ANT_HOME%\lib\ant.jar" (
60         "%~dp0\tools\cecho.exe" RED "\nAnt not found.\n%ANT_HOME:\=\\%\\lib\\ant.jar\n"
61         pause & goto:eof
62 )
63
64 if not exist "%PYTHON_HOME_X86%\include\Python.h" (
65         "%~dp0\tools\cecho.exe" RED "\nPython-x86 not found.\n%PYTHON_HOME_X86:\=\\%\\include\\Python.h\n"
66         pause & goto:eof
67 )
68
69 if not exist "%PYTHON_HOME_X64%\include\Python.h" (
70         "%~dp0\tools\cecho.exe" RED "\nPython-x64 not found.\n%PYTHON_HOME_X64:\=\\%\\include\\Python.h\n"
71         pause & goto:eof
72 )
73
74 if not exist "%DELPHI_PATH%\bin\dcc32.exe" (
75         "%~dp0\tools\cecho.exe" RED "\nDelphi not found.\n%DELPHI_PATH:\=\\%\\bin\\dcc32.exe\n"
76         pause & goto:eof
77 )
78
79 REM ///////////////////////////////////////////////////////////////////////////
80 REM // Get current date and time (in ISO format)
81 REM ///////////////////////////////////////////////////////////////////////////
82
83 set "ISO_DATE="
84 set "ISO_TIME="
85 for /F "tokens=1,2 delims=:" %%a in ('"%~dp0\tools\date.exe" +ISODATE:%%Y-%%m-%%d') do (
86         if "%%a"=="ISODATE" set "ISO_DATE=%%b"
87 )
88 for /F "tokens=1,2,3,4 delims=:" %%a in ('"%~dp0\tools\date.exe" +ISOTIME:%%T') do (
89         if "%%a"=="ISOTIME" set "ISO_TIME=%%b:%%c:%%d"
90 )
91
92
93 REM ///////////////////////////////////////////////////////////////////////////
94 REM // Clean up temp files
95 REM ///////////////////////////////////////////////////////////////////////////
96
97 "%~dp0\tools\cecho.exe" YELLOW "\n========[ CLEAN UP ]========\n"
98
99 for %%i in (bin,obj) do (
100         del /Q /S /F "%~dp0\%%i\*.*"  2> NUL
101 )
102
103 for %%i in (Microsoft.NET,Java,Delphi,Python) do (
104         for %%j in (native,wrapper,example) do (
105                 for %%k in (bin,obj,out) do (
106                         del /Q /S /F "%~dp0\bindings\%%i\%%j\%%k\*.*" 2> NUL
107                 )
108         )
109 )
110
111 for %%i in (exe,dcu) do (
112         del /Q /S /F "%~dp0\bindings\Delphi\*.%%i" 2> NUL
113 )
114
115
116 REM ///////////////////////////////////////////////////////////////////////////
117 REM // Build the binaries
118 REM ///////////////////////////////////////////////////////////////////////////
119
120 "%~dp0\tools\cecho.exe" YELLOW "\n========[ COMPILE ]========"
121
122 set "JAVA_HOME=%JDK_HOME%"
123 set "ANT_HOME=%ANT_HOME%"
124 call "%MSVC_PATH%\vcvarsall.bat"
125
126 set "MSVC_PROJECTS=MHashLib.sln"
127 set "MSVC_PROJECTS=%MSVC_PROJECTS%,bindings\Microsoft.NET\example\MHashDotNet384_Example.sln"
128 set "MSVC_PROJECTS=%MSVC_PROJECTS%,bindings\Microsoft.NET\wrapper\MHashDotNet384_Wrapper.sln"
129 set "MSVC_PROJECTS=%MSVC_PROJECTS%,bindings\Java\native\MHashJava384.sln"
130 set "MSVC_PROJECTS=%MSVC_PROJECTS%,bindings\Python\native\MHashPy384_Native.sln"
131 set "MSVC_PROJECTS=%MSVC_PROJECTS%,bindings\Delphi\native\MHashDelphi384.sln"
132
133 for %%q in (%MSVC_PROJECTS%) do (
134         for %%p in (x86,x64) do (
135                 "%~dp0\tools\cecho.exe" CYAN "\n----[ %%~nq (%%~p) ]----\n"
136                 MSBuild.exe /property:Platform=%%p /property:Configuration=Release /target:Clean   "%~dp0\%%~q"
137                 if not "!ERRORLEVEL!"=="0" goto BuildHasFailed
138                 MSBuild.exe /property:Platform=%%p /property:Configuration=Release /target:Rebuild "%~dp0\%%~q"
139                 if not "!ERRORLEVEL!"=="0" goto BuildHasFailed
140         )
141 )
142
143 for %%q in (example) do (
144         echo pushd "%~dp0\bindings\Delphi\%%~q"
145         pushd "%~dp0\bindings\Delphi\%%~q"
146         for %%p in (*.dpr) do (
147                 "%~dp0\tools\cecho.exe" CYAN "\n----[ %%~np ]----\n"
148                 "%DELPHI_PATH%\bin\dcc32.exe" -B -CG -$O+ -E"bin" -N"obj" "%%~nxp"
149                 if not "!ERRORLEVEL!"=="0" goto BuildHasFailed
150         )
151         popd
152 )
153
154 for %%q in (wrapper,example) do (
155         "%~dp0\tools\cecho.exe" CYAN "\n----[ %%~nq ]----\n"
156         pushd "%~dp0\bindings\Java\%%~q"
157         call "%ANT_HOME%\bin\ant.bat" clean jar
158         if not "!ERRORLEVEL!"=="0" goto BuildHasFailed
159         popd
160 )
161
162
163 REM ///////////////////////////////////////////////////////////////////////////
164 REM // Generate Docs
165 REM ///////////////////////////////////////////////////////////////////////////
166
167 "%PDOC_PATH%\pandoc.exe" --from markdown --to html5 --toc -N --standalone -H "%~dp0\etc\css\style.inc" --output "%~dp0\README.html" "%~dp0\README.md"
168 if not "%ERRORLEVEL%"=="0" goto BuildHasFailed
169
170
171 REM ///////////////////////////////////////////////////////////////////////////
172 REM // Generate output name
173 REM ///////////////////////////////////////////////////////////////////////////
174
175 mkdir "%~dp0\out" 2> NUL
176
177 set COUNTER=
178 set REVISON=
179
180 :GenerateOutfileNameNext
181 set "OUT_PATH_BIN_X86=%~dp0\out\mhash_384.%ISO_DATE%%REVISON%.bin-msvc-x86.zip"
182 set "OUT_PATH_BIN_X64=%~dp0\out\mhash_384.%ISO_DATE%%REVISON%.bin-msvc-x64.zip"
183 set "OUT_PATH_NET_X86=%~dp0\out\mhash_384.%ISO_DATE%%REVISON%.dotnet-x86.zip"
184 set "OUT_PATH_NET_X64=%~dp0\out\mhash_384.%ISO_DATE%%REVISON%.dotnet-x64.zip"
185 set "OUT_PATH_JNI_X86=%~dp0\out\mhash_384.%ISO_DATE%%REVISON%.java-win-x86.zip"
186 set "OUT_PATH_JNI_X64=%~dp0\out\mhash_384.%ISO_DATE%%REVISON%.java-win-x64.zip"
187 set "OUT_PATH_PYC_X86=%~dp0\out\mhash_384.%ISO_DATE%%REVISON%.python-win-x86.zip"
188 set "OUT_PATH_PYC_X64=%~dp0\out\mhash_384.%ISO_DATE%%REVISON%.python-win-x64.zip"
189 set "OUT_PATH_PAS_X86=%~dp0\out\mhash_384.%ISO_DATE%%REVISON%.delphi-win-x86.zip"
190 set "OUT_PATH_SRC_GEN=%~dp0\out\mhash_384.%ISO_DATE%%REVISON%.sources.tar.gz"
191
192 set /a COUNTER=COUNTER+1
193 set REVISON=.update-%COUNTER%
194
195 if exist "%OUT_PATH_BIN_X86%" goto GenerateOutfileNameNext
196 if exist "%OUT_PATH_BIN_X64%" goto GenerateOutfileNameNext
197 if exist "%OUT_PATH_NET_X86%" goto GenerateOutfileNameNext
198 if exist "%OUT_PATH_NET_X64%" goto GenerateOutfileNameNext
199 if exist "%OUT_PATH_JNI_X86%" goto GenerateOutfileNameNext
200 if exist "%OUT_PATH_JNI_X64%" goto GenerateOutfileNameNext
201 if exist "%OUT_PATH_PYC_X86%" goto GenerateOutfileNameNext
202 if exist "%OUT_PATH_PYC_X64%" goto GenerateOutfileNameNext
203 if exist "%OUT_PATH_PAS_X86%" goto GenerateOutfileNameNext
204 if exist "%OUT_PATH_SRC_GEN%" goto GenerateOutfileNameNext
205
206
207 REM ///////////////////////////////////////////////////////////////////////////
208 REM // Build ZIP package
209 REM ///////////////////////////////////////////////////////////////////////////
210
211 "%~dp0\tools\cecho.exe" YELLOW "\n========[ PACKAGING ]========\n"
212
213 "%~dp0\tools\zip.exe" -j -9 -z "%OUT_PATH_BIN_X86%" "%~dp0\bin\Win32\Release\mhash_384.x86.exe" "%~dp0\README.html" "%~dp0\COPYING.txt" < "%~dp0\COPYING.txt"
214 "%~dp0\tools\zip.exe" -j -9 -z "%OUT_PATH_BIN_X64%" "%~dp0\bin\x64\.\Release\mhash_384.x64.exe" "%~dp0\README.html" "%~dp0\COPYING.txt" < "%~dp0\COPYING.txt"
215
216 "%~dp0\tools\zip.exe" -j -9 -z "%OUT_PATH_NET_X86%" "%~dp0\bindings\Microsoft.NET\wrapper\bin\x86\Release\MHashDotNet384.x86.dll" "%~dp0\bindings\Microsoft.NET\example\bin\x86\Release\MHashDotNet384.exe" "%~dp0\README.html" "%~dp0\COPYING.txt" < "%~dp0\COPYING.txt"
217 "%~dp0\tools\zip.exe" -j -9 -z "%OUT_PATH_NET_X64%" "%~dp0\bindings\Microsoft.NET\wrapper\bin\x64\Release\MHashDotNet384.x64.dll" "%~dp0\bindings\Microsoft.NET\example\bin\x64\Release\MHashDotNet384.exe" "%~dp0\README.html" "%~dp0\COPYING.txt" < "%~dp0\COPYING.txt"
218
219 "%~dp0\tools\zip.exe" -j -9 -z "%OUT_PATH_JNI_X86%" "%~dp0\bindings\Java\native\bin\x86\Release\MHashJava384.x86.dll" "%~dp0\bindings\Java\wrapper\out\MHashJava384-Wrapper.jar" "%~dp0\bindings\Java\example\out\MHashJava384-Example.jar" "%~dp0\README.html" "%~dp0\COPYING.txt" < "%~dp0\COPYING.txt"
220 "%~dp0\tools\zip.exe" -j -9 -z "%OUT_PATH_JNI_X64%" "%~dp0\bindings\Java\native\bin\x64\Release\MHashJava384.x64.dll" "%~dp0\bindings\Java\wrapper\out\MHashJava384-Wrapper.jar" "%~dp0\bindings\Java\example\out\MHashJava384-Example.jar" "%~dp0\README.html" "%~dp0\COPYING.txt" < "%~dp0\COPYING.txt"
221
222 "%~dp0\tools\zip.exe" -j -9 -z "%OUT_PATH_PYC_X86%" "%~dp0\bindings\Python\native\bin\x86\Release\MHashPy384_Native.x86.pyd" "%~dp0\bindings\Python\wrapper\MHashPy384_Wrapper.py" "%~dp0\bindings\Python\wrapper\mhash.pth" "%~dp0\bindings\Python\example\Example.py" "%~dp0\README.html" "%~dp0\COPYING.txt" < "%~dp0\COPYING.txt"
223 "%~dp0\tools\zip.exe" -j -9 -z "%OUT_PATH_PYC_X64%" "%~dp0\bindings\Python\native\bin\x64\Release\MHashPy384_Native.x64.pyd" "%~dp0\bindings\Python\wrapper\MHashPy384_Wrapper.py" "%~dp0\bindings\Python\wrapper\mhash.pth" "%~dp0\bindings\Python\example\Example.py" "%~dp0\README.html" "%~dp0\COPYING.txt" < "%~dp0\COPYING.txt"
224
225 "%~dp0\tools\zip.exe" -j -9 -z "%OUT_PATH_PAS_X86%" "%~dp0\bindings\Delphi\native\bin\x86\Release\MHashDelphi384.x86.dll" "%~dp0\bindings\Delphi\wrapper\MHash384.pas" "%~dp0\bindings\Delphi\example\bin\Example.exe" "%~dp0\README.html" "%~dp0\COPYING.txt" < "%~dp0\COPYING.txt"
226
227 "%GIT2_PATH%\git.exe" archive --format tar.gz -9 --verbose --output "%OUT_PATH_SRC_GEN%" HEAD
228
229
230 REM ///////////////////////////////////////////////////////////////////////////
231 REM // Completed
232 REM ///////////////////////////////////////////////////////////////////////////
233
234 "%~dp0\tools\cecho.exe" GREEN "\nBUILD COMPLETED.\n"
235 pause
236 goto:eof
237
238
239 REM ///////////////////////////////////////////////////////////////////////////
240 REM // Failed
241 REM ///////////////////////////////////////////////////////////////////////////
242
243 :BuildHasFailed
244 "%~dp0\tools\cecho.exe" RED "\nBUILD HAS FAILED.\n"
245 pause
246 goto:eof