Модуль BundleUtilities
Функции для сборки автономного приложения-пакета.
Коллекция утилит CMake, полезных для работы с пакетами .app на Mac и пакета-подобными директориями в любой ОС.
Данный модуль предоставляет следующие функции:
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>)
Для заданного имени файла (item) сгенерировать ключ, который должен быть уникальным, учитывая набор библиотек, которые необходимо скопировать или исправить, чтобы сделать пакет автономным. По существу, это имя файла, включая расширение, где «.» заменено на «_».
Этот ключ используется в качестве префикса для переменных 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>)
Скопировать результирующий элемент в пакет, если необходимо. Копирование не требуется, если resolved_item «такой же», как resolved_embedded_item.
COPY_RESOLVED_FRAMEWORK_INTO_BUNDLE(<resolved_item> <resolved_embedded_item>)
Скопировать результирующий фреймворк в пакет, если необходимо. Копирование не требуется, если 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».)
Эта функция требует, чтобы resolved_embedded_item уже «находился» внутри пакета. Другими словами, если вы передаёте плагины в 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.12/module/BundleUtilities.html