Совершенно незаметно для меня Miranda IM вместо своей предполагаемой кончины подобно фениксу переродилась в Miranda NG. Мессенджер этот я давно уже собираю из исходных кодов, которые успешно добываю из SVN-репозитория. Раньше их была 1000 и 1 штука, а сейчас он один, да еще и бинарные плагины лежат в одном месте. В один прекрасный день мне надоело всё делать руками и захотелось автоматизировать процесс. В ходе долгих мучений родился bat-скрипт, который вообще всё делает сам. Достаточно его только запустить.
Скрипт простой и линейный, проверок в нём практически нет, но тем не менее работу он свою делает.
Для его работы необходимы следующие условия:
- Работающий клиент для SVN-репозиториев, например TortoiseSVN, который должен быть прописан в переменной окружения "PATH";
- Наличие Microsoft Visual Studio;
- Программа unzip.exe, которую модно найти по адресу http://www.info-zip.org/UnZip.html;
- Программа wget.exe, которую можно взять по адресу http://gnuwin32.sourceforge.net/packages/wget.htm.
inst_mir.bat - сам скрипт. О нем чуть позже.
exclude.lst - список исключений. На самом деле этот файл нужен, чтобы не переносить в сборку отладочную информацию.
iconsdl.lst - список пакетов значков, которых по тем или иным причинам нет в репозитории, но есть на сайте среди готовых сборок.
plugins.lst - список используемых плагинов. Простой список dll-файлов из папки "Plugins".
pluginsdl.lst - список плагинов, которых по тем или иным причинам нет в репозитории. Простой список без расширений.
Вроде всё. Теперь пора подготовить папку исходников для сборки.
Сначала с помощью SVN-клиента извлекаем содержимое репозитория по ссылке https://mysvn.ru/ghazan/myranda/trunk. Теперь переходим в папку "bin10" внутри нашей компии репозитории и открываем файлы "mir_full_pro.sln" и "mir_icons.sln" в MSVS. Там же производим настройку проектов: конфигурация "Release" и платформа "Win32". В туже папку кладем unzip.exe и wget.exe. Всё это можно прописать в скрипте, но мне было так проще.
Теперь все 5 файлов складываем в в туже папку и все их открываем и редактируем.
Начнем с inst_mir.bat. В самом его начале прописаны две переменных:
set MIRDIR=d:\miranda-ng - папка, в которую установлена Miranda NG.
set PLUGDIR=Release - папка внутри "bin10", в которой будут лежать собранные файлы.
Теперь очередь exclude.lst. В нем всего одна строчка:
.pdb
В файле iconsdl.lst у меня прописано тольк "historypp_icons", потому что сам плагин написан на Delphi и не собирается в MSVS со всеми остальными.
В файле plugins.lst я собрал довольно много плагинов, которыми пользуюсь. Приведу только часть списка:
AddContactPlus.dll
AdvaImg.dll
AdvancedAutoAway.dll
AIM.dll
AssocMgr.dll
AuthState.dll
AvatarHistory.dll
AVS.dll
Файл pluginsdl.lst тоже заполнил списком того, что не собирается в MSVC:
historypp
quicksearch
Теперь всё готово для сборки!
Переходим в папку "bin10" и запускаем inst_mir.bat. В процессе выполнения будет произведено обновление репозитория до актуальной ревизии, сборка всех файлов, корректное закрытие программы, загрузка недостающих файлов, обновление и повторный запуск новой версии программы.
Ну и сам код скрипта:
@echo off set MIRDIR=d:\miranda-ng set PLUGDIR=Release echo [ Updater by Radjah ] echo. echo [*] Updating sources... cd .. svn up cd bin10 echo. echo [*] Building... del /f /q build.log start /wait devenv /OUT build.log mir_full_pro.sln /Build echo. echo [*] Building icon cillections... start /wait devenv /OUT build.log mir_icons.sln /Build echo. echo [*] Generating russian langpack.. cd ..\langpacks\ru\ LangpackSuite.exe \q \nLangpack_russian cd ..\..\bin10 echo. echo [*] Closing Miranda NG... %PLUGDIR%\MimCmd.exe quit echo [*] Waiting... ping 127.0.0.1 -n 10 > nul taskkill /f /im miranda32.exe echo [*] Installing Core... xcopy %PLUGDIR% %MIRDIR% /Y /EXCLUDE:exclude.lst echo. echo [*] Installing icons... xcopy %PLUGDIR%\Icons %MIRDIR%\Icons /Y /E echo. echo [*] Installing Core plugins... xcopy %PLUGDIR%\Core %MIRDIR%\Core /Y /E /EXCLUDE:exclude.lst echo. echo [*] Downloading binary plugins... for /F %%i in (pluginsdl.lst) do ( echo ...%%i wget http://miranda-ng.org/distr/x32/Plugins/%%i.zip -O %%i.zip cd %PLUGDIR% ..\unzip -o ..\%%i.zip cd .. del /F /Q %%i.zip) echo [*] Downloading binary icon collections... for /F %%i in (iconsdl.lst) do ( echo ...%%i wget http://miranda-ng.org/distr/x32/Icons/%%i.zip -O %%i.zip cd %PLUGDIR% ..\unzip -o ..\%%i.zip cd .. del /F /Q %%i.zip) echo [*] Installing optional plugins... for /F %%i in (plugins.lst) do ( echo ...%%i into %MIRDIR%Plugins\... copy /Y %PLUGDIR%\Plugins\%%i %MIRDIR%\Plugins\%%i) echo. echo [*] Installing russian langpack... copy ..\langpacks\ru\Langpack_russian.txt %MIRDIR%\ echo. echo [*] Running Miranda NG... cd %MIRDIR% start Miranda32.exe echo. echo [*] Done! pause