ultradefrag/src/build.cmd

275 lines
9.7 KiB
Batchfile
Executable File

@echo off
::
:: Build script for the UltraDefrag project.
:: Copyright (c) 2007-2011 by Dmitri Arkhangelski (dmitriar@gmail.com).
:: Copyright (c) 2010-2011 by Stefan Pendl (stefanpe@users.sourceforge.net).
::
:: This program is free software; you can redistribute it and/or modify
:: it under the terms of the GNU General Public License as published by
:: the Free Software Foundation; either version 2 of the License, or
:: (at your option) any later version.
::
:: This program is distributed in the hope that it will be useful,
:: but WITHOUT ANY WARRANTY; without even the implied warranty of
:: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
:: GNU General Public License for more details.
::
:: You should have received a copy of the GNU General Public License
:: along with this program; if not, write to the Free Software
:: Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
::
call ParseCommandLine.cmd %*
:: handle help request
if %UD_BLD_FLG_DIPLAY_HELP% equ 1 (
call :usage
exit /B 0
)
:: delete all previously compiled files
call :cleanup
if %UD_BLD_FLG_ONLY_CLEANUP% equ 1 exit /B 0
:: set environment
call :set_build_environment
echo %ULTRADFGVER% > ..\doc\html\version.ini
:: build all binaries
call build-targets.cmd %* || goto fail
:: build documentation
call build-docs.cmd || goto fail
:: update installer lang.ini
call make-lang-ini.cmd || goto fail
:: build installers and portable packages
echo Build installers and/or portable packages...
if %UD_BLD_FLG_BUILD_X86% neq 0 (
call :build_installer .\bin i386 || goto fail
call :build_portable_package .\bin i386 || goto fail
)
if %UD_BLD_FLG_BUILD_AMD64% neq 0 (
call :build_installer .\bin\amd64 amd64 || goto fail
call :build_portable_package .\bin\amd64 amd64 || goto fail
)
if %UD_BLD_FLG_BUILD_IA64% neq 0 (
call :build_installer .\bin\ia64 ia64 || goto fail
call :build_portable_package .\bin\ia64 ia64 || goto fail
)
echo.
echo Build success!
:: install the program if requested
if %UD_BLD_FLG_DO_INSTALL% neq 0 (
call :install || exit /B 1
)
:: all operations successfully completed!
exit /B 0
:fail
echo Build error (code %ERRORLEVEL%)!
exit /B 1
:: --------------------------------------------------------
:: subroutines
:: --------------------------------------------------------
rem Sets environment for the build process.
:set_build_environment
call setvars.cmd
if exist "setvars_%COMPUTERNAME%_%ORIG_USERNAME%.cmd" call "setvars_%COMPUTERNAME%_%ORIG_USERNAME%.cmd"
if exist "setvars_%COMPUTERNAME%_%USERNAME%.cmd" call "setvars_%COMPUTERNAME%_%USERNAME%.cmd"
if %UD_BLD_FLG_IS_PORTABLE% equ 1 (
set UDEFRAG_PORTABLE=1
) else (
set UDEFRAG_PORTABLE=
)
if %UD_BLD_FLG_BUILD_ALL% equ 1 (
set UDEFRAG_PORTABLE=
)
echo #define VERSION %VERSION% > .\include\ultradfgver.h
echo #define VERSION2 %VERSION2% >> .\include\ultradfgver.h
if "%RELEASE_STAGE%" neq "" (
echo #define VERSIONINTITLE "UltraDefrag %ULTRADFGVER% %RELEASE_STAGE%" >> .\include\ultradfgver.h
echo #define VERSIONINTITLE_PORTABLE "UltraDefrag %ULTRADFGVER% %RELEASE_STAGE% Portable" >> .\include\ultradfgver.h
echo #define ABOUT_VERSION "Ultra Defragmenter version %ULTRADFGVER% %RELEASE_STAGE%" >> .\include\ultradfgver.h
) else (
echo #define VERSIONINTITLE "UltraDefrag %ULTRADFGVER%" >> .\include\ultradfgver.h
echo #define VERSIONINTITLE_PORTABLE "UltraDefrag %ULTRADFGVER% Portable" >> .\include\ultradfgver.h
echo #define ABOUT_VERSION "Ultra Defragmenter version %ULTRADFGVER%" >> .\include\ultradfgver.h
)
rem remove preview menu for release candidates
if "%RELEASE_CANDIDATE%" neq "" echo #define _UD_HIDE_PREVIEW_ >> .\include\ultradfgver.h
rem remove preview menu for final release
if "%RELEASE_STAGE%" equ "" echo #define _UD_HIDE_PREVIEW_ >> .\include\ultradfgver.h
rem force zenwinx version to be the same as ultradefrag version
echo #define ZENWINX_VERSION %VERSION% > .\dll\zenwinx\zenwinxver.h
echo #define ZENWINX_VERSION2 %VERSION2% >> .\dll\zenwinx\zenwinxver.h
goto :EOF
rem Synopsis: call :build_installer {path to binaries} {arch}
rem Example: call :build_installer .\bin\ia64 ia64
:build_installer
if %UD_BLD_FLG_BUILD_ALL% neq 1 if "%UDEFRAG_PORTABLE%" neq "" exit /B 0
pushd %1
copy /Y "%~dp0\installer\UltraDefrag.nsi" .\
copy /Y "%~dp0\installer\lang.ini" .\
copy /Y "%~dp0\installer\lang-classical.ini" .\
if "%RELEASE_STAGE%" neq "" (
set NSIS_COMPILER_FLAGS=/DULTRADFGVER=%ULTRADFGVER% /DULTRADFGARCH=%2 /DRELEASE_STAGE=%RELEASE_STAGE% /DUDVERSION_SUFFIX=%UDVERSION_SUFFIX%
) else (
set NSIS_COMPILER_FLAGS=/DULTRADFGVER=%ULTRADFGVER% /DULTRADFGARCH=%2 /DUDVERSION_SUFFIX=%UDVERSION_SUFFIX%
)
"%NSISDIR%\makensis.exe" %NSIS_COMPILER_FLAGS% UltraDefrag.nsi
if %errorlevel% neq 0 (
set NSIS_COMPILER_FLAGS=
popd
exit /B 1
)
set NSIS_COMPILER_FLAGS=
popd
exit /B 0
rem Synopsis: call :build_portable_package {path to binaries} {arch}
rem Example: call :build_portable_package .\bin\ia64 ia64
:build_portable_package
if %UD_BLD_FLG_BUILD_ALL% neq 1 if "%UDEFRAG_PORTABLE%" equ "" exit /B 0
pushd %1
set PORTABLE_DIR=ultradefrag-portable-%UDVERSION_SUFFIX%.%2
mkdir %PORTABLE_DIR%
copy /Y "%~dp0\CREDITS.TXT" %PORTABLE_DIR%\
copy /Y "%~dp0\HISTORY.TXT" %PORTABLE_DIR%\
copy /Y "%~dp0\LICENSE.TXT" %PORTABLE_DIR%\
copy /Y "%~dp0\README.TXT" %PORTABLE_DIR%\
copy /Y hibernate.exe %PORTABLE_DIR%\hibernate4win.exe
copy /Y udefrag.dll %PORTABLE_DIR%\
copy /Y udefrag.exe %PORTABLE_DIR%\
copy /Y zenwinx.dll %PORTABLE_DIR%\
copy /Y ultradefrag.exe %PORTABLE_DIR%
copy /Y lua5.1a.dll %PORTABLE_DIR%\
copy /Y lua5.1a.exe %PORTABLE_DIR%\
copy /Y lua5.1a_gui.exe %PORTABLE_DIR%\
copy /Y wgx.dll %PORTABLE_DIR%\
mkdir %PORTABLE_DIR%\handbook
copy /Y "%~dp0\..\doc\html\handbook\doxy-doc\html\*.*" %PORTABLE_DIR%\handbook\
mkdir %PORTABLE_DIR%\scripts
copy /Y "%~dp0\scripts\udreportcnv.lua" %PORTABLE_DIR%\scripts\
copy /Y "%~dp0\scripts\udsorting.js" %PORTABLE_DIR%\scripts\
copy /Y "%~dp0\scripts\udreport.css" %PORTABLE_DIR%\scripts\
copy /Y "%~dp0\scripts\upgrade-guiopts.lua" %PORTABLE_DIR%\scripts\
mkdir %PORTABLE_DIR%\options
copy /Y "%~dp0\scripts\udreportopts.lua" %PORTABLE_DIR%\options\
lua "%~dp0\scripts\upgrade-guiopts.lua" %PORTABLE_DIR%
mkdir %PORTABLE_DIR%\i18n
copy /Y "%~dp0\gui\i18n\*.lng" %PORTABLE_DIR%\i18n\
copy /Y "%~dp0\gui\i18n\*.template" %PORTABLE_DIR%\i18n\
rem zip -r -m -9 -X ultradefrag-portable-%ULTRADFGVER%.bin.%2.zip %PORTABLE_DIR%
"%SEVENZIP_PATH%\7z.exe" a -r -mx9 -tzip ultradefrag-portable-%UDVERSION_SUFFIX%.bin.%2.zip %PORTABLE_DIR%
if %errorlevel% neq 0 (
rd /s /q %PORTABLE_DIR%
set PORTABLE_DIR=
popd
exit /B 1
)
rd /s /q %PORTABLE_DIR%
set PORTABLE_DIR=
popd
exit /B 0
rem Installs the program.
:install
if "%UDEFRAG_PORTABLE%" neq "" exit /B 0
setlocal
if /i %PROCESSOR_ARCHITECTURE% == x86 (
set INSTALLER_PATH=.\bin
set INSTALLER_ARCH=i386
)
if /i %PROCESSOR_ARCHITECTURE% == AMD64 (
set INSTALLER_PATH=.\bin\amd64
set INSTALLER_ARCH=amd64
)
if /i %PROCESSOR_ARCHITECTURE% == IA64 (
set INSTALLER_PATH=.\bin\ia64
set INSTALLER_ARCH=ia64
)
set INSTALLER_NAME=ultradefrag
echo Start installer...
%INSTALLER_PATH%\%INSTALLER_NAME%-%UDVERSION_SUFFIX%.bin.%INSTALLER_ARCH%.exe /S
if %errorlevel% neq 0 (
echo Install error!
endlocal
exit /B 1
)
echo Install success!
endlocal
exit /B 0
rem Cleans up sources directory
rem by removing all intermediate files.
:cleanup
echo Delete all intermediate files...
rd /s /q bin
rd /s /q lib
rd /s /q obj
rd /s /q doxy-doc
rd /s /q gui\doxy-doc
rd /s /q dll\wgx\doxy-doc
rd /s /q dll\udefrag\doxy-doc
rd /s /q dll\zenwinx\doxy-doc
rd /s /q ..\doc\html\handbook\doxy-doc
rd /s /q doxy-defaults
rd /s /q gui\doxy-defaults
rd /s /q dll\wgx\doxy-defaults
rd /s /q dll\udefrag\doxy-defaults
rd /s /q dll\zenwinx\doxy-defaults
rd /s /q ..\doc\html\handbook\doxy-defaults
rd /s /q src_package
rd /s /q ..\src_package
if %UD_BLD_FLG_ONLY_CLEANUP% equ 1 rd /s /q release
echo Done.
goto :EOF
rem Displays usage information.
:usage
echo Usage: build [options]
echo.
echo Common options:
echo --portable build portable packages instead of installers
echo --all build all packages: regular and portable
echo --install perform silent installation after the build
echo --clean perform full cleanup instead of the build
echo.
echo Compiler:
echo --use-mingw (default)
echo --use-winddk (we use it for official releases)
echo --use-winsdk
echo --use-msvc (the fastest compilation)
echo --use-mingw-x64 (experimental, produces wrong x64 code)
echo.
echo Target architecture (must always be after compiler):
echo --no-x86 skip build of 32-bit binaries
echo --no-amd64 skip build of x64 binaries
echo --no-ia64 skip build of IA-64 binaries
echo.
echo Without parameters the build command uses MinGW to build
echo a 32-bit regular installer.
echo.
echo * To use MinGW run mingw_patch.cmd before:
echo dll\zenwinx\mingw_patch.cmd {path to mingw installation}
echo.
echo * To use MS Visual Studio 6.0 follow instructions to patch it:
echo dll\zenwinx\msvc_patch.cmd
goto :EOF