Впорядкування та вибір модулів

Структура модулів програмного забезпечення KDE

Програмне забезпечення KDE поділено на декілька компонентів, значну кількість яких можна зібрати за допомогою kdesrc-build. Знання зі структури компонентів допоможуть вам визначитися з модулями програмного забезпечення, які слід зібрати.

  1. На найнижчому рівні структури перебуває бібліотека Qt™, яка дуже потужним набором інструментів, здатних працювати на багатьох програмних платформах. KDE засновано та Qt™, крім того, деякі з бібліотек, які не є частиною KDE, але потрібні для роботи KDE, також засновано на Qt™. kdesrc-build може зібрати Qt™ або скористатися вже зібраною бібліотекою, яку встановлено у системі, якщо ця бібліотека є достатньо новою.

  2. Над Qt™ надбудовано бібліотеки, які потрібні для роботи програмного забезпечення KDE. Частина з цих бібліотек не є частиною самого KDE через свою загальну спрямованість, але вони є потрібними для роботи платформи KDE. Ці бібліотеки зібрано у єдиний модуль kdesupport, вони не вважаються частиною бібліотек «Frameworks».

  3. Над цими основними бібліотеками надбудовано KDE Frameworks, які іноді позначають абревіатурою KF5. Це основні бібліотеки стільниці Плазми KDE, програм KDE та іншого стороннього програмного забезпечення.

  4. На основі Frameworks побудовано декілька інших частин:

    • «Сторонні» програми. Ці програми використовують KDE Frameworks або створені для запуску у середовищі Плазми KDE, але вони не є частиною або взагалі не пов’язані з проєктом KDE.

    • Плазма, яка є «робочим простором» стільничного середовища. Це те, що користувачі зазвичай бачать після «входу до KDE».

    • Комплект програм KDE. Це збірка корисного програмного забезпечення разом із платформою для розробки та стільницею Плазми, згрупована за окремими модулями, включно з допоміжними програмами, зокрема Dolphin, іграми, зокрема KSudoku, та офісним програмним забезпеченням KDE зокрема Kontact.

    • Нарешті, існує збірка програмного забезпечення (також розподілена на модулі), підтримку розробки якого здійснює команда KDE (зокрема забезпечує переклад, обслуговування сховища коду, надання системи стеження за вадами тощо). Випуски цього програмного забезпечення не збігаються у часі з випусками KDE, воно не є частиною Плазми або основного комплекту програм. Ці модулі називають «Extragear».

Вибір модулів для збирання

Вибором переліку модулів, які ви бажаєте зібрати, можна керувати за допомогою файла налаштування. Після розділу global у цьому файлі можна вказати список модулів, які слід зібрати, між рядком module та рядком end module. Приклад запису модуля наведено у розділі Приклад 2.4, «Приклад запису модуля у файлі налаштувань:».

Приклад 2.4. Приклад запису модуля у файлі налаштувань:

module kdesrc-build-git
    # Тут слід вказати параметри цього модуля. Приклад:
    repository kde:kdesrc-build
    make-options -j4 # Запускати компіляцію у 4 потоки
end module

Примітка

На практиці, така конструкція модуля зазвичай не використовується безпосередньо. Замість цього, більшість модулів визначаються наборами модулів, як це описано нижче.

Якщо використано лише записи module, kdesrc-build збиратиме модулі у вказаному у списку порядку і не намагатиметься отримати дані будь-яких інших сховищ, які не було вказано явним чином.

Набори модулів

Початковий код KDE розділено між багатьма відносно малими сховищами на основі Git. Щоб цією великою кількістю сховищ, які є частиною будь-якого хоч трохи корисного комплекту програмного забезпечення KDE, було простіше керувати, у kdesrc-build передбачено підтримку групування декількох модулів і обробки групи як «набору модулів».

Концепція наборів базових модулів

За допомогою набору модулів ви можете оголосити декілька модулів Git, дані яких слід отримати і зібрати, подібно до окремих оголошень модулів. Для визначення кожної з адрес отримання даних модуля використовується параметр repository, визначену за його допомогою адресу буде скопійовано до адрес всіх модулів з набору.

Приклад 2.5. Використання наборів модулів

global
    git-repository-base kde-git kde:
end global

module qt
    #  Параметри вилучено для спрощення
end module

module-set kde-support-libs
    repository kde-git
    use-modules automoc attica akonadi
end module-set

# Інші модулі, якщо потрібно...
module kdesupport
end module

У розділі Приклад 2.5, «Використання наборів модулів» наведено короткий набір модулів. kdesrc-build обробляє цей набір модулів подібно до того, як виконується обробка кожного з модулів у use-modules, якщо кожен з модулів було оголошено окремо. Значення параметра repository буде визначено на основі значення параметра набору модулів repository, до якого буде додано вказану назву модуля.

Крім того, набору модулів можна передавати і інші параметри, які буде скопійовано до кожного з нових модулів, створених за його допомогою. За допомогою набору модулів можна скоротити роботу з оголошення багатьох модулів Git, які зберігаються за однією адресою. Також можна надавати наборам модулів назви (як це показано у прикладі). Назви можна використовувати для посилання на цілу групу модулів у командному рядку.

Особлива підтримка для наборів модулів KDE

Описана вище підтримка наборів модулів є загальною для будь-яких модулів на основі Git. Для сховищ git KDE у kdesrc-build передбачено додаткові можливості, якщо спрощують життя користувачів і розробників. Підтримка цих можливостей вмикається визначенням kde-projects як repository для набору модулів.

Зазвичай, kdesrc-build збирає лише модулі, які ви вказали у вашому файлі налаштувань, за порядком, у якому їх було вказано. Якщо ж визначено набір модулів kde-projects, kdesrc-build може виконувати розв'язування залежностей специфічних для KDE модулів і додатково автоматично включати модулі до збирання, навіть якщо їх не було безпосередньо вказано.

Приклад 2.6. Використання наборів модулів kde-projects

# Додає лише модуль для juk (сховище kde/kdemultimedia/juk)
module-set juk-set
    repository kde-projects
    use-modules juk
end module-set

# Додає усі модулі у kde/multimedia/*, зокрема juk,
# але без інших залежностей
module-set multimedia-set
    repository kde-projects
    use-modules kde/multimedia
end module-set

# Додає усі модулі у kde/multimedia/* та усі залежності kde-projects
# поза kde/kdemultimedia
module-set multimedia-deps-set
    repository kde-projects
    use-modules kde/multimedia
    include-dependencies true
end module-set

# Усі модулі, створені поза цими трьома наборами модулів буде
# автоматично упорядковано, незалежно від встановлення include-dependencies

Підказка

Ця конструкція набору модулів kde-projects є основним способом оголошення про те, які модулі ви хочете зібрати.

В усіх наборах модулів використовуються параметри repository та use-modules. Набори модулів kde-projects мають попередньо визначенен значення repository, але інші типи наборів модулів також використовують параметр git-repository-base.

Офіційна база даних модулів KDE

Сховища git KDE забезпечують групування пов'язаних модулів git у збірки пов'язаних модулів (наприклад kdegraphics). Git не розпізнає цього групування, але kdesrc-build може визначати такі групи, використовуючи набори модулів, у яких значенням repository є «kde-projects».

kdesrc-build визначить, що сховище kde-projects потребує особливої обробки і скоригує процес збирання відповідним чином. Окрім виконання інших дій, kdesrc-build буде:

  • Отримувати найсвіжішу базу даних модулів з архіву git KDE.

  • Намагатиметься знайти модуль з вказаною назвою у списку параметра набору модулів use-modules з цієї бази даних.

  • Для кожного виявленого модуля kdesrc-build шукатиму відповідне сховище у базі даних із врахуванням параметра branch-group. Якщо сховище існує і є активним для групи гілок, kdesrc-build автоматично скористається ним для отримання і оновлення початкового коду.

Примітка

У поточній базі даних деякі з записів груп модулів містять не лише збірки модулів, але і дані щодо власного сховища. У таких випадках поточна версія kdesrc-build намагатиметься скористатися сховищем Git групи, а не дочірніми сховищами записів групи.

Наведений нижче приклад демонструє використання бази даних модулів KDE для встановлення мультимедійної бібліотеки Phonon.

module-set media-support
    # Значенням цього параметра має бути kde-projects, щоб використати базу даних модулів.
    repository kde-projects

    # За допомогою цього параметра можна визначити модулі, які слід шукати у базі даних.
    use-modules phonon/phonon phonon-gstreamer phonon-vlc
end module-set

Підказка

phonon/phonon використовується, оскільки інакше, у разі використання поточної бази даних проєкту, kdesrc-build доведеться визначатися між групою проєктів з назвою «phonon» і окремим проєктом з назвою «phonon». У поточній версії kdesrc-build вибере перший, що призведе до збирання багатьох модулів, які можуть виявитися непотрібними.

Наступний приклад є, можливо, реалістичнішим. Він демонструє можливість, доступну лише у разі використання бази даних модулів KDE: збирання всіх програм KDE з графічним інтерфейсом за допомогою єдиної команд.

module-set kdegraphics
    # Значенням цього параметра має бути kde-projects, щоб можна було скористатися базою даних модулів.
    repository kde-projects

    # За допомогою цього параметра можна вказати модулі, які слід шукати у базі даних.
    use-modules extragear
end module-set

Тут продемонстровано дві важливі можливості:

  1. kdesrc-build надає вам змогу вказати дочірні модулі вказаного модуля, без збирання батьківського модуля за допомогою синтаксичної конструкції назва-модуля/*. У цьому випадку таке визначення є необхідним, оскільки основний модуль, kdegraphics, позначено як неактивний, щоб його не було випадково зібрано разом з дочірніми модулями. Визначення дочірніх модулів надає змогу kdesrc-build пропустити вимкнений модуль.

  2. kdesrc-build також не додаватиме вказаний модуль до списку збирання декілька разів. Це надасть змогу нам вручну встановити збирання kdegraphics/libs першим, до решти kdegraphics, без спроби збирання kdegraphics/libs двічі. Так зроблено для належної обробки залежностей. Зараз цей спосіб визначення порядку збирання лишається резервним для випадків, коли у базі даних проєктів KDE пропущено відповідні метадані щодо залежностей.

Відфільтровування модулів проєкту KDE

Можливо, у вас виникне потреба у збиранні всіх програм у певному модулі KDE, окрім якоїсь програми.

Наприклад, у групі kdeutils міститься програма з назвою kremotecontrol. Якщо на вашому комп’ютері не встановлено обладнання для роботи з пристроями дистанційного керування, ви можете вирішити, що отримувати, збирати і встановлювати kremotecontrol під час кожного оновлення kdeutils не варто.

Досягти цього можна за допомогою параметра налаштувань ignore-modules. У командному рядку те саме завдання виконує параметр --ignore-modules, який, втім, є зручнішим для одноразового фільтрування певного модуля.

Приклад 2.7. Приклад ігнорування модуля kde-project у групі

module-set utils
    repository kde-projects

    # За допомогою цього параметра можна визначити модулі, які слід шукати у базі даних.
    use-modules kdeutils

    # За допомогою цього параметра можна «вилучити» модулі зі списку використаних модулів, визначеного вище.
    ignore-modules kremotecontrol

module-set graphics
    repository kde-projects

    # За допомогою цього параметра визначаються модулі, які слід шукати у базі даних.
    use-modules extragear/graphics

    # За допомогою цього параметра «вилучаються» модулі, вибрані вище за допомогою use-modules.
    # У нашому прикладі ігноруються одразу extragear/graphics/kipi-plugins і
    # extragear/graphics/kipi-plugins/kipi-plugins-docs
    ignore-modules extragear/graphics/kipi-plugins
end module-set