Есть ли способ создать схему GSettings во время установки в Vala?

Я пытаюсь создать приложение, используя Vala, который использует Glib.Settings. Я не хочу, чтобы мое приложение зависало, если схема или ключ не существует. Я уже понял, что не могу отловить ошибки в нем ( Как обрабатывать ошибки при использовании Glib.Settings в Vala?), Поэтому мне нужно каким-то образом создать схему при установке программы, иначе она вылетит. Я не хочу просить пользователя написать что-то вроде

glib-compile-schemas /usr/share/glib-2.0/schemas/

в терминале, поэтому мне нужно сделать это в рамках программы.

Итак, вопрос: могу ли я каким-то образом скомпилировать схему в моей программе?

0 ответов

Вала сама не будет нести ответственность за компиляцию ваших схем; это зависит от вашей системы сборки (например, CMake или Meson). Когда ваше приложение упаковано, система упаковки будет использовать вашу систему сборки для сборки пакета.

Чтобы ваша система сборки могла их скомпилировать, вам нужно включить свои схемы в виде файла XML, например:

<?xml version="1.0" encoding="UTF-8"?>
<schemalist>
  <schema path="/com/github/yourusername/yourrepositoryname/" id="com.github.yourusername.yourrepositoryname">
    <key name="useless-setting" type="b">
      <default>false</default>
      <summary>Useless Setting</summary>
      <description>Whether the useless switch is toggled</description>
    </key>
  </schema>
</schemalist>

Затем в вашей системе сборки установите файлы схемы. Например, в Месоне:

install_data (
    'gschema.xml',
    install_dir: join_paths (get_option ('datadir'), 'glib-2.0', 'schemas'),
    rename: meson.project_name () + '.gschema.xml'
)

meson.add_install_script('post_install.py')

С помощью Meson вы можете также включить post_install.py скомпилировать схемы при установке с системой сборки, что облегчает разработку:

#!/usr/bin/env python3

import os
import subprocess

schemadir = os.path.join(os.environ['MESON_INSTALL_PREFIX'], 'share', 'glib-2.0', 'schemas')

# Packaging tools define DESTDIR and this isn't needed for them
if 'DESTDIR' not in os.environ:
    print('Compiling gsettings schemas...')
    subprocess.call(['glib-compile-schemas', schemadir])
Другие вопросы по тегам