From 0a143165b4540486d5984e0ce9670a5634812e66 Mon Sep 17 00:00:00 2001 From: Rechi Date: Sat, 29 Apr 2017 18:50:43 +0200 Subject: [buildsteps][windows] BuildSetup.bat --- project/Win32BuildSetup/AppxManifest.xml.in | 2 +- project/Win32BuildSetup/BuildSetup.bat | 289 ---------------------- project/Win32BuildSetup/genNsisInstaller.nsi | 6 +- project/Win32BuildSetup/getbranch.bat | 48 ---- project/Win32BuildSetup/getdeploydependencies.bat | 4 +- tools/buildsteps/windows/BuildSetup.bat | 270 ++++++++++++++++++++ tools/buildsteps/windows/getbranch.bat | 48 ++++ tools/buildsteps/windows/win32/BuildSetup.bat | 11 + 8 files changed, 335 insertions(+), 343 deletions(-) delete mode 100644 project/Win32BuildSetup/BuildSetup.bat delete mode 100644 project/Win32BuildSetup/getbranch.bat create mode 100644 tools/buildsteps/windows/BuildSetup.bat create mode 100644 tools/buildsteps/windows/getbranch.bat create mode 100644 tools/buildsteps/windows/win32/BuildSetup.bat diff --git a/project/Win32BuildSetup/AppxManifest.xml.in b/project/Win32BuildSetup/AppxManifest.xml.in index bcb22129fc..992f80c68e 100644 --- a/project/Win32BuildSetup/AppxManifest.xml.in +++ b/project/Win32BuildSetup/AppxManifest.xml.in @@ -1,6 +1,6 @@ - + Kodi XBMC Foundation diff --git a/project/Win32BuildSetup/BuildSetup.bat b/project/Win32BuildSetup/BuildSetup.bat deleted file mode 100644 index 52101a37a2..0000000000 --- a/project/Win32BuildSetup/BuildSetup.bat +++ /dev/null @@ -1,289 +0,0 @@ -@ECHO OFF -SETLOCAL ENABLEDELAYEDEXPANSION -REM setup all paths -SET cur_dir=%CD% -SET base_dir=%cur_dir%\..\.. -SET builddeps_dir=%cur_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 awk_exe=%msys_dir%\usr\bin\awk.exe -SET sed_exe=%msys_dir%\usr\bin\sed.exe - -REM read the version values from version.txt -FOR /f %%i IN ('%awk_exe% "/APP_NAME/ {print $2}" %base_dir%\version.txt') DO SET APP_NAME=%%i -FOR /f %%i IN ('%awk_exe% "/COMPANY_NAME/ {print $2}" %base_dir%\version.txt') DO SET COMPANY_NAME=%%i -FOR /f %%i IN ('%awk_exe% "/WEBSITE/ {print $2}" %base_dir%\version.txt') DO SET WEBSITE=%%i -FOR /f %%i IN ('%awk_exe% "/VERSION_MAJOR/ {print $2}" %base_dir%\version.txt') DO SET MAJOR=%%i -FOR /f %%i IN ('%awk_exe% "/VERSION_MINOR/ {print $2}" %base_dir%\version.txt') DO SET MINOR=%%i -FOR /f %%i IN ('%awk_exe% "/VERSION_TAG/ {print $2}" %base_dir%\version.txt') DO SET TAG=%%i -FOR /f %%i IN ('%awk_exe% "/ADDON_API/ {print $2}" %base_dir%\version.txt') DO SET VERSION_NUMBER=%%i.0 - -SET APP_VERSION=%MAJOR%.%MINOR% -IF NOT [%TAG%] == [] ( - SET APP_VERSION=%APP_VERSION%-%TAG% -) - -rem ----Usage---- -rem BuildSetup [clean|noclean] [noprompt] [nomingwlibs] [nobinaryaddons] [sh] -rem clean to force a full rebuild -rem noclean to force a build without clean -rem noprompt to avoid all prompts -rem nomingwlibs to skip building all libs built with mingw -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 buildmingwlibs=true -SET buildbinaryaddons=true -SET exitcode=0 -SET useshell=rxvt -SET BRANCH=na -FOR %%b in (%1, %2, %3, %4, %5, %6) DO ( - IF %%b==clean SET buildmode=clean - IF %%b==noclean SET buildmode=noclean - IF %%b==noprompt SET promptlevel=noprompt - IF %%b==nomingwlibs SET buildmingwlibs=false - IF %%b==nobinaryaddons SET buildbinaryaddons=false - IF %%b==sh SET useshell=sh -) - -SET PreferredToolArchitecture=x64 -SET buildconfig=Release -set WORKSPACE=%CD%\..\..\kodi-build - - - :: sets the BRANCH env var - call getbranch.bat - - rem CONFIG END - rem ------------------------------------------------------------- - goto COMPILE_MINGW - -:COMPILE_MINGW - ECHO Buildmode = %buildmode% - IF %buildmingwlibs%==true ( - ECHO Compiling mingw libs - ECHO bla>noprompt - IF EXIST errormingw del errormingw > NUL - IF %buildmode%==clean ( - ECHO bla>makeclean - ) - rem only use sh to please jenkins - IF %useshell%==sh ( - call %base_dir%\tools\buildsteps\win32\make-mingwlibs.bat sh noprompt %buildmode% - ) ELSE ( - call %base_dir%\tools\buildsteps\win32\make-mingwlibs.bat noprompt %buildmode% - ) - IF EXIST errormingw ( - set DIETEXT="failed to build mingw libs" - goto DIE - ) - ) - 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 "Visual Studio 14" %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 ------------------------------------------------------------ - GOTO MAKE_BUILD_EXE - - -:MAKE_BUILD_EXE - ECHO Copying files... - IF EXIST BUILD_WIN32 rmdir BUILD_WIN32 /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.GPL BUILD_WIN32\application > NUL - copy %base_dir%\copying.txt 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 dependencies\*.* BUILD_WIN32\application /Q /I /Y /EXCLUDE:exclude.txt > 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%\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/@APP_VERSION@/%APP_VERSION%/g -e s/@VERSION_NUMBER@/%VERSION_NUMBER%/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\win32 - 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 - - ECHO ------------------------------------------------------------ - ECHO Build Succeeded! - GOTO NSIS_EXE - -:NSIS_EXE - ECHO ------------------------------------------------------------ - ECHO Generating installer includes... - call genNsisIncludes.bat - ECHO ------------------------------------------------------------ - call getdeploydependencies.bat - CALL extract_git_rev.bat > NUL - SET APP_SETUPFILE=%APP_NAME%Setup-%GIT_REV%-%BRANCH%.exe - SET APP_PDBFILE=%APP_NAME%Setup-%GIT_REV%-%BRANCH%.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%" /DVERSION_NUMBER="%VERSION_NUMBER%" /DCOMPANY_NAME="%COMPANY_NAME%" /DWEBSITE="%WEBSITE%" /Dapp_revision="%GIT_REV%" /Dapp_target="%target%" /Dapp_branch="%BRANCH%" "genNsisInstaller.nsi" - IF NOT EXIST "%APP_SETUPFILE%" ( - 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 ------------------------------------------------------------ - 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% diff --git a/project/Win32BuildSetup/genNsisInstaller.nsi b/project/Win32BuildSetup/genNsisInstaller.nsi index 6b2bf8b7e1..0373722cf2 100644 --- a/project/Win32BuildSetup/genNsisInstaller.nsi +++ b/project/Win32BuildSetup/genNsisInstaller.nsi @@ -317,12 +317,12 @@ SectionEnd ;vs redist installer Section SectionGroup "Microsoft Visual C++ packages" SEC_VCREDIST -Section "VS2015 C++ re-distributable Package (x86)" SEC_VCREDIST1 +Section "VS2015 C++ re-distributable Package (${TARGET_ARCHITECTURE})" SEC_VCREDIST1 DetailPrint "Running VS2015 re-distributable setup..." SectionIn 1 2 #section is in install type Full SetOutPath "$TEMP\vc2015" - File "${app_root}\..\dependencies\vcredist\2015\vcredist_x86.exe" - ExecWait '"$TEMP\vc2015\vcredist_x86.exe" /install /quiet /norestart' $VSRedistSetupError + File "${app_root}\..\dependencies\vcredist\2015\vcredist_${TARGET_ARCHITECTURE}.exe" + ExecWait '"$TEMP\vc2015\vcredist_${TARGET_ARCHITECTURE}.exe" /install /quiet /norestart' $VSRedistSetupError RMDir /r "$TEMP\vc2015" DetailPrint "Finished VS2015 re-distributable setup" SetOutPath "$INSTDIR" diff --git a/project/Win32BuildSetup/getbranch.bat b/project/Win32BuildSetup/getbranch.bat deleted file mode 100644 index f1a2b97712..0000000000 --- a/project/Win32BuildSetup/getbranch.bat +++ /dev/null @@ -1,48 +0,0 @@ -@echo off -rem this gets the current branch from either the branchname (if we attached) or -rem by using scientific branch fetching algorithms [tm] git is in detached HEAD state -rem result will be in env var %BRANCH% -SET BRANCH=na -SET DETACHED=1 -:: detect detached head -git symbolic-ref HEAD >nul 2>&1 -IF %ERRORLEVEL%==0 ( - SET DETACHED=0 -) -rem find the branchname - if current branch is a pr we have to take this into account aswell -rem (would be refs/pulls/pr/number/head then) -rem normal branch would be refs/heads/branchname -IF %DETACHED%==0 ( - FOR /f "tokens=3,4 delims=/" %%a IN ('git symbolic-ref HEAD') DO ( - IF %%a==pr ( - SET BRANCH=PR%%b - ) ELSE ( - SET BRANCH=%%a - ) - ) - GOTO branchfound -) - -:: when building with jenkins there's no branch. First git command gets the branch even there -:: it ignores all branches in the pr/ scope (pull requests) and finds the first non pr branch -:: (this mimics what the linux side does via sed and head -n1 -:: but is empty in a normal build environment. Second git command gets the branch there. -FOR /f "tokens=2,3 delims=/" %%a IN ('git branch -r --contains HEAD') DO ( - :: ignore pull requests - IF NOT %%a==pr ( - rem our branch could be like origin/Frodo (we need %%a here) - rem or our branch could be like origin/HEAD -> origin/master (we need %%b here) - rem if we have %%b - use it - else use %%a - IF NOT "%%b"=="" ( - :: we found the first non-pullrequest branch - gotcha - SET BRANCH=%%b - ) ELSE ( - SET BRANCH=%%a - ) - GOTO branchfound - ) -) -IF "%BRANCH%"=="na" ( - FOR /f "tokens=* delims= " %%a IN ('git rev-parse --abbrev-ref HEAD') DO SET BRANCH=%%a -) -:branchfound diff --git a/project/Win32BuildSetup/getdeploydependencies.bat b/project/Win32BuildSetup/getdeploydependencies.bat index 5daa93ca8f..ed9ee46000 100644 --- a/project/Win32BuildSetup/getdeploydependencies.bat +++ b/project/Win32BuildSetup/getdeploydependencies.bat @@ -10,9 +10,9 @@ PUSHD %~dp0 if not exist dependencies\vcredist\2015 mkdir dependencies\vcredist\2015 -if not exist dependencies\vcredist\2015\vcredist_x86.exe ( +if not exist dependencies\vcredist\2015\vcredist_%TARGET_ARCHITECTURE%.exe ( echo Downloading vc140 redist... - ..\BuildDependencies\bin\wget -nv -O dependencies\vcredist\2015\vcredist_x86.exe %KODI_MIRROR%/build-deps/win32/vcredist/2015/vcredist_x86.exe + ..\BuildDependencies\bin\wget -nv -O dependencies\vcredist\2015\vcredist_%TARGET_ARCHITECTURE%.exe %KODI_MIRROR%/build-deps/win32/vcredist/2015/vcredist_%TARGET_ARCHITECTURE%.exe ) :: Restore the previous current directory POPD diff --git a/tools/buildsteps/windows/BuildSetup.bat b/tools/buildsteps/windows/BuildSetup.bat new file mode 100644 index 0000000000..6a576828b9 --- /dev/null +++ b/tools/buildsteps/windows/BuildSetup.bat @@ -0,0 +1,270 @@ +@ECHO OFF +SETLOCAL ENABLEDELAYEDEXPANSION +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 awk_exe=%msys_dir%\usr\bin\awk.exe +SET sed_exe=%msys_dir%\usr\bin\sed.exe + +REM read the version values from version.txt +FOR /f %%i IN ('%awk_exe% "/APP_NAME/ {print $2}" %base_dir%\version.txt') DO SET APP_NAME=%%i +FOR /f %%i IN ('%awk_exe% "/COMPANY_NAME/ {print $2}" %base_dir%\version.txt') DO SET COMPANY_NAME=%%i +FOR /f %%i IN ('%awk_exe% "/WEBSITE/ {print $2}" %base_dir%\version.txt') DO SET WEBSITE=%%i +FOR /f %%i IN ('%awk_exe% "/VERSION_MAJOR/ {print $2}" %base_dir%\version.txt') DO SET MAJOR=%%i +FOR /f %%i IN ('%awk_exe% "/VERSION_MINOR/ {print $2}" %base_dir%\version.txt') DO SET MINOR=%%i +FOR /f %%i IN ('%awk_exe% "/VERSION_TAG/ {print $2}" %base_dir%\version.txt') DO SET TAG=%%i +FOR /f %%i IN ('%awk_exe% "/ADDON_API/ {print $2}" %base_dir%\version.txt') DO SET VERSION_NUMBER=%%i.0 + +SET APP_VERSION=%MAJOR%.%MINOR% +IF NOT [%TAG%] == [] ( + SET APP_VERSION=%APP_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 +SET BRANCH=na +FOR %%b in (%1, %2, %3, %4) 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 + + + :: sets the BRANCH env var + call getbranch.bat + + 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%" %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 ------------------------------------------------------------ + GOTO MAKE_BUILD_EXE + + +:MAKE_BUILD_EXE + ECHO Copying files... + PUSHD %base_dir%\project\Win32BuildSetup + IF EXIST BUILD_WIN32 rmdir BUILD_WIN32 /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.GPL BUILD_WIN32\application > NUL + copy %base_dir%\copying.txt 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 dependencies\*.* BUILD_WIN32\application /Q /I /Y /EXCLUDE:exclude.txt > 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%\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/@APP_VERSION@/%APP_VERSION%/g -e s/@VERSION_NUMBER@/%VERSION_NUMBER%/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%.exe + SET APP_PDBFILE=%APP_NAME%Setup-%GIT_REV%-%BRANCH%.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_NUMBER%" /DCOMPANY_NAME="%COMPANY_NAME%" /DWEBSITE="%WEBSITE%" /Dapp_revision="%GIT_REV%" /Dapp_branch="%BRANCH%" "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 + +: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% diff --git a/tools/buildsteps/windows/getbranch.bat b/tools/buildsteps/windows/getbranch.bat new file mode 100644 index 0000000000..f1a2b97712 --- /dev/null +++ b/tools/buildsteps/windows/getbranch.bat @@ -0,0 +1,48 @@ +@echo off +rem this gets the current branch from either the branchname (if we attached) or +rem by using scientific branch fetching algorithms [tm] git is in detached HEAD state +rem result will be in env var %BRANCH% +SET BRANCH=na +SET DETACHED=1 +:: detect detached head +git symbolic-ref HEAD >nul 2>&1 +IF %ERRORLEVEL%==0 ( + SET DETACHED=0 +) +rem find the branchname - if current branch is a pr we have to take this into account aswell +rem (would be refs/pulls/pr/number/head then) +rem normal branch would be refs/heads/branchname +IF %DETACHED%==0 ( + FOR /f "tokens=3,4 delims=/" %%a IN ('git symbolic-ref HEAD') DO ( + IF %%a==pr ( + SET BRANCH=PR%%b + ) ELSE ( + SET BRANCH=%%a + ) + ) + GOTO branchfound +) + +:: when building with jenkins there's no branch. First git command gets the branch even there +:: it ignores all branches in the pr/ scope (pull requests) and finds the first non pr branch +:: (this mimics what the linux side does via sed and head -n1 +:: but is empty in a normal build environment. Second git command gets the branch there. +FOR /f "tokens=2,3 delims=/" %%a IN ('git branch -r --contains HEAD') DO ( + :: ignore pull requests + IF NOT %%a==pr ( + rem our branch could be like origin/Frodo (we need %%a here) + rem or our branch could be like origin/HEAD -> origin/master (we need %%b here) + rem if we have %%b - use it - else use %%a + IF NOT "%%b"=="" ( + :: we found the first non-pullrequest branch - gotcha + SET BRANCH=%%b + ) ELSE ( + SET BRANCH=%%a + ) + GOTO branchfound + ) +) +IF "%BRANCH%"=="na" ( + FOR /f "tokens=* delims= " %%a IN ('git rev-parse --abbrev-ref HEAD') DO SET BRANCH=%%a +) +:branchfound diff --git a/tools/buildsteps/windows/win32/BuildSetup.bat b/tools/buildsteps/windows/win32/BuildSetup.bat new file mode 100644 index 0000000000..8a49ff69c0 --- /dev/null +++ b/tools/buildsteps/windows/win32/BuildSetup.bat @@ -0,0 +1,11 @@ +@ECHO OFF + +SET cmakeGenerator=Visual Studio 14 +SET TARGET_ARCHITECTURE=x86 + +rem set Visual C++ build environment for binary addons +call "%VS140COMNTOOLS%..\..\VC\bin\amd64_x86\vcvarsamd64_x86.bat" || call "%VS140COMNTOOLS%..\..\VC\bin\vcvars32.bat" + +PUSHD %~dp0\.. +CALL BuildSetup.bat %* +POPD -- cgit v1.2.3