Добавить в корзинуПозвонить
Найти в Дзене
Toxblh

Этот скрипт ZSH для Alt даст вам собирать meson проекты играючи

Проблема: каждый раз качая проект с 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/^/ - /"

Этот скрипт ZSH для Alt даст вам собирать meson проекты играючи.

Проблема: каждый раз качая проект с 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