Смартфоны
30 апреля 2011

Mono 2.10.1 и MonoDevelop 2.6 с работающим дизайнером форм в extras-testing репозиториях для N900

А вдруг я ещё не всех задолбал?
В общем, с помощью чёрной магии, лома и какой-то матери мне таки удалось заставить Mono собираться под скрэтчбоксом, а MonoDevelop довести до вменяемого состояния, так что теперь нормально работает редактор GUI.



Чтобы поставить это чудо себе на железку, надо подключить extras-testing (этого ещё кто-то не сделал?) и выбрать его в менеджере программ. Если была установлена версия из прошлого поста, то её лучше зачистить, ибо может криво обновиться.

Нестандартные технические решения


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

Ну, менюшки менюшками, а гуёвый дизайнер хоть и работает, но компоненты на форму класть не даёт. Почему? А всё просто. В GTK отключен Drag-n-Drop. Когда я копал, пытаясь понять в чём дело, я обнаружил в начале функции gtk_begin_drag следующее:

#ifdef MAEMO_CHANGES   
/* Reject any DND requests unconditionally. */ 
return NULL;
#endif

Нормально, да? Никаких тебе конфигов, настроек и переменных окружения. Просто топорно вырубили. Это, видимо, задел на будущее для добавления «новых» фич раскомментированием кода. После перекомпиляци без этой строчки Drag-n-Drop чудесным образом заработал, представляете? Ну, системное гтк трогать не стоит, мало ли что у них там из-за этого сломается, так что теперь так и гружу правильную библиотеку через LD_PRELOAD.

Автобилдер для репов с логикой не дружит совершенно. Пример. В пакете исходного кода есть пакеты только с архитектурой all. Их собирают под i386. Если там помимо архитектуры all засветилось i386, то где это всё начнут компилять? Правильно, под ARM.

Об остальных особенностях, пожалуй, промолчу, пора уже заканчивать пятиминутку ненависти. В принципе сама IDE завелась практически без патчей (большая часть косяков, связанных с GTK исправляется спец. кодом в биндингах). Это говорит в пользу программистов Novell (или кто там их купил?), особенно учитывая, что Maemo до сих пор базируется на коде Debian 3.0. Кстати, свежего MonoDevelop пока что даже в репах debian experimental нет.

Что же касается самого рантайма, то основная идея состоит в том, чтобы распилить пакет исходников на 2 части, одна из которых будет под i386 спокойно собирать управляемые бинарники, а вторая их вообще не трогает и занимается только нативным.

Соответственно после получения собранного рантайма заставить компилер работать в arm-ом скрэтчбоксе было делом пары скриптов и похищенных предварительно из i386-ного нормальных библиотек. Бинари для i386 грузятся мимо qemu-arm, так что если перетащить ld-linux.so.2 с нужными зависимостями, то ничто не мешает запускать родной для процессора код. В результате компилер стартует именно таким образом.

В общем, как-то так. Теперь у нас есть полноценная IDE.

UPD: Я, похоже, проворонил какие-то неочевидные зависимости. Если не запускается, ставьте ещё mono-complete. Пофикшенный пакет сейчас компилируется.

+41
1,2k 7
Комментарии 11