По умолчанию luabins собирается как C89. Однако, со сборкой в тестовом режиме (make test) не всё так просто.
Хорошим тоном считается, когда луашный модуль написан, как и сам Луа, на "clean ANSI C" — подмножестве C89, C98 и C++.
Luabins следует этим гайдлайнам, и, значит, должен собираться под все три таргета. Под все три таргета должны запускаться и тесты. Есть желание не запускать тесты если они уже прошли и код с тех пор не менялся.
С учётом всех требований вся система получается довольно сложной.
Поскольку простой пользователь никогда не видит этой сложности, я не хотел вводить дополнительные зависимости и использовать стороннюю систему сборки. Нужно было обойтись простым Makefile.
Писать такой Makefile руками — тяжело. Нужен генератор.
Поскольку luabins — некоммерческий проект, мне было интересно написать такой генератор самому, в качестве развлечения.
Получился genmakefile.
Genmakefile — интересный "игрушечный" прототип мощной системы генерации текста на основе текстовых шаблонов.
Вот пример входных данных: Makefile.luabins.template.
То, что получается на выходе, мы уже видели в luabins: Makefile.luabins.out.
Вот код, который заставляет это всё работать: genmakefile.lua
Что же мы получаем из этих четырёхсот строк кода?
Что же мы получаем из этих четырёхсот строк кода?
- Шаблонную систему с подстановкой значений по ключам.
- Из шаблона можно контролировать подстановочные словари.
- Можно создавать макросы, переопределяя язык подстановок.
- Можно использовать шаблоны и макросы неограниченной вложенности — шаблоны, генерирующие шаблоны и т.п.
- Несколько вызовов, специфичных для генерации Makefile-ов. :-)
- Плохо продуманый синтаксис.
- Плохо продуманное API.
- Маловменяемые сообщения об ошибках.
Комментариев нет:
Отправить комментарий