[sisyphus] mk-configure -- lightweight replacement for GNU autotools

Aleksey Cheusov vle на gmx.net
Вс Июл 12 18:44:45 MSD 2009


> В сообщении от [Воскресенье 12 июля 2009 Aleksey Cheusov] написал:

 >> Мне говорят, я все-таки ошибся со списком рассылки.  Отправлю еще
 >> сюда. Виталий Липатов уже запакетил mk-configure в сизиф.

> Если не секрет, в двух словах, чем эта альтернатива лучше scons, например?
> Спасибо.

Если в двух словах, то mk-configure - это логическое продолжение mk
скриптов в BSD системах. Те, кто видел дерево исходников BSD систем
(базовые системы, не порты) понимают, о чем я. mk-configure -- развитие
тех же идей с добавлением ala autoconf функциональности и кое-чего
другого типа замены @полей@ в .in файлах.
Но основные идеи следующие:
- декларативный способ написания Makefile-ов;
- никакой годогенерации;
- модули пишутся на bmake и внешних скриптах на POSIX shell + unix tools,
естественно никто не запретит использовать другие средства.

-----------------
Дальше попробую по пунктам (взято из википедии).

* Configuration files are Python scripts, which means that user-written
builds have access to a complete general-purpose programming language.

Модули mk-configure пишутся на NetBSD make aka bmake + внешние скрипты.

Automatic dependency analysis built-in for C, C++ and Fortran. Unlike
make, no extra command like "make depend" or "make clean"[1]...

Этого в mk-configure нет, но это задача другого уровня -- уровня
bmake-а, а он этого не делает. Нужен 'bmake depend'.  Хотя можно
написать .mk модуль для реализации этой функциональности.
Я об этом подумаю...

Built-in support for C, C++, D, Java, Fortran, Objective-C, Yacc, Lex,
Qt and SWIG, and building TeX and LaTeX documents. Other languages or
file types can be supported through user-defined Builders.

mk-configure использует в качестве "подложки" pkgsrc mk-files или
mk-files имени Simon Gerraty. Это реализовано там: yacc, lex, C, C++,
Java, Fortran, Pascal, Modula-2, что-то еще. Есть отдельный модуль для
latex, но я не смотрел, что он из себя представляет. Надо глянуть. В чем
заключаться поддержка qt и swig я себе не представляю. Скорее, всего это
также можно реалиовать в виде модуля для mk-configure. Можно сделать
поддержку, скажем, модулей emacs или, например, модуль "а сделай ка мне
их этого всего софта deb пакет".

Building from central repositories of source code and/or pre-built
targets.

Этого я не понимаю. bmake - это make. Со всеми вытекающими.

Built-in support for fetching source files from SCCS, RCS, CVS,
Subversion, BitKeeper and Perforce.

Этого нет ни в каком виде и, на мой взгляд, не должно быть.  Это
совершенно другая задача.

Built-in support for Microsoft Visual Studio .NET and past Visual Studio
versions, including generation of .dsp, .dsw, .sln and .vcproj files.

Этого нет, как нет НИКАКОЙ кодогенерации. Меня виндоуз как плдатформа не
интересует. Кому нужен виндоуз, пусть использует cygwin или Interix и
оттуда строит нативные виндозные библиотеки и приложения.  Поддержка
кросскомпиляции тоже есть (то есть нет ничего, что ее ломало бы), пока не
идеальная, но я над этим работаю.

Detection of file content changes using MD5 signatures; optional,
configurable support for traditional timestamps.

Это задача не уровня mk-configure. Это задача bmake-а и он этого не
делает. Возможно, когда-нибудь научится.

Support for parallel builds which keeps the specified number of jobs
running simultaneously regardless of directory hierarchy.

Это опять задача bmake-а и он это умеет больше 15 лет.
Хотя "regardless of directory hierarchy" нет.
Стандартный модуль "mkc.subdir.mk" имеет ограничения.
Возможно написать другой, с более тонкими зависимостями
между подпроектами-подкаталогами.

Integrated Autoconf-like support for finding #include files, libraries,
functions and typedefs.

mk-configure умеет: определять наличие декларации типов, переменных,
функций, полей структур, дефайнов, наличие реализации функций в
библиотеках, определять размеры типов. Добавлю еще поддержку структур.
В следующей версии добавлю custom тесты с запуском приложения и без
него. В ближайшее время добавлю проверку endianess.

Global view of all dependencies, so multiple build passes or reordering
targets is not required.

Я не понимаю, о чем это.

Ability to share built files in a cache to speed up multiple builds -
like ccache but for any type of target file, not just C/C++ compilation.

Это не задача mk-configure. Это задача ccache и подобных инструментов.
Естественно, их можно использовать и с mk-configure тоже.

Designed from the ground up for cross-platform builds, and known to work
on Linux, other POSIX systems (including AIX, *BSD systems, HP-UX, IRIX
and Solaris), Windows NT, Mac OS X, and OS/2.

mk-configure работает на: NetBSD, Linux, FreeBSD, Solaris,
DragonFlyBSD.  У меня нет доступа к другим платформ. Если у кого есть,
буду весьма признателен за тесты (bmake test).
С удовольствием протестировал бы на HP-UX, QNX, Irix и прочих
AIX-ах. Пришу в подарок shell account :-) На данный момент нет поддержки
libtool, поэтому есть проблемы с Darwin в плане создания динамических
библиотек. Поддержку libtool планирую добавиь. Другой вариант -- пинать
авторов mk-files (NetBSD-шники), который ха это отвечает.
Это реализовано там.

-----------------
Вроде в двух словах так.
Но я не сравнивал очень подробно со всеми всеми всеми...

В тарболе есть примеры использования. По моему они вполне наглядны.
Разницу можно увидеть.

-- 
Best regards, Aleksey Cheusov.


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