From: Mikhail Yakshin <greycat@altlinux.org>
To: ALT Linux Sisyphus discussions <sisyphus@lists.altlinux.org>
Subject: Re: [sisyphus] mk-configure -- lightweight replacement for GNU autotools
Date: Mon, 13 Jul 2009 02:13:18 +0400
Message-ID: <240e377b0907121513m5f3f528ev22d5db799d46247c@mail.gmail.com> (raw)
In-Reply-To: <s931vomyn8i.fsf@chen.chizhovka.net>
Приветствую,
>> Если не секрет, в двух словах, чем эта альтернатива лучше scons, например?
>> Спасибо.
>
> Если в двух словах, то mk-configure - это логическое продолжение mk
> скриптов в BSD системах. Те, кто видел дерево исходников BSD систем
> (базовые системы, не порты) понимают, о чем я. mk-configure -- развитие
> тех же идей с добавлением ala autoconf функциональности и кое-чего
> другого типа замены @полей@ в .in файлах.
> Но основные идеи следующие:
> - декларативный способ написания Makefile-ов;
> - никакой годогенерации;
> - модули пишутся на bmake и внешних скриптах на POSIX shell + unix tools,
> естественно никто не запретит использовать другие средства.
Алексей, прошу не обижаться, но выскажу все-таки мнение (подозреваю,
далеко не единственное). Поставленные цели, идеи и выбранные подходы,
мягко говоря, странные для существующих реалий. Так уж получается, что
любая "система сборки" в первую очередь должна подстраиваться под то,
что есть и то, чем другие люди занимаются - она сама является
"связующим звеном" в треугольнике между разработчиком - компиляторами
- пользователями.
Perl/Python/Ruby с некоторой натяжкой есть на практических всех
современных Linux/BSD-системах. В принципе, можно считать, что и на
большинстве Windows-систем, где будет собираться свободное ПО, эти
языки тоже есть. Причем работают они одинаково by design на всех
платформах. Для того, чтобы написать на них что-то непортабельное -
надо постараться.
"POSIX shell" фактически нет нигде. С некоторой натяжкой можно
считать, что bash есть везде, но:
1. К POSIX shell он имеет довольно приблизительное отношение.
2. Его поведение сильно зависит от сборки в конкретном месте.
3. Авторы его регулярно ломают и это поведение меняют.
Есть dash, он он тоже ужасен и, к тому же, относительно редок (AFAIR,
до сих пор распространение он получил только в Debian - все остальные
ставят сейчас в /bin/sh все равно bash). Есть ash, но он не менее
ужасен и исчезающие редок.
Под красивым словосочетанием "POSIX shell" вы еще, насколько я вижу из
исходников, понимаете sed, awk, grep и еще кучу всяких утилит. Их
BSD-аналоги, скажем, тоже, как ни странно, плохо совместимы с
GNU-реализациями.
Любой, кто пишет на "POSIX shell" приобретает в удобстве и скорости
написания, но здорово теряет в первую очередь в портабельности. Потеря
портабельности для системы сборки - смерти подобна.
"NetBSD make", если понимать это буквально, еще более исчезающе редок.
С GNU make он пересекается плохо. Если будете пытаться генерировать
Makefiles так, чтобы "работало везде" - и на bmake, и на GNU make -
потеряете массу возможностей. Будете поддерживать только bmake -
сильно осложняете использование своего продукта для
Linux-пользователей. Сейчас по факту оно несовместимо не только с GNU
make, но еще и с FreeBSD/OpenBSD make. Одно это, в общем-то, хоронит
напрочь любую идею, сколько бы хорошей она ни была.
Критика любых make-подобных программ всё так же применима к нему
(полагаю, Вы с ней знакомы, но эту точку зрения не разделяете).
Я сейчас как раз нахожусь на перепутии проектировании некоей
достаточно сложной configure-подобной системы для своего проекта и
анализирую массу информации на эту тему, но к mk-configure, к
сожалению, пока я серьезно рассматривать не могу.
Даже если закрыть глаза на bmake, который предлагается заставлять
ставить всех пользователей, то фатальные, с моей точки зрения,
недостатки существующей системы такие:
* Подмена понятий при разделении хотя бы на 2 шага: интерактивный
(configure, пользователь долго взаимодействует с опциями и подбирает
нужную ему комбинацию) и неинтерактивный (make, пользователь пошел
пить кофе). То, что вы называете "configure" на практике просто
занимается проверками и кое-что строит на лету, а реальная
конфигурация на самом деле передается вместе с запуском bmake.
* Отсутствие возможности (насколько я могу судить - принципиальное)
даже в каком-то далеком будущем организовать пользователю красивый
TUI/GUI для сборки. В cmake и scons оно есть. В waf оно планируется в
виде внешнего конфигуратора.
* Достаточно медленная работа, отсутствие адекватного кэширования
результатов configure. В некотором смысле - это следствие используемых
инструментов - в том числе см. выше про критику всех make.
* Отсутствие хоть сколько-нибудь минимального набора модулей, умеющих
поддерживать распространенные языки, библиотеки и пакеты - насколько я
могу видеть, даже C/С++-программы сейчас собирать проблематично (ни
pkg-config, ни Qt/KDE, ни boost сходу не подключишь).
* Крайне плохо масштабируемая модель синтаксиса входных файлов. Нет и
я не очень представляю как в представленной парадигме реализовать
подпроекты, группы, иерархию опций, зависимости между ними и т.п.
* Отсутствие (насколько я вижу по Вашим ответам - принципиальное)
каких-то средств интеграции в deployment, continuous integration и
unit testing.
* Модель эмбеддинга системы сборки в продукт. Учитывая выбранные
средства программирования - в пределе это дает на порядок более
bloated, чем autotools решение. Извините, но оно уже сейчас занимает
35 килобайт - и при этом не умеет делать практически ничего. Для
сравнения - waf занимает 80 и умеет очень много всего.
--
WBR, Mikhail Yakshin
next prev parent reply other threads:[~2009-07-12 22:13 UTC|newest]
Thread overview: 70+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-07-12 5:53 Aleksey Cheusov
2009-07-12 9:18 ` Gleb Kulikov
2009-07-12 14:44 ` Aleksey Cheusov
2009-07-12 17:18 ` Gleb Kulikov
2009-07-12 17:37 ` Aleksey Cheusov
2009-07-16 10:52 ` Gleb Kulikov
2009-07-12 22:13 ` Mikhail Yakshin [this message]
2009-07-13 19:56 ` Aleksey Cheusov
2009-07-13 21:02 ` Led
2009-07-13 21:18 ` Aleksey Cheusov
2009-07-14 1:49 ` [sisyphus] [JT] " Pavel N. Solovyov
2009-07-14 5:22 ` Afanasov Dmitry
2009-07-14 6:21 ` Aleksey Cheusov
2009-07-14 23:13 ` [sisyphus] " Mikhail Yakshin
2009-07-15 19:23 ` Aleksey Cheusov
2009-07-15 19:41 ` Vitaly Kuznetsov
2009-07-15 19:53 ` Aleksey Cheusov
2009-07-12 12:03 ` Alexey I. Froloff
2009-07-12 12:07 ` Alexey Gladkov
2009-07-12 13:48 ` Aleksey Cheusov
2009-07-12 14:52 ` Alexey Gladkov
2009-07-12 15:15 ` Aleksey Cheusov
2009-07-12 18:57 ` Денис Смирнов
2009-07-12 20:02 ` Aleksey Cheusov
2009-07-12 20:31 ` Alexey I. Froloff
2009-07-12 20:41 ` Aleksey Cheusov
2009-07-12 20:49 ` Alexey I. Froloff
2009-07-12 21:00 ` Aleksey Cheusov
2009-07-12 21:03 ` Aleksey Cheusov
2009-07-12 22:17 ` Alexey I. Froloff
2009-07-13 20:03 ` Aleksey Cheusov
2009-07-13 20:54 ` Alexey I. Froloff
2009-07-13 21:06 ` Aleksey Cheusov
2009-07-13 21:12 ` Alexey I. Froloff
2009-07-13 21:23 ` Aleksey Cheusov
2009-07-13 21:43 ` Alexey I. Froloff
2009-07-12 21:27 ` Alexey Rusakov
2009-07-12 21:36 ` Alexey I. Froloff
2009-07-12 22:29 ` Aleksey Cheusov
2009-07-12 23:04 ` Alexey I. Froloff
2009-07-13 5:26 ` Alexey Rusakov
2009-07-13 6:05 ` Денис Смирнов
2009-07-13 8:26 ` Afanasov Dmitry
2009-07-13 17:54 ` Денис Смирнов
2009-07-13 20:20 ` Aleksey Cheusov
2009-07-13 20:52 ` Alexey I. Froloff
2009-07-13 21:06 ` Aleksey Cheusov
2009-07-13 21:39 ` Alexey I. Froloff
2009-07-13 19:43 ` [sisyphus] mk-configure: args vs options Dmitry V. Levin
2009-07-13 20:28 ` Aleksey Cheusov
2009-07-13 20:40 ` Dmitry V. Levin
2009-07-12 16:06 ` [sisyphus] mk-configure -- lightweight replacement for GNU autotools Led
2009-07-12 16:18 ` Aleksey Cheusov
2009-07-12 16:28 ` Led
2009-07-13 20:36 ` Dmitry V. Levin
2009-07-13 20:56 ` Aleksey Cheusov
2009-07-13 21:29 ` Dmitry V. Levin
2009-07-14 6:37 ` Aleksey Cheusov
2009-07-14 6:53 ` Afanasov Dmitry
2009-07-14 18:25 ` Aleksey Cheusov
2009-07-14 18:32 ` Led
2010-06-12 14:56 ` Aleksey Cheusov
2010-06-15 3:25 ` REAL
2010-06-15 6:05 ` Aleksey Cheusov
2010-06-15 5:29 ` REAL
2010-06-15 7:19 ` Slava Semushin
2010-06-15 7:22 ` Aleksey Cheusov
2010-06-15 7:03 ` REAL
2010-06-15 7:52 ` REAL
2010-06-15 9:39 ` Aleksey Cheusov
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=240e377b0907121513m5f3f528ev22d5db799d46247c@mail.gmail.com \
--to=greycat@altlinux.org \
--cc=sisyphus@lists.altlinux.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
ALT Linux Sisyphus discussions
This inbox may be cloned and mirrored by anyone:
git clone --mirror http://lore.altlinux.org/sisyphus/0 sisyphus/git/0.git
# If you have public-inbox 1.1+ installed, you may
# initialize and index your mirror using the following commands:
public-inbox-init -V2 sisyphus sisyphus/ http://lore.altlinux.org/sisyphus \
sisyphus@altlinux.ru sisyphus@altlinux.org sisyphus@lists.altlinux.org sisyphus@lists.altlinux.ru sisyphus@lists.altlinux.com sisyphus@linuxteam.iplabs.ru sisyphus@list.linux-os.ru
public-inbox-index sisyphus
Example config snippet for mirrors.
Newsgroup available over NNTP:
nntp://lore.altlinux.org/org.altlinux.lists.sisyphus
AGPL code for this site: git clone https://public-inbox.org/public-inbox.git