gpt4 book ai didi

vala - Flatpak bundle libmysqlclient

转载 作者:行者123 更新时间:2023-12-01 13:18:19 25 4
gpt4 key购买 nike

我正在尝试使用 flatpak 构建一个 Vala 程序。我需要连接到 mysql 服务器,这就是为什么我需要将 libmysqlclient 与我的 flatpak 捆绑在一起。

这就是我将 mysql_config 添加到 meson.build 文件的原因。

project('zeiterfassunggtk', ['c', 'vala'],        version: '0.1.0',
meson_version: '>= 0.40.0',
)

i18n = import('i18n')

mysql_config = find_program('mysql_config')
mysql_vapi = meson.get_compiler('vala').find_library('mysql')
mysql_dep = declare_dependency(c_args: run_command([mysql_config, '--cflags']).stdout().split(),
link_args: run_command([mysql_config, '--libs']).stdout().split(),
dependencies: [mysql_vapi])

subdir('data')
subdir('src')
subdir('po')

meson.add_install_script('build-aux/meson/postinstall.py')

现在的问题是 mysql_config 在 flatpak 运行时中不可用。所以我需要把它和我的 flatpak 捆绑在一起。

然而,Flatpak 文档对我不是很有帮助。

Flatpak Documentation

Modules

The module list specifies each of the modules that are to be built as part of the build process. One of these modules is the application itself, and other modules are dependencies and libraries that are bundled as part of the Flatpak. While simple applications may only specify one or two modules, and therefore have short modules sections, some applications can bundle numerous modules and therefore have lengthy modules sections.

GNOME Dictionary’s modules section is short, since it just contains the application itself, and looks like:

"modules": [   {
"name": "gnome-dictionary",
"sources": [
{
"type": "archive",
"url": "https://download.gnome.org/sources/gnome-dictionary/3.26/gnome-dictionary-3.26.0.tar.xz",
"sha256": "387ff8fbb8091448453fd26dcf0b10053601c662e59581097bc0b54ced52e9ef"
}
] } ]

As can be seen, each listed module has a name (which can be freely assigned) and a list of sources. Each source has a type, and available types include:

    archive - .tar or .zip archive files
git - Git repositories
bzr - Bazaar repositories
file - local file (these are copied into the source directory)
dir - local directory (these are copied into the source directory)
script - an array of shell commands (these are put in a shellscript file)
shell - an array of shell commands that are run during source extraction
patch - a patch (are applied to the source directory)
extra-data - data that can be downloaded at install time; this can include archive or package files

Different properties are available for each source type, which are listed in the Flatpak Builder Command Reference.



有人可以告诉我如何将 libmysqlclient 添加到我的 flatpak 以及如何使用 mysql_config 为我的 flatpak 设置正确的编译器标志。

这是我的 list (gnome-builder 默认):
{
"app-id" : "org.gnome.Zeiterfassunggtk",
"runtime" : "org.gnome.Platform",
"runtime-version" : "3.28",
"sdk" : "org.gnome.Sdk",
"command" : "zeiterfassunggtk",
"finish-args" : [
"--share=network",
"--share=ipc",
"--socket=x11",
"--socket=wayland",
"--filesystem=xdg-run/dconf",
"--filesystem=~/.config/dconf:ro",
"--talk-name=ca.desrt.dconf",
"--env=DCONF_USER_CONFIG_DIR=.config/dconf"
],
"build-options" : {
"cflags" : "-O2 -g",
"cxxflags" : "-O2 -g",
"env" : {
"V" : "1"
}
},
"cleanup" : [
"/include",
"/lib/pkgconfig",
"/man",
"/share/doc",
"/share/gtk-doc",
"/share/man",
"/share/pkgconfig",
"/share/vala",
"*.la",
"*.a"
],
"modules" : [
{
"name" : "zeiterfassunggtk",
"buildsystem" : "meson",
"config-opts" : [
"--libdir=lib"
],
"builddir" : true,
"sources" : [
{
"type" : "git",
"url" : "file:///home/g.zehetner/Projekte/ZeiterfassungGtk"
}
]
}
]
}

最佳答案

Flatpak 旨在通过使用容器化技术在 Linux 上分发应用程序。这允许 Flatpak 独立于当前的发行版,如 Ubuntu 和 Fedora。然而,似乎创建 Flatpak 的人需要培养分发打包人员的一些技能。 Flatpak 的依赖项放在 list 的 modules 部分,这些将被构建并包含在 Flatpak 中。以下内容未经测试,因此可能会丢失一些细节,但它旨在概述有助于提供帮助的想法。有几个选项:
libmariadb
MariaDB 是 MySQL 的一个分支。在对 Oracle Corporation 收购 MySQL 的担忧之后由社区 fork 。我首先列出了它,因为它似乎是最简单的选择,至少从长远来看是这样。

MariaDB 在 GitHub 上有 releases of mariadb-connector-c 。出于某种原因,GitHub 没有显示这些版本的校验和。所以 MariaDB Foundation's download section 在这里是一个更好的选择。 mariadb-connector-c 可以连接到 MariaDB 和 MySQL。

从源代码来看,mariadb-connector-c 的构建系统是 CMake。 CMakeLists.txt file 中有您可能需要的 WITH_SSL 之类的选项,但下面的 list 片段忽略了 config-opts 的使用。这个 Flatpak GitHub issue 可能有一个关于如何使用 config-opts 进行 CMake 构建的相关示例。

所以我们有一个源代码发布,一个校验和,我们知道构建系统。通过向 list 的 modules 部分添加类似的内容,您应该能够在您的 Flatpak 中包含 mariadb-connector-c 的构建:

{
"name": "mariadb-connector-c",
"buildsystem": "cmake",
"sources": [
{
"type": "archive",
"url": "https://downloads.mariadb.org/f/connector-c-3.0.8/mariadb-connector-c-3.0.8-src.tar.gz",
"sha256": "2ca368fd79e87e80497a5c9fd18922d8316af8584d87cecb35bd5897cb1efd05"
}
]
}

这也错过了 cleanup 键。

主要问题是让它与您的 Vala 应用程序一起使用。 pkg-config 文件名为 libmariadb.pc 。所以你的 VAPI 需要重命名为 libmariadb.vapi 。您可以将 mysql.vapi 中的 /usr/share/ 复制到您的本地应用程序源目录,并重命名为 libmariadb.vapi 。您需要调整您的 meson.build 以将其包含为 VAPI 搜索目录,并且您不再需要搜索 mysql_configpkg-config 将代替 mysql_config 的工作。

看起来 MySQL C 头文件仍然是 maria-connector-c 的一部分。手指交叉它会起作用。 C 头文件中还有一些额外的符号是 MariaDB 特定的。如果要修改 VAPI,请阅读 Writing a VAPI Manually 。请考虑随后将您的改进提交给 Vala mainline repository
mysqlclient
MySQL 似乎需要下载服务器才能构建客户端。我从这个名为 Download Connector/C (libmysqlclient) 的页面开始。这建议 Linux '客户端实用程序包可从 MySQL 社区服务器下载页面获得'。 Download MySQL Community Server page 没有提到“客户端实用程序包”,只允许下载服务器和 C 客户端的 300MiB+ 包。这就是为什么我建议 libmariadb 选项从长远来看可能是更好的选项。还有一个页面 MySQL Connector/C (Archived Versions) ,里面的存档版本是 870 万下载。使用旧版本可能是一个更好的选择。

Flatpak list 类似于 libmariadb 的 list 。 MySQL source is available from GitHub 也使用 CMake。

MySQL 8 的 CMakeLists.txt 文件确实显示 pkg-config 文件是 mysqlclient.pc 。所以 Vala VAPI 应该是 mysqlclient.vapi 。欢迎对 Vala 存储库的贡献来解决这个问题。通过使用 pkg-config 名称,您不再需要在 mysql_config 中查找 meson.build

我还搜索了 Flathub repository 以查看是否有其他项目在其 list 中使用 mysqlclientlibmariadb。什么也没找到。

纸板和胶带选项

如果您想要一个粗略的原型(prototype)解决方案,那么 Flatpak 确实提供了 simple 构建类型。这允许运行命令,如 cp 。因此,更快的选择可能是将本地 MySQL 客户端文件复制到 Flatpak。这至少可以让您在开发过程中取得进展,并重新为最终版本实现强大的解决方案。有关 simple 构建的示例,请参阅此 GitHub issueLibreOffice Flathub manifest。此外,Flatpak 文件结构记录在 Requirement and Conventionstypical filesystem inside a Flatpak sandbox 中。

关于vala - Flatpak bundle libmysqlclient,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52534250/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com