]> git.sur5r.net Git - bacula/bacula/blob - bacula/src/win32/build-depkgs-msvc.cmd
Fix msvc build problems.
[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 IF "%CLOBBER_SOURCE%"=="" SET CLOBBER_SOURCE=false
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 IF NOT EXIST %TOP_DIR%\depkgs-msvc\nul MD %TOP_DIR%\depkgs-msvc
25
26 cd %TOP_DIR%\depkgs-msvc
27 set DEPPKG_DIR=%CD%
28
29 cd %DEPPKG_DIR%
30
31 IF /I "%CLOBBER_SOURCE:~0,1%"=="y" SET CLOBBER_SOURCE=true
32 IF /I "%CLOBBER_SOURCE:~0,1%"=="t" SET CLOBBER_SOURCE=true
33 IF /I "%CLOBBER_SOURCE:~0,1%"=="1" SET CLOBBER_SOURCE=true
34
35 SET PATH=%DEPPKG_DIR%\tools;%PATH%
36 SET INCLUDE=%INCLUDE%;%DEPPKG_DIR%\include
37 SET LIB=%LIB%;%DEPPKG_DIR%\lib
38
39 IF NOT EXIST bin\nul MKDIR bin
40 IF NOT EXIST src\nul MKDIR src
41 IF NOT EXIST include\nul MKDIR include
42 IF NOT EXIST lib\nul MKDIR lib
43
44 CD src
45
46 COPY NUL parse_output.sed >nul 2>&1
47 REM ECHO /\\$/N >>parse_output.sed
48 REM ECHO s/\\\n// >>parse_output.sed
49 ECHO s/\t\+/ /g >>parse_output.sed
50 ECHO s/ \+/ /g >>parse_output.sed
51 ECHO / [Ee]rror: /p >>parse_output.sed
52 REM ECHO s;.*Entering directory[ ]\+.%DEPPKG_DIR%/\([^^ ]\+\).;Entering \1;p >>parse_output.sed
53 REM ECHO s;.*Leaving directory[ ]\+.%DEPPKG_DIR%/\([^^ ]\+.\).;Leaving \1;p >>parse_output.sed
54 ECHO /[Cc][Ll] \^|[Ll][Ii][Nn][Kk] \^|[Ll][Ii][Bb] /!d >>parse_output.sed
55 ECHO s; \(\.\.\\\)\+; ;g >>parse_output.sed
56 ECHO s; \.\\; ;g >>parse_output.sed
57 ECHO s/.* \([^^ ]\+\(\.[Cc]\^|\.[Cc][Pp][Pp]\^|\.[Cc][Cc]\^|\.[Cc][Xx][Xx]\)\)\( .*\^|\)$/Compiling \1/p >>parse_output.sed
58 ECHO s/.* \([^^ ]\+\.[Aa][Ss][Mm]\)\( .*\^|\)$/Assembling \1/p >>parse_output.sed
59 ECHO s/.* \/[Oo][Uu][Tt]:\(\.\\\)*\(\.\.\\\)*\([^^ ]\+\)\( .*\^|\)$/Linking \3/p >>parse_output.sed
60 REM ECHO s/.*[Ll][Ii][Bb] [^^ ]\+ \([^^ ]\+\)\(\( [^^ ]\+\.o\)\+\)/Updating \1 -\2/p >>parse_output.sed
61
62 IF NOT "%1"=="" GOTO :ProcessArgs
63         CALL :process_zlib
64 REM     CALL :process_pcre
65         CALL :process_pthreads
66         CALL :process_openssl
67         CALL :process_mysql
68         CALL :process_sqlite
69         CALL :process_postgreSQL
70         CALL :process_wx
71 REM     CALL :process_scons
72         CALL :process_nsis
73         CALL :process_mtx
74         CALL :process_mt
75         CALL :process_sed
76         CALL :process_cmd_utils
77         CALL :process_mkisofs
78         CALL :process_dvd_rw_tools
79         GOTO :EOF
80
81 :ProcessArgs
82         IF "%1"=="" GOTO :EOF
83         
84         CALL :process_%1
85         SHIFT
86         GOTO :ProcessArgs
87
88 :get_source
89         SET URL=%1
90         SET SRC_DIR=%2
91         SET MAKE_SRC_ENABLE=%3
92         SET BASENAME=
93
94         IF NOT "%SRC_DIR%"=="" GOTO :get_source_make_src
95         FOR %%I IN ( %URL% ) DO (SET BASENAME=%%~nI& IF NOT "%%~xI"==".gz" IF NOT "%%~xI"==".bz2" SET SRC_DIR=%%~nI)
96         IF "%SRC_DIR%"=="" FOR %%I IN ( %BASENAME% ) DO SET SRC_DIR=%%~nI
97
98 :get_source_make_src
99         SET MAKE_SRC_DIR=
100         IF /I "%MAKE_SRC_ENABLE:~0,1%"=="y" SET MAKE_SRC_DIR=true
101         IF /I "%MAKE_SRC_ENABLE:~0,1%"=="t" SET MAKE_SRC_DIR=true
102         IF /I "%MAKE_SRC_ENABLE:~0,1%"=="1" SET MAKE_SRC_DIR=true
103
104         FOR %%I IN ( %URL% ) DO ( SET ARCHIVE=%%~nxI& SET ARCHIVE_EXT=%%~xI)
105         
106         CD %DEPPKG_DIR%\src
107         
108         IF EXIST %ARCHIVE% GOTO :get_source_check_srcdir
109         ECHO Downloading %URL%
110         wget -nv --passive-ftp "%URL%"
111         IF NOT ERRORLEVEL 1 GOTO :get_source_extract
112         ECHO Unable to download %ARCHIVE%
113         EXIT /B 2
114
115 :get_source_check_srcdir
116         IF /I "%ARCHIVE_EXT%"==".exe" EXIT /B 0
117         IF NOT EXIST %SRC_DIR%\nul GOTO :get_source_extract
118         IF NOT "%CLOBBER_SOURCE%"=="true" GOTO :get_source_skipped
119         IF EXIST %SRC_DIR%\nul RD /s /q "%SRC_DIR%"
120 :get_source_extract
121         IF /I "%ARCHIVE_EXT%"==".exe" EXIT /B 0
122         SET TAR_ARCHIVE=
123         FOR %%I IN ( "%ARCHIVE%" ) do IF "%%~xI"==".gz" SET TAR_ARCHIVE=%%~nI
124         FOR %%I IN ( "%ARCHIVE%" ) do IF "%%~xI"==".bz2" SET TAR_ARCHIVE=%%~nI
125
126         SET TARGET_DIR=.
127         IF DEFINED MAKE_SRC_DIR IF NOT EXIST %SRC_DIR%\nul MKDIR %SRC_DIR%
128         IF DEFINED MAKE_SRC_DIR SET TARGET_DIR=%SRC_DIR%
129
130         ECHO Extracting %ARCHIVE%
131         7z x -bd -y -o"%TARGET_DIR%" "%ARCHIVE%" 2>&1 > "%ARCHIVE%.log"
132         IF ERRORLEVEL 1 EXIT /B 2
133         IF NOT DEFINED TAR_ARCHIVE GOTO :get_source_done
134         ECHO Extracting %TAR_ARCHIVE%
135         7z x -bd -y -o"%TARGET_DIR%" "%TARGET_DIR%\%TAR_ARCHIVE%" & del /q "%TAR_ARCHIVE%" 2>&1 >> "%ARCHIVE%.log"
136
137 :get_source_done
138         CD "%SRC_DIR%"
139         EXIT /B 0
140
141 :get_source_skipped
142         CD %SRC_DIR%
143         EXIT /B 1
144
145 :process_zlib
146         CALL :get_source %URL_ZLIB% %DIR_ZLIB% %MKD_ZLIB%
147         ECHO Building zlib
148         COPY /Y nul make.log
149 REM     XCOPY contrib\masmx86\gvmat32.asm . /Y
150 REM     XCOPY contrib\masmx86\gvmat32c.c . /Y
151 REM     XCOPY contrib\masmx86\inffas32.asm . /Y
152 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
153         CALL :do_nmake win32\Makefile.msc LOC="-D_CRT_SECURE_NO_DEPRECATE" all
154         ECHO Installing zlib
155         XCOPY zlib1.dll.manifest %DEPPKG_DIR%\bin\ /Y
156         XCOPY zlib1.dll %DEPPKG_DIR%\bin\ /Y
157         XCOPY zlib.lib %DEPPKG_DIR%\lib\ /Y
158         XCOPY zdll.lib %DEPPKG_DIR%\lib\ /Y
159         XCOPY zlib.h %DEPPKG_DIR%\include\ /Y
160         XCOPY zconf.h %DEPPKG_DIR%\include\ /Y
161         EXIT /B 0
162
163 :process_pcre
164         CALL :get_source %URL_PCRE% %DIR_PCRE% %MKD_PCRE%
165 REM     ECHO Patching PCRE
166 REM     COPY /Y nul patch.log
167 REM     do_patch pcre.patch
168         ECHO Configuring PCRE
169         ./configure CC_FOR_BUILD=gcc CXX_FOR_BUILD=g++ --host=mingw32 --prefix=%DEPPKG_DIR% --enable-utf8 --enable-unicode-properties 2>&1 > make.log
170         ECHO Building PCRE
171         do_make Makefile PREFIX=%DEPPKG_DIR% all
172         ECHO Installing PCRE
173         do_make Makefile PREFIX=%DEPPKG_DIR% install
174         EXIT /B 0
175
176 :process_pthreads
177         CALL :get_source %URL_PTHREADS% %DIR_PTHREADS% %MKD_PTHREADS%
178         FOR %%I IN ( %URL_PTHREADS% ) DO (SET ARCHIVE=%%~nxI)
179         IF EXIST %SRC_DIR%\nul GOTO :install_pthreads
180         ECHO Extracting %ARCHIVE%
181         7z x -bd -y -o"%DIR_PTHREADS%" "%ARCHIVE%" 2>&1 > "%ARCHIVE%.log"
182 :install_pthreads
183         CD %DIR_PTHREADS%
184         ECHO Installing pthreads
185         XCOPY Pre-built\include\*.h %DEPPKG_DIR%\include\ /Y
186         XCOPY Pre-built\lib\pthreadVCE.lib %DEPPKG_DIR%\lib\ /Y
187         XCOPY Pre-built\lib\pthreadVCE.dll %DEPPKG_DIR%\bin\ /Y
188         EXIT /B 0
189
190 :process_openssl
191         CALL :get_source %URL_OPENSSL% %DIR_OPENSSL% %MKD_OPENSSL%
192         IF ERRORLEVEL 2 GOTO :OpenSSLError
193         ECHO Configuring openssl
194         perl Configure VC-WIN32 --prefix=%DEPPKG_DIR:\=/% > make.log
195         ECHO Building openssl
196         CALL ms\do_nasm
197         @ECHO off
198         CALL :do_nmake ms\ntdll.mak 
199         @ECHO off
200         ECHO Installing openssl
201         CALL :do_nmake ms\ntdll.mak install
202         EXIT /B 0
203 :OpenSSLError
204         ECHO Unable to download OpenSSL source from %URL_OPENSSL%
205         EXIT /B 1
206
207 :process_mysql
208         CALL :get_source %URL_MYSQL% %DIR_MYSQL% %MKD_MYSQL%
209         ECHO Installing mysql
210         IF EXIST ..\..\include\mysql\nul RD /s /q ..\..\include\mysql
211         XCOPY include\* ..\..\include\mysql\ /e/h/k/y 2>&1
212         XCOPY lib\opt\libmysql.lib ..\..\lib\ /y
213         XCOPY lib\opt\libmysql.dll ..\..\bin\ /y
214         EXIT /B 0
215
216 :process_postgreSQL
217         CALL :get_source %URL_POSTGRESQL% %DIR_POSTGRESQL% %MKD_POSTGRESQL%
218         IF ERRORLEVEL 2 GOTO :pstgreSQL_Error1
219         CALL :get_source %URL_POSTGRESQL_SRC% %DIR_POSTGRESQL_SRC% %MKD_POSTGRESQL_SRC%
220         IF ERRORLEVEL 2 GOTO :pstgreSQL_Error2
221 REM     ECHO Patching postgreSQL
222 REM     COPY /Y nul patch.log
223 REM     do_patch postgresql.patch
224         ECHO Installing postgreSQL
225         XCOPY ..\pgsql\include\libpq-fe.h ..\..\include\ /Y 2>&1
226         XCOPY ..\pgsql\include\postgres_ext.h ..\..\include\ /Y 2>&1
227         LIB /def:src\interfaces\libpq\libpqdll.def /out:..\..\lib\libpqdll.lib /machine:x86 /subsystem:console
228         XCOPY ..\pgsql\lib\libpq.dll ..\..\bin\ /Y
229         XCOPY ..\pgsql\lib\comerr32.dll ..\..\bin\ /Y
230         XCOPY ..\pgsql\lib\krb5_32.dll ..\..\bin\ /Y
231         XCOPY ..\pgsql\lib\libintl-2.dll ..\..\bin\ /Y
232         XCOPY ..\pgsql\lib\libiconv-2.dll ..\..\bin\ /Y
233         EXIT /B 0
234 :pstgreSQL_Error1
235         ECHO Unable to download postgreSQL binaries from %URL_POSTGRESQL%
236         EXIT /B 1
237 :pstgreSQL_Error2
238         ECHO Unable to download postgreSQL source from %URL_POSTGRESQL_SRC%
239         EXIT /B 1
240
241 :process_sqlite
242         CALL :get_source %URL_SQLITE% %DIR_SQLITE% %MKD_SQLITE%
243         IF ERRORLEVEL 2 GOTO :sqlite_error
244         IF ERRORLEVEL 1 GOTO :sqlite_skip_patch
245         ECHO Patching SQLite
246         COPY /Y nul patch.log
247         CALL :do_patch sqlite_msc.patch
248 :sqlite_skip_patch
249         ECHO Configuring SQLite
250         IF NOT EXIST bld/nul MKDIR bld
251         CD bld
252         ECHO Building SQLite
253         COPY /Y nul make.log
254         CALL :do_nmake ../Makefile.msvc clean all
255         ECHO Installing SQLite
256         COPY sqlite3.exe %DEPPKG_DIR%\bin
257         COPY sqlite3.exe.manifest %DEPPKG_DIR%\bin
258         COPY sqlite3.lib %DEPPKG_DIR%\lib
259         COPY sqlite3.h %DEPPKG_DIR%\include
260         EXIT /B 0
261 :sqlite_error
262         ECHO Unable to download sqlite source from %URL_SQLITE%
263         EXIT /B 1
264
265 :process_wx
266         CALL :get_source %URL_WX% %DIR_WX% %MKD_WX%
267         IF ERRORLEVEL 2 GOTO :wx_error
268 REM     IF ERRORLEVEL 1 GOTO :wx_skip_patch
269 REM     ECHO Patching wxWidgets
270 REM     COPY /Y nul patch.log
271 REM     do_patch wx1.patch -o build/msw/config.mingw32
272 REM     do_patch wx2.patch
273 REM     find . -name makefile.gcc -exec sh -c "sed -f %SCRIPT_DIR%/patches/wx.sed {% > \`ECHO {% | sed s/\.gcc$/\.mingw32/\`" \;
274         ECHO Building wxWidgets
275         cd build\msw
276         COPY /Y nul make.log
277         CALL :do_nmake makefile.vc BUILD=release SHARED=1 VENDOR=bacula DEBUG_INFO=1 CPPFLAGS=-D_USE_32BIT_TIME_T
278         ECHO Installing wxWidgets
279         cd ..\..
280         IF EXIST ..\..\include\wx\nul RD /s /q ..\..\include\wx
281         XCOPY include\wx ..\..\include\wx\ 2>&1
282         XCOPY include\wx\generic ..\..\include\wx\generic\ /e 2>&1
283         XCOPY include\wx\msw ..\..\include\wx\msw\ /e 2>&1
284         XCOPY lib\vc_dll\*.dll ..\..\bin\ /y 
285         IF EXIST ..\..\lib\wx_dll\nul RD /s /q ..\..\lib\wx_dll
286         XCOPY lib\vc_dll\*.lib ..\..\lib\wx_dll\
287         XCOPY lib\vc_dll\msw ..\..\lib\wx_dll\msw\ /e 2>&1
288         EXIT /B 0
289 :wx_error
290         ECHO Unable to download wxWidgets source from %URL_MTX%
291         EXIT /B 1
292
293 :process_nsis
294         CALL :get_source %URL_NSIS_BIN% %DIR_NSIS_BIN% %MKD_NSIS_BIN%
295         CD ..
296         IF EXIST ..\nsis\nul RD /s /q ..\nsis
297         MOVE nsis-2.17 ..\nsis
298         EXIT /B 0
299
300 :process_mtx
301         CALL :get_source %URL_MTX% %DIR_MTX% %MKD_MTX%
302         IF ERRORLEVEL 2 GOTO :mtx_error
303         IF ERRORLEVEL 1 GOTO :mtx_skip_patch
304         ECHO Patching mtx
305         COPY /Y config.h.in config.h
306         COPY /Y Makefile.in Makefile
307         COPY /Y nul patch.log
308         CALL :do_patch mtx.patch
309         CALL :do_patch mtx-msvc1.patch
310         CALL :do_patch mtx-msvc2.patch
311 :mtx_skip_patch
312         ECHO Building mtx
313         CALL :do_nmake Makefile.msc PREFIX=%DEPPKG_DIR% all
314         ECHO Installing mtx
315         CALL :do_nmake Makefile.msc PREFIX=%DEPPKG_DIR% install
316         EXIT /B 0
317 :mtx_error
318         ECHO Unable to download mtx source from %URL_MTX%
319         EXIT /B 1
320
321 :process_mt
322         CALL :get_source %URL_MT% %DIR_MT% %MKD_MT%
323         IF ERRORLEVEL 2 GOTO :mt_error
324         IF ERRORLEVEL 1 GOTO :mt_skip_patch
325         ECHO Patching mt
326         COPY /Y nul patch.log
327         CALL :do_patch mt.patch
328 :mt_skip_patch
329         ECHO Building mt
330         CALL :do_nmake Makefile.msc PREFIX=%DEPPKG_DIR% all
331         ECHO Installing mt
332         CALL :do_nmake Makefile.msc PREFIX=%DEPPKG_DIR% install
333         EXIT /B 0
334 :mt_error
335         ECHO Unable to download mt source from %URL_MT%
336         EXIT /B 1
337
338 :process_sed
339         CALL :get_source %URL_SED% %DIR_SED% %MKD_SED%
340         IF ERRORLEVEL 2 GOTO :sed_error
341         IF ERRORLEVEL 1 GOTO :sed_skip_patch
342         ECHO Patching sed
343         COPY /Y nul patch.log
344         CALL :do_patch sed_msc.patch
345 :sed_skip_patch
346         ECHO Building sed
347         CALL :do_nmake Makefile.msc all
348         ECHO Installing sed
349         CALL :do_nmake Makefile.msc install
350         EXIT /B 0
351 :sed_error
352         ECHO Unable to download sed source from %URL_MT%
353         EXIT /B 1
354
355 :process_cmd_utils
356         CALL :get_source %URL_CMD_UTILS% %DIR_CMD_UTILS% %MKD_CMD_UTILS%
357         IF ERRORLEVEL 2 GOTO :cmd_utils_error
358         IF ERRORLEVEL 1 GOTO :cmd_utils_skip_patch
359 REM     ECHO Patching cmd-utils
360 REM     COPY /Y nul patch.log
361 REM     CALL :do_patch cmd_utils_msc.patch
362 :cmd_utils_skip_patch
363         ECHO Building cmd-utils
364         vcbuild /nologo cmd-utils.sln "Release|WIN32" 2>&1 | tee -a make.log | sed -nf "%DEPPKG_DIR%\src\parse_output.sed"
365         IF ERRORLEVEL 1 GOTO :cmd_utils_build_error
366         ECHO Installing cmd-utils
367         XCOPY Release\*.exe %DEPPKG_DIR%\bin
368         EXIT /B 0
369 :cmd_utils_build_error
370         ECHO Make failed - Check %CD%\make.log > con
371         EXIT /B 1
372 :cmd_utils_error
373         ECHO Unable to download cmd-utils source from %URL_MT%
374         EXIT /B 1
375
376 :process_mkisofs
377         CALL :get_source %URL_MKISOFS% %DIR_MKISOFS% %MKD_MKISOFS%
378         IF ERRORLEVEL 2 GOTO :mkisofs_error
379         ECHO Installing mkisofs
380         FOR %%i IN ( %URL_MKISOFS% ) DO XCOPY %DEPPKG_DIR%\src\%%~nxi %DEPPKG_DIR%\bin /Y /Q >nul 2>&1
381         EXIT /B 0
382 :mkisofs_error
383         ECHO Unable to download mkisofs source from %URL_MKISOFS%
384         EXIT /B 1
385
386 :process_dvd_rw_tools
387         CALL :get_source %URL_DVD_RW_TOOLS% %DIR_DVD_RW_TOOLS% %MKD_DVD_RW_TOOLS%
388         IF ERRORLEVEL 2 GOTO :dvd_rw_tools_error
389         IF ERRORLEVEL 1 GOTO :dvd_rw_tools_skip_patch
390         ECHO Patching dvd+rw-tools
391         COPY /Y nul patch.log
392         CALL :do_patch dvd+rw-tools.patch
393 :dvd_rw_tools_skip_patch
394         ECHO Building dvd+rw-tools
395         IF NOT EXIST Release\nul MKDIR Release
396         CALL :do_nmake Makefile.msc dvd+rw-tools
397         ECHO Installing dvd+rw-tools
398         CALL :do_nmake Makefile.msc prefix=%DEPPKG_DIR% install
399         EXIT /B 0
400 :dvd_rw_tools_error
401         ECHO Unable to download dvd+rw-tools source from %URL_DVD_RW_TOOLS%
402         EXIT /B 1
403
404 :do_patch
405         SET PATCH_FILE=%SCRIPT_DIR%\patches\%1
406         SHIFT
407         patch -f -p0 %2 %3 %4 %5 %6 %7 %8 %9 >>patch.log < %PATCH_FILE%
408         IF NOT ERRORLEVEL 1 EXIT/B 0
409         ECHO Patch failed - Check %CD%\patch.log > con
410         EXIT /B 1
411
412 :do_nmake
413         nmake /nologo -f %* 2>&1 | tee -a make.log | sed -nf "%DEPPKG_DIR%\src\parse_output.sed"
414         IF NOT ERRORLEVEL 1 EXIT /B 0
415         ECHO Make failed - Check %CD%\make.log > con
416         EXIT /B 1
417
418 #vss
419 #Need to download from Microsoft