Pull to refresh

MonoDevelop на Nokia N900. Where is your God now?

Reading time 3 min
Views 2.3K

Работает всё, что вообще может работать. Редактор, компиляция, отладчик, значение переменной по клику в отладчике. С диким скрипом и скрежетом даже дизайнер форм.

Пощупать сии ништяки у себя на мобилке можно добавив
deb http_://archive.kebrum.com/n900/ all main
В sources.list (надеюсь, я ничего не забыл при упаковке). Также понадобится подключить extras-testing и extras-devel. После чего набрать в консоле apt-get install monodevelop. Вся иерархия пакетов полностью соответствует таковой в Debian, за исключением 2 оптификационных, но они автоматом подтянутся по зависимостям.

Пока пакеты ставятся, забивая бесценное место в rootfs библиотеками из маэмовских репов (у меня-то всё в /opt, вы не подумайте!), предлагаю Вам почитать, как дошёл я до жизни такой.



Я хотел рассказать обо всём по-порядку, но для начала пятиминутка ненависти.

Хочу передать привет содомитам из Nokia, которые вместо нормального эмулятора своего девайса подсунули недоделанную старую версию qemu-arm, что сделало невозможным использование моновского компилятора, и, как следствие, сборки какого-либо управляемого кода посредством этого их SDK. Они подарили мне много весёлых часов.
Хочу передать привет разработчикам биндингов к gtk, которые соорудили генератор кода, который генерит нечто некомпилируемое (что превратило их сборку в кошмар из серии «не пытайтесь повторить это дома»), а так же считающим, что в гткшном диалоге в action area обязательно находится HButtonBox, хотя документация говорит, что там абстрактный контейнер (в результате чего GtkDialog.ArctionArea всегда было null). Они тоже подарили мне немало весёлых часов.
Так же хочу передать привет разрабочикам Mono.Addins, которые пишут вот такой код:

string folder = args.Length > 2 ? args [2] : null;
if (folder.Length == 0) folder = null;


На этом пятиминутку ненависти можно считать законченной. В конце концов они все хорошие люди, благодаря которым всё это вообще заработало.

Собственно, после написания предыдущего поста я решил отказаться от правки debian/rules с целью переноса всего хлама в /opt, поскольку это ломало часть компонентов. Теперь оптификация производится предварительным созданием симлинков на нужные директории. Кстати, за счёт этого можно легко вычистить monoи всё с ним связанное, просто удалив пакет mono-opt-prepare. После сборки биндингов к гтк, и проверки работоспособности того, ради чего всё затевалось (кстати, софтина вообще без изменений исходника завелась, сейчас переделываю диалоги под размер экрана и управление пальцем), я решил проверить сборку в целом. Какая самая сложная программа на GTK#? Правильно, Monodevelop. Непосредственно после сборки всех зависимостей (часть пакетов была утянута непосредственно в бинарном виде с ports.ubuntu.com) я напоролся на следующую пакость:
image

И так практически со всеми диалогами. Поскольку сырцы биндингов уже были пропатчены в связи с багом с ActionArea, я не придумал ничего лучше чем спрятать от внешнего наблюдателя оригинальный VBox, а вместо него подсунуть другой, обёрнутый в ScrolledWindow. Полчаса шаманств и получился GtkDialog, адекватно подстраивающийся под размеры своего содержимого. Примерно вот так:



Что помешало нокиевским программистам сделать то же самое (учитывая, что диалог они и так переделали до состояния несовместимости с биндингами), а не ломать софт, заточенный под большие экраны, для меня остаётся загадкой. Если кто-то захочет таки достучаться до оригинального VBox-а, то это легко сделать просто перейдя по ссылкам на 2 уровня иерархии вверх.

Некоторую проблему представило из себя взаимодействие с отладчиком и компилятором, но это решилось посредством добавления ещё нескольких симлинков, хоть и потребовало копаться в исходнике.

Теперь ложка дёгтя. У меня не получилось отключить HILDON_GTK_INPUT_MODE_AUTOCAP через IMContext (для TextArea и Entry всё прекрасно, но MonoDevelop использует свой контрол для редактирования текста и работает с IMMultiContext напряму), так что придётся либо отключать автоподстановку заглавных букв глобально, либо печатать зажав шифт. Если кто-то владеет информацией по этому поводу, прошу поделиться.

Помимо перечисленного эта зараза почему-то не видит в списке сборок для подключения библиотеки, не относящиеся непосредственно к Mono. Это лечится добавлением оных по абсолютному пути. Это я попробую исправить, но ничего не обещаю.

И ещё. В нокиевские репы это, по всей видимости никогда не попадёт по той причине, что из-за особенностей процесса сборки (этот файл берём с эмуля, те 10 из скомпиленного под убунту, тут тормозим процесс сборки и подсовываем сгенерированный под той же убунтой исходник, правим линки, правим debian/control, etc) невозможно создать вменяемые пакеты исходного кода, а убедить их в безопасности бинарников весьма сложно. В прочем, если кто-то связан с этой тусовкой и решится помочь, буду рад.

Напоминаю, что теперь софт для N900 можно разрабатывать хоть в Visual Studio, если у кого-то с этим возникнут проблемы, обращайтесь, буду рад помочь.

UPD: выяснилось, что при отсутствии bash возникают проблемы с установкой. Если кто уже столкнулся, то лечится apt-get install bash. Сейчас пропишу его в зависимости.

UPD2: А ещё запустился Paint.NET:

Пакет зовётся paint-mono и уже есть в репозитории.
Tags:
Hubs:
+120
Comments 41
Comments Comments 41

Articles