Проблема: каждый раз качая проект с meson, у меня всегда есть эта боль, что нужно или через сборку или глазами вычитать и собрать зависимости и после их установить.
Решение: Автоматический перехват meson build/setup. Парсим meson конфиг, находим dependencies, собираем строку на установку. Для ускорения второй и след - пишем epm.lock файл.
meson() {
if [[ "$1" == "build" || "$1" == "setup" ]]; then
local MESON_BUILD="meson.build"
local LOCK_FILE="epm.lock"
if [[ -f "$MESON_BUILD" ]]; then
local DEPS=$(grep -oP "dependency\('\K[^']+" "$MESON_BUILD" | sort)
local DEPS_HASH=$(echo "$DEPS" | md5sum | cut -d' ' -f1)
local need_install=true
if [[ -f "$LOCK_FILE" ]]; then
local LOCK_HASH=$(grep "^hash:" "$LOCK_FILE" | cut -d' ' -f2)
[[ "$DEPS_HASH" == "$LOCK_HASH" ]] && need_install=false
fi
if $need_install; then
echo "→ installing deps..."
epmi $(echo "$DEPS" | sed "s/.*/pkgconfig(&)/")
{
echo "hash: $DEPS_HASH"
echo "date: $(date -Iseconds)"
echo "deps:"
echo "$DEPS" | sed "s/^/ - /"
} > "$LOCK_FILE"
echo "✓ lock updated"
else
echo "✓ deps unchanged, skipping"
fi
fi
fi
command meson "$@"
}Если у вас zsh, то закинуть в любое место в ~/.zshrc
И оно же но просто одной командой:
epmi $(grep -oP "dependency\('\K[^']+" meson.build | sed "s/.*/pkgconfig(&)/")Суть, что у rpm пакетников, пакеты можно ставить по pkgconfig названию (то как их в meson прописывают), так что epmi можно заменить на dnf install и тоже будет работать. Arch/Ubuntu сорян, страдайте))
Если я изобрёл велосипед, киньтесь решением тогда в комментарии, но чёт пока не находил
@toxblh_linux
