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