                    Rukovodstvo FreeBSD po sozdaniyu portov

  The FreeBSD Russian Documentation Project

   Copyright (c) 2000, 2001, 2002 by The FreeBSD Documentation Project

   Rasprostranenie i ispol'zovanie ishodnyh (SGML DocBook) i
   'skompilirovannyh' form (SGML, HTML, PDF, PostScript, RTF i prochih) s
   modifikaciej ili bez onoj, razresheny pri soblyudenii sleduyuschih
   soglashenij:

    1. Rasprostranyaemye kopii ishodnogo koda (SGML DocBook) dolzhny
       sohranyat' vysheupomyanutye ob"yavleniya copyright, `etot spisok
       polozhenij i sohranyat' sleduyuschij otkaz ot prava v pervyh strokah
       `etogo fajla nemodificirovannym.

    2. Rasprostranyaemye kopii skompilirovannyh form (preobrazovanie v drugie
       DTD, konvertirovannye v PDF, PostScript, RTF i drugie formaty) dolzhny
       povtoryat' vysheupomyanutye ob"yavleniya copyright, `etot spisok
       polozhenij i i sleduyuschij otkaz v dokumentacii i/ili drugih
       materialah, postavlyaemyh s distrib'yuciej.

     Important: `ETA DOKUMENTACIYA POSTAVLYAETSYA PROEKTOM DOKUMENTACII
     FREEBSD "KAK EST'" I LYUBYE YAVNYE ILI NEYAVNYE GARANTII, VKLYUCHAYA, NO
     NE OGRANICHIVAYAS' NEYAVNYMI GARANTIYAMI, KOMMERCHESKOJ CENNOSTI I
     PRIGODNOSTI DLYA KONKRETNOJ CELI OTRICAYUTSYA. NI V KOEM SLUCHAE REGENTY
     ILI UCHASTNIKI NE DOLZHNY BYT' OTVETSTVENNYMI ZA LYUBOJ PRYAMOJ,
     KOSVENNYJ, SLUCHAJNYJ, SPECIAL'NYJ, OBRAZCOVYJ ILI POSLEDUYUSCHIJ
     USCHERBY (VKLYUCHAYA, NO NE OGRANICHIVAYAS' POSTAVKOJ TOVAROV ZAMENY ILI
     USLUG; POTERYU DANNYH ILI IH NEPRAVIL'NUYU PEREDACHU ILI POTERI;
     PRIOSTANOVLENIE BIZNESA), I TEM NE MENEE VYZVANNYE I V LYUBOJ TEORII
     OTVETSTVENNOSTI, NEZAVISIMO OT KONTRAKTNOJ, STROGOJ OTVETSTVENNOSTI, ILI
     PRAVONARUSHENII (VKLYUCHAYA HALATNOST' ILI INYM SPOSOBOM), VOZNIKSHEM
     LYUBYM PUTEM PRI ISPOL'ZOVANII `ETOGO PROGRAMMNOGO OBESPECHENIYA, DAZHE
     ESLI BY BYLO SOOBSCHENO O VOZMOZHNOSTI TAKOGO USCHERBA.

     ----------------------------------------------------------------------

   Table of Contents

   1. Kak samomu sdelat' port

   2. Bystroe portirovanie

                2.1. Sozdanie fajla Makefile

                2.2. Sozdanie informacionnyh fajlov

                             2.2.1. pkg-comment

                             2.2.2. pkg-descr

                             2.2.3. pkg-plist

                2.3. Sozdanie fajla s kontrol'noj summoj

                2.4. Testirovanie porta

                2.5. Proverka vashego porta utilitoj portlint

                2.6. Posylka porta

   3. Medlennoe portirovanie

                3.1. Kak vsio `eto rabotaet

                3.2. Poluchenie ishodnogo koda

                3.3. Modifikaciya porta

                3.4. Sozdanie patchej

                3.5. Konfigurirovanie

                3.6. Obrabotka pol'zovatel'skogo vvoda

   4. Nastrojka fajla Makefile

                4.1. Original'nye ishodnyj kod

                4.2. PORTNAME i PORTVERSION

                4.3. PORTREVISION i PORTEPOCH

                             4.3.1. PORTREVISION

                             4.3.2. PORTEPOCH

                             4.3.3. Primer ispol'zovaniya peremennyh
                             PORTREVISION i PORTEPOCH

                4.4. Peremennye PKGNAMEPREFIX i PKGNAMESUFFIX

                4.5. DISTNAME

                4.6. CATEGORIES

                4.7. MASTER_SITES

                4.8. PATCHFILES

                4.9. MAINTAINER

                4.10. Zavisimosti

                             4.10.1. LIB_DEPENDS

                             4.10.2. RUN_DEPENDS

                             4.10.3. BUILD_DEPENDS

                             4.10.4. FETCH_DEPENDS

                             4.10.5. DEPENDS

                             4.10.6. Peremennye zavisimostej obschego vida

                             4.10.7. Zamechaniya kasatel'no zavisimostej

                4.11. Opcional'nye zavisimosti

                4.12. Mehanizm postroeniya

   5. Osobye soglasheniya

                5.1. Dinamicheskie biblioteki

   6. MASTERDIR

   7. Versii dinamicheskih bibliotek

   8. Stranicy Spravochnika

   9. Porty, kotorym trebuetsya Motif

                9.1. REQUIRES_MOTIF

                9.2. MOTIFLIB

   10. SHrifty dlya X11

   11. Fajly v formate info

   12. Fajly pkg-*

                12.1. pkg-message

                12.2. pkg-install

                12.3. pkg-req

                12.4. Izmenenie soderzhimogo pkg-plist v zavisimosti ot
                make-peremennyh

                12.5. Izmenenie imion fajlov pkg-*

   13. Problemy s licenzirovaniem

   14. Obnovlenie

   15. CHto nuzhno, a chto nel'zya delat'

                15.1. Udalenie otladochnoj informacii v binarnyh fajlah

                15.2. Makrosy INSTALL_*

                15.3. WRKDIR

                15.4. WRKDIRPREFIX

                15.5. Razlichenie operacionnyh sistem i versij OS

                15.6. Napisanie chego-libo posle bsd.port.mk

                15.7. Ustanovka dopolnitel'noj dokumentacii

                15.8. DIST_SUBDIR

                15.9. Informaciya o pakadzhe

                15.10. Stroki RCS

                15.11. Rekursivnye fajly diff

                15.12. PREFIX

                15.13. Podkatalogi

                15.14. Ochistka pustyh katalogov

                15.15. Identifikatory UID

                15.16. Postupajte razumno

                15.17. Ispol'zovanie CFLAGS

                15.18. Konfiguracionnye fajly

                15.19. Utilita portlint

                15.20. Pozhelaniya

                15.21. README.html

                15.22. Raznoe

                15.23. Esli vy ispytyvaete zatrudneniya...

   16. Primernyj Makefile

   17. Avtomaticheskoe sozdanie spiska upakovki

   18. Imena pakadzhej

   19. Kategorii

                19.1. Tekuschij spisok kategorij

                19.2. Vybor pravil'noj kategorii

   20. Izmeneniya v `etom dokumente i sisteme portov

   21. Vot, parni, i vse!

     ----------------------------------------------------------------------

                       Chapter 1. Kak samomu sdelat' port

   Itak, teper' vas interesuet, kak sozdat' sobstvennyj port ili obnovit'
   suschestvuyuschij? Velikolepno!

   Nizhe nahodyatsya nekotorye ukazaniya po sozdaniyu novogo porta dlya
   FreeBSD. Esli vy hotite obnovit' suschestvuyuschij port, vy dolzhny
   prochest' ih, a zatem Chapter 14.

   Esli `etot dokument nedostatochno podroben, vy dolzhny obratit'sya k fajlu
   /usr/ports/Mk/bsd.port.mk, kotoryj vklyuchaetsya v make-fajl kazhdogo
   porta. On horosho prokommentirovan, i dazhe esli vy ne zanimaetes'
   hakan'em make-fajlov kazhdodnevno, iz nego vy smozhete uznat' mnogo
   novogo. Krome togo, konkretnye voprosy mozhno zadat', poslav pis'mo na
   adres Spisok rassylki, posvyaschennyj Portam FreeBSD
   <freebsd-ports@FreeBSD.org>.

     Note: Tol'ko chast' peremennyh (VAR), kotorye mogut byt' pereopredeleny,
     opisany v `etom dokumente. Bol'shinstvo (esli ne vse) opisany v nachale
     fajla bsd.port.mk. V `etom fajle ispol'zuetsya nestandartnaya nastrojka
     shaga tabulyacii. Emacs i Vim dolzhny raspoznat' `eto pri zagruzke
     fajla. Kak vi, tak i ex mogut byt' nastroeny na ispol'zovanie
     pravil'nogo znacheniya vydachej komandy :set tabstop=4 posle zagruzki
     fajla.

     ----------------------------------------------------------------------

                        Chapter 2. Bystroe portirovanie

   V `etom razdele budet opisano, kak sdelat' port na skoruyu ruku. Vo mnogih
   sluchayah `etogo byvaet nedostatochno, no my posmotrim.

   Vo-pervyh, skachajte original'nyj tar-fajl i pomestite ego v katalog
   DISTDIR, kotoryj po umolchaniyu est' ne chto inoe, kak
   /usr/ports/distfiles.

     Note: Zdes' predpolagaetsya, chto programmnoe obespechenie
     kompiliruetsya bez problem kak est', to est' dlya raboty prilozheniya na
     vashej sisteme FreeBSD ne potrebovalos' absolyutno nikakih izmenenij.
     Esli trebovalos' chto-to izmenit', to vam pridetsya obratit'sya takzhe i
     k sleduyuschemu razdelu.

     ----------------------------------------------------------------------

                          2.1. Sozdanie fajla Makefile

   Minimal'nyj Makefile budet vyglyadet' primerno tak:

     # New ports collection makefile for:   oneko
     # Date created:        5 December 1994
     # Whom:            asami
     #
     # $FreeBSD$
     #
    
     PORTNAME=      oneko
     PORTVERSION=   1.1b
     CATEGORIES=    games
     MASTER_SITES=  ftp://ftp.cs.columbia.edu/archives/X11R5/contrib/
    
     MAINTAINER=    asami@FreeBSD.org
    
     MAN1=              oneko.1
     MANCOMPRESSED= yes
     USE_IMAKE=     yes
    
     .include <bsd.port.mk>
        

   Posmotrim, smozhete li vy ego ponyat'. Ne obraschajte vnimanie na
   soderzhimoe strochki $FreeBSD$, ona budet zapolnena avtomaticheski
   sistemoj CVS, kogda port budet importirovan v nashe derevo portov. Vy
   mozhete najti bolee podrobnyj primer v razdele primer Makefile.

     ----------------------------------------------------------------------

                      2.2. Sozdanie informacionnyh fajlov

   Imeetsya tri informacionnyh fajla, kotorye trebuyutsya dlya lyubogo porta,
   vne zavisimosti ot togo, yavlyaetsya li on pakadzhem ili net. `Eto
   pkg-comment, pkg-descr i pkg-plist, i ih prefiks pkg- otlichaet ih ot
   drugih fajlov.

     ----------------------------------------------------------------------

2.2.1. pkg-comment

   `Eto odnostrochnoe opisanie porta. Pozhalujsta, ne vklyuchajte syuda
   nazvanie pakadzha (ili nomer versii programmnogo obespecheniya).
   Kommentarij dolzhen nachinat'sya s zaglavnoj bukvy i ne zakanchivat'sya
   tochkoj. Vot primer:

     A cat chasing a mouse all over the screen
          

     ----------------------------------------------------------------------

2.2.2. pkg-descr

   `Eto bolee podrobnoe kratkoe opisanie porta. Ot odnogo do neskol'kih
   abzacev, kratko opisyvayuschih, chto predstavlyaet soboj port, budet
   dostatochno.

     Note: `Eto ne rukovodstvo i ne podrobnejshee opisanie togo, kak
     ispol'zovat' ili kompilirovat' port! Pozhalujsta, bud'te vnimatel'ny pri
     kopirovanii teksta iz README ili stranic spravochnika; slishkom chasto
     oni ne yavlyayutsya kratkim opisaniem porta ili imeyut neudobnyj format
     (naprimer, stranicy spravochnika vyrovneny probelami). Esli portiruemoe
     prilozhenie imeet oficial'nuyu stranichku Internet, ukazhite ee zdes'.
     Predvarite odin iz sajtov slovom WWW: dlya togo, chtoby vspomogatel'nye
     utility rabotali pravil'no.

   Rekomenduetsya, chtoby vy ukazali svoe imya v konce `etogo fajla, kak
   zdes':

     This is a port of oneko, in which a cat chases a poor mouse all over
     the screen.
      :
     (etc.)
    
     WWW: http://www.oneko.org/
    
     - Satoshi
     asami@cs.berkeley.edu
          

     ----------------------------------------------------------------------

2.2.3. pkg-plist

   Zdes' perechislyayutsya vse fajly, ustanavlivaemye portom. Ego takzhe
   nazyvayut ``spiskom dlya upakovki'', potomu chto pakadzh generiruetsya
   upakovkoj fajlov, kotorye zdes' ukazany. Imena putej ukazyvayutsya
   otnositel'no ustanovochnogo prefiksa (obychno /usr/local ili /usr/X11R6).
   Esli vy ispol'zuete peremennye MANn (a vy dolzhny `eto delat'), to
   ukazyvat' stranicy spravochnika zdes' ne nuzhno.

   Vot malen'kij primer:

     bin/oneko
     lib/X11/app-defaults/Oneko
     lib/X11/oneko/cat1.xpm
     lib/X11/oneko/cat2.xpm
     lib/X11/oneko/mouse.xpm
     @dirrm lib/X11/oneko
          

   Obratites' k stranice Spravochnika po komande pkg_create(1) s podrobnym
   opisaniem formata spiska upakovki.

     Note: V spiske vy dolzhny ukazat' vse fajly, no ne katalogi. Krome togo,
     esli port sozdaet katalogi sam na `etape ustanovki, nuzhno dobavit'
     direktivy @dirrm v podhodyaschie mesta dlya udaleniya ih pri udalenii
     porta.

     Rekomenduetsya, chtoby imena fajlov v `etom spiske byli otsortirovany v
     alfavitnom poryadke. `Eto pozvolit znachitel'no oblegchit' sverku
     izmenenij pri obnovlenii porta.

     Sozdanie spiska upakovki vruchnuyu mozhet okazat'sya ves'ma trudoiomkoj
     zadachej. Esli port ustanavlivaet bol'shoe kolichestvo fajlov, razdel ob
     avtomaticheskom postroenii spiska upakovki mozhet pomoch' s`ekonomit'
     vremya.

     ----------------------------------------------------------------------

                    2.3. Sozdanie fajla s kontrol'noj summoj

   Prosto vvedite komandu make makesum. Pravila utility make avtomaticheski
   sgeneriruyut fajl distinfo.

     ----------------------------------------------------------------------

                            2.4. Testirovanie porta

   Vy dolzhny udostoverit'sya, chto pravila postroeniya porta vypolnyayut
   imenno to, chto vy hotite, vklyuchaya sozdanie pakadzha dlya porta. Vot te
   vazhnye veschi, kotorye vy dolzhny proverit'.

     * pkg-plist ne soderzhit nichego sverh togo, chto ustanavlivaetsya
       vashim portom

     * pkg-plist soderzhit absolyutno vse, chto ustanavlivaetsya vashim
       portom

     * Vash port mozhet byt' pereustanovlen mnozhestvo raz s pomosch'yu
       ukazaniya celi reinstall

     * Vash port podchischaet za soboj posle svoego udaleniya

   Rekomenduemyj poryadok proverki

    1. make install

    2. make package

    3. make deinstall

    4. pkg_add package-name

    5. make deinstall

    6. make reinstall

    7. make package

   Prover'te, chto ni na shage package, ni na shage deinstall ne vydaetsya
   nikakih preduprezhdenij. Posle vypolneniya shaga 3 prover'te, chto vse
   novye katalogi byli uspeshno udaleny. Takzhe poprobujte zapustit'
   programmnoe obespechenie posle vypolneniya shaga 4, chtoby ubedit'sya,
   chto ono rabotaet pravil'no pri ustanovke iz pakadzha.

     ----------------------------------------------------------------------

                 2.5. Proverka vashego porta utilitoj portlint

   Bud'te dobry, pol'zujtes' utilitoj portlint dlya proverki togo, chto vash
   port sootvetstvuet nashim rekomendaciyam. Programma portlint yavlyaetsya
   chast'yu Kollekcii Portov. V chastnosti, vy mozhete zahotet' proverit',
   pravil'no li sformirovan fajl Makefile i sootvetstvuyuschim li obrazom
   naimenovan pakadzh.

     ----------------------------------------------------------------------

                               2.6. Posylka porta

   Pervym delom udostover'tes', chto vy prochitali razdel o tom, chto mozhno
   i nel'zya delat'.

   Teper', kogda vy schastlivy ot svoego pervogo porta, edinstvennoe, chto
   ostalos' sdelat', `eto vklyuchit' ego v osnovnoe derevo portov FreeBSD i
   oschastlivit' `etim vseh ostal'nyh. Nam ne nuzhen ni vash katalog work, ni
   pakadzh pkgname.tgz, tak chto udalite ih pryamo sejchas. Zatem prosto
   vklyuchite vyvod komandy shar `find port_dir` v soobschenie ob oshibke i
   poshlite ego s pomosch'yu programmy send-pr(1) (obratites' k razdelu
   Soobscheniya ob oshibkah i obschie zamechaniya dlya polucheniya podrobnoj
   informacii o programme send-pr(1). Esli razmer neupakovannogo porta
   prevyshaet 20 KB, to sozhmite ego v tar-fajl i vospol'zujtes' utilitoj
   uuencode(1) pered tem, kak vklyuchit' ego v soobschenie (mozhno posylat'
   takie fajly, dazhe esli soobschenie ne prevyshayut 20KB, no `eto ne
   rekomenduetsya). Ne zabud'te ukazat' v soobschenii kategoriyu ports i
   klass change-request (Ne ukazyvajte, chto soobschenie imeet status
   confidential!). Dobav'te takzhe kratkoe opisanie programmy, port kotoroj
   vy sozdali, v razdel ``Description'' otpravlyaemogo PR i sam port v vide
   arhiva shar ili arhiva tar, obrabotannogo utilitoj uuencode, pomestiv ego
   v razdel ``Fix''. Poslednee oblegchit trud kommitterov, kotorye
   ispol'zuyut skripty dlya vypolneniya svoej raboty, svyazannoj s portami.

   Povtorim esche raz, chto ne nuzhno vklyuchat' ni original'nyj fajl s
   distributivom, ni katalog work, ni pakadzh, postroennyj vami komandoj make
   package.

     Note: V proshlom my prosili vas zakachivat' novye porty na FTP-server
     (ftp.FreeBSD.org). Bol'she `etogo delat' ne nuzhno, tak kak na katalog
     incoming/ net dostupa v rezhime chteniya, iz-za bol'shogo kolichestva
     piratskogo programmnogo obespecheniya, okazavshegosya v nem.

   My posmotrim na vash port, pri neobhodimosti verniom ego obratno, a zatem
   vklyuchim port v nashe derevo. Vashe imya takzhe poyavitsya v spiske
   ``Lyudej, vnesshih svoj vklad'' v Rukovodstve i drugih fajlah. `Eto li ne
   kruto?!? :-)

     Note: Vy mozhete znachitel'no oblegchit' nam rabotu, esli budete davat'
     horoshee opisanie v pole opisaniya problemy pri posylke. My
     predpochitaem nechto vrode ``New port: <kratkoe opisanie porta>'' v
     sluchae novogo porta i ``Update port: <category>/<port> <kratkoe
     opisanie obnovlenij>'' v sluchae obnovleniya porta. Esli vy budete
     priderzhivat'sya `etoj shemy, to shansy, chto kto-nibud' vskore
     vzglyanet na vash PR, ves'ma vysoki.

     ----------------------------------------------------------------------

                       Chapter 3. Medlennoe portirovanie

   Itak, vse okazalos' ne tak uzh i prosto, i port potreboval nekotoryh
   modifikacij dlya togo, chtoby zastavit' ego rabotat'. V `etom razdele my
   rasskazhem, shag za shagom, kak ego modificirovat', chtoby on rabotal s
   nashej sistemoj portov.

     ----------------------------------------------------------------------

                          3.1. Kak vsio `eto rabotaet

   Vo-pervyh, kogda pol'zovatel' daet v svoem kataloge s portom komandu make,
   proishodit celaya chereda sobytij. Vo vremya chteniya `etogo teksta mozhet
   okazat'sya poleznym imet' fajl bsd.port.mk otkrytym v drugom okne, chto
   sil'no pomozhet v ih ponimanii.

   No ne volnujtes' sil'no, esli vy ne do konca ponimaete, chto delaetsya v
   bsd.port.mk, ne tak uzh mnogo lyudej ego ponimaet... :->

    1. Zapuskaetsya cel' fetch. Cel' fetch otvechaet za to, chto arhiv
       ishodnyh tekstov imeetsya v nalichii lokal'no v kataloge DISTDIR. Esli
       cel' fetch ne mozhet najti trebuemye fajly v kataloge DISTDIR, to on
       budet iskat'sya po ukazatelyu URL MASTER_SITES, kotoryj
       ustanavlivaetsya v Makefile, a takzhe na nashem osnovnom FTP-servere
       po adresu ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/, kuda my
       po vozmozhnosti pomeschaem distributivnye fajly dlya arhiva. Zatem ona
       popytaetsya sgruzit' ukazannyj fajl s pomosch'yu FETCH, polagaya, chto
       zaprashivayuschaya mashina imeet pryamoe podklyuchenie k Internet.
       Esli fajl skachaetsya udachno, to on budet pomeschen v katalog DISTDIR
       dlya posleduyuschego ispol'zovaniya i obrabotki.

    2. Vypolnyaetsya cel' extract. Ona ischet distributivnyj fajl porta (kak
       pravilo, tar-arhiv gzip) v kataloge DISTDIR i raspakovyvaet ego vo
       vremennyj katalog, zadavaemyj peremennoj WRKDIR (po umolchaniyu work).

    3. Vypolnyaetsya cel' patch. Vo-pervyh, primenyayutsya vse patchi,
       zadannye peremennoj PATCHFILES. Vo-vtoryh, esli kakie-libo fajly s
       patchami, nosyaschie imena patch-*, imeyutsya v podkataloge PATCHDIR
       (po umolchaniyu `eto katalog files), to oni primenyayutsya v `etot
       moment v alfavitnom poryadke.

    4. Zapuskaetsya cel' configure. Zdes' mozhet vypolnyat'sya lyubaya iz
       mnogih razlichnyh veschej.

         1. Esli suschestvuet skript scripts/configure, to on zapuskaetsya.

         2. Esli zadana peremennaya HAS_CONFIGURE ili GNU_CONFIGURE, to
            zapuskaetsya skript WRKSRC/configure.

         3. Esli zadana peremennaya USE_IMAKE, to zapuskaetsya komanda XMKMF
            (po umolchaniyu `eto xmkmf -a).

    5. Vypolnyaetsya cel' build. Ona otvechaet za perehod v sobstvennyj
       rabochij katalog porta (WRKSRC) i ego postroenie. Esli zadana
       peremennaya USE_GMAKE, budet ispol'zovat'sya GNU-versiya utility make,
       v protivnom sluchae budet ispol'zovana sistemnaya utilita make.

   Vyshe perechisleny standartnye dejstviya. Krome togo, vy sami mozhete
   opredelit' celi pre-chto-to ili post-chto-to, ili sozdat' skripty s takimi
   imenami v podkataloge scripts, i oni budut zapuscheny do ili posle
   vypolneniya dejstvij po umolchaniyu.

   Naprimer, esli u vas est' cel' post-extract, opredelennaya v vashem fajle
   Makefile i fajl pre-build v podkataloge scripts, to posle vypolneniya
   obychnyh dejstvij po raspakovke, budet vyzvana cel' post-extract a skript
   pre-build budet vypolnen pered zapuskom standartnyh pravil postroeniya.
   Rekomenduetsya ispol'zovat' celi iz Makefile, esli dejstviya dostatochno
   prosty, potomu chto v dal'nejshem budet prosche opredelit', kakie
   nestandartnye dejstviya trebuet port.

   Dejstviya po umolchaniyu vypolnyayutsya celyami do-chto-to iz bsd.port.mk.
   Naprimer, komandy dlya raspakovki porta nahodyatsya v celi do-extract.
   Esli vam ne hvataet celi po umolchaniyu, vy mozhete ee ispravit',
   pereopredeliv cel' do-something v vashem fajle Makefile.

     Note: ``Osnovnye'' celi (k primeru, extract, configure, i td.) ne
     delayut nichego bol'she, chem proveryayut uspeshnost' zaversheniya vseh
     predyduschih shagov i vyzyvayut nastoyaschie celi ili skripty, i ih ne
     nuzhno menyat'. Esli vam nuzhno izmenit' raspakovku, ispravlyajte
     do-extract, no nikogda ne trogajte extract!

   Teper' vy predstavlyaete, chto proishodit, kogda pol'zovatel' nabiraet
   komandu make, teper' davajte projdemsya cherez rekomenduemye dlya
   sozdaniya nastoyaschego porta shagi.

     ----------------------------------------------------------------------

                         3.2. Poluchenie ishodnogo koda

   Poluchite original'nye ishodnye teksty (obychno) v vide upakovannogo
   tar-arhiva (foo.tar.gz ili foo.tar.Z) i skopirujte ego v katalog DISTDIR.
   Vsegda ispol'zujte ishodnye teksty osnovnoj vetki razrabotki vezde, gde
   `eto vozmozhno.

   Esli vy ne mozhete najti FTP/http sajt s horoshim podklyucheniem k seti,
   ili nahodite tol'ko sajty, kotorye imeyut razdrazhayusche nestandartnye
   formaty, to mozhete zahotet' pomestit' kopiyu na nadezhnyj server FTP ili
   http, kotoryj vam dostupen (naprimer, vasha domashnyaya stranica).
   Prover'te, chto vy ustanovili peremennuyu MASTER_SITES v znachenie,
   kotoroe sootvetstvuet vashemu resheniyu.

   Esli vy ne mozhete najti dostupnogo i nadiozhnogo mesta dlya pomescheniya
   distributivnogo fajla, to my sami smozhem razmestit' ego na servere
   ftp.FreeBSD.org. Distributivnyj fajl dolzhen byt' pomeschion v katalog
   ~/public_distfiles/ odnogo iz pol'zovatelej mashiny freefall. Poprosite
   togo, kto kommittil vash port, sdelat' `eto. `Etot chelovek takzhe zadast
   peremennoj MASTER_SITES znachenie MASTER_SITE_LOCAL, a v peremennoj
   MASTER_SITE_SUBDIR ukazhet svoio imya pol'zovatelya s mashiny freefall.

   Esli distributivnye fajly vashego porta postoyanno menyayutsya po
   neponyatnym prichinam, ostaetsya pomestit' distributiv na vashu
   domashnyuyu veb-stranicu i ukazat' ee pervoj v spiske MASTER_SITES. `Eto
   pozvolit izbezhat' polucheniya oshibok ``checksum mismatch'' u
   pol'zovatelej, a takzhe umen'shit nagruzku na lyudej, soprovozhdayuschih
   nash FTP-server. Takzhe, esli u porta imeetsya tol'ko odin osnovnoj
   server, to rekomenduetsya pomestit' arhivnuyu kopiyu na svoj sajt i
   ukazat' ego v spiske MASTER_SITES vtorym.

   Esli vashemu portu trebuyutsya dopolnitel'nye `patchi', dostupnye v
   Internet, skachajte takzhe i ih, pomestiv v katalog DISTDIR. Ne
   volnujtes', esli oni nahodyatsya ne na tom zhe sajte, otkuda vzyat
   distributivnyj arhiv, my umeem obrabatyvat' takie situacii (smotrite
   opisanie PATCHFILES nizhe).

     ----------------------------------------------------------------------

                            3.3. Modifikaciya porta

   Raspakujte kopiyu distributivnogo fajla v otdel'nyj katalog i vnesite
   izmeneniya, kotorye neobhodimy dlya togo, chtoby port kompilirovalsya
   normal'no v tekuschej versii FreeBSD. Tschatel'no otslezhivajte vse, chto
   vy delaete, `etot process vam predstoit avtomatizirovat'. Vse, vklyuchaya
   udalenie, dobavlenie ili modifikaciyu v fajlah dolzhny budut vypolnyat'sya
   avtomaticheski s pomosch'yu skriptov ili fajlov patchej, kogda vy
   zavershite rabotu nad portom.

   Esli vashemu portu vo vremya kompilyacii, ustanovki i nastrojki trebuetsya
   dovol'no mnogo vzaimodejstvovat' s pol'zovatelem, to posmotrite na odin iz
   klassicheskih skriptov Configure L`erri Uolla (Larry Wall) i sdelajte sami
   chto-libo podobnoe. Prednaznachenie novoj kollekcii portov - `eto sdelat'
   kazhdoe prilozhenie v stile ``plug-and-play'' nastol'ko, naskol'ko `eto
   voobsche vozmozhno dlya konechnogo pol'zovatelya pri minimal'nom
   ispol'zovanii diskovogo prostranstva.

     Note: Esli yavno ne ukazano obratnoe, to patchi, skripty i drugie fajly,
     kotorye vy sozdali i predostavili dlya Kollekcii Portov FreeBSD, neyavno
     podpadayut pod standartnye usloviya licenzii BSD.

     ----------------------------------------------------------------------

                             3.4. Sozdanie patchej

   Fajly, kotorye dobavlyalis' ili izmenyalis' v processe sozdaniya porta,
   mogut byt' vyyavleny vyzovom programmy diff s rekursiej, a rezul'tat
   raboty `etoj programmy mozhet byt' v dal'nejshem peredan programme patch.
   Kazhdyj nabor patchej, kotoryj vy sobiraetes' primenit', dolzhen byt'
   sobran v fajl s imenem patch-*, gde * oznachaet poryadok, v kotoroj budut
   primenyat'sya patchi -- `eto delaetsya v alfavitnom poryadke, to est'
   snachala aa, zatem ab i tak dalee. Esli hotite, vy mozhete ispol'zovat'
   imena fajlov, ukazyvayuschie na imena fajlov, k kotorym primenyayutsya
   patchi, takie, kak patch-Imakefile ili patch-src-config.h. `Eti fajly
   dolzhny nahodit'sya v kataloge PATCHDIR, otkuda oni budut vzyaty
   avtomaticheski. Vse patchi dolzhny byt' sdelany otnositel'no kataloga
   WRKSRC (kak pravilo, `eto katalog, v kotoryj raspakovyvaetsya ishodnyj
   arhiv i gde budet vypolnyat'sya postroenie). Dlya uproscheniya vneseniya
   izmenenij i obnovlenij vy dolzhny izbegat' nalichiya bolee chem odnogo
   patcha dlya odnogo i togo zhe fajla (naprimer, patchej patch-aa i
   patch-ab, oba menyayuschih fajl WRKSRC/foobar.c).

     ----------------------------------------------------------------------

                             3.5. Konfigurirovanie

   Pomestite vse dopolnitel'nye komandy, trebuemye dlya nastrojki, v vash
   skript configure i sohranite ego v podkataloge scripts. Kak otmecheno
   vyshe, vy mozhete sdelat' `eto celyami v fajle Makefile i/ili skriptami s
   imenami pre-configure ili post-configure.

     ----------------------------------------------------------------------

                     3.6. Obrabotka pol'zovatel'skogo vvoda

   Esli dlya postroeniya, konfiguracii ili ustanovki vashego porta trebuetsya
   nekotoryj vvod so storony pol'zovatelya, to zadajte peremennuyu
   IS_INTERACTIVE v vashem fajle Makefile. V sluchae ``nochnogo postroeniya''
   `eto pozvolit propustit' vash port, esli pol'zovatel' v svoem okruzhenii
   zadal peremennuyu BATCH (i esli pol'zovatel' ustanovil peremennuyu
   INTERACTIVE, to budut stroit'sya tol'ko porty, kotorye trebuyut
   vzaimodejstviya s pol'zovatelem.

   Pri nalichii razumnyh otvetov na zadavaemye voprosy, podhodyaschih po
   umolchaniyu, takzhe rekomenduetsya proveryat' peremennuyu PACKAGE_BUILDING
   i vyklyuchat' interaktivnyj skript, esli on est'. `Eto pozvolit nam
   stroit' pakadzhi dlya pomescheniya na kompakt-diski i FTP-servery.

     ----------------------------------------------------------------------

                      Chapter 4. Nastrojka fajla Makefile

   Nastrojka fajla Makefile dostatochno prosta, i my snova predpolagaem, chto
   pered tem, kak nachat', vy posmotrite na suschestvuyuschie primery. K tomu
   zhe v `etom rukovodstve imeetsya primernyj Makefile, tak chto vzglyanite
   na nego i, pozhalujsta, sledujte poryadku peremennyh i razdelov v `etom
   obrazce, chtoby oblegchit' chtenie vashego porta drugimi lyud'mi.

   Itak, raspolozhim reshaemye zadachi v poryadke ih vozniknoveniya pri
   sozdanii vashego novogo fajla Makefile:

     ----------------------------------------------------------------------

                         4.1. Original'nye ishodnyj kod

   Nahoditsya li on v kataloge DISTDIR v vide standartnogo upakovannogo
   arhivatorom gzip tar-arhiva s imenem tipa foozolix-1.2.tar.gz? Esli `eto
   tak, mozhno perejti k sleduyuschemu shagu. Esli net, to vy dolzhny
   popytat'sya pereopredelit' nekotorye iz peremennyh DISTNAME, EXTRACT_CMD,
   EXTRACT_BEFORE_ARGS, EXTRACT_AFTER_ARGS, EXTRACT_SUFX ili DISTFILES v
   zavisimosti ot togo, naskol'ko neobychen format distributivnogo fajla.
   (Samyj rasprostranionnyj sluchaj - `eto EXTRACT_SUFX=.tar.Z, kogda
   tar-fajl upakovan obychnoj utilitoj compress, a ne arhivatorom gzip.)

   V hudshem sluchae vy mozhete prosto opredelit' svoyu sobstvennuyu cel'
   do-extract dlya pereopredeleniya dejstvij po umolchaniyu, hotya k `etomu
   nuzhno budet pribegat' v ochen' redkih sluchayah, esli voobsche
   pridiotsya.

     ----------------------------------------------------------------------

                          4.2. PORTNAME i PORTVERSION

   V peremennoj PORTNAME vy dolzhny ukazat' osnovnuyu chast' imeni vashego
   porta, a v peremennoj PORTVERSION - nomer versii.

     ----------------------------------------------------------------------

                         4.3. PORTREVISION i PORTEPOCH

4.3.1. PORTREVISION

   Peremennaya PORTREVISION predstavlyaet soboj monotonno
   uvelichivayuscheesya chislo, kotoroe obnulyaetsya pri kazhdom uvelichenii
   znacheniya peremennoj PORTVERSION (to est' kazhdyj raz, kogda sozdatelyami
   vypuskaetsya novyj oficial'nyj reliz), i dobavlyaetsya k imeni pakadzha,
   esli ono ne ravno nulyu. Znachenie PORTREVISION uvelichivaetsya kazhdyj
   raz, kogda v porte FreeBSD delayutsya izmeneniya, kotorye dostatochno
   sil'no zatragivayut soderzhimoe ili strukturu sootvetstvuyuschego
   pakadzha.

   Primery sluchaev, kogda znachenie PORTREVISION dolzhno byt' uvelicheno:

     * Dobavlenie patchej dlya ispravleniya probelov v bezopasnosti, oshibok,
       ili dobavleniya novoj funkcional'nosti v port FreeBSD.

     * Izmeneniya v fajle postroeniya porta dlya vklyucheniya i vyklyucheniya
       parametrov, opredelyaemyh pri kompilyacii pakadzha.

     * Izmeneniya v spiske upakovki ili v povedenii pakadzha vo vremya ego
       ustanovki (naprimer, izmenenie skripta, generiruyuschego nachal'nye
       dannye dlya pakadzha, takie, kak ssh-klyuchi dlya hosta).

     * Uvelichenie versii dinamicheskoj biblioteki, ot kotoroj zavisit port
       (v `etom sluchae tot, kto popytaetsya ustanovit' staryj pakadzh posle
       ustanovki bolee novoj versii biblioteki, ne smozhet `etogo sdelat',
       potomu chto pri `etom budet delat'sya poisk staroj biblioteki
       libfoo.x, a ne libfoo.(x+1)).

     * Bol'shie funkcional'nye izmeneniya v distributivnom fajle porta,
       proishodyaschie bez ob"yavlenij, i privodyaschie k bol'shim
       izmeneniyam, to est' izmeneniya v distributive trebuyut korrektirovki
       fajla distinfo bez sootvetstvuyuschego izmeneniya PORTVERSION, kogda
       kak komanda diff -ru mezhdu novoj i staroj versiyami pokazyvaet
       netrivial'nye izmeneniya v kode.

   Primery izmenenij, kotorye ne trebuyut uvelicheniya peremennoj
   PORTREVISION:

     * Izmeneniya stilya v skelete porta bez funkcional'nyh izmenenij v
       pakadzhe.

     * Izmeneniya v peremennoj MASTER_SITES ili drugie funkcional'nye
       izmeneniya porta, kotorye ne zatragivayut poluchayuschegosya pakadzha.

     * Trivial'nye patchi k distributivnomu fajlu, takie, kak ispravleniya
       opechatok, kotorye ne tak uzh vazhny, chto pol'zovateli pakadzha
       dolzhny ozabotit'sya obnovleniem.

     * Ispravleniya, kasayuschiesya `etapa postroeniya, kotorye delayut
       vozmozhnym postroenie pakadzha, esli ranee `eto bylo nevozmozhno
       sdelat' (poka izmeneniya ne privodyat k izmeneniyu raboty na lyubyh
       drugih platformah, na kotoryh port ranee stroilsya). Tak kak
       PORTREVISION otrazhaet soderzhimoe pakadzha, to esli ranee pakadzh ne
       stroilsya, to net nuzhdy uvelichivat' PORTREVISION dlya otmetki
       izmeneniya.

   Pravilo, kotoromu nuzhno priblizitel'no sledovat', zaklyuchaetsya v tom,
   chto nuzhno sprashivat' sebya, yavlyaetsya li vnosimoe v port izmenenie
   takim, chto kto-libo i gde-libo ot nego vyigraet (v vide
   usovershenstvovaniya, ispravleniya ili blagodarya tomu, chto novyj pakadzh
   budet real'no rabotat'). Esli `eto tak, to peremennaya PORTREVISION
   dolzhna byt' uvelichena, chtoby avtomatizirovannye instrumenty (naprimer,
   pkg_version) smogli obnaruzhit' fakt poyavleniya novogo pakadzha.

     ----------------------------------------------------------------------

4.3.2. PORTEPOCH

   Vremya ot vremeni razrabotchik programmnogo obespecheniya ili sozdatel'
   porta FreeBSD delayut chto-to ne tak i vypuskayut versiyu programmy, nomer
   kotoroj men'she predyduschej versii. Primerom `etogo yavlyaetsya port,
   nazvanie kotorogo menyaetsya s foo-20000801 na foo-1.0 (iznachal'no `eto
   ne schitalos' by bolee novoj versiej, tak kak 20000801 chislenno bol'she,
   chem 1).

   V situaciyah, podobnyh `etoj, dolzhno byt' uvelicheno znachenie PORTEPOCH.
   Esli znachenie PORTEPOCH ne ravno nulyu, to ono dobavlyaetsya k imeni
   pakadzha, kak opisano v razdele vyshe. Znachenie PORTEPOCH nikogda ne
   umen'shaetsya i ne sbrasyvaetsya v nol', potomu chto `eto privedet k
   oshibke sravneniya s pakadzhem s men'shim nomerom `epohi (to est' to, chto
   pakadzh ustarel. obnaruzheno ne budet): nomer novoj versii (naprimer,
   1.0,1 v primere vyshe) ostanetsya men'she, chem nomer predyduschej versii
   (20000801), odnako suffiks ,1 interpretiruetsya razlichnymi
   avtomatizirovannymi utilitami osobym obrazom, i okazhetsya bol'she, chem
   predpolagaemyj suffiks ",0" bolee rannego pakadzha).

   Predpolagaetsya, chto v bol'shinstve portov peremennaya PORTEPOCH
   ispol'zovat'sya ne budet, no pri korrektnom ispol'zovanii PORTVERSION
   mozhet poyavit'sya neobhodimost' eio imet', esli v buduschih relizah
   programmnoe obespechenie dolzhno izmenit' strukturu nomera versii. Odnako
   sozdatelyam portov nuzhno byt' vnimatel'nymi, kogda razrabotchik vypuskaet
   reliz bez oficial'nogo nomera versii - `edakie "promezhutochnye" relizy.
   Imeetsya soblazn pometit' reliz datoj ego vyhoda, chto mozhet vyzvat'
   problemy, kak i v primere vyshe, kogda budet vypuschen novyj "oficial'nyj"
   reliz.

   Naprimer, esli promezhutochnyj reliz pomechen datoj 20000917, a
   predyduschaya versiya programmnogo obespecheniya imela nomer 1.2, to
   promezhutochnomu relizu dolzhno byt' postavleno v sootvetstvie znachenie
   PORTVERSION, ravnoe 1.2.20000917 ili chto-to pohozhee, no ne 20000917, tak
   kak posleduyuschij reliz, skazhem, 1.3, dolzhen imet' chislenno bol'shee
   znachenie.

     ----------------------------------------------------------------------

4.3.3. Primer ispol'zovaniya peremennyh PORTREVISION i PORTEPOCH

   Vypolnen kommit porta gtkmumble, versii 0.10, v kollekciyu portov.

     PORTNAME=      gtkmumble
     PORTVERSION=   0.10
            

   Znachenie PKGNAME stanet ravnym gtkmumble-0.10.

   Obnaruzhen probel v bezopasnosti, chto potrebovalo sozdaniya lokal'nogo
   patcha dlya FreeBSD. Sootvetstvenno bylo uvelicheno znachenie peremennoj
   PORTREVISION.

     PORTNAME=      gtkmumble
     PORTVERSIOn=   0.10
     PORTREVISION=  1
            

   PKGNAME prinimaet znachenie gtkmumble-0.10_1

   Razrabotchikom vypuschena novaya versiya s nomerom 0.2 (okazalos', chto
   pod nomerom 0.10 avtor imel v vidu 0.1.0, a ne ``to, chto budet vypuscheno
   posle versii 0.9'' - izvinite, teper' uzhe pozdno). Tak kak novyj mladshij
   nomer versii 2 po znacheniyu men'she, chem nomer predyduschej versii 10,
   to dolzhno byt' uvelicheno znachenie PORTEPOCH dlya togo, chtoby zastavit'
   raspoznavat' vnov' sozdavaemyj pakadzh kak "bolee novyj". Tak kak `eto
   novyj reliz programmy, to PORTREVISION obnulyaetsya (ili udalyaetsya iz
   make-fajla).

     PORTNAME=      gtkmumble
     PORTVERSION=   0.2
     PORTEPOCH=     1
            

   PKGNAME prinimaet znachenie gtkmumble-0.2,1

   Sleduyuschij reliz imeet nomer versii 0.3. Tak kak znachenie peremennoj
   PORTEPOCH nikogda ne umen'shaetsya, chto peremennye, opredelyayuschie
   versii, teper' vyglyadyat tak:

     PORTNAME=      gtkmumble
     PORTVERSION=   0.3
     PORTEPOCH=     1
            

   PKGNAME prinimaet znachenie gtkmumble-0.3,1

     Note: Esli znachenie PORTEPOCH `etim obnovleniem bylo by sbrosheno v 0,
     to kto-nibud', imeyuschij ustanovlennyj pakadzh gtkmumble-0.10_1, ne
     smog by raspoznat' pakadzh gtkmumble-0.3 kak bolee novyj, tak kak 3 bylo
     by men'she, chem 10.

     ----------------------------------------------------------------------

                 4.4. Peremennye PKGNAMEPREFIX i PKGNAMESUFFIX

   Dve neobyazatel'nye peremennye, PKGNAMEPREFIX i PKGNAMESUFFIX,
   ob"edinyayutsya so znacheniyami PORTNAME i PORTVERSION dlya formirovaniya
   PKGNAME v forme
   ${PKGNAMEPREFIX}${PORTNAME}${PKGNAMESUFFIX}-${PORTVERSION}. Dobejtes'
   togo, chtoby `eto sootvetstvovalo nashim rekomendaciyam po pravil'nomu
   vyboru nazvanij dlya pakadzhej. V chastnosti, v peremennoj PORTVERSION ne
   razreshaetsya ispol'zovanie defisa (-). Krome togo, esli v imeni pakadzha
   prisutstvuet chast' language- ili compiled.specifics, to ispol'zujte
   peremennye PKGNAMEPREFIX i PKGNAMESUFFIX, sootvetstvenno. Ne delajte ih
   chast'yu znacheniya peremennoj PORTNAME.

     ----------------------------------------------------------------------

                                 4.5. DISTNAME

   V peremennoj DISTNAME ukazyvaetsya imya porta tak, kak nazvali ego
   sozdateli programmnogo obespecheniya. Znachenie DISTNAME po umolchaniyu
   sovpadaet s ${PORTNAME}-${PORTVERSION}, tak chto pereopredelite eio
   znachenie v sluchae neobhodimosti. DISTNAME ispol'zuetsya tol'ko v dvuh
   mestah. Vo-pervyh, spisok distributivnyh fajlov (DISTFILES) po umolchaniyu
   sostoit iz ${DISTNAME}${EXTRACT_SUFX}. I vo-vtoryh, predpolagaetsya, chto
   distributivnyj fajl budet raspakovan v podkatalog s imenem WRKSRC,
   znachenie kotorogo po umolchaniyu est' ne chto inoe, kak work/${DISTNAME}.

     Note: Znacheniya peremennyh PKGNAMEPREFIX i PKGNAMESUFFIX ne vliyayut na
     znachenie DISTNAME. Zamet'te takzhe, chto znachenie WRKSRC ravno
     work/${PORTNAME}-${PORTVERSION}, i v sluchae, kogda original'nyj arhiv
     nazyvaetsya po imeni, otlichnom ot
     ${PORTNAME}-${PORTVERSION}${EXTRACT_SUFX}, skoree vsego, vy dolzhny
     ostavit' DISTNAME kak est'-- luchshe pereopredelit' DISTFILES, chem
     zadavat' znacheniya kak DISTNAME, tak i WRKSRC (i, vozmozhno, eschio i
     EXTRACT_SUFX).

     ----------------------------------------------------------------------

                                4.6. CATEGORIES

   V processe sozdaniya pakadzha on pomeschaetsya v katalog
   /usr/ports/packages/All, a v odnom ili bolee podkatalogov iz
   /usr/ports/packages sozdayutsya na nego ssylki. Imena `etih podkatalogov
   opredelyayutsya peremennoj CATEGORIES. Takaya shema nuzhna dlya
   oblegcheniya zhizni pol'zovatelya, kogda on stalkivaetsya s massoj
   pakadzhej na FTP-servere ili kompakt-diske. Pozhalujsta, posmotrite na
   spisok suschestvuyuschih kategorij i vyberite te iz nih, kotorye bolee
   vsego podhodyat k vashemu portu.

   `Etot spisok takzhe opredelyaet, kuda v dereve portov budet pomeschen
   port. Esli vy ukazhete zdes' bolee odnoj kategorii, to predpolagaetsya,
   chto fajly porta budut pomescheny v podkatalog s imenem pervoj kategorii.
   Posmotrite razdel o kategoriyah dlya polucheniya podrobnoj informacii o
   tom, kak pravil'no vybrat' kategorii.

   Esli vash port dejstvitel'no otnositsya k chemu-to, chto absolyutno ne
   imeet otnosheniya ni k odnoj iz suschestvuyuschih kategorij, vy mozhete
   dazhe sozdat' novuyu kategoriyu. V `etom sluchae, pozhalujsta, poshlite
   pis'mo s vashim predlozheniem na adres Spisok rassylki, posvyaschennyj
   Portam FreeBSD <freebsd-ports@FreeBSD.org>.

     ----------------------------------------------------------------------

                               4.7. MASTER_SITES

   Soderzhit chast' s katalogom ftp/http-URL, kotoraya ukazyvaet na
   original'nyj arhiv na servere MASTER_SITES. Ne zabud'te lidiruyuschij
   sl`esh (/)!

   Makros komandy make budet pytat'sya vospol'zovat'sya `etoj peremennoj dlya
   polucheniya distributivnogo fajla s pomosch'yu programmy FETCH, esli on ne
   budet najden v sisteme.

   Rekomenduetsya pomeschat' v spisok mnogo sajtov, predpochtitel'no s raznyh
   kontinentov. `Eto pomozhet pri nalichii problem s mirovoj set'yu, i my
   dazhe planiruem dobavit' podderzhku avtomaticheskogo opredeleniya
   blizhajshego sajta i sgruzki fajlov ottuda!

   Esli original'nyj arhiv nahoditsya na odnom iz takih populyarnyh serverov,
   kak X-contrib, GNU ili Perl CPAN, to ukazyvajte `eti sajty v prostoj forme
   pri pomoschi MASTER_SITE_* (k primeru, MASTER_SITE_XCONTRIB ili
   MASTER_SITE_PERL_GNU). Prosto ukazhite v peremennoj MASTER_SITES odno iz
   `etih znachenij, a v peremennoj MASTER_SITE_SUBDIR zadajte put' k arhivu.
   Vot primer:

     MASTER_SITES=             ${MASTER_SITE_XCONTRIB}
     MASTER_SITE_SUBDIR=   applications
          

   `Eti peremennye predeleny v fajle /usr/ports/Mk/bsd.sites.mk. Vsio vremya
   dobavlyayutsya novye sajty, tak chto obraschajtes' k poslednej versii
   `etogo fajla pered tem, kak poslat' nam svoj port.

   Pol'zovatel' mozhet takzhe zadat' znacheniya peremennyh MASTER_SITE_* v
   fajle /etc/make.conf dlya togo, chtoby pereopredelit' vybrannye nami
   varianty, i ispol'zovat' vmesto nih svoi lyubimye zerkala `etih
   populyarnyh arhivov.

     ----------------------------------------------------------------------

                                4.8. PATCHFILES

   Esli vashemu portu trebuyutsya nekotoryh dopolnitel'nye patchi, kotorye
   dostupny po FTP ili http, zadajte imena `etih fajlov v peremennoj
   PATCHFILES, a v peremennoj PATCH_SITES ukazhite URL togo kataloga, v
   kotorom oni soderzhatsya (format takoj zhe, kak dlya MASTER_SITES).

   Esli patch ne otnositsya k samomu verhu dereva ishodnyh tekstov (to est'
   WRKSRC), potomu chto on soderzhit nekotorye dopolnitel'nye puti,
   ustanovite sootvetstvenno znachenie peremennoj PATCH_DIST_STRIP. V
   chastnosti, esli vse imena putej v patche imeyut dopolnitel'nyj put'
   foozolix-1.0/ pered imenem fajla, to zadajte PATCH_DIST_STRIP=-p1.

   Ne volnujtes', esli patchi upakovany; oni budut raspakovany
   avtomaticheski, esli imena fajlov okanchivayutsya na .gz ili .Z.

   Esli patch rasprostranyaetsya vmeste s kakimi-to drugimi fajlami, takimi,
   kak dokumentaciya, v vide tar-arhiva gzip, vy ne mozhete prosto
   ispol'zovat' PATCHFILES. Esli `eto vash sluchaj, dobav'te imya i
   mestopolozhenie arhiva s patchem k DISTFILES i MASTER_SITES. Zatem
   vospol'zujtes' peremennoj EXTRA_PATCHES dlya ukazaniya `etih fajlov, i
   bsd.port.mk avtomaticheski primenit `eti patchi. V chastnosti, ne
   kopirujte fajly s patchami v katalog PATCHDIR--`etot katalog mozhet byt'
   nedostupnym dlya zapisi.

     Note: Otmet'te, chto arhiv budet raspakovan vne ishodnogo koda, kak
     obychno, i k tomu zhe ego ne nuzhno yavno raspakovyvat', esli `eto
     obychnyj arhiv gzip ili compress. Esli vy sdelaete poslednee, prilozhite
     dopolnitel'nye usiliya dlya togo, chtoby ne perezapisat' chto-libo, uzhe
     suschestvuyuschee v `etom kataloge. Takzhe ne zabud'te dobavit' komandu
     dlya udaleniya skopirovannogo patcha v celi pre-clean.

     ----------------------------------------------------------------------

                                4.9. MAINTAINER

   Ukazhite zdes' vash adres `elektronnoj pochty. Pozhalujsta. :-)

   Podrobnoe opisanie togo, za chto otvechaet lico, podderzhivayuschee port,
   daiotsya v glave MAINTAINER v Makefiles.

     ----------------------------------------------------------------------

                               4.10. Zavisimosti

   Mnogie porty zavisyat ot drugih portov. Imeetsya pyat' peremennyh, kotorye
   vy mozhete ispol'zovat' dlya obespecheniya togo, chto vse trebuemoe
   nahoditsya na mashine pol'zovatelya. Imeetsya takzhe neskol'ko
   predopredelennyh peremennyh, otrazhayuschih zavisimosti dlya obschih
   sluchaev, plyus esche neskol'ko dlya upravleniya povedeniem zavisimostej.

     ----------------------------------------------------------------------

4.10.1. LIB_DEPENDS

   `Eta peremennaya ukazyvaet, ot kakih sovmestno ispol'zuemyh bibliotek
   zavisit port. `Eto spisok par lib:dir[:target] gde lib - `eto imya
   biblioteki, dir - `eto katalog, v kotorom mozhno ee najti v sluchae, esli
   ee net na mashine, i target - `eto cel', kotoruyu nuzhno vyzvat' v `etom
   kataloge. Naprimer,

      LIB_DEPENDS=
           jpeg.9:${PORTSDIR}/graphics/jpeg:install

   proverit nalichie biblioteki jpeg so starshim nomerom versii 9 i perejdet
   v podkatalog graphics/jpeg vashego dereva portov dlya ee postroeniya i
   ustanovki, esli biblioteka otsutstvuet. CHast' target mozhet byt'
   opuschena, esli ona ravna DEPENDS_TARGET (po umolchaniyu install).

     Note: CHast' lib - `eto argument, kotoryj peredaetsya komande ldconfig
     -r | grep -wF. V `etoj peremennoj ne dolzhno byt' regulyarnyh
     vyrazhenij.

   Zavisimost' proveryaetsya dvazhdy, odin raz vnutri celi extract, a zatem
   iz celi install. Krome togo, imya zavisimosti pomeschaetsya v pakadzh, tak
   chto pkg_add budet avtomaticheski ego ustanavlivat', esli ego net na
   pol'zovatel'skoj sisteme.

     ----------------------------------------------------------------------

4.10.2. RUN_DEPENDS

   V `etoj peremennoj perechislyayutsya vypolnimye fajly ili fajly, ot
   kotoryh zavisit rabota porta. `Eto spisok par vida path:dir[:target] gde
   path - `eto imya programmy ili fajla, a dir - katalog, v kotorom mozhno
   najti port v sluchae, esli ego net v sisteme, i target - `eto cel',
   kotoruyu nuzhno vyzvat' v `etom kataloge. Esli path nachinaetsya so
   sl`esha (/), on vosprinimaetsya kak fajl i ego suschestvovanie
   proveryaetsya komandoj test -e; v protivnom sluchae predpolagaetsya, chto
   `eto vypolnimyj fajl i dlya opredeleniya togo, imeetsya li programma v
   puti poiska pol'zovatelya, ispol'zuetsya komanda which -s.

   Naprimer,

     RUN_DEPENDS=   ${PREFIX}/etc/innd:${PORTSDIR}/news/inn \
                wish8.0:${PORTSDIR}/x11-toolkits/tk80
        

   proverit, suschestvuet li fajl ili katalog /usr/local/etc/innd i postroit
   i ustanovit ego iz podkataloga news/inn dereva portov, esli on ne budet
   najden. On takzhe proverit, imeetsya li vypolnimyj fajl s imenem wish8.0 v
   vashem puti poiska, perejdet v podkatalog x11-toolkits/tk80 vashego dereva
   portov dlya ego postroeniya i ustanovki, esli on ne budet najden.

     Note: V privedennom primere innd yavlyaetsya vypolnimym fajlom; esli
     vypolnimyj fajl nahoditsya v neobychnom dlya pol'zovatel'skogo marshruta
     poiska fajlov meste, vy dolzhny ukazat' polnyj put' k fajlu.

   Zavisimost' proveryaetsya vnutri celi install. Krome togo, imya
   zavisimosti pomeschaetsya v pakadzh, tak chto programma pkg_add budet
   avtomaticheski ego ustanavlivat', esli on ne budet najden v
   pol'zovatel'skoj sisteme. CHast' target mozhet byt' opuschena, esli ona
   sovpadaet s DEPENDS_TARGET.

     ----------------------------------------------------------------------

4.10.3. BUILD_DEPENDS

   V `etoj peremennoj perechislyayutsya vypolnimye ili obychnye fajly,
   kotorye trebuyutsya portu dlya ego postroeniya. Kak i RUN_DEPENDS, `eto
   spisok par path:dir[:target] Naprimer,

      BUILD_DEPENDS=
           unzip:${PORTSDIR}/archivers/unzip

   budet proveryat' nalichie vypolnimogo fala s imenem unzip i perejdet v
   podkatalog archivers/unzip vashego dereva portov dlya ego postroeniya i
   ustanovki, esli poslednij ne budet najden.

     Note: Pod ``postroeniem'' zdes' ponimaetsya vsio, ot raspakovki do
     kompilyacii. Zavisimost' proveryaetsya iz celi extract. CHast' target
     mozhet byt' opuschena, esli ona sovpadaet s DEPENDS_TARGET.

     ----------------------------------------------------------------------

4.10.4. FETCH_DEPENDS

   V `etoj peremennoj perechislyayutsya vypolnyaemye fajly ili prosto fajly,
   kotorye trebuyutsya portu dlya sgruzki. Kak i predyduschie dve peremennye,
   `eto spisok par path:dir[:target] Naprimer,

      FETCH_DEPENDS=
           ncftp2:${PORTSDIR}/net/ncftp2

   budet proveryat' nalichie vypolnyaemogo fajla s imenem ncftp2 i perejdet v
   katalog net/ncftp2 vashego dereva portov dlya ego postroeniya i ustanovki,
   esli tot ne budet najden.

   Zavisimost' proveryaetsya pri vypolnenii celi fetch. CHast' target mozhet
   byt' opuschena, esli ona sovpadaet s DEPENDS_TARGET.

     ----------------------------------------------------------------------

4.10.5. DEPENDS

   Esli imeetsya zavisimost', kotoraya ne podpadaet ni pod odnu iz
   vysheperechislennyh chetyreh kategorij, ili vash port trebuet nalichiya
   ishodnyh tekstov drugogo porta v raspakovannom vide krome togo, chto `etot
   port dolzhen byt' ustanovlen, to vospol'zujtes' `etoj peremennoj. `Eto
   spisok par dir[:target], potomu chto, v otlichie ot predyduschih sluchaev,
   nichego ne proveryaetsya. CHast' target mozhet byt' opuschena, esli ona
   sovpadaet s DEPENDS_TARGET.

     ----------------------------------------------------------------------

4.10.6. Peremennye zavisimostej obschego vida

   Opredelite peremennuyu USE_XLIB=yes, esli vash port dlya ustanovki trebuet
   X Window System (chto podrazumevaetsya pri ispol'zovanii peremennoj
   USE_IMAKE). Opredelite peremennuyu USE_GMAKE=yes, esli vash port trebuet
   vmesto standartnoj dlya BSD utility make ee GNU-analog. Zadajte
   USE_AUTOCONF=yes, esli portu dlya raboty trebuetsya GNU autoconf.
   Opredelite peremennuyu USE_QT=yes, esli vash port ispol'zuet samuyu
   poslednyuyu versiyu paketa qt. Ukazhite USE_PERL5=yes v sluchae, esli
   vashemu portu trebuetsya versiya 5 yazyka perl. (Poslednee osobenno
   vazhno, tak kak nekotorye versii FreeBSD imeyut perl5 v sostave sistemy,
   kogda kak drugie - net.)

     ----------------------------------------------------------------------

4.10.7. Zamechaniya kasatel'no zavisimostej

   Kak uzhe otmecheno vyshe, cel'yu, kotoraya vyzyvaetsya po umolchaniyu v
   sluchae, kogda `eto trebuet zavisimost', yavlyaetsya DEPENDS_TARGET. Ona
   po umolchaniyu est' install. `Eto pol'zovatel'skaya peremennaya; ona nigde
   ne opredelena v fajle Makefile porta. Esli vashemu portu trebuetsya osobyj
   metod obrabotki zavisimosti, vospol'zujtes' chast'yu :target peremennoj
   *_DEPENDS vmesto togo, chtoby pereopredelyat' DEPENDS_TARGET.

   Kogda vy nabiraete komandu make clean, `eta operaciya takzhe vypolnyaetsya
   i nad zavisimostyami `etogo porta. Esli vy ne hotite, chtoby `eto
   sluchilos', opredelite peremennuyu NOCLEANDEPENDS v vashem okruzhenii.

   CHtoby bezuslovno zaviset' ot drugogo porta, ukazhite peremennuyu
   ${NONEXISTENT} v kachestve pervogo polya peremennoj BUILD_DEPENDS ili
   RUN_DEPENDS. Pol'zujtes' `etim, tol'ko kogda vam nuzhno imet' ishodnyj kod
   drugogo porta. Vy mozhete s`ekonomit' vremya na kompilyacii, ukazav takzhe
   i cel'. Naprimer,

     BUILD_DEPENDS=   ${NONEXISTENT}:${PORTSDIR}/graphics/jpeg:extract
              

   vsegda budet perehodit' v katalog s portom JPEG i raspakovyvat' ego.

   Ne nuzhno ispol'zovat' DEPENDS, esli est' drugoj sposob poluchit'
   trebuemyj rezul'tat. `Eto mozhet privesti k tomu, chto kakoj-to drugoj
   port vsegda budet stroit'sya (i po umolchaniyu ustanavlivat'sya). i takaya
   zavisimost' otrazitsya i na pakadzhe. Esli `eto imenno to, chto vam
   nuzhno, to vam, navernoe, sleduet opisyvat' `eto cherez BUILD_DEPENDS i
   RUN_DEPENDS--po krajnej mere smysl budet bolee ponyaten.

     ----------------------------------------------------------------------

                         4.11. Opcional'nye zavisimosti

   Nekotorye bol'shie prilozheniya mogut byt' postroeny v razlichnyh
   konfiguraciyah, s dopolnitel'noj funkcional'nost'yu, zavisyaschej ot
   nalichiya v sisteme opredelennyh bibliotek ili prilozhenij. Tak kak ne
   vsem pol'zovatelyam trebuyutsya `eti biblioteki ili prilozheniya, to v
   sisteme portov predusmotren mehanizm, pozvolyayuschij avtoru porta
   prinimat' reshenie o konfiguracii, kotoraya budet stroit'sya. Polnaya
   podderzhka `etogo mehanizma oblegchaet ispol'zovanie porta i daet dva ili
   bolee porta cenoj sozdaniya odnogo.

   Samym prostym iz `etih mehanizmom yavlyaetsya ispol'zovanie WITHOUT_X11.
   Esli port mozhet byt' postroen kak s podderzhkoj X, tak i bez onoj, to
   obychno on dolzhen stroit'sya s podderzhkoj X. Esli opredelena peremennaya
   WITHOUT_X11, to dolzhna stroit'sya versiya, ne podderzhivayuschaya X.

   Razlichnye chasti paketa GNOME imeyut takie zavisimosti, hotya ih gorazdo
   trudnee ispol'zovat'. V Makefile mozhno ispol'zovat' peremennye WANT_* i
   HAVE_*. Esli prilozhenie mozhet byt' postroeno kak s zavisimostyami, tak i
   bez zavisimostej, perechislennyh nizhe, to v Makefile dolzhna byt' zadana
   peremennaya WANT_PKG i versiya, kotoraya ispol'zuet paket PKG, budet
   stroit'sya, esli opredelena peremennaya HAVE_PKG.

   Na dannyj moment tak rabotayut peremennye WANT_*, WANT_GLIB, WANT_GTK,
   WANT_ESOUND, WANT_IMLIB i WANT_GNOME.

     ----------------------------------------------------------------------

                           4.12. Mehanizm postroeniya

   Esli vash pakadzh ispol'zuet GNU-versiyu utility make, zadajte
   USE_GMAKE=yes. Esli vash pakadzh ispol'zuet configure, zadajte
   HAS_CONFIGURE=yes. Esli vash pakadzh ispol'zuet GNU-versiyu configure,
   zadajte GNU_CONFIGURE=yes (`eto takzhe podrazumevaet HAS_CONFIGURE). Esli
   vy hotite peredat' dopolnitel'nye parametry v configure (spisok parametrov
   predstavlyaet soboj --prefix=${PREFIX} dlya GNU configure i pustuyu stroku
   dlya ne-GNU configure), ukazhite `eti dopolnitel'nye parametry v
   CONFIGURE_ARGS. Esli vash pakadzh ispol'zuet GNU-versiyu autoconf, zadajte
   USE_AUTOCONF=yes. `Eto podrazumevaet GNU_CONFIGURE, i privedet k vyzovu
   autoconf do zapuska configure.

   Esli vash pakadzh yavlyaetsya prilozheniem dlya X, kotoroe sozdaet fajly
   Makefile iz sootvetstvuyuschih fajlov Imakefile pri pomoschi utility
   imake, to zadajte USE_IMAKE=yes. `Eto privedet k avtomaticheskomu zapusku
   komandy xmkmf -a na `etape konfigurirovaniya. Esli ispol'zovanie flaga -a
   yavlyaetsya dlya vashego porta problematichnym, zadajte XMKMF=xmkmf. Esli
   port ispol'zuet komandu imake, no ne vosprinimaet cel' install.man, to
   dolzhna byt' zadana peremennaya NO_INSTALL_MANPAGES=yes. Krome togo, avtor
   programmy dolzhen byt' pristrelen. :->

   Esli v fajle Makefile iz distributiva vashego porta v kachestve glavnoj
   celi dlya postroeniya ukazano nechto, otlichnoe ot all, to zadajte
   sootvetstvuyuschim obrazom peremennuyu ALL_TARGET. To zhe samoe kasaetsya
   celej install i INSTALL_TARGET.

     ----------------------------------------------------------------------

                         Chapter 5. Osobye soglasheniya

   Imeetsya eschio neskol'ko veschej, kotorye vy dolzhny imet' v vidu pri
   sozdanii porta. `Etot razdel opisyvaet naibolee chasto vstrechayuschiesya
   iz nih.

     ----------------------------------------------------------------------

                         5.1. Dinamicheskie biblioteki

   Esli vash port ustanavlivaet odnu ili neskol'ko dinamicheskih bibliotek,
   opredelite peremennuyu INSTALLS_SHLIB, kotoraya privediot k zapusku iz
   bsd.port.mk komandy ${LDCONFIG} -m otnositel'no kataloga, v kotoryj
   ustanavlivaetsya novaya biblioteka (kak pravilo, `eto PREFIX/lib), vo
   vremya vypolneniya celi post-install dlya eio registracii v k`eshe
   dinamicheskih bibliotek. `Eta peremennaya, esli ona opredelena, takzhe
   privediot k dobavleniyu sootvetstvuyuschej pary komand @exec
   /sbin/ldconfig -m i @unexec /sbin/ldconfig -R v vash fajl pkg-plist, tak
   chto pol'zovatel', ustanavlivayuschij pakadzh, smozhet srazu zhe
   ispol'zovat' dinamicheskuyu biblioteku, a udalenie pakadzha ne privediot k
   tomu, chto sistema budet predpolagat', chto biblioteka vsio eschio
   imeetsya v nalichii.

   Esli nuzhno, vy mozhete pereopredelit' katalog, v kotoryj po umolchaniyu
   ustanavlivaetsya biblioteka, zadav peremennuyu LDCONFIG_DIRS, v kotoroj
   dolzhny byt' perechisleny katalogi, v kotorye ustanavlivayutsya
   dinamicheskie biblioteki. Naprimer, esli vash port ustanavlivaet
   dinamicheskie biblioteki v katalogi PREFIX/lib/foo i PREFIX/lib/bar, to vy
   mozhete v fajle Makefile ukazat' sleduyuschee:

     INSTALLS_SHLIB= yes
     LDCONFIG_DIRS=  %%PREFIX%%/lib/foo %%PREFIX%%/lib/bar
        

   Zamet'te, chto znachenie peremennoj LDCONFIG_DIRS peredaiotsya cherez
   sed(1), kak i vsio ostal'noe v pkg-plist, tak chto podstanovka znacheniya
   PLIST_SUB takzhe proishodit zdes'. Rekomenduetsya ispol'zovat' %%PREFIX%%
   dlya PREFIX, %%LOCALBASE%% dlya LOCALBASE i %%X11BASE%% dlya X11BASE.

     ----------------------------------------------------------------------

                              Chapter 6. MASTERDIR

   Esli vashemu portu trebuetsya postroenie dovol'no razlichayuschihsya
   versij pakadzhej cherez peremennuyu (zadayuschuyu, naprimer, razreshenie,
   ili razmer bumagi), kotoraya prinimaet razlichnye znacheniya, sozdajte
   dlya kazhdogo pakadzha otdel'nyj podkatalog, chtoby pol'zovatelyam bylo
   legche opredelit', kakim pakadzhem vospol'zovat'sya, no poprobujte
   ispol'zovat' sovmestno mezhdu portami kak mozhno bol'she fajlov. V
   tipichnom sluchae vam potrebuyutsya tol'ko ochen' korotkie fajly Makefile
   vo vseh katalogah, krome odnogo, esli vy budete ispol'zovat' peremennye s
   umom. V otdel'nyh fajlah Makefiles vy mozhete ispol'zovat' peremennuyu
   MASTERDIR dlya ukazaniya kataloga, v kotorom nahodyatsya vse ostal'nye
   fajly. Takzhe ispol'zujte peremennuyu kak chast' PKGNAMESUFFIX, chtoby
   pakadzhi imeli raznye imena.

   Prodemonstriruem `eto na primere. Vot chast' fajla
   japanese/xdvi300/Makefile:

     PORTNAME=       xdvi
     PORTVERSION=    17
     PKGNAMEPREFIX=  ja-
     PKGNAMESUFFIX=  ${RESOLUTION}
      :
     # default
     RESOLUTION?=   300
     .if ${RESOLUTION} != 118 && ${RESOLUTION} != 240 && \
            ${RESOLUTION} != 300 && ${RESOLUTION} != 400
            @${ECHO} "Error: invalid value for RESOLUTION: \"${RESOLUTION}\""
            @${ECHO} "Possible values are: 118, 240, 300 (default) and 400."
            @${FALSE}
     .endif
        

   Katalog japanese/xdvi300 soderzhit takzhe vse obychnye patchi, fajly dlya
   pakadzha i tak dalee. Esli vy vvedete zdes' komandu make, ona voz'met v
   kachestve razresheniya znachenie po umolchaniyu (300) i postroit port
   obychnym obrazom.

   Dlya drugogo razresheniya privedem polnyj xdvi118/Makefile:

     RESOLUTION= 118
     MASTERDIR=  ${.CURDIR}/../xdvi300
    
     .include "${MASTERDIR}/Makefile"

   (xdvi240/Makefile i xdvi400/Makefile pohozhi). Zadanie MASTERDIR govorit
   bsd.port.mk, chto obychnyj nabor podkatalogov tipa FILESDIR i SCRIPTDIR
   nahoditsya v kataloge xdvi300. Strochka RESOLUTION=118 pereopredelyat
   stroku RESOLUTION=300 v fajle xdvi300/Makefile i port budet postroen s
   razresheniem 118.

     ----------------------------------------------------------------------

                   Chapter 7. Versii dinamicheskih bibliotek

   Pervym delom prochtite, pozhalujsta, nashi pravila numeracii versij
   dinamicheskih bibliotek dlya ponimaniya togo, chto delat' s versiyami
   sovmestno ispol'zuemyh bibliotek voobsche. Ne polagajtes' slepo na to,
   chto avtory programmnogo obespecheniya znayut, chto tvoryat; mnogie `eto
   ne ponimayut. Ochen' vazhno s tochnost'yu sledovat' vsem `etim pravilam,
   tak kak my poluchaem dostatochno unikal'nuyu situaciyu, kogda pytaemsya
   imet' neskol'ko naborov potencial'no nesovmestimyh programmnyh paketov.
   Nevnimatel'noe vklyuchenie portov vyzyvalo bol'shie problemy otnositel'no
   sovmestno ispol'zuemyh bibliotek v proshlom (vy kogda libo zadumyvalis',
   pochemu port jpeg-6b imeet biblioteku versii 9?). Esli ne uvereny,
   poshlite soobschenie po adresu Spisok rassylki, posvyaschennyj Portam
   FreeBSD <freebsd-ports@FreeBSD.org>. V bol'shinstve sluchaev vasha rabota
   zakanchivaetsya opredeleniem pravil'nogo nomera dinamicheskoj biblioteki i
   sozdaniem sootvetstvuyuschih patchej dlya realizacii `etogo.

     ----------------------------------------------------------------------

                        Chapter 8. Stranicy Spravochnika

   Peremennye MAN[1-9LN] avtomaticheski dobavyat lyubye stranicy Spravochnika
   k fajlu pkg-plist (`eto oznachaet, chto vam ne nuzhno ukazyvat' stranicy
   Spravochnika v fajle pkg-plist--obratites' k glave o generacii fajla PLIST
   dlya polucheniya bolee podrobnoj informacii). `Eto takzhe pozvolyaet na
   `etape ustanovki avtomaticheski upakovyvat' i raspakovyvat' stranicy
   Spravochnika v zavisimosti ot znacheniya peremennoj NOMANCOMPRESS v fajle
   /etc/make.conf.

   Esli vash port pytaetsya zadat' neskol'ko imen dlya stranic Spravochnika
   pri pomoschi simvolicheskih ili zhestkih ssylok, to vy dolzhny
   ispol'zovat' peremennuyu MLINKS, chtoby ukazat' na `eto. Ssylka,
   ustanovlennaya vashim portom, budet unichtozhena i sozdana zanovo
   scenariem bsd.port.mk dlya proverki togo, chto ona ukazyvaet na pravil'nyj
   fajl. Lyubye stranicy Spravochnika, perechislennye v peremennoj MLINKS, ne
   dolzhny figurirovat' v fajle pkg-plist.

   Dlya ukazaniya togo, chto stranicy Spravochnika nuzhno szhimat' vo vremya
   ustanovki, ispol'zujte peremennuyu MANCOMPRESSED. `Eta peremennaya mozhet
   prinimat' tri znacheniya - yes, no i maybe. yes oznachaet, chto stranicy
   Spravochnika ustanavlivayutsya uzhe szhatymi, no oznachaet, chto oni ne
   szhimayutsya i maybe oznachaet, chto programmnoe obespechenie prinimaet vo
   vnimanie znachenie peremennoj NOMANCOMPRESS, tak chto scenariyu
   bsd.port.mk nichego dopolnitel'no delat' ne nuzhno.

   Znachenie peremennoj MANCOMPRESSED avtomaticheski ustanavlivaetsya v yes,
   esli peremennaya USE_IMAKE zadana, a NO_INSTALL_MANPAGES net, i v
   znachenie no v protivnom sluchae. Vam ne nuzhno zadavat' ee yavno, esli
   znachenie po umolchaniyu podhodit vashemu portu.

   Esli vash port opredelyaet kornem dlya fajlov Spravochnika katalog,
   otlichnyj ot PREFIX, vy mozhete ispol'zovat' peremennuyu MANPREFIX, chtoby
   zadat' ego yavno. Krome togo, esli stranicy tol'ko nekotoryh razdelov
   pomeschayutsya v nestandartnoe mesto, naprimer, v sluchae portov modulej
   yazyka Perl, vy mozhete ustanovit' puti stranic Spravochnika
   individual'no, pri pomoschi MANsectPREFIX (gde sect prinimaet znacheniya
   1-9, L ili N).

   Esli stranicy Spravochnika pomeschayutsya v podkatalogi,
   sootvetstvuyuschie nekotoromu yazyku, to zadajte nazvanie yazyka yazyka v
   peremennoj MANLANG. Znachenie `etoj peremennoj po umolchaniyu ravno "" (to
   est' tol'ko anglijskij yazyk).

   Vot primer, v kotorom privodyatsya vse sluchai.

     MAN1=              foo.1
     MAN3=              bar.3
     MAN4=              baz.4
     MLINKS=        foo.1 alt-name.8
     MANLANG=       "" ja
     MAN3PREFIX=    ${PREFIX}/share/foobar
     MANCOMPRESSED= yes
        

   Zdes' ukazano, chto `etot port ustanavlivaet 6 fajlov:

     ${PREFIX}/man/man1/foo.1.gz
     ${PREFIX}/man/ja/man1/foo.1.gz
     ${PREFIX}/share/foobar/man/man3/bar.3.gz
     ${PREFIX}/share/foobar/man/ja/man3/bar.3.gz
     ${PREFIX}/man/man4/baz.4.gz
     ${PREFIX}/man/ja/man4/baz.4.gz
        

   Krome togo, fajl ${PREFIX}/man/man8/alt-name.8.gz mozhet byt', a mozhet i
   ne byt' ustanovlen vashim portom. V lyubom sluchae budet sozdana
   simvolicheskaya ssylka dlya ob"edineniya stranic Spravochnika foo(1) i
   alt-name(8).

     ----------------------------------------------------------------------

                   Chapter 9. Porty, kotorym trebuetsya Motif

   Suschestvuet mnogo prilozhenij, kotorym dlya kompilyacii trebuetsya
   biblioteka Motif (kotoruyu mozhno priobresti u neskol'kih postavschikov,
   hotya est' i besplatnyj klon v x11-toolkits/lesstif, o kotorom govoritsya,
   chto s nim rabotaet mnozhestvo prilozhenij). Tak kak `eto rasprostranennyj
   paket i ego licenzionnoe soglashenie obychno pozvolyaet rasprostranenie
   staticheski skomponovannyh binarnyh fajlov, my obratili osoboe vnimanie na
   rabotu s portami, kotorym trebuetsya Motif, tak chtoby my mogli legko
   sozdavat' binarnye fajly, skomponovannye kak dinamicheski (dlya teh, kto
   stroit prilozhenie iz porta), tak i staticheski (dlya teh, kto budet
   rasprostranyat' prilozheniya v vide pakadzhej).

     ----------------------------------------------------------------------

                              9.1. REQUIRES_MOTIF

   Esli vashemu portu trebuetsya Motif, zadajte `etu peremennuyu v fajle
   Makefile. `Eto ne pozvolit lyudyam, u kotoryh net sobstvennoj kopii Motif,
   dazhe popytat'sya postroit' port.

     ----------------------------------------------------------------------

                                 9.2. MOTIFLIB

   `Eta peremennaya budet ustanovlena scenariem bsd.port.mk v
   sootvetstvuyuschee znachenie, sootvetstvuyuschee biblioteke Motif.
   Pozhalujsta, izmenite ishodnye teksty dlya ispol'zovaniya `etoj peremennoj
   tam, gde upominaetsya biblioteka Motif, v Makefile ili Imakefile.

   Mogut byt' dva sluchaya:

     * Eli port obraschaetsya k biblioteke Motif kak -lXm v svoih fajlah
       Makefile ili Imakefile, prosto podstav'te vmesto `etih obraschenij
       ${MOTIFLIB}.

     * Esli port ispol'zuet XmClientLibs v svoem fajle Imakefile, izmenite
       `eto obraschenie na ${MOTIFLIB} ${XTOOLLIB} ${XLIB}.

   Zamet'te, chto peremennaya MOTIFLIB (kak pravilo) raskryvaetsya v
   -L/usr/X11R6/lib -lXm ili /usr/X11R6/lib/libXm.a, tak chto net nuzhdy
   vperedi dobavlyat' -L ili -l.

     ----------------------------------------------------------------------

                          Chapter 10. SHrifty dlya X11

   Esli vash port ustanavlivaet shrifty dlya sistemy X Window, pomestite ih v
   katalog X11BASE/lib/X11/fonts/local. `Etot katalog vpervye poyavilsya v
   XFree86 release 3.3.3. Esli on ne suschestvuet, to, bud'te dobry, sozdajte
   ego i vyvedite soobschenie, obraschayuschee vnimanie pol'zovatelya na
   neobhodimost' obnovit' XFree86 do versii 3.3.3 ili bolee novoj, ili po
   krajnej mere dobavit' `etot katalog k marshrutu poiska shriftov v fajle
   /etc/XF86Config.

     ----------------------------------------------------------------------

                        Chapter 11. Fajly v formate info

   Novaya versiya texinfo (vklyuchennaya v 2.2.2-RELEASE i vyshe), soderzhit
   utilitu s imenem install-info dlya ustanovki i udaleniya komponent v fajle
   dir. Esli vash port ustanavlivaet kakie-libo dokumenty v formate info, to,
   pozhalujsta, sledujte `etim instrukciyam, chtoby vash port/pakadzh
   korrektno obnovlyal pol'zovatel'skij fajl PREFIX/info/dir. (Prinosim
   izvineniya za razmer `etogo razdela, no `eto neobhodimo dlya ob"edineniya
   vseh fajlov info vmeste. Esli `eto delaetsya pravil'no, to budet sozdan
   prekrasnyj spisok, tak chto prislushajtes' k moim sovetam!

   Vo-pervyh, vot chto vy (kak sozdatel' porta) dolzhny znat'

     % 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: `Eta programma na budet na samom dele ustanavlivat' info-fajly;
     ona prosto dobavlyaet ili udalyaet `elementy spiska v fajle dir.

   Dalee privoditsya procedura, sostoyaschaya iz semi shagov, dlya
   preobrazovaniya portov k ispol'zovaniyu install-info. V kachestve primera
   budet ispol'zovat'sya editors/emacs.

    1. Posmotrite v ishodnye teksty dokumentov v formate texinfo i izmenite
       ih, vstaviv direktivy @dircategory i @direntry v fajly, v kotoryh oni
       otsutstvuyut. Vot chast' moego patcha:

     --- ./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
      :
        

       Format dolzhen byt' dlya vas samoochevidnym. Mnogie avtory ostavlyayut
       sredi ishodnyh tekstov fajl dir, soderzhaschij vse komponenty, kotorye
       vam nuzhny, tak chto prover'te esche raz pered tem, kak pytat'sya
       pisat' svoi sobstvennye. Takzhe obyazatel'no vzglyanite na porty,
       svyazannye s vashim i privedite v sootvetstvie imena razdelov i format
       komponent (my rekomenduem, chtoby vse tekstovye stroki nachinalis' s
       4j pozicii tabulyacii).

         Note: Zamet'te, chto vy mozhete ukazat' tol'ko odnu komponentu info
         dlya fajla iz-za oshibki v rabote utility install-info --delete,
         kotoraya udalyaet tol'ko pervuyu komponentu, dazhe esli vy ukazhete
         neskol'ko komponent v razdele <@direntry>.

       Vy mozhete peredat' komponenty dir utilite install-info v kachestve
       argumentov (--section i --entry), vmesto togo, chtoby izmenyat'
       ishodnyj tekst fajlov texinfo, Navernoe, `eto ne podhodit dlya portov,
       potomu chto vam nuzhno budet produblirovat' informaciyu v treh mestah
       (Makefile i @exec/@unexec v fajle pkg-plist; smotrite nizhe). Odnako,
       esli fajly info imeyut yaponskuyu (ili druguyu mnogobajtovuyu
       kodirovku), vam nuzhno budet peredat' dopolnitel'nye argumenty komande
       install-info, potomu chto makeinfo ne mozhet rabotat' s takimi fajlami
       texinfo. (Posmotrite fajly Makefile i pkg-plist v kataloge
       japanese/skk na predmet togo, kak `eto sdelat').

    2. Vernites' obratno v katalog s portom, vypolnite komandu make clean;
       make i prover'te, chto fajly info byli vnov' sgenerirovany iz
       ishodnogo teksta texinfo. Tak kak ishodnye teksty texinfo yavlyayutsya
       bolee novymi fajlami, chem fajly v formate info, to oni dolzhny byt'
       perestroeny, kogda vy vypolnyaete komandu make; odnako mnogie fajly
       Makefile ne vklyuchayut pravil'nye zavisimosti dlya generacii fajlov
       info. V sluchae emacs prishlos' izmenit' glavnyj fajl Makefile.in,
       chtoby proishodil perehod v podkatalog man dlya peregeneracii fajlov
       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)
        

       Vtoroj blok izmenenij byl neobhodim iz-za togo, chto cel' po
       umolchaniyu v podkataloge man nazyvaetsya info, kogda kak glavnyj fajl
       Makefile vyzyvaet cel' all. Byla takzhe udalena ustanovka
       informacionnogo fajla info, potomu chto v kataloge /usr/share/info
       uzhe imeetsya fajl s takim zhe imenem (`etot patch zdes' ne pokazan).

    3. Esli v fajle Makefile est' procedura ustanovki fajla dir, to udalite
       `etu proceduru. Vashemu portu delat' `etogo ne nado. Krome togo,
       udalite vse komandy, kotorye budut pytat'sya tvorit' chto-to s fajlom
       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. (`Etot shag neobhodim, esli tol'ko vy modificiruete uzhe
       suschestvuyuschij port.) Vzglyanite na fajl pkg-plist i udalite vse,
       chto pytaetsya izmenit' fajl info/dir. `Eto mozhet byt' takzhe v fajle
       pkg-install ili v kakom-to drugom fajle, tak chto ischite tschatel'no.

     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. Dobav'te cel' post-install v fajl Makefile dlya vyzova install-info s
       imenami ustanovlennyh fajlov info v kachestve parametrov. (Bol'she ne
       nuzhno sozdavat' fajl dir samostoyatel'no; Programma install-info
       avtomaticheski sozdast `etot fajl, esli on ne suschestvuet.)

     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. Otredaktirujte fajl pkg-plist, dobaviv analogichnye direktivy @exec,
       ne zabyv o @unexec dlya 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: Komandy @unexec install-info --delete ukazyvayutsya do
         sobstvenno fajlov info, chtoby oni mogli prochest' fajly. Krome
         togo, komandy @exec install-info sleduyut za fajlami info i komandoj
         @exec, kotoraya sozdaet fajl dir file.

    7. Protestirujte vashu rabotu i polyubujtes' eyu. :-). Proveryajte fajl
       dir do i posle vypolneniya kazhdogo shaga.

     ----------------------------------------------------------------------

                            Chapter 12. Fajly pkg-*

   Est' neskol'ko priiomov raboty s fajlami pkg-*, kotorye my eschio ne
   opisali, no oni inogda mogut byt' ochen' kstati.

     ----------------------------------------------------------------------

                               12.1. pkg-message

   Esli vam nuzhno vyvesti soobschenie dlya cheloveka, ustanavlivayuschego
   prilozhenie, to vy mozhete pomestit' soobschenie v fajl pkg-message. `Eta
   vozmozhnost' chasto okazyvaetsya poleznoj dlya vyvoda dopolnitel'nyh
   shagov ustanovki, kotorye nuzhno predprinyat' posle vypolneniya komandy
   pkg_add, ili dlya vyvoda informacii o licenzirovanii.

     Note: Fajl pkg-message ne nuzhno dobavlyat' v pkg-plist. I on ne budet
     avtomaticheski vyvodit'sya, esli pol'zovatel' ispol'zuet port, a ne
     pakadzh, tak chto vy dolzhny budete sami vyvodit' ego pri vypolnenii
     celi post-install.

     ----------------------------------------------------------------------

                               12.2. pkg-install

   Esli pri ustanovke binarnogo pakadzha po komande pkg_add vashemu portu
   nuzhno vypolnit' kakie-to dopolnitel'nye dejstviya ili komandy, to vy
   mozhete sdelat' `eto s pomosch'yu skripta pkg-install. `Etot skript budet
   avtomaticheski dobavlen k pakadzhu, i budet dvazhdy zapuskat'sya po
   komande pkg_add. Pervyj raz v vide ${SH} pkg-install ${PKGNAME}
   PRE-INSTALL, a vtoroj raz kak ${SH} {PKGNAME} POST-INSTALL. Dlya
   raspoznavaniya togo, v kakom rezhime zapuschen skript, mozhno ispol'zovat'
   parametr $2. Peremennaya okruzheniya PKG_PREFIX budet prinimat' znachenie,
   sootvetstvuyuschee katalogu, v kotoryj ustanavlivaetsya pakadzh.
   Dopolnitel'naya informaciya nahoditsya na stranice Spravochnika o komande
   pkg_add(1).

     Note: `Etot skript ne zapuskaetsya avtomaticheski, esli vy
     ustanavlivaete port komandoj make install. Esli zhe vam dejstvitel'no
     neobhodimo ego zapustit', to zapustite ego yavno iz fajla Makefile
     porta.

     ----------------------------------------------------------------------

                                 12.3. pkg-req

   Esli vashemu portu nuzhno opredelyat', dolzhen li on ustanavlivat'sya ili
   net, to vy mozhete sozdat' skript ``neobhodimosti'' pkg-req. On budet
   vyzvan avtomaticheski v moment ustanovki/udaleniya dlya opredeleniya togo,
   dolzhny li oni real'no vypolnyat'sya.

   Skript budet zapuschen v processe ustanovki komandoj pkg_add, kak pkg-req
   ${PKGNAME} INSTALL. V processe udaleniya on budet zapuschen komandoj
   pkg_delete, kak pkg-req ${PKGNAME} DEINSTALL.

     ----------------------------------------------------------------------

    12.4. Izmenenie soderzhimogo pkg-plist v zavisimosti ot make-peremennyh

   Nekotorye porty, v chastnosti, porty p5-, dolzhny menyat' soderzhimoe
   svoih fajlov pkg-plist v zavisimosti ot togo, s kakimi parametrami oni
   byli otkonfigurirovany (ili v zavisimosti ot versii yazyka perl v sluchae
   portov p5-). CHtoby oblegchit' `etot process, lyubye vhozhdeniya
   klyuchevyh slov %%OSREL%%, %%PERL_VER%% i %%PERL_VERSION%% v fajle
   pkg-plist budut zamenyat'sya sootvetstvuyuschimi znacheniyami. Znacheniem
   %%OSREL%% yavlyaetsya nomer versii operacionnoj sistemy (naprimer, 2.2.7).
   %%PERL_VERSION%% oboznachaet polnyj nomer versiya perl (naprimer,
   5.00502), a %%PERL_VER%% - nomer versii perl bez nomera patcha (naprimer,
   5.005).

   Esli vam nuzhno sdelat' drugie podstanovki, vy mozhete ukazat' v
   peremennoj PLIST_SUB spisok par VAR=VALUE, i vse vhozhdeniya %%VAR%% v
   fajle pkg-plist budut zamenyat'sya na znachenie VALUE.

   Naprimer, esli u vas imeetsya port, kotoryj ustanavlivaet mnogo fajlov v
   katalog, zavisyaschij ot versii, vy mozhete zadat' nechto tipa

     OCTAVE_VERSION= 2.0.13
     PLIST_SUB=  OCTAVE_VERSION=${OCTAVE_VERSION}
        

   v fajle Makefile i ispol'zovat' %%OCTAVE_VERSION%% vezde, gde nuzhno
   ukazat' nomer versii v fajle pkg-plist. Takim obrazom, pri obnovlenii
   porta vam ne nuzhno budet menyat' desyatki (a v nekotoryh sluchayah i
   sotni) strok v fajle pkg-plist.

   `Eta podstanovka (tak zhe, kak i dobavlenie lyubyh stranic Spravochnika)
   budet sdelana mezhdu vypolneniem celej do-install i post-install,
   posredstvom chteniya fajla PLIST i zapis'yu v fajl TMPPLIST (po
   umolchaniyu `eto fajl WRKDIR/.PLIST.mktmp). Tak chto esli vash port stroit
   PLIST na letu, delajte `eto vo vremya ili do vypolneniya celi do-install.
   Krome togo, esli vashemu portu trebuetsya otredaktirovat'
   poluchayuschijsya fajl, delajte `eto v celi post-install izmeneniem fajla
   TMPPLIST.

     ----------------------------------------------------------------------

                       12.5. Izmenenie imion fajlov pkg-*

   Vse imena fajlov pkg-* opredelyayutsya s pomosch'yu peremennyh, tak chto
   vy mozhete izmenit' ih, esli `eto nuzhno, v vashem fajle Makefile. `Eto
   osobenno polezno, esli vy ispol'zuete odni i te zhe fajly pkg-* sovmestno
   mezhdu neskol'kimi portami ili pishete v odin iz vysheperechislennyh
   fajlov (v glave o zapisi v katalogi, otlichnye ot WRKDIR ob"yasneno,
   pochemu ne rekomenduetsya osuschestvlyat' zapis' neposredstvenno v fajly
   pkg-*.

   Vot spisok imion peremennyh i ih znachenij po umolchaniyu. (Znachenie
   PKGDIR po umolchaniyu ravno ${MASTERDIR}.)

   Peremennaya  Znachenie po umolchaniyu 
   COMMENT      ${PKGDIR}/pkg-comment    
   DESCR        ${PKGDIR}/pkg-descr      
   PLIST        ${PKGDIR}/pkg-plist      
   PKGINSTALL   ${PKGDIR}/pkg-install    
   PKGDEINSTALL ${PKGDIR}/pkg-deinstall  
   PKGREQ       ${PKGDIR}/pkg-req        
   PKGMESSAGE   ${PKGDIR}/pkg-message    

   Pozhalujsta, izmenyajte znacheniya `etih peremennyh, a ne pereopredelyajte
   PKG_ARGS. Esli vy izmenite znachenie peremennyh PKG_ARGS, to `eti fajly
   pri ustanovke iz porta budut ustanovleny v katalog /var/db/pkg
   nekorrektno.

     ----------------------------------------------------------------------

                     Chapter 13. Problemy s licenzirovaniem

   Nekotorye programmnye pakety imeyut ogranichennye licenzii ili ih
   ispol'zovanie v nekotoryh stranah mozhet okazat'sya (kak narushenie
   patenta). To, chto my mozhem s `etim sdelat', sil'no zavisit ot tochnyh
   formulirovok konkretnyh licenzionnyh soglashenij.

     Note: Na vas, kak na cheloveka, portiruyuschego prilozhenie, lozhitsya
     obyazannost' prochest' licenzionnye soglasheniya na programmnoe
     obespechenie i udostoverit'sya, chto proekt FreeBSD ne budet yavlyat'sya
     ih narushitelem, esli budet zanimat'sya rasprostraneniem ishodnogo koda
     ili v otkompilirovannom vide po FTP ili na kompakt-diskah. Esli u vas
     voznikli somneniya, to, pozhalujsta, obratites' v adres Spisok rassylki,
     posvyaschennyj Portam FreeBSD <freebsd-ports@FreeBSD.org>.

   Imeetsya dve peremennye, kotorye vy mozhete zadat' v Makefile v naibolee
   chasto vstrechayuschihsya situaciyah:

    1. Esli port imeet licenziyu tipa ``ne prodavat' dlya dostizheniya
       pribyli'', zadajte v peremennoj NO_CDROM stroku, opisyvayuschuyu
       prichinu `etogo. My ne budem pomeschat' takie porty na kompakt-disk vo
       vremya vypuska reliza. Distributivnyj fajl i pakadzh budut dostupny po
       FTP.

    2. Esli poluchayuschijsya pakadzh dolzhen stroit'sya kazhdyj raz
       unikal'nym obrazom ili poluchayuschijsya binarnyj pakadzh ne mozhet
       rasprostranyat'sya po licenzionnym soobrazheniyam, to v peremennoj
       NO_PACKAGE ukazhite stroku, opisyvayuschuyu prichinu `etogo. My ne
       budem pomeschat' takie pakadzhi ni na FTP-server, ni na kompakt-disk
       vo vremya vypuska reliza. Odnako distributivnyj fajl budet pomeschen
       na oba nositelya.

    3. Esli port imeet yuridicheskie ogranicheniya na ispol'zovaniyu
       (naprimer, patentovannoe programmnoe obespechenie) ili imeet licenziyu
       ``ne dlya kommercheskogo ispol'zovaniya'', to v peremennoj RESTRICTED
       ukazhite stroku, opisyvayuschuyu prichinu `etogo. Dlya takih portov ni
       distributivnyj fajl, ni pakadzhi ne budut dostupny dazhe s nashih
       serverov FTP.

     Note: Licenziya GNU General Public License (GPL), kak versii 1, tak i
     versii 2, dlya portov vyzvat' problem ne dolzhna.

     Note: Esli vy yavlyaetes' kommitterom, obyazatel'no obnovite takzhe fajl
     ports/LEGAL.

     ----------------------------------------------------------------------

                             Chapter 14. Obnovlenie

   Esli vy zametite, chto vash port ustarel po sravneniyu s poslednej
   avtorskoj versiej, pervym delom prover'te, chto u vas nahoditsya samaya
   poslednyaya versiya porta. Vy mozhete najti ih v kataloge
   ports/ports-current na zerkal'nyh serverah FTP. Krome togo, vy mozhete
   ispol'zovat' CVSup dlya podderzhki aktual'nosti vsej Kollekcii portov, kak
   `eto opisano v Rukovodstve.

   Sleduyuschij shag - `eto posylka pis'ma cheloveku, veduschemu `etot port
   (majntajneru), esli on ukazan v fajle Makefile porta. `Etot chelovek
   mozhet uzhe rabotat' nad obnovleniem, ili imet' prichinu ne obnovlyat'
   port pryamo sejchas (naprimer, iz-za problem so stabil'nost'yu
   funkcionirovaniya novoj versii).

   Esli veduschij poprosil sdelat' obnovlenie vas, ili takoj persony ne
   nashlos', to, pozhalujsta, vypolnite obnovlenie i poshlite rekursivnyj
   diff-fajl (podojdet kak v unificirovannom, tak i kontekstno-zavisimom
   formate, odnako kommittery predpochitayut unificirovannyj format)
   sravneniya novogo i starogo katalogov nam (naprimer, esli katalog s
   modificirovannym portom nazyvaetsya superedit, a original'nyj,
   sovpadayuschij s nahodyaschimsya v nashem dereve portov, superedit.bak, to
   poshlite nam rezul'tat vypolneniya komandy diff -ruN superedit.bak
   superedit). Pozhalujsta, prover'te rezul'tat raboty `etoj komandy, tak,
   chtoby vse izmeneniya imeli smysl. Luchshij sposob poslat' nam diff-fajl -
   vklyuchit' ego v posylku po komande send-pr(1) (kategoriya ports). Bud'te
   dobry, v soobschenii otmet'te vse dobavlennye ili udalennye fajly, tak kak
   oni budut neposredstvenno ukazany CVS pri vypolnenii operacii kommita.
   Esli diff-fajl imeet razmer, prevyshayuschij 20KB, sozhmite ego i
   obrabotajte utilitoj uuencode; v protivnom sluchae prosto vklyuchite ego
   kak est' v PR.

     Note: Povtoryaem esche raz - dlya posylki obnovlenij suschestvuyuschih
     portov ispol'zujte utilitu diff(1), a ne shar(1)!

     ----------------------------------------------------------------------

                 Chapter 15. CHto nuzhno, a chto nel'zya delat'

   Vot spisok chasto vstrechayuschihsya dejstvij, kotorye nuzhno i kotorye
   nel'zya delat' vo vremya processa portirovaniya. Vy dolzhny proveryat'
   vash port po `etomu spisku, i vy takzhe mozhete proveryat' porty v baze
   soobschenij PR, kotorye prislany drugimi lyud'mi. Prisylajte lyubye
   kommentarii o portah, kotorye vy proverili, tak, kak `eto opisano v glave
   o Soobscheniyah ob oshibkah i obschih zamechaniyah. Proverka portov v baze
   soobschenij PR pozvolit nam bystree kommittit' ih i udostoverit'sya, chto
   vy znaete, chto delaete.

     ----------------------------------------------------------------------

            15.1. Udalenie otladochnoj informacii v binarnyh fajlah

   Udalyajte otladochnuyu informaciyu iz binarnyh fajlov. Esli v ishodnyh
   tekstah fajly uzhe usekaetsya, `eto prekrasno; v protivnom sluchae vy
   dolzhny dobavit' v cel' post-install pravilo dlya vypolneniya `etoj
   operacii samim. Vot primer:

     post-install:
         strip ${PREFIX}/bin/xdl
          

   Dlya proverki togo, udalena li otladochnaya informaciya iz ustanovlennogo
   vypolnimogo fajla, vypolnite komandu file(1). Esli utilita ne vydast
   stroku not stripped, to fajl uzhe obrabotan.

     ----------------------------------------------------------------------

                            15.2. Makrosy INSTALL_*

   Ispol'zujte makrosy, kotorye est' v fajle bsd.port.mk dlya obespecheniya
   pravil'nyh prav dostupa i vladeniya fajlov v svoih celyah *-install.

     * INSTALL_PROGRAM - `eto komanda dlya ustanovki binarnyh vypolnimyh
       fajlov.

     * INSTALL_SCRIPT - `eto komanda dlya ustanovki vypolnimyh skriptov.

     * INSTALL_DATA - `eto komanda dlya ustanovki sovmestno ispol'zuemyh
       fajlov dannyh.

     * INSTALL_MAN - `eto komanda dlya ustanovki stranic Spravochnika i
       drugoj dokumentacii (nikakih fajlov ona ne szhimaet).

   V osnove raboty `etih makrosov lezhit komanda install so vsemi
   sootvetstvuyuschimi flagami. Smotrite primer ih ispol'zovaniya nizhe.

     ----------------------------------------------------------------------

                                  15.3. WRKDIR

   Ne pishite nichego v fajly vne kataloga WRKDIR. Katalog WRKDIR yavlyaetsya
   edinstvennym mestom, kotoroe garantirovanno budet dostupno dlya zapisi vo
   vremya postroeniya porta (obratites' k glave o kompilyacii portov s
   kompakt-diska za primerom postroeniya portov iz dereva, dostupnogo tol'ko
   dlya chteniya). Esli vam nuzhno izmenit' kakoj-libo iz fajlov pkg-*,
   sdelajte `eto, pereopredeliv peremennuyu, no ne perezapisyvaya ih.

     ----------------------------------------------------------------------

                               15.4. WRKDIRPREFIX

   Dobejtes' togo, chtoby vash port prinimal vo vnimanie znachenie peremennoj
   WRKDIRPREFIX. Bol'shinstvo portov ob `etom ne zabotyatsya. V chastnosti,
   esli vy obraschaetes' k katalogu WRKDIR drugogo porta, zamet'te, chto ego
   pravil'nym mestopolozheniem yavlyaetsya
   WRKDIRPREFIXPORTSDIR/subdir/name/work not PORTSDIR/subdir/work ili
   .CURDIR/../../subdir/name/work ili chto-to podobnoe.

   Krome togo, esli vy sami zadaete WRKDIR, to dolzhny postavit' pered nim
   znak ${WRKDIRPREFIX}${.CURDIR}.

     ----------------------------------------------------------------------

               15.5. Razlichenie operacionnyh sistem i versij OS

   Vy mozhete vstretit'sya s kodom, kotoryj trebuet modifikacij ili uslovnoj
   kompilyacii v zavisimosti ot togo, s kakoj versiej Unix on rabotaet. Esli
   vam nudno sdelat' takie izmeneniya v kode dlya uslovnoj kompilyacii, to vy
   dolzhny delat' izmeneniya kak mozhno bolee obschimi, chtoby my mogli
   perenesti kod na sistemy FreeBSD versij 1.x, a takzhe i na drugie sistemy
   BSD, takie, kak 4.4BSD ot CSRG, BSD/386, 386BSD, NetBSD, i OpenBSD.

   Predpochtitel'nym sposobom otdeleniya koda dlya 4.3BSD/Reno (1990) i i
   bolee novyh versij BSD yavlyaetsya ispol'zovanie makrosa BSD,
   opredelennogo v fajle <sys/param.h>. Horosho, esli `etot fajl uzhe
   vklyuchen; esli `eto ne tak, to dobav'te takoj kod:

     #if (defined(__unix__) || defined(unix)) && !defined(USG)
     #include <sys/param.h>
     #endif
          

   v sootvetstvuyuschem meste fajla .c. My nadeemsya, chto vse sistemy, v
   kotoryh opredeleny `eti dve konstanty, imeyut fajl sys/param.h. Esli vy
   obnaruzhite sistemu, v kotoroj `eto ne tak, my hotim znat'. Poshlite,
   pozhalujsta, pis'mo na adres Spisok rassylki, posvyaschennyj Portam
   FreeBSD <freebsd-ports@FreeBSD.org>.

   Drugim sposobom yavlyaetsya ispol'zovanie dlya `etogo stilya GNU Autoconf:

     #ifdef HAVE_SYS_PARAM_H
     #include <sys/param.h>
     #endif
          

   Ne zabud'te dobavit' -DHAVE_SYS_PARAM_H k CFLAGS v fajle Makefile pri
   ispol'zovanii `etogo metoda.

   Kak tol'ko vy vklyuchite sys/param.h, to smozhete vospol'zovat'sya
   sleduyuschim:

     #if (defined(BSD) && (BSD >= 199103))
          

   dlya opredeleniya togo, kompiliruetsya li programma na osnove koda Net2
   versii 4.3 ili bolee novoj versii (naprimer, FreeBSD 1.x, 4.3/Reno, NetBSD
   0.9, 386BSD, BSD/386 1.1 i nizhe).

   Ispol'zujte:

     #if (defined(BSD) && (BSD >= 199306))
          

   dlya opredeleniya togo, kompiliruetsya li programma na osnove koda 4.4 ili
   bolee novoj (naprimer, FreeBSD 2.x, 4.4, NetBSD 1.0, BSD/386 2.0 i vyshe).

   Znachenie makrosa BSD ravno 199506 dlya koda na osnove 4.4BSD-Lite2. Ono
   zadano tol'ko dlya informacionnoj celej. Ono ne dolzhno ispol'zovat'sya
   dlya razlichiya mezhdu versiyami FreeBSD, osnovannymi na kode 4.4-Lite i
   versiyami, v kotorye vklyucheny izmeneniya iz 4.4-Lite2. Vmesto `etogo
   nuzhno ispol'zovat' makros __FreeBSD__.

   Rezhe ispol'zujte:

     * __FreeBSD__ opredelen vo vseh versiyah FreeBSD. Ispol'zujte ego, esli
       izmenenie, vnosimoe vami, kasaetsya tol'ko FreeBSD. Problemy
       portirovaniya, takie, kak ispol'zovanie sys_errlist[] ili strerror()
       yavlyayutsya osobennostyami sistem BSD, a ne FreeBSD.

     * Vo FreeBSD 2.x, znachenie __FreeBSD__ opredeleno kak 2. V bolee rannih
       versiyah ono ravno 1. V bolee pozdnih versiyah `eto znachenie
       uvelichivaetsya v sootvetstvii so starshim nomerom versii sistemy.

     * Esli vam nuzhno otdelit' sistemy FreeBSD 1.x ot sistem FreeBSD 2.x ili
       3.x, pravil'nym sposobom, kak pravilo, budet ispol'zovanie makrosa
       BSD, opisannoe vyshe. Esli `eto dejstvitel'no izmenenie, specifichnoe
       dlya FreeBSD (naprimer, osobaya opciya dlya dinamicheskoj biblioteki
       pri ispol'zovanii ld), to dlya raspoznavaniya sistem FreeBSD 2.x i
       bolee pozdnih normal'nym budet ispol'zovanie __FreeBSD__ i #if
       __FreeBSD__ > 1. Esli vam nuzhno bolee tochnoe opredelenie versij
       FreeBSD, nachinaya s 2.0-RELEASE, to vy mozhete ispol'zovat'
       sleduyuschee:

     #if __FreeBSD__ >= 2
     #include <osreldate.h>
     #    if __FreeBSD_version >= 199504
          /* 2.0.5+ release specific code here */
     #    endif
     #endif
          

       Reliz                                           __FreeBSD_version      
       2.0-RELEASE                                     119411                 
       2.1-CURRENT                                     199501, 199503         
       2.0.5-RELEASE                                   199504                 
       2.2-CURRENT do vyhoda 2.1                       199508                 
       2.1.0-RELEASE                                   199511                 
       2.2-CURRENT do vyhoda 2.1.5                     199512                 
       2.1.5-RELEASE                                   199607                 
       2.2-CURRENT do vyhoda 2.1.6                     199608                 
       2.1.6-RELEASE                                   199612                 
       2.1.7-RELEASE                                   199612                 
       2.2-RELEASE                                     220000                 
       2.2.1-RELEASE                                   220000 (bez izmenenij) 
       2.2-STABLE posle vyhoda 2.2.1-RELEASE           220000 (bez izmenenij) 
       2.2-STABLE posle vklyucheniya texinfo-3.9       221001                 
       2.2-STABLE posle vklyucheniya top               221002                 
       2.2.2-RELEASE                                   222000                 
       2.2-STABLE posle vyhoda 2.2.2-RELEASE           222001                 
       2.2.5-RELEASE                                   225000                 
       2.2-STABLE posle vyhoda 2.2.5-RELEASE           225001                 
       2.2-STABLE posle poyavleniya ldconfig -R        225002                 
       2.2.6-RELEASE                                   226000                 
       2.2.7-RELEASE                                   227000                 
       2.2-STABLE posle vyhoda 2.2.7-RELEASE           227001                 
       2.2-STABLE posle izmeneniya v semctl(2)         227002                 
       2.2.8-RELEASE                                   228000                 
       2.2-STABLE posle vyhoda 2.2.8-RELEASE           228001                 
       3.0-CURRENT do izmeneniya v mount(2)            300000                 
       3.0-CURRENT posle izmeneniya v mount(2)         300001                 
       3.0-CURRENT posle izmeneniya v semctl(2)        300002                 
       3.0-CURRENT posle izmenenij v argumentah ioctl  300003                 
       3.0-CURRENT posle perehoda na format ELF        300004                 
       3.0-RELEASE                                     300005                 
       3.0-CURRENT posle vyhoda 3.0-RELEASE            300006                 
       3.0-STABLE posle razbieniya na vetki 3/4        300007                 
       3.1-RELEASE                                     310000                 
       3.1-STABLE posle vyhoda 3.1-RELEASE             310001                 
       3.1-STABLE posle izmeneniya v poryadke          310002                 
       sledovaniya konstruktorov/destruktorov v C++    
       3.2-RELEASE                                     320000                 
       3.2-STABLE                                      320001                 
       3.2-STABLE posle nesovmestimyh izmenenij v IPFW 320002                 
       i soketah                                       
       3.3-RELEASE                                     330000                 
       3.3-STABLE                                      330001                 
       3.3-STABLE posle dobavleniya mkstemp(3) v libc  330002                 
       3.4-RELEASE                                     340000                 
       3.4-STABLE                                      340001                 
       4.0-CURRENT posle poyavleniya vetki 3.4         400000                 
       4.0-CURRENT posle izmeneniya v rabote           400001                 
       dinamicheskogo komponovschika                   
       4.0-CURRENT posle izmeneniya v poryadke         400002                 
       sledovaniya konstruktorov/destruktorov v C++    
       4.0-CURRENT posle poyavleniya funkcii dladdr(3) 400003                 
       4.0-CURRENT posle ispravleniya oshibki v rabote 400004                 
       funkcii __deregister_frame_info dinamicheskogo  
       komponovschika (a takzhe 4.0-CURRENT posle      
       integracii EGCS 1.1.2)                          
       4.0-CURRENT posle izmeneniya interfejsa funkcii 400005                 
       suser(9) (a takzhe 4.0-CURRENT posle            
       poyavleniya newbus)                             
       4.0-CURRENT posle izmeneniya v registracii      400006                 
       cdevsw                                          
       4.0-CURRENT posle dobavleniya so_cred v         400007                 
       proverki na urovne soketov                      
       4.0-CURRENT posle dobavleniya obrabotchika      400008                 
       sistemnogo vyzova poll v libc_r                 
       4.0-CURRENT posle perehoda v yadre s tipa dev_t 400009                 
       na ukazatel' struct specinfo                    
       4.0-CURRENT posle ispravleniya dyry v           400010                 
       bezopasnosti jail(2)                            
       4.0-CURRENT posle izmeneniya v tipe dannyh      400011                 
       sigset_t                                        
       4.0-CURRENT posle perehoda na kompilyator GCC   400012                 
       2.95.2                                          
       4.0-CURRENT posle poyavleniya dobavlyaemyh      400013                 
       obrabotchikov ioctl rezhima linux               
       4.0-CURRENT posle zaimstvovaniya OpenSSL        400014                 
       4.0-CURRENT posle izmeneniya v C++ ABI          400015                 
       kompilyatora GCC 2.95.2 po umolchaniyu s        
       -fvtable-thunks na -fno-vtable-thunks           
       4.0-CURRENT posle zaimstvovaniya OpenSSH        400016                 
       4.0-RELEASE                                     400017                 
       4.0-STABLE posle poyavleniya 4.0-RELEASE        400018                 
       4.0-STABLE posle integracii koda biblioteki     400020                 
       libxpg4 v libc.                                 
       4.0-STABLE posle obnovleniya paketa Binutils do 400021                 
       versii 2.10.0, izmeneniya v sheme pometki       
       vypolnimyh fajlov ELF i vklyucheniya tcsh v     
       kachestve bazovogo komponenta.                  
       4.1-RELEASE                                     410000                 
       4.1-STABLE posle vyhoda 4.1-RELEASE             410001                 
       4.1-STABLE posle perenosa funkcii               410002                 
       setproctitle(3) iz biblioteki libutil v libc.   
       4.1.1-RELEASE                                   411000                 
       4.1.1-STABLE posle vyhoda 4.1.1-RELEASE         411001                 
       4.2-RELEASE                                     420000                 
       4.2-STABLE posle ob"edineniya libgcc.a i        420001                 
       libgcc_r.a, a takzhe sootvetstvuyuschih         
       izmenenij v komponovke GCC.                     
       4.3-RELEASE                                     430000                 
       4.3-STABLE posle poyavleniya wint_t.            430001                 
       4.3-STABLE posle dobavleniya API sostoyaniya    430002                 
       `elektropitaniya PCI.                           
       4.4-RELEASE                                     440000                 
       4.4-STABLE posle dobavleniya d_thread_t.        440001                 
       4.4-STABLE posle izmenenij v strukturu dlya     440002                 
       montirovaniya (`eto zatragivaet KLD fajlovyh    
       sistem).                                        
       4.4-STABLE posle importirovaniya                440003                 
       pol'zovatel'skih komponent smbfs.               
       5.0-CURRENT                                     500000                 
       5.0-CURRENT posle dobavleniya dopolnitel'nyh    500001                 
       polej v zagolovke ELF i izmeneniya metoda       
       pometki prinadlezhnosti k opredelionnoj sisteme 
       dlya vypolnimyh fajlov v formate ELF.           
       5.0-CURRENT posle izmenenij v metadannyh kld.   500002                 
       5.0-CURRENT posle izmenenij buf/bio.            500003                 
       5.0-CURRENT posle obnovleniya binutils.         500004                 
       5.0-CURRENT posle integracii koda biblioteki    500005                 
       libxpg4 v libc i poyavleniya interfejsa TASKQ.  
       5.0-CURRENT posle dobavleniya interfejsov AGP.  500006                 
       5.0-CURRENT posle obnovleniya Perl do versii    500007                 
       5.6.0                                           
       5.0-CURRENT posle obnovleniya koda KAME do      500008                 
       versii 2000/07.                                 
       5.0-CURRENT posle izmenenij v ether_ifattach()  500009                 
       i ether_ifdetach().                             
       5.0-CURRENT posle vozvrata v nastrojkah utility 500010                 
       mtree, primenyaemyh po umolchaniyu, obratno k   
       original'nym i dobavleniya flaga -L dlya        
       perehoda po simvolicheskim ssylkam.             
       5.0-CURRENT posle izmeneniya v API dlya kqueue. 500011                 
       5.0-CURRENT posle peremescheniya                500012                 
       setproctitle(3) iz biblioteki libutil v libc.   
       5.0-CURRENT posle pervogo kommita SMPng.        500013                 
       5.0-CURRENT posle perenosa <sys/select.h> v     500014                 
       <sys/selinfo.h>.                                
       5.0-CURRENT posle ob"edineniya libgcc.a i       500015                 
       libgcc_r.a, a takzhe sootvetstvuyuschih         
       izmenenij v komponovke GCC.                     
       5.0-CURRENT posle izmeneniya, pozvolyayuschego  500016                 
       libc i libc_r byt' skomponovannymi vmeste, chto 
       delaet parametr -pthread nenuzhnym.             
       5.0-CURRENT posle perehoda na ispol'zovanie     500017                 
       struct xucred vmesto struct ucred dlya          
       stabilizicii `eksportiruemogo API yadra dlya    
       mountd i t.d.                                   
       5.0-CURRENT posle dobavleniya peremennoj make   500018                 
       CPUTYPE pozvolyayuschej kontrolirovat'          
       specifichnye dlya CPU optimizacii.              
       5.0-CURRENT posle perenosa machine/ioctl_fd.h v 500019                 
       sys/fdcio.h                                     
       5.0-CURRENT posle izmeneniya imen dlya          500020                 
       lokalizacii.                                    
       5.0-CURRENT posle importirovaniya Bzip2.        500021                 
       5.0-CURRENT s podderzhkoj SSE.                  500022                 
       5.0-CURRENT posle KSE `Etap 2.                  500023                 
       5.0-CURRENT posle d_thread_t i perenosa UUCP v  500024                 
       porty.                                          
       5.0-CURRENT posle izmeneniya ABI iz-za perenosa 500025                 
       peredachi deskriptora i prav na 64-razryadnye   
       platformy.                                      
       5.0-CURRENT posle perehoda na ispol'zovanie po  500026                 
       umolchaniyu XFree86 4 dlya postroeniya          
       pakadzhej i posle dobavleniya v biblioteku libc 
       novoj funkcii strnstr().                        
       5.0-CURRENT posle dobavleniya v biblioteku libc 500027                 
       novoj funkcii strcasestr().                     
       5.0-CURRENT posle importirovaniya               500028                 
       pol'zovatel'skih komponent smbfs.               

     Note: Zamet'te, chto 2.2-STABLE inogda identificiruet sebya kak
     ``2.2.5-STABLE'' posle 2.2.5-RELEASE. Takoj princip ispol'zovalsya god i
     mesyac, no my reshili izmenit' ego na bolee odnoznachnuyu sistemu
     numeracii starshij/mladshij, nachinaya s versii 2.2. `Eto ob"yasnyaetsya
     tem, chto parallel'naya razrabotka v neskol'kih vetkah delaet
     nepraktichnym identifikaciyu relizov prosto po ih real'nym datam
     vypuska. Esli vy sejchas delaete port, vam ne stoit zabotit'sya o staryh
     versiyah -CURRENT; oni perechisleny zdes' prosto v informacionnyh
     celyah.

   Iz soten uzhe sdelannyh portov tol'ko v odnom ili dvuh sluchayah
   potrebovalos' ispol'zovanie __FreeBSD__. Esli starye porty ispol'zovali
   `etot makros ne po naznacheniyu, vovse ne znachit, chto vam nuzhno
   postupat' tochno takzhe.

     ----------------------------------------------------------------------

                  15.6. Napisanie chego-libo posle bsd.port.mk

   Ne pishite nichego posle stroki .include <bsd.port.mk>. `Etoj stroki
   mozhno izbezhat', vklyuchiv v gde-to v seredinu vashego fajla Makefile
   fajl bsd.port.pre.mk, i fajl bsd.port.post.mk v konec.

     Note: Vam nuzhno vklyuchit' libo paru fajlov pre.mk/post.mk, libo tol'ko
     bsd.port.mk; ne smeshivajte dva `etih sluchaya.

   V fajle bsd.port.pre.mk opredelyayutsya lish' neskol'ko peremennyh,
   kotorye mogut byt' ispol'zovany v testah iz fajla Makefile, v fajle
   bsd.port.post.mk zadany ostal'nye.

   Vot nekotorye vazhnye peremennye, opredelennye v fajle bsd.port.pre.mk
   (`eto ne polnyj spisok, dlya vyyasneniya polnogo spiska prochtite,
   pozhalujsta, sam fajl bsd.port.mk).

   Peremennaya   Opisanie                                                     
   ARCH          Arhitektura mashiny v vide, poluchaemom po komande uname -m  
                 (naprimer, i386)                                             
   OPSYS         Tip operacionnoj sistemy, poluchaemyj po komande uname -s    
                 (naprimer, FreeBSD)                                          
   OSREL         Versiya reliza operacionnoj sistemy (naprimer, 2.1.5 ili     
                 2.2.7)                                                       
   OSVERSION     Versiya operacionnoj sistemy v vide chisla, to zhe, chto i   
                 __FreeBSD_version.                                           
   PORTOBJFORMAT Format ob"ektnyh fajlov, ispol'zuemyh v sisteme (aout ili    
                 elf)                                                         
   LOCALBASE     Koren' dereva ``local'' (naprimer, /usr/local/)              
   X11BASE       Koren' dereva ``X11'' (naprimer, /usr/X11R6)                 
   PREFIX        Kuda, sobstvenno, ustanavlivaetsya port (obratites' k        
                 podrobnoj informacii o PREFIX).                              

     Note: Esli vy zadaete peremennye USE_IMAKE, USE_X_PREFIX, ili MASTERDIR,
     to delajte `eto pered tem, kak vklyuchat' bsd.port.pre.mk.

   Vot neskol'ko primerov togo, chto vy mozhete napisat' posle
   bsd.port.pre.mk:

     # no need to compile lang/perl5 if perl5 is already in system
     .if ${OSVERSION} > 300003
     BROKEN= perl is in system
     .endif
    
     # only one shlib version number for ELF
     .if ${PORTOBJFORMAT} == "elf"
     TCL_LIB_FILE=  ${TCL_LIB}.${SHLIB_MAJOR}
     .else
     TCL_LIB_FILE=  ${TCL_LIB}.${SHLIB_MAJOR}.${SHLIB_MINOR}
     .endif
    
     # software already makes link for ELF, but not for a.out
     post-install:
     .if ${PORTOBJFORMAT} == "aout"
            ${LN} -sf liblinpack.so.1.0 ${PREFIX}/lib/liblinpack.so
     .endif
          

     ----------------------------------------------------------------------

                  15.7. Ustanovka dopolnitel'noj dokumentacii

   Esli s vashim programmnym obespecheniem postavlyaetsya nekotoraya
   dokumentaciya, otlichayuschayasya ot standartnyh stranic Spravochnika i
   fajlov info, kotoraya, kak vy dumaete, budet polezna pol'zovatelyam,
   ustanovite ee v katalog PREFIX/share/doc. `Eto mozhet byt' sdelano, kak i
   v predyduschem razdele, v celi post-install.

   Sozdajte dlya vashego porta novyj katalog. Imya kataloga dolzhno
   sootvetstvovat' tomu, chto predstavlyaet iz sebya port. Obychno `eto
   oznachaet PORTNAME. Odnako, esli vy dumaete, chto pol'zovatel' zahochet
   imet' raznye versii porta, ustanovlennye odnovremenno, to vy mozhete
   ispol'zovat' polnoe imya PKGNAME.

   Sdelajte ustanovku dokumentacii zavisyaschej ot peremennoj NOPORTDOCS dlya
   togo, chtoby pol'zovateli mogli vyklyuchit' `eto v fajle /etc/make.conf,
   kak zdes':

     post-install:
     .if !defined(NOPORTDOCS)
         ${MKDIR} ${PREFIX}/share/doc/xv
         ${INSTALL_MAN} ${WRKSRC}/docs/xvdocs.ps ${PREFIX}/share/doc/xv
     .endif

   Vse ustanavlivaemye fajly s dokumentaciej i katalogi dolzhny byt'
   perechisleny v fajle pkg-plist s prefiksom %%PORTDOCS%%, naprimer:

     %%PORTDOCS%%share/doc/pure-ftpd/AUTHORS
     %%PORTDOCS%%share/doc/pure-ftpd/CONTACT
     %%PORTDOCS%%@dirrm share/doc/pure-ftpd

   Krome togo, vy mozhete ispol'zovat' fajl pkg-message dlya vyvoda
   soobschenij vo vremya ustanovki. Za podrobnoj informaciej obratites' k
   razdelu ob ispol'zovanii pkg-message.

     Note: Fajl pkg-message ne nuzhno dobavlyat' v pkg-plist.

     ----------------------------------------------------------------------

                               15.8. DIST_SUBDIR

   Ne pozvolyajte vashemu portu zasoryat' /usr/ports/distfiles. Esli vashemu
   portu trebuetsya sgruzit' mnogo fajlov, ili on soderzhit imya fajla,
   moguschee vyzvat' konflikty s drugimi portami (naprimer, Makefile), to
   ukazhite v peremennoj DIST_SUBDIR imya porta (dolzhny podojti ${PORTNAME}
   ili ${PKGNAMEPREFIX}${PORTNAME}). `Eto izmenit znachenie peremennoj
   DISTDIR so znacheniya po umolchaniyu /usr/ports/distfiles k znacheniyu
   /usr/ports/distfiles/DIST_SUBDIR, i v rezul'tate vse, chto trebuetsya dlya
   porta, budet pomescheno v `etot podkatalog.

   On zaglyanet takzhe v podkatalog s tem zhe imenem na osnovnom rezervnom
   servere ftp.FreeBSD.org. (YAvnoe zadanie peremennoj DISTDIR v vashem fajle
   Makefile `etogo ne sdelaet, tak chto, pozhalujsta, vospol'zujtes'
   DIST_SUBDIR.)

     Note: `Eto ne kosnetsya teh sajtov MASTER_SITES, kotorye vy ukazali v
     vashem fajle Makefile.

     ----------------------------------------------------------------------

                          15.9. Informaciya o pakadzhe

   Dajte informaciyu o pakadzhe, to est' pkg-comment, pkg-descr i pkg-plist.

     Note: Zamet'te, chto `eti fajly teper' ispol'zuyutsya ne tol'ko v
     sisteme pakadzhej, i oni obyazatel'ny, dazhe esli opredelena peremennaya
     NO_PACKAGE.

     ----------------------------------------------------------------------

                               15.10. Stroki RCS

   Ne pomeschajte stroki RCS v patchi. CVS budet izmenyat' ih pri pomeschenii
   fajlov v derevo portov, i kogda my budem ih ottuda izvlekat', oni budut
   uzhe drugie, po`etomu primenenie patchej okonchitsya neudachej. Strochki
   RCS predvaryayutsya znakom dollara ($), i obychno nachinayutsya s $Id ili
   $RCS.

     ----------------------------------------------------------------------

                         15.11. Rekursivnye fajly diff

   Ispol'zovanie parametra rekursii (-r) s komandoj diff dlya generacii
   patchej - `eto horosho, no vse zhe, pozhalujsta, smotrite na
   poluchayuschiesya patchi, chtoby ubedit'sya v otsutstvii nenuzhnogo
   musora. V chastnosti, diff mezhdu dvumya rezervnymi kopiyami fajlov, fajly
   Makefile, kogda kak port ispol'zuet Imake ili GNU-versiyu programmy
   configure, i tak dalee, ne nuzhny, i dolzhny byt' udaleny. Esli vy
   otredaktirovali fajl configure.in i zapustili autoconf dlya peregeneracii
   configure, ne nuzhno vklyuchat' fajly diff dlya configure (oni chasten'ko
   vyrastayut do neskol'kih tysyach strok!); zadajte USE_AUTOCONF=yes i
   vklyuchite diff-fajl dlya configure.in.

   Krome togo, esli vy udalyaete fajl, to `eto mozhno sdelat' i v celi
   post-extract, a ne vnutri patcha. Kak tol'ko vy budete udovletvoreny
   poluchayuschimsya diff-fajlom, razbejte ego na neskol'ko po odnomu patchu
   na otdel'nyj fajl.

     ----------------------------------------------------------------------

                                 15.12. PREFIX

   Popytajtes' sdelat' tak, chtoby ustanovka vashego porta osuschestvlyalas'
   otnositel'no kataloga PREFIX. (Znachenie `etoj peremennoj budet
   ustanovleno v LOCALBASE (po umolchaniyu /usr/local), esli tol'ko ne zadany
   peremennye USE_X_PREFIX ili USE_IMAKE, v sluchae chego on budet prinyat
   ravnym X11BASE (po umolchaniyu /usr/X11R6).)

   Otsutstvie yavnogo ukazaniya /usr/local ili /usr/X11R6 nigde v ishodnom
   kode sdelaet port gorazdo bolee gibkim i sposobnym udovletvorit'
   potrebnosti drugih serverov. Dlya portov, kotorye ispol'zuyut X, `eto
   proishodit avtomaticheski; v protivnom sluchae zachastuyu `eto mozhet byt'
   sdelano prostoj zamenoj strok /usr/local (ili /usr/X11R6 dlya portov X, ne
   ispol'zuyuschih imake) v razlichnyh skriptah/fajlah Makefile porta na
   chtenie PREFIX, tak kak `eta peremennaya avtomaticheski peredaetsya dalee
   na kazhdom `etape postroeniya i ustanovki.

   Prover'te, chto vashe prilozhenie ne ustanavlivaet chego-libo v katalog
   /usr/local vmesto PREFIX. `Eto mozhno bystro proverit' sleduyuschim
   obrazom:

     # make clean; make package PREFIX=/var/tmp/p
 ort-name
          

   Esli chto-to bylo ustanovleno za predelami PREFIX, to process sozdaniya
   pakadzha soobschit ob otsutstvii fajlov.

   Zdes' ne proveryaetsya ni nalichie vneshnih ssylok, ni korrektnost'
   ispol'zovaniya LOCALBASE v kachestve ssylki na fajly iz drugih portov.
   Proverka ustanovki v katalog /var/tmp/port-name delaet `eto.

   Ne zadavajte peremennuyu USE_X_PREFIX do teh por, poka ona na samom dele
   ne ponadobitsya dlya porta (to est' on budet skomponovan s bibliotekami X
   ili nuzhno budet obraschat'sya k fajlam iz X11BASE).

   Peremennaya PREFIX mozhet byt' perenaznachena v vashem fajle Makefile ili
   v okruzhenii pol'zovatelya. Odnako strogo ne rekomenduetsya otdel'nym
   portam ustanavlivat' `etu peremennuyu yavno v fajle Makefiles.

   Krome togo, obratites' k programmam/fajlam iz drugih portov s peremennymi,
   perechislennymi vyshe, bez ukazaniya yavnyh marshrutov. Naprimer, esli
   vash port trebuet, chtoby makro PAGER yavlyalsya polnym putem utility
   less, ispol'zujte flag kompilyatora:

     -DPAGER=\"${PREFIX}/bin/less\"
        

   ili

     -DPAGER=\"${LOCALBASE}/bin/less\"
        

   esli `eto port X, vmesto togo, chtoby zadavat'
   -DPAGER=\"/usr/local/bin/less\". `Etot sposob imeet bol'she shansov na
   rabotu, esli sistemnyj administrator peremestil vse derevo `/usr/local'
   kuda-to v drugoe mesto.

     ----------------------------------------------------------------------

                               15.13. Podkatalogi

   Poprobujte pomestit' vse fajly porta v pravil'nyh podkatalogah kataloga
   PREFIX. Nekotorye porty ignoriruyut vse ustanovki i pomeschayut vse v
   podkatalog s imenem porta, chto nepravil'no. Takzhe mnogie porty
   pomeschayut vse, krome binarnyh fajlov, fajlov zagolovkov i stranic
   Spravochnika, v podkatalog kataloga lib, chto ne ochen' horosho
   sootvetstvuet paradigme BSD. Mnogie fajly dolzhny byt' peremescheny v odno
   iz sleduyuschih mestopolozhenij: etc (nastroechnye/konfiguracionnye
   fajly), libexec (vypolnimye fajly, zapuskaemye iz drugih programm), sbin
   (ispolnimye fajly dlya administratorov/menedzherov sistemy), info
   (dokumentaciya v formate info dlya prosmotrschika info) ili share
   (nezavisimye ot arhitektury fajly). Obratites' k hier(7) dlya proyasneniya
   detalej, pravila, pokryvayuschie /usr, dostatochno horosho podhodyat
   takzhe i k /usr/local. Isklyucheniem yavlyayutsya porty, imeyuschie delo s
   ``novostyami'' USENET. Oni mogut ispol'zovat' katalog PREFIX/news dlya
   ustanovki svoih fajlov.

     ----------------------------------------------------------------------

                        15.14. Ochistka pustyh katalogov

   Zastav'te vash porty ochischat' za soboj pri udalenii. Obychno `eto
   dostigaetsya dobavleniem strok @dirrm dlya vseh katalogov, kotorye
   sozdayutsya `etim portom. Vam nuzhno udalit' podkatalogi do togo, kak vy
   smozhete udalit' roditel'skie katalogi.

      :
     lib/X11/oneko/pixmaps/cat.xpm
     lib/X11/oneko/sounds/cat.au
      :
     @dirrm lib/X11/oneko/pixmaps
     @dirrm lib/X11/oneko/sounds
     @dirrm lib/X11/oneko
          

   Odnako inogda @dirrm budet vydavat' oshibku, potomu chto drugie porty
   tozhe ispol'zuyut tot zhe samyj podkatalog. Vy mozhete vyzvat' komandu
   rmdir iz @unexec dlya udaleniya bez vydachi preduprezhdenij tol'ko pustogo
   kataloga.

     @unexec rmdir %D/share/doc/gimp 2>/dev/null || true
          

   `Eta komanda ne vyvedet nikakih soobschenij ob oshibkah i ne vyzovet
   avarijnogo zaversheniya raboty pkg_delete, dazhe esli katalog
   PREFIX/share/doc/gimp ne pust iz-za togo, chto drugie porty ustanovili
   syuda kakie-to fajly.

     ----------------------------------------------------------------------

                           15.15. Identifikatory UID

   Esli vashemu porty trebuetsya nalichie nekotorogo pol'zovatelya v sisteme,
   na kotoruyu on ustanavlivaetsya, pust' skript pkg-install vyzovet komandu
   pw dlya ego avtomaticheskogo sozdaniya. Posmotrite dlya primera na
   net/cvsup-mirror.

   Esli vash port dolzhen ispol'zovat' tot zhe samyj identifikator
   pol'zovatelya ili gruppy pri ustanovke dvoichnogo pakadzha, kotoryj byl
   pri kompilyacii, to vy dolzhny vybrat' svobodnyj UID v diapazone ot 50 do
   999 i zaregistrirovat' ego nizhe. Vzglyanite dlya primera na japanese/Wnn.

   Prover'te, chto vy ne ispol'zuete UID, uzhe ispol'zuemyj sistemoj ili
   drugimi portami. Vot tekuschij spisok UID mezhdu 50 i 999.

     majordom:*:54:54:Majordomo Pseudo User:/usr/local/majordomo:/nonexistent
     cyrus:*:60:60:the cyrus mail server:/nonexistent:/nonexistent
     gnats:*:61:1:GNATS database owner:/usr/local/share/gnats/gnats-db:/bin/sh
     uucp:*:66:66:UUCP pseudo-user:/var/spool/uucppublic:/usr/libexec/uucp/uucico
     xten:*:67:67:X-10 daemon:/usr/local/xten:/nonexistent
     pop:*:68:6:Post Office Owner (popper):/nonexistent:/sbin/nologin
     wnn:*:69:7:Wnn:/nonexistent:/nonexistent
     ifmail:*:70:66:Ifmail user:/nonexistent:/nonexistent
     pgsql:*:70:70:PostgreSQL pseudo-user:/usr/local/pgsql:/bin/sh
     ircd:*:72:72:IRCd hybrid:/nonexistent:/nonexistent
     www:*:80:80:World Wide Web Owner:/nonexistent:/sbin/nologin
     alias:*:81:81:QMail user:/var/qmail/alias:/nonexistent
     qmaill:*:83:81:QMail user:/var/qmail:/nonexistent
     qmaild:*:82:81:QMail user:/var/qmail:/nonexistent
     qmailq:*:85:82:QMail user:/var/qmail:/nonexistent
     qmails:*:87:82:QMail user:/var/qmail:/nonexistent
     qmailp:*:84:81:QMail user:/var/qmail:/nonexistent
     qmailr:*:86:82:QMail user:/var/qmail:/nonexistent
     msql:*:87:87:mSQL-2 pseudo-user:/var/db/msqldb:/bin/sh
     mysql:*:88:88:MySQL Daemon:/var/db/mysql:/sbin/nologin
     vpopmail:*:89:89::0:0:User &:/usr/local/vpopmail:/nonexistent
     smmsp:*:90:90:Sendmail Queue:/nonexistent:/nonexistent
     drweb:*:426:426:Dr.Web Mail Scanner:/nonexistent:/sbin/nologin

   Pozhalujsta, pri posylke novogo (ili obnovlenii starogo) porta napishite
   zamechanie, chto rezerviruete novyj UID ili GID v `etom diapazone. `Eto
   pozvolit nam derzhat' spisok zarezervirovannyh identifikatorov v
   aktual'nom sostoyanii.

     ----------------------------------------------------------------------

                           15.16. Postupajte razumno

   Fajl Makefile dolzhen vypolnyat' dejstviya prosto i nebesprichinno. Esli
   vy mozhete sdelat' chto-to na neskol'ko strok koroche ili bolee
   chitabel'no, sdelajte `eto. V kachestve primerov mozhno privesti
   ispol'zovanie konstrukcij .if utility make vmesto sootvetstvuyuschej
   konstrukcii if komandnogo processora, nenuzhnost' pereopredeleniya celi
   do-extract pri vozmozhnosti pereopredeleniya EXTRACT* i ispol'zovanie
   GNU_CONFIGURE vmesto CONFIGURE_ARGS+= --prefix=${PREFIX}.

     ----------------------------------------------------------------------

                          15.17. Ispol'zovanie CFLAGS

   Port dolzhen prinimat' vo vnimanie peremennuyu CFLAGS. Esli on `etogo ne
   delaet, to, pozhalujsta, dobav'te v fajl Makefile strochku
   NO_PACKAGE=ignores cflags.

   Primer fajla Makefile, v kotorom prinimaetsya vo vnimanie peremennaya
   CFLAGS, privoditsya dalee. Otmet'te upotreblenie simvolov +=:

     CFLAGS += -Wall -Werror
          

   A vot primer, v kotorom ne uchityvaetsya znachenie peremennoj CFLAGS:

     CFLAGS = -Wall -Werror
          

   V sisteme FreeBSD peremennaya CFLAGS opredelena v fajle /etc/make.conf. V
   pervom primere k peremennoj CFLAGS dobavlyayutsya dopolnitel'nye flagi,
   pri `etom sohranyayutsya vse opredeleniya, dannye ranee na urovne sistemy.
   Vo vtorom primere vsio, chto bylo zadano ranee, ignoriruetsya.

     ----------------------------------------------------------------------

                         15.18. Konfiguracionnye fajly

   Esli dlya raboty porta trebuyutsya nalichie nekotoryh konfiguracionnyh
   fajlov v kataloge PREFIX/etc, ne prosto ustanovite ih i perechislite v
   fajle pkg-plist. `Eto privediot k tomu, chto po komande pkg_delete ili pri
   novoj ustanovke fajly, tschatel'no otredaktirovannye i nastroennye
   pol'zovatelem, budut unichtozheny.

   Vmesto `etogo ustanovite fajly s primerami s nekim rasshireniem
   (filename.sample podojdet) i vyvedite soobschenie, ukazyvayuschee na to,
   chtoby pol'zovatel' skopiroval i otredaktiroval fajl pered tem, kak
   rabotat' s programmnym obespecheniem.

     ----------------------------------------------------------------------

                            15.19. Utilita portlint

   Proveryajte vashu rabotu s pomosch'yu utility portlint pered tem, kak
   poslat' ee nam ili vypolnit' kommitt.

     ----------------------------------------------------------------------

                               15.20. Pozhelaniya

   Posylajte podhodyaschie izmeneniya/patchi avtoram/soprovozhdayuschemu dlya
   vklyucheniya v sleduyuschij reliz. `Eto tol'ko sdelaet vashu rabotu
   gorazdo legche pri vyhode sleduyuschego reliza.

     ----------------------------------------------------------------------

                               15.21. README.html

   Ne vklyuchajte syuda fajl README.html. `Etot fajl ne yavlyaetsya chast'yu
   dereva cvs, i on generiruetsya pri pomoschi komandy make readme.

     ----------------------------------------------------------------------

                                 15.22. Raznoe

   Fajly pkg-comment, pkg-descr i pkg-plist vy dolzhny proveryat' dvazhdy.
   Esli vy prosmatrivaete port i dumaete, chto ego mozhno pereformulirovat'
   inache, sdelajte `eto.

   Pozhalujsta, ne sozdavajte dopolnitel'nyh kopij licenzii GNU General
   Public License v nashej sisteme.

   Bud'te vnimatel'ny s yuridicheskimi voprosami! Ne delajte iz nas
   nelegal'nyh rasprostranitelej PO!

     ----------------------------------------------------------------------

                   15.23. Esli vy ispytyvaete zatrudneniya...

   Posmotrite suschestvuyuschie primery i fajl bsd.port.mk pered tem, kak
   zadavat' nam voprosy! ;-)

   Zadavajte nam voprosy, esli u vas poyavilis' problemy! Ne bejtes' golovoj
   ob stenu! :-)

     ----------------------------------------------------------------------

                         Chapter 16. Primernyj Makefile

   Vot primernyj Makefile, kotoryj mozhno ispol'zovat' pri sozdanii novogo
   porta. Obyazatel'no udalite vse dopolnitel'nye kommentarii (te, kotorye v
   skobkah)!

   Vam rekomenduetsya sledovat' `etomu formatu (soblyudaya poryadok
   sledovaniya peremennyh, pustye stroki mezhdu razdelami, i tak dalee).
   `Etot format razrabotan dlya togo, chtoby vazhnaya informaciya byla legko
   najdena. My rekomenduem vam vospol'zovat'sya utilitoj portlint dlya
   proverki fajla Makefile.

     [zagolovok...prosto chtoby nam bylo legche identificirovat' port.]
     # New ports collection makefile for:   xdvi
     [strochka "version required" neobhodima tol'ko togda, kogda peremennaya
     PORTVERSION nedostatochno konkretna dlya opisaniya porta.]
     # Date created:            26 May 1995
     [`Eto chelovek, kotoryj sdelal pervonachal'nyj port dlya FreeBSD, v chastnosti,
     tot, kto sozdal pervuyu versiyu `etogo fajla Makefile.  Zapomnite, chto pozzhe
     pri obnovlenii porta `eta stroka menyat'sya ne dolzhna.]
     # Whom:                    Satoshi Asami <asami@FreeBSD.org>
     #
     # $FreeBSD$
     [ ^^^^^^^^^ `Eta stroka budet avtomaticheski zamenena so strochkoj RCS ID
     sistemoj CVS pri vypolnenii operacii kommitta v nashe hranilische.  Pri
     obnovlenii porta ne privodite `etu stroku obratno k vidu
     "$FreeBSD$".  CVS sdelaet vse avtomaticheski.]
     #
    
     [sekciya opisaniya sobstvenno porta i osnovnogo servera - snachala vsegda
      PORTNAME i PORTVERSIONA, za nim sleduet CATEGORIES, a zatem
      MASTER_SITES, za kotorym mozhet idti MASTER_SITE_SUBDIR.
      PKGNAMEPREFIX i PKGNAMESUFFIX, esli oni nuzhny, sleduyut za nimi.
      Zatem sleduet DISTNAME, EXTRACT_SUFX i/ili DISTFILES, a potom, esli `eto nuzhno,
      EXTRACT_ONLY.]
     PORTNAME=      xdvi
     PORTVERSION=   18.2.]
     CATEGORIES=    print
     [ne zabyvajte lidiruyuschij sl`esh ("/")!
      esli vy ne ispol'zuete makrosy MASTER_SITE_*]
     MASTER_SITES=  ${MASTER_SITE_XCONTRIB}
     MASTER_SITE_SUBDIR= applications
     PKGNAMEPREFIX= ja-
     DISTNAME=      xdvi-pl18
     [zadajte `eto, esli ishodnyj kod postavlyaetsya ne v vide
      standartnogo fajla ".tar.gz"]
     EXTRACT_SUFX=  .tar.Z
    
     [sekciya patchej -- mozhet byt' pustoj]
     PATCH_SITES=   ftp://ftp.sra.co.jp/pub/X11/japanese/
     PATCHFILES=    xdvi-18.patch1.gz xdvi-18.patch2.gz
    
     [soprovozhdayuschij; *obyazatel'noe pole*!  `Eto chelovek (predpochtitel'no s
      privilegiyami na operaciyu kommitta), s kotorym mozhet svyazat'sya pol'zovatel'
      dlya polucheniya otvetov na voprosy i posylki soobschenij ob oshibkah - `etot
      chelovek dolzhen byt' sozdatelem porta ili kem-to, kto mozhet peredat'
      voprosy sozdatelyu porta.  Esli vy na samom dele ne hotite ukazyvat' zdes'
      svoj adres, zadajte zdes' "ports@FreeBSD.org".]
     MAINTAINER=    asami@FreeBSD.org
    
     [zavisimosti -- mogut byt' pustymi]
     RUN_DEPENDS=   gs:${PORTSDIR}/print/ghostscript
     LIB_DEPENDS=   Xpm.5:${PORTSDIR}/graphics/xpm
    
     [`etot razdel dlya ostal'nyh standartnyh peremennyh iz bsd.port.mk, krome
      teh, chto perechisleny vyshe]
     [Esli port zadaet voprosy vo vremya `etapov nastrojki, postroeniya,
      ustanovki...]
     IS_INTERACTIVE=        yes
     [Esli raspakovka proishodit v katalog, otlichnyh ot ${DISTNAME}...]
     WRKSRC=            ${WRKDIR}/xdvi-new
     [Esli patchi delalis' ne otnositel'no ${WRKSRC}, vam, mozhet byt', ne
      pridetsya izmenyat' `etu peremennuyu]
     PATCH_DIST_STRIP=      -p1
     [Esli port trebuet skripta "configure", generuemogo GNU-versiej programmy
      autoconf]
     GNU_CONFIGURE= yes
     [Esli dlya postroeniya portu trebuetsya GNU-versiya utility make, a ne
      /usr/bin/make...]
     USE_GMAKE=     yes
     [Esli `eto prilozhenie X i trebuet zapuska "xmkmf -a"...]
     USE_IMAKE=     yes
     [i tak dalee]
    
     [V pravilah nizhe ispol'zuyutsya nestandartnye peremennye]
     MY_FAVORITE_RESPONSE=  "yeah, right"
    
     [teper' special'nye pravila, v poryadke ih vyzova]
     pre-fetch:
         ya chto-to vykachivayu, tochno
    
     post-patch:
         mne koe-chto sdelat' posle primeneniya patcha, velikolepno
    
     pre-install:
         i potom esche koe-chto pered ustanovkoj, ogo
    
     [i, nakonec, `epilog]
     .include <bsd.port.mk>
        

     ----------------------------------------------------------------------

              Chapter 17. Avtomaticheskoe sozdanie spiska upakovki

   Pervym delom ubedites', chto vash port prakticheski polnost'yu zavershen,
   ostalos' tol'ko sozdat' pkg-plist. Sozdajte pustoj fajl pkg-plist.

     # touch pkg-plist

   Zatem sozdajte novyj nabor katalogov, v kotorye mozhet byt' ustanovlen
   vash port, i ustanovite vse zavisimosti.

     # mtree -U -f /etc/mtree/BSD.local.dist -d -e -p /var/tmp/port-name
     # make depends PREFIX=/var/tmp/port-name

   Sohranite strukturu katalogov v novom fajle.

     # (cd /var/tmp/port-name && find -d * -type d) > OLD-DIRS

   Esli vash port prinimaet vo vnimanie PREFIX (a on dolzhen `eto delat'), to
   togda vy mozhete ustanovit' port i sozdat' spisok upakovki.

     # make install PREFIX=/var/tmp/port-name
     # (cd /var/tmp/port-name && find -d * \! -type d) > pkg-plist

   Krome togo, v spisok upakovki vy dolzhny dobavit' vse vnov' sozdannye
   katalogi.

     # (cd /var/tmp/port-name && find -d * -type d) | comm -13 OLD-DIRS - | sed -e 's#^#@dirrm #' >> pkg-plist

   I nakonec, vam nuzhno vruchnuyu otshlifovat' spisok upakovki; ego sozdanie
   avtomatizirovano ne polnost'yu. Stranicy spravochnoj sistemy dolzhny byt'
   perechisleny v fajle Makefile porta v peremennyh MANn, a ne v spiske
   upakovki. Pol'zovatel'skie konfiguracionnye fajly dolzhny byt' udaleny ili
   byt' ustanovleny kak filename.sample. Fajl info/dir vklyuchat' v spisok ne
   nuzhno, no dolzhny byt' dobavleny sootvetstvuyuschie strochki
   install-info, tak, kak `eto opisano v razdele o fajlah v formate info. Vse
   biblioteki, ustanavlivaemye portom, dolzhny byt' perechisleny tak, kak
   `eto opisano v razdele o dinamicheskih bibliotekah.

     ----------------------------------------------------------------------

                          Chapter 18. Imena pakadzhej

   Dalee opisany nekotorye soglasheniya, kotorym vy dolzhny sledovat' v
   imenovanii vashih pakadzhej. Oni byli razrabotany dlya oblegcheniya
   prosmotra kataloga, tak kak pakadzhej uzhe imeetsya dostatochno mnogo i
   esche bol'she ih poyavlyaetsya, a pol'zovateli otvernutsya ot nas, esli
   spisok ne ponravitsya ih vzoru!

   Imya pakadzha dolzhno imet' vid
   [language[_region]]-name[[-]compiled.specifics]-version.numbers.

   Imya pakadzha opredelyaetsya kak
   ${PKGNAMEPREFIX}${PORTNAME}${PKGNAMESUFFIX}-${PORTVERSION}. Vy dolzhny
   zadavat' znacheniya peremennyh v sootvetstvii s `etim formatom.

    1. FreeBSD pytaetsya podderzhivat' yazyki, na kotoryh razgovarivayut ee
       pol'zovateli. CHast' language- dolzhna byt' dvuhsimvol'nym
       sokrascheniem ot nazvaniya yazyka po standartu ISO-639, esli port
       specifichen dlya konkretnogo yazyka. Primerami yavlyayutsya ja dlya
       yaponskogo, ru dlya russkogo, vi dlya v'etnamskogo, zh dlya
       kitajskogo, ko dlya korejskogo i de dlya nemeckogo yazykov.

       Esli vash port specifichen dlya konkretnogo regiona vnutri oblasti
       ispol'zovaniya yazyka, dobav'te takzhe dvuhsimvol'nyj kod strany.
       Primerami yavlyayutsya en_US dlya US English i fr_CH dlya Swiss
       French.

       CHast' language- dolzhna zadavat'sya v peremennoj PKGNAMEPREFIX.

    2. Pervaya bukva chasti name dolzhna byt' v nizhnem registre.
       (Ostavshayasya chast' nazvaniya mozhet soderzhat' bukvy v verhnem
       registre, tak chto prinimajte reshenie sami, kogda preobrazuete imya
       programmnogo paketa, soderzhaschego v imeni nekotoroe kolichestvo
       zaglavnyh bukv.) Suschestvuet tradiciya imenovat' moduli dlya Perl 5,
       dobavlyaya vperedi p5- i preobrazuya paru dvoetochij v defis;
       naprimer, modul' Data::Dumper budet imenovat'sya p5-Data-Dumper. Esli
       programmnoe obespechenie soderzhit v imeni chisla, defisy ili
       podcherkivaniya, to vy mozhete vklyuchit' takzhe i ih (naprimer,
       kinput2).

    3. Esli port mozhet byt' postroen s razlichnymi staticheski zadannymi
       znacheniyami po umolchaniyu (obychno `eto chast' imeni kataloga v
       semejstve portov), to chast' -compiled.specifics dolzhna opredelyat'
       vkompilirovannye znacheniya po umolchaniyu (defis ne obyazatelen).
       Primerami yavlyayutsya razmery bumagi i shriftov.

       CHast' compiled.specifics dolzhna zadavat'sya v peremennoj
       PKGNAMESUFFIX.

    4. Stroka s nomerom versii dolzhna sledovat' za defisom (-) i yavlyat'sya
       spiskom razdelennyh dvoetochiem chisel i bukv v nizhnem registre. V
       chastnosti, ne razreshaetsya imet' esche odin defis vnutri stroki s
       oboznacheniem nomera versii. Edinstvennym isklyucheniem yavlyaetsya
       strochka pl (oznachayuschaya `uroven' patchej'), kotoraya mozhet
       ispol'zovat'sya tol'ko togda, kogda u programmnogo obespecheniya net
       starshego i mladshego nomera versii. Esli v nomer versii programmnogo
       obespecheniya vklyuchena strochka tipa "alpha", "beta", "rc" ili
       "pre", voz'mite iz neio pervuyu bukvu i postav'te eio neposredstvenno
       posle tochki. Esli posle takih strok nomer versii eschio
       prodolzhaetsya, to posle bukvy dolzhno sledovat' chislo bez
       dopolnitel'noj razdelyayuschej tochki.

       Smysl takogo formata zaklyuchaetsya v udobstve sortirovki portov po
       nomeru versii. V chastnosti, sledite za tem, chtoby komponenty nomera
       versii razdelyalis' tochkoj, i esli tam prisutstvuet data, to
       ispol'zujte format yyyy.mm.dd, no ne dd.mm.yyyy ili ne sovmestimyj s
       problemoj G2000 yy.mm.dd.

   Vot neskol'ko (real'nyh) primerov togo, kak preobrazovat' imya iz
   original'nogo, pridumannogo avtorami, k podhodyaschemu dlya imeni
   pakadzha:

Imya            PKGNAMEPREFIX PORTNAME PKGNAMESUFFIX PORTVERSION Obosnovanie         
distributiva                                                     
mule-2.2.2      (pusto)       mule     (pusto)       2.2.2       Izmenenij ne        
                                                                 potrebovalos'       
XFree86-3.3.6   (pusto)       XFree86  (pusto)       3.3.6       Izmenenij ne        
                                                                 potrebovalos'       
EmiClock-1.0.2  (pusto)       emiclock (pusto)       1.0.2       Dlya otdel'nyh      
                                                                 programm imena s    
                                                                 zaglavnymi bukvami  
                                                                 zaprescheny         
rdist-1.3alpha  (pusto)       rdist    (pusto)       1.3.a       Strochki tipa alpha 
                                                                 zaprescheny         
es-0.9-beta1    (pusto)       es       (pusto)       0.9.b1      Strochki tipa beta  
                                                                 zaprescheny         
mailman-2.0rc3  (pusto)       mailman  (pusto)       2.0.r3      Strochki tipa rc    
                                                                 zaprescheny         
v3.3beta021.src (pusto)       tiff     (pusto)       3.3         CHto `eto takoe     
                                                                 bylo voobsche?      
tvtwm           (pusto)       tvtwm    (pusto)       pl11        Vsegda trebuetsya   
                                                                 ukazanie nomera     
                                                                 versii              
piewm           (pusto)       piewm    (pusto)       1.0         Vsegda trebuetsya   
                                                                 ukazanie nomera     
                                                                 versii              
xvgr-2.10pl1    (pusto)       xvgr     (pusto)       2.10.1      pl razresheno       
                                                                 tol'ko pri          
                                                                 otsutstvii          
                                                                 starshego/mladshego 
                                                                 nomera versii       
gawk-2.15.6     ja-           gawk     (pusto)       2.15.6      Versiya na          
                                                                 yaponskom yazyke    
psutils-1.13    (pusto)       psutils  -letter       1.13        Razmer bumagi       
                                                                 zadaetsya           
                                                                 staticheski vo      
                                                                 vremya postroeniya  
                                                                 pakadzha            
pkfonts         (pusto)       pkfonts  300           1.0         Pakadzh dlya        
                                                                 shriftov 300dpi     

   Esli v ishodnom kode absolyutno net informacii o nomere versii i ne
   pohozhe, chto avtor sobiraetsya vypuskat' druguyu versiyu, to v kachestve
   nomera versii zadajte prosto 1.0 (kak v primere s piewm vyshe). V
   protivnom sluchae sprosite avtora programmy ili ispol'zujte datu
   (yyyy.mm.dd) v kachestve nomera versii.

     ----------------------------------------------------------------------

                             Chapter 19. Kategorii

   Kak vy uzhe znaete, porty razdelyayutsya na neskol'ko kategorij. No chtoby
   `eta klassifikaciya rabotala horosho, ochen' vazhno, chtoby kak te, kto
   zanimaetsya portirovaniem, tak i pol'zovateli ponimali, chto soderzhit
   kazhdaya kategoriya, i kak my opredelyaem, chto pomeschat' v kazhduyu iz
   nih.

     ----------------------------------------------------------------------

                        19.1. Tekuschij spisok kategorij

   Vo-pervyh, `eto tekuschij spisok kategorij. Te, kotorye otmecheny
   zvezdochkoj (*), yavlyayutsya virtual'nymi kategoriyami--oni ne imeyut
   sobstvennogo podkataloga v dereve portov.

     Note: Dlya kazhdoj virtual'noj kategorii imeetsya fajl pkg/COMMENT s ee
     odnostrochnym opisaniem v sootvetstvuyuschem podkataloge (naprimer,
     archivers/pkg/COMMENT).

   Kategoriya   Opisanie                                                      
   afterstep*   Porty, podderzhivayuschie menedzher okon AfterStep.           
   archivers    Instrumenty dlya raboty s arhivami.                           
   astro        Prilozheniya, svyazannye s astronomiej.                       
   audio        Podderzhka raboty so zvukom.                                  
   benchmarks   Utility dlya izmereniya proizvoditel'nosti sistemy.           
   biology      Programmnoe obespechenie, svyazannoe s biologiej.             
   cad          Instrumenty Sistem Avtomatizirovannogo Proektirovaniya.       
   chinese      Podderzhka kitajskogo yazyka.                                 
   comms        Kommunikacionnoe programmnoe obespechenie. V osnovnom         
                programmy dlya raboty s posledovatel'nym portom.              
   converters   Utility dlya preobrazovaniya simvol'nyh formatov.             
   databases    Bazy dannyh.                                                  
   deskutils    To, chto bylo na stole do izobreteniya komp'yuterov.          
   devel        Utility dlya razrabotki programmnogo obespecheniya. Ne        
                pomeschajte syuda biblioteki prosto potomu chto `eto          
                biblioteki--esli oni podpadayut pod kakuyu-to druguyu         
                kategoriyu, to ih byt' zdes' ne dolzhno.                      
   editors      Redaktory obschego naznacheniya. Specializirovannye redaktory 
                otnosyat k razdelu dlya sootvetstvuyuschih instrumentov       
                (naprimer, redaktor matematicheskih formul popadaet v         
                kategoriyu math).                                             
   elisp*       Porty dlya Emacs lisp.                                        
   emulators    `Emulyatory drugih operacionnyh sistem. `Emulyatory           
                terminalov syuda ne otnosyatsya--te, kotorye razrabotany dlya 
                X, dolzhny byt' v kategorii x11, a tekstovye v comms ili      
                misc, v zavisimosti ot konkretnogo ih prednaznacheniya.       
   french       Podderzhka francuzskogo yazyka.                               
   ftp          Klienty i servery FTP. Esli vash port ponimaet kak FTP, tak i 
                HTTP, pomestite ego v kategoriyu ftp i ukazhite vtorichnuyu   
                kategoriyu www.                                               
   games        Igry.                                                         
   german       Podderzhka nemeckogo yazyka.                                  
   gnome*       Porty proekta GNU Object Model Environment (GNOME) Project.   
   graphics     Graficheskie utility.                                         
   hebrew       Podderzhka ivrita.                                            
   irc          Utility dlya raboty s Internet Relay Chat.                    
   ipv6*        Programmnoe obespechenie, svyazannoe s IPv6.                  
   japanese     Podderzhka yaponskogo yazyka.                                 
   java         Podderzhka yazyka Java.                                       
   kde*         Porty proekta K Desktop Environment (KDE) Project.            
   korean       Podderzhka korejskogo yazyka.                                 
   lang         YAzyki programmirovaniya.                                     
   linux*       Linux prilozheniya i utility.                                 
   mail         Programmy dlya raboty s `elektronnoj pochtoj..                
   math         Programmnoe obespechenie dlya chislennyh vychislenij i drugie 
                utility, svyazannye s matematikoj.                            
   mbone        Prilozheniya dlya MBone.                                      
   misc         Razlichnye utility--v osnovnom to, chto ne popadaet v drugie  
                kategorii. `Eto edinstvennaya kategoriya, kotoraya ne dolzhna 
                ukazyvat'sya vmeste s lyuboj drugoj nevirtual'noj kategoriej. 
                Esli vy ukazyvaete misc vmeste s chem-to esche v stroke       
                CATEGORIES, `eto znachit, chto vy mozhete spokojno udalit'    
                misc i prosto pomestit' port v `etot drugoj podkatalog!       
   net          Razlichnoe setevoe programmnoe obespechenie.                  
   news         Programmnoe obespechenie dlya raboty s konferenciyami USENET. 
   offix*       Porty iz nabora OffiX.                                        
   palm         Programmnaya podderzhka 3Com Palm(tm).                        
   perl5*       Porty, kotorym dlya raboty trebuetsya perl versii 5.          
   picobsd      Porty dlya podderzhki PicoBSD.                                
   plan9*       Razlichnye programmy iz plan9.                                
   print        Programmnoe obespechenie dlya pechati. Instrumenty dlya       
                verstki (prosmotrschiki i tomu podobnoe) tozhe otnosyatsya    
                syuda.                                                        
   python*      Programmnoe obespechenie, napisannoe na yazyke python.        
   ruby*        Programmnoe obespechenie, napisannoe na yazyke ruby.          
   russian      Podderzhka russkogo yazyka.                                   
   science      Nauchnye programmy, kotorye ne podpadayut pod drugie          
                kategorii, skazhem, astro, biology ili math.                  
   security     Programmy, obespechivayuschie bezopasnost' sistemy.           
   shells       Razlichnye komandnye processory.                              
   sysutils     Sistemnye utility.                                            
   tcl76*       Porty, kotorym dlya raboty nuzhen Tcl versii 7.6.             
   tcl80*       Porty, kotorym dlya raboty nuzhen Tcl versii 8.0.             
   tcl81*       Porty, kotorym dlya raboty nuzhen Tcl versii 8.1.             
   tcl82*       Porty, kotorym dlya raboty nuzhen Tcl versii 8.2.             
   textproc     Utility dlya tekstovoj obrabotki. Instrumenty dlya verstki    
                pomeschayutsya v print/, a ne syuda.                          
   tk42*        Porty, kotorym dlya raboty nuzhen Tk versii 4.2.              
   tk80*        Porty, kotorym dlya raboty nuzhen Tk versii 8.0.              
   tk81*        Porty, kotorym dlya raboty nuzhen Tk versii 8.1.              
   tk82*        Porty, kotorym dlya raboty nuzhen Tk versii 8.2.              
   tkstep80*    Porty, kotorym dlya raboty nuzhen TkSTEP versii 8.0.          
   ukrainian    Podderzhka ukrainskogo yazyka.                                
   vietnamese   Podderzhka v'etnamskogo yazyka.                               
   windowmaker* Porty, podderzhivayuschie menedzher okon WindowMaker          
   www          Programmnoe obespechenie, svyazannoe s World Wide Web.        
                Podderzhka yazyka HTML otnositsya syuda zhe.                  
   x11          X Window System i izhe s nimi. `Eta kategoriya prednaznachena 
                tol'ko dlya programmnogo obespecheniya, kotoroe podderzhivaet 
                okonnuyu sistemu. Ne pomeschajte syuda obychnye prilozheniya  
                X. Esli vash port yavlyaetsya prilozheniem dlya X, zadajte    
                USE_XLIB (chto podrazumevaetsya pri ispol'zovanii USE_IMAKE)  
                i ukazhite podhodyaschuyu kategoriyu. Krome togo, mnogie      
                takie prilozheniya otnosyatsya k kategoriyam x11-* (smotrite  
                nizhe).                                                       
   x11-clocks   CHasy dlya X11.                                               
   x11-fm       Menedzhery fajlov dlya X11.                                   
   x11-fonts    SHrifty dlya X11 i utility dlya raboty s nimi.                
   x11-servers  Servery dlya X11.                                             
   x11-toolkits Pakety razrabotchika dlya X11.                                
   x11-wm       Okonnye menedzhery dlya X11.                                  
   zope*        Podderzhka zope.                                              

     ----------------------------------------------------------------------

                        19.2. Vybor pravil'noj kategorii

   Tak kak mnogie kategorii perekryvayutsya, vam chasto neobhodimo budet
   vybirat', kakaya ih nih dolzhna byt' osnovnoj dlya vashego porta. Est'
   neskol'ko pravil, po kotorym mozhno reshit' `etot vopros. Vot spisok
   prioritetov, v umen'shayuschejsya stepeni predpochteniya.

     * Snachala vsegda idut kategorii, specifichnye dlya yazykov. Naprimer,
       esli vash port ustanavlivaet yaponskie shrifty dlya X11, to strochka
       CATEGORIES dolzhna imet' vid japanese x11-fonts.

     * Bolee konkretnye kategorii predpochtitel'nej pered tochnyh. V
       chastnosti, redaktor HTML dolzhen byt' opisan kak www editors, a ne
       naoborot. Krome togo, vam ne nuzhno ukazyvat' kategoriyu net, esli
       port otnositsya k lyuboj iz kategorij irc, mail, mbone, news, security
       ili www.

     * x11 ispol'zuetsya kak vtorichnaya kategoriya tol'ko v sluchae, kogda v
       kachestve osnovnoj kategorii ukazan estestvennyj yazyk. V chastnosti,
       vam ne nuzhno ukazyvat' x11 v kachestve kategorii dlya prilozhenij X.

     * Rezhimy dlya redaktora Emacs dolzhny pomeschat'sya v tu zhe
       kategoriyu, chto i prilozhenie, kotoroe podderzhivaetsya `etim
       rezhimom, a ne v editors. Naprimer, rezhim Emacs dlya redaktirovaniya
       ishodnogo koda nekotorogo yazyka programmirovaniya dolzhen byt'
       pomeschen v kategoriyu lang.

     * Esli vash port reshitel'nym obrazom ne podpadaet ni pod kakuyu
       kategoriyu, pomestite ego v misc.

   Esli vy ne uvereny v pravil'nosti vybora kategorii, pozhalujsta, otmet'te
   `eto v vashej posylke po send-pr, chtoby my mogli obsudit' `eto do togo,
   kak vklyuchit' port v Kollekciyu. Esli vy yavlyaetes' kommitterom,
   poshlite zamechanie na adres Spisok rassylki, posvyaschennyj Portam
   FreeBSD <freebsd-ports@FreeBSD.org>, chtoby my mogli obsudit'
   `eto--zachastuyu novye porty pomeschayutsya ne v tu kategoriyu tol'ko dlya
   togo, chtoby ih ottuda srazu zhe udalili.

     ----------------------------------------------------------------------

           Chapter 20. Izmeneniya v `etom dokumente i sisteme portov

   Esli vy soprovozhdaete bol'shoe kolichestvo portov, to dolzhny
   otslezhivat' Spisok rassylki, posvyaschennyj Portam FreeBSD
   <freebsd-ports@FreeBSD.org>. Vazhnye izmeneniya v sheme raboty portov
   budut ob"yavlyat'sya zdes'. Vy vsegda mozhete najti bolee podrobnuyu
   informaciyu o samyh poslednih izmeneniyah v zhurnale izmenenij CVS fajla
   bsd.port.mk.

     ----------------------------------------------------------------------

                         Chapter 21. Vot, parni, i vse!

   Itak, malysh, `eto byl dlinnyj rasskaz, ne tak li? Spasibo za to, chto vy
   shli s nami do samogo konca. Teper', kogda vy znaete, kak sozdavat' porty,
   vospol'zujtes' `etimi znaniyami i preobrazujte vse, chto est' na svete, v
   porty! `Eto samyj legkij sposob prinyat' uchastie v Proekte FreeBSD! :-)

     ----------------------------------------------------------------------

   Po voprosam svyazannym s sistemoj portov dlya FreeBSD, pishite po adresu
   <ports@FreeBSD.org>.
   Po voprosam svyazannym s `etom dokumentaciej, pishite po adresu
   <doc@FreeBSD.org>.
