blob: 0c4487c9e332c60cce04d6763ce9dca0a66e0740 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
|
@ECHO OFF
REM setup all paths
PUSHD %~dp0\..\..\..
SET base_dir=%CD%
POPD
SET builddeps_dir=%base_dir%\project\BuildDependencies
SET bin_dir=%builddeps_dir%\bin
SET msys_dir=%builddeps_dir%\msys64
IF NOT EXIST %msys_dir% (SET msys_dir=%builddeps_dir%\msys32)
SET sed_exe=%msys_dir%\usr\bin\sed.exe
REM read the version values from version.txt
SET version_props=^
APP_NAME ^
COMPANY_NAME ^
PACKAGE_DESCRIPTION ^
PACKAGE_IDENTITY ^
PACKAGE_PUBLISHER ^
VERSION_MAJOR ^
VERSION_MINOR ^
VERSION_TAG ^
VERSION_CODE ^
WEBSITE
FOR %%p IN (%version_props%) DO (
FOR /f "delims=" %%v IN ('%sed_exe% -n "/%%p/ s/%%p *//p" %base_dir%\version.txt') DO SET %%p=%%v
)
SET APP_VERSION=%VERSION_MAJOR%.%VERSION_MINOR%
IF NOT [%VERSION_TAG%] == [] (
SET APP_VERSION=%APP_VERSION%-%VERSION_TAG%
)
rem ----Usage----
rem BuildSetup [clean|noclean] [noprompt] [nobinaryaddons] [sh]
rem clean to force a full rebuild
rem noclean to force a build without clean
rem noprompt to avoid all prompts
rem nobinaryaddons to skip building binary addons
rem sh to use sh shell instead rxvt
CLS
COLOR 1B
TITLE %APP_NAME% for Windows Build Script
rem ----PURPOSE----
rem - Create a working application build with a single click
rem -------------------------------------------------------------
rem Config
rem If you get an error that Visual studio was not found, SET your path for VSNET main executable.
rem -------------------------------------------------------------
rem CONFIG START
SET buildmode=ask
SET promptlevel=prompt
SET buildbinaryaddons=true
SET exitcode=0
SET useshell=rxvt
FOR %%b in (%*) DO (
IF %%b==clean SET buildmode=clean
IF %%b==noclean SET buildmode=noclean
IF %%b==noprompt SET promptlevel=noprompt
IF %%b==nobinaryaddons SET buildbinaryaddons=false
IF %%b==sh SET useshell=sh
)
SET PreferredToolArchitecture=x64
SET buildconfig=Release
set WORKSPACE=%base_dir%\kodi-build.%TARGET_PLATFORM%
:: sets the BRANCH env var
FOR /f %%a IN ('getbranch.bat') DO SET BRANCH=%%a
rem CONFIG END
rem -------------------------------------------------------------
goto COMPILE_CMAKE_EXE
:COMPILE_CMAKE_EXE
ECHO Wait while preparing the build.
ECHO ------------------------------------------------------------
ECHO Compiling %APP_NAME% branch %BRANCH%...
IF %buildmode%==clean (
RMDIR /S /Q %WORKSPACE%
)
MKDIR %WORKSPACE%
PUSHD %WORKSPACE%
cmake.exe -G "%cmakeGenerator%" %cmakeProps% %base_dir%
IF %errorlevel%==1 (
set DIETEXT="%APP_NAME%.EXE failed to build!"
goto DIE
)
cmake.exe --build . --config "%buildconfig%"
IF %errorlevel%==1 (
set DIETEXT="%APP_NAME%.EXE failed to build!"
goto DIE
)
set EXE="%WORKSPACE%\%buildconfig%\%APP_NAME%.exe"
set PDB="%WORKSPACE%\%buildconfig%\%APP_NAME%.pdb"
set D3D="%WORKSPACE%\D3DCompile*.DLL"
POPD
ECHO Done!
ECHO ------------------------------------------------------------
IF "%cmakeProps%" NEQ "" GOTO MAKE_APPX
GOTO MAKE_BUILD_EXE
:MAKE_BUILD_EXE
ECHO Copying files...
PUSHD %base_dir%\project\Win32BuildSetup
IF EXIST BUILD_WIN32\application rmdir BUILD_WIN32\application /S /Q
rem Add files to exclude.txt that should not be included in the installer
Echo Thumbs.db>>exclude.txt
Echo Desktop.ini>>exclude.txt
Echo dsstdfx.bin>>exclude.txt
Echo exclude.txt>>exclude.txt
Echo xbmc.log>>exclude.txt
Echo xbmc.old.log>>exclude.txt
Echo kodi.log>>exclude.txt
Echo kodi.old.log>>exclude.txt
rem Exclude userdata files
Echo userdata\advancedsettings.xml>>exclude.txt
Echo userdata\guisettings.xml>>exclude.txt
Echo userdata\mediasources.xml>>exclude.txt
Echo userdata\ModeLines_template.xml>>exclude.txt
Echo userdata\passwords.xml>>exclude.txt
Echo userdata\profiles.xml>>exclude.txt
Echo userdata\sources.xml>>exclude.txt
Echo userdata\upnpserver.xml>>exclude.txt
rem Exclude userdata folders
Echo userdata\addon_data\>>exclude.txt
Echo userdata\cache\>>exclude.txt
Echo userdata\database\>>exclude.txt
Echo userdata\playlists\>>exclude.txt
Echo userdata\thumbnails\>>exclude.txt
rem Exclude dlls from system to avoid duplicates
Echo .dll>>exclude_dll.txt
md BUILD_WIN32\application
xcopy %EXE% BUILD_WIN32\application > NUL
xcopy %D3D% BUILD_WIN32\application > NUL
xcopy %base_dir%\userdata BUILD_WIN32\application\userdata /E /Q /I /Y /EXCLUDE:exclude.txt > NUL
copy %base_dir%\LICENSE.md BUILD_WIN32\application > NUL
copy %base_dir%\privacy-policy.txt BUILD_WIN32\application > NUL
copy %base_dir%\known_issues.txt BUILD_WIN32\application > NUL
xcopy %WORKSPACE%\addons BUILD_WIN32\application\addons /E /Q /I /Y /EXCLUDE:exclude.txt > NUL
xcopy %WORKSPACE%\*.dll BUILD_WIN32\application /Q /I /Y > NUL
xcopy %WORKSPACE%\libbluray-*.jar BUILD_WIN32\application /Q /I /Y > NUL
xcopy %WORKSPACE%\system BUILD_WIN32\application\system /E /Q /I /Y /EXCLUDE:exclude.txt+exclude_dll.txt > NUL
xcopy %WORKSPACE%\media BUILD_WIN32\application\media /E /Q /I /Y /EXCLUDE:exclude.txt > NUL
REM create AppxManifest.xml
"%sed_exe%" ^
-e 's/@APP_NAME@/%APP_NAME%/g' ^
-e 's/@COMPANY_NAME@/%COMPANY_NAME%/g' ^
-e 's/@TARGET_ARCHITECTURE@/%TARGET_ARCHITECTURE%/g' ^
-e 's/@VERSION_CODE@/%VERSION_CODE%/g' ^
-e 's/@PACKAGE_IDENTITY@/%PACKAGE_IDENTITY%/g' ^
-e 's/@PACKAGE_PUBLISHER@/%PACKAGE_PUBLISHER%/g' ^
-e 's/@PACKAGE_DESCRIPTION@/%PACKAGE_DESCRIPTION%/g' ^
"AppxManifest.xml.in" > "BUILD_WIN32\application\AppxManifest.xml"
SET build_path=%CD%
IF %buildbinaryaddons%==true (
ECHO ------------------------------------------------------------
ECHO Building addons...
cd %base_dir%\tools\buildsteps\windows
IF %buildmode%==clean (
call make-addons.bat clean
)
call make-addons.bat
IF %errorlevel%==1 (
set DIETEXT="failed to build addons"
cd %build_path%
goto DIE
)
cd %build_path%
IF EXIST error.log del error.log > NUL
)
rem restore color and title, some scripts mess these up
COLOR 1B
TITLE %APP_NAME% for Windows Build Script
IF EXIST exclude.txt del exclude.txt > NUL
IF EXIST exclude_dll.txt del exclude_dll.txt > NUL
del /s /q /f BUILD_WIN32\application\*.so > NUL
del /s /q /f BUILD_WIN32\application\*.h > NUL
del /s /q /f BUILD_WIN32\application\*.cpp > NUL
del /s /q /f BUILD_WIN32\application\*.exp > NUL
del /s /q /f BUILD_WIN32\application\*.lib > NUL
POPD
ECHO ------------------------------------------------------------
ECHO Build Succeeded!
GOTO NSIS_EXE
:NSIS_EXE
ECHO ------------------------------------------------------------
ECHO Generating installer includes...
PUSHD %base_dir%\project\Win32BuildSetup
call genNsisIncludes.bat
ECHO ------------------------------------------------------------
call getdeploydependencies.bat
CALL extract_git_rev.bat > NUL
SET APP_SETUPFILE=%APP_NAME%Setup-%GIT_REV%-%BRANCH%-%TARGET_ARCHITECTURE%.exe
SET APP_PDBFILE=%APP_NAME%Setup-%GIT_REV%-%BRANCH%-%TARGET_ARCHITECTURE%.pdb
ECHO Creating installer %APP_SETUPFILE%...
IF EXIST %APP_SETUPFILE% del %APP_SETUPFILE% > NUL
rem get path to makensis.exe from registry, first try tab delim
FOR /F "tokens=2* delims= " %%A IN ('REG QUERY "HKLM\Software\NSIS" /ve') DO SET NSISExePath=%%B
IF NOT EXIST "%NSISExePath%" (
rem try with space delim instead of tab
FOR /F "tokens=2* delims= " %%A IN ('REG QUERY "HKLM\Software\NSIS" /ve') DO SET NSISExePath=%%B
)
IF NOT EXIST "%NSISExePath%" (
rem fails on localized windows (Default) becomes (Par D�faut)
FOR /F "tokens=3* delims= " %%A IN ('REG QUERY "HKLM\Software\NSIS" /ve') DO SET NSISExePath=%%B
)
IF NOT EXIST "%NSISExePath%" (
FOR /F "tokens=3* delims= " %%A IN ('REG QUERY "HKLM\Software\NSIS" /ve') DO SET NSISExePath=%%B
)
rem proper x64 registry checks
IF NOT EXIST "%NSISExePath%" (
ECHO using x64 registry entries
FOR /F "tokens=2* delims= " %%A IN ('REG QUERY "HKLM\Software\Wow6432Node\NSIS" /ve') DO SET NSISExePath=%%B
)
IF NOT EXIST "%NSISExePath%" (
rem try with space delim instead of tab
FOR /F "tokens=2* delims= " %%A IN ('REG QUERY "HKLM\Software\Wow6432Node\NSIS" /ve') DO SET NSISExePath=%%B
)
IF NOT EXIST "%NSISExePath%" (
rem on win 7 x64, the previous fails
FOR /F "tokens=3* delims= " %%A IN ('REG QUERY "HKLM\Software\Wow6432Node\NSIS" /ve') DO SET NSISExePath=%%B
)
IF NOT EXIST "%NSISExePath%" (
rem try with space delim instead of tab
FOR /F "tokens=3* delims= " %%A IN ('REG QUERY "HKLM\Software\Wow6432Node\NSIS" /ve') DO SET NSISExePath=%%B
)
SET NSISExe=%NSISExePath%\makensis.exe
"%NSISExe%" /V1 /X"SetCompressor /FINAL lzma" /Dapp_root="%CD%\BUILD_WIN32" /DAPP_NAME="%APP_NAME%" /DTARGET_ARCHITECTURE="%TARGET_ARCHITECTURE%" /DVERSION_NUMBER="%VERSION_CODE%.0" /DCOMPANY_NAME="%COMPANY_NAME%" /DWEBSITE="%WEBSITE%" /Dapp_revision="%GIT_REV%" /Dapp_branch="%BRANCH%" /D%TARGET_ARCHITECTURE% "genNsisInstaller.nsi"
IF NOT EXIST "%APP_SETUPFILE%" (
POPD
set DIETEXT=Failed to create %APP_SETUPFILE%. NSIS installed?
goto DIE
)
copy %PDB% %APP_PDBFILE% > nul
POPD
ECHO ------------------------------------------------------------
ECHO Done!
ECHO Setup is located at %CD%\%APP_SETUPFILE%
ECHO ------------------------------------------------------------
GOTO END
:MAKE_APPX
set app_ext=msix
call %base_dir%\project\Win32BuildSetup\extract_git_rev.bat > NUL
for /F %%a IN ('dir /B /S %WORKSPACE%\AppPackages ^| findstr /I /R "%APP_NAME%_.*_%TARGET_ARCHITECTURE%_%buildconfig%\.%app_ext%$"') DO (
copy /Y %%a %base_dir%\%APP_NAME%-%GIT_REV%-%BRANCH%-%TARGET_ARCHITECTURE%.%app_ext%
copy /Y %%~dpna.cer %base_dir%\%APP_NAME%-%GIT_REV%-%BRANCH%-%TARGET_ARCHITECTURE%.cer
copy /Y %%~dpna.appxsym %base_dir%\%APP_NAME%-%GIT_REV%-%BRANCH%-%TARGET_ARCHITECTURE%.appxsym
goto END
)
rem Release builds don't have Release in it's name
for /F %%a IN ('dir /B /S %WORKSPACE%\AppPackages ^| findstr /I /R "%APP_NAME%_.*_%TARGET_ARCHITECTURE%\.%app_ext%$"') DO (
copy /Y %%a %base_dir%\%APP_NAME%-%GIT_REV%-%BRANCH%-%TARGET_ARCHITECTURE%.%app_ext%
copy /Y %%~dpna.cer %base_dir%\%APP_NAME%-%GIT_REV%-%BRANCH%-%TARGET_ARCHITECTURE%.cer
copy /Y %%~dpna.appxsym %base_dir%\%APP_NAME%-%GIT_REV%-%BRANCH%-%TARGET_ARCHITECTURE%.appxsym
goto END
)
rem apxx file has win32 instead of x86 in it's name
if %TARGET_ARCHITECTURE%==x86 (
for /F %%a IN ('dir /B /S %WORKSPACE%\AppPackages ^| findstr /I /R "%APP_NAME%_.*_win32_%buildconfig%\.%app_ext%$"') DO (
copy /Y %%a %base_dir%\%APP_NAME%-%GIT_REV%-%BRANCH%-%TARGET_ARCHITECTURE%.%app_ext%
copy /Y %%~dpna.cer %base_dir%\%APP_NAME%-%GIT_REV%-%BRANCH%-%TARGET_ARCHITECTURE%.cer
copy /Y %%~dpna.appxsym %base_dir%\%APP_NAME%-%GIT_REV%-%BRANCH%-%TARGET_ARCHITECTURE%.appxsym
goto END
)
rem Release builds don't have Release in it's name
for /F %%a IN ('dir /B /S %WORKSPACE%\AppPackages ^| findstr /I /R "%APP_NAME%_.*_win32\.%app_ext%$"') DO (
copy /Y %%a %base_dir%\%APP_NAME%-%GIT_REV%-%BRANCH%-%TARGET_ARCHITECTURE%.%app_ext%
copy /Y %%~dpna.cer %base_dir%\%APP_NAME%-%GIT_REV%-%BRANCH%-%TARGET_ARCHITECTURE%.cer
copy /Y %%~dpna.appxsym %base_dir%\%APP_NAME%-%GIT_REV%-%BRANCH%-%TARGET_ARCHITECTURE%.appxsym
goto END
)
)
:DIE
ECHO ------------------------------------------------------------
ECHO !-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-
ECHO ERROR ERROR ERROR ERROR ERROR ERROR ERROR ERROR ERROR
ECHO !-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-
set DIETEXT=ERROR: %DIETEXT%
echo %DIETEXT%
SET exitcode=1
ECHO ------------------------------------------------------------
GOTO END
:END
IF %promptlevel% NEQ noprompt (
ECHO Press any key to exit...
pause > NUL
)
EXIT /B %exitcode%
|