Самостоятельная компиляция плагинов Miranda IM

From Miranda NG
< User:RMNUser:RMN/How to compile Miranda plugins on one's own
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 из SVN.


Введение

Последнее время меня часто спрашивают как самостоятельно собрать тот или иной плагин для Миранды, или само ядро. Данный гайд пишется именно чтобы предотвратить в дальнейшем подобные вопросы. Начнем с главного: я не программист. Следовательно, людям искушенным в искусстве написания программ, просьба не ругаться и не бить сильно за те неточности, которые будут допущены ниже (а они будут, исходя из постулата что я не владею языками программирования).

Section1

Ядро и плагины Миранды, находящиеся в ее основном репозитории, написаны на языке C и C++. Следовательно для того, чтобы собрать конечный продукт, нам будет необходим компилятор языка C/C++. Исходные коды Миранды и плагинов (большинства) содержат файлы проектов под MS Visual Studio. Правда тут небольшой нюанс: разные программисты пользуются разными версиями MS VS. В основном репозитории Миранды есть файл проектов к 2003, 2005 и 2008 студиям. В сторонних плагинах часто такой упорядоченности не бывает, и там выкладываются проекты только под конкретную студию, зачастую старую. Например, встречаются проекты под 6-ю версию (справка: MS VS 2003 — 7-я версия, 2005 — 8-я, 2008 — 9-я, 2010 — 10-я). Альтернативой компилятору, входящему в состав MS VS, является MinGW, в некоторых плагинах встречаются проекты и под него, но только в некоторых, поэтому уделять ему внимание не будем.

Итак, рассмотрим в качестве примера компилятора MS VS 2010 Express. Для скачивания данной версии следует пройти по этой ссылке. Я настоятельно рекомендую воспользоваться именно английской версией, потому что русская среда разработки это, как минимум, странно. Плюс данной редакции в том, что она, по сравнению с другими версиями VS, мала и бесплатна. Также нам понадобится вторая чрезвычайно ценная и нужная программа — TortoiseSVN. Скачав и установив данную программу (и, при желании, языковый пакет к ней), после перезагрузки системы мы увидим в контекстном меню Windows новые пункты:

TortoiseSVN - menu items RU.png

Section2

Следующим действием должно стать создание основной, корневой папки, где будут лежат исходные коды Миранды. Да-да, желательно иметь под рукой все исходники ядра и плагинов идущих с ядром. Для людей крайне ограниченных в трафике, необходимо иметь как минимум папку /include/ из репозитория Миранды (только если вы хотите собирать сторонние плагины). Из личного опыта могу сказать, что путь к локальной копии репозитория лучше сделать без пробелов и без русских символов в названиях папок. Например, путь к моей копии исходных кодов Миранды имеет такой вид: D:\Sources\miranda\

Итак, создаем папку и, вызвав контекстное меню, нажимаем пункт «Извлечь». Появится окошко с просьбой ввести адрес репозитория (см. ниже), с которого необходимо произвести скачивание исходных кодов.

В папке, куда было указано скачивание исходников, вы найдете две директории: miranda и miranda-tools. В первую очередь нас интересует папка miranda. Структура папок внутри неё должна выглядеть следующим образом:

bin
bin7
bin8
bin9
bin10
docs
i18n
include
lib
plugins
protocols
src

Мы собираем в 2010 студии, следовательно нам нужна папка bin10, именно там находится проектный файл под эту версию — miranda32.sln. Откроем его.

VS - solution screen.jpg

Слева мы видим решения проектов для модулей и ядра Miranda. Прежде чем собрать решение, нам необходимо установить режим компилирования: Release Unicode для Unicode версии плагина или Release для ANSI. В настройках решения (ПКМ по решению проекта) Properties → C/С++ → Code generations → Runtime Library — необходимо установить для создания статического билда значение MT или, для динамического, MD.

VS - runtime library.jpg

В случае с портабельностью надо четко понимать, что существует определенная проблематика. Возьмем, к примеру, ядро и плагины Миранды, собранные динамически в 2003 студии. Чтобы обеспечить портабельность такой сборки, необходимо всего лишь закинуть рантаймы 2003 студии в корень папки Миранды, и все (msvcr71 и т.п.). В случае если плагины собираются динамически в более поздних версиях студий, то просто кинуть рантаймы в папку с Мирандой не получится. К сожалению, более поздние версии рантаймов требуют в системе наличие файла манифеста для установленных рантаймов.

Далее мнения расходятся, лично я считаю, что недостаточно кинуть в корень Миранды еще и файл манифеста к библиотекам, т.к. если оно и будет работать, не факт что корректно. Другие утверждают, что это выход и вроде все как окей пашет. Это что касательно динамической линковки.

Теперь стоит поговорить о статической линковке. Плагины, собранные в условиях статической линковки, имеют как правило существенно больший размер, в отличие от динамической сборки (примерно в 2 раза). Но в то же время они лишены главного недостатка динамической линковки — требования наличия библиотек в системе. То есть, для плагинов собранных со статической линковкой не понадобятся библиотеки даже в корне Миранды. Именно такую вариацию лично я и предпочитаю.

Немного о скорости. По логике понятно, что динамическая линковка оказывается быстрее статической, ненамного но все же. Я бы сказал, что такое утверждение правдиво для систем безантивирусной защиты, или тех антивирусов которые не отслеживают обращения сторонних программ к системным файлам, библиотекам и т.п. Проведя тесты на KIS 7 и 2009 могу сказать, что ощутимой разницы в скорости не заметно, пожалуй статическая линковка в данном случае шуршит даже быстрее. Также, важным моментом в этом деле является вопрос наличия оптимизации при сборке плагина: sse и sse2. Плагины, собранные динамически с оптимизациями sse2, по утверждениям пользователей, загружаются существенно быстрее чем без оптимизации, с sse или статические. Но, к сожалению, sse2 поддерживают далеко не все типы процессоров, и если с Intel все более-менее окей (примерно последние 4–5 лет у них во всех процессорах есть поддержка этого набора инструкций) то с AMD все очень неоднозначно.

Далее жмем правой кнопкой по интересующему нас проекту и нажимаем Rebuild Solution.

VS - rebuild.jpg

Также существует возможность компиляции сразу для нескольких режимов, для этого нажмите кнопку Batch Build… (ПКМ по проекту).

VS - batch build.jpg

Внимание

  • SVN — это хранилище кода, как правило, на стадии написания и тестирования.
  • НЕ КОМПИЛИРУЙТЕ плагины, если вы не уверены, что их работоспособность гарантирована. (Спасибо Awkward)
  • Перед компилированием сделайте резервные копии рабочих плагинов.

Репозитории Miranda IM

Для людей с ограниченным трафиком следует качать по ссылкам:

Рекомендуется использовать с осторожностью и только опытным пользователям.


Авторы данного руководства:

Креол, mozzila (дополнения, сборка материала и скриншоты)