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.
НЕ ИСПОЛЬЗУЙТЕ ЭТИ ФУНКЦИИ ВО ВРЕМЯ НАСТРОЙКИ (из CMakeLists.txt)! Вместо этого вызывайте их из правила install(CODE) или install(SCRIPT).
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>)
Копирует разрешённый элемент в пакет, если это необходимо. Копирование не требуется, если 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–2020 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.14/module/BundleUtilities.html