LINUX.ORG.RU

gentoo аналог dpkg-buildpackage для создания ебилдов


0

1

Подскажите, есть что-то типа dpkg-buildpackage, чтобы автоматически создавать из тупых исходников (выкаченных с git, например) ebuild. Т.е. чтобы запускалось (при необходимости сначало выкачивалось), ./configure, make, make install. Или уже есть универсальные шаблоны?

man 5 ebuild

anonymous
()

/usr/portage/skel.ebuild

Просто добавь воды. Указывай, откуда исходники качать, и всё. Для EAPI<4 надо ещё раскомментировать функцию src_install.

выкаченных

Закати обратно. И читай /usr/portage/eclass/git.eclass.

tiandrey ★★★★★
()

есть с GSoC велик но только для автотулзей
а вообще пили ебыдлы

megabaks ★★★★
()

./configure make make install будет работать в EAPI 4 из-коробки практически.

Для части приложений с PECL, haskell приложений с hackage, латех пакетов с CTAN есть автоматические генерилки. Есть много eclass /usr/portage/eclass облегчающих жизнь и плагины для vim, которые шаблон ебилда сделают. А в общем случае установка пакетов может потребовать доп магии, и создания use, что автоматизировать сложно.

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

ещё вопрос: могу я вместо econf и emake юзать собственные ./configure --ololo && make && make install ? И каким образом оно узнаёт, какие именно файлы какому пакету принадлежат? И как происходит установка (почему скомпиленные файлы в песочнице в конце концов оказываются в настоящей файловой системе) при условии того, что используется sandbox?

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

вместо econf и emake юзать собственные ./configure --ololo && make && make install ?

какой смысл? о_О
econf --ololo
emake
emake DESTDIR=«${D}» install

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

смысл в том, что emake завершится при выходе больше 0 (или при выводе в sdterr ?? ). Или у меня какая-нибудь несколькоэтапная сборка (типа как в случае компизом). Ну вообще то так можно или нет?

А на каких этапах без песочницы?

Оффтоп: я щас запилю тему про reiserfs, прошу поучаствовать

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

могу я вместо econf и emake юзать собственные ./configure --ololo && make && make install ?

Вместо econf - most likely, он вроде как просто подставляет дополнительные параметры типа --host=<bla-bla-bla>-linux-gnu, --<bla-bla-bla>dir=<path>.

Песочница нужна для того, чтобы во время установки ничего в системе не изменилось. Насколько я понимаю, там отслеживаются системные вызовы open() и, вероятно, другие, и если что-то пытается изменить что-то в системе (переписать файл, создать файл, удалить файл, etc), то выполнение прекращается.

Установка происходит очень просто - make DISTDIR=<путь> install; в этом случае всё устанавливается относительно префикса DISTDIR, а именно в /var/tmp/portage/app-category/app-name-version/image/. Соответственно, все файлы оттуда копируются уже в корень, с некоторыми проверками.

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

vendor501

emake завершится при выходе больше 0

не распарсил
ошибки выплюнет в консоль и в лог
чтобы завершалось в случае ошибки

emake || die "тут сообщение от балды, и оно не обязательно"
в чём проблема?

vendor501

Или у меня какая-нибудь несколькоэтапная сборка

типа так?

  eqmake4 rosamp-plugin-qt.pro
  emake || die
  lrelease rosamp-plugin-qt.pro

  if use "rm"; then
	eqmake4 rosamp-plugin-rm.pro
	emake || die
  fi

  if use "wmp"; then
	eqmake4 rosamp-plugin-wmp.pro
	emake || die
  fi
  
  if use "mpeg"; then
	eqmake4 rosamp-plugin-smp.pro
	emake || die
  fi
  
  if use "divx"; then
	eqmake4 rosamp-plugin-dvx.pro
	emake || die
  fi

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

vendor501
emake завершится при выходе больше 0

он прекратит свою работу (и весь ебилд тоже) с ошибкой, в случае, если настоящий make, вызванный им, завершиться с ошибкой. Но я не уверен, что только из-за этого может быть прекращение работы: у меня есть подозрение, что это произойдет также при любом выводе make в stderr.

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

vendor501
Или у меня какая-нибудь несколькоэтапная сборка

Допустим мне надо перейти в ./make сделать ./configure, потом сделать make Qconfig, потом cd .., qmake, потом перейти в ./build и сделать make install

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

ну вот тебе более полный кусок ебыдла выше

src_compile() {
  cd rosa-media-player
  eqmake4 rosampcore.pro
  emake
  
  cd ../rosamp-plugin
  eqmake4 rosamp-plugin-qt.pro
  emake || die
  lrelease rosamp-plugin-qt.pro

  if use "rm"; then
	eqmake4 rosamp-plugin-rm.pro
	emake || die
  fi

  if use "wmp"; then
	eqmake4 rosamp-plugin-wmp.pro
	emake || die
  fi
  
  if use "mpeg"; then
	eqmake4 rosamp-plugin-smp.pro
	emake || die
  fi
  
  if use "divx"; then
	eqmake4 rosamp-plugin-dvx.pro
	emake || die
  fi
}

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

Всему свое время. Конфигурирование - в src_configure, сборка - в src_compile(). Если конфигурирование одной части требует предварительной сборки другой части, то оно тоже запихивается в src_compile(). Там не единичные вызовы emake/econf, а bash-код любой сложности. Единичные вызовы только по-умолчанию.

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

Допустим мне надо перейти в ./make сделать ./configure, потом сделать make Qconfig, потом cd .., qmake, потом перейти в ./build и сделать make install

надо:
cd ./make
./configure
make Qconfig
cd ..
qmake build
./build
make install

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

Т.е. если у меня в ручном (когда всё делаю сам, что не правильно) работает:
cd ./make
./configure
make Qconfig
cd ..
qmake build
./build
make install

то надо:
src_configure() {
}
src_compile() {
cd ${WORKDIR}/${P}
cd ./make
./configure \
--host=${CHOST} \
--prefix=/usr \
--infodir=/usr/share/info \
--mandir=/usr/share/man
make Qconfig
cd ..
qmake build
}
src_install() {
cd ./build
./make install
}

Я понимаю, что это через жопу, но всё же.

И так на каком этапе мы уже без песочницы работаем? Т.е. какая комманда/секция нас оттуда выкидывает в реальную фс?

Для EAPI<4 надо ещё раскомментировать функцию src_install.

В смысле? Теперь вся установка в src_compile() происходит?

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

как не надо то? тогда что за нас то make install выполнит? и когда мы уже начинаем с реальной фс работать, а не с песочницей?

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

Неверно.

src_configure() {
    cd make
    econf # можешь переписать здесь свою простыню с ./configure
    cd ..
    make Qconfig
}

src_compile() {
    qmake build
}

src_install() {
    cd build
    make DESTDIR="${D}" install
}

в смысле? Теперь вся установка в src_compile() происходит?

Нет, для старого API надо было указать в src_install, что надо сделать emake install, иначе эта функция просто была аналогична true.

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

vendor501

как не надо то? тогда что за нас то make install выполнит?

э-хе-хе

# Copyright 1999-2011 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: $

EAPI=4

VIRTUALX_REQUIRED="test"
inherit kde4-base

DESCRIPTION="A Plasma widget to display menubar of application windows"
HOMEPAGE="https://launchpad.net/plasma-widget-menubar"
SRC_URI="http://launchpad.net/${PN}/trunk/${PV}/+download/${P}.tar.bz2"

LICENSE="GPL-3"
SLOT="4"
KEYWORDS="~amd64 ~x86"
IUSE="debug test gtk qt4"

DEPEND="
	gtk? ( x11-misc/appmenu-gtk )
	qt4? ( x11-misc/appmenu-qt )
	>=dev-libs/libdbusmenu-qt-0.9.0
	>=dev-libs/qjson-0.7.1
"
RDEPEND="${DEPEND}
	!kde-misc/plasma-indicatordisplay
"
и это весь ебилд!

vendor501

и когда мы уже начинаем с реальной фс работать, а не с песочницей?

зачем тебе это? о_О
всё придумано до нас

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

тогда мне не понятно, где происходит emake DESTDIR=«${D}» install || die в кашерных новый ебилдах? или оно автоматички происходит (ну так же, как если бы мы его дописали в src_install() ) и мы можем его опустить?

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

В кошерных новых ебилдах оно в src_install() происходит. В данном случае единственное отличие - надо в каталог build зайти, если бы не это, можно было бы не описывать src_install.

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

Да. src_install() это true для EAPI<4 и emake install для EAPI=4. src_configure() это econf, src_compile() - emake.

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