i've had a request from craxx for my script. so i've decide to post it here.
first thanks to yuyu for xbmcdbr.bat which was the original starting point.
thanks jgawera for code to find program locations and check for a valid path.
thanks ythan for the original script file and menu inspiration.
and anyone else who contributed.
i broke this in to two files one the build.bat and the other settings.bat. settings.bat is where you can change all (hopefully) script settings.
create your installation folder. (do not have cvs in any part of a folders name you create.)
copy settings.bat code and save it as settings.bat in your installation folder.
copy build.bat code and save it as build.bat in your installation folder.**** you must change {tab} to a literal tab no spaces. (jgawera's code for finding install locations will not work if you don't.)
then create a folder named programs (the folder name can be changed in settings.bat.) and put gsar.exe, cvs.exe and xbepatch.exe in this folder.
then create a folder named user modified files. (the folder name can be changed in settings.bat.) this folder contains the exact folder structure as the xbmc installation on the xbox. you do not need to create every folder or copy anything in to it if you don't want to. but if you do then you must follow the exact folder structure of xbmc installation. for example i add kai xlink's files kaid and kaid.conf to a kaid folder in the web folder. so i create a web folder in user modified files and a kaid folder in the web folder and copy these files there.
all other folders will be created as needed.
make any changes to settings.bat you like and run build.bat. i added a command switch /u. if you start build.bat with this it will run a full download and build from your settings in settings.bat and not prompt for any input.
thanks again to all who contributed.
watch for word wrap, some line need attention.
settings.bat
Quote:@echo off
:: user set variables.
set language=english
set filename=xbmc
set includedate=y
set savebuildfolder=y
set compressbuild=n
set keepcvs=y
set defaultskin=project mayhem
set webdefaultskin=proj*
set searchstring=xbox media center 1.1.0
set replacestring=xbox media center 1.1.0
:: setup working folders.
set home=%cd%
set workfolder=%home%\working folder
set buildfolder=%workfolder%\build folder
set finishedbuildsfolder=%home%\finished builds
set webdefaultskin=%workfolder%\xbmc\web\%webdefaultskin%
set customfolder=%home%\user modified files
set programsfolder=%home%\programs
:: setup location for programs script uses.
set xbe=%programsfolder%\xbepatch.exe
set gsar=%programsfolder%\gsar.exe
set cvs=%programsfolder%\cvs.exe
:: sets programs options.
set cvsoptions=-z3 -d :pserver:anonymous:@cvs.sourceforge.net:/cvsroot/xbmc checkout xbmc
set netoptions=/rebuild release xbox
set netsolution=%workfolder%\xbmc\xbmc.sln
set raroptions=a -ep1 -r -y -m5
set unraroptions=x -o+ -inul
build.bat *(change {tab} to a literal tab no spaces)
Quote:@echo off
title xbox media center build script!
:begin
:: command line argument.
set cmdswitch=%1
:: if switch is invalid display help.
if not "%cmdswitch%"=="" (
if /i not "%cmdswitch%"=="/u" (
echo.
echo downloads, builds and compresses xbox media center.
echo build [/u]
echo.
echo /u perform an unattended build.
echo.
echo the switch /u performs an unattended build based
echo on user set variables.
goto exitscript
)
)
:start
cls
echo xbox media center build script!
echo.
echo.
echo doing some housekeeping . . .
echo.
call settings.bat
:: setup the builds filename.
for /f "tokens=2-4 delims=/.- " %%i in ('date /t') do set builddate=%%i.%%j.%%k
if /i "%includedate%"=="y" (
set replacestring=%replacestring% ^(%builddate%^)
if not "%filename%"=="" (
set filename=%filename%_%builddate%
) else (
set filename=%builddate%
)
)
:: checks if filename is blank.
if "%filename%"=="" (
echo.
echo invalid build filename. your filename is blank and includedate is no.
echo either enter a filename or set includedate=y
echo.
echo
pause
goto exitscript
)
:: check for an invalid working path.
echo working path: %workfolder%\ | find /i "cvs"
if not errorlevel 1 (
echo.
echo this script won't work properly if any folder in the working path includes "cvs".
echo you'll need to change the working folder or install folder.
echo
pause
goto exitscript
)
:: sets visual studio .net location.
set net=
set regcmd=reg query "hklm\software\microsoft\windows\currentversion\app paths\devenv.exe" /ve
for /f "tokens=3 delims={tab}" %%i in ('%regcmd%') do (
set net=%%i
)
if "%net%"=="" (
echo.
echo visual studio .net was not found. make sure it's installed properly.
echo.
echo
pause
goto exitscript
)
:: sets rar and unrar location.
set rar=
set regcmd=reg query "hklm\software\microsoft\windows\currentversion\app paths\winrar.exe" /v path
for /f "tokens=3 delims={tab}" %%i in ('%regcmd%') do (
set rar=%%i\rar.exe
set unrar=%%i\unrar.exe
)
if "%rar%"=="" (
echo.
echo winrar was not found. make sure it's installed properly.
echo.
echo
pause
goto exitscript
)
:: check if finished folder exists.
if not exist "%finishedbuildsfolder%" md "%finishedbuildsfolder%"
:: if command line switch is [u]nconditional skip menu.
if /i "%cmdswitch%"=="/u" (
set runtype=f
goto downloadcvs
)
:setmenuitems
:: sets menu items to display.
set displayjob1=y
set displayjob2=n
set displayjob3=n
set displayjob4=n
set displayjob5=n
set displayjob6=y
set displayjob7=n
set displayjob8=y
if exist "%workfolder%\xbmc" set displayjob2=y
if exist "%workfolder%\xbmc\release\default.xbe" set displayjob3=y
set answer=
if exist "%finishedbuildsfolder%" (
for /f "tokens=1" %%i in ('dir /ad /b "%finishedbuildsfolder%"') do set answer=%%i
)
if not '%answer%'=='' set displayjob4=y
if exist "%workfolder%" set displayjob5=y
:menu
cls
echo xbox media center build script!
echo.
echo.
:: display menu
echo ------------------------------------------------------
echo name: '%filename%' keep cvs: '%keepcvs%'
echo working: '%workfolder%\' compress: '%compressbuild%'
echo builds: '%finishedbuildsfolder%\' save build: '%savebuildfolder%'
echo ------------------------------------------------------
echo.
echo please select a job and press enter:
echo.
if %displayjob1%==y echo [f]ull download and build
if %displayjob2%==y echo [b]uild solution from existing cvs
if %displayjob3%==y echo [s]ave current build to '%finishedbuildsfolder%\'
if %displayjob4%==y echo [r]ar already built solution
if %displayjob5%==y echo [d]elete '%workfolder%\'
if %displayjob6%==y echo [c]hange build name
if %displayjob7%==y echo [u]ser settings
if %displayjob8%==y echo [e]xit
echo.
set runtype=
set /p runtype=
:job1
:: full download and build.
if not %displayjob1%==y goto job2
if /i "%runtype%"=="f" goto downloadcvs
:job2
:: build solution from existing cvs.
if not %displayjob2%==y goto job3
if /i "%runtype%"=="b" goto buildsolution
:job3
:: save current build to folder.
if not %displayjob3%==y goto job4
if /i "%runtype%"=="s" (
set keepcvs=y
set compressbuild=n
set savebuildfolder=y
goto copyfiles
)
:job4
:: rar already built solution
if not %displayjob4%==y goto job5
if /i "%runtype%"=="r" (
set msg1=rar already built solution.
set msg2="enter the folder to rar: "
goto getfolder
)
:job5
:: delete working folder.
if not %displayjob5%==y goto job6
if /i "%runtype%"=="d" goto deletework
:job6
:: change build name.
if not %displayjob6%==y goto job7
if /i "%runtype%"=="c" (
set msg1=change build name: '%filename%'
set msg2="enter new build name: "
goto getfolder
)
:job7
:: user settings.
if /i "%runtype%"=="u" goto menu
:job8
:: exit script.
if /i "%runtype%"=="e" goto exitscript
goto menu
:deletework
echo.
set answer=
set /p answer="delete '%workfolder%\'? (y/n): "
if /i not "%answer%"=="y" goto menu
set keepcvs=n
set compressbuild=n
set savebuildfolder=n
goto cleanupbuild
:getfolder
cls
echo xbox media center build script!
echo.
echo.
echo %msg1%
echo.
echo existing build folder(s)
echo ------------------------
dir /ad /b /on "%finishedbuildsfolder%\"
echo.
echo ^<blank^> to return to menu.
echo ------------------------
echo.
:: get's the builds name.
set answer=
set /p answer=%msg2%
if "%answer%"=="" goto menu
if /i "%runtype%"=="c" (
set filename=%answer%
goto menu
)
if not exist "%finishedbuildsfolder%\%answer%" (
echo.
echo '%finishedbuildsfolder%\%answer%\' does not exist.
echo.
echo
pause
goto getfolder
)
set buildfolder=%finishedbuildsfolder%\%answer%
set filename=%answer%
set keepcvs=y
set compressbuild=y
set savebuildfolder=n
goto compressbuild
:downloadcvs
cls
echo xbox media center build script!
echo.
echo.
if /i "%runtype%"=="f" (
echo downloading cvs files needed to build solution . . .
echo.
if exist "%workfolder%" rmdir "%workfolder%" /s /q
md "%workfolder%"
cd /d %workfolder%
"%cvs%" %cvsoptions%
)
:buildsolution
if not exist "%workfolder%" (
echo error cvs download does not exist. please choose a full build.
goto exitscript
)
cls
echo xbox media center build script!
echo.
echo.
echo building xbmc solution '%filename%' (this may take a while) . . .
echo.
cd /d %workfolder%
"%net%" %netoptions% "%netsolution%"
if not exist "%workfolder%\xbmc\release\default.xbe" (
echo there was an error building solution.
pause
goto exitscript
)
echo patching xbmc default.xbe . . .
echo.
"%xbe%" "%workfolder%\xbmc\release\default.xbe"
:: ------------------------------------------------------------------------------------------
-----
:copyfiles
if /i "%runtype%"=="s" (
cls
echo xbox media center build script!
echo.
echo.
)
cd /d %workfolder%
if exist "%buildfolder%" rmdir "%buildfolder%"
md "%buildfolder%\docs"
md "%buildfolder%\scripts"
md "%buildfolder%\python"
echo extracting webserver's default skin . . .
"%unrar%" %unraroptions% "%webdefaultskin%.rar" "%buildfolder%\web\"
:: copy solution files to build folder.
echo copying build files and folders . . .
echo .
echo cvs>"%workfolder%\exclude.txt"
echo thumbs.db>>"%workfolder%\exclude.txt"
copy "%workfolder%\xbmc\release\default.xbe" "%buildfolder%\"
copy "%workfolder%\xbmc\*.xml" "%buildfolder%\"
copy "%workfolder%\xbmc\*.txt" "%buildfolder%\docs\"
copy "%workfolder%\xbmc\*.pdf" "%buildfolder%\docs\"
xcopy "%workfolder%\xbmc\skin\%defaultskin%\*.xml" "%buildfolder%\skin\%defaultskin%\" /e /q /i /y /exclude:exclude.txt
xcopy "%workfolder%\xbmc\skin\%defaultskin%\fonts" "%buildfolder%\skin\%defaultskin%\fonts" /e /q /i /y /exclude:exclude.txt
copy "%workfolder%\xbmc\skin\%defaultskin%\*.txt" "%buildfolder%\skin\%defaultskin%\"
copy "%workfolder%\xbmc\skin\%defaultskin%\media\textures.xpr" "%buildfolder%\skin\%defaultskin%\media\"
copy "%workfolder%\xbmc\skin\%defaultskin%\media\background.png" "%buildfolder%\skin\%defaultskin%\media\"
copy "%workfolder%\xbmc\skin\%defaultskin%\media\background2.png" "%buildfolder%\skin\%defaultskin%\media\"
xcopy "%workfolder%\xbmc\mplayer" "%buildfolder%\mplayer" /e /q /i /y /exclude:exclude.txt
xcopy "%workfolder%\xbmc\credits" "%buildfolder%\credits" /q /i /y /exclude:exclude.txt
xcopy "%workfolder%\xbmc\media" "%buildfolder%\media" /q /i /y /exclude:exclude.txt
xcopy "%workfolder%\xbmc\language" "%buildfolder%\language" /e /q /i /y /exclude:exclude.txt
xcopy "%workfolder%\xbmc\visualisations" "%buildfolder%\visualisations" /e /q /i /y /exclude:exclude.txt
xcopy "%workfolder%\xbmc\screensavers" "%buildfolder%\screensavers" /q /i /y /exclude:exclude.txt
xcopy "%workfolder%\xbmc\weather" "%buildfolder%\weather" /e /q /i /y /exclude:exclude.txt
:: copies user's modified files to build folder.
echo copying user modified files and folders . . .
echo.
if exist "%customfolder%\xboxmediacenter.xml" ren "%buildfolder%\xboxmediacenter.xml" "xboxmediacenter.txt"
xcopy "%customfolder%" "%buildfolder%" /e /q /i /y
:: uses gsar.exe to replace line in strings.xml with build date
if not "%searchstring%"=="%replacestring%" (
if not "%searchstring%"=="" (
echo editing strings.xml, using gsar . . .
echo.
"%gsar%" -s"%searchstring%" -r"%replacestring%" -o "%buildfolder%\language\%language%\strings.xml"
echo.
)
)
:: ------------------------------------------------------------------------------------------
-----
:compressbuild
:: rars the newly built solution
if /i "%compressbuild%"=="y" (
echo compressing finished build . . .
"%rar%" %raroptions% "%finishedbuildsfolder%\%filename%.rar" "%buildfolder%\*"
echo.
)
if /i "%runtype%"=="r" goto done
:movebuildfolder
:: moves the build folder.
echo cleaning up working folder . . .
cd /d %home%
if /i not "%savebuildfolder%"=="y" (
goto cleanupbuild
) else (
echo saving and renaming build folder to finish builds folder . . .
echo.
)
move /y "%buildfolder%" "%finishedbuildsfolder%\%filename%"
:cleanupbuild
:: clean up build and/or working folder.
if not "%keepcvs%"=="y" (
if exist "%workfolder%" rmdir /s /q "%workfolder%"
) else (
del /q "%workfolder%\*.*"
)
if exist "%buildfolder%" rmdir /s /q "%buildfolder%"
:done
:: completed job. inform user where the folder and/or compressed file is.
cls
echo xbox media center build script!
echo.
echo.
echo ------------------------------------------------------
echo the selected job has completed.
if /i "%runtype%"=="d" (
echo.
if not exist "%workfolder%" (
echo deleted folder '%workfolder%\'
) else (
echo an error occured deleting the folder.
)
)
if /i "%compressbuild%"=="y" (
echo.
if exist "%finishedbuildsfolder%\%filename%.rar" (
echo the compressed build is in '%finishedbuildsfolder%\' named '%filename%.rar'
) else (
echo an error occured compressing the build.
)
)
if /i "%savebuildfolder%"=="y" (
echo.
if exist "%finishedbuildsfolder%\%filename%" (
echo the build folder is in '%finishedbuildsfolder%\' named '%filename%'
) else (
echo an error occured moving the build folder.
)
)
echo ------------------------------------------------------
echo
if /i not "%cmdswitch%"=="/u" (
echo.
pause
goto begin
)
:exitscript
i hope cut and paste works.