Meson: Usando um projeto git sem meson.build como dependência
Eventualmente você vai achar um projeto bacana que não usa meson.build e o mantenedor demora anos para aceitar PR, se algum dia for. Ou mesmo seu projeto está em contrato para sempre adicionar a LICENSE em todas as builds e o mantenedor se recusa. Para resolver esse pepino você pode adicionar aos seus subprojects/*.wrap git patches. Por exemplo, no meu projeto - onur - por ser uma pequena ferramenta CLI prefero usar o ht do grande Hoyt ao inves do enorme GNOME glib, mas este projeto git não tem uma meson.build. Uma simples wrap-git para esse projeto, que sequer tem tags também, seria usando o master: ./subprojects/ht.wrap [wrap-git] directory=ht url=https://github.com/benhoyt/ht revision=master depth=1 Primeiro vamos pegar todos subprojetos meson subprojects download, e adicionar a meson.build na raiz deste: ./subprojects/ht cat > ./subprojects/ht.wrap cat ./subprojects/ht.wrap Pronto, vamos aplicar o patch: meson subprojects purge --confirm meson subprojects download e compilar o projeto para confirmar: CC=gcc meson setup ./build --wipe -D b_sanitize=none -D buildtype=release meson compile -C ./build O executável vai aparecer em ./build como esperado. Valeu! Recomendação para leitura: https://mesonbuild.com/Subprojects.html https://gcc.gnu.org https://www.gnu.org/home.pt-br.html Informações gerais: GNU GCC 14.2.0 Meson 1.7.0 Ninja 1.12.1 GNU Emacs 30 Debian SID GNU Guix SwayWM Waybar Firefox https://languagetool.org https://dev.to/easbarba https://gitlab.com/easbarba/onur-c
Eventualmente você vai achar um projeto bacana que não usa meson.build e o mantenedor demora anos para aceitar PR, se algum dia for.
Ou mesmo seu projeto está em contrato para sempre adicionar a LICENSE
em todas as builds e o mantenedor se recusa.
Para resolver esse pepino você pode adicionar aos seus subprojects/*.wrap
git patches.
Por exemplo, no meu projeto - onur - por ser uma pequena ferramenta CLI prefero usar o ht do grande Hoyt ao inves do enorme GNOME glib, mas este projeto git não tem uma meson.build.
Uma simples wrap-git
para esse projeto, que sequer tem tags também, seria usando o master
:
./subprojects/ht.wrap
[wrap-git]
directory=ht
url=https://github.com/benhoyt/ht
revision=master
depth=1
Primeiro vamos pegar todos subprojetos meson subprojects download
, e adicionar a meson.build
na raiz deste:
./subprojects/ht
cat <<EOF | tee -a ./subprojects/ht/meson.build
project('ht', 'c', version: '1.0')
ht_sources = [
'ht.c',
'ht.h',
]
ht_lib = static_library('ht', ht_sources)
ht_dep = declare_dependency(
include_directories: include_directories('.'),
link_with: ht_lib)
EOF
cat ./subprojects/ht/meson.build
e criar o patch com:
mkdir -pv subprojects/{packagecache,packagefiles}
git -C ./subprojects/ht add meson.build
git -C ./subprojects/ht diff --cached > ./subprojects/packagefiles/ht-meson.patch
cat ./subprojects/packagefiles/ht-meson.patch
uma vez com o patch devemos apontar sua presença ao ht.wrap
:
echo "diff_files = ht-meson.patch" >> ./subprojects/ht.wrap
cat ./subprojects/ht.wrap
Pronto, vamos aplicar o patch:
meson subprojects purge --confirm
meson subprojects download
e compilar o projeto para confirmar:
CC=gcc meson setup ./build --wipe -D b_sanitize=none -D buildtype=release
meson compile -C ./build
O executável vai aparecer em ./build
como esperado.
Valeu!
Recomendação para leitura:
Informações gerais: