nlve/BACKLOG.md
4aiman b792b81a00 Сборка под macOS отдельной целью, ограничения записаны в бэклог
./build.sh macos делает две сборки: nlve_intel для Intel и nlve_arm для
Apple Silicon. Имя цели в проекте одно на все системы, и сборка под
darwin затирает линуксовую — поэтому каждый файл переименовывается сразу,
а сборка под эту систему в конце делается заново.

Обёртку .app, которую делает lazbuild, удаляем: внутри неё ссылка на файл
с именем nlve, которого после переименования уже нет.

BACKLOG.md — то, что известно и сознательно не сделано. Про macOS там
записано главное: собирается, но предпросмотра не будет, пока встраивание
mpv не научится работать через NSView; окно зависимостей советует маку
apt вместо brew; проверить нечем, потому что мака нет. Заодно туда
переехали лицензионный вопрос с libmpv и три мелочи: значок exe, кэш
наложений и четыре секунды на открытие окна кадрирования.
2026-08-22 12:53:05 +03:00

4.8 KiB
Raw Blame History

Что отложено

Список того, что известно и сознательно не сделано. Не «когда-нибудь починим», а «знаем, чего это стоит, и решили пока не платить».

macOS: собирается, но работает наполовину

Сборка проверена. В тулчейне fpcupdeluxe уже стоит всё нужное: кросс-компиляторы, Apple SDK (10.13, 11.0, 12.3) и виджетсет cocoa для обеих архитектур. Обе цели собираются с первого раза:

./build.sh macos    →  nlve_intel (Mach-O x86_64)
                       nlve_arm   (Mach-O arm64)

Чего не будет, пока не сделано:

Предпросмотра нет. Встраивание mpv написано под два случая: X11 (под gtk2 создаётся своё дочернее окно и его номер отдаётся mpv в wid) и Windows (там у панели есть настоящий HWND). Под cocoa нужен третий путь — отдать mpv указатель на NSView. Это не правка на десять строк: нужно разобраться, как LCL под cocoa отдаёт NSView панели, и проверить, что mpv рисует именно в неё.

Окно зависимостей врёт. Списки в uDeps.pas разделены на два случая: Windows и всё остальное. Мак попадает во второй и получает совет sudo apt install ffmpeg. Нужен свой список: brew install ffmpeg mpv или готовые сборки.

Проверить нечем. У нас нет мака. Собранный, но ни разу не запущенный файл — это предположение, а не сборка. Всё, что можно утверждать сейчас: компилятор и компоновщик отработали без ошибок.

Двух файлов может оказаться мало. Intel и Apple Silicon сейчас раздаются отдельно. Склеить их в один универсальный умеет lipo, но в тулчейне он есть только для powerpc — для x86_64 и arm64 его надо доставить.

Обёртка .app не настроена. lazbuild её создаёт, но внутри лежит ссылка на файл с именем nlve, которого после переименования нет. Сейчас она просто удаляется. Настоящему приложению нужны свой Info.plist, значок и, для раздачи, подпись и нотаризация у Apple.

Лицензия не выбрана

libmpv грузится в наш процесс, а её сборки — GPL (в Ubuntu GPL-3+ из-за libsmbclient, у shinchiro тоже GPL). По толкованию FSF это делает совместную работу производной, и при раздаче программа должна быть под GPL-3+ или совместимой.

Пока ничего не раздаётся — вопрос не стоит. Решать его перед первой раздачей сборок. Возможный обход: отказаться от libmpv в пользу своего вывода кадров через ffmpeg, но это большая работа и заметно хуже по плавности.

ffmpeg проблемой не является: он запускается отдельной программой.

Мелочи, до которых не дошли руки

Значок файла программы под Windows. Значок окна задаётся из uIconData, а значок самого .exe в проводнике берётся из ресурса при сборке — там он до сих пор стандартный.

Кэш наложений не убирается. Каждая правка прозрачности создаёт в кэше проекта новый файл; старые остаются лежать.

Окно кадрирования открывается около четырёх секунд. Оно синхронно достаёт два кадра ffmpeg-ом (по 2.2 с каждый на шестигигабайтном файле) и только потом показывается. Лечится показом окна сразу и дорисовкой кадра по готовности, либо одним кадром вместо двух.