Базы данныхИнтернетКомпьютерыОперационные системыПрограммированиеСетиСвязьРазное
Поиск по сайту:
Подпишись на рассылку:

Назад в раздел

Chapter 11. Файлы в формате info

Новая версия 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.

  1. Посмотрите в исходные тексты документов в формате 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, которая удаляет только первую компоненту, даже если вы укажете несколько компонент в разделе .

    Вы можете передать компоненты dir утилите install-info в качестве аргументов (--section и --entry), вместо того, чтобы изменять исходный текст файлов texinfo, Я не думаю, что это подходит для портов, потому что вам нужно будет продублировать информацию в трех местах (Makefile и @exec/@unexec в файле pkg-plist; смотрите ниже). Однако, если файлы info имеют японскую (или другую многобайтовую кодировку), вам нужно будет передать дополнительные аргументы команде install-info, потому что makeinfo не может работать с такими файлами texinfo. (Посмотрите файлы Makefile и pkg-plist в каталоге japanese/skk на предмет того, как это сделать).

  2. Вернитесь обратно в каталог с портом, выполните команду 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 уже имеется файл с таким же именем (этот патч здесь не показан).

  3. Если в файле 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); 
            
    
  4. (Этот шаг необходим, если только вы модифицируете уже существующий порт.) Взгляните на файл 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
            
    
  5. Добавьте цель 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>
            
    
  6. Отредактируйте файл 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.

  7. Протестируйте вашу работу и полюбуйтесь ею. :-). Проверяйте файл dir до и после выполнения каждого шага.

По вопросам связанным с системой портов для FreeBSD, пишите по адресу <ports@freebsd.org>.
По вопросам связанным с этом документацией, пишите по адресу <doc@freebsd.org>.

  • Главная
  • Новости
  • Новинки
  • Скрипты
  • Форум
  • Ссылки
  • О сайте




  • Emanual.ru – это сайт, посвящённый всем значимым событиям в IT-индустрии: новейшие разработки, уникальные методы и горячие новости! Тонны информации, полезной как для обычных пользователей, так и для самых продвинутых программистов! Интересные обсуждения на актуальные темы и огромная аудитория, которая может быть интересна широкому кругу рекламодателей. У нас вы узнаете всё о компьютерах, базах данных, операционных системах, сетях, инфраструктурах, связях и программированию на популярных языках!
     Copyright © 2001-2024
    Реклама на сайте