Назад в раздел
Новая версия texinfo (включенная в 2.2.2-RELEASE и выше),
содержит утилиту с именем
install-info для установки и удаления компонент в файле
dir. Если ваш порт устанавливает
какие-либо документы в формате info, то, пожалуйста, следуйте
этим инструкциям, чтобы ваш порт/пакадж корректно обновлял
пользовательский файл PREFIX/info/dir. (Приносим извинения за
размер этого раздела, но это необходимо для объединения всех
файлов info вместе. Если это делается правильно, то будет
создан прекрасный список, так что
прислушайтесь к моим советам!
Во-первых, вот что вы (как создатель порта) должны
знать
% install-info --help
install-info [OPTION]... [INFO-FILE [DIR-FILE]]
Install INFO-FILE in the Info directory file DIR-FILE.
Options:
--delete Delete existing entries in INFO-FILE;
don't insert any new entries.
:
--entry=TEXT Insert TEXT as an Info directory entry.
:
--section=SEC Put this file's entries in section SEC of the directory. :
Note: Эта программа на будет на самом деле устанавливать info-файлы; она просто
добавляет или удаляет элементы списка в файле dir.
Далее приводится процедура, состоящая из семи шагов, для
преобразования портов к использованию
install-info. В качестве примера я буду использовать editors/emacs.
-
Посмотрите в исходные тексты документов в формате
texinfo и измените их, вставив директивы @dircategory и
@direntry в файлы, в которых они отсутствуют. Вот
часть моего патча:
--- ./man/vip.texi.org Fri Jun 16 15:31:11 1995
+++ ./man/vip.texi Tue May 20 01:28:33 1997
@@ -2,6 +2,10 @@
@setfilename ../info/vip
@settitle VIP
+@dircategory The Emacs editor and associated tools
+@direntry
+* VIP: (vip). A VI-emulation for Emacs.
+@end direntry
@iftex
@finalout
:
Формат должен быть для вас самоочевидным. Многие
авторы оставляют среди исходных текстов файл dir, содержащий все компоненты, которые
вам нужны, так что проверьте еще раз перед тем, как
пытаться писать свои собственные. Также обязательно
взгляните на порты, связанные с вашим и приведите в
соответствие имена разделов и формат компонент (мы
рекомендуем, чтобы все текстовые строки начинались с 4й
позиции табуляции).
Note: Заметьте, что вы можете указать
только одну компоненту info для файла из-за ошибки
в работе утилиты install-info
--delete, которая удаляет только первую
компоненту, даже если вы укажете несколько
компонент в разделе <@direntry>.
Вы можете передать компоненты
dir утилите install-info
в качестве аргументов (--section и
--entry), вместо того, чтобы изменять исходный
текст файлов texinfo, Я не думаю, что это подходит для
портов, потому что вам нужно будет продублировать
информацию в трех местах (Makefile и
@exec/@unexec в файле pkg-plist; смотрите ниже).
Однако, если файлы info имеют японскую (или другую
многобайтовую кодировку), вам нужно будет передать
дополнительные аргументы команде
install-info, потому что
makeinfo не может работать с такими файлами
texinfo. (Посмотрите файлы
Makefile и pkg-plist в
каталоге japanese/skk на
предмет того, как это сделать).
-
Вернитесь обратно в каталог с портом, выполните
команду make clean; make и
проверьте, что файлы info были вновь сгенерированы из
исходного текста texinfo. Так как исходные тексты
texinfo являются более новыми файлами, чем файлы в
формате info, то они должны быть перестроены, когда вы
выполняете команду make;
однако многие файлы Makefile
не включают правильные зависимости для генерации файлов
info. В случае emacs, я
изменил главный файл
Makefile.in, чтобы происходил спуск в подкаталог
man для перегенерации файлов
info.
--- ./Makefile.in.org Mon Aug 19 21:12:19 1996
+++ ./Makefile.in Tue Apr 15 00:15:28 1997
@@ -184,7 +184,7 @@
# Subdirectories to make recursively. `lisp' is not included
# because the compiled lisp files are part of the distribution
# and you cannot remake them without installing Emacs first.
-SUBDIR = lib-src src
+SUBDIR = lib-src src man
# The makefiles of the directories in $SUBDIR.
SUBDIR_MAKEFILES = lib-src/Makefile man/Makefile src/Makefile oldXMenu/Makefile
lwlib/Makefile
--- ./man/Makefile.in.org Thu Jun 27 15:27:19 1996
+++ ./man/Makefile.in Tue Apr 15 00:29:52 1997
@@ -66,6 +66,7 @@
${srcdir}/gnu1.texi
${srcdir}/glossary.texi
+all: info
info: $(INFO_TARGETS)
dvi: $(DVI_TARGETS)
Второй блок изменений был необходим из-за того, что
цель по умолчанию в подкаталоге
man называется info,
когда как главный файл
Makefile вызывает цель
all. Я также удалил установку информационного
файла info, потому что в
каталоге /usr/share/info уже
имеется файл с таким же именем (этот патч здесь не
показан).
-
Если в файле Makefile есть
процедура установки файла
dir, то удалите эту процедуру. Вашему порту делать
этого не надо. Кроме того, удалите все команды, которые
будут пытаться творить что-то с файлом dir.
--- ./Makefile.in.org Mon Aug 19 21:12:19 1996
+++ ./Makefile.in Mon Apr 14 23:38:07 1997
@@ -368,14 +368,8 @@
if [ `(cd ${srcdir}/info && /bin/pwd)` != `(cd ${infodir} && /bin/pwd)` ];
then
(cd ${infodir};
- if [ -f dir ]; then
- if [ ! -f dir.old ]; then mv -f dir dir.old;
- else mv -f dir dir.bak; fi;
- fi;
cd ${srcdir}/info ;
- (cd $${thisdir}; ${INSTALL_DATA} ${srcdir}/info/dir ${infodir}/dir);
- (cd $${thisdir}; chmod a+r ${infodir}/dir);
for f in ccmode* cl* dired-x* ediff* emacs* forms* gnus* info* message* mh-e* sc* vip*; do
(cd $${thisdir};
${INSTALL_DATA} ${srcdir}/info/$$f ${infodir}/$$f;
chmod a+r ${infodir}/$$f);
-
(Этот шаг необходим, если только вы модифицируете
уже существующий порт.) Взгляните на файл pkg-plist и удалите все, что пытается
изменить файл info/dir. Это
может быть также в файле
pkg-install или в каком-то другом файле, так что
ищите тщательно.
Index: pkg-plist
===================================================================
RCS file: /usr/cvs/ports/editors/emacs/pkg-plist,v
retrieving revision 1.15
diff -u -r1.15 pkg-plist
--- pkg-plist 1997/03/04 08:04:00 1.15
+++ pkg-plist 1997/04/15 06:32:12
@@ -15,9 +15,6 @@
man/man1/emacs.1.gz
man/man1/etags.1.gz
man/man1/ctags.1.gz
-@unexec cp %D/info/dir %D/info/dir.bak
-info/dir
-@unexec cp %D/info/dir.bak %D/info/dir
info/cl
info/cl-1
info/cl-2
-
Добавьте цель
post-install в файл
Makefile для вызова
install-info с именами установленных файлов info в
качестве параметров. (Больше не нужно создавать файл
dir самостоятельно; Программа
install-info автоматически
создаст этот файл, если он не существует.)
Index: Makefile
===================================================================
RCS file: /usr/cvs/ports/editors/emacs/Makefile,v
retrieving revision 1.26
diff -u -r1.26 Makefile
--- Makefile 1996/11/19 13:14:40 1.26
+++ Makefile 1997/05/20 10:25:09 1.28
@@ -20,5 +20,8 @@
post-install:
.for file in emacs-19.34 emacsclient etags ctags b2m
strip ${PREFIX}/bin/${file}
.endfor
+.for info in emacs vip viper forms gnus mh-e cl sc dired-x ediff ccmode
+ install-info ${PREFIX}/info/${info} ${PREFIX}/info/dir
+.endfor
.include <bsd.port.mk>
-
Отредактируйте файл
pkg-plist, добавив аналогичные директивы @exec, не забыв о @unexec для
pkg_delete.
Index: pkg/pkg-plist
===================================================================
RCS file: /usr/cvs/ports/editors/emacs/pkg-plist,v
retrieving revision 1.15
diff -u -r1.15 pkg-plist
--- pkg-plist 1997/03/04 08:04:00 1.15
+++ pkg-plist 1997/05/20 10:25:12 1.17
@@ -16,7 +14,14 @@
man/man1/etags.1.gz
man/man1/ctags.1.gz
+@unexec install-info --delete %D/info/emacs %D/info/dir
:
+@unexec install-info --delete %D/info/ccmode %D/info/dir
info/cl
info/cl-1
@@ -87,6 +94,18 @@
info/viper-3
info/viper-4
+@exec install-info %D/info/emacs %D/info/dir
:
+@exec install-info %D/info/ccmode %D/info/dir
libexec/emacs/19.34/i386--freebsd/cvtmail
libexec/emacs/19.34/i386--freebsd/digest-doc
Note: Команды @unexec
install-info --delete указываются до
собственно файлов info, чтобы они могли прочесть
файлы. Кроме того, команды
@exec install-info следуют за файлами info и
командой @exec, которая
создает файл dir
file.
-
Протестируйте
вашу работу и полюбуйтесь ею.
:-). Проверяйте файл dir
до и после выполнения каждого шага.
По вопросам связанным с системой портов для FreeBSD, пишите по
адресу <ports@freebsd.org>.
По вопросам связанным с этом документацией, пишите по адресу
<doc@freebsd.org>.
|
|
|
|