?

Log in

No account? Create an account
Автоматизированные системы сборки - Журнал Восставшей Машины [entries|archive|friends|userinfo]
ArkanoiD

[ userinfo | livejournal userinfo ]
[ archive | journal archive ]

Автоматизированные системы сборки [Sep. 23rd, 2010|02:10 am]
ArkanoiD
[Tags|]

Знали бы вы, как я ненавижу сраный autoconf.

Это натуральный самородный пиздец. Собственно autoconf ненавидеть как бы и не за что: вполне нормальное, годное средство автоматизации в некривых руках. Но проблема, увы, в том, что некривых рук исчезающе мало. Проблему портабельности большинство понимает, как "узнать, какой у нас дистрибутив линукса". Ах да, еще есть *BSD. Некоторые, если повезет, вспомнят про Solaris.

Итого, проблема сводится к двум:

1) autoconf генерирует человеконечитаемые makefiles
2) большинство разработчиков рассчитывают на некое свое понятие о стандартном окружении.

Кумулятивный эффект этих двух пунктов похож на ЕБАНЫЙ ПИЗДЕЦ. На произвольном юниксе, который в общем не Linux и не *BSD (при этом никакой экзотики там может и не быть) согласно пункту 2) сборку ГАРАНТИРОВАННО ПЕРЕКОСОЕБИТ, а пункт 1) обеспечит невозможность ее вменяемо и быстро починить. Я уже молчу о том, что мало кто думает, например, что компилятор может быть вовсе не gcc, линкер далеко не gnu ld, а разделяемые библиотеки могут быть вовсе не .so (превед, поганый libtool)

За всю свою жизнь я видел всего один программный пакет, который из configure выдавал человекочитаемый компактный Makefile. И то это были какие-то примеры из книжки.

Особенно милы параметры командной строки, которые предлагают тебе указать --with-моеговно=/usr/local/моеговно, а услужливые мейнтейнеры родного пакета моеговно красиво расфасовали его что-то в /usr/local/lib/моеговно, что-то в /usr/local/include/моеговно, что-то в /etc/моеговно и так далее.

Далее, вспомним про fredesktop, gnome и любимый ими pkg_config, который должен бы избавить от подобных проблем. Хуев тачку! Мало того, что любой уважающий себя коммерческий юникс имеет несколько независимых third-party репозиториев, каждый из которых раскладывает свою иерархию библиотек, желательно несовместимых между собой, так еще и десктопные библиотеки при этом тупо не складываются в sane build environment. То есть, если хочется что-то собрать из десктопной хуйни, нужна чорная магия и список параметров сборки на полэкрана, а вот чтобы собрать за один ./configure(enter) , то скорее Дед Мороз придет и поможет. Желающие могут на досуге добиться нормальной работы банального dbus на solaris10/sparc.

И все, типа, делают вид, что нормально. Мало того, вся критика autotools, которую я видел, сводится к "(insert-name-here) гораздо лучше!" Да щас там. cmake такое же точно говно и ведет себя до мелочей идентично, а остальное и пробовать не хочу. При этом доля софта, который собирается на "немейнстримовых" системах без бубна и напильника не больше одного программного пакета на десять. И кстати, autoconf совершенно там не избавляет от ручной правки кода.

Нет уж, лучше бы мы перед сборкой каждого пакета тратили десять минут на ручную правку Makefile, чем жить с этой ебанью и сраниной.
linkReply

Comments:
Page 1 of 2
<<[1] [2] >>
[User Picture]From: crimcat
2010-09-22 10:23 pm (UTC)
Сочувствую. Эти суки, которые придумали автотулы, подложили шикарную мину под весь софт.
(Reply) (Thread)
[User Picture]From: d1f
2010-09-23 01:28 am (UTC)
эту суку зовут RMS и придумано оно было для сборки gcc.
(Reply) (Parent) (Thread) (Expand)
[User Picture]From: duke_igthorn
2010-09-22 10:33 pm (UTC)
Ручная правка мейкфайлов не выход. Ты предлагаешь это выполнять для каждой софтины? Особенно интересно, должно быть, это как раз на экзотических платформах - о которых разработчик ТОЧНО не подумал - ему даже в голову могло не прийти, что какие-то параметры не являются константами.

Попробуй предложить что-нибудь другое. Или смирись с тем, что любая тулза требует головы - и ее не заменяет.
(Reply) (Thread)
[User Picture]From: arkanoid
2010-09-22 10:40 pm (UTC)
Ну какие параметры например? Мифические платформы, на которых sizeof(int*) != sizeof(char*) не рассматриваем :-)

Можно родить кучку пресетов, типа Makefile.linux, Makefile.BSD и т д. и выбирать платформу, которая ближе. У меня так и сделано. Так что думаешь -- на Interix пришлось, конечно, биться с неочевидными горбухами самого Interix'а, который представляет из себя массогабаритный макет юникса, только полностью недетерминированный, как это принято в MS, но во всяком случае -- не с моим собственным кодом.
(Reply) (Parent) (Thread) (Expand)
[User Picture]From: pingback_bot
2010-09-22 10:35 pm (UTC)

autotools

User crimcat referenced to your post from autotools saying: [...] помощью которой можно отравить жизнь не только себе, но и поколениям мантейров/клиентов. Вот здесь [...]
(Reply) (Thread)
[User Picture]From: deka
2010-09-22 10:38 pm (UTC)
Меня автотулз давно радуют. Примерно в том же ключе. А херня только в одном -- пакет сам по себе хорош, дока хороша -- если её читать. А если нет...

Из самых "радостных" фишек, кои наблюдаю с момента появления автотулкита: 3 из 5 пользующих это дело для автонастройки правильно проверяют на те или иные депенды, но полученные знания ни хера не пользуют. В итоге -- см. рис. 1, ибо пути к либам и их названия оказываются для хуебунты или прочего уёбищного доебана.

Особенно милы параметры командной строки, которые предлагают тебе указать --with-моеговно=/usr/local/моеговно, а услужливые мейнтейнеры родного пакета моеговно красиво расфасовали его что-то в /usr/local/lib/моеговно, что-то в /usr/local/include/моеговно, что-то в /etc/моеговно и так далее.
Обычно там можно всё говно по шагам описать. Но мало кто этим заёбывается. Пока на руках один положительный пример -- gentoo. Из любого кривого до ёбаной матери пакета делают что-то сьюитабельное для установки в стандартном для генты дереве пакета. Пока оболомов не встречал.
(Reply) (Thread)
[User Picture]From: avnik
2010-09-23 12:52 am (UTC)
За что вы так не любите дебиан? Там тоже все хорошо.

PS Слака рулит!
(Reply) (Parent) (Thread) (Expand)
[User Picture]From: norguhtar
2010-09-23 01:40 am (UTC)
Ты бы знал как товарищи в embedded на все это матерятся. Ладно если бы оно под экзотику не собиралось, все хуже оно частенько кросс-компилятором не собирается, под другой процессор но под тот же *nix. Причем если пакет без бубнов собирается кросс-компилятором о чудо он начинает собираться с минимальными правками или без них под экзотические системы. Просто потому что такие люди думали, а что же будет если кто-то будет собирать под другую платформу. Сами эти autotools сильно толстые, когда к системе автоматической сборки идет гроссбух в 400 страниц который рассказывает о том как мне настроить их чтобы что-то собралось, я начинаю думать, что тот кто это придумал больной на всю голову.
(Reply) (Thread)
[User Picture]From: avnik
2010-09-23 03:55 am (UTC)
Автокрап прекрасно кросскомпилируется, не надо мне тут.

И отдельные куски гроссбуха надо выбить на бронзовых табличках и вбивать в головы начинающих программистов там написаное (а именно systemology/shellology и рекомендации по написанию портабельного sh и С)

PS Считающих что sh == bash, расстреливать за профнепригодность
(Reply) (Parent) (Thread) (Expand)
(Deleted comment)
From: luarvique
2010-09-23 05:14 am (UTC)
Прикинь, а ведь эти бакланы думали, что делают доброе дело... :)
(Reply) (Thread)
[User Picture]From: lobanov
2010-09-23 06:27 am (UTC)
Вообще достаточно взглянуть на эту картинку, чтобы заподозрить неладное:

http://upload.wikimedia.org/wikipedia/commons/thumb/8/86/Autoconf.svg/220px-Autoconf.svg.png

Блин, труюниксвей, нах!

Больше всего мне непонятно маниакальное желание всунуть autotools везде. Даже в проект из 8 .с файлов. Особенно красиво получается если к этому всему надо писать модули из просто одного исходника, но каждый с полной обвязкой. Да, никаких сложных проверок и определений кроме нескольких путей там конечно же нет.

Большую идиосинкразию у меня вызывает только конфиг Sendmail :)

В общем я пришел к подобным выводам, что руками поддерживать несколько Makefile намного проще. Так и делаю.

Можно по-разному относиться к Java, но ant и Maven это же просто праздник по сравнению с этими дебильными autotools.
(Reply) (Thread)
[User Picture]From: norguhtar
2010-09-23 07:43 am (UTC)

Большую идиосинкразию у меня вызывает только конфиг Sendmail :)

Да вот с ним все как раз понятно. Просто автор пидарас.
(Reply) (Parent) (Thread)
[User Picture]From: e1am0
2010-09-23 06:57 am (UTC)
мне фря в этом смысле импонировала и эти автоконф-автомейк я ненавидел, потому что не втыкал как его юзать и приходилось долго ныкаться в сгенерённом майкфайле, чтобы понять, где косяк портируемой приблуды
(Reply) (Thread)
[User Picture]From: alexott
2010-09-23 07:21 am (UTC)
а чем тебе libtool не нравится? у меня проекты нормально собирались на linux/*bsd/hp-ux/solaris...
(Reply) (Thread)
[User Picture]From: arkanoid
2010-09-23 05:34 pm (UTC)
Неоднократно видел, как его перекашивало. И если в случае с autotools вообще хоть примерно понятно, куда пинать (не всегда, муторно, но хоть как-то), если обосралось внутри либтула, руки вообще опускаются.
(Reply) (Parent) (Thread)
[User Picture]From: olegy
2010-09-23 08:02 am (UTC)
Согласен на 100%, IMHO гораздо проще сделать MakefilЫ вручную (с инклудами корневых определений присущих платформе).
Один мой приятель сказал (правда чуть о другом): m4 придумали для обфусикации и отсева конкурентов :-)
(Reply) (Thread)
[User Picture]From: bish0nen
2010-09-23 09:07 am (UTC)
Да нету уже давно BSD, поэтому никому и неинтересно.

А проблема с автотулами не в автотулах самих, а в том, что криворукие уроды, которые ими пользуются, постоянно перетирают кривыми ручками CFLAGS, LDFLAGS и проч и вколачивают девяти дюймовыми гвоздями дефолтные настройки, которые - как им кажется - самые правильные. Без трёхэтажного мата и получаса запусков в цикле sed это, увы, не работает.

Кстати, новомодные фекалии, написанные на Питоне, ещё хуже.
(Reply) (Thread)
From: luarvique
2010-09-23 09:40 am (UTC)
- Ненавижу кошек, от них по всему дому шерсть и запах.
- Да вы их просто готовить не умеете!
(Reply) (Parent) (Thread)
[User Picture]From: blacklion
2010-09-23 10:05 am (UTC)
всё же autoconf генерит такие make-файлы как напишет автор. А они могут быть вменяемыми.
Нечитаемое генерит automake.
(Reply) (Thread)
[User Picture]From: egorfine
2010-09-23 11:35 am (UTC)
"Особенно милы параметры командной строки, которые предлагают тебе указать --with-моеговно=/usr/local/моеговно, а услужливые мейнтейнеры родного пакета моеговно красиво расфасовали его что-то в /usr/local/lib/моеговно, что-то в /usr/local/include/моеговно, что-то в /etc/моеговно и так далее. "

Да, вот это ненавижу. Особенно когда это происходит не на линуксе каком-то, где все так делают, а на Darwin'е, где есть /opt/local для портов, /usr/local/ для локального говна и /usr для системного (не трожь). В итоге порой такие адские комбинации библиотек собираются, что потом фиг разгребешь, когда из /opt/local/ у тебя слинковано что-то на /usr/local/, а подхватывается, например, из /usr. :-(


(Reply) (Thread)
[User Picture]From: michaelselehov
2010-09-23 12:34 pm (UTC)
А уж сколько я проебся, чтобы собрать МуСКуЛь на Соляре-х64, но не гнусью, а санстудией... да в 64-бита, да с флагами оптимизации... Весело было :)
(Reply) (Thread)
(Deleted comment)
[User Picture]From: arkanoid
2010-09-23 01:54 pm (UTC)
Чочо именно тебе не нравится?
(Reply) (Parent) (Thread)
(Deleted comment)
(Deleted comment)
(Deleted comment)
(Deleted comment)
Page 1 of 2
<<[1] [2] >>