LINUX.ORG.RU

Пердоллинг с ебилдами в Gentoo: v2.0

 , , ,


0

1

Всем приветы.

Честно, я уже прожёг всю мебель, на которой можно сидеть. Я не могу понять, как работает чёртов пункт SRC_URI в чёртовых ебилдах.

Если конкретнее: есть оверлей, в котором висит ебилд для вина. Решил добавить модульности и вытащить тип вина (ванилька, staging, ванилька + Nine, staging + Nine) в if-ы и переменные. Вот кусок кода:

if (!(use staging) && !(use d3d9)) || (!(use staging) && use d3d9); then
		if use d3d9; then
			WINETYPE="nine"
		else
			WINETYPE="vanilla"
		fi
		SRC_URI="https://dl.winehq.org/wine/source/${MAJOR_V}/${MY_P}.tar.bz2 -> ${WINETYPE}.tar.bz2" # Vanilla Wine with/without Nine
		
	elif use staging && !(use d3d9); then
		WINETYPE="staging"
		SRC_URI="https://github.com/wine-compholio/wine-staging/archive/v${PV} -> ${WINETYPE}.tar.gz" # Wine with Staging patchset
		
	elif use staging && use d3d9; then
		WINETYPE="stnine"
		SRC_URI="https://github.com/mradermaxlol/pontostroy-wine/archive/v${PV}.tar.gz -> ${WINETYPE}.tar.gz" # Staging-and-Nine-patched Wine
	fi
Кусок кода установки sourcedir:
if [ "$WINETYPE" == "stnine" ]; then
	S="${WORKDIR}/pontostroy-wine-${PV}"
elif [ "$WINETYPE" == "vanilla" ] || [ "$WINETYPE" == "nine" ]; then
	S="${WORKDIR}/${PN}-${PV}"
elif [ "$WINETYPE" == "staging" ]; then
	S="${WORKDIR}/${PN}-staging-${PV}"
fi
Кусок кода распаковки:
if [ "$WINETYPE" == "staging" ]; then	
		unpack "staging.tar.gz"
	elif [ "$WINETYPE" == "stnine" ]; then
		unpack "stnine.tar.gz"
	elif [ "$WINETYPE" == "vanilla" ] || [ "$WINETYPE" == "nine" ]; then
		unpack "vanilla.tar.bz2"
	fi

Проблема в том, что repoman ну никак не хочет качать архивы pontostroy и staging. Т.е. при запуске repoman manifest генерятся суммы для %нужныефайлы% и vanilla.tar.bz2, всё. Что я делаю не так?

красные глаза

собираю, компиляю

красные глаза

ебилды в портажи качаю

anonymous
()

Что характерно - ебилды с вайном. Хорошо намекает на аудиторию генты.

entefeed ☆☆☆
()

нафига тебе такой ебилд подо все условия? всё равно юзать его будешь только ты.

взял чуть-чуть подправил ебилд из дерева, вот уже d3d9 готов.

Deleted
()
Последнее исправление: Lifun (всего исправлений: 1)
Ответ на: комментарий от Deleted

Я понимаю. Просто хочется ебилд, который предоставит мне возможность накатить и ванильку, и найн, и стагинг без обращений к другим ебилдам на каждый чих.

mradermaxlol
() автор топика
Ответ на: комментарий от mradermaxlol

мне лично не нравится оверхэд из условий для сорсов

Deleted
()
Ответ на: комментарий от anonymous

Конечно! Только у меня другая проблема: что-то в ебилде не так, и репоман не смотрит на некоторые срц_ури => много чего не работает - ошибки.

mradermaxlol
() автор топика

Решил радикально - засунул все сорцы в SRC_URI. Всем спасибо.

mradermaxlol
() автор топика

При вычислении самих метаданных (переменных SRC_URI, DEPENDS, RDEPENDS, EPI, etc.) gentoo не использует пользовательские USE-флаги. Вычисленнеые метаданные лежат в /var/cache/edb/dep/

Засунуть всё в SRC_URI - самое простое решение.

Можно явно задать зависимость SRC_URI от USE-флагов: https://gitweb.gentoo.org/repo/gentoo.git/tree/dev-lang/fpc/fpc-2.6.4.ebuild#n11

sf ★★★
()
Ответ на: комментарий от sf

А как можно сделать несколько флагов в выражении «foo? ( bar )»? Т.е. добавить флаги к foo. В девмане не нашёл инфы.

mradermaxlol
() автор топика
Ответ на: комментарий от mradermaxlol

Сложные выражения в условиях писать нельзя. Не очень понял вопрос.

Простенькие можно:

# тянуть pkg1 только если оба флага включены
"flag1? ( flag2? ( cat/pkg1 ) )"

# тянуть pkg1 если любой из флагов включен
"|| ( flag1? ( cat/pkg1 ) flag2? ( cat/pkg1 ) )"
Если не все конфигурации USE-флагов имеют смысл, то можно ограничить через REQUIRED_USE:
# flag2 должен быть задан, если зада flag1
REQUIRED_USE="flag1? ( flag2 )"

# один или оба флага обязательно должны быть заданы
REQUIRED_USE="|| ( flag1 flag2 )"

Для более сложного кода можно в pkg_setup() вставить проверки: https://gitweb.gentoo.org/repo/gentoo.git/tree/dev-lang/ghc/ghc-7.8.4.ebuild#...

Если я правильно понимаю оригинальный пост SRC_URI для него должен выглядеть примерно так:

SRC_URI="
   !staging? (
      !d3d9? ( ${vanilla_url} )
       d3d9? ( ${nine_url} ) )
    staging? (
      !d3d9? ( ${staging_url} )
       d3d9? ( ${stnine_url} ) )
"
sf ★★★
()

Мож для никса сделаешь и забудешь про этот гемор?

loz ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.