Сборка под 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
2
.gitignore
vendored
2
.gitignore
vendored
|
|
@ -4,6 +4,8 @@
|
|||
/nlve.app/
|
||||
/nlve
|
||||
/nlve.exe
|
||||
/nlve_intel
|
||||
/nlve_arm
|
||||
/nlve.dbg
|
||||
/nlve.res
|
||||
/tests/lib/
|
||||
|
|
|
|||
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 с каждый на шестигигабайтном файле) и
|
||||
только потом показывается. Лечится показом окна сразу и дорисовкой кадра
|
||||
по готовности, либо одним кадром вместо двух.
|
||||
48
build.sh
48
build.sh
|
|
@ -6,6 +6,7 @@
|
|||
# ./build.sh current то же самое
|
||||
# ./build.sh windows редактор под Windows (кросс-сборка)
|
||||
# ./build.sh tool консольный инструмент проверок
|
||||
# ./build.sh macos две сборки под macOS: nlve_intel и nlve_arm
|
||||
# ./build.sh test инструмент плюс прогон проверок
|
||||
# ./build.sh all всё перечисленное
|
||||
# ./build.sh run собрать под эту систему и запустить
|
||||
|
|
@ -101,6 +102,48 @@ build_windows() {
|
|||
rm -rf "$HERE/lib/x86_64-win64"
|
||||
}
|
||||
|
||||
build_macos() {
|
||||
check_toolchain
|
||||
|
||||
# Сборка под macOS кладёт файл туда же, куда и сборка под Linux, и
|
||||
# затирает её: имя цели в проекте одно на все системы. Поэтому каждый
|
||||
# файл переименовывается сразу, а линуксовая сборка в конце делается
|
||||
# заново.
|
||||
if run_lazbuild "Редактор под macOS (Intel)" \
|
||||
--cpu=x86_64 --os=darwin --ws=cocoa "$HERE/nlve.lpi"; then
|
||||
mv -f "$HERE/nlve" "$HERE/nlve_intel"
|
||||
echo "готово: $HERE/nlve_intel"
|
||||
file "$HERE/nlve_intel" 2>/dev/null | cut -d: -f2- | sed 's/^/ /'
|
||||
else
|
||||
echo "не собралось" >&2
|
||||
status=1
|
||||
fi
|
||||
|
||||
if run_lazbuild "Редактор под macOS (Apple Silicon)" \
|
||||
--cpu=aarch64 --os=darwin --ws=cocoa "$HERE/nlve.lpi"; then
|
||||
mv -f "$HERE/nlve" "$HERE/nlve_arm"
|
||||
echo "готово: $HERE/nlve_arm"
|
||||
file "$HERE/nlve_arm" 2>/dev/null | cut -d: -f2- | sed 's/^/ /'
|
||||
else
|
||||
echo "не собралось" >&2
|
||||
status=1
|
||||
fi
|
||||
|
||||
# Обёртку .app делает lazbuild, и внутри неё ссылка на файл с именем
|
||||
# nlve, которого после переименования уже нет. Обманчивая пустышка не
|
||||
# нужна.
|
||||
rm -rf "$HERE/nlve.app"
|
||||
|
||||
# Модули под darwin лежат отдельно, но сборку под Linux мы затёрли —
|
||||
# возвращаем её на место.
|
||||
note "Возвращаю сборку под эту систему"
|
||||
build_current
|
||||
|
||||
echo
|
||||
echo "ВНИМАНИЕ: под macOS предпросмотра не будет — встраивание mpv"
|
||||
echo "написано под X11 и Windows. Подробности в BACKLOG.md."
|
||||
}
|
||||
|
||||
build_tool() {
|
||||
note "Консольный инструмент проверок"
|
||||
if "$HERE/tests/build.sh"; then
|
||||
|
|
@ -171,6 +214,9 @@ case "${1:-current}" in
|
|||
windows|win|win64)
|
||||
build_windows
|
||||
;;
|
||||
macos|mac|darwin)
|
||||
build_macos
|
||||
;;
|
||||
tool)
|
||||
build_tool
|
||||
;;
|
||||
|
|
@ -197,7 +243,7 @@ case "${1:-current}" in
|
|||
;;
|
||||
*)
|
||||
fail "неизвестная цель: $1
|
||||
Доступны: current, windows, tool, test, all, run, clean"
|
||||
Доступны: current, windows, macos, tool, test, all, run, clean"
|
||||
;;
|
||||
esac
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue