Re: [sisyphus] Re: пережёвываем libtool

Dmitry Kazimirov =?iso-8859-1?q?d=2Ekazimirov_=CE=C1_olivema=2Ecom?=
Пн Апр 11 09:53:29 MSD 2005


Прошу прощения, что опять поднимаю эту мутную тему.
Просто я письмо написал в пятницу вечером, а потом на
сервере питание выключили, и послать я его не смог.

Libtool пожевали, теперь нужно выплюнуть.  :-)

> Извините, libtool не должен подменять программисту голову.  Если
> APP использует libBASE, извольте написать об этом в Makefile.

Так вот очень часто бывает так, что в Makefile о таких
зависимостях не пишут. Вот пример:

Допустим, в приложении APP некий программист использует
обертку BASE++ для обращения к структурам и функциям
библиотеки BASE. Интерфейсы классов BASE++ полностью
скрывают от программиста эти функции и структуры данных,
однако они (эти структуры из BASE) присутствуют в виде членов
классов BASE++. Таким образом у модулей, использующих BASE++,
сохраняется зависимость от BASE по ABI или даже API - в
случае, если функции BASE обернуты inline-методами BASE++).

Внимание, вопрос! Как много программистов, использующих
BASE++, но ничего не знающих о структурах BASE, догадаются
включить библиотеку BASE в зависимости своего приложения?

Ответ - немногие. Но об этом может позаботиться libtool.

Более того, указывать зависимость от BASE в приложениях,
использующих BASE++, было бы неверно. Ведь я использую
обертку! Я понадеялся, что она реализована правильно.
Да и мало ли что случится с базовой библиотекой...
Она может быть переименована, разделена на две и прочее.
Хоть мое приложение и зависит от BASE вследствие не самого
лучшего способа реализации BASE++, я не должен все время
следить, какие там базовые библиотеки использует BASE++.
Сегодня одну, завтра две другие. Об этом может позаботиться
libtool. Но лучше пусть BASE++ перепишут нормально, чтобы
исключить такую косвенную зависимость моего приложения от
BASE. А еще лучше пусть сам BASE напишут нормально, чтобы
сократить ABI до передачи указателей, а API стандартизировать.
Тогда у авторов BASE++ почти не будет шансов неправильно
спроектировать свою библиотеку.

Однако! Все это пережевывание libtool яйца выеденного
не стоит. Можно приводить много примеров, для которых имеет
смысл оставлять файлы *.la, но польза от них перечеркивается
практической выгодой в сокращении трафика на выкачивании
пакетов по лишним зависимостям.

И уж однозначно нормальные приложения не должны требовать
присутствия файлов *.la. Можно включать файлы *.la, а лучше,
конечно, их не включать, но вот требовать их присутсвия никак
нельзя.

И требует эти файлы, заметьте, не libtool, на который тут
незаслуженно наехали, а извращенные скрипты для построения
отдельно взятого приложения. Или даже не отдельно взятого, а
(о, ужас) многих приложений KDE. Вот для них и надо найти
"правильную замену".   :-)




Подробная информация о списке рассылки Sisyphus