]> git.sur5r.net Git - bacula/bacula/blob - bacula/src/win32/build-depkgs-msvc.cmd
Fix bug # 676 - File Restoration to win32 client fails
[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 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
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 REM     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         GOTO :EOF
77
78 :ProcessArgs
79         IF "%1"=="" GOTO :EOF
80         
81         CALL :process_%1
82         SHIFT
83         GOTO :ProcessArgs
84
85 :get_source
86         SET URL=%1
87         SET SRC_DIR=%2
88         SET MAKE_SRC_ENABLE=%3
89         SET BASENAME=
90
91         IF NOT "%SRC_DIR%"=="" GOTO :get_source_make_src
92         FOR %%I IN ( %URL% ) DO (SET BASENAME=%%~nI & IF NOT "%%~xI"==".gz" IF NOT "%%~xI"==".bz2" SET SRC_DIR=%%~nI)
93         IF "%SRC_DIR%"=="" FOR %%I IN ( %BASENAME% ) DO SET SRC_DIR=%%~nI
94
95 :get_source_make_src
96         SET MAKE_SRC_DIR=
97         IF /I "%MAKE_SRC_ENABLE:~0,1%"=="y" SET MAKE_SRC_DIR=true
98         IF /I "%MAKE_SRC_ENABLE:~0,1%"=="t" SET MAKE_SRC_DIR=true
99         IF /I "%MAKE_SRC_ENABLE:~0,1%"=="1" SET MAKE_SRC_DIR=true
100
101         FOR %%I IN ( %URL% ) DO SET ARCHIVE=%%~nxI
102         
103         CD %DEPPKG_DIR%\src
104         
105         IF EXIST %ARCHIVE% GOTO :get_source_check_srcdir
106         ECHO Downloading %URL%
107         wget -nv --passive-ftp "%URL%"
108         IF NOT ERRORLEVEL 1 GOTO :get_source_extract
109         ECHO Unable to download %ARCHIVE%
110         EXIT /B 2
111
112 :get_source_check_srcdir
113         IF NOT EXIST %SRC_DIR%\nul GOTO :get_source_extract
114         IF NOT "%CLOBBER_SOURCE%"=="true" GOTO :get_source_skipped
115         IF EXIST "%SRC_DIR%\nul" RD /s /q "%SRC_DIR%"
116 :get_source_extract
117         SET TAR_ARCHIVE=
118         FOR %%I IN ( "%ARCHIVE%" ) do IF "%%~xI"==".gz" SET TAR_ARCHIVE=%%~nI
119         FOR %%I IN ( "%ARCHIVE%" ) do IF "%%~xI"==".bz2" SET TAR_ARCHIVE=%%~nI
120
121         SET TARGET_DIR=.
122         IF DEFINED MAKE_SRC_DIR IF NOT EXIST "%SRC_DIR%\nul" MKDIR %SRC_DIR%
123         IF DEFINED MAKE_SRC_DIR SET TARGET_DIR=%SRC_DIR%
124
125         ECHO Extracting %ARCHIVE%
126         7z x -bd -y -o"%TARGET_DIR%" "%ARCHIVE%" 2>&1 > "%ARCHIVE%.log"
127         IF ERRORLEVEL 1 EXIT /B 2
128         IF NOT DEFINED TAR_ARCHIVE GOTO :get_source_done
129         ECHO Extracting %TAR_ARCHIVE%
130         7z x -bd -y -o"%TARGET_DIR%" "%TARGET_DIR%\%TAR_ARCHIVE%" & del /q "%TAR_ARCHIVE%" 2>&1 >> "%ARCHIVE%.log"
131
132 :get_source_done
133         CD "%SRC_DIR%"
134         EXIT /B 0
135
136 :get_source_skipped
137         CD %SRC_DIR%
138         EXIT /B 1
139
140 :process_zlib
141         CALL :get_source %URL_ZLIB% %DIR_ZLIB% %MKD_ZLIB%
142         ECHO Building zlib
143         COPY /Y nul make.log
144 REM     XCOPY contrib\masmx86\gvmat32.asm . /Y
145 REM     XCOPY contrib\masmx86\gvmat32c.c . /Y
146 REM     XCOPY contrib\masmx86\inffas32.asm . /Y
147 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
148         CALL :do_nmake win32\Makefile.msc LOC="-D_CRT_SECURE_NO_DEPRECATE" all
149         ECHO Installing zlib
150         XCOPY zlib1.dll.manifest %DEPPKG_DIR%\bin\ /Y
151         XCOPY zlib1.dll %DEPPKG_DIR%\bin\ /Y
152         XCOPY zlib.lib %DEPPKG_DIR%\lib\ /Y
153         XCOPY zdll.lib %DEPPKG_DIR%\lib\ /Y
154         XCOPY zlib.h %DEPPKG_DIR%\include\ /Y
155         XCOPY zconf.h %DEPPKG_DIR%\include\ /Y
156         EXIT /B 0
157
158 :process_pcre
159         CALL :get_source %URL_PCRE% %DIR_PCRE% %MKD_PCRE%
160 REM     ECHO Patching PCRE
161 REM     COPY /Y nul patch.log
162 REM     do_patch pcre.patch
163         ECHO Configuring PCRE
164         ./configure CC_FOR_BUILD=gcc CXX_FOR_BUILD=g++ --host=mingw32 --prefix=%DEPPKG_DIR% --enable-utf8 --enable-unicode-properties 2>&1 > make.log
165         ECHO Building PCRE
166         do_make Makefile PREFIX=%DEPPKG_DIR% all
167         ECHO Installing PCRE
168         do_make Makefile PREFIX=%DEPPKG_DIR% install
169         EXIT /B 0
170
171 :process_pthreads
172         CALL :get_source %URL_PTHREADS% %DIR_PTHREADS% %MKD_PTHREADS%
173         ECHO Installing pthreads
174         XCOPY Pre-built\include\*.h %DEPPKG_DIR%\include\ /Y
175         XCOPY Pre-built\lib\pthreadVCE.lib %DEPPKG_DIR%\lib\ /Y
176         XCOPY Pre-built\lib\pthreadVCE.dll %DEPPKG_DIR%\bin\ /Y
177         EXIT /B 0
178
179 :process_openssl
180         CALL :get_source %URL_OPENSSL% %DIR_OPENSSL% %MKD_OPENSSL%
181         IF ERRORLEVEL 2 GOTO :OpenSSLError
182         ECHO Configuring openssl
183         perl Configure VC-WIN32 --prefix=%DEPPKG_DIR:\=/% > make.log
184         ECHO Building openssl
185         CALL ms\do_nasm
186         @ECHO off
187         CALL :do_nmake ms\ntdll.mak 
188         @ECHO off
189         ECHO Installing openssl
190         CALL :do_nmake ms\ntdll.mak install
191         EXIT /B 0
192 :OpenSSLError
193         ECHO Unable to download OpenSSL source from %URL_OPENSSL%
194         EXIT /B 1
195
196 :process_mysql
197         CALL :get_source %URL_MYSQL% %DIR_MYSQL% %MKD_MYSQL%
198         ECHO Installing mysql
199         IF EXIST ..\..\include\mysql\nul RD /s /q ..\..\include\mysql
200         XCOPY include\* ..\..\include\mysql\ /e/h/k/y 2>&1
201         XCOPY lib\opt\libmysql.lib ..\..\lib\ /y
202         XCOPY lib\opt\libmysql.dll ..\..\bin\ /y
203         EXIT /B 0
204
205 :process_postgreSQL
206         CALL :get_source %URL_POSTGRESQL% %DIR_POSTGRESQL% %MKD_POSTGRESQL%
207         IF ERRORLEVEL 2 GOTO :pstgreSQL_Error1
208         CALL :get_source %URL_POSTGRESQL_SRC% %DIR_POSTGRESQL_SRC% %MKD_POSTGRESQL_SRC%
209         IF ERRORLEVEL 2 GOTO :pstgreSQL_Error2
210 REM     ECHO Patching postgreSQL
211 REM     COPY /Y nul patch.log
212 REM     do_patch postgresql.patch
213         ECHO Installing postgreSQL
214         XCOPY ..\pgsql\include\libpq-fe.h ..\..\include\ /Y 2>&1
215         XCOPY ..\pgsql\include\postgres_ext.h ..\..\include\ /Y 2>&1
216         LIB /def:src\interfaces\libpq\libpqdll.def /out:..\..\lib\libpqdll.lib /machine:x86 /subsystem:console
217         XCOPY ..\pgsql\lib\libpq.dll ..\..\bin\ /Y
218         XCOPY ..\pgsql\lib\comerr32.dll ..\..\bin\ /Y
219         XCOPY ..\pgsql\lib\krb5_32.dll ..\..\bin\ /Y
220         XCOPY ..\pgsql\lib\libintl-2.dll ..\..\bin\ /Y
221         XCOPY ..\pgsql\lib\libiconv-2.dll ..\..\bin\ /Y
222         EXIT /B 0
223 :pstgreSQL_Error1
224         ECHO Unable to download postgreSQL binaries from %URL_POSTGRESQL%
225         EXIT /B 1
226 :pstgreSQL_Error2
227         ECHO Unable to download postgreSQL source from %URL_POSTGRESQL_SRC%
228         EXIT /B 1
229
230 :process_sqlite
231         CALL :get_source %URL_SQLITE% %DIR_SQLITE% %MKD_SQLITE%
232         CALL :get_source %URL_SQLITE_WINSRC% %DIR_SQLITE_WINSRC% %MKD_SQLITE_WINSRC%
233 REM     ECHO Patching SQLite
234 REM     COPY /Y nul patch.log
235 REM     do_patch sqlite.patch
236         ECHO Configuring SQLite
237         IF NOT EXIST bld/nul MKDIR bld
238         CD bld
239         ECHO Building SQLite
240         COPY /Y nul make.log
241         do_make ../Makefile.mingw32 CROSSTOOLS=%BIN_DIR% TLIBS="-L%DEPPKG_DIR%/lib" TCL_FLAGS="-I%DEPPKG_DIR%/include" clean all
242         ECHO Installing SQLite
243         cp -p sqlite3.exe %DEPPKG_DIR%/bin
244         cp -p libsqlite3.a %DEPPKG_DIR%/lib
245         cp -p sqlite3.h %DEPPKG_DIR%/include
246         EXIT /B 0
247
248 :process_wx
249         CALL :get_source %URL_WX% %DIR_WX% %MKD_WX%
250         IF ERRORLEVEL 2 GOTO :wx_error
251 REM     IF ERRORLEVEL 1 GOTO :wx_skip_patch
252 REM     ECHO Patching wxWidgets
253 REM     COPY /Y nul patch.log
254 REM     do_patch wx1.patch -o build/msw/config.mingw32
255 REM     do_patch wx2.patch
256 REM     find . -name makefile.gcc -exec sh -c "sed -f %SCRIPT_DIR%/patches/wx.sed {% > \`ECHO {% | sed s/\.gcc$/\.mingw32/\`" \;
257         ECHO Building wxWidgets
258         cd build\msw
259         COPY /Y nul make.log
260         CALL :do_nmake makefile.vc BUILD=release SHARED=1 VENDOR=bacula DEBUG_INFO=1 CPPFLAGS=-D_USE_32BIT_TIME_T
261         ECHO Installing wxWidgets
262         cd ..\..
263         IF EXIST ..\..\include\wx\nul RD /s /q ..\..\include\wx
264         XCOPY include\wx ..\..\include\wx\ 2>&1
265         XCOPY include\wx\generic ..\..\include\wx\generic\ /e 2>&1
266         XCOPY include\wx\msw ..\..\include\wx\msw\ /e 2>&1
267         XCOPY lib\vc_dll\*.dll ..\..\bin\ /y 
268         IF EXIST ..\..\lib\wx_dll\nul RD /s /q ..\..\lib\wx_dll
269         XCOPY lib\vc_dll\*.lib ..\..\lib\wx_dll\
270         XCOPY lib\vc_dll\msw ..\..\lib\wx_dll\msw\ /e 2>&1
271         EXIT /B 0
272 :wx_error
273         ECHO Unable to download wxWidgets source from %URL_MTX%
274         EXIT /B 1
275
276 :process_nsis
277         CALL :get_source %URL_NSIS_BIN% %DIR_NSIS_BIN% %MKD_NSIS_BIN%
278         CD ..
279         IF EXIST ..\nsis\nul RD /s /q ..\nsis
280         MOVE nsis-2.17 ..\nsis
281         EXIT /B 0
282
283 :process_mtx
284         CALL :get_source %URL_MTX% %DIR_MTX% %MKD_MTX%
285         IF ERRORLEVEL 2 GOTO :mtx_error
286         IF ERRORLEVEL 1 GOTO :mtx_skip_patch
287         ECHO Patching mtx
288         COPY /Y config.h.in config.h
289         COPY /Y Makefile.in Makefile
290         COPY /Y nul patch.log
291         CALL :do_patch mtx.patch
292         CALL :do_patch mtx-msvc1.patch
293         CALL :do_patch mtx-msvc2.patch
294 :mtx_skip_patch
295         ECHO Building mtx
296         CALL :do_nmake Makefile.msc PREFIX=%DEPPKG_DIR% all
297         ECHO Installing mtx
298         CALL :do_nmake Makefile.msc PREFIX=%DEPPKG_DIR% install
299         EXIT /B 0
300 :mtx_error
301         ECHO Unable to download mtx source from %URL_MTX%
302         EXIT /B 1
303
304 :process_mt
305         CALL :get_source %URL_MT% %DIR_MT% %MKD_MT%
306         IF ERRORLEVEL 2 GOTO :mt_error
307         IF ERRORLEVEL 1 GOTO :mt_skip_patch
308         ECHO Patching mt
309         COPY /Y nul patch.log
310         CALL :do_patch mt.patch
311 :mt_skip_patch
312         ECHO Building mt
313         CALL :do_nmake Makefile.msc PREFIX=%DEPPKG_DIR% all
314         ECHO Installing mt
315         CALL :do_nmake Makefile.msc PREFIX=%DEPPKG_DIR% install
316         EXIT /B 0
317 :mt_error
318         ECHO Unable to download mt source from %URL_MT%
319         EXIT /B 1
320
321 :process_sed
322         CALL :get_source %URL_SED% %DIR_SED% %MKD_SED%
323         IF ERRORLEVEL 2 GOTO :sed_error
324         IF ERRORLEVEL 1 GOTO :sed_skip_patch
325         ECHO Patching sed
326         COPY /Y nul patch.log
327         CALL :do_patch sed_msc.patch
328 :sed_skip_patch
329         ECHO Building sed
330         CALL :do_nmake Makefile.msc all
331         ECHO Installing sed
332         CALL :do_nmake Makefile.msc install
333         EXIT /B 0
334 :sed_error
335         ECHO Unable to download sed source from %URL_MT%
336         EXIT /B 1
337
338 :do_patch
339         SET PATCH_FILE=%SCRIPT_DIR%\patches\%1
340         SHIFT
341         patch -f -p0 %2 %3 %4 %5 %6 %7 %8 %9 >>patch.log < %PATCH_FILE%
342         IF NOT ERRORLEVEL 1 EXIT/B 0
343         ECHO Patch failed - Check %CD%\patch.log > con
344         EXIT /B 1
345
346 :do_nmake
347         nmake /nologo -f %* 2>&1 | tee -a make.log | sed -nf "%DEPPKG_DIR%\src\parse_output.sed"
348         IF NOT ERRORLEVEL 1 EXIT/B 0
349         ECHO Make failed - Check %CD%\make.log > con
350         EXIT /B 1
351
352 #vss
353 #Need to download from Microsoft