Категории команд установки
При написании цели install необходимо классифицировать все команды по трём категориям: обычные, команды предварительной установки и команды после установки.
Обычные команды перемещают файлы в соответствующие места и устанавливают их права доступа. Они не могут изменять файлы, кроме тех, которые полностью взяты из пакета, к которому они относятся.
Команды предварительной и после установки могут изменять другие файлы; в частности, они могут редактировать глобальные конфигурационные файлы или базы данных.
Команды предварительной установки обычно выполняются перед обычными командами, а команды после установки — обычно после обычных команд.
Наиболее распространённое применение команды после установки — запуск install-info. Это нельзя сделать с помощью обычной команды, так как она изменяет файл (каталог Info), который не полностью и целиком принадлежит устанавливаемому пакету. Это команда после установки, потому что её нужно выполнить после обычной команды, устанавливающей файлы Info пакета.
Большинству программ не нужны команды предварительной установки, но эта возможность предусмотрена на случай необходимости.
Чтобы классифицировать команды в правиле install по этим трём категориям, вставьте строки категорий между ними. Строка категории определяет категорию для последующих команд.
Строка категории состоит из табуляции и ссылки на специальную переменную Make, а также необязательного комментария в конце. Есть три переменные, которые можно использовать, по одной для каждой категории; имя переменной определяет категорию. Строки категории являются пустой операцией при обычном выполнении, потому что эти три переменные Make обычно не определены (и их не следует определять в файле make).
Вот три возможные строки категорий, каждая с комментарием, объясняющим её значение:
$(PRE_INSTALL) # Pre-install commands follow. $(POST_INSTALL) # Post-install commands follow. $(NORMAL_INSTALL) # Normal commands follow.
Если вы не используете строку категории в начале правила install , все команды классифицируются как обычные до первой строки категории. Если вы не используете никаких строк категорий, все команды классифицируются как обычные.
Вот строки категорий для uninstall:
$(PRE_UNINSTALL) # Pre-uninstall commands follow. $(POST_UNINSTALL) # Post-uninstall commands follow. $(NORMAL_UNINSTALL) # Normal commands follow.
Как правило, команда предварительного удаления используется для удаления записей из каталога Info.
Если цель install или uninstall имеет зависимости, которые действуют как подпрограммы установки, то вы должны начинать команды каждой зависимости со строки категории, и начинать команды основной цели также со строки категории. Таким образом, вы можете гарантировать, что каждая команда будет помещена в правильную категорию независимо от того, какая из зависимостей фактически выполняется.
Команды предварительной и после установки не должны запускать программы, кроме следующих:
[ basename bash cat chgrp chmod chown cmp cp dd diff echo egrep expand expr false fgrep find getopt grep gunzip gzip hostname install install-info kill ldconfig ln ls md5sum mkdir mkfifo mknod mv printenv pwd rm rmdir sed sort tee test touch true uname xargs yes
Причина выделения команд таким образом заключается в разработке бинарных пакетов. Как правило, бинарный пакет содержит все исполняемые файлы и другие файлы, которые необходимо установить, и имеет свой собственный метод их установки — поэтому ему не нужно выполнять обычные команды установки. Но установка бинарного пакета должна выполнить команды предварительной и после установки.
Программы для построения бинарных пакетов работают путём извлечения команд предварительной и после установки. Вот один способ извлечения команд предварительной установки (необходим параметр -s для make , чтобы отключить сообщения о входе в подкаталоги):
make -s -n install -o all \
PRE_INSTALL=pre-install \
POST_INSTALL=post-install \
NORMAL_INSTALL=normal-install \
| gawk -f pre-install.awk
где файл pre-install.awk может содержать следующее:
$0 ~ /^(normal-install|post-install)[ \t]*$/ {on = 0}
on {print $0}
$0 ~ /^pre-install[ \t]*$/ {on = 1}
Copyright © 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022 Free Software Foundation, Inc.
Licensed under the GNU Free Documentation License.
https://www.gnu.org/software/make/manual/html_node/Install-Command-Categories.html