]> git.sur5r.net Git - bacula/bacula/blob - bacula/src/win32/build-depkgs-msvc.cmd
Fix path issues.
[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
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         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         IF ERRORLEVEL 2 GOTO :sqlite_error
233         IF ERRORLEVEL 1 GOTO :sqlite_skip_patch
234         ECHO Patching SQLite
235         COPY /Y nul patch.log
236         CALL :do_patch sqlite_msc.patch
237 :sqlite_skip_patch
238         ECHO Configuring SQLite
239         IF NOT EXIST bld/nul MKDIR bld
240         CD bld
241         ECHO Building SQLite
242         COPY /Y nul make.log
243         CALL :do_nmake ../Makefile.msvc clean all
244         ECHO Installing SQLite
245         COPY sqlite3.exe %DEPPKG_DIR%\bin
246         COPY sqlite3.lib %DEPPKG_DIR%\lib
247         COPY sqlite3.h %DEPPKG_DIR%\include
248         EXIT /B 0
249 :sqlite_error
250         ECHO Unable to download sqlite source from %URL_SQLITE%
251         EXIT /B 1
252
253 :process_wx
254         CALL :get_source %URL_WX% %DIR_WX% %MKD_WX%
255         IF ERRORLEVEL 2 GOTO :wx_error
256 REM     IF ERRORLEVEL 1 GOTO :wx_skip_patch
257 REM     ECHO Patching wxWidgets
258 REM     COPY /Y nul patch.log
259 REM     do_patch wx1.patch -o build/msw/config.mingw32
260 REM     do_patch wx2.patch
261 REM     find . -name makefile.gcc -exec sh -c "sed -f %SCRIPT_DIR%/patches/wx.sed {% > \`ECHO {% | sed s/\.gcc$/\.mingw32/\`" \;
262         ECHO Building wxWidgets
263         cd build\msw
264         COPY /Y nul make.log
265         CALL :do_nmake makefile.vc BUILD=release SHARED=1 VENDOR=bacula DEBUG_INFO=1 CPPFLAGS=-D_USE_32BIT_TIME_T
266         ECHO Installing wxWidgets
267         cd ..\..
268         IF EXIST ..\..\include\wx\nul RD /s /q ..\..\include\wx
269         XCOPY include\wx ..\..\include\wx\ 2>&1
270         XCOPY include\wx\generic ..\..\include\wx\generic\ /e 2>&1
271         XCOPY include\wx\msw ..\..\include\wx\msw\ /e 2>&1
272         XCOPY lib\vc_dll\*.dll ..\..\bin\ /y 
273         IF EXIST ..\..\lib\wx_dll\nul RD /s /q ..\..\lib\wx_dll
274         XCOPY lib\vc_dll\*.lib ..\..\lib\wx_dll\
275         XCOPY lib\vc_dll\msw ..\..\lib\wx_dll\msw\ /e 2>&1
276         EXIT /B 0
277 :wx_error
278         ECHO Unable to download wxWidgets source from %URL_MTX%
279         EXIT /B 1
280
281 :process_nsis
282         CALL :get_source %URL_NSIS_BIN% %DIR_NSIS_BIN% %MKD_NSIS_BIN%
283         CD ..
284         IF EXIST ..\nsis\nul RD /s /q ..\nsis
285         MOVE nsis-2.17 ..\nsis
286         EXIT /B 0
287
288 :process_mtx
289         CALL :get_source %URL_MTX% %DIR_MTX% %MKD_MTX%
290         IF ERRORLEVEL 2 GOTO :mtx_error
291         IF ERRORLEVEL 1 GOTO :mtx_skip_patch
292         ECHO Patching mtx
293         COPY /Y config.h.in config.h
294         COPY /Y Makefile.in Makefile
295         COPY /Y nul patch.log
296         CALL :do_patch mtx.patch
297         CALL :do_patch mtx-msvc1.patch
298         CALL :do_patch mtx-msvc2.patch
299 :mtx_skip_patch
300         ECHO Building mtx
301         CALL :do_nmake Makefile.msc PREFIX=%DEPPKG_DIR% all
302         ECHO Installing mtx
303         CALL :do_nmake Makefile.msc PREFIX=%DEPPKG_DIR% install
304         EXIT /B 0
305 :mtx_error
306         ECHO Unable to download mtx source from %URL_MTX%
307         EXIT /B 1
308
309 :process_mt
310         CALL :get_source %URL_MT% %DIR_MT% %MKD_MT%
311         IF ERRORLEVEL 2 GOTO :mt_error
312         IF ERRORLEVEL 1 GOTO :mt_skip_patch
313         ECHO Patching mt
314         COPY /Y nul patch.log
315         CALL :do_patch mt.patch
316 :mt_skip_patch
317         ECHO Building mt
318         CALL :do_nmake Makefile.msc PREFIX=%DEPPKG_DIR% all
319         ECHO Installing mt
320         CALL :do_nmake Makefile.msc PREFIX=%DEPPKG_DIR% install
321         EXIT /B 0
322 :mt_error
323         ECHO Unable to download mt source from %URL_MT%
324         EXIT /B 1
325
326 :process_sed
327         CALL :get_source %URL_SED% %DIR_SED% %MKD_SED%
328         IF ERRORLEVEL 2 GOTO :sed_error
329         IF ERRORLEVEL 1 GOTO :sed_skip_patch
330         ECHO Patching sed
331         COPY /Y nul patch.log
332         CALL :do_patch sed_msc.patch
333 :sed_skip_patch
334         ECHO Building sed
335         CALL :do_nmake Makefile.msc all
336         ECHO Installing sed
337         CALL :do_nmake Makefile.msc install
338         EXIT /B 0
339 :sed_error
340         ECHO Unable to download sed source from %URL_MT%
341         EXIT /B 1
342
343 :do_patch
344         SET PATCH_FILE=%SCRIPT_DIR%\patches\%1
345         SHIFT
346         patch -f -p0 %2 %3 %4 %5 %6 %7 %8 %9 >>patch.log < %PATCH_FILE%
347         IF NOT ERRORLEVEL 1 EXIT/B 0
348         ECHO Patch failed - Check %CD%\patch.log > con
349         EXIT /B 1
350
351 :do_nmake
352         nmake /nologo -f %* 2>&1 | tee -a make.log | sed -nf "%DEPPKG_DIR%\src\parse_output.sed"
353         IF NOT ERRORLEVEL 1 EXIT/B 0
354         ECHO Make failed - Check %CD%\make.log > con
355         EXIT /B 1
356
357 #vss
358 #Need to download from Microsoft