1 (24.03.2014 11:22:46 отредактировано Wehrmacht_Rover)

Ув. знатоки, подскажите пожалуйста, как этому зверю сообщить флаги компиляции какие я хочу, а не те что он автоматом в слакбилде определяет.
Чтение мана пользы не принесло, там про это ничего не написано, только как передать опции компиляции для пакета, но как выполнить конкретную задачу - нифига они не говорят (или не умеют маны писать шепелявые). bw

OS: Gentoo
CPU: Xeon E5450 RAM: 8 Gb DDR2, VGA: GeForce GTX750 Ti
MB: Asus P5Q SE2

2

Wehrmacht_Rover пишет:

сообщить флаги компиляции какие я хочу, а не те что он автоматом в слакбилде определяет

Кратко: переопределить в локальном слакбилде путем правки его текста.

Подробнее: обычно слакбилды переменные параметров компиляции извне не берут, поэтому требуется их правка в самом сценарии. Обычно там что-то вроде:

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

Из интерфейса sbopkg делается это в Custom - Edit SlackBuild из меню управления пакетом.
Исключение составляет включение/выключение разных возможностей переменными окружения, описанные в README слакбилда, вроде http://slackbuilds.org/repository/14.1/ … ia/ffmpeg/
с теми проще -- указать при вызове:

 Консоль:
# ASS=yes ... sbopkg -Rki ffmpeg

bormant пишет:

переопределить в локальном слакбилде путем правки его текста.

Ну это понятно, как семечки, хочется чтобы на автомате флаги подхватывались.

bormant пишет:

Из интерфейса sbopkg делается это в Custom - Edit SlackBuild из меню управления пакетом.

Что-то я не понял как это редактировать, редактор какой-то инопланетный  bw Хоть убей, непонятна мне эта программа bl

bormant пишет:

включение/выключение разных возможностей переменными окружения

А флаги компиляции к ним не относятся? Вот и хочется флаги указывать из командной строки хотя-бы.

OS: Gentoo
CPU: Xeon E5450 RAM: 8 Gb DDR2, VGA: GeForce GTX750 Ti
MB: Asus P5Q SE2

4

Wehrmacht_Rover, Можно у рута в ~/.bashrc или ~/.bash_login заранее определить некоторые из наиболее употребительных переменных, в том числе и опции компилятора с линкером. А вот опции сборочные (--with-option, --without-option, --sysconfdir, etc) изменяются в подавляющем большинстве случаев правкой слакбилда.
Создать на 100% универсальный инструмент невозможно в принципе, потому что сколько существует сборочных систем, столько и способов их конфигурирования. Вот если бы все пользовались только GNU Autotools, к примеру, тогда было бы другое дело.

Истинный hotplug - это обычная электрическая розетка: воткнул - работает, и никаких драйверов.
Slackware64-current/Xfce/Lenovo G580
yars пишет:

А вот опции сборочные

Интересуют CFLAGS, CXXFLAGS, так как хочу собирать программы под свой проц, а не под i686.

OS: Gentoo
CPU: Xeon E5450 RAM: 8 Gb DDR2, VGA: GeForce GTX750 Ti
MB: Asus P5Q SE2

6

Wehrmacht_Rover пишет:
yars пишет:

А вот опции сборочные

Интересуют CFLAGS, CXXFLAGS, так как хочу собирать программы под свой проц, а не под i686.

В таком случае остается только править слакбилды. Если задать их в ~/.bashrc, слакбилд все равно эти переменные переопределит. Вот если бы во всех слакбилдах было, например:

CFLAGS=${CFLAGS:-$SLKCFLAGS}

тогда бы эти переменные можно было переопределять извне.

Истинный hotplug - это обычная электрическая розетка: воткнул - работает, и никаких драйверов.
Slackware64-current/Xfce/Lenovo G580

7

Натравить на базу слакбилдов sed

8

Wehrmacht_Rover пишет:

редактор какой-то инопланетный

Поскольку в sbopkg видим

EDITOR=${EDITOR:-vi}

то тот, что в $EDITOR прописан. Ничего не прописано? Тогда vi.

9

SergMarkov пишет:

Натравить на базу слакбилдов sed

... и не забывать повторять сие действо после каждой синхронизации ("sbopkg -r"). Забывчивым можно даже в сам sbopkg дописать, благо он сценарий на bash.

10 (25.03.2014 12:58:05 отредактировано Wehrmacht_Rover)

SergMarkov пишет:

Натравить на базу слакбилдов sed

Такой скрипт подойдёт?

#!/bin/bash
for name in *.Slackbuild
  do
    sed 's/i486 -mtune=i686/athlon64 -mtune=athlon64 -pipe -fomit-frame-pointer/' $name.SlackBuild > $name.SlackBuild.tmp
    mv $name.SlackBuild.tmp $name.SlackBuild
    chmod +x $name.SlackBuild
  done

1. Может быть, где-то ошибся? Исправьте.
2. Где находится база слакбилдов?

OS: Gentoo
CPU: Xeon E5450 RAM: 8 Gb DDR2, VGA: GeForce GTX750 Ti
MB: Asus P5Q SE2

11

2. Можно хоть в /var/cache/slackbuilds, но точно не скажу, так как sbopkg не пользуюсь, это надо man sbopkg читать.

Истинный hotplug - это обычная электрическая розетка: воткнул - работает, и никаких драйверов.
Slackware64-current/Xfce/Lenovo G580
yars пишет:

2. Можно хоть в /var/cache/slackbuilds, но точно не скажу, так как sbopkg не пользуюсь, это надо man sbopkg читать.

Нашёл базу, теперь другой вопрос - есть ли разница какой ставить переменную $ARCH? i486, i686 или свою athlon64?

OS: Gentoo
CPU: Xeon E5450 RAM: 8 Gb DDR2, VGA: GeForce GTX750 Ti
MB: Asus P5Q SE2

13

Athlon64 - это x86_64, если не ошибаюсь. Т.е., Slackware64 у вас должна работать, по идее.

Истинный hotplug - это обычная электрическая розетка: воткнул - работает, и никаких драйверов.
Slackware64-current/Xfce/Lenovo G580
yars пишет:

Athlon64 - это x86_64, если не ошибаюсь. Т.е., Slackware64 у вас должна работать, по идее.

Процессор - да, но система x86, в данном случае означает оптимизацию под мой проц.
Вот и хочу узнать что определяет $ARCH, я думаю что это просто набор букв, которые говорят слакбилду под какой проц собирать программу.

OS: Gentoo
CPU: Xeon E5450 RAM: 8 Gb DDR2, VGA: GeForce GTX750 Ti
MB: Asus P5Q SE2

15

Что скажет uname -m, под то и собирайте. Даже i686 - это, если не ошибаюсь, Pentium II.

Истинный hotplug - это обычная электрическая розетка: воткнул - работает, и никаких драйверов.
Slackware64-current/Xfce/Lenovo G580

16 (25.03.2014 17:43:29 отредактировано bormant)

Wehrmacht_Rover,
жесть как она есть, извините. По началу мне показалось, что вы понимаете, что делаете. Теперь точно знаю, что показалось.

Опции компилятора и производимые ими эффекты смотрите в документации к gcc -- в части того, что им собирается, в том числе про march и mtune. В прочей, к счастью малозначительной, части -- смотрите опции тех прочих средств сборки.

По поводу размещения слакбилдов -- см. /etc/sbopkg/sbopkg.conf в части переменных REPO_ROOT/REPO_NAME/REPO_BRANCH (именно в этом порядке).

По поводу скрипта,  в помощь:

# find /var/lib/sbopkg/SBo/14.1/ | xargs sed -i -e '...'

По поводу замены: менял бы $SLKCFLAGS на ${MY_CFLAGS:-$SLKCFLAGS}, и куда-то в автостарте дописал бы export MY_CFLAGS="чего душе угодно".

bormant пишет:

По началу мне показалось, что вы понимаете, что делаете. Теперь точно знаю, что показалось.

Интересно мне понять что я не понимаю.
Вот мой итоговый скрипт, который решает мой вопрос

#!/bin/sh
for name in $( ls -R /var/lib/sbopkg/SBo/14.1/*/*/*SlackBuild )
  do
    sed 's/ARCH=i486/ARCH=i686/;s/i686 -mtune=i686/athlon64 \
    -mtune=athlon64 \
    -pipe \
    -fomit-frame-pointer \
    -ffast-math \
    -fwhole-program \
    -msse2 -mmmx -mmmxext -m3dnow -m3dnowext\
    -mfpmath=both/' $name > $name.tmp
    mv $name.tmp $name
    chmod +x $name
  done
OS: Gentoo
CPU: Xeon E5450 RAM: 8 Gb DDR2, VGA: GeForce GTX750 Ti
MB: Asus P5Q SE2

18

Как уже говорил выше, вместо

sed ... $name > $name.tmp
mv $name.tmp $name
chmod +x $name

достаточно

sed -i ... $name

Вариант с установкой опций сборки вне слакбилда чем-то не понравился или просто его не рассматривали? Ведь этот вариант намного гибче -- не установлена переменная окружения -- используются опции слакбилда, установлена -- используется ее значение. Нужно пересобрать с другими опциями -- поменяли параметры сборки в переменной и можно пересобирать.

По поводу -march=i486 vs. -march=athlon64 и -mtune=i686 vs. -mtune=athlon64 -- это лишь плацебо, вы будете смеяться но вся разница только в них самих. Не верите? Спросите у gcc чем отличаются эти наборы:

$ diff <(gcc -march=i486 -mtune=i686 -Q --help=target) <(gcc -march=athlon64 -mtune=athlon64 -Q --help=target)

Будет ли толк от остального, и стоит ли свеч геморрой с пересборкой, нужно мерить и сравнивать...

bormant пишет:

вы будете смеяться но вся разница только в них самих.

Туда можно ввести что угодно, хоть "сливной_бачок", оно и покажет  чем бачок отличается от athlon64

bormant пишет:

достаточноsed -i ... $name

Теперь так и сделал.

bormant пишет:

Вариант с установкой опций сборки вне слакбилда чем-то не понравился или просто его не рассматривали?

Пока не рассматривал.
Ранее поступила информация что так не получится:

yars пишет:

В таком случае остается только править слакбилды. Если задать их в ~/.bashrc, слакбилд все равно эти переменные переопределит. Вот если бы во всех слакбилдах было, например: CFLAGS=${CFLAGS:-$SLKCFLAGS} тогда бы эти переменные можно было переопределять извне.

OS: Gentoo
CPU: Xeon E5450 RAM: 8 Gb DDR2, VGA: GeForce GTX750 Ti
MB: Asus P5Q SE2

20

Wehrmacht_Rover пишет:

Ранее поступила информация что так не получится:

yars пишет:

В таком случае остается только править слакбилды. Если задать их в ~/.bashrc, слакбилд все равно эти переменные переопределит. Вот если бы во всех слакбилдах было, например: CFLAGS=${CFLAGS:-$SLKCFLAGS} тогда бы эти переменные можно было переопределять извне.

А в каком месте мои слова противоречат словам bormant'а?

Истинный hotplug - это обычная электрическая розетка: воткнул - работает, и никаких драйверов.
Slackware64-current/Xfce/Lenovo G580

21

Wehrmacht_Rover пишет:

Ранее поступила информация что так не получится:

Речь была о том, что не получится без правки слакбилдов. Но вы слакбилды правите. Тогда, очевидно, выгоднее править универсальным способом и один раз, чем под каждый проверяемый вариант.

Более перспективным видится несколько иной вариант, поскольку он применяется AlienBob-ом в его слакбилдах по ARM, есть шанс, что этот вариант рано или поздно переедет и в репозитории Slackware и станет стандартным, см. http://alien.slackbook.org/blog/aliens- … s-and-git/ в части /etc/slackbuild/machine.conf, пример: http://www.slackware.com/~alien/slackbu … lackBuild, собственно идея (по ссылке есть ошибка в использовании $CWD до задания значения):

CWD=$(pwd)
if [ -e $CWD/machine.conf ]; then
  . $CWD/machine.conf ]
elif [ -e /etc/slackbuild/machine.conf ]; then
  . /etc/slackbuild/machine.conf ]
else
  # Automatically determine the architecture we're building on:
  MARCH=$( uname -m )
  if [ -z "$ARCH" ]; then
    case "$MARCH" in
      i?86)    export ARCH=i486 ;;
      arm*)    export ARCH=arm ;;
      # Unless $ARCH is already set, use uname -m for all other archs:
      *)       export ARCH=$MARCH ;;
    esac
  fi
  # Set CFLAGS/CXXFLAGS and LIBDIRSUFFIX:
  if [ "$ARCH" = "i486" ]; then
    SLKCFLAGS="-O2 -march=i486 -mtune=i686"
    LIBDIRSUFFIX=""
  elif [ "$ARCH" = "s390" ]; then
    SLKCFLAGS="-O2"
    LIBDIRSUFFIX=""
  elif [ "$ARCH" = "x86_64" ]; then
    SLKCFLAGS="-O2 -fPIC"
    LIBDIRSUFFIX="64"
  elif [ "$ARCH" = "arm" ]; then
    SLKCFLAGS="-O2 -march=armv5te"
    LIBDIRSUFFIX=""
  else
    SLKCFLAGS="-O2"
    LIBDIRSUFFIX=""
  fi
fi

Вот такой вариант мне видится более интересным, чем жёсткое вписывание конкретных опций.

bormant пишет:

Но вы слакбилды правите

Как добавить sed'ом в слакбилд блок текста после заданной строки? Я так и не понял как это сделать  bw  От чтения английских манов мозги пухнут  be  ac

OS: Gentoo
CPU: Xeon E5450 RAM: 8 Gb DDR2, VGA: GeForce GTX750 Ti
MB: Asus P5Q SE2

23

man sed
Zero- or One- address commands
i (insert) -- перед, a (append) -- после, c (change) -- заменить.

Варианты задания адреса см. там же в Addresses.

bormant пишет:

переопределить в локальном слакбилде путем правки его текста.

Я правлю локальные слакбилды, но sbopkg их не использует, а берёт с сервера, погань такая!

OS: Gentoo
CPU: Xeon E5450 RAM: 8 Gb DDR2, VGA: GeForce GTX750 Ti
MB: Asus P5Q SE2

25

Wehrmacht_Rover,
не-а, локальные слакбилды в его понимании -- оканчивающиеся на .local. А если править его дерево, то он при синхронизации (-r), естественно, снова с сервера заберет все изменившееся, то есть, в вашем случае -- вообще всё, выше не зря обращал внимание на:

bormant пишет:

... и не забывать повторять сие действо после каждой синхронизации ("sbopkg -r")

Правда, синхронизацию можно проводить разумно, только при наличии нужных изменений в http://slackbuilds.org/ChangeLog.txt.

bormant пишет:

А если править его дерево, то он при синхронизации (-r), естественно, снова с сервера заберет все изменившееся

Я не делал -r
sbopkg -i program не видит правленные слакбилды, а делает всё по-своему ac

OS: Gentoo
CPU: Xeon E5450 RAM: 8 Gb DDR2, VGA: GeForce GTX750 Ti
MB: Asus P5Q SE2

27

Wehrmacht_Rover,
значит тем более есть смысл править локальную копию слакбилда. В прошлый раз ошибся именем, локальная копия имеет на хвосте .sbopkg. Либо отложить правленную копию в собственный локальный репозиторий, прописав его в настройках репозиториев sbopkg, или воспользоваться уже имеющимся local/local.

bormant пишет:

локальная копия имеет на хвосте .sbopkg

Что-то не нашёл. Есть wine.SlackBuild.build - это она?

OS: Gentoo
CPU: Xeon E5450 RAM: 8 Gb DDR2, VGA: GeForce GTX750 Ti
MB: Asus P5Q SE2

29

Wehrmacht_Rover,
Нет.
Выходит, плохо объясняю, попробую ещё.
В sbopkg предусмотрено штатное средство модификации слакбилдов и файлов инфо. Если смотреть в интерфейсе, то это в меню пакета пункт Custom. До меню пакета добираемся любым удобным образом: Search или Browse. Правка из того меню приводит к созданию файлов пакет.SlackBuild.sbopkg, пакет.info.sbopkg.

При сборке, если sbopkg видит наличие *.SlackBuild.sbopkg и/или *.info.sbopkg, он спрашивает, использовать модифицированные файлы или оригинальные. Если их туда положить руками, эффект будет тот же самый.

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

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

30

Я, как уже не раз говорил, несмотря на очевидную пользу sbopkg, не пользуюсь им, по той причине, что все равно же правлю слакбилды и/или пишу свои, и помощник мне в этом не требуется. Вместо этого, в браузер интегрировал поиск по базе slackbuilds.org, штатными средствами браузера (ПКМ на поле поиска > Создать поиск).

Истинный hotplug - это обычная электрическая розетка: воткнул - работает, и никаких драйверов.
Slackware64-current/Xfce/Lenovo G580