]> git.sur5r.net Git - bacula/bacula/blob - bacula/src/win32/build-depkgs-msvc.cmd
Update the Microsoft Visual Studio build to match the MinGW32 build.
[bacula/bacula] / bacula / src / win32 / build-depkgs-msvc.cmd
1 @echo off
2 SETLOCAL
3
4 SET PERL_PATH=
5 FOR /F "tokens=1" %%I in ( "perl.exe" ) DO SET PERL_PATH=%%~$PATH:I
6
7 IF NOT "%PERL_PATH%"=="" GOTO :PERL_OK
8 ECHO Perl must be in your PATH.  Please fix and rerun this script!
9 EXIT /B 1
10
11 :PERL_OK
12
13 SET CLOBBER_SOURCE=
14
15 FOR /F "eol=# delims=| tokens=1-4" %%I in ( External-msvc ) DO SET URL_%%I=%%J & SET DIR_%%I=%%K & SET MKD_%%I=%%L
16
17 SET CWD=%CD%
18 FOR %%I IN ( %0 ) DO CD %%~dpI
19 SET SCRIPT_DIR=%CD%
20
21 CD ..\..\..
22 set TOP_DIR=%CD%
23
24 cd %TOP_DIR%/depkgs-msvc
25 set DEPPKG_DIR=%CD%
26
27 cd %DEPPKG_DIR%
28
29 IF /I "%CLOBBER_SOURCE:~0,1%"=="y" SET CLOBBER_SOURCE=true
30 IF /I "%CLOBBER_SOURCE:~0,1%"=="t" SET CLOBBER_SOURCE=true
31 IF /I "%CLOBBER_SOURCE:~0,1%"=="1" SET CLOBBER_SOURCE=true
32
33 SET PATH=%DEPPKG_DIR%\tools;%PATH%
34 SET INCLUDE=%INCLUDE%;%DEPPKG_DIR%\include
35 SET LIB=%LIB%;%DEPPKG_DIR%\lib
36
37 IF NOT EXIST bin\nul MKDIR bin
38 IF NOT EXIST src\nul MKDIR src
39 IF NOT EXIST include\nul MKDIR include
40 IF NOT EXIST lib\nul MKDIR lib
41
42 CD src
43
44 COPY NUL parse_output.sed
45 REM ECHO /\\$/N >>parse_output.sed
46 REM ECHO s/\\\n// >>parse_output.sed
47 ECHO s/\t\+/ /g >>parse_output.sed
48 ECHO s/ \+/ /g >>parse_output.sed
49 ECHO / [Ee]rror: /p >>parse_output.sed
50 REM ECHO s;.*Entering directory[ ]\+.%DEPPKG_DIR%/\([^^ ]\+\).;Entering \1;p >>parse_output.sed
51 REM ECHO s;.*Leaving directory[ ]\+.%DEPPKG_DIR%/\([^^ ]\+.\).;Leaving \1;p >>parse_output.sed
52 ECHO /[Cc][Ll] \^|[Ll][Ii][Nn][Kk] \^|[Ll][Ii][Bb] /!d >>parse_output.sed
53 ECHO s; \(\.\.\\\)\+; ;g >>parse_output.sed
54 ECHO s; \.\\; ;g >>parse_output.sed
55 ECHO s/.* \([^^ ]\+\(\.[Cc]\^|\.[Cc][Pp][Pp]\^|\.[Cc][Cc]\^|\.[Cc][Xx][Xx]\)\)\( .*\^|\)$/Compiling \1/p >>parse_output.sed
56 ECHO s/.* \([^^ ]\+\.[Aa][Ss][Mm]\)\( .*\^|\)$/Assembling \1/p >>parse_output.sed
57 ECHO s/.* \/[Oo][Uu][Tt]:\(\.\\\)*\(\.\.\\\)*\([^^ ]\+\)\( .*\^|\)$/Linking \3/p >>parse_output.sed
58 REM ECHO s/.*[Ll][Ii][Bb] [^^ ]\+ \([^^ ]\+\)\(\( [^^ ]\+\.o\)\+\)/Updating \1 -\2/p >>parse_output.sed
59
60 IF NOT "%1"=="" GOTO :ProcessArgs
61         CALL :process_zlib
62 REM     CALL :process_pcre
63         CALL :process_pthreads
64         CALL :process_openssl
65         CALL :process_mysql
66 REM     CALL :process_sqlite
67         CALL :process_postgreSQL
68         CALL :process_wx
69 REM     CALL :process_scons
70         CALL :process_nsis
71         CALL :process_mtx
72         CALL :process_mt
73         GOTO :EOF
74
75 :ProcessArgs
76         IF "%1"=="" GOTO :EOF
77         
78         CALL :process_%1
79         SHIFT
80         GOTO :ProcessArgs
81
82 :get_source
83         SET URL=%1
84         SET SRC_DIR=%2
85         SET MAKE_SRC_ENABLE=%3
86         SET BASENAME=
87
88         IF NOT "%SRC_DIR%"=="" GOTO :get_source_make_src
89         FOR %%I IN ( %URL% ) DO (SET BASENAME=%%~nI & IF NOT "%%~xI"==".gz" IF NOT "%%~xI"==".bz2" SET SRC_DIR=%%~nI)
90         IF "%SRC_DIR%"=="" FOR %%I IN ( %BASENAME% ) DO SET SRC_DIR=%%~nI
91
92 :get_source_make_src
93         SET MAKE_SRC_DIR=
94         IF /I "%MAKE_SRC_ENABLE:~0,1%"=="y" SET MAKE_SRC_DIR=true
95         IF /I "%MAKE_SRC_ENABLE:~0,1%"=="t" SET MAKE_SRC_DIR=true
96         IF /I "%MAKE_SRC_ENABLE:~0,1%"=="1" SET MAKE_SRC_DIR=true
97
98         FOR %%I IN ( %URL% ) DO SET ARCHIVE=%%~nxI
99         
100         CD %DEPPKG_DIR%\src
101         
102         IF EXIST %ARCHIVE% GOTO :get_source_check_srcdir
103         ECHO Downloading %URL%
104         wget -nv --passive-ftp "%URL%"
105         IF NOT ERRORLEVEL 1 GOTO :get_source_extract
106         ECHO Unable to download %ARCHIVE%
107         EXIT /B 2
108
109 :get_source_check_srcdir
110         IF NOT EXIST %SRC_DIR%\nul GOTO :get_source_extract
111         IF NOT "%CLOBBER_SOURCE%"=="true" GOTO :get_source_skipped
112         IF EXIST "%SRC_DIR%\nul" RD /s /q "%SRC_DIR%"
113 :get_source_extract
114         SET TAR_ARCHIVE=
115         FOR %%I IN ( "%ARCHIVE%" ) do IF "%%~xI"==".gz" SET TAR_ARCHIVE=%%~nI
116         FOR %%I IN ( "%ARCHIVE%" ) do IF "%%~xI"==".bz2" SET TAR_ARCHIVE=%%~nI
117
118         SET TARGET_DIR=.
119         IF DEFINED MAKE_SRC_DIR IF NOT EXIST "%SRC_DIR%\nul" MKDIR %SRC_DIR%
120         IF DEFINED MAKE_SRC_DIR SET TARGET_DIR=%SRC_DIR%
121
122         ECHO Extracting %ARCHIVE%
123         7z x -bd -y -o"%TARGET_DIR%" "%ARCHIVE%" 2>&1 > "%ARCHIVE%.log"
124         IF ERRORLEVEL 1 EXIT /B 2
125         IF NOT DEFINED TAR_ARCHIVE GOTO :get_source_done
126         ECHO Extracting %TAR_ARCHIVE%
127         7z x -bd -y -o"%TARGET_DIR%" "%TARGET_DIR%\%TAR_ARCHIVE%" & del /q "%TAR_ARCHIVE%" 2>&1 >> "%ARCHIVE%.log"
128
129 :get_source_done
130         CD "%SRC_DIR%"
131         EXIT /B 0
132
133 :get_source_skipped
134         CD %SRC_DIR%
135         EXIT /B 1
136
137 :process_zlib
138         CALL :get_source %URL_ZLIB% %DIR_ZLIB% %MKD_ZLIB%
139         ECHO Building zlib
140         COPY /Y nul make.log
141 REM     XCOPY contrib\masmx86\gvmat32.asm . /Y
142 REM     XCOPY contrib\masmx86\gvmat32c.c . /Y
143 REM     XCOPY contrib\masmx86\inffas32.asm . /Y
144 REM     CALL :do_nmake win32\Makefile.msc AS=nasmw ASFLAGS= LOC="-D_CRT_SECURE_NO_DEPRECATE -DASMV -DASMINF" OBJA="gvmat32c.obj gvmat32.obj inffas32.obj" all
145         CALL :do_nmake win32\Makefile.msc LOC="-D_CRT_SECURE_NO_DEPRECATE" all
146         ECHO Installing zlib
147         XCOPY zlib1.dll.manifest %DEPPKG_DIR%\bin\ /Y
148         XCOPY zlib1.dll %DEPPKG_DIR%\bin\ /Y
149         XCOPY zlib.lib %DEPPKG_DIR%\lib\ /Y
150         XCOPY zdll.lib %DEPPKG_DIR%\lib\ /Y
151         XCOPY zlib.h %DEPPKG_DIR%\include\ /Y
152         XCOPY zconf.h %DEPPKG_DIR%\include\ /Y
153         EXIT /B 0
154
155 :process_pcre
156         CALL :get_source %URL_PCRE% %DIR_PCRE% %MKD_PCRE%
157 REM     ECHO Patching PCRE
158 REM     COPY /Y nul patch.log
159 REM     do_patch pcre.patch
160         ECHO Configuring PCRE
161         ./configure CC_FOR_BUILD=gcc CXX_FOR_BUILD=g++ --host=mingw32 --prefix=%DEPPKG_DIR% --enable-utf8 --enable-unicode-properties 2>&1 > make.log
162         ECHO Building PCRE
163         do_make Makefile PREFIX=%DEPPKG_DIR% all
164         ECHO Installing PCRE
165         do_make Makefile PREFIX=%DEPPKG_DIR% install
166         EXIT /B 0
167
168 :process_pthreads
169         CALL :get_source %URL_PTHREADS% %DIR_PTHREADS% %MKD_PTHREADS%
170         ECHO Installing pthreads
171         XCOPY Pre-built\include\*.h %DEPPKG_DIR%\include\ /Y
172         XCOPY Pre-built\lib\pthreadVCE.lib %DEPPKG_DIR%\lib\ /Y
173         XCOPY Pre-built\lib\pthreadVCE.dll %DEPPKG_DIR%\bin\ /Y
174         EXIT /B 0
175
176 :process_openssl
177         CALL :get_source %URL_OPENSSL% %DIR_OPENSSL% %MKD_OPENSSL%
178         IF ERRORLEVEL 2 GOTO :OpenSSLError
179         ECHO Configuring openssl
180         perl Configure VC-WIN32 --prefix=%DEPPKG_DIR:\=/% > make.log
181         ECHO Building openssl
182         CALL ms\do_nasm
183         @ECHO off
184         CALL :do_nmake ms\ntdll.mak 
185         @ECHO off
186         ECHO Installing openssl
187         CALL :do_nmake ms\ntdll.mak install
188         EXIT /B 0
189 :OpenSSLError
190         ECHO Unable to download OpenSSL source from %URL_OPENSSL%
191         EXIT /B 1
192
193 :process_mysql
194         CALL :get_source %URL_MYSQL% %DIR_MYSQL% %MKD_MYSQL%
195         ECHO Installing mysql
196         IF EXIST ..\..\include\mysql\nul RD /s /q ..\..\include\mysql
197         XCOPY include\* ..\..\include\mysql\ /e/h/k/y 2>&1
198         XCOPY lib\opt\libmysql.lib ..\..\lib\ /y
199         XCOPY lib\opt\libmysql.dll ..\..\bin\ /y
200         EXIT /B 0
201
202 :process_postgreSQL
203         CALL :get_source %URL_POSTGRESQL% %DIR_POSTGRESQL% %MKD_POSTGRESQL%
204         IF ERRORLEVEL 2 GOTO :pstgreSQL_Error1
205         CALL :get_source %URL_POSTGRESQL_SRC% %DIR_POSTGRESQL_SRC% %MKD_POSTGRESQL_SRC%
206         IF ERRORLEVEL 2 GOTO :pstgreSQL_Error2
207 REM     ECHO Patching postgreSQL
208 REM     COPY /Y nul patch.log
209 REM     do_patch postgresql.patch
210         ECHO Installing postgreSQL
211         XCOPY ..\pgsql\include\libpq-fe.h ..\..\include\ /Y 2>&1
212         XCOPY ..\pgsql\include\postgres_ext.h ..\..\include\ /Y 2>&1
213         LIB /def:src\interfaces\libpq\libpqdll.def /out:..\..\lib\libpqdll.lib /machine:x86 /subsystem:console
214         XCOPY ..\pgsql\lib\libpq.dll ..\..\bin\ /Y
215         XCOPY ..\pgsql\lib\comerr32.dll ..\..\bin\ /Y
216         XCOPY ..\pgsql\lib\krb5_32.dll ..\..\bin\ /Y
217         XCOPY ..\pgsql\lib\libintl-2.dll ..\..\bin\ /Y
218         XCOPY ..\pgsql\lib\libiconv-2.dll ..\..\bin\ /Y
219         EXIT /B 0
220 :pstgreSQL_Error1
221         ECHO Unable to download postgreSQL binaries from %URL_POSTGRESQL%
222         EXIT /B 1
223 :pstgreSQL_Error2
224         ECHO Unable to download postgreSQL source from %URL_POSTGRESQL_SRC%
225         EXIT /B 1
226
227 :process_sqlite
228         CALL :get_source %URL_SQLITE% %DIR_SQLITE% %MKD_SQLITE%
229         CALL :get_source %URL_SQLITE_WINSRC% %DIR_SQLITE_WINSRC% %MKD_SQLITE_WINSRC%
230 REM     ECHO Patching SQLite
231 REM     COPY /Y nul patch.log
232 REM     do_patch sqlite.patch
233         ECHO Configuring SQLite
234         IF NOT EXIST bld/nul MKDIR bld
235         CD bld
236         ECHO Building SQLite
237         COPY /Y nul make.log
238         do_make ../Makefile.mingw32 CROSSTOOLS=%BIN_DIR% TLIBS="-L%DEPPKG_DIR%/lib" TCL_FLAGS="-I%DEPPKG_DIR%/include" clean all
239         ECHO Installing SQLite
240         cp -p sqlite3.exe %DEPPKG_DIR%/bin
241         cp -p libsqlite3.a %DEPPKG_DIR%/lib
242         cp -p sqlite3.h %DEPPKG_DIR%/include
243         EXIT /B 0
244
245 :process_wx
246         CALL :get_source %URL_WX% %DIR_WX% %MKD_WX%
247         IF ERRORLEVEL 2 GOTO :wx_error
248 REM     IF ERRORLEVEL 1 GOTO :wx_skip_patch
249 REM     ECHO Patching wxWidgets
250 REM     COPY /Y nul patch.log
251 REM     do_patch wx1.patch -o build/msw/config.mingw32
252 REM     do_patch wx2.patch
253 REM     find . -name makefile.gcc -exec sh -c "sed -f %SCRIPT_DIR%/patches/wx.sed {% > \`ECHO {% | sed s/\.gcc$/\.mingw32/\`" \;
254         ECHO Building wxWidgets
255         cd build\msw
256         COPY /Y nul make.log
257         CALL :do_nmake makefile.vc BUILD=release SHARED=1 VENDOR=bacula DEBUG_INFO=1 CPPFLAGS=-D_USE_32BIT_TIME_T
258         ECHO Installing wxWidgets
259         cd ..\..
260         IF EXIST ..\..\include\wx\nul RD /s /q ..\..\include\wx
261         XCOPY include\wx ..\..\include\wx\ 2>&1
262         XCOPY include\wx\generic ..\..\include\wx\generic\ /e 2>&1
263         XCOPY include\wx\msw ..\..\include\wx\msw\ /e 2>&1
264         XCOPY lib\vc_dll\*.dll ..\..\bin\ /y 
265         IF EXIST ..\..\lib\wx_dll\nul RD /s /q ..\..\lib\wx_dll
266         XCOPY lib\vc_dll\*.lib ..\..\lib\wx_dll\
267         XCOPY lib\vc_dll\msw ..\..\lib\wx_dll\msw\ /e 2>&1
268         EXIT /B 0
269 :wx_error
270         ECHO Unable to download wxWidgets source from %URL_MTX%
271         EXIT /B 1
272
273 :process_nsis
274         CALL :get_source %URL_NSIS_BIN% %DIR_NSIS_BIN% %MKD_NSIS_BIN%
275         CD ..
276         IF EXIST ..\nsis\nul RD /s /q ..\nsis
277         MOVE nsis-2.17 ..\nsis
278         EXIT /B 0
279
280 :process_mtx
281         CALL :get_source %URL_MTX% %DIR_MTX% %MKD_MTX%
282         IF ERRORLEVEL 2 GOTO :mtx_error
283         IF ERRORLEVEL 1 GOTO :mtx_skip_patch
284         ECHO Patching mtx
285         COPY /Y config.h.in config.h
286         COPY /Y Makefile.in Makefile
287         COPY /Y nul patch.log
288         CALL :do_patch mtx.patch
289         CALL :do_patch mtx-msvc1.patch
290         CALL :do_patch mtx-msvc2.patch
291 :mtx_skip_patch
292         ECHO Building mtx
293         CALL :do_nmake Makefile.msc PREFIX=%DEPPKG_DIR% all
294         ECHO Installing mtx
295         CALL :do_nmake Makefile.msc PREFIX=%DEPPKG_DIR% install
296         EXIT /B 0
297 :mtx_error
298         ECHO Unable to download mtx source from %URL_MTX%
299         EXIT /B 1
300
301 :process_mt
302         CALL :get_source %URL_MT% %DIR_MT% %MKD_MT%
303         IF ERRORLEVEL 2 GOTO :mt_error
304         IF ERRORLEVEL 1 GOTO :mt_skip_patch
305         ECHO Patching mt
306         COPY /Y nul patch.log
307         CALL :do_patch mt.patch
308 :mt_skip_patch
309         ECHO Building mt
310         CALL :do_nmake Makefile.msc PREFIX=%DEPPKG_DIR% all
311         ECHO Installing mt
312         CALL :do_nmake Makefile.msc PREFIX=%DEPPKG_DIR% install
313         EXIT /B 0
314 :mt_error
315         ECHO Unable to download mt source from %URL_MT%
316         EXIT /B 1
317
318 :do_patch
319         SET PATCH_FILE=%SCRIPT_DIR%\patches\%1
320         SHIFT
321         patch -f -p0 %2 %3 %4 %5 %6 %7 %8 %9 >>patch.log < %PATCH_FILE%
322         IF NOT ERRORLEVEL 1 EXIT/B 0
323         ECHO Patch failed - Check %CD%\patch.log > con
324         EXIT /B 1
325
326 :do_nmake
327         nmake /nologo -f %* 2>&1 | tee -a make.log | sed -nf "%DEPPKG_DIR%\src\parse_output.sed"
328         IF NOT ERRORLEVEL 1 EXIT/B 0
329         ECHO Make failed - Check %CD%\make.log > con
330         EXIT /B 1
331
332 #vss
333 #Need to download from Microsoft