User:Dart Raiden/Build Miranda: Difference between revisions

From Miranda NG
Jump to navigation Jump to search
No edit summary
No edit summary
 
(48 intermediate revisions by the same user not shown)
Line 1: Line 1:
start.bat:
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:
<pre style="overflow:auto;">
<pre style="overflow:auto;">
@echo off
@echo off


start /wait elevate -c -w build.bat
:: Check privileges
start "" "%PROGRAMFILES%\Miranda NG\Miranda64.exe"
reg query "HKU\S-1-5-19\Environment" >nul 2>&1
exit
if %ErrorLevel% neq 0 (
</pre>
    echo Please run as administrator^^!
    pause
    exit
)
 
:: Whether to compile TDLib or not
set "BuildTDLib=1"
 
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 "OpenSSLSources=D:\dev\openssl"
set "PATH=%ProgramFiles%\NASM;%PATH%"
set "Solution=bin15"
set "MirandaSources=D:\dev\miranda-ng"
 
:: Clean Miranda sources
if exist "%MirandaSources%\%Solution%\%Configuration%64" (
    rd /s /q "%MirandaSources%\%Solution%\%Configuration%64"
)
cd /d "%MirandaSources%"
call cleaner.bat


build.bat:
:: Update Miranda sources
<pre style="overflow:auto;">
git --work-tree="%MirandaSources%" --git-dir="%MirandaSources%/.git" pull
@echo off
:: Or you can use something like tortoisegitproc /command:pull /path:"%MirandaSources%"


set sources=D:\dev\miranda-ng
:: Set VS environment variables
set solution_dir=bin15
call "%VS%\VC\Auxiliary\Build\vcvarsall.bat" x64
set configuration=Release
set miranda_path=%PROGRAMFILES%\Miranda NG
set vspath=%PROGRAMFILES(X86)%\Microsoft Visual Studio\2017\Community
set msbuild=%vspath%\MSBuild\15.0\Bin\MSBuild.exe


:set_vs_variables
if "%BuildTDLib%"=="1" (
call "%vspath%\Common7\Tools\vsdevcmd.bat" -arch=amd64 -host_arch=amd64 -no_logo -vcvars_spectre_libs=spectre
    :: Build TDLib
    title Building TDLib...
    "%MSBuild%" "%MirandaSources%\%Solution%\tdlib.sln" /m /t:Rebuild /p:Configuration=%Configuration%
    if %ErrorLevel% neq 0 (
        echo ********** TDLib build failed **********
        pause
        exit
    )
)


:clean_old_build
:: Build Miranda
cd /d "%sources%\%solution_dir%"
title Building Miranda...
if exist "%sources%\%solution_dir%\%configuration%64" rd /q /s "%sources%\%solution_dir%\%configuration%64" >nul
"%MSBuild%" "%MirandaSources%\%Solution%\my.sln" /m /t:Rebuild /p:Configuration=%Configuration%
if exist "%sources%\include\m_version.h" del /q /s "%sources%\include\m_version.h"
if %ErrorLevel% neq 0 (
call "%sources%\cleaner.bat"
    echo ********** Miranda build failed **********
    pause
    exit
)


:update_sources
:: Build icons
call TortoiseGitProc /command:pull /path:"%sources%"
title Building icons...
"%MSBuild%" "%MirandaSources%\%Solution%\my_icons.sln" /m /t:Rebuild /p:Configuration=%Configuration%
if %ErrorLevel% neq 0 (
    echo ********** Icons build failed **********
    pause
    exit
)


:build_miranda
:: Build langpack
call "%msbuild%" %sources%\%solution_dir%\my.sln /m /t:Rebuild /p:Configuration=Release /p:Platform=x64
mkdir "%MirandaSources%\%Solution%\%Configuration%64\Languages"
if errorlevel 1 (
cscript /nologo "%MirandaSources%\tools\lpgen\translate.js" /sourcelang:"russian" /release:"%MirandaSources%\%Solution%\%Configuration%64\Languages\langpack_russian.txt"
echo ********** MIRANDA BUILD FAIL **********
pause
exit )


:build_icons
:: Sort compiled files
call "%msbuild%" %sources%\%solution_dir%\my_icons.sln /m /t:Rebuild /p:Configuration=Release /p:Platform=x64
cd /d "%MirandaSources%\%Solution%\%Configuration%64"
if errorlevel 1 (
rd /q /s Obj
echo ********** ICONS BUILD FAIL **********
for /r %%i in (*.ilk,*.iobj,*.ipdb) do del /q %%i
pause
for /r %%j in (Icons\*.pdb) do del /q %%j
exit )
for /r %%k in (*.pdb) do move /y %%k "%MirandaSources%\%Solution%\%Configuration%64"


:sort
:: Kill Miranda
cd /d "%sources%\%solution_dir%\%configuration%64"
Taskkill /f /im Miranda64.exe 2>nul
rd /q /s "%sources%\%solution_dir%\%configuration%64\Obj" >nul
for /r "%sources%\%solution_dir%\%configuration%64" %%i in (*.ilk,*.iobj,*.ipdb) do del /q /s %%i >nul
for /r "%sources%\%solution_dir%\%configuration%64\Icons" %%j in (*.pdb) do del /q /s %%j >nul
for /r "%sources%\%solution_dir%\%configuration%64" %%k in (*.pdb) do move %%k "%sources%\%solution_dir%\%configuration%64" >nul


:kill
:: Backup old Miranda
Taskkill /f /im Miranda64.exe
if exist "%Temp%\Miranda_backup" (
timeout 3
    rd /q /s "%Temp%\Miranda_backup"
)
xcopy /i /s /y "%Miranda%" "%Temp%\Miranda_backup"


:backup
:: Update Miranda
if exist "%miranda_path%\Plugin Updates\Backups" rd /q /s "%miranda_path%\Plugin Updates\Backups" >nul
xcopy /i /s /y "%MirandaSources%\%Solution%\%Configuration%64" "%Miranda%"
if exist "%TEMP%\Miranda_backup" rd /q /s "%TEMP%\Miranda_backup" >nul
xcopy /i /s /y "%miranda_path%" "%TEMP%\Miranda_backup" >nul


:replace
:: Build OpenSSL
cd /d "%sources%\%solution_dir%\%configuration%64"
if exist "%Temp%\OpenSSL" (
for %%l in (exe,mir,pdb) do del /q /s "%miranda_path%\*.%%l" >nul
    rd /s /q "%Temp%\OpenSSL"
for %%m in (Core,Icons,Plugins) do rd /q /s "%miranda_path%\%%m" >nul
)
xcopy /i /s /y "%sources%\%solution_dir%\%configuration%64" "%miranda_path%" >nul
xcopy /i /s "%OpenSSLSources%" "%Temp%\OpenSSL"
for %%n in (libeay32.mir,ssleay32.mir) do xcopy /y "%TEMP%\Miranda_backup\Libs\%%n" "%miranda_path%\Libs" >nul
title Building OpenSSL...
for %%o in (libeay32.pdb,ssleay32.pdb) do xcopy /y "%TEMP%\Miranda_backup\%%o" "%miranda_path%" >nul
cd /d "%Temp%\OpenSSL"
git apply "%MirandaSources%\tools\openssl\openssl-mir-changes.patch"
perl "%Temp%\OpenSSL\Configure" shared VC-WIN64A
nmake
if %ErrorLevel% neq 0 (
    echo ********** OpenSSL build failed **********
    pause
    exit
)
copy /y libcrypto-3.dll "%Miranda%\Libs\libcrypto-3.mir"
copy /y libssl-3.dll "%Miranda%\Libs\libssl-3.mir"
copy /y libcrypto-3.pdb "%Miranda%\libcrypto-3.pdb"
copy /y libssl-3.pdb "%Miranda%\libssl-3.pdb"


:clean
:: Run Miranda (dirty hack to prevent the app from inheriting elevated permissions)
cd /d "%sources%\%solution_dir%"
explorer "%Miranda%\Miranda64.exe"
if exist "%sources%\%solution_dir%\%configuration%64" rd /q /s "%sources%\%solution_dir%\%configuration%64" >nul
if exist "%sources%\include\m_version.h" del /q /s "%sources%\include\m_version.h"


exit
exit
</pre>
</pre>


[http://code.kliu.org/misc/elevate/ Here] you can download elevate utility. my.sln and my_icons.sln are my custom solutions.
my.sln and my_icons.sln are my custom solutions.

Latest revision as of 00:39, 4 November 2025

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

build.bat:

@echo off

:: Check privileges
reg query "HKU\S-1-5-19\Environment" >nul 2>&1
if %ErrorLevel% neq 0 (
    echo Please run as administrator^^!
    pause
    exit
)

:: Whether to compile TDLib or not
set "BuildTDLib=1"

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 "OpenSSLSources=D:\dev\openssl"
set "PATH=%ProgramFiles%\NASM;%PATH%"
set "Solution=bin15"
set "MirandaSources=D:\dev\miranda-ng"

:: Clean Miranda sources
if exist "%MirandaSources%\%Solution%\%Configuration%64" (
    rd /s /q "%MirandaSources%\%Solution%\%Configuration%64"
)
cd /d "%MirandaSources%"
call cleaner.bat

:: Update Miranda sources
git --work-tree="%MirandaSources%" --git-dir="%MirandaSources%/.git" pull
:: Or you can use something like tortoisegitproc /command:pull /path:"%MirandaSources%"

:: Set VS environment variables
call "%VS%\VC\Auxiliary\Build\vcvarsall.bat" x64

if "%BuildTDLib%"=="1" (
    :: Build TDLib
    title Building TDLib...
    "%MSBuild%" "%MirandaSources%\%Solution%\tdlib.sln" /m /t:Rebuild /p:Configuration=%Configuration%
    if %ErrorLevel% neq 0 (
        echo ********** TDLib build failed **********
        pause
        exit
    )
)

:: Build Miranda
title Building Miranda...
"%MSBuild%" "%MirandaSources%\%Solution%\my.sln" /m /t:Rebuild /p:Configuration=%Configuration%
if %ErrorLevel% neq 0 (
    echo ********** Miranda build failed **********
    pause
    exit
)

:: Build icons
title Building icons...
"%MSBuild%" "%MirandaSources%\%Solution%\my_icons.sln" /m /t:Rebuild /p:Configuration=%Configuration%
if %ErrorLevel% neq 0 (
    echo ********** Icons build failed **********
    pause
    exit
)

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

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

:: Kill Miranda
Taskkill /f /im Miranda64.exe 2>nul

:: Backup old Miranda
if exist "%Temp%\Miranda_backup" (
    rd /q /s "%Temp%\Miranda_backup"
)
xcopy /i /s /y "%Miranda%" "%Temp%\Miranda_backup"

:: Update Miranda
xcopy /i /s /y "%MirandaSources%\%Solution%\%Configuration%64" "%Miranda%"

:: Build OpenSSL
if exist "%Temp%\OpenSSL" (
    rd /s /q "%Temp%\OpenSSL"
)
xcopy /i /s "%OpenSSLSources%" "%Temp%\OpenSSL"
title Building OpenSSL...
cd /d "%Temp%\OpenSSL"
git apply "%MirandaSources%\tools\openssl\openssl-mir-changes.patch"
perl "%Temp%\OpenSSL\Configure" shared VC-WIN64A
nmake
if %ErrorLevel% neq 0 (
    echo ********** OpenSSL build failed **********
    pause
    exit
)
copy /y libcrypto-3.dll "%Miranda%\Libs\libcrypto-3.mir"
copy /y libssl-3.dll "%Miranda%\Libs\libssl-3.mir"
copy /y libcrypto-3.pdb "%Miranda%\libcrypto-3.pdb"
copy /y libssl-3.pdb "%Miranda%\libssl-3.pdb"

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

exit

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