Сборка под macOS отдельной целью, ограничения записаны в бэклог
./build.sh macos делает две сборки: nlve_intel для Intel и nlve_arm для Apple Silicon. Имя цели в проекте одно на все системы, и сборка под darwin затирает линуксовую — поэтому каждый файл переименовывается сразу, а сборка под эту систему в конце делается заново. Обёртку .app, которую делает lazbuild, удаляем: внутри неё ссылка на файл с именем nlve, которого после переименования уже нет. BACKLOG.md — то, что известно и сознательно не сделано. Про macOS там записано главное: собирается, но предпросмотра не будет, пока встраивание mpv не научится работать через NSView; окно зависимостей советует маку apt вместо brew; проверить нечем, потому что мака нет. Заодно туда переехали лицензионный вопрос с libmpv и три мелочи: значок exe, кэш наложений и четыре секунды на открытие окна кадрирования.
This commit is contained in:
parent
e12d0df974
commit
b792b81a00
3 changed files with 118 additions and 1 deletions
69
BACKLOG.md
Normal file
69
BACKLOG.md
Normal file
|
|
@ -0,0 +1,69 @@
|
|||
# Что отложено
|
||||
|
||||
Список того, что известно и сознательно не сделано. Не «когда-нибудь
|
||||
починим», а «знаем, чего это стоит, и решили пока не платить».
|
||||
|
||||
## 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 с каждый на шестигигабайтном файле) и
|
||||
только потом показывается. Лечится показом окна сразу и дорисовкой кадра
|
||||
по готовности, либо одним кадром вместо двух.
|
||||
Loading…
Add table
Add a link
Reference in a new issue