Сотрудник Red Hat представил сборочную систему Goals
Сотрудник компании Red Hat Ричард Джонс, создатель библиотеки libguestfs, представил инструмент Goals, цель которого — устранить недостатки в утилите make, разработанной Стюартом Фельдманом в 1976 году и предназначенной для автоматизации преобразования файлов из одной формы в другую.
При запуске эта программа читает Makefile с описанием проекта, интерпретирует его содержимое и в зависимости от него предпринимает нужные действия. Основу Makefile составляют правила (rules), которые описывают, каким образом можно преобразовать файл. Правила состоят из целей и зависимостей, где цель — желаемый результат, а зависимость — некие исходные данные (имя файла или имя действия), необходимые для достижения цели.
Как объясняет портал opennet, сейчас в работе make есть несколько недостатков. Например, утилита поддерживает только одну тактику решения зависимостей. Goals позволяет реализовать несколько тактик, включая проверку наличия URL, сравнение времени изменения с любым файлом, оценку сборки пакета в Koji, сравнение контрольных сумм, запуск тестовых наборов с выборочным пропуском тестов.
Также make не разделяет файлы и имена правил, что может привести к ошибке: если правило test, запускающее скрипты с тестами, уже есть, и при его наличии будет случайно будет создан файл с именем test, то тесты перестанут вызываться. Goals разделяет файлы и имена правил. Также Goals позволяет использовать сразу несколько параметров.
«Если использование одного параметра может быть полезным, то можно использовать и два, и больше параметров», — поясняет Джонс.
Goals решает также проблему взаимодействия с интерпретатором командной строки, или shell-интерпретатором — программой, которая принимает команды от пользователя и исполняет их. До выпуска Goals, как поясняет opennet, пользователю приходилось запускать отдельный shell-интерпретатор для каждой команды. Также существенной проблемой make была двойная трактовка символа $. В Goals вместо символа $ используется % ($ остаётся только для shell).
Также Goals делает возможной поддержку задания произвольных имён и параметров, позволяет запускать make в разных режимах. В будущем автор планирует добавить возможность определения значений параметров по умолчанию и поддержка анонимных функций.
Подробное описание особенностей Goals Джонс опубликовал в своём блоге.