ALT Linux Sisyphus discussions
 help / color / mirror / Atom feed
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

  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