commit -m "better"
2.96K subscribers
873 photos
106 videos
3 files
2.08K links
just random thoughts
Download Telegram
Мне тут в комментариях посоветовали вместо gnome files собрать https://wiki.lxde.org/ru/PCManFM #pcmanfm

Мне это показалось хорошим вариантом, часть LXDE, ни от чего не зависит(ну, почти), на вид выглядит не очень страшно.

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

Замечания по ходу процесса:

* libfm для сборки потребовало gtk-doc, причем практически неотключаемым образом.

Про свои муки с #docbook я уже как-то писал, но тут получилось, что просто так обойти эту зависимость не получается.

Небольшое лирическое отступление. Проекты на GNU #autohell требуют для построения configure наличие dev части некоторых зависимых пакетов, даже если ты потом не захочешь использовать этот пакет, и отключишь его через —disable-XXX.

Поэтому зависимость от gtk-doc я пока решил так - у меня корректно собирается и устанавливается часть gtk-doc, нужная для генерации autohell скриптов, а вот потом, если не позвать —disable-gtk-doc в configure, все будет взрываться самым неприятным образом. Я, конечно, нужный —disable- зову.

* libfm потребовала некую libmenu-cache, которая потребовала libfm. Я тут немного прифигел, но таки да:

https://github.com/lxde/menu-cache

"Since version 0.7.0 the Libmenu-cache requires Libfm-extra for the menu-cache-gen menu cache generation binary. Since Libfm depends on Libmenu-cache, there is some hint for bootstrapers how to build those libraries together: you need create Libfm-extra first, you can easily do this by passing '--with-extra-only' option to configure script and installing Libfm-extra."

С моей точки зрения:

* коллега нагадил посреди комнаты

* вместо того, чтобы тихонько прибраться, повесил табличку "я нагадил, обход тут"

"А что подумал по этому поводу Кролик, никто так и не узнал, потому что Кролик был очень воспитанный"

(нет, Кролик был в ахуе, и выпал в осадок так-то)

* К сожалению, посреди процесса сборки уже самого pcmanfm, я обнаружил, что оно таки непосредственно зависит от X11, и я не могу это собрать и использовать.

Сначала я решил, что ну и хер с ним, но потом внимательнее посмотрел на код, и понял, что могу изящно обойти эту зависимость от X, потому что она используется только если запустить этот FM в качестве X Desktop.

https://git.sr.ht/~pg/mix/tree/main/item/pkgs/bin/pcmanfm/mix.sh#L34

По сути, мне пришлось заменить один файлик размером 200К на несколько заглушек. Попрошу отметить, как я изящно расставил abort() в некоторых местах, чтобы быть уверенным, что мы не обсчитываем мусор. Все очень надежно!

Короче, оно даже запустилось, и даже заработало, с некоторыми глюками. Не работает прокрутка мышью, я это списываю на то, что никто и никогда этот код с Wayland не запускал, по понятным причинам. На вид чистенько, бедненько, все, как я люблю в софте.

Самое неприятное, конечно, в другом: #libmagic

Я успел прочитать часть кода, связанную с mime info, и с запуском приложений. Код рыхлый, неприятный, видно, что проект затащили грубой силой. Знаете, вот возникает момент, когда надо выделить функцию, а ты все равно в 10 местах вставляешь еще 1 if.

Поэтому за час у меня не получилось переделать всю эту машинерию на запуск xdg-open вместо своей таблицы отображения mime types на команду, а без этого у меня оно пока неюзабельно.

Пока отложил в сторону.
🔥8👍1
Я вчера написал, что не буду дочинивать #pcmanfm, но я был бы не я, если бы не взялся дочинить. Тревожный зуд что "что-то не работает" - штука такая. #debug

Прорвался сквозь сложносочиненный код для детектирования mime types, и выяснил нечто совершенно феерическое.

Если в одну программу слинковать lib/glib + lib/magic, то magic_buffer() начинает возвращать nullptr, а если без lib/glib - то "application/gzip" на данные для случайного .gz архива.

Это очень всрато, и, по сути, такое возможно только если с glib приезжают символы, которые оверрайдят какие-то weak символы в программе.

В процессе поиска я было отчаялся, но нашел флажок MAGIC_DEBUG, который выводил на экран запчасти от того, как работает #libmagic. Я там, почти случайно, понял, что:

* в libmagic есть правила на регулярках

* она их применяет линейным перебором, что, само по себе, пиздец

* libmagic ломается на первом же правиле с регулярками. Тут у меня, что называется, щелкнуло, и пазл сложился.
Вместе с glib приезжает libpcre, в составе которой есть библиотека libpcreposix.a, которая содержит в себе реализацию posix regex.x - regcomp/regexec/etc.

* (к слову, pcmanfm 4 раза дергает функцию для определения mime type для каждого файла, причем 2 раза из них реально считывает данные с диска)

Получалось так, что код собирался с определениями из musl regex.h, а линкер брал символы из pcre.

gdb) b regexec 
Breakpoint 1 at 0x2bf0cf: file src/pcreposix.c, line 328.
(gdb) b regcomp
Breakpoint 2 at 0x2bef33: file src/pcreposix.c, line 274.

Ни к чему хорошему это не приводило, в том числе, ломался и libmagic.

Я это починил, mime types заработали.

Ура? Пьем шампанское? Ага, конечно.

После пересборки world сломался браузер(напомню, что я использую epiphany).

Уже примерно понимая, в чем дело, я поставил breakpoint, и снял вот такой трейc:

#0  0x0000000008650e70 in regexec ()
#1 0x0000000007dd061b in optConfStartElem ()
#2 0x000000000857acb7 in doContent ()
#3 0x0000000008578394 in contentProcessor ()
#4 0x0000000008573ab6 in XML_ParseBuffer ()
#5 0x0000000007dcf4fb in parseOneConfigFile ()
#6 0x0000000007dcf33b in driParseConfigFiles ()
#7 0x0000000007d117a9 in loader_get_user_preferred_fd ()
#8 0x00000000068d74c9 in dri2_initialize_wayland ()
#9 0x00000000068d266a in dri2_initialize ()
#10 0x00000000068c4d99 in eglInitialize ()

Это, конечно, прекрасное. Это реальный случай про "два бага, которые отменяли друг друга".

Потому что, когда в glib была зависимость от pcreposix, ломался разбор конфига в mesa, и поэтому #zink (мой opengl driver) работал just as planned!

А когда я починил регулярки, конфиг начал обрабатываться правильно, и #zink начал глючить c новыми настройками!

Если вы когда-нибудь, зачем-то, хотели увидеть плачущего 40-летнего мужика, вам надо было быть вчера у меня дома.

Что с этим делать, пока непонятно.
😁22🤯5🔥4👍2😢1
https://discourse.llvm.org/t/rejected-rfc-stop-defining-the-stdc-and-related-macros-in-c-mode/62468/3

Коллеги из LLVM хотят перестать дефайнить
__STDC__
в С++ коде.

В целом, понятная штука, интересным мне показалось следующее:

* llvm обнаглели, пишут, что им уже и не обязательно поддерживать совместимость с gcc на уровне препроцессора. КМК, это плохо, потому что нам больше работы, только потому, что кому-то не нравится, как пишутся два макроса.

* https://sourceware.org/pipermail/libc-alpha/2022-May/138738.html - удивительный факт, я ожидал, что glibc пошлют их в пешее эротическое с этим предложением, но нет, вроде, приняли нормально.

Баланс сил меняется.

Мне, признаться, больше нравилось, когда clang/llvm были догоняющими, было видно, что с ними легче договориться.

———
https://blog.tmm.cx/2022/05/15/the-very-weird-hewlett-packard-freedos-option/

Совершенно феерическая история про опцию "freedos на новом ноутбуке" от HP.

TL;DR - freedos запущена в VirtualBOX в Linux, а еще там рядышком 32-битный старый Linux, для запуска pdf просмотрщика с условиями лицензии.

Программисты-археологи? Привет, Вернор Винж?

———
Починял #mesa.

В итоге, я решил, что проще всего собрать mesa с заглушками regexec/regcomp, которые бы имитировали то поведение, которое было "без бага"(не буду аргументировать, что оно "правильное")

fun fact - в mesa уже есть похожий define, https://gitlab.freedesktop.org/mesa/mesa/-/blob/main/src/util/xmlconfig.c#L46

К сожалению, он про то, чтобы все регулярки "сработали".

А мне, судя по анализу исходников(заголовок от musl + .a от pcre), нужно, чтобы все регулярки "не сработали":

https://github.com/runtimejs/musl-libc/blob/master/include/regex.h

https://github.com/luvit/pcre/blob/master/pcreposix.h#L56

Поэтому я запилил вот такую фейковую regex.h - https://git.sr.ht/~pg/mix/tree/main/item/pkgs/lib/mesa/fakes/mix.sh

Вроде, теперь и #pcmanfm работает, и epiphany.

Конечно, надо бы разобраться, что там за правила, и как вообще должно быть сделано по уму, но пока нет.
👍8