Модуль BundleUtilities
Функции для сборки автономного приложения-пакета.
Набор функций CMake, полезных для работы с пакетами .app на macOS и пакета-подобными каталогами в любой ОС.
Данный модуль предоставляет следующие функции:
fixup_bundle copy_and_fixup_bundle verify_app get_bundle_main_executable get_dotapp_dir get_bundle_and_executable get_bundle_all_executables get_item_key get_item_rpaths clear_bundle_keys set_bundle_key_values get_bundle_keys copy_resolved_item_into_bundle copy_resolved_framework_into_bundle fixup_bundle_item verify_bundle_prerequisites verify_bundle_symlinks
Требуется CMake 2.6 или выше, поскольку используются функции, оператор break и PARENT_SCOPE. Также зависит от GetPrerequisites.cmake.
FIXUP_BUNDLE(<app> <libs> <dirs>)
Редактирует пакет на месте и делает его автономным, чтобы его можно было перетащить и скопировать на другой компьютер и запустить, если все системные библиотеки совместимы.
Если вы передаёте плагины в fixup_bundle как параметр libs, вы должны установить или скопировать их в пакет перед вызовом fixup_bundle. Параметр «libs» — это список библиотек, которые необходимо отредактировать, но которые нельзя определить по анализу вывода otool. (т.е., плагины).
Собрать все ключи для всех исполняемых файлов и библиотек в пакете, а затем для каждого ключа скопировать все необходимые зависимости в пакет. Затем отредактировать каждый из них в соответствии со своим списком зависимостей.
Затем очистить все ключи и вызвать verify_app для окончательного пакета, чтобы убедиться, что он действительно автономный.
В качестве необязательного параметра (IGNORE_ITEM) можно передать список имён файлов, которые будут проигнорированы (например, IGNORE_ITEM «vcredist_x86.exe;vcredist_x64.exe»)
COPY_AND_FIXUP_BUNDLE(<src> <dst> <libs> <dirs>)
Создаёт копию пакета <src> в местоположение <dst>, а затем редактирует новый скопированный пакет на месте в <dst>…
VERIFY_APP(<app>)
Проверяет, является ли приложение <app> валидным на основе анализа инструментов. Вызывает «message(FATAL_ERROR» если приложение не прошло проверку.
В качестве необязательного параметра (IGNORE_ITEM) можно передать список имён файлов, которые будут проигнорированы (например, IGNORE_ITEM «vcredist_x86.exe;vcredist_x64.exe»)
GET_BUNDLE_MAIN_EXECUTABLE(<bundle> <result_var>)
В результате будет полное имя файла основного исполняемого файла пакета или строка, начинающаяся с «error:», если его нельзя определить.
GET_DOTAPP_DIR(<exe> <dotapp_dir_var>)
Возвращает ближайший родительский каталог, имя которого заканчивается на «.app», учитывая полный путь к исполняемому файлу. Если такого родительского каталога нет, возвращает каталог, содержащий исполняемый файл.
Возвращаемый каталог может существовать или нет.
GET_BUNDLE_AND_EXECUTABLE(<app> <bundle_var> <executable_var> <valid_var>)
Принимает имя каталога «.app» или имя исполняемого файла, вложенного в каталог «.app», и возвращает путь к каталогу «.app» в <bundle_var> и путь к его основному исполняемому файлу в <executable_var>
GET_BUNDLE_ALL_EXECUTABLES(<bundle> <exes_var>)
Рекурсивно сканирует заданный пакет в поисках всех исполняемых файлов и накапливает их в переменной.
GET_ITEM_KEY(<item> <key_var>)
На основе имени файла (элемента) сгенерировать уникальный ключ, учитывая набор библиотек, которые нужно скопировать или отредактировать, чтобы сделать пакет автономным. Это фактически имя файла, включая расширение, с заменой «.» на «_».
Этот ключ используется в качестве префикса для переменных CMake, чтобы мы могли связать набор переменных с заданным элементом на основе его ключа.
CLEAR_BUNDLE_KEYS(<keys_var>)
Пройтись по списку ключей, очистив все переменные, связанные с каждым ключом. После цикла очистить сам список ключей.
Вызывающая функция get_bundle_keys должна вызвать clear_bundle_keys, когда закончит работу со списком ключей.
SET_BUNDLE_KEY_VALUES(<keys_var> <context> <item> <exepath> <dirs>
<copyflag> [<rpaths>])
Добавить ключ в список (если необходимо) для данного элемента. Если добавлен, также установить все переменные, связанные с этим ключом.
GET_BUNDLE_KEYS(<app> <libs> <dirs> <keys_var>)
Пройтись по всем исполняемым и библиотек файлам внутри пакета (и указанным как дополнительные <libs>) и собрать список ключей, представляющих их. Установить значения, связанные с каждым ключом, чтобы мы могли пройтись по ним и скопировать необходимые библиотеки в пакет, а затем выполнить соответствующие корректировки install_name_tool.
В качестве необязательного параметра (IGNORE_ITEM) можно передать список имён файлов, которые будут проигнорированы (например, IGNORE_ITEM «vcredist_x86.exe;vcredist_x64.exe»)
COPY_RESOLVED_ITEM_INTO_BUNDLE(<resolved_item> <resolved_embedded_item>)
Скопировать разрешённый элемент в пакет, если необходимо. Копирование не нужно, если разрешённый элемент «такой же», как и встроенный разрешённый элемент.
COPY_RESOLVED_FRAMEWORK_INTO_BUNDLE(<resolved_item> <resolved_embedded_item>)
Скопировать разрешённый фреймворк в пакет, если необходимо. Копирование не нужно, если разрешённый элемент «такой же», как и встроенный разрешённый элемент.
По умолчанию BU_COPY_FULL_FRAMEWORK_CONTENTS не установлен. Если вы хотите встраивать полные фреймворки в пакеты, установите BU_COPY_FULL_FRAMEWORK_CONTENTS в ON перед вызовом fixup_bundle. По умолчанию COPY_RESOLVED_FRAMEWORK_INTO_BUNDLE копирует сам фреймворк dylib и каталог ресурсов фреймворка.
FIXUP_BUNDLE_ITEM(<resolved_embedded_item> <exepath> <dirs>)
Получить непосредственные/несистемные зависимости разрешённого встроенного элемента. Для каждой зависимости изменить способ её ссылки на значение переменной с ключом _EMBEDDED_ITEM для этой зависимости. (Вероятнее всего, изменение на ссылку в стиле «@executable_path».)
Эта функция требует, чтобы разрешённый встроенный элемент уже находился «внутри» пакета. Другими словами, если вы передаёте плагины в fixup_bundle как параметр libs, вы должны установить или скопировать их в пакет перед вызовом fixup_bundle. Параметр «libs» — это список библиотек, которые необходимо отредактировать, но которые нельзя определить по анализу вывода otool. (т.е., плагины).
Также изменить идентификатор редактируемого элемента на его собственное значение _EMBEDDED_ITEM.
Накопить изменения в локальной переменной и выполнить одно обращение к install_name_tool в конце функции со всеми изменениями сразу.
Если переменная BU_CHMOD_BUNDLE_ITEMS установлена, элементы пакета будут отмечены как доступные для записи перед тем, как install_name_tool попытается изменить их.
VERIFY_BUNDLE_PREREQUISITES(<bundle> <result_var> <info_var>)
Проверяет, что сумма всех зависимостей всех файлов внутри пакета содержится внутри пакета или представляет собой «системные» библиотеки, предполагая их наличие повсюду.
В качестве необязательного параметра (IGNORE_ITEM) можно передать список имён файлов, которые будут проигнорированы (например, IGNORE_ITEM «vcredist_x86.exe;vcredist_x64.exe»)
VERIFY_BUNDLE_SYMLINKS(<bundle> <result_var> <info_var>)
Проверяет, что все символьные ссылки, найденные в пакете, указывают на другие файлы, которые также уже присутствуют в пакете… Любая ссылка на внешний файл приводит к сбою проверки этой функции.
© 2000–2019 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.7/module/BundleUtilities.html