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