User:Dart Raiden/Build Miranda: Difference between revisions

From Miranda NG
Jump to navigation Jump to search
No edit summary
No edit summary
 
(25 intermediate revisions by the same user not shown)
Line 1: Line 1:
Run build.bat as administrator.
It is assumed that you have [https://www.7-zip.org 7-Zip], [https://www.nasm.us NASM], [https://strawberryperl.com Strawberry Perl], and [[Building_Miranda|Visual Studion 2017]] installed.


build.bat:
build.bat:
Line 5: Line 5:
@echo off
@echo off


set sources=D:\dev\miranda-ng
:CheckAdminRights
set solution_dir=bin15
reg query "HKU\S-1-5-19\Environment" >nul 2>&1
set configuration=Release
if not %ErrorLevel% == 0 (
set miranda_path=%PROGRAMFILES%\Miranda NG
echo Please run as administator^^!
set vspath=%PROGRAMFILES(X86)%\Microsoft Visual Studio\2017\Community
pause
set msbuild=%vspath%\MSBuild\15.0\Bin\MSBuild.exe
exit /b 1
set unzip=%PROGRAMFILES%\7-Zip\7z.exe
)


:set_vs_variables
:SetVariables
call "%vspath%\Common7\Tools\vsdevcmd.bat" -arch=amd64 -host_arch=amd64 -no_logo
set "unpacker=%ProgramFiles%\7-Zip\7zG.exe"
set "Configuration=Release"
set "Miranda=%ProgramFiles%\Miranda NG"
set "Vs=%ProgramFiles(x86)%\Microsoft Visual Studio\2017\Community"
set "Msbuild=%Vs%\MSBuild\15.0\Bin\MSBuild.exe"
set "Openssl=D:\dev\openssl"
set "Path=%ProgramFiles%\NASM;%Path%"
set "Solution=bin15"
set "Sources=D:\dev\miranda-ng"


:clean_old_build
:CleanSources
cd /d "%sources%\%solution_dir%"
if exist "%Sources%\%Solution%\%Configuration%64" rd /s /q "%Sources%\%Solution%\%Configuration%64"
if exist "%configuration%64" rd /q /s "%configuration%64" >nul
cd /d "%Sources%"
if exist "%sources%\include\m_version.h" del /q /s "%sources%\include\m_version.h"
cd /d "%sources%"
call cleaner.bat
call cleaner.bat


:update_sources
:UpdateSources
TortoiseGitProc /command:pull /path:"%sources%"
git --work-tree="%Sources%" --git-dir="%Sources%/.git" pull
:: or you can use something like tortoisegitproc /command:pull /path:"%Sources%"


:build_miranda
:SetVsEnvironmentVariables
"%msbuild%" "%sources%\%solution_dir%\my.sln" /m /t:Rebuild /p:Configuration=Release /p:Platform=x64
call "%Vs%\VC\Auxiliary\Build\vcvarsall.bat" x64
if errorlevel 1 (
echo ********** MIRANDA BUILD FAIL **********
pause
exit )


:build_icons
:BuildTdlib
"%msbuild%" "%sources%\%solution_dir%\my_icons.sln" /m /t:Rebuild /p:Configuration=Release /p:Platform=x64
title Building TDLib...
if errorlevel 1 (
"%Msbuild%" "%Sources%\%Solution%\tdlib.sln" /m /t:Rebuild /p:Configuration=Release
echo ********** ICONS BUILD FAIL **********
if not %ErrorLevel% == 0 (
pause
echo ********** TDLib build failed **********
exit )
pause
exit /b 1
)


:sort
:BuildMiranda
cd /d "%sources%\%solution_dir%\%configuration%64"
title Building Miranda...
rd /q /s Obj >nul
"%Msbuild%" "%Sources%\%Solution%\my.sln" /m /t:Rebuild /p:Configuration=Release
for /r %%i in (*.ilk,*.iobj,*.ipdb) do del /q /s %%i >nul
if not %ErrorLevel% == 0 (
for /r Icons %%j in (*.pdb) do del /q /s %%j >nul
echo ********** Miranda build failed **********
for /r %%k in (*.pdb) do move %%k "%sources%\%solution_dir%\%configuration%64" >nul
pause
exit /b 1
)


:kill
:BuildIcons
title Building icons...
"%Msbuild%" "%Sources%\%Solution%\my_icons.sln" /m /t:Rebuild /p:Configuration=Release
if not %ErrorLevel% == 0 (
echo ********** Icons build failed **********
pause
exit /b 1
)
 
:BuildLangpack
mkdir "%Sources%\%Solution%\%Configuration%64\Languages"
cscript /nologo "%Sources%\tools\lpgen\translate.js" /sourcelang:"russian" /release:"%Sources%\%Solution%\%Configuration%64\Languages\langpack_russian.txt"
 
:SortCompiledFiles
cd /d "%Sources%\%Solution%\%Configuration%64"
rd /q /s Obj
for /r %%i in (*.ilk,*.iobj,*.ipdb) do del /q /s %%i
for /r Icons %%j in (*.pdb) do del /q /s %%j
for /r %%k in (*.pdb) do move %%k "%Sources%\%Solution%\%Configuration%64"
 
:KillMiranda
Taskkill /f /im Miranda64.exe
Taskkill /f /im Miranda64.exe
timeout 3


:backup
:BackupOldMiranda
if exist "%TEMP%\Miranda_backup" rd /q /s "%TEMP%\Miranda_backup" >nul
if exist "%Temp%\Miranda_backup" rd /q /s "%Temp%\Miranda_backup"
xcopy /i /s /y "%miranda_path%" "%TEMP%\Miranda_backup" >nul
xcopy /i /s /y "%Miranda%" "%Temp%\Miranda_backup"


:replace
:UpdateMiranda
xcopy /i /s /y "%sources%\%solution_dir%\%configuration%64" "%miranda_path%" >nul
xcopy /i /s /y "%Sources%\%Solution%\%Configuration%64" "%Miranda%"


:get_openssl
:BuildOpenssl
cd %TEMP%
title Building OpenSSL...
curl https://www.miranda-ng.org/distr/pdb_x64/miranda64.zip -o miranda64.zip
cd /d "%Openssl%"
"%unzip%" e miranda64.zip libcrypto* libssl* -r -aoa
git apply "%Sources%\tools\openssl\openssl-mir-changes.patch"
for %%n in (libcrypto-1_1.mir,libssl-1_1.mir) do xcopy /y %%n "%miranda_path%\Libs" >nul
perl "%Openssl%\Configure" shared VC-WIN64A
for %%n in (libcrypto-1_1.pdb,libssl-1_1.pdb) do xcopy /y %%n "%miranda_path%" >nul
nmake
for %%n in (libcrypto-3.mir,libssl-3.mir) do xcopy /y %%n "%Miranda%\Libs"
for %%n in (libcrypto-3.pdb,libssl-3.pdb) do xcopy /y %%n "%Miranda%"


:run
:RunMiranda
:: dirty hack to prevent the app from inheriting elevated permissions
:: dirty hack to prevent the app from inheriting elevated permissions
explorer "%miranda%\Miranda64.exe"
explorer "%Miranda%\Miranda64.exe"


exit
exit /b 0
</pre>
</pre>


my.sln and my_icons.sln are my custom solutions.
my.sln and my_icons.sln are my custom solutions.

Latest revision as of 01:16, 22 March 2024

It is assumed that you have 7-Zip, NASM, Strawberry Perl, and Visual Studion 2017 installed.

build.bat:

@echo off

:CheckAdminRights
reg query "HKU\S-1-5-19\Environment" >nul 2>&1
if not %ErrorLevel% == 0 (
	echo Please run as administator^^!
	pause
	exit /b 1
)

:SetVariables
set "unpacker=%ProgramFiles%\7-Zip\7zG.exe"
set "Configuration=Release"
set "Miranda=%ProgramFiles%\Miranda NG"
set "Vs=%ProgramFiles(x86)%\Microsoft Visual Studio\2017\Community"
set "Msbuild=%Vs%\MSBuild\15.0\Bin\MSBuild.exe"
set "Openssl=D:\dev\openssl"
set "Path=%ProgramFiles%\NASM;%Path%"
set "Solution=bin15"
set "Sources=D:\dev\miranda-ng"

:CleanSources
if exist "%Sources%\%Solution%\%Configuration%64" rd /s /q "%Sources%\%Solution%\%Configuration%64"
cd /d "%Sources%"
call cleaner.bat

:UpdateSources
git --work-tree="%Sources%" --git-dir="%Sources%/.git" pull
:: or you can use something like tortoisegitproc /command:pull /path:"%Sources%"

:SetVsEnvironmentVariables
call "%Vs%\VC\Auxiliary\Build\vcvarsall.bat" x64

:BuildTdlib
title Building TDLib...
"%Msbuild%" "%Sources%\%Solution%\tdlib.sln" /m /t:Rebuild /p:Configuration=Release
if not %ErrorLevel% == 0 (
	echo ********** TDLib build failed **********
	pause
	exit /b 1
)

:BuildMiranda
title Building Miranda...
"%Msbuild%" "%Sources%\%Solution%\my.sln" /m /t:Rebuild /p:Configuration=Release
if not %ErrorLevel% == 0 (
	echo ********** Miranda build failed **********
	pause
	exit /b 1
)

:BuildIcons
title Building icons...
"%Msbuild%" "%Sources%\%Solution%\my_icons.sln" /m /t:Rebuild /p:Configuration=Release
if not %ErrorLevel% == 0 (
	echo ********** Icons build failed **********
	pause
	exit /b 1
)

:BuildLangpack
mkdir "%Sources%\%Solution%\%Configuration%64\Languages"
cscript /nologo "%Sources%\tools\lpgen\translate.js" /sourcelang:"russian" /release:"%Sources%\%Solution%\%Configuration%64\Languages\langpack_russian.txt"

:SortCompiledFiles
cd /d "%Sources%\%Solution%\%Configuration%64"
rd /q /s Obj
for /r %%i in (*.ilk,*.iobj,*.ipdb) do del /q /s %%i
for /r Icons %%j in (*.pdb) do del /q /s %%j
for /r %%k in (*.pdb) do move %%k "%Sources%\%Solution%\%Configuration%64"

:KillMiranda
Taskkill /f /im Miranda64.exe

:BackupOldMiranda
if exist "%Temp%\Miranda_backup" rd /q /s "%Temp%\Miranda_backup"
xcopy /i /s /y "%Miranda%" "%Temp%\Miranda_backup"

:UpdateMiranda
xcopy /i /s /y "%Sources%\%Solution%\%Configuration%64" "%Miranda%"

:BuildOpenssl
title Building OpenSSL...
cd /d "%Openssl%"
git apply "%Sources%\tools\openssl\openssl-mir-changes.patch"
perl "%Openssl%\Configure" shared VC-WIN64A
nmake
for %%n in (libcrypto-3.mir,libssl-3.mir) do xcopy /y %%n "%Miranda%\Libs"
for %%n in (libcrypto-3.pdb,libssl-3.pdb) do xcopy /y %%n "%Miranda%"

:RunMiranda
:: dirty hack to prevent the app from inheriting elevated permissions
explorer "%Miranda%\Miranda64.exe"

exit /b 0

my.sln and my_icons.sln are my custom solutions.