我正在尝试使用Flatpak构建Vala程序。我需要连接到mysql服务器,这就是为什么我需要用flatpak捆绑libmysqlclient
的原因。
那就是为什么我在我的meson.build文件中添加了mysql_config
的原因。
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')
现在的问题是,flatpak运行时无法使用mysql_config。因此,我需要将其与Flatpak捆绑在一起。
但是Flatpak文档对我不是很有帮助。
Flatpak Documentation
模组
模块列表指定要构建为的每个模块
构建过程的一部分。这些模块之一是应用程序
本身,其他模块是依赖项和库
捆绑在一起作为Flatpak的一部分。虽然简单的应用程序可能仅
指定一个或两个模块,因此有简短的模块部分,
一些应用程序可以捆绑多个模块,因此具有
冗长的模块部分。
GNOME词典的模块部分很短,因为它仅包含
应用程序本身,看起来像:
"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"
}
] } ]
可以看出,每个列出的模块都有一个名称(可以自由选择
分配)和来源列表。每个源都有一个类型,并且可用
类型包括:
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
每种源类型都有不同的属性,它们是
在Flatpak Builder命令参考中列出。
有人可以告诉我如何在我的Flatpak中添加
libmysqlclient
以及如何使用mysql_config
为我的Flatpak设置正确的编译器标志。这是我的清单(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的依赖关系放在清单的modules
节中,这些依赖关系将被构建并包含在Flatpak中。以下内容未经测试,因此某些细节可能会丢失,但是其目的是概述可以帮助您的想法。有几种选择:libmariadb
MariaDB是MySQL的分支。由于担心甲骨文公司(Oracle Corporation)对MySQL的收购,社区对此进行了分叉。我之所以将其列出来是因为它似乎是最简单的选择,至少从长远来看。
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
),但下面的清单片段忽略了config-opts
的使用。这个Flatpak GitHub issue可能有一个有关如何将config-opts
用于CMake构建的相关示例。
因此,我们有一个源版本,一个校验和,并且我们知道构建系统。通过在清单的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_config
。 pkg-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 Community Server下载页面获得客户端实用程序包”。 Download MySQL Community Server page没有提到“客户端实用程序包”,仅允许下载服务器和C客户端的300MiB +包。这就是为什么我建议从长远来看
libmariadb
选项可能更好。还有一个页面MySQL Connector/C (Archived Versions),其中存档版本是870万下载。首先,使用旧版本可能是一个更好的选择。Flatpak清单与
libmariadb
的清单类似。 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,以查看其他项目是否在清单中使用了
mysqlclient
或libmariadb
。一无所获。纸板和胶带选件
如果您想要一个粗糙的原型解决方案,那么Flatpak确实提供了
simple
构建类型。这样可以运行命令,例如cp
。因此,更快的选择是将本地MySQL客户端文件复制到Flatpak。这至少将使您能够继续进行开发,并返回到为最终版本实施可靠的解决方案。有关simple
构建的示例,请参见GitHub issue和LibreOffice Flathub manifest。 Flatpak文件结构也记录在Requirement and Conventions和typical filesystem inside a Flatpak sandbox中。