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

From Miranda NG
< User:RMNUser:RMN/How to automate Miranda compilation and update
Jump to: navigation, search

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.