А где функция setmode и констанда O_BINARY? a52dec без них сломался...

На системе, которая работала полтора года, взялся запустить обновление (блин, дёрнуло же...)
В результате сломалася установка a52dec. Жалуется на неопределённый O_BINARY (поиском по этому термину на форуме нашёл http://www.gentoo.ru/node/13587 - но эта тема ничего не прояснила, хоть и находится почему-то в разделе "решёные").
Алгоритм возникновения ошибки выяснил:
- конфигуратор смотрит по наличию хедера io.h (естественно, находит в /usr/include)
- сборка при наличии найденного файла включает его и вызывает setmode с O_BINARY

Просто определить O_BINARY в 0 - не прокатило, - стало ругаться на отсутствие функции setmode.
Поиск по хедерам обнаружил эти сущности только в хедерах wine (может можно и их заюзать - но это совсем уже куда-то влево).

Проблему решил однострочным патчем configure.in:
-AC_CHECK_HEADERS([sys/time.h sys/timeb.h io.h])
+AC_CHECK_HEADERS([sys/time.h sys/timeb.h])

(соответственно - патч в файл, копия ебилда в локальном оверлее с этим патчем - и успешная сборка)

В общем - мир успешно собирается дальше, но осадок остался:
г-н Гугль утверждает, что функция, в общем-то, достаточно стандартная. И я ума не приложу, куда она вдруг пропала в gentoo.
Или может она уже устарела и её выбросили - "а мужики-то не знают"?
В общем - если кто в теме - просветите...

vinogradov

vinogradov написал(а):
На системе, которая работала полтора года, взялся запустить обновление (блин, дёрнуло же...)
В результате сломалася установка a52dec. Жалуется на неопределённый O_BINARY (поиском по этому термину на форуме нашёл http://www.gentoo.ru/node/13587 - но эта тема ничего не прояснила, хоть и находится почему-то в разделе "решёные").

Какую версию собирал? Где логи, где emerge --info?

vinogradov написал(а):
Алгоритм возникновения ошибки выяснил:
- конфигуратор смотрит по наличию хедера io.h (естественно, находит в /usr/include)
- сборка при наличии найденного файла включает его и вызывает setmode с O_BINARY

У меня нет файла /usr/include/io.h (какому пакету он принадлежит?) и a52dec-0.7.4-r6 прекрасно собирается.

Соответственно вопрос: после обновления системы до актуального состояния ошибка имеет место быть?

Логи сборки в данном случае я фактически изложил

- autotools ищет хедер io.h. По его наличию определяет макрос HAVE_IO_H в сишном хедере.
- в коде условная компиляция - при определённом HAVE_IO_H включается хедер io.h, а ниже вызывается для stdout setmode(O_BINARY).
Поскольку в io.h не определены ни O_BINARY, ни функция setmode - компилятор вылетает с ошибкой (в данном случае - о том, что O_BINARY не определена).

Константу я искал командой find /usr/include | xargs grep 'O_BINARY' - чтобы понять, где же она может быть.

Ошибка, в общем-то, появилась при попытке обновить систему "до актуального состояния".
Первая неудачная попытка обновления была в январе. До этого она стояла с мая прошлого года.
А сейчас - очередная попытка emerge -uDN @system. Благодаря пропатченному ебилду она удалась, сейчас обновляются по цепочке 400 пакетов @world.

У вас очевидно - нет файла, нет и проблемы.

Где лог ошибки?

Где лог ошибки?

Не грусти, товарищ! Всё хорошо, beautiful good!

imho, не правильно обновлял

imho, не правильно обновлял 'старую' систему.
начинать надо с тулчейна

Compute:
Bosch M2.8.1 -> custom Bosch M2.8.3 clone from Russia.
Speed about 260 km,Ram 2 pers.,HDD - 70 kg,210 FLOPS ;)

Хы... А может сразу со stage 1 начать? :)

Просто с последнего emerge -uDN @system @world прошло полтора года (в ноутбуке сгорела лампа подсветки LCD - и он на это время превратился в файловый/скан/принт-сервер; обновлять не было надобности).
emerge --sync и последующий просмотр "что бы такого обновить - emerge -uDNp @system @world" продемонстрировал список из примерно пяти сотен кандидатов на обновление. Некоторые - с блокировками. Некоторые - с изменёнными лицензиями и прочим. В общем - эти авгиевы конюшни и разгребаю.
Данный случай - единственный, когда пришлось спуститься до патча ебилда.

/

vinogradov написал(а):
emerge --sync и последующий просмотр "что бы такого обновить - emerge -uDNp @system @world" продемонстрировал список из примерно пяти сотен кандидатов на обновление. Некоторые - с блокировками. Некоторые - с изменёнными лицензиями и прочим. В общем - эти авгиевы конюшни и разгребаю.

Полтора года.
Гарантированно налетаешь на -e world (http://www.gentoo.org/doc/en/gcc-upgrading.xml).
Про perl'ы/python'ы пока не говорю.

Во избежание подобных проблем рекомендую хотя бы раз в месяц-другой (если совсем лениво --- третий) находить время на обновиться. Так будет проще.

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

:wq
--
Live free or die

vinogradov написал(а):В

vinogradov написал(а):
В общем - мир успешно собирается дальше, но осадок остался:
г-н Гугль утверждает, что функция, в общем-то, достаточно стандартная. И я ума не приложу, куда она вдруг пропала в gentoo.
Или может она уже устарела и её выбросили - "а мужики-то не знают"?

это досовские(виндовые) функции. связанные с двойным символом конца строки в текстовых файлах \r\n в DOS.

В Linux их просто нет. как и io.h.

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".