LinuxForum.Fans
Тема

Как Sbopkg указать переменные сборки

Автор: Wehrmacht_Rover 19 сообщений 5424 просмотров
#277980

Указал переменные в ~/bashrc

text
bash-4.2# cat ~/.bashrc
CHOST="i686-pc-linux-gnu"
ARCH="pentium4"
CFLAGS="-march=pentium4 -O2 -pipe -fomit-frame-pointer -msse -msse2 -mmmx --param l1-cache-size=8 --param l1-cache-line-size=64 --param l2-cache-size=128"
CXXFLAGS="${CFLAGS}"
SLKCFLAGS="${CFLAGS}"
PKGTYPE="txz"

Но Sbopkg на них на***ть! Где же их надо указывать? Нигде ненаписано где эти переменные указаны, а там где написано то никаким боком оно неработает :(

#277987
Wehrmacht_Rover написал:
Где же их надо указывать? Нигде ненаписано где эти долбаные переменные указаны, а там где написано то нихpeна неработает :(

Натравить sed на его базу слакбилдов. Можной оный сед добавить прямо в скрипт sbo

#277988

Резюме:
1. Чудес не бывает.
2. Если хочется странного, см. п.1

Пояснение:
Жила была оболочка (shell).
И жила она процессом в ОС.
И было у каждого процесса окружение (environment).
Было организовано оно в виде множества пар "переменная=значение".
И каждый вызываемый процесс получал копию окружения родительского процесса.
И мог вызванный процесс делать со своей копий что угодно, в том числе и менять её.
См. пред-предыдущий пункт.

Перейдём от абстрактного к конкретному.
В качестве примера используем http://slackbuilds.org/slackbuilds/13.37/system/htop/htop.SlackBuild обратив особенное внимание на строки

text

VERSION=${VERSION:-1.0.1}
...
if [ "$ARCH" = "i486" ]; then
    SLKCFLAGS="-O2 -march=i486 -mtune=i686"
    LIBDIRSUFFIX=""
elif [ "$ARCH" = "i686" ]; then
    SLKCFLAGS="-O2 -march=i686 -mtune=i686"
    LIBDIRSUFFIX=""
elif [ "$ARCH" = "x86_64" ]; then
    SLKCFLAGS="-O2 -fPIC"
    LIBDIRSUFFIX="64"
else
  SLKCFLAGS="-O2"
  LIBDIRSUFFIX=""
fi
...
CFLAGS="$SLKCFLAGS" \
CXXFLAGS="$SLKCFLAGS" \
./configure \
...

В чём разница между "name=${name:-something}" и "name=something"?
На этот простой вопрос ответ легко найти в man bash.

Теперь, вооружившись полученным знанием, легко ответить на вопрос, можно ли без изменения текста сценария заставить ./configure получить в его собственное окружение значение CFLAGS, переданное извне?

Разобрались? sbopkg оправдан? Вот и славненько.

#277989
"Wehrmacht_Rover" написал:
Sbopkg на них насрать!

Не. SBOpkg здесь ни при чем, скорее всего. Просто не в каждом же слакбилде определены эти переменные.
Кроме того, насколько я понимаю, обычно делают наоборот (см. вызов configure в слакбилде):

text
CFLAGS="$SLKCFLAGS" \
CXXFLAGS="$SLKCFLAGS" \
configure \
--prefix=/usr \
...
--build="$ARCH-slackware-linux"

Переменную ARCH нужно задавать или i486, или i686. Но, у меня, несмотря на

text

$ uname -m
i686

получается

text
$ $ find / -name i*-slackware-linux 2>/dev/null
/usr/include/c++/4.7.1/i486-slackware-linux
/usr/libexec/gcc/i486-slackware-linux
/usr/lib/go/4.7.1/i486-slackware-linux
/usr/lib/gcc/i486-slackware-linux
/usr/i486-slackware-linux
/etc/gtk-3.0/i486-slackware-linux
/etc/pango/i486-slackware-linux
/etc/gtk-2.0/i486-slackware-linux

и поэтому я задаю ARCH=i486.

#277991
bormant написал:

Разобрались? sbopkg оправдан? Вот и славненько.

Нет ему оправдания :-) Только что в рассылке промелькнула новость о новом sbo. И что ? А ни.. [ оставлено место для модератора] :-)
Как не было возможности задать свои флаги, так нет и сейчас.

#277993

SergMarkov,
к пуговицам претензии есть? (q) А.И.Райкин http://www.youtube.com/watch?v=heUq31_Zyd0 , с 3:40 и далее.

Господа, sbopkg не рулит флагами (на самом деле, переменными окружения), за что купил, за то продал, тьфу, что получил, то и отдал слакбилду. Но автор откликается на просьбы, да и сам sbopkg -- перловый скрипт, добавить перед запуском слакбилда подмену чего-то на что-то (например ="$SLKCFLAGS" на ="$CUSTOMSLKCFLAGS") -- тьфу, было бы желание...

#277994

Ну так никто и не спорить что можно. Но лень в данном случае явно не двигатель прогресса :-)
Кстати, давно уже хочу сделать, но как то .., ну понятно

#278038
"bormant" написал:
В чём разница между "name=${name:-something}" и "name=something"?

Я так понял, что в первом случае значение переменной присваивается если она пустая, а во втором по любому присваивается.
Ну так как же мне эти значения присвоить? По любому это просто но никто почему-то не хочет говорить ]:->
Вобщем никто не может просто ответить на простой вопрос, так тут таакое завернули что толку от этого ноль. А может никто и не знает? :D

#278040
Wehrmacht_Rover написал:
[quote="bormant"]В чём разница между "name=${name:-something}" и "name=something"?

Я так понял, что в первом случае значение переменной присваивается если она пустая, а во втором по любому присваивается.
Ну так как же мне эти значения присвоить? По любому это просто но никто почему-то не хочет говорить ]:->
Вобщем никто не может просто ответить на простой вопрос, так тут таакое завернули что толку от этого ноль. А может никто и не знает? :D[/quote]
Не так, не то, и вообще делать вдоль :-)
Ну сказали же ведь, самый тупой случай - заменить sed флаги sbo на свои в его базе слакбилдов, самый умный - в самом скрипте sbo искать где запускается слакбилд и перед его запуском делать тоже самое.

#278041
SergMarkov написал:

Натравить sed на его базу слакбилдов. Можной оный сед добавить прямо в скрипт sbo

Натравить его много ума ненадо, но вот как его натравить-то, я в нём вообще не рублю, да и тупость это какая-то, по уму надо переменные указать чтобы любой слакбилд их слушал.

#278042
Wehrmacht_Rover написал:

Натравить его много ума ненадо, но вот как его натравить-то, я в нём вообще не рублю, да и тупость это какая-то, по уму надо переменные указать чтобы любой слакбилд их слушал.

Этого не позволяет сама структура слакбилда, бормант же объяснил.
А по sed это к доктору - drBatty
Сам когда то хотел сделать, да лень заела, и самим sbo практически не пользуюсь

#278055
"bormant" написал:
...перловый скрипт...

А не bash-скрипт случаем?

text

# mkdir -p /tmp/sbo
cd /tmp/sbo
# wget http://sbopkg.googlecode.com/files/sbopkg-0.36.0.tar.gz
# tar xvf sbopkg-0.36.0.tar.gz
# cd sbopkg-0.36.0
$ find . -type f -a -executable | xargs file
./usr/sbin/sbopkg: Bourne-Again shell script, ASCII text executable
#278317

"bormant" написал:
сам sbopkg -- перловый скрипт
"yars" написал:
./usr/sbin/sbopkg: Bourne-Again shell script, ASCII text executable
Хоть убейте, не могу вспомнить, откуда в сознании взялся perl *CRAZY* , но sbopkg с самого начала был шелл скриптом на sh (с шебангом #!/bin/sh http://sbopkg.googlecode.com/svn/tags/0.0.1/usr/bin/sbopkg), а ныне -- с #!/bin/bash.
Прямо как про муху и Аристотеля ;)
#278323

Ну, все мы - люди, а людям иногда можно и ошибаться, чай не компы :)

#278813
Wehrmacht_Rover написал:

Натравить его много ума ненадо, но вот как его натравить-то, ...

Я если просто добавить в скрипт /etc/sbopkg/sbopkg.conf: (почти в самом начале есть несколько строк, начинающихся на export ... ) строку export CFLAGS='свои флаги'? А не, так ручками каждый слакбильд, а что делать?

Я таким образом "export EDITOR=nano" установил для правки слакбилдов, а то все vim да vim, а я его не понимаю :)

#278830

vladimir.pa,
Указанное в сообщении No.3 загубит вашу идею на корню ;) После
CFLAGS="$SLKFLAGS"
плакал ваш экспорт для конкретного ./configure горючими слезами.

#278894

Не проще ли сам слакбилд поправить и не париться? У меня это затруднений не вызывает.

#278955
"yars" написал:
Не проще ли сам слакбилд поправить и не париться?

Это как посмотреть. Далее чисто умозрительно ;)
1) Если собирать вручную, без sbopkg, скачивая и правя отдельные слакбилды, то нет проблем.
2) Если использовать sbopkg или собственное зеркало репозитория со slackbuilds.org, появляется следующий нюанс. Допустим, поправили слакбилд. Но при следующем "sbopkg -r"/"rsync ..." к вам снова приедет прежняя его версия. Снова править? А если забудется?
3) Для sbopkg можно попробовать использовать его существующую возможность кастомизации slackbuild-ов. Осталось решить а) на что править, чтобы было боолее-менее универсально, и б) как синхронизировать .SlackBuild.local в случае обновления слакбилда в репозитории.
4) Править можно на что-то вроде:
CFLAGS="${CSLKCFLAGS:-$SLKCFLAGS}" \
CXXFLAGS="${CSLKCFLAGS:-$SLKCFLAGS}" \
./configure \
В таком случае, если в окружении есть переменная CSLKCFLAGS (от custom slk cflags), будет использовано её значение, иначе значение, присвоенное слакбилдом переменной SLKFLAGS. Вариант
CFLAGS="${CFLAGS:-$SLKCFLAGS}" \
CXXFLAGS="${CXXFLAGS:-$SLKCFLAGS}" \
./configure \
возможен, но мне кажется более рискованным: вдруг где-то встретится export CFLAGS=..., а поскольку переменная документирована именно для подобного применения, вероятность этого "вдруг" ненулевая.
5) Когда править? Очевидно, после синхронизации репозитория.
6) Чем править? find+sed вполне справятся с созданием *.SlackBuild.local, нужно только уточнить, где их создавать.

#279102

ОФТОП:
Ой, елочки! Руками буду править каждый бильд, как всегда, да и отработано уже до автоматизьмы :)

Войдите или зарегистрируйтесь, чтобы ответить.