Примеры использования пакетных файлов для автоматической компиляции и обновления Miranda IM

From Miranda NG
< User:RMNUser:RMN/How to automate Miranda compilation and update
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Todo [ru]: This guide is a copy of the one from tutorials of miranda-planet.com forums. It needs revision and adaptation to Miranda NG project.


Введение

Перед прочтением данной темы настоятельно рекомендуется ознакомиться с гайдом Самостоятельная компиляция плагинов Miranda IM.

При самостоятельной компиляции Miranda IM и плагинов есть немало пунктов, которые можно автоматизировать с помощью пакетных файлов (обновление исходников из SVN, компиляция и даже обновление собственной сборки).

Создать пустой пакетный файл легко: правый клик мыши по свободному полю на рабочем столе или в Эксплорере, выбрать «Создать», из списка выбрать «Текстовый документ». Создается пустой текстовый файл с названием Новый текстовый документ.txt. Переименовываем его в MyBatch.bat. Всё, пакетник готов! Теперь открываем его для редактирования: правый клик по файлу, выбираем пункт «Изменить», файл откроется для редактирования в Блокноте.

Для ленивых выкладываю пакетный файл, который создаст все нижеперечисленные примеры пакетных файлов.

файл CreateBatchFiles.bat

Инструкция к применению: распаковать в корневой директории исходников (рядом с директориями miranda и miranda-tools) и запустить CreateBatchFiles.bat.

Обновление исходников

<translate> Warning</translate>
Этот раздел устарел и нуждается в переработке.

Перед компиляцией исходники обычно обновляют из SVN-репозитория. Несмотря на все удобства, предоставляемые чудесным SVN-клиентом TortoiseSVN, для автоматизации обновлений нам нужен консольный SVN-клиент. SlikSVN прекрасно подходит для этих целей — часто обновляется, имеет небольшой размер дистрибутива, при установке прописывается в path операционной системы (важно для запуска из пакетных файлов).

В корневой директории исходников (рядом с директориями miranda и miranda-tools) создаем пакетный файл SvnUpdate.bat со следующим содержимым:

svn cleanup
:: В рабочей копии выполняет поиск и выполнение незавершенных лог файлов, удаляя по ходу выполнения блокировки в рабочей копии.

svn update > update.txt
:: Собственно выполняет обновление, записывая результаты в файл "update.txt".

svn log -v -l 20 > svn.log
:: Пишет в файл "svn.log" журнал последних 20-ти событий в SVN репозитории.

Компиляция

Автоматизация компиляции

Далее переходим к автоматизации запуска процесса компиляции в MS VS 2010 Express (именно 2010 Express будет рассматриваться во всех примерах). Открываем miranda32.sln в MS VS 2010 и настраиваем (статика, динамика, оптимизации), выходим из студии, сохранив изменения. Следующий пример пакетника обновляет исходники, компилирует ядро и плагины, очищает папку Release Unicode от лишнего мусора (папка Obj и дебаг-символы *.pdb). На выходе получаем в miranda\bin10 папку Release Unicode c ядром и плагинами и файл журнала компилятора rebuild.log, в который пишется весь процесс компиляции (аналог окна Output в MS VS 2010).

Создаем в корне исходников пакетный файл BuildSolution2010.bat со следующим содержимым:

call SvnUpdate.bat
:: Вызов пакетника обновления из SVN.

cd miranda\bin10
:: Переход в директорию "miranda\bin10".

if exist "Release Unicode" rd /Q /S "Release Unicode" >nul
:: Проверяет наличие папки "Release Unicode" и, при ее наличии, удаляет со всем содержимым.

"%VS100COMNTOOLS%\..\IDE\VCExpress.exe" /OUT rebuild.log /REBUILD "Release Unicode" "miranda32.sln"
:: Вызов компилятора MS VS 2010 Express, с указанием собрать "miranda32.sln" как "Release Unicode" и создать файл журнала "rebuild.log".

rd /S /Q "Release Unicode\Obj"
:: Удаление папки "Obj" со всем содержимым.

del /F /S /Q "Release Unicode\*.pdb"
:: Удаление файлов дебаг-символов *.pdb, включая поддиректории.

Компиляция для платформы x64

Всё вышесказанное верно, с той лишь разницей, что указывается "Release Unicode|x64" как желаемый тип платформы в пакетном файле.

Создаем в корне исходников пакетный файл BuildSolution2010_x64.bat со следующим содержимым:

call SvnUpdate.bat
:: Вызов пакетника обновления из SVN.
::
cd miranda\bin10
:: Переход в директорию "miranda\bin10".
::
if exist "Release Unicode" rd /Q /S "Release Unicode"
:: Проверяет наличие папки "Release Unicode" и, при ее наличии, удаляет со всем содержимым.
::
"%VS100COMNTOOLS%\..\IDE\VCExpress.exe" /OUT rebuild.log /REBUILD "Release Unicode|x64" "miranda32.sln"
:: Вызов компилятора MS VS 2010 Express, с указанием собрать "miranda32.sln" как "Release Unicode|x64" и создать файл журнала "rebuild.log".
::
rd /S /Q "Release Unicode\Obj"
:: Удаление папки "Obj" со всем содержимым.
::
del /F /S /Q "Release Unicode\*.pdb"
:: Удаление файлов дебаг-символов *.pdb, включая поддиректории.

Создание архива на выходе в директории Dropbox

Следующим примером будет упаковка скомпилированного ядра с плагинами в архив и перемещение в папку сервиса Dropbox (В моем случае путь к папке E:\Dropbox, отредактируйте в пакетнике в соответствии с вашими данными) Для создания архивов как нельзя лучше подойдет свободный архиватор 7-Zip, качаем и устанавливаем. На выходе получим файл miranda-0.10.latest-vc2010.7z в директории E:\Dropbox\Public.

Создаем в корне исходников пакетный файл BuildAndArchive.bat со следующим содержимым:

call SvnUpdate.bat
:: Вызов пакетника обновления из SVN.

cd miranda\bin10
:: Переход в директорию "miranda\bin10".

if exist "Release Unicode" rd /Q /S "Release Unicode" >nul
:: Проверяет наличие папки "Release Unicode" и, при ее наличии, удаляет со всем содержимым.

"%VS100COMNTOOLS%\..\IDE\VCExpress.exe" /OUT rebuild.log /REBUILD "Release Unicode" "miranda32.sln"
:: Вызов компилятора MS VS 2010 Express, с указанием собрать "miranda32.sln" как "Release Unicode" и создать файл журнала "rebuild.log".

rd /S /Q "Release Unicode\Obj"
:: Удаление папки "Obj" со всем содержимым.

del /F /S /Q "Release Unicode\*.pdb"
:: Удаление файлов дебаг-символов *.pdb, включая поддиректории.

pushd "Release unicode"
:: Переход в директорию "Release unicode" с запоминанием предыдущей директории.

"%PROGRAMFILES%\7-zip\7z.exe" a -r -mx=9 "miranda-0.10.latest-vc2010.7z"
:: Создание архива 7-zip "miranda-0.10.latest-vc2010.7z" с использованием максимального сжатия.

copy /V /Y miranda-*.7z "E:\Dropbox\Public"
:: Копирование файлов по маске "miranda-*.7z" в директорию "E:\Dropbox\Public" (отредактировать путь) с проверкой правильности копирования и подавлением запроса подтверждения на перезапись файла.

popd
Переход в предыдущую директорию, запомненную командой "pushd".

rd /S /Q "Release Unicode"
:: Удаление папки "Release Unicode" со всем содержимым.

Автоматическое обновление сборки

А сейчас перейдем к самому интересному — обновление вашей сборки свежим релизом. Для этого нам понадобится настроить студию на компиляцию только тех плагинов, что вы используете в своей сборке. Копируем из директории miranda\bin10 файл miranda32.sln в другое место, переименовываем его в miranda32_mypack.sln и возвращаем в miranda\bin10. Открываем miranda32_mypack.sln и в списке слева делаем по правому клику мыши "Unload" проектам тех плагинов, что не используются в сборке, сохраняем, закрываем студию.

Теперь нужно создать пакетный файл с автоматическим обновлением из SVN, компиляцией, принудительным закрытием работающей Miranda IM и обновлением сборки (в моем случае путь к директории сборки E:\Miranda, отредактируйте в пакетнике в соответствии с вашими данными). Для отмены принудительного закрытия (по желанию) закомментируйте в пакетнике строку "taskkill /F /IM miranda32.exe", вписав перед строкой "::" или "rem" (без кавычек).

Создаем в корне исходников пакетный файл BuildAndUpdateMyPack.bat со следующим содержимым:

call SvnUpdate.bat
:: Вызов пакетника обновления из SVN.

cd miranda\bin10
:: Переход в директорию "miranda\bin10".

if exist "Release Unicode" rd /Q /S "Release Unicode" >nul
:: Проверяет наличие папки "Release Unicode" и, при ее наличии, удаляет со всем содержимым.

"%VS100COMNTOOLS%\..\IDE\VCExpress.exe" /OUT rebuild_mypack.log /REBUILD "Release Unicode" "miranda32_mypack.sln"
:: Вызов компилятора MS VS 2010 Express, с указанием собрать "miranda32_mypack.sln" как "Release Unicode" и создать файл журнала "rebuild_mypack.log".

rd /S /Q "Release Unicode\Obj"
:: Удаление папки "Obj" со всем содержимым.

del /F /S /Q "Release Unicode\*.pdb"
:: Удаление файлов дебаг-символов *.pdb, включая поддиректории.

taskkill /F /IM miranda32.exe
:: Принудительное закрытие процесса "miranda32.exe".

xcopy /E /V /Y "Release Unicode\*.*" "E:\MirandaIM"
:: Копирование всего содержимого папки "Release Unicode", включая поддиректории, в "E:\MirandaIM" (отредактировать путь) с подавлением запроса подтверждения на перезапись файлов.

rd /S /Q "Release Unicode"
:: Удаление папки "Release Unicode" со всем содержимым.

Примечания

Для MS VS 2008 Express все вышесказанное верно, за исключением небольших поправок (путь к самой студии и *.sln в исходниках).

Создаем в корне исходников пакетный файл BuildSolution2008.bat со следующим содержимым:

call SvnUpdate.bat
:: Вызов пакетника обновления из SVN.

cd "miranda\bin9"
:: Переход в директорию "miranda\bin9".

if exist "Release Unicode" rd /Q /S "Release Unicode" >nul
:: Проверяет наличие папки "Release Unicode" и, при ее наличии, удаляет со всем содержимым.

"%VS90COMNTOOLS%\..\IDE\VCExpress.exe" /OUT rebuild.log /REBUILD "Release Unicode" "miranda32.sln"
:: Вызов компилятора MS VS 2008 Express, с указанием собрать "miranda32.sln" как "Release Unicode" и создать файл журнала "rebuild.log".

rd /S /Q "Release Unicode\Obj"
:: Удаление папки "Obj" со всем содержимым.

del /F /S /Q "Release Unicode\*.pdb"
:: Удаление файлов дебаг-символов *.pdb, включая поддиректории.

В Visual Studio 2010 Professional вместо VCExpress.exe используется devenv.exe.

call SvnUpdate.bat
:: Вызов пакетника обновления из SVN.

cd miranda\bin10
:: Переход в директорию" miranda\bin10".

if exist "Release Unicode" rd /Q /S "Release Unicode" >nul
:: Проверяет наличие папки "Release Unicode" и, при ее наличии, удаляет со всем содержимым.

"%VS100COMNTOOLS%\..\IDE\devenv.exe" /OUT rebuild.log /REBUILD "Release Unicode" "miranda32.sln"
:: Вызов компилятора Visual Studio 2010 Professional, с указанием собрать "miranda32.sln" как "Release Unicode" и создать файл журнала "rebuild.log".

rd /S /Q "Release Unicode\Obj"
:: Удаление папки "Obj" со всем содержимым.

del /F /S /Q "Release Unicode\*.pdb"
:: Удаление файлов дебаг-символов *.pdb, включая поддиректории.

Для желающих подробнее ознакомиться с работой студии из командной строки: Devenv Command Line Switches Visual Studio 2010.