summaryrefslogtreecommitdiffstats
path: root/tools/buildsteps/windows/BuildSetup.bat
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--tools/buildsteps/windows/BuildSetup.bat300
1 files changed, 300 insertions, 0 deletions
diff --git a/tools/buildsteps/windows/BuildSetup.bat b/tools/buildsteps/windows/BuildSetup.bat
new file mode 100644
index 0000000..6d2180a
--- /dev/null
+++ b/tools/buildsteps/windows/BuildSetup.bat
@@ -0,0 +1,300 @@
+@ECHO OFF
+REM setup all paths
+PUSHD %~dp0\..\..\..
+SET base_dir=%CD%
+POPD
+
+REM read the version values from version.txt
+FOR /f "tokens=1,*" %%i IN (%base_dir%\version.txt) DO SET %%i=%%j
+
+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
+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%" -A %cmakeArch% -T host=x64 %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
+ Echo .so\>>exclude.txt
+ Echo .h\>>exclude.txt
+ Echo .cpp\>>exclude.txt
+ Echo .exp\>>exclude.txt
+ Echo .lib\>>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
+ @PowerShell "(GC .\AppxManifest.xml.in)|%%{$_" ^
+ " -Replace '@APP_NAME@', '%APP_NAME%'" ^
+ " -Replace '@COMPANY_NAME@', '%COMPANY_NAME%'" ^
+ " -Replace '@TARGET_ARCHITECTURE@', '%TARGET_ARCHITECTURE%'" ^
+ " -Replace '@VERSION_CODE@', '%VERSION_CODE%'" ^
+ " -Replace '@PACKAGE_IDENTITY@', '%PACKAGE_IDENTITY%'" ^
+ " -Replace '@PACKAGE_PUBLISHER@', '%PACKAGE_PUBLISHER%'" ^
+ " -Replace '@PACKAGE_DESCRIPTION@', '%PACKAGE_DESCRIPTION%'" ^
+ "}|SC .\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 title, some scripts mess these up
+ 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
+ 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 determine if current system is 32 or 64 bits
+ SET HOST_BITS=32
+ IF %PROCESSOR_ARCHITECTURE% == AMD64 SET HOST_BITS=64
+ IF %PROCESSOR_ARCHITECTURE% == ARM64 SET HOST_BITS=64
+
+ IF %HOST_BITS% == 64 (
+ SET NSIS_REG_KEY=HKLM\Software\Wow6432Node\NSIS
+ ) ELSE (
+ SET NSIS_REG_KEY=HKLM\Software\NSIS
+ )
+
+ rem get path to makensis.exe from registry, first try tab delim
+ FOR /F "tokens=2* delims= " %%A IN ('REG QUERY "%NSIS_REG_KEY%" /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 "%NSIS_REG_KEY%" /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 "%NSIS_REG_KEY%" /ve') DO SET NSISExePath=%%B
+ )
+
+ IF NOT EXIST "%NSISExePath%" (
+ FOR /F "tokens=3* delims= " %%A IN ('REG QUERY "%NSIS_REG_KEY%" /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
+ ECHO ------------------------------------------------------------
+ ECHO Done!
+ ECHO Setup is located at %CD%\%APP_SETUPFILE%
+ ECHO ------------------------------------------------------------
+ POPD
+ GOTO END
+
+:MAKE_APPX
+ set app_ext=msix
+ set app_path=%base_dir%\project\UWPBuildSetup
+ if not exist "%app_path%" mkdir %app_path%
+ 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 %app_path%\%APP_NAME%-%GIT_REV%-%BRANCH%-%TARGET_ARCHITECTURE%.%app_ext%
+ copy /Y %%~dpna.cer %app_path%\%APP_NAME%-%GIT_REV%-%BRANCH%-%TARGET_ARCHITECTURE%.cer
+ copy /Y %%~dpna.appxsym %app_path%\%APP_NAME%-%GIT_REV%-%BRANCH%-%TARGET_ARCHITECTURE%.appxsym
+ goto END_APPX
+ )
+ 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 %app_path%\%APP_NAME%-%GIT_REV%-%BRANCH%-%TARGET_ARCHITECTURE%.%app_ext%
+ copy /Y %%~dpna.cer %app_path%\%APP_NAME%-%GIT_REV%-%BRANCH%-%TARGET_ARCHITECTURE%.cer
+ copy /Y %%~dpna.appxsym %app_path%\%APP_NAME%-%GIT_REV%-%BRANCH%-%TARGET_ARCHITECTURE%.appxsym
+ goto END_APPX
+ )
+
+ 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 %app_path%\%APP_NAME%-%GIT_REV%-%BRANCH%-%TARGET_ARCHITECTURE%.%app_ext%
+ copy /Y %%~dpna.cer %app_path%\%APP_NAME%-%GIT_REV%-%BRANCH%-%TARGET_ARCHITECTURE%.cer
+ copy /Y %%~dpna.appxsym %app_path%\%APP_NAME%-%GIT_REV%-%BRANCH%-%TARGET_ARCHITECTURE%.appxsym
+ goto END_APPX
+ )
+
+ 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 %app_path%\%APP_NAME%-%GIT_REV%-%BRANCH%-%TARGET_ARCHITECTURE%.%app_ext%
+ copy /Y %%~dpna.cer %app_path%\%APP_NAME%-%GIT_REV%-%BRANCH%-%TARGET_ARCHITECTURE%.cer
+ copy /Y %%~dpna.appxsym %app_path%\%APP_NAME%-%GIT_REV%-%BRANCH%-%TARGET_ARCHITECTURE%.appxsym
+ goto END_APPX
+ )
+ )
+
+:END_APPX
+ ECHO ------------------------------------------------------------
+ ECHO Done!
+ ECHO Setup is located at %app_path%
+ ECHO ------------------------------------------------------------
+ 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%