                Rukovodstvo FreeBSD po sozdaniyu portov

  The FreeBSD Documentation Project

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

   FreeBSD `eto zaregistrirovannaya torgovaya marka The FreeBSD
   Foundation.

   UNIX `eto zaregistrirovannaya torgovaya marka The Open Group v
   SSHA i drugih stranah.

   Sun, Sun Microsystems, SunOS, Solaris, i Java `eto torgovye marki
   ili zaregistrirovannye torgovye marki Sun Microsystems, Inc. v
   Soedinennyh SHtatah i drugih stranah.

   Apple i QuickTime `eto torgovye marki Apple Computer, Inc.,
   zaregistrirovannye v SSHA i drugih stranah.

   Macromedia i Flash `eto torgovye marki ili zaregistrirovannye
   torgovye marki Macromedia, Inc. v Soedinennyh SHtatah i/ili drugih
   stranah.

   Microsoft, Windows, i Windows Media `eto ili zaregistrirovannye
   torgovye marki ili torgovye marki Microsoft Corporation v
   Soedinennyh SHtatah i/ili drugih stranah.

   PartitionMagic `eto zaregistrirovannaya torgovaya marka PowerQuest
   Corporation v Soedinennyh SHtatah i/ili drugih stranah.

   Mnogie iz oboznachenij, ispol'zuemyh proizvoditelyami i prodavcami
   dlya oboznacheniya svoih produktov, zayavlyayutsya kak torgovye
   marki. Kogda takie oboznacheniya poyavlyayutsya v `etoj knige, i
   Proektu FreeBSD izvestno o torgovoj marke, k oboznacheniyu
   dobavlyaetsya znak '(TM)'.

   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 sleduyuschij otkaz ot otvetstvennosti v
       pervyh strokah `etogo fajla v neizmennom vide.

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

     Vazhno: `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 PRI KAKIH USLOVIYAH PROEKT DOKUMENTIROVANIYA
     FREEBSD NE NESET OTVETSTVENNOSTI 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 `ETOJ
     DOKUMENTACII, DAZHE ESLI BY BYLO SOOBSCHENO O VOZMOZHNOSTI
     TAKOGO USCHERBA.

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

   Soderzhanie

   1. Vvedenie

   2. Kak samomu sdelat' port

   3. Bystroe portirovanie

                3.1. Sozdanie fajla Makefile

                3.2. Sozdanie informacionnyh fajlov

                             3.2.1. pkg-descr

                             3.2.2. pkg-plist

                3.3. Sozdanie fajla s kontrol'noj summoj

                3.4. Testirovanie porta

                3.5. Proverka vashego porta utilitoj portlint

                3.6. Posylka porta

   4. Medlennoe portirovanie

                4.1. Kak vsio `eto rabotaet

                4.2. Poluchenie ishodnogo koda

                4.3. Modifikaciya porta

                4.4. Sozdanie patchej

                4.5. Konfigurirovanie

                4.6. Obrabotka pol'zovatel'skogo vvoda

   5. Nastrojka fajla Makefile

                5.1. Original'nye ishodnyj kod

                5.2. Imenovanie

                             5.2.1. PORTNAME i PORTVERSION

                             5.2.2. PORTREVISION i PORTEPOCH

                             5.2.3. Peremennye PKGNAMEPREFIX i
                             PKGNAMESUFFIX

                             5.2.4. Soglasheniya po imenovaniyu
                             paketov

                5.3. Razdelenie po kategoriyam

                             5.3.1. CATEGORIES

                             5.3.2. Tekuschij spisok kategorij

                             5.3.3. Vybor pravil'noj kategorii

                5.4. Distributivnye fajly

                             5.4.1. DISTNAME

                             5.4.2. MASTER_SITES

                             5.4.3. EXTRACT_SUFX

                             5.4.4. DISTFILES

                             5.4.5. EXTRACT_ONLY

                             5.4.6. PATCHFILES

                             5.4.7. Neskol'ko distributivnyh fajlov
                             ili patchej s razlichnyh serverov i
                             podkatalogov (MASTER_SITES:n)

                             5.4.8. DIST_SUBDIR

                5.5. MAINTAINER

                5.6. COMMENT

                5.7. Zavisimosti

                             5.7.1. LIB_DEPENDS

                             5.7.2. RUN_DEPENDS

                             5.7.3. BUILD_DEPENDS

                             5.7.4. FETCH_DEPENDS

                             5.7.5. EXTRACT_DEPENDS

                             5.7.6. PATCH_DEPENDS

                             5.7.7. DEPENDS

                             5.7.8. USE_*

                             5.7.9. Zamechaniya kasatel'no
                             zavisimostej

                             5.7.10. Neobyazatel'nye zavisimosti

                             5.7.11. Zaciklennye zavisimosti fatal'ny

                5.8. Zadanie rabochego kataloga

                             5.8.1. WRKSRC

                             5.8.2. NO_WRKSUBDIR

                5.9. CONFLICTS

                5.10. Mehanizmy postroeniya

   6. Osobye soglasheniya

                6.1. Dinamicheskie biblioteki

                6.2. Porty s ogranicheniyami na rasprostranenie

                             6.2.1. NO_PACKAGE

                             6.2.2. NO_CDROM

                             6.2.3. RESTRICTED

                             6.2.4. RESTRICTED_FILES

                6.3. Ispol'zovanie perl

                6.4. Ispol'zovanie X11

                6.5. Ispol'zovanie automake, autoconf i libtool

                6.6. Ispol'zovanie GNOME

                6.7. Ispol'zovanie KDE

                6.8. Ispol'zovanie Bison

                6.9. Ispol'zovanie Java

                             6.9.1. Zadanie peremennyh

                             6.9.2. Prakticheskie rekomendacii

                6.10. Ispol'zovanie Python

                6.11. Ispol'zovanie Emacs

                6.12. Ispol'zovanie Ruby

                6.13. Ispol'zovanie SDL

   7. MASTERDIR

   8. Versii dinamicheskih bibliotek

   9. Stranicy Spravochnika

   10. Porty, kotorym trebuetsya Motif

                10.1. USE_MOTIF

                10.2. MOTIFLIB

   11. SHrifty dlya X11

   12. Fajly v formate info

   13. Fajly pkg-*

                13.1. pkg-message

                13.2. pkg-install

                13.3. pkg-deinstall

                13.4. pkg-req

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

                13.6. Izmenenie imion fajlov pkg-*

   14. Testirovanie vashego porta

                14.1. Zapusk make describe

                14.2. Portlint

                14.3. PREFIX

   15. Obnovlenie

   16. CHto delat' nuzhno, i chto delat' nel'zya

                16.1. Vvedenie

                16.2. Udalenie otladochnoj informacii v binarnyh
                fajlah

                16.3. Makrosy INSTALL_*

                16.4. WRKDIR

                16.5. WRKDIRPREFIX

                16.6. Razlichenie operacionnyh sistem i versij OS

                16.7. Znacheniya __FreeBSD_version

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

                16.9. Ustanovka dopolnitel'noj dokumentacii

                16.10. Podkatalogi

                16.11. Ochistka pustyh katalogov

                16.12. Identifikatory UID

                16.13. Postupajte razumno

                16.14. Rabota kak s CC, tak i CXX

                16.15. Ispol'zovanie CFLAGS

                16.16. Konfiguracionnye fajly

                16.17. Pozhelaniya

                16.18. README.html

                16.19. Pometka porta kak BROKEN, FORBIDDEN ili kak-to
                eschio

                16.20. Neobhodimye predostorozhnosti

                16.21. Raznoe

                16.22. Esli vy ispytyvaete zatrudneniya...

   17. Primernyj Makefile

   18. Avtomaticheskoe sozdanie spiska upakovki

   19. Aktualizaciya

                19.1. FreshPorts

                19.2. Web-interfejs k hranilischu ishodnyh tekstov

                19.3. Spisok rassylki FreeBSD, posvyaschionnyj portam

                19.4. Klaster postroeniya portov FreeBSD

                19.5. Proverka distributivnyh fajlov portov FreeBSD

                19.6. Sistema monitoringa portov FreeBSD

   Spisok tablic

   5-1. Peremennye USE_*

   6-1. Peremennye dlya portov, ispol'zuyuschih perl

   6-2. Peremennye dlya portov, ispol'zuyuschih X

   6-3. Peremennye dlya portov, ispol'zuyuschih automake, autoconf
   ili libtool

   6-4. Peremennye dlya portov, kotorye ispol'zuyut KDE

   6-5. Peremennye, kotorye kotorye mogut zadavat'sya portami,
   ispol'zuyuschimi Java

   6-6. Peremennye, dostupnye v portah, ispol'zuyuschih Java

   6-7. Konstanty, opredelionnye dlya portov, ispol'zuyuschih Java

   16-1. Znacheniya __FreeBSD_version

   Spisok primerov

   5-1. Uproschionnoe ispol'zovanie MASTER_SITES:n s 1 fajlom na
   kazhdom sajte

   5-2. Uproschionnoe ispol'zovanie MASTER_SITES:n s bolee chem 1
   fajlom na kazhdom servere

   5-3. Podrobnoe ispol'zovanie MASTER_SITES:n v MASTER_SITE_SUBDIR

   5-4. Podrobnoe ispol'zovanie MASTER_SITES:n s zapyatymi,
   neskol'kimi fajlami, neskol'kimi serverami i neskol'kimi
   podkatalogami

   5-5. Podrobnoe ispol'zovanie MASTER_SITES:n s
   MASTER_SITE_SOURCEFORGE

   5-6. Uproschionnoe ispol'zovanie MASTER_SITES:n s PATCH_SITES.

   14-1. Kak izbegat' ispol'zovanie .error

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

                           Glava 1. Vvedenie

   Kollekciya portov FreeBSD yavlyaetsya sposobom, ispol'zuemym
   prakticheski kazhdym dlya ustanovki prilozhenij ("portov") na
   FreeBSD. Kak i pochti vsio ostal'noe vo FreeBSD, `eta sistema v
   osnovnom yavlyaetsya dobrovol'no podderzhivaemym nachinaniem.
   Vazhno imet' `eto v vidu pri chtenii dannogo dokumenta.

   Vo FreeBSD lyuboj mozhet prislat' novyj port libo iz"yavit'
   zhelanie podderzhivat' suschestvuyuschij port, esli ego nikto
   eschio nikto ne podderzhivaet--vam ne nuzhno imet' nikakih osobyh
   privilegij na vnesenie izmenenij, chtoby `eto delat'.

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

                    Glava 2. Kak samomu sdelat' port

   Itak, vy interesuetes', 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 Gl. 15.

   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,
   posvyaschionnyj Portam FreeBSD.

     Zamechanie: Tol'ko chast' peremennyh (VAR), kotorye mogut byt'
     pereopredeleny, opisany v `etom dokumente. Bol'shinstvo (esli ne
     vse) opisany v nachale fajla /usr/ports/Mk/bsd.port.mk;
     ostal'nye, skoree vsego, tozhe tam opisany. Zamet'te, chto v
     `etom fajle ispol'zuetsya nestandartnaya nastrojka shaga
     tabulyacii: Emacs i Vim dolzhny raspoznat' `eto pri zagruzke
     fajla. Kak vi(1), tak i ex(1) mogut byt' nastroeny na
     ispol'zovanie pravil'nogo znacheniya vydachej komandy :set
     tabstop=4 posle zagruzki fajla.

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

                     Glava 3. Bystroe portirovanie

   V `etom razdele budet opisano, kak sdelat' port na skoruyu ruku.
   Vo mnogih sluchayah `etogo byvaet ne dostatochno, tak chto vam
   nuzhno budet prochitat' dokument dal'she.

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

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

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

3.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.

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

3.2. Sozdanie informacionnyh fajlov

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

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

  3.2.1. pkg-descr

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

     Zamechanie: `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'. Pered
     odnim iz sajtov dobav'te slovo 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

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

  3.2.2. pkg-plist

   Zdes' perechislyayutsya vse fajly, ustanavlivaemye portom. Ego
   takzhe nazyvayut ``spiskom dlya upakovki'', potomu chto paket
   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 spravochnoj sistemy po komande pkg_create(1)
   s podrobnym opisaniem formata spiska upakovki.

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

   Suschestvuet tol'ko odno isklyuchenie, kogda u porta mozhet
   otsutstvovat' pkg-plist. Esli port ustanavlivaet lish' neskol'ko
   fajlov, a vozmozhno, i katalogov, to oni mogut byt' perechisleny v
   peremennyh PLIST_FILES i PLIST_DIRS, sootvetstvenno, vnutri fajla
   Makefile porta. K primeru, my mozhem obojtis' bez fajla pkg-plist
   u privedionnogo vyshe porta oneko, dobaviv sleduyuschie stroki v
   Makefile:

 PLIST_FILES=    bin/oneko \
                 lib/X11/app-defaults/Oneko \
                 lib/X11/oneko/cat1.xpm \
                 lib/X11/oneko/cat2.xpm \
                 lib/X11/oneko/mouse.xpm
 PLIST_DIRS=     lib/X11/oneko

   Konechno, peremennaya PLIST_DIRS ne dolzhna zadavat'sya, esli port
   ne ustanavlivaet nikakih katalogov.

   Obratnoj storonoj takogo sposoba perechisleniya fajlov i katalogov
   porta yavlyaetsya nevozmozhnost' ispol'zovaniya
   posledovatel'nostej komand, opisannyh v pkg_create(1). Po`etomu on
   podhodit dlya prostyh portov, chto delaet ih eschio bolee
   prostymi. Odnovremenno s `etim polozhitel'nym momentom yavlyaetsya
   umen'shenie kolichestva fajlov v kollekcii portov. Pozhalujsta,
   podumajte nad ispol'zovaniem `etoj tehniki, prezhde chem sozdavat'
   pkg-plist.

   Dalee my uvidim, kak mozhno ispol'zovat' fajly pkg-plist i
   PLIST_FILES vypolneniya bolee slozhnyh zadach.

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

3.3. Sozdanie fajla s kontrol'noj summoj

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

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

3.4. Testirovanie porta

   Vy dolzhny udostoverit'sya, chto pravila postroeniya porta
   vypolnyayut imenno to, chto vy hotite, vklyuchaya sozdanie paketa
   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 paketa.

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

3.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 paket.

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

3.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 paket 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 20KB, 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''.

     Zamechanie: Vy mozhete znachitel'no oblegchit' nashu rabotu,
     esli v temu soobscheniya o probleme pomestite horoshee opisanie.
     My rekomenduem nechto vrode ``New port: <kategoriya>/<nazvanie
     porta> <kratkoe opisanie porta>'' dlya novyh portov i ``Update
     port: <kategoriya>/<imya porta> <kratkoe opisanie obnovleniya>''
     v sluchae obnovleniya portov. Esli vy sleduete `etoj sheme, to
     shansy na to, chto na vashe PR vskore kto-to vzglyanet, gorazdo
     vyshe.

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

   Posle togo kak vy poslali port, pozhalujsta, poterpite. Inogda
   vklyuchenie novogo porta mozhet zanyat' do neskol'kih mesyacev, a
   inogda vsego neskol'ko dnej. Zdes' vy mozhete najti spisok portov
   ozhidayuschih svoej ocheredi dlya vklyucheniya vo FreeBSD.

   My rassmotrim vash port, pri neobhodimosti verniom ego obratno, a
   zatem vklyuchim port v nashe derevo. Vashe imya takzhe poyavitsya
   v spiske Dopolnitel'nyh kontributorov proekta FreeBSD i drugih
   fajlah. Razve `eto ne velikolepno?!? :-)

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

                    Glava 4. 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.

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

4.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, opredelionnaya 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.

     Zamechanie: ``Osnovnye'' celi (k primeru, extract, configure i
     tak dalee) 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 menyajte sposob raboty extract!

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

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

4.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.

   Vam potrebuetsya zadat' znachenie peremennoj MASTER_SITES tak,
   chtoby ono ukazyvalo na mestopolozhenie original'nogo tar-arhiva.
   V fajle bsd.sites.mk vy najdiote kratkie oboznacheniya dlya
   bol'shinstva populyarnyh sajtov. Pozhalujsta, ispol'zujte `eti
   sajty--i sootvetstvuyuschie opredeleniya--vezde, gde `eto
   vozmozhno, chtoby izbezhat' problem povtoreniya odnoj i toj zhe
   informacii v baze istochnikov. Tak kak `eti sajty so vremenem
   menyayutsya, dlya vseh prichastnyh podderzhka stanovitsya
   nastoyaschim koshmarom.

   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).

   Esli vy ne mozhete najti dostupnogo i nadiozhnogo mesta dlya
   pomescheniya distributivnogo fajla, to my sami smozhem razmestit'
   ego na servere ftp.FreeBSD.org; odnako `eto naimenee rekomenduemoe
   reshenie. 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
   neizvestnym prichinam bez izmeneniya versij so storony avtora,
   ostaiotsya tol'ko pomestit' distributiv na vashu domashnyuyu
   Web-stranicu i ukazat' eio pervoj v spiske MASTER_SITES. Esli
   mozhete, popytajtes' dogovorit'sya s avtorom porta ob `etom; `eto
   dejstvitel'no pomogaet v dostizhenii nekotorogo upravleniya
   ishodnym kodom. Hostirovanie sobstvennoj versii pomozhet izbezhat'
   poyavleniya oshibok u pol'zovatelej tipa "checksum mismatch", 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).

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

4.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.

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

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

4.4. Sozdanie patchej

   Fajly, kotorye dobavlyalis' ili izmenyalis' v processe sozdaniya
   porta, mogut byt' vyyavleny vyzovom programmy diff(1) s rekursiej,
   a rezul'tat raboty `etoj programmy mozhet byt' v dal'nejshem
   peredan programme patch(1). 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).

   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.

   Ispol'zovanie parametra rekursii (-r) s komandoj diff(1) dlya
   generacii patchej - `eto horosho, no vsio zhe, pozhalujsta,
   smotrite na poluchayuschiesya patchi, chtoby ubedit'sya v
   otsutstvii nenuzhnogo musora. V chastnosti, diff-raznic 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_VER=213 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.

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

4.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.

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

4.6. Obrabotka pol'zovatel'skogo vvoda

   Esli dlya postroeniya, konfiguracii ili ustanovki vashego porta
   trebuetsya nekotoryj vvod so storony pol'zovatelya, to vy dolzhny
   zadat' 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. `Eto s`ekonomit znachitel'noe kolichestvo vremeni
   na chasti mashin, kotorye postoyanno stroyat porty (smotrite
   nizhe).

   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' pakety dlya pomescheniya na
   kompakt-diski i FTP-servery.

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

                   Glava 5. 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:

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

5.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.

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

5.2. Imenovanie

   V pervoj chasti Makefile porta emu daiotsya nazvanie, ukazyvaetsya
   ego nomer versii i prinadlezhnost' k pravil'noj kategorii.

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

  5.2.1. PORTNAME i PORTVERSION

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

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

  5.2.2. PORTREVISION i PORTEPOCH

    5.2.2.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 paketa, esli ono ne ravno nulyu. Izmeneniya
   v PORTREVISION ispol'zuyutsya avtomatizirovannymi instrumentami
   (naprimer, pkg_version(1)) dlya opredeleniya fakta poyavleniya
   novogo paketa.

   Znachenie PORTREVISION dolzhno uvelichivat'sya kazhdyj raz, kogda
   v porte FreeBSD delayutsya izmeneniya, kotorye dostatochno sil'no
   zatragivayut soderzhimoe ili strukturu sootvetstvuyuschego paketa.

   Primery sluchaev, kogda znachenie PORTREVISION dolzhno byt'
   uvelicheno:

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

     * Izmeneniya v fajle Makefile porta dlya vklyucheniya i
       vyklyucheniya parametrov, opredelyaemyh pri kompilyacii
       paketa.

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

     * Uvelichenie versii dinamicheskoj biblioteki, ot kotoroj
       zavisit port (v `etom sluchae tot, kto popytaetsya ustanovit'
       staryj paket 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 pakete.

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

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

     * Ispravleniya, kasayuschiesya `etapa postroeniya, kotorye
       delayut vozmozhnym postroenie paketa, 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 paketa,
       to, esli ranee paket 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 ot nego vyigrayut vse (v vide
   usovershenstvovaniya, ispravleniya ili blagodarya tomu, chto novyj
   paket budet voobsche rabotosposobnym), i primite vo vnimanie tot
   fakt, chto pri `etom vse, kto regulyarno obnovlyayut svoio derevo
   portov, budut obyazany `eto sdelat'. Esli `eto tak, to peremennaya
   PORTREVISION dolzhna byt' uvelichena.

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

    5.2.2.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 paketa, kak opisano v razdele vyshe.
   Znachenie PORTEPOCH nikogda ne dolzhno umen'shat'sya ili
   sbrasyvat'sya v nol', potomu chto `eto privediot k oshibke
   sravneniya s paketom s men'shim nomerom `epohi (to est' to, chto
   paket 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 paketa).

   Nekorrektnoe umen'shenie ili sbros PORTEPOCH privodit k pechal'nym
   posledstviyam; esli vy ne ponyali, o chiom shla rech' ranee,
   pozhalujsta, vsio zhe razberites' s `etim, libo sprosite v spiskah
   rassylki.

   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.

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

    5.2.2.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 paket kak ``bolee novyj''. Tak kak
   `eto novyj reliz programmy, to PORTREVISION obnulyaetsya (ili
   udalyaetsya iz fajla Makefile).

 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

     Zamechanie: Esli znachenie PORTEPOCH `etim obnovleniem bylo by
     sbrosheno v 0, to kto-nibud', imeyuschij ustanovlennyj paket
     gtkmumble-0.10_1, ne smog by opoznat' paket gtkmumble-0.3 kak
     bolee novyj, tak kak 3 bylo by men'she, chem 10. Pomnite, chto v
     pervuyu ochered' `eto kasaetsya PORTEPOCH.

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

  5.2.3. 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 paketov. V chastnosti, v
   peremennoj PORTVERSION ne razreshaetsya ispol'zovanie defisa (-).
   Krome togo, esli v imeni paketa prisutstvuet chast' language- ili
   -compiled.specifics (smotrite nizhe), to ispol'zujte peremennye
   PKGNAMEPREFIX i PKGNAMESUFFIX, sootvetstvenno. Ne delajte ih
   chast'yu znacheniya peremennoj PORTNAME.

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

  5.2.4. Soglasheniya po imenovaniyu paketov

   Dalee opisany nekotorye soglasheniya, kotorym vy dolzhny sledovat'
   v imenovanii vashih paketov. Oni byli razrabotany dlya
   oblegcheniya prosmotra kataloga, tak kak imeetsya uzhe tysyachi
   paketov, a pol'zovateli otvernutsya ot nas, esli spisok ne
   ponravitsya ih vzoru!

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

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

    1. FreeBSD pytaetsya podderzhivat' yazyki, na kotoryh
       razgovarivayut eio 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 ``patchlevel''), 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
   paketa:

     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'       
                                                                 Dlya otdel'nyh      
EmiClock-1.0.2  (pusto)       emiclock (pusto)       1.0.2       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?      
                                                                 Vsegda trebuetsya   
tvtwm           (pusto)       tvtwm    (pusto)       pl11        ukazanie nomera     
                                                                 versii              
                                                                 Vsegda trebuetsya   
piewm           (pusto)       piewm    (pusto)       1.0         ukazanie nomera     
                                                                 versii              
                                                                 pl razresheno       
                                                                 tol'ko pri          
xvgr-2.10pl1    (pusto)       xvgr     (pusto)       2.10.1      otsutstvii          
                                                                 starshego/mladshego 
                                                                 nomera versii       
gawk-2.15.6     ja-           gawk     (pusto)       2.15.6      Versiya na          
                                                                 yaponskom yazyke    
                                                                 Razmer bumagi       
                                                                 zadaetsya           
psutils-1.13    (pusto)       psutils  -letter       1.13        staticheski vo      
                                                                 vremya postroeniya  
                                                                 paketa              
pkfonts         (pusto)       pkfonts  300           1.0         paket 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.

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

5.3. Razdelenie po kategoriyam

  5.3.1. CATEGORIES

   V processe sozdaniya paketa 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 paketov 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, posvyaschionnyj Portam FreeBSD. Odnako,
   voobsche govorya, poka ne naberiotsya bolee chem dostatochnogo
   kolichestva portov, kotorye mozhno otnesti k predlagaemoj vami
   kategorii, vasha ideya budet otvergat'sya.

     Zamechanie: Vremya ot vremeni kto-nibud' predlagaet proizvesti
     reorganizaciyu kategorij libo do dvuhurovnevoj, libo drugogo
     tipa na osnove klyuchevyh slov. Na dannyj moment iz `etih
     predlozhenij nichego ne poluchilos', potomu chto, hotya oni
     prosty v realizacii, no predpolagaemaya peredelka vsej kollekcii
     portov po men'shej mere privodit v unynie. Pozhalujsta,
     prochtite istoriyu `etih predlozhenij v arhivah rassylok pered
     tem, kak prisylat' svoi soobrazheniya; bolee togo, vy dolzhny
     byt' gotovy predstavit' rabotayuschij prototip.

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

  5.3.2. Tekuschij spisok kategorij

   Vot tekuschij spisok kategorij. Te, kotorye otmecheny zviozdochkoj
   (*), yavlyayutsya virtual'nymi kategoriyami--oni ne imeyut
   sobstvennogo podkataloga v dereve portov. Oni ispol'zuyutsya
   tol'ko v kachestve vtorichnyh kategorij, i tol'ko dlya poiska.

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

    Kategoriya          Opisanie                Primechaniya        
                 Porty dlya pomoschi                                
   accessibility pol'zovatelyam s                                   
                 ogranichennymi                                     
                 vozmozhnostyami.                                   
                 Porty,                                             
   afterstep*    podderzhivayuschie                                 
                 menedzher okon                                     
                 AfterStep.                                         
   arabic        Podderzhka arabskogo                               
                 yazyka.                                            
   archivers     Instrumenty dlya raboty                            
                 s arhivami.                                        
                 Prilozheniya,                                      
   astro         svyazannye s                                       
                 astronomiej.                                       
   audio         Podderzhka raboty so                               
                 zvukom.                                            
                 Utility dlya izmereniya                            
   benchmarks    proizvoditel'nosti                                 
                 sistemy.                                           
                 Programmnoe                                        
   biology       obespechenie,                                      
                 svyazannoe s biologiej.                            
                 Instrumenty Sistem                                 
   cad           Avtomatizirovannogo                                
                 Proektirovaniya.                                   
   chinese       Podderzhka kitajskogo                              
                 yazyka.                                            
                 Kommunikacionnoe        V osnovnom programmy dlya  
   comms         programmnoe             raboty s posledovatel'nym  
                 obespechenie.           portom.                    
                 Utility dlya                                       
   converters    preobrazovaniya                                    
                 simvol'nyh formatov.                               
   databases     Bazy dannyh.                                       
                 To, chto bylo na stole                             
   deskutils     do izobreteniya                                    
                 komp'yuterov.                                      
                                         Ne pomeschajte syuda       
                                         biblioteki prosto potomu   
                 Utility dlya razrabotki chto `eto biblioteki--esli 
   devel         programmnogo            oni podpadayut pod         
                 obespecheniya.          kakuyu-to druguyu          
                                         kategoriyu, to ih byt'     
                                         zdes' ne dolzhno.          
                 Programmnoe                                        
   dns           obespechenie dlya                                  
                 raboty s DNS.                                      
                                         Specializirovannye         
                                         redaktory otnosyat k       
                                         razdelu dlya               
   editors       Redaktory obschego      sootvetstvuyuschih         
                 naznacheniya.           instrumentov (naprimer,    
                                         redaktor matematicheskih   
                                         formul popadaet v          
                                         kategoriyu math).          
   elisp*        Porty dlya Emacs lisp.                             
                                         `Emulyatory terminalov     
                                         syuda ne otnosyatsya--te,  
                                         kotorye razrabotany dlya   
   emulators     `Emulyatory drugih      X, dolzhny byt' v          
                 operacionnyh sistem.    kategorii x11, a tekstovye 
                                         v comms ili misc, v        
                                         zavisimosti ot konkretnogo 
                                         ih prednaznacheniya.       
                 Prilozheniya dlya                                  
   finance       raboty s den'gami,                                 
                 finansami i vsem, chto                             
                 s `etim svyazano.                                  
   french        Podderzhka francuzskogo                            
                 yazyka.                                            
                                         Esli vash port ponimaet    
                                         kak FTP, tak i HTTP,       
   ftp           Klienty i servery FTP.  pomestite ego v kategoriyu 
                                         ftp i ukazhite vtorichnuyu 
                                         kategoriyu www.            
   games         Igry.                                              
   german        Podderzhka nemeckogo                               
                 yazyka.                                            
   gnome*        Porty Proekta GNOME.                               
   graphics      Graficheskie utility.                              
                 Programmnoe                                        
   haskell*      obespechenie,                                      
                 svyazannoe s yazykom                               
                 Haskell.                                           
   hebrew        Podderzhka ivrita.                                 
   hungarian     Podderzhka vengerskogo                             
                 yazyka.                                            
                 Programmnoe                                        
   ipv6*         obespechenie,                                      
                 svyazannoe s IPv6.                                 
   irc           Utility dlya raboty s                              
                 Internet Relay Chat.                               
   japanese      Podderzhka yaponskogo                              
                 yazyka.                                            
                 Programmnoe                                        
   java          obespechenie,                                      
                 svyazannoe s yazykom                               
                 Java.                                              
   kde*          Porty proekta K Desktop                            
                 Environment (KDE).                                 
   korean        Podderzhka korejskogo                              
                 yazyka.                                            
   lang          YAzyki                                             
                 programmirovaniya.                                 
   linux*        Linux prilozheniya i                               
                 utility.                                           
                 Programmnoe                                        
   lisp*         obespechenie,                                      
                 svyazannoe s yazykom                               
                 Lisp.                                              
   mail          Programmy dlya raboty s                            
                 `elektronnoj pochtoj.                              
                 Programmnoe                                        
                 obespechenie dlya                                  
   math          chislennyh vychislenij                             
                 i drugie utility,                                  
                 svyazannye s                                       
                 matematikoj.                                       
   mbone         Prilozheniya dlya                                  
                 MBone.                                             
                                         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 eschio v  
   misc          Razlichnye utility      stroke CATEGORIES, `eto    
                                         znachit, chto vy mozhete   
                                         spokojno udalit' misc i    
                                         prosto pomestit' port v    
                                         `etot drugoj podkatalog!   
                                         Esli `eto vozmozhno,       
                                         poprobujte najti bolee     
                                         podhodyaschuyu, chem misc, 
                                         kategoriyu dlya vashego    
                                         porta, tak kak zdes' porty 
                                         teryayutsya.               
                 Programmnoe                                        
   multimedia    obespechenie dlya                                  
                 raboty s mul'timedia.                              
                 Razlichnoe setevoe                                 
   net           programmnoe                                        
                 obespechenie.                                      
                 Programmnoe                                        
   net-mgmt      obespechenie dlya                                  
                 setevogo upravleniya.                              
                 Programmnoe                                        
   news          obespechenie dlya                                  
                 raboty s konferenciyami                            
                 USENET.                                            
   offix*        Porty iz paketa OffiX.                             
   palm          Programmnaya podderzhka                            
                 Palm(TM).                                          
                 Prilozheniya,                                      
   parallel*     svyazannye s                                       
                 parallel'nymi                                      
                 vychisleniyami.                                    
   pear*         Porty, otnosyaschiesya                             
                 k tehnologii Pear PHP.                             
                 Porty, kotorym dlya                                
   perl5*        raboty trebuetsya Perl                             
                 versii 5.                                          
   picobsd       Porty dlya podderzhki                              
                 PicoBSD.                                           
   plan9*        Razlichnye programmy iz                            
                 Plan9.                                             
   polish        Podderzhka pol'skogo                               
                 yazyka.                                            
   portuguese    Podderzhka                                         
                 portugal'skogo yazyka.                             
                 Programmnoe             Instrumenty dlya viorstki    
   print         obespechenie dlya       (prosmotrschiki i tomu      
                 pechati.                podobnoe) tozhe            
                                         otnosyatsya syuda.         
                 Programmnoe                                        
   python*       obespechenie,                                      
                 svyazannoe s yazykom                               
                 Python.                                            
                 Programmnoe                                        
   ruby*         obespechenie,                                      
                 svyazannoe s yazykom                               
                 Ruby.                                              
   russian       Podderzhka russkogo                                
                 yazyka.                                            
                 Nauchnye programmy,                                
                 kotorye ne podpadayut                              
   science       pod drugie kategorii,                              
                 skazhem, astro, biology                            
                 ili math.                                          
                 Programmy,                                         
   security      obespechivayuschie                                 
                 bezopasnost' sistemy.                              
   shells        Razlichnye komandnye                               
                 processory.                                        
   sysutils      Sistemnye utility.                                 
                 Porty, kotorym dlya                                
   tcl76*        raboty nuzhen Tcl                                  
                 versii 7.6.                                        
                 Porty, kotorym dlya                                
   tcl80*        raboty nuzhen Tcl                                  
                 versii 8.0.                                        
                 Porty, kotorym dlya                                
   tcl81*        raboty nuzhen Tcl                                  
                 versii 8.1.                                        
                 Porty, kotorym dlya                                
   tcl82*        raboty nuzhen Tcl                                  
                 versii 8.2.                                        
                 Porty, kotorym dlya                                
   tcl83*        raboty nuzhen Tcl                                  
                 versii 8.3.                                        
                                         Instrumenty dlya viorstki  
   textproc      Utility dlya obrabotki  pomeschayutsya v           
                 tekstov.                kategoriyu print, a ne     
                                         syuda.                     
                 Porty, kotorym dlya                                
   tk42*         raboty nuzhen Tk versii                            
                 4.2.                                               
                 Porty, kotorym dlya                                
   tk80*         raboty nuzhen Tk versii                            
                 8.0.                                               
                 Porty, kotorym dlya                                
   tk81*         raboty nuzhen Tk versii                            
                 8.1.                                               
                 Porty, kotorym dlya                                
   tk82*         raboty nuzhen Tk versii                            
                 8.2.                                               
                 Porty, kotorym dlya                                
   tk83*         raboty nuzhen Tk versii                            
                 8.3.                                               
                 Porty, kotorym dlya                                
   tkstep80*     raboty nuzhen TkSTEP                               
                 versii 8.0.                                        
   ukrainian     Podderzhka ukrainskogo                             
                 yazyka.                                            
   vietnamese    Podderzhka v'etnamskogo                            
                 yazyka.                                            
                 Porty,                                             
   windowmaker*  podderzhivayuschie                                 
                 menedzher okon                                     
                 WindowMaker.                                       
                 Programmnoe                                        
   www           obespechenie,           Podderzhka yazyka HTML     
                 svyazannoe s World Wide otnositsya syuda zhe.      
                 Web.                                               
                                         `Eta kategoriya            
                                         prednaznachena tol'ko dlya 
                                         programmnogo               
                                         obespecheniya, kotoroe     
                                         podderzhivaet samu         
                                         okonnuyu sistemu. Ne       
                                         pomeschajte syuda obychnye 
                                         prilozheniya dlya X:       
                 X Window System i izhe  bol'shinstvo iz nih        
   x11           s nimi.                 dolzhny byt' pereneseny v  
                                         drugie kategorii x11-*     
                                         (smotrite nizhe). Esli     
                                         vash port yavlyaetsya      
                                         prilozheniem dlya X,       
                                         zadajte USE_XLIB (chto     
                                         podrazumevaetsya pri       
                                         ispol'zovanii USE_IMAKE) i 
                                         ukazhite podhodyaschuyu    
                                         kategoriyu.                
   x11-clocks    CHasy dlya X11.                                    
   x11-fm        Menedzhery fajlov dlya                             
                 X11.                                               
                 SHrifty dlya X11 i                                 
   x11-fonts     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.                                   

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

  5.3.3. 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 bolee
       obschimi. V chastnosti, redaktor HTML dolzhen byt' opisan kak
       www editors, a ne naoborot. Krome togo, vy ne dolzhny
       ukazyvat' kategoriyu net, esli port otnositsya k odnoj iz
       kategorij irc, mail, mbone, news, security ili www, tak kak
       net vklyuchaetsya avtomaticheski.

     * x11 ispol'zuetsya kak vtorichnaya kategoriya tol'ko v sluchae,
       esli 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 vashem soobschenii cherez send-pr(1), chtoby my
   mogli obsudit' `eto do togo, kak vklyuchit' port v Kollekciyu.
   Esli vy yavlyaetes' kommitterom, poshlite zamechanie na adres
   Spisok rassylki, posvyaschionnyj Portam FreeBSD, chtoby my mogli
   obsudit' `eto. Zachastuyu novye porty pomeschayutsya ne v tu
   kategoriyu tol'ko dlya togo, chtoby ih ottuda srazu zhe udalili.
   `Eto privodit k izlishnemu i nenuzhnomu rostu osnovnogo
   hranilischa ishodnyh tekstov.

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

5.4. Distributivnye fajly

   Vo vtoroj chasti Makefile zadaiotsya, kakie fajly i otkuda dolzhny
   byt' sgruzheny dlya togo, chtoby postroit' port.

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

  5.4.1. DISTNAME

   V peremennoj DISTNAME ukazyvaetsya imya porta tak, kak nazvali ego
   sozdateli programmnogo obespecheniya. Znachenie DISTNAME po
   umolchaniyu sovpadaet s ${PORTNAME}-${PORTVERSION}, tak chto
   pereopredelyaete eio znachenie tol'ko 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}.

     Zamechanie: Znacheniya peremennyh PKGNAMEPREFIX i PKGNAMESUFFIX
     ne vliyayut na znachenie DISTNAME. Zamet'te takzhe, chto esli
     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).

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

  5.4.2. 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. My dazhe planiruem dobavit' podderzhku avtomaticheskogo
   opredeleniya blizhajshego sajta i sgruzki fajlov ottuda; nalichie
   neskol'kih sajtov budet sposobstvovat' `etomu nachinaniyu.

   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 opredeleny v fajle /usr/ports/Mk/bsd.sites.mk.
   Vsio vremya dobavlyayutsya novye zapisi, 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.

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

  5.4.3. EXTRACT_SUFX

   Esli u vas imeetsya odin distributivnyj fajl, i v ego imeni
   ispol'zuetsya strannoe okonchanie dlya ukazaniya tipa szhatiya,
   zadajte peremennuyu EXTRACT_SUFX.

   K primeru, esli distributivnyj fajl nosit imya foo.tgz, a ne bolee
   privychnoe foo.tar.gz, vy dolzhny napisat':

 DISTNAME=      foo
 EXTRACT_SUFX=  .tgz

   Peremennye USE_BZIP2 i USE_ZIP avtomaticheski ustanavlivayut
   znachenie EXTRACT_SUFX v .bz2 ili .zip sootvetstvenno. Esli ni
   odna iz `etih peremennyh ne zadana, to znachenie EXTRACT_SUFX po
   umolchaniyu ustanavlivaetsya v .tar.gz.

     Zamechanie: Vam ne nuzhno zadavat' znacheniya EXTRACT_SUFX i
     DISTFILES odnovremenno.

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

  5.4.4. DISTFILES

   Inogda imena sgruzhaemyh fajlov ne sootvetstvuyut imeni porta. K
   primeru, fajl mozhet nazyvat'sya source.tar.gz ili podobnym
   obrazom. V drugih sluchayah ishodnyj kod prilozheniya mozhet
   raspolagat'sya v neskol'kih otlichayuschihsya arhivah, i vse oni
   dolzhny byt' sgruzheny.

   Esli `eto vash sluchaj, to zadajte v peremennoj DISTFILES spisok
   razdelionnyh probelami imion fajlov, kotorye nuzhno sgruzit'.

 DISTFILES=     source1.tar.gz source2.tar.gz

   Esli peremennaya DISTFILES ne zadana yavno, to eio znacheniem po
   umolchaniyu budet ${DISTNAME}${EXTRACT_SUFX}.

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

  5.4.5. EXTRACT_ONLY

   Esli tol'ko nekotorye iz DISTFILES dolzhny byt' raspakovany--k
   primeru, chast' iz nih yavlyaetsya ishodnym kodom, a drugie
   predstavlyayut soboj neupakovannuyu dokumentaciyu--perechislite
   imena fajlov, kotorye dolzhny byt' raspakovany, v EXTRACT_ONLY.

 DISTFILES=     source.tar.gz manual.html
 EXTRACT_ONLY=  source.tar.gz

   Esli ni odin iz DISTFILES ne dolzhen raspakovyvat'sya, to
   ustanovite pustoe znachenie peremennoj EXTRACT_ONLY.

 EXTRACT_ONLY=

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

  5.4.6. 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.

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

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

  5.4.7. Neskol'ko distributivnyh fajlov ili patchej s razlichnyh
  serverov i podkatalogov (MASTER_SITES:n)

   (`Etot razdel mozhno schitat' nemnogo ``povyshennoj trudnosti'';
   te, kto vpervye znakomyatsya s `etim tekstom, mogut propustit'
   `etot razdel).

   V `etom razdele nahoditsya informaciya o mehanizme sgruzki,
   izvestnom kak MASTER_SITES:n i MASTER_SITES_NN. Dalee my budem
   nazyvat' `etot mehanizm MASTER_SITES:n.

   Snachala nemnogo obschej informacii. V OpenBSD imeetsya poleznaya
   vozmozhnost', ispol'zuemaya v peremennyh DISTFILES i PATCHFILES,
   kogda za imenami fajlov i patchej mogut sledovat' identifikatory
   tipa :n, gde n mozhet byt' iz diapazona [0-9] i oboznachat'
   zakreplionnuyu gruppu. K primeru:

 DISTFILES=      alpha:0 beta:1

   V OpenBSD distributivnyj fajl alpha budet svyazan s peremennoj
   MASTER_SITES0, no ne s nashej obschej peremennoj MASTER_SITES, a
   fajl beta s peremennoj MASTER_SITES1.

   `Etot ochen' interesnaya vozmozhnost', kotoraya mozhet umen'shit'
   `etot beskonechnyj poisk rabotayuschego sajta dlya sgruzki.

   Prosto predstav'te sebe 2 fajla v DISTFILES i 20 sajtov v
   MASTER_SITES; sajty ochen' medlennye, prichiom beta nahoditsya na
   vseh sajtah iz MASTER_SITES, a alpha mozhet byt' najden tol'ko na
   20-m sajte. Budet nepravil'no proveryat' ih vse, esli sozdatel'
   znaet ob `etom, ne pravda li? Nepodhodyaschee nachalo dlya takih
   prekrasnyh vyhodnyh!

   Teper', kogda vy poluchili obschee predstavlenie, prosto
   predstav'te eschio bol'shee kolichestvo DISTFILES i MASTER_SITES.
   Uveren, chto nash ``nachal'nik sistemy poiska distributivov''
   predstavlyaet masshtaby nagruzki na set', kotoruyu `eto daiot.

   V posleduyuschih razdelah informaciya budet davat'sya vmeste s
   realizaciej `etoj idei vo FreeBSD. My neskol'ko uluchshili
   koncepciyu OpenBSD.

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

    5.4.7.1. Uproschionnaya informaciya

   V `etom razdele rasskazyvaetsya, kak bystro podgotovit' tochnuyu
   sgruzku neskol'kih distributivnyh fajlov i patchej s raznyh sajtov
   i katalogov. My opisyvaem zdes' sluchaj uproschionnogo
   ispol'zovaniya MASTER_SITES:n. Dlya bol'shinstva scenariev `etogo
   budet dostatochno. Odnako, esli vam nuzhna dopolnitel'naya
   informaciya, obratites' k sleduyuschemu razdelu.

   Nekotorye prilozheniya sostoyat iz mnogih distributivnyh fajlov,
   kotorye dolzhny byt' sgruzheny s neskol'kih razlichnyh sajtov. K
   primeru, Ghostscript sostoit iz osnovnoj programmy i bol'shogo
   chisla fajlov drajverov, kotorye ispol'zuyutsya v zavisimosti ot
   printera pol'zovatelya. Nekotorye iz `etih fajlov drajverov
   postavlyayutsya s osnovnoj programmoj, no pri `etom mnogie drugie
   dolzhny byt' sgruzheny s mnozhestva razlichnyh sajtov.

   CHtoby `eto podderzhivat', za kazhdoj zapis'yu v DISTFILES mozhet
   sledovat' simvol dvoetochiya i ``imya metki''. Za kazhdym sajtom,
   perechislennym v MASTER_SITES, tozhe sleduet dvoetochie i metka,
   kotoraya ukazyvaet, kakie fajly distributiva dolzhny byt'
   sgruzheny s `etogo sajta.

   Naprimer, rassmotrim prilozhenie, ishodnyj kod kotorogo razdelion
   na dve chasti, source1.tar.gz i source2.tar.gz, kotorye dolzhny
   byt' sgruzheny s dvuh razlichnyh istochnikov. Fajl Makefile porta
   budet soderzhat' strochki tipa Prim. 5-1.

   Primer 5-1. Uproschionnoe ispol'zovanie MASTER_SITES:n s 1 fajlom
   na kazhdom sajte

 MASTER_SITES=   ftp://ftp.example1.com/:source1 \
                 ftp://ftp.example2.com/:source2
 DISTFILES=      source1.tar.gz:source1 \
                 source2.tar.gz:source2

   Neskol'ko distributivnyh fajlov mogut imet' odnu i tu zhe metku.
   Prodolzhaya predyduschij primer, polozhim, chto imeetsya i tretij
   distributivnyj fajl, source3.tar.gz, kotoryj dolzhen byt' sgruzhen
   s ftp.example2.com. Togda fajl Makefile budet napisan kak Prim.
   5-2.

   Primer 5-2. Uproschionnoe ispol'zovanie MASTER_SITES:n s bolee
   chem 1 fajlom na kazhdom servere

 MASTER_SITES=   ftp://ftp.example1.com/:source1 \
                 ftp://ftp.example2.com/:source2
 DISTFILES=      source1.tar.gz:source1 \
                 source2.tar.gz:source2 \
                 source3.tar.gz:source2

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

    5.4.7.2. Podrobnaya informaciya

   Prekrasno, no primer iz predyduschego razdela ne pokazal vam vsio,
   chto vam nuzhno? V `etom razdele my podrobno opishem, kak rabotaet
   mehanizm MASTER_SITES:n tochnoj sgruzki i kak vy mozhete izmenit'
   vashi porty, chtoby `eto ispol'zovat'.

    1. Za `elementami mogut sledovat' simvoly :n, gde n `eto [^:,]+,
       to est' n mozhet teoreticheski byt' lyuboj alfavitno-cifrovoj
       strokoj, no poka my budem ogranichivat' ih
       [a-zA-Z_][0-9a-zA-Z_]+.

       Bolee togo, sovpadenie strok chuvstvitel'no k registru;
       drugimi slovami, n otlichaetsya ot N.

       Odnako sleduyuschie slova ne mogut ispol'zovat'sya dlya `etih
       nuzhd, tak kak oni imeyut osoboe znachenie: default, all i ALL
       (oni ispol'zuyutsya dlya svoih nuzhd v ii). Krome togo,
       DEFAULT yavlyaetsya special'nym klyuchevym slovom (posmotrite
       3).

    2. `Elementy, za kotorymi sleduyut :n, prinadlezhat gruppe n, :m
       otnositsya k gruppe m i tak dalee.

    3. `Elementy bez takih suffiksov ne otnosyatsya ni k kakoj
       gruppe, to est' oni prinadlezhat k osoboj gruppe DEFAULT. Esli
       vy ukazhete suffiksom lyubogo `elementa DEFAULT, vy prosto
       vypolnite izlishnyuyu rabotu, esli tol'ko vy ne hotite
       otneseniya `elementa kak k gruppe DEFAULT, tak i kakoj-to
       drugoj v odno i to zhe vremya (posmotrite na punkt 5).

       Sleduyuschie primery ravnoznachny, no pervyj bolee
       predpochtitelen:

 MASTER_SITES=   alpha

 MASTER_SITES=   alpha:DEFAULT

    4. Gruppy ne yavlyayutsya `eksklyuzivnymi, `element mozhet
       prinadlezhat' k neskol'kim otlichayuschimsya gruppam
       odnovremenno, a gruppa mozhet libo imet' neskol'ko razlichnyh
       `elementov, libo ne imet' ih vovse. Povtoryayuschiesya
       `elementy v odnoj i toj zhe gruppe budut yavlyat'sya prosto
       povtoryayuschimisya `elementami.

    5. Esli v hotite, chtoby `element prinadlezhal k neskol'kim
       gruppam odnovremenno, vy mozhete ispol'zovat' zapyatuyu (,).

       Vmesto togo, chtoby povtoryat' ih neskol'ko raz, kazhdyj raz s
       raznym postfiksom, my mozhem perechislit' neskol'ko grupp za
       raz v odnom postfikse. Naprimer, :m,n,o opredelyaet `element,
       prinadlezhaschij gruppam m, n i o.

       Vse sleduyuschie primery imeyut odin smysl, no poslednij
       yavlyaetsya predpochtitel'nym:

 MASTER_SITES=   alpha alpha:SOME_SITE

 MASTER_SITES=   alpha:DEFAULT alpha:SOME_SITE

 MASTER_SITES=   alpha:SOME_SITE,DEFAULT

 MASTER_SITES=   alpha:DEFAULT,SOME_SITE

    6. Vse servery vnutri opredelionnoj gruppy sortiruyutsya v
       sootvetstvii s MASTER_SORT_AWK. Vse gruppy v MASTER_SITES i
       PATCH_SITES tozhe sortiruyutsya.

    7. Semantika grupp mozhet ispol'zovat'sya v lyuboj iz
       sleduyuschih peremennyh MASTER_SITES, PATCH_SITES,
       MASTER_SITE_SUBDIR, PATCH_SITE_SUBDIR, DISTFILES i PATCHFILES
       v sootvetstvii so sleduyuschim sintaksisom:

         a. Vse `elementy MASTER_SITES, PATCH_SITES,
            MASTER_SITE_SUBDIR i PATCH_SITE_SUBDIR dolzhny
            zakanchivat'sya simvolom pryamogo sl`esha /. Esli
            kakie-to `elementy prinadlezhat kakim-to gruppam,
            postfiks gruppy :n dolzhen sledovat' srazu posle
            terminiruyuschego simvola /. Mehanizm MASTER_SITES:n
            opiraetsya na nalichie terminiruyuschego simvola / vo
            izbezhanie sovpadayuschih `elementov, gde :n yavlyaetsya
            korrektnoj chast'yu `elementa s vhozhdeniyami, gde :n
            oboznachaet gruppu n. Dlya celej sovmestimosti, tak kak
            terminiruyuschij simvol / ranee ne trebovalsya v
            `elementah MASTER_SITE_SUBDIR i PATCH_SITE_SUBDIR, esli
            simvol, srazu predshestvuyuschij postfiksu, ne
            yavlyaetsya simvolom /, to :n budet schitat'sya
            korrektnoj chast'yu `elementa, a ne postfiksom gruppy,
            dazhe esli za `elementom sleduet :n. Posmotrite Prim. 5-3
            i Prim. 5-4.

            Primer 5-3. Podrobnoe ispol'zovanie MASTER_SITES:n v
            MASTER_SITE_SUBDIR

 MASTER_SITE_SUBDIR=     old:n new/:NEW

               * Katalogi vnutri gruppy DEFAULT -> old:n

               * Katalogi vnutri gruppy NEW -> new

            Primer 5-4. Podrobnoe ispol'zovanie MASTER_SITES:n s
            zapyatymi, neskol'kimi fajlami, neskol'kimi serverami i
            neskol'kimi podkatalogami

 MASTER_SITES=   http://site1/%SUBDIR%/ http://site2/:DEFAULT \
                 http://site3/:group3 http://site4/:group4 \
                 http://site5/:group5 http://site6/:group6 \
                 http://site7/:DEFAULT,group6 \
                 http://site8/%SUBDIR%/:group6,group7 \
                 http://site9/:group8
 DISTFILES=      file1 file2:DEFAULT file3:group3 \
                 file4:group4,group5,group6 file5:grouping \
                 file6:group7
 MASTER_SITE_SUBDIR=     directory-trial:1 directory-n/:groupn \
                         directory-one/:group6,DEFAULT \
                         directory

            Predyduschij primer privodit k sleduyuschej tochnoj
            sgruzke. Servery perechisleny v tochnom poryadke ih
            ispol'zovaniya.

               * file1 budet sgruzhat'sya s

                    * MASTER_SITE_OVERRIDE

                    * http://site1/directory/

                    * http://site1/directory-one/

                    * http://site1/directory-trial:1/

                    * http://site2/

                    * http://site7/

                    * MASTER_SITE_BACKUP

               * file2 budet sgruzhat'sya tochno takzhe, kak file1,
                 tak kak oni oba otnosyatsya k odnoj i toj zhe gruppe

                    * MASTER_SITE_OVERRIDE

                    * http://site1/directory/

                    * http://site1/directory-one/

                    * http://site1/directory-trial:1/

                    * http://site2/

                    * http://site7/

                    * MASTER_SITE_BACKUP

               * file3 budet sgruzhen s

                    * MASTER_SITE_OVERRIDE

                    * http://site3/

                    * MASTER_SITE_BACKUP

               * file4 budet sgruzhat'sya s

                    * MASTER_SITE_OVERRIDE

                    * http://site4/

                    * http://site5/

                    * http://site6/

                    * http://site7/

                    * http://site8/directory-one/

                    * MASTER_SITE_BACKUP

               * file5 budet sgruzhen s

                    * MASTER_SITE_OVERRIDE

                    * MASTER_SITE_BACKUP

               * file6 budet sgruzhat'sya s

                    * MASTER_SITE_OVERRIDE

                    * http://site8/directory-one/

                    * MASTER_SITE_BACKUP

    8. Kak mne sgruppirovat' odnu iz special'nyh peremennyh iz
       bsd.sites.mk, naprimer, MASTER_SITE_SOURCEFORGE?

       Posmotrite Prim. 5-5.

       Primer 5-5. Podrobnoe ispol'zovanie MASTER_SITES:n s
       MASTER_SITE_SOURCEFORGE

 MASTER_SITES=   http://site1/ ${MASTER_SITE_SOURCEFORGE:S/$/:sourceforge,TEST/}
 DISTFILES=      something.tar.gz:sourceforge

       something.tar.gz budet sgruzhat'sya so vseh sajtov iz
       MASTER_SITE_SOURCEFORGE.

    9. Kak mne ispol'zovat' `eto s peremennymi PATCH*?

       Vse primery vypolnyalis' s peremennymi MASTER*, i oni
       rabotayut tochno takzhe i dlya PATCH*, kak `eto mozhno videt'
       v Prim. 5-6.

       Primer 5-6. Uproschionnoe ispol'zovanie MASTER_SITES:n s
       PATCH_SITES.

 PATCH_SITES=    http://site1/ http://site2/:test
 PATCHFILES=     patch1:test

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

    5.4.7.3. CHto izmenitsya dlya portov? A chto ne izmenitsya?

   i. Vse imeyuschiesya porty ostayutsya bez izmenenij. Kod dlya
      mehanizma MASTER_SITES:n aktiviruetsya, esli tol'ko est'
      `elementy, kotorye zakanchivayutsya na :n, kak i `elementy v
      sootvetstvii s vysheopisannym sintaksisom, osobenno kak `eto
      pokazano v punkte 7.

   ii. Celi port ostayutsya temi zhe samymi: checksum, makesum,
       patch, configure, build i tak dalee. S obychnymi
       isklyucheniyami dlya do-fetch, fetch-list, master-sites i
       patch-sites.

          * do-fetch: ispol'zuet novuyu gruppirovku s postfiksami v
            DISTFILES i PATCHFILES s sootvetstvuyuschimi `elementami
            grupp v MASTER_SITES i PATCH_SITES, kotorye ispol'zuyut
            gruppy iz MASTER_SITE_SUBDIR i PATCH_SITE_SUBDIR.
            Posmotrite Prim. 5-4.

          * fetch-list: rabotaet takzhe, kak staraya cel' fetch-list
            s tem isklyucheniem, chto ona gruppiruet, kak i do-fetch.

          * master-sites i patch-sites: (nesovmestimy so starymi
            versiyami) tol'ko vozvraschayut `elementy gruppy DEFAULT;
            na samom dele oni vypolnyayut celi master-sites-default i
            patch-sites-default sootvetstvenno.

            Bolee togo, ispol'zovanie celej master-sites-all ili
            patch-sites-all predpochtitel'no dlya neposredstvennoj
            proverki MASTER_SITES ili PATCH_SITES. Takzhe rabota
            pryamoj proverki v posleduyuschih versiyah ne
            garantiruetsya. Posmotrite iii.ii dlya polucheniya bolee
            dopolnitel'noj informacii ob `etih novyh celyah.

   iii. Novye celi postroeniya portov

          a. Imeyutsya celi master-sites-n i patch-sites-n, kotorye
             budut perechislyat' `elementy sootvetstvuyuschej gruppy
             n iz MASTER_SITES i PATCH_SITES sootvetstvenno. K
             primeru, master-sites-DEFAULT i patch-sites-DEFAULT obe
             budut vozvraschat' `elementy gruppy DEFAULT,
             master-sites-test i patch-sites-test gruppy test i tak
             dalee.

          b. Imeyutsya novye celi master-sites-all i patch-sites-all,
             kotorye vypolnyayut rabotu staryh master-sites i
             patch-sites. Oni vozvraschayut `elementy vseh grupp, kak
             esli by oni vse prinadlezhali odnoj i toj zhe gruppe s
             tem, chto ona perechislyaet rovno stol'ko
             MASTER_SITE_BACKUP i MASTER_SITE_OVERRIDE, kak i gruppy,
             opredelionnye v DISTFILES ili PATCHFILES; sootvetstvenno
             dlya master-sites-all i patch-sites-all.

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

  5.4.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 vsio,
   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.)

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

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

5.5. MAINTAINER

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

   Zamet'te, chto v kachestve znacheniya dlya MAINTAINER dopustimo
   ispol'zovanie tol'ko odnogo adresa bez polya kommentariya. Dolzhen
   ispol'zovat'sya format user@hostname.domain. Pozhalujsta, ne
   vklyuchajte nikakogo opisatel'nogo teksta, naprimer, vashego
   nastoyaschego imeni v `etu stroku--`eto neskol'ko sbivaet s tolku
   bsd.port.mk. Vmesto `etogo pomeschajte takuyu informaciyu v vash
   pkg-descr.

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

   Esli mejntejner porta ne otvetil na zapros pol'zovatelya ob
   obnovlenii v techenie dvuh nedel' (isklyuchaya bol'shie
   prazdniki), to `eto mozhno schitat' tajm-autom ot mejntejnera, i
   obnovlenie mozhet byt' vypolneno bez yavnogo podtverzhdeniya ot
   mejntejnera. Esli mejntejner ne otvechaet v techenie trioh
   mesyacev, to schitaetsya, chto on otsutstvuet, i kak mejntejner
   porta, o kotorom idiot rech', mozhet byt' zamenion.
   Isklyucheniyami iz `etogo pravila yavlyaetsya vsio, chto
   soprovozhdaet Gruppa Menedzherov Dereva Portov FreeBSD
   <portmgr@FreeBSD.org> ili Gruppa Oficerov Bezopasnosti
   <security-officer@FreeBSD.org>. Zaprescheno delat' lyubye
   nesankcionirovannye izmeneniya v portah, kotorye vedut `eti
   gruppy.

   Za Gruppa Menedzherov Dereva Portov FreeBSD <portmgr@FreeBSD.org>
   ostavlyaetsya pravo snyat' ili naznachit' kogo-libo mejntejnerom,
   po lyuboj prichine, a za the Gruppa Oficerov Bezopasnosti
   <security-officer@FreeBSD.org> ostavlyaetsya pravo lishat' ili
   naznachat' prava na soprovozhdenie porta po soobrazheniyam
   informacionnoj bezopasnosti.

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

5.6. COMMENT

   `Eto odnostrochnoe opisanie porta. Pozhalujsta, ne vklyuchajte
   syuda nazvanie paketa (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

   V fajle Makefile peremennaya COMMENT dolzhna sledovat' srazu za
   peremennoj MAINTAINER.

   Pozhalujsta, postarajtes' delat' stroku COMMENT dlinoj, men'shej,
   chem 70 simvolov, tak kak ona vydaiotsya pol'zovatelyam v
   kachestve odnostrochnogo opisaniya porta.

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

5.7. Zavisimosti

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

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

  5.7.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).

     Zamechanie: 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 paket, tak chto pkg_add(1) budet avtomaticheski ego
   ustanavlivat', esli ego net na pol'zovatel'skoj sisteme.

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

  5.7.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=   ${LOCALBASE}/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.

     Zamechanie: 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 paket, tak chto programma pkg_add(1)
   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.

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

  5.7.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.

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

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

  5.7.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.

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

  5.7.5. EXTRACT_DEPENDS

   V `etoj peremennoj ukazyvayutsya programmy ili fajly, kotorye
   trebuyutsya dlya raspakovki porta. Kak i v predyduschih sluchayah,
   `eto spisok par vida path:dir[:target]. Naprimer,

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

   budet proveryat' nalichie programmy s imenem unzip, i perejdiot v
   podkatalog archivers/unzip vashego dereva portov dlya eio
   postroeniya i ustanovki, esli takoj programmy ne budet najdeno.

   Zavisimost' proveryaetsya vnutri celi extract. CHast' target
   mozhet byt' opuschena, esli ona sovpadaet s DEPENDS_TARGET.

     Zamechanie: Ispol'zujte `etu peremennuyu, tol'ko esli raspakovka
     ne rabotaet (po umolchaniyu predpolagaetsya ispol'zovanie gzip)
     i `eto ne ispravlyaetsya pri pomoschi USE_ZIP ili USE_BZIP2,
     kotorye opisany v Razd. 5.7.8.

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

  5.7.6. PATCH_DEPENDS

   `Eta peremennaya ukazyvaet na programmy ili fajly, kotorye nuzhny
   portu dlya primeneniya patchej. Kak i v predyduschih sluchayah,
   `eto spisok par vida path:dir[:target]. Naprimer,

 PATCH_DEPENDS=
           ${NONEXISTENT}:${PORTSDIR}/java/jfc:extract

   budet perehodit' v podkatalog java/jfc vashego dereva portov dlya
   postroeniya i ustanovki, esli ne najdiot nuzhnoj programmy.

   Zavisimost' proveryaetsya vnutri celi patch. CHast' target mozhet
   byt' opuschena, esli ona sovpadaet s DEPENDS_TARGET.

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

  5.7.7. DEPENDS

   Esli imeetsya zavisimost', kotoraya ne podpadaet ni pod odnu iz
   vysheperechislennyh 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 vida dir[:target], potomu chto, v
   otlichie ot predyduschih sluchaev, nichego ne proveryaetsya.
   CHast' target mozhet byt' opuschena, esli ona sovpadaet s
   DEPENDS_TARGET.

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

  5.7.8. USE_*

   Dlya ob"edineniya neskol'kih zavisimostej, kotorye est' vo mnogih
   portah, prednaznacheno neskol'ko peremennyh.

   Tablica 5-1. Peremennye USE_*

       Peremennaya                         Smysl                      
   USE_BZIP2           tar-arhivy porta upakovany pri pomoschi bzip2. 
   USE_ZIP             tar-arhivy porta upakovany pri pomoschi zip.   
   USE_GMAKE           Dlya postroeniya port trebuet nalichiya gmake. 
                       Dlya postroeniya i ustanovki porta trebuetsya  
   USE_PERL5           perl 5. Obratites' k Razd. 6.3 dlya            
                       polucheniya informacii o dopolnitel'nyh        
                       peremennyh, kotorye svyazany s perl.           
                       Port ustanavlivaetsya v katalog X11BASE, a ne  
   USE_X_PREFIX        v PREFIX. Obratites' k Razd. 6.4 dlya          
                       polucheniya informacii o dopolnitel'nyh        
                       peremennyh, kotorye svyazany s X11.            
                       V processe svoego postroeniya port ispol'zuet  
   USE_AUTOMAKE_VER    GNU automake. Obratites' k Razd. 6.5 dlya      
                       polucheniya informacii o dopolnitel'nyh        
                       peremennyh, kotorye svyazany s automake.       
                       V processe svoego postroeniya port ispol'zuet  
   USE_AUTOCONF_VER    GNU autoconf. Obratites' k Razd. 6.5 dlya      
                       polucheniya informacii o dopolnitel'nyh        
                       peremennyh, kotorye svyazany s autoconf.       
                       V processe svoego postroeniya port ispol'zuet  
   USE_LIBTOOL_VER     GNU libtool. Obratites' k Razd. 6.5 dlya       
                       polucheniya informacii o dopolnitel'nyh        
                       peremennyh, kotorye svyazany s libtool.        
   GMAKE               Polnyj marshrut do gmake, esli on otsutstvuet  
                       v peremennoj okruzheniya PATH.                 
   USE_BISON           Dlya postroeniya port ispol'zuet bison.        
                       Dlya postroeniya i raboty port ispol'zuet SDL. 
   USE_SDL             Obratites' k razdelu Razd. 6.13 dlya           
                       polucheniya informacii o tom, kak ispol'zovat' 
                       USE_SDL.                                       
   NO_INSTALL_MANPAGES Ne ispol'zovat' cel' install.man.              

   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_VER=213, 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.)

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

  5.7.9. 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. `Eto mozhet byt' osobenno
   nuzhnym, esli port imeet nechto, chto zanimaet mnogo vremeni na
   postroenie, v svoiom spiske zavisimostej, naprimer, KDE, GNOME ili
   Mozilla.

   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 pakete.
   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.

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

  5.7.10. Neobyazatel'nye zavisimosti

   Nekotorye bol'shie prilozheniya mogut byt' postroeny v razlichnyh
   konfiguraciyah, s dopolnitel'noj funkcional'nost'yu, zavisyaschej
   ot nalichiya v sisteme opredelionnyh 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 pol'zovatelyam zhizn' i daiot 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.

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

  5.7.11. Zaciklennye zavisimosti fatal'ny

     Vazhno: Ne pomeschajte zaciklivayuschiesya zavisimosti v derevo
     portov!

   Tehnologiya postroeniya portov ne zaschischena ot zaciklennyh
   zavisimostej. Esli vy sozdadite takuyu, to u kogo-nibud' i
   gde-nibud' ustanovka FreeBSD budet nemedlenno slomana, a u
   ostal'nyh slomaetsya neskol'ko pozzhe. `Eto na samom dele ochen'
   trudno raspoznat'; esli vy somnevaetes', to pered vneseniem
   izmenenij prover'te, chto vypolnili sleduyuschee: cd /usr/ports;
   make index. `Etot process mozhet byt' dostatochno medlennym na
   staryh mashinah, hotya my smozhete spasti bol'shoe kolichestvo
   lyudej--vklyuchaya sebya--ot gryaduschih bed.

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

5.8. Zadanie rabochego kataloga

   Kazhdyj port raspakovyvaetsya v rabochij katalog, kotoryj dolzhen
   byt' dostupnym dlya zapisi. V sisteme portov po umolchaniyu
   DISTFILES raspakovyvayutsya v katalog s imenem ${DISTNAME}.
   Drugimi slovami, esli vy zadali:

 PORTNAME=      foo
 PORTVERSION=   1.0

   to distributivnye fajly porta soderzhat katalog verhnego urovnya,
   foo-1.0, i vse fajly raspolozheny v `etom kataloge.

   Esli `eto ne vash sluchaj, to imeetsya neskol'ko peremennyh,
   kotorye vy mozhete pereopredelit'.

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

  5.8.1. WRKSRC

   `Eta peremennaya zadaiot imya kataloga, kotoryj sozdaiotsya pri
   raspakovke ishodnyh fajlov prilozheniya. V nashem predyduschem
   primere esli by raspakovka proishodila v katalog s imenem foo (a
   ne foo-1.0), to vy dolzhny napisat':

 WRKSRC=      ${WRKDIR}/foo

   ili, kak variant

 WRKSRC=      ${WRKDIR}/${PORTNAME}

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

  5.8.2. NO_WRKSUBDIR

   Esli port voobsche ne raspakovyvaetsya ni v kakoj katalog, to vy
   dolzhny zadat' peremennuyu NO_WRKSUBDIR dlya ukazaniya na `etot
   fakt.

 NO_WRKSUBDIR= yes

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

5.9. CONFLICTS

   Esli vash paket ne mozhet suschestvovat' odnovremenno s drugimi
   (iz-za konfliktov fajlov, nesovmestimosti vo vremya vypolneniya i
   tak dalee), perechislite imena ostal'nyh paketov v peremennoj
   CONFLICTS. Zdes' vy mozhete ispol'zovat' shablony komandnogo
   processora tipa * i ?. Imena paketov dolzhny vyglyadet' tak zhe,
   kak v /var/db/pkg. Pozhalujsta, ubedites', chto CONFLICTS ne
   soderzhit paket samogo `etogo porta ili esche, chto ustanovka s
   pomosch'yu peremennoj FORCE_PKG_REGISTER bol'she ne budet
   ispol'zovat'sya.

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

5.10. Mehanizmy postroeniya

   Esli vash paket ispol'zuet GNU-versiyu utility make, zadajte
   USE_GMAKE=yes. Esli vash paket ispol'zuet configure, zadajte
   HAS_CONFIGURE=yes. Esli vash paket 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 paket ispol'zuet GNU-versiyu autoconf,
   zadajte USE_AUTOCONF_VER=213. `Eto podrazumevaet GNU_CONFIGURE, i
   privedet k vyzovu autoconf do zapuska configure.

     Zamechanie: Esli vash paket ispol'zuet GNU configure, i
     poluchayuschijsya vypolnimyj fajl imeet ``strannoe'' imya, tipa
     i386-portbld-freebsd4.7-appname, to vam neobhodimo, krome vsego
     prochego, pereopredelit' peremennuyu CONFIGURE_TARGET, ukazav
     cel' v tom vide, kotoryj trebuyut skripty, generiruemye
     poslednimi versiyami autoconf. Dobav'te sleduyuschuyu stroku
     srazu posle stroki GNU_CONFIGURE=yes v vashem fajle Makefile:

     CONFIGURE_TARGET=--build=${MACHINE_ARCH}-portbld-freebsd${OSREL}

   Esli vash paket 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.

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

                      Glava 6. Osobye soglasheniya

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

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

6.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 paket, smozhet srazu zhe
   ispol'zovat' dinamicheskuyu biblioteku, a udalenie paketa 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.

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

6.2. Porty s ogranicheniyami na rasprostranenie

   Licenzii byvayut raznyh vidov, i nekotorye nakladyvayut
   ogranichenie na to, kak prilozhenie mozhet byt' oformleno v vide
   paketa, mozhet li ono prodavat'sya dlya izvlecheniya kommercheskoj
   vygody, i tak dalee.

     Vazhno: 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 binarnom vide po FTP/HTTP
     ili na CD-ROM. Esli u vas voznikli somneniya, to, pozhalujsta,
     obratites' v Spisok rassylki, posvyaschionnyj Portam FreeBSD.

   V podobnyh situaciyah mozhno ispol'zovat' peremennye, opisyvaemye
   v posleduyuschih razdelah.

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

  6.2.1. NO_PACKAGE

   `Eta peremennaya ukazyvaet, chto my ne mozhem sozdavat' dlya
   prilozheniya dvoichnyj paket. K primeru, licenziya ne pozvolyaet
   binarnoe rasprostranenie ili ona mozhet zapreschat'
   rasprostranenie paketov, sozdannyh iz izmenionnyh ishodnikov.

   Odnako fajly DISTFILES mogut svobodno zerkalirovat'sya po
   FTP/HTTP. Oni takzhe mogut rasprostranyat'sya, ispol'zuya CD-ROM
   (ili na pohozhih nositelyah), esli ne ustanovlena peremennaya
   NO_CDROM.

   NO_PACKAGE dolzhna takzhe ispol'zovat'sya, esli dvoichnyj paket,
   kak pravilo, bespolezen, a prilozhenie dolzhno vsegda
   kompilirovat'sya iz ishodnogo koda. K primeru, esli v prilozhenie
   vo vremya kompilyacii zhiostko vklyuchaetsya konfiguracionnaya
   informaciya, privyazannaya k konkretnoj sisteme, to zadajte
   peremennuyu NO_PACKAGE.

   Znacheniem peremennoj NO_PACKAGE dolzhna byt' stroka,
   opisyvayuschaya prichinu, po kotoroj paket ne dolzhen
   sozdavat'sya.

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

  6.2.2. NO_CDROM

   `Eta peremennaya ukazyvaet na to, chto, hotya my imeem pravo
   sozdavat' binarnye pakety, my ne mozhem pomeschat' `eti pakety ili
   fajly DISTFILES porta na CD-ROM (ili na pohozhie nositeli) dlya
   pereprodazhi. Odnako binarnye pakety i fajly DISTFILES porta budut
   ostavat'sya dostupnymi posredstvom FTP/HTTP.

   Esli `eta peremennaya ustanavlivaetsya vmeste s NO_PACKAGE, to
   tol'ko fajly porta DISTFILES budut dostupny, i tol'ko posredstvom
   FTP/HTTP.

   V kachestve znacheniya NO_CDROM dolzhna ukazyvat'sya stroka,
   opisyvayuschaya prichiny, po kotorym port ne mozhet
   rasprostranyat'sya na CD-ROM. K primeru, `eto primenyaetsya, esli
   licenzionnoe soglashenie prilozheniya predpolagaet tol'ko ego
   ``nekommercheskoe'' ispol'zovanie.

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

  6.2.3. RESTRICTED

   Zadajte `etu peremennuyu, esli licenziya na prilozhenie ne
   pozvolyaet ni zerkalirovat' fajly DISTFILES, ni rasprostranyat'
   binarnyj paket cherez FTP/HTTP ili na CD-ROM.

   Ni NO_CDROM, ni NO_PACKAGE ne stoit ustanavlivat' vmeste s
   RESTRICTED, tak kak poslednyaya peremennaya podrazumevaet pervye
   dve.

   V kachestve znacheniya RESTRICTED dolzhna ukazyvat'sya stroka,
   opisyvayuschaya prichiny, po kotorym port nel'zya rasprostranyat'.
   Obychno `eto oznachaet, chto port ispol'zuet zakrytoe programmnoe
   obespechenie, a pol'zovatel' dolzhen vruchnuyu sgruzit' fajly
   DISTFILES, vozmozhno, posle zapolneniya registracionnoj formy ili
   podtverzhdeniya soglasheniya s usloviyami EULA.

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

  6.2.4. RESTRICTED_FILES

   Esli zadany RESTRICTED ili NO_CDROM, to znachenie `etoj peremennoj
   po umolchaniyu sootvetstvuet ${DISTFILES} ${PATCHFILES}, v
   protivnom sluchae ona pusta. Esli ogranicheny v rasprostranenii
   lish' nekotorye iz distributivnyh fajlov, to v `etoj peremennoj
   zadaiotsya ih spisok.

   Obratite vnimanie, chto pri vklyuchenii porta v derevo ishodnyh
   tekstov sistemy kommitter dolzhen dobavit' zapis' v fajl
   /usr/ports/LEGAL dlya kazhdogo iz perechislennyh fajlov, v
   tochnosti opisav, chto podrazumevayut ogranicheniya.

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

6.3. Ispol'zovanie perl

   Tablica 6-1. Peremennye dlya portov, ispol'zuyuschih perl

     Peremennaya                         Smysl                        
   USE_PERL5       Ukazyvaet na to, chto port ispol'zuet perl 5 dlya  
                   svoego postroeniya i raboty.                       
   USE_PERL5_BUILD Ukazyvaet na to, chto dlya postroeniya port        
                   ispol'zuet perl 5.                                 
   USE_PERL5_RUN   Ukazyvaet na to, chto dlya raboty port ispol'zuet  
                   perl 5.                                            
                   Polnyj marshrut k perl 5, libo v sisteme, libo     
   PERL            ustanovlennogo iz portov, no bez nomera versii.    
                   Ispol'zujte `eto, esli vam nuzhno zamenit' stroki  
                   ``#!'' v skriptah.                                 
   PERL_CONFIGURE  Konfiguraciya pri pomoschi MakeMaker yazyka Perl.  
                   Vlechiot USE_PERL5.                                

   Peremennye tol'ko dlya                                             
          chteniya        
   PERL_VERSION           Polnyj nomer versii ustanovlennogo perl     
                          (naprimer, 5.00503).                        
   PERL_VER               Kratkij nomer versii ustanovlennogo perl    
                          (naprimer, 5.005).                          
   PERL_LEVEL             Versiya ustanovlennogo perl v forme celogo  
                          chisla vida MNNNPP (naprimer, 500503).      
                          Mesto, gde perl hranit                      
   PERL_ARCH              arhitekturno-zavisimye biblioteki. Po       
                          umolchaniyu `eto ${ARCH}-freebsd.           
   PERL_PORT              Nazvanie ustanovlennogo porta perl, (k      
                          primeru, perl5).                            
                          Imya kataloga, kuda pomeschayutsya          
   SITE_PERL              specifichnye dlya sajta pakety perl. `Eto   
                          znachenie dobavlyaetsya k PLIST_SUB.        

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

6.4. Ispol'zovanie X11

   Tablica 6-2. Peremennye dlya portov, ispol'zuyuschih X

   USE_X_PREFIX Port ustanavlivaetsya v katalog X11BASE, a ne v       
                PREFIX.                                               
   USE_XLIB     Port ispol'zuet biblioteki X.                         
   USE_MOTIF    Port ispol'zuet instrumental'nyj paket Motif.         
                Predusmatrivaet vklyuchenie USE_XPM.                  
   USE_IMAKE    Port ispol'zuet imake. Predusmatrivaet vklyuchenie    
                USE_X_PREFIX.                                         
                Zadaiotsya marshrut do xmkmf, esli on otsutstvuet v   
   XMKMF        peremennoj okruzheniya PATH. Po umolchaniyu `eto      
                xmkmf -a.                                             

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

6.5. Ispol'zovanie automake, autoconf i libtool

   Tablica 6-3. Peremennye dlya portov, ispol'zuyuschih automake,
   autoconf ili libtool

      Peremennaya                          Smysl                      
   AUTOMAKE           Polnyj marshrut k automake, esli ego net v      
                      peremennoj okruzheniya PATH.                    
                      Port ispol'zuet automake. Korrektnymi           
                      znacheniyami dlya `etoj peremennoj yavlyayutsya 
   USE_AUTOMAKE_VER   14 i 15, i oni sootvetstvenno opredelyayut      
                      znacheniya peremennyh AUTOMAKE_DIR i            
                      ACLOCAL_DIR.                                    
                      Odin ili bolee argumentov komandnoj stroki dlya 
   AUTOMAKE_ARGS      peredachi AUTOMAKE, esli zadana peremennaya     
                      USE_AUTOMAKE_VER.                               
                      Odna ili bol'shee kolichestvo peremennyh        
   AUTOMAKE_ENV       okruzheniya (i ih znachenij), zadavaemyh pered  
                      zapuskom AUTOMAKE.                              
                      Zadaiot marshrut dlya GNU aclocal, esli ego net 
   ACLOCAL            v peremennoj okruzheniya PATH. Po umolchaniyu   
                      zadaiotsya v sootvetstvii so znacheniem         
                      peremennoj USE_AUTOMAKE_VER.                    
                      Zadaiot marshrut dlya sovmestno ispol'zuemogo   
   ACLOCAL_DIR        kataloga GNU aclocal. Po umolchaniyu zadaiotsya 
                      v sootvetstvii so znacheniem peremennoj         
                      USE_AUTOMAKE_VER.                               
                      Zadaiot marshrut dlya sovmestno ispol'zuemogo   
   AUTOMAKE_DIR       kataloga GNU automake. Po umolchaniyu           
                      zadaiotsya v sootvetstvii so znacheniem         
                      peremennoj USE_AUTOMAKE_VER.                    
                      Ukazyvaet na to, chto port ispol'zuet autoconf. 
   USE_AUTOCONF_VER   Podrazumevaet GNU_CONFIGURE. Po umolchaniyu     
                      znachenie ravno 213.                            
                      Zadaiot marshrut dlya GNU autoconf, esli ego    
   AUTOCONF           net v peremennoj okruzheniya PATH. Po           
                      umolchaniyu zadaiotsya v sootvetstvii so        
                      znacheniem peremennoj USE_AUTOCONF_VER.         
   AUTOCONF_ARGS      Argumenty komandnoj stroki dlya peredachi v     
                      autoconf.                                       
   AUTOCONF_ENV       Opredelyaet znacheniya par variable=value v     
                      okruzhenii pered zapuskom autoconf.             
                      Ukazyvaet, chto port ispol'zuet autoheader.     
   USE_AUTOHEADER_VER Podrazumevaet USE_AUTOCONF_VER. Znachenie po    
                      umolchaniyu ravno 213.                          
                      Zadaiot marshrut dlya GNU autoheader, esli ego  
   AUTOHEADER         net v peremennoj okruzheniya PATH. Po           
                      umolchaniyu zadaiotsya v sootvetstvii so        
                      znacheniem peremennoj USE_AUTOCONF_VER.         
                      Zadaiot marshrut dlya GNU autoreconf, esli ego  
   AUTORECONF         net v peremennoj okruzheniya PATH. Po           
                      umolchaniyu zadaiotsya v sootvetstvii so        
                      znacheniem peremennoj USE_AUTOCONF_VER.         
                      Zadaiot marshrut dlya GNU autoscan, esli ego    
   AUTOSCAN           net v peremennoj okruzheniya PATH. Po           
                      umolchaniyu zadaiotsya v sootvetstvii so        
                      znacheniem peremennoj USE_AUTOCONF_VER.         
                      Zadaiot marshrut dlya GNU autoifnames, esli ego 
   AUTOIFNAMES        net v peremennoj okruzheniya PATH. Po           
                      umolchaniyu zadaiotsya v sootvetstvii so        
                      znacheniem peremennoj USE_AUTOCONF_VER.         
                      Port ispol'zuet libtool. Predusmatrivaet        
   USE_LIBTOOL_VER    vklyuchenie GNU_CONFIGURE. Znachenie po         
                      umolchaniyu ravno 13.                           
   LIBTOOL            Zadaiot marshrut dlya libtool, esli ego net v   
                      peremennoj okruzheniya PATH.                    
                      Fajly dlya obrabotki libtool. Po umolchaniyu    
   LIBTOOLFILES       `eto aclocal.m4, esli opredelena peremennaya    
                      USE_AUTOCONF, i configure v protivnom sluchae.  
   LIBTOOLFLAGS       Dopolnitel'nye flagi dlya peredachi v ltconfig. 
                      Po umolchaniyu `eto --disable-ltlibs.           

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

6.6. Ispol'zovanie GNOME

   Dlya zadaniya togo, kakie komponenty GNOME ispol'zuet konkretnyj
   port, proekt FreeBSD/GNOME ispol'zuet sobstvennyj nabor
   peremennyh. Na stranice proekta FreeBSD/GNOME razmeschion
   ischerpyvayuschij spisok `etih peremennyh.

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

6.7. Ispol'zovanie KDE

   Tablica 6-4. Peremennye dlya portov, kotorye ispol'zuyut KDE

                   Port ispol'zuet instrumental'nyj paket Qt.         
                   Vozmozhnymi znacheniyami yavlyayutsya 1, 2 i 3;    
   USE_QT_VER      kazhdyj variant zadaiot starshij nomer             
                   ispol'zuemoj versii Qt. Zadayutsya                 
                   sootvetstvuyuschie znacheniya po umolchaniyu       
                   peremennyh MOC i QTCPPFLAGS.                       
                   Port ispol'zuet biblioteki KDE. Vozmozhnymi        
                   znacheniyami yavlyayutsya 1, 2 i 3; kazhdyj        
   USE_KDELIBS_VER variant opredelyaet starshij nomer ispol'zuemoj    
                   versii KDE. Predusmatrivaetsya vklyuchenie         
                   USE_QT_VER sootvetstvuyuschej versii.              
                   Port ispol'zuet v kachestve ustanovki kornevoj     
                   katalog KDE. Vozmozhnymi znacheniyami yavlyayutsya 
   USE_KDEBASE_VER 1, 2 i 3; kazhdyj variant opredelyaet starshij     
                   nomer ispol'zuemoj versii KDE. Predusmatrivaetsya  
                   vklyuchenie USE_KDELIBS_VER sootvetstvuyuschej     
                   versii.                                            
                   Zadaiot marshrut do moc. Po umolchaniyu            
   MOC             ustanavlivaetsya v sootvetstvii so znacheniem      
                   peremennoj USE_QT_VER.                             
                   Zadaiotsya znachenie CPPFLAGS dlya ispol'zovaniya  
   QTCPPFLAGS      pri obrabotke koda Qt. Po umolchaniyu zadaiotsya v 
                   sootvetstvie so znacheniem peremennoj USE_QT_VER.  

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

6.8. Ispol'zovanie Bison

   `Etot razdel eschio predstoit napisat'.

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

6.9. Ispol'zovanie Java

  6.9.1. Zadanie peremennyh

   Esli vashemu portu neobhodimo nalichie Java(TM) Development Kit
   (JDK) dlya postroeniya, raboty ili dazhe raspakovki
   distributivnogo fajla, to v niom dolzhna byt' zadana peremennaya
   USE_JAVA.

   V Kollekcii Portov prisutstvuyut neskol'ko JDK razlichnyh
   razrabotchikov i raznyh versij. Esli vash port dolzhen
   ispol'zovat' odnu iz `etih versij, to vy dolzhny ukazat', kakuyu
   imenno. Samoj poslednej versiej yavlyaetsya java/jdk14.

   Tablica 6-5. Peremennye, kotorye kotorye mogut zadavat'sya
   portami, ispol'zuyuschimi Java

   Peremennaya                        Znachenie                       
   USE_JAVA     Dolzhna byt' opredelena dlya togo, chto               
                posleduyuschie peremennye vstupili v dejstvie.        
                Spisok versij Java, perechislennyh cherez probel,     
   JAVA_VERSION podhodyaschih dlya porta. Opcional'nyj znak "+"       
                pozvolyaet vam ukazat' diapazon versij (vozmozhnye    
                znacheniya: 1.1[+] 1.2[+] 1.3[+] 1.4[+]).             
                Spisok operacionnyh sistem, perechislennyh cherez     
   JAVA_OS      probel, porty JDK dlya kotoryh podhodyat dlya porta   
                (vozmozhnye znacheniya: native linux).                
                Spisok razrabotchikov portov JDK, perechislennyh      
   JAVA_VENDOR  cherez probel, kotorye podhodyat dlya porta           
                (vozmozhnye znacheniya: freebsd bsdjava sun ibm       
                blackdown).                                           
                Esli zadana, to oznachaet, chto vybrannyj port JDK    
   JAVA_BUILD   dolzhen byt' dobavlen k zavisimostyam porta dlya ego  
                postroeniya.                                          
                Esli zadana, to oznachaet, chto vybrannyj port JDK    
   JAVA_RUN     dolzhen byt' dobavlen v zavisimostyam porta dlya ego  
                raboty.                                               
                Esli zadana, to oznachaet, chto vybrannyj port JDK    
   JAVA_EXTRACT dolzhen byt' dobavlen v zavisimostyam porta dlya      
                raspakovki ego distributivnyh fajlov.                 
                Dolzhen ili net port ispol'zovat' kompilyator         
                bajt-koda jikes dlya svoego postroeniya. Esli         
                znachenie `etoj peremennoj ne opredeleno, to port     
                budet ispol'zovat' jikes (pri nalichii poslednego)    
   USE_JIKES    dlya svoego postroeniya. Vy mozhete takzhe yavno      
                zapretit' ili prinudit' ispol'zovat' jikes (ukazav v  
                kachestve znacheniya 'no' ili 'yes'). V poslednem     
                sluchae devel/jikes budet dobavlen k zavisimostyam    
                porta, nuzhnym dlya ego postroeniya.                  

   Nizhe perechislyayutsya vse znacheniya, kotorye prinimayut
   peremennye posle zadaniya peremennoj USE_JAVA:

   Tablica 6-6. Peremennye, dostupnye v portah, ispol'zuyuschih Java

        Peremennaya                                Znachenie                       
JAVA_PORT                    Nazvanie porta JDK (k primeru, 'java/jdk14').         
                             Polnoe naimenovanii versii porta JDK (k primeru,      
JAVA_PORT_VERSION            '1.4.2'). Esli vam nuzhny tol'ko pervye dve cifry     
                             nomera versii, ispol'zujte konstrukciyu               
                             ${JAVA_PORT_VERSION:C/^([0-9])\.([0-9])(.*)$/\1.\2/}. 
JAVA_PORT_OS                 Operacionnaya sistema, ispol'zuemaya portom JDK (k    
                             primeru, 'linux').                                    
JAVA_PORT_VENDOR             Razrabotchik porta JDK (k primeru, 'sun').            
JAVA_PORT_OS_DESCRIPTION     Opisanie operacionnoj sistemy, ispol'zuemoj portom    
                             JDK (k primeru, 'Linux').                             
JAVA_PORT_VENDOR_DESCRIPTION Opisanie razrabotchika porta JDK (k primeru, 'FreeBSD 
                             Foundation').                                         
JAVA_HOME                    Marshrut k ustanovochnomu katalogu JDK (k primeru,    
                             '/usr/local/jdk1.3.1').                               
                             Marshrut k ispol'zuemomu kompilyatoru Java (k         
JAVAC                        primeru, '/usr/local/jdk1.1.8/bin/javac' ili          
                             '/usr/local/bin/jikes').                              
                             Marshrut k ispol'zuemoj utilite jar (k primeru,       
JAR                          '/usr/local/jdk1.2.2/bin/jar' ili                     
                             '/usr/local/bin/fastjar').                            
APPLETVIEWER                 Marshrut k utilite appletviewer (k primeru,           
                             '/usr/local/linux-jdk1.2.2/bin/appletviewer').        
                             Marshrut k vypolnyaemomu fajlu java. Ispol'zujte ego  
JAVA                         dlya zapuska Java-programm (k primeru,                
                             '/usr/local/jdk1.3.1/bin/java').                      
JAVADOC                      Marshrut k vspomogatel'noj programme javadoc.         
JAVAH                        Marshrut k programme javah.                           
JAVAP                        Marshrut k programme javap.                           
                             Marshrut k vspomogatel'noj programme keytool. `Eta    
JAVA_KEYTOOL                 peremennaya opredelena, tol'ko esli JDK sootvetstvuet 
                             Java 1.2 ili bolee starshej versii.                   
JAVA_N2A                     Marshrut k utilite native2ascii.                      
                             Marshrut k programme policytool. `Eta peremennaya     
JAVA_POLICYTOOL              opredelena, tol'ko esli JDK sootvetstvuet Java 1.2    
                             ili bolee starshej versii.                            
JAVA_SERIALVER               Marshrut k vspomogatel'noj programme serialver.       
RMIC                         Marshrut k generatoru karkasa programm RMI, utilite   
                             rmic.                                                 
RMIREGISTRY                  Marshrut k programme registracii RMI, rmiregistry.    
                             Marshrut k programme-daemonu RMI rmid. `Eta           
RMID                         peremennaya opredelena, tol'ko esli JDK sootvetstvuet 
                             Java 1.2 ili bolee starshej versii.                   
                             Marshrut k arhivu, kotoryj soderzhit fajly klassov    
                             JDK. Dlya JDK 1.2 i bolee starshih versij eio         
JAVA_CLASSES                 znachenie sootvetstvuet ${JAVA_HOME}/jre/lib/rt.jar.  
                             JDK predyduschih versij ispol'zovali                  
                             ${JAVA_HOME}/lib/classes.zip.                         

   Vy mozhete vospol'zovat'sya make-cel'yu java-debug dlya
   polucheniya informacii, neobhodimoj dlya otladki vashego porta.
   Pri eio vypolnenii budut vydany znacheniya mnogih upomyanutyh
   vyshe peremennyh.

   Krome togo, dlya edinoobraziya ustanovki vseh portov Java
   opredeleny sleduyuschie konstanty:

   Tablica 6-7. Konstanty, opredelionnye dlya portov, ispol'zuyuschih
   Java

    Konstanta                         Znachenie                       
   JAVASHAREDIR Kornevoj katalog dlya vsego, chto svyazano s Java. Po 
                umolchaniyu: ${PREFIX}/share/java.                    
   JAVAJARDIR   Katalog, v kotoryj dolzhny ustanavlivat'sya           
                JAR-fajly. Po umolchaniyu: ${JAVASHAREDIR}/classes.   

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

  6.9.2. Prakticheskie rekomendacii

   Pri portirovanii Java-biblioteki vash port dolzhen ustanavlivat'
   JAR-fajl(y) v katalog ${JAVAJARDIR}, a vse ostal'nye dannye v
   katalog ${JAVASHAREDIR}/${PORTNAME} (za isklyucheniem
   dokumentacii, o kotoroj pojdiot rech' nizhe). Dlya umen'sheniya
   razmera upakovannogo fajla vy mozhete soslat'sya na JAR-fajl(y)
   neposredstvenno v fajle Makefile. Prosto vospol'zujtes'
   sleduyuschej direktivoj (v kotoroj myport.jar yavlyaetsya imenem
   JAR-fajla, ustanavlivaemogo kak chast' porta):

 PLIST_FILES+= ${JAVAJARDIR:S,^${PREFIX}/,,}/myport.jar

   Pri portirovanii Java-prilozheniya port obychno ustanavlivaet vsio
   v odin katalog (v tom chisle vse svoi JAR-zavisimosti). V `etom
   otnoshenii nastoyatel'no rekomenduetsya ispol'zovanie
   ${JAVASHAREDIR}/${PORTNAME}. Na usmotrenie sozdatelya porta
   ostaiotsya reshenie voprosa o tom, ustanavlivat' li dopolnitel'nye
   JAR-zavisimosti v `etot katalog ili napryamuyu ispol'zovat' uzhe
   ustanovlennye (iz kataloga ${JAVAJARDIR}).

   Vne zavisimosti ot tipa vashego porta (biblioteka `eto ili
   prilozhenie), dopolnitel'naya dokumentaciya dolzhna byt'
   ustanavlivat'sya v tozhe samoe mesto, chto i dlya drugih portov.
   Izvestno, chto v zavisimosti ot ispol'zuemoj versii JDK utilita
   JavaDoc generiruet razlichnye nabory fajlov. Dlya portov, kotorye
   ne privyazany k ispol'zovaniyu opredelionnoj versii JDK, takim
   obrazom stanovitsya problematichnym opredelit' spisok fajlov dlya
   upakovki (pkg-plist). `Eto odna iz prichin, po kotoroj sozdatelyam
   portov nastoyatel'no rekomenduetsya ispol'zovat' makros PORTDOCS.
   Bolee togo, dazhe esli vy smozhete ugadat' nabor fajlov, kotoryj
   budet sgenerirovan utilitoj javadoc, razmer poluchayuschegosya
   fajla pkg-plist golosuet za ispol'zovanie PORTDOCS.

   Znacheniem po umolchaniyu dlya peremennoj DATADIR yavlyaetsya
   ${PREFIX}/share/${PORTNAME}. Horoshej ideej yavlyaetsya
   pereopredelenie dlya Java-portov znacheniya DATADIR kak
   ${JAVASHAREDIR}/${PORTNAME}. Na samom dele DATADIR avtomaticheski
   dobavlyaetsya k PLIST_SUB (`eto opisano zdes'), tak chto vy
   smozhete ispol'zovat' %%DATADIR%% neposredstvenno v pkg-plist.

   CHto kasaetsya vybora mezhdu postroeniem portov Java iz ishodnyh
   tekstov ili ih pryamoj ustanovkoj iz binarnyh distributivov, to na
   moment sozdaniya `etogo teksta opredelionnoj politiki na `etot
   schiot ne suschestvuet. Odnako uchastniki Proekta FreeBSD Java
   rekomenduyut sozdatelyam portov stroit' ih iz ishodnyh tekstov,
   esli `eta zadacha yavlyaetsya neslozhnoj.

   Vse vozmozhnosti, kotorye byli opisany v `etom razdele,
   realizovany v fajle bsd.java.mk. Esli vy predpolozhite, chto
   vashemu portu trebuetsya menee trivial'naya podderzhka Java,
   pozhalujsta, vzglyanite snachala na zhurnal izmenenij bsd.java.mk
   v CVS, tak kak dlya dokumentirovaniya poslednih izmenenij
   trebuetsya kakoe-to vremya. Zatem, esli vy dumaete, chto ne
   hvatayuschaya vam podderzhka okazhetsya poleznoj dlya mnogih
   drugih portov Java, obsudite vash vopros v Spisok rassylki,
   posvyaschionnyj podderzhke Java vo FreeBSD.

   Hotya v baze soobschenij ob oshibkah dlya sootvetstvuyuschih PR
   imeetsya kategoriya java, ona otnositsya k rabote nad
   portirovaniem JDK, kotorye provodit Proekt FreeBSD Java. Takim
   obrazom, vy dolzhny otnosit' svoj Java-port, kak i lyuboj drugoj,
   k kategorii ports, esli reshaemyj vami vopros ne otnositsya ni k
   realizacii JDK, ni k bsd.java.mk.

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

6.10. Ispol'zovanie Python

   `Etot razdel eschio predstoit napisat'.

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

6.11. Ispol'zovanie Emacs

   `Etot razdel eschio predstoit napisat'.

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

6.12. Ispol'zovanie Ruby

   `Etot razdel eschio predstoit napisat'.

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

6.13. Ispol'zovanie SDL

   Peremennaya USE_SDL ispol'zuetsya dlya avtomaticheskoj nastrojki
   zavisimostej dlya portov, ispol'zuyuschih biblioteki na osnove
   SDL, takie kak devel/sdl12 ili x11-toolkits/sdl_gui.

   Na dannyj moment raspoznayutsya sleduyuschie SDL-biblioteki:

     * sdl: devel/sdl12

     * gfx: graphics/sdl_gfx

     * gui: x11-toolkits/sdl_gui

     * image: graphics/sdl_image

     * ldbad: devel/sdl_ldbad

     * mixer: audio/sdl_mixer

     * mm: devel/sdlmm

     * net: net/sdl_net

     * sound: audio/sdl_sound

     * ttf: graphics/sdl_ttf

   Takim obrazom, esli port imeet zavisimost' ot net/sdl_net i
   audio/sdl_mixer, to stroka budet sleduyuschej:

 USE_SDL=   net mixer

   Zavisimost' ot porta devel/sdl12, kotoryj trebuetsya dlya
   net/sdl_net i audio/sdl_mixer budet takzhe avtomaticheski
   dobavlen.

   Esli vy ispol'zuete USE_SDL, to on avtomaticheski:

     * Dobavlyaet zavisimost' ot sdl12-config k BUILD_DEPENDS

     * Dobavlyaet peremennuyu SDL_CONFIG k CONFIGURE_ENV

     * Dobavlyaet zavisimosti ot ukazannyh bibliotek k LIB_DEPENDS

   Dlya proverki nalichiya biblioteki SDL vy mozhete delat' `eto pri
   pomoschi peremennoj WANT_SDL:

 WANT_SDL=yes

 .include <bsd.port.pre.mk>

 .if ${HAVE_SDL:Mmixer}!=""
 USE_SDL+=   mixer
 .endif

 .include <bsd.port.post.mk>

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

                           Glava 7. MASTERDIR

   Esli vashemu portu trebuetsya postroenie dovol'no
   razlichayuschihsya versij paketov cherez peremennuyu
   (zadayuschuyu, naprimer, razreshenie, ili razmer bumagi), kotoraya
   prinimaet razlichnye znacheniya, sozdajte dlya kazhdogo paketa
   otdel'nyj podkatalog, chtoby pol'zovatelyam bylo legche
   opredelit', kakim paketom 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 Makefile vy
   mozhete ispol'zovat' peremennuyu MASTERDIR dlya ukazaniya
   kataloga, v kotorom nahodyatsya vse ostal'nye fajly. Takzhe
   ispol'zujte peremennuyu kak chast' PKGNAMESUFFIX, chtoby pakety
   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
    

   Port japanese/xdvi300 soderzhit takzhe vse obychnye patchi, fajly
   dlya paketa 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.

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

                Glava 8. 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, posvyaschionnyj Portam FreeBSD. V bol'shinstve sluchaev
   vasha rabota zakanchivaetsya opredeleniem pravil'nogo nomera
   dinamicheskoj biblioteki i sozdaniem sootvetstvuyuschih patchej
   dlya realizacii `etogo.

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

                     Glava 9. 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 Perl, vy mozhete
   ustanovit' marshruty k spravochnym stranicam 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).

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

               Glava 10. 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 paketov).

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

10.1. USE_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.

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

10.2. MOTIFLIB

   `Eta peremennaya budet ustanovlena scenariem bsd.port.mk v
   sootvetstvuyuschee znachenie, sootvetstvuyuschee biblioteke Motif.
   Pozhalujsta, izmenite ishodnye teksty vashego porta na
   ispol'zovanie `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.

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

                       Glava 11. SHrifty dlya X11

   Esli vash port ustanavlivaet shrifty dlya X Window System,
   pomestite ih v katalog X11BASE/lib/X11/fonts/local. `Etot katalog
   vpervye poyavilsya v XFree86 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.

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

                     Glava 12. Fajly v formate info

   Esli v vashem pakete nuzhna ustanovka fajlov GNU info, oni dolzhny
   byt' perechisleny v peremennoj INFO (bez okonchaniya .info), i
   togda pered registracii paketa vo vremennyj fajl pkg-plist budet
   avtomaticheski dobavlen sootvetstvuyuschij kod
   ustanovki/udaleniya.

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

                         Glava 13. Fajly pkg-*

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

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

13.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(1),
   ili dlya vyvoda informacii o licenzirovanii.

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

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

13.2. pkg-install

   Esli pri ustanovke binarnogo paketa po komande pkg_add(1) 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 paketu,
   i budet dvazhdy zapuskat'sya po komande pkg_add(1): 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 paket.
   Dopolnitel'naya informaciya nahoditsya na stranice Spravochnika o
   komande pkg_add(1).

     Zamechanie: `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.

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

13.3. pkg-deinstall

   `Etot skript vyzyvaetsya pri udalenii paketa.

   `Etot skript utilitoj pkg_delete(1) budet zapuskat'sya dvazhdy.
   Pervyj raz kak ${SH} pkg-install ${PKGNAME} DEINSTALL, a vtoroj
   raz kak ${SH} pkg-install ${PKGNAME} POST-DEINSTALL.

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

13.4. 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(1),
   kak pkg-req ${PKGNAME} INSTALL. V processe udaleniya on budet
   zapuschen komandoj pkg_delete(1) kak pkg-req ${PKGNAME} DEINSTALL.

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

13.5. 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,
   4.9). %%PERL_VERSION%% oboznachaet polnyj nomer versii 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 (takzhe, kak i dobavlenie lyubyh spravochnyh
   stranic) budet sdelana mezhdu vypolneniem celej pre-install i
   do-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 pre-install. Krome togo, esli vashemu portu
   trebuetsya otredaktirovat' poluchayuschijsya fajl, delajte `eto v
   celi post-install izmeneniem fajla TMPPLIST.

   Drugoj sposob izmeneniya spiska sborki porta osnovan na
   opredelenii znachenij peremennyh PLIST_FILES i PLIST_DIRS. Kazhdoe
   iz nih rassmatrivaetsya kak perechen' putej dlya zapisi v TMPPLIST
   soderzhimogo PLIST. Imena, perechislennye v PLIST_FILES i
   PLIST_DIRS, podvergayutsya podstanovke %%VAR%%, kak opisano vyshe.
   Za isklyucheniem `etogo, imena iz PLIST_FILES budut poyavlyat'sya
   v okonchatel'nom variante perechnya sborki bez izmenenij, kogda
   kak @dirrm budet predshestvovat' imenam iz PLIST_DIRS. Dlya togo,
   chtoby vozymet' dejstvie, PLIST_FILES i PLIST_DIRS dolzhny
   zadavat'sya do togo, kak budet zapisyvat'sya TMPPLIST, to est' v
   celi pre-install ili eschio ran'she.

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

13.6. 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 
   DESCR       ${PKGDIR}/pkg-descr      
   PLIST       ${PKGDIR}/pkg-plist      
   PKGINSTALL  ${PKGDIR}/pkg-install    
   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.

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

                  Glava 14. Testirovanie vashego porta

14.1. Zapusk make describe

   Nekotorye utility FreeBSD dlya soprovozhdeniya portov, naprimer,
   portupgrade(1), opirayutsya na bazu dannyh s imenem
   /usr/ports/INDEX, v kotoroj otslezhivayutsya takie harakteristiki
   portov, kak ih zavisimosti. Fajl INDEX sozdaiotsya pri pomoschi
   ports/Makefile verhnego urovnya po komande make index,
   spuskayuschejsya v podkatalog kazhdogo porta i vypolnyayuschej v
   niom make describe. Takim obrazom, esli vypolnenie make describe s
   kakim-libo portom zavershitsya neudachno, to nikomu ne udastsya
   sozdat' INDEX, pri `etom mnogo lyudej vskore stanut neschastny.

     Zamechanie: Vozmozhnost' generirovat' `etot fajl ochen' vazhna
     vne zavisimosti ot togo, kakie parametry prisutstvuyut v
     make.conf, po`etomu, pozhalujsta, izbegajte, takih veschej, kak
     ispol'zovanie deklaracii .error, kogda (k primeru) trebovaniya k
     zavisimost' ne bylo udovletvoreno.

   Primer 14-1. Kak izbegat' ispol'zovanie .error

   Predpolozhim, chto kto-to pomestil stroku

 USE_POINTYHAT=yes

   v make.conf. Pervyj iz posleduyuschih dvuh variantov strok fajla
   Makefile privediot k neudachnomu zaversheniyu raboty make index, a
   vtoroj - net:

 .if USE_POINTYHAT
 .error "POINTYHAT is not supported"
 .endif

 .if USE_POINTYHAT
 IGNORE=POINTYHAT is not supported
 .endif

   Esli komanda make describe vydaiot strochku, a ne oshibku, to dlya
   vas `eto projdiot bezboleznenno. Obratites' k fajlu bsd.port.mk,
   chtoby vyyasnit' znachenie vydavaemyh strok.

   Zamet'te takzhe, chto zapusk poslednej versii portlint (kak
   ukazano v sleduyuschem razdele) privediot k avtomaticheskomu
   zapusku komandy make describe.

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

14.2. Portlint

   Prover'te svoyu rabotu komandoj portlint pered tem, kak eio
   otoslat' ili perenesti v derevo portov. portlint preduprezhdaet
   vas o mnogih rasprostranionnyh oshibkah, kak funkcional'nyh, tak i
   stilisticheskih. Dlya novogo (ili skopirovannogo vnutri
   hranilischa) porta samym podhodyaschim yavlyaetsya zapusk portlint
   -A; dlya uzhe suschestvuyuschego porta dostatochno budet zapustit'
   portlint -C.

   Tak kak dlya obnaruzheniya oshibok portlint ispol'zuet
   `evristicheskie metody, to im mogut vydavat'sya i oshibochnye
   preduprezhdeniya. Krome togo, vremya ot vremeni nechto,
   otmechaemoe kak nekorrektnost', iz-za ogranichenij mehanizma
   sozdaniya portov ne mozhet byt' sdelano nikak inache. Esli vy
   somnevaetes', to luchshe vsego sprosit' v Spisok rassylki,
   posvyaschionnyj Portam FreeBSD.

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

14.3. 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).

   Izbezhanie yavnogo ukazaniya /usr/local ili /usr/X11R6 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
   fajlah scripts/Makefile porta na ispol'zovanie ${PREFIX}, tak kak
   `eta peremennaya avtomaticheski peredaiotsya 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/port-name

   Esli chto-to bylo ustanovleno za predelami PREFIX, to process
   sozdaniya paketa 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 fajlah Makefile.

   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 vsio
   derevo /usr/local kuda-to v drugoe mesto.

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

                          Glava 15. Obnovlenie

   Esli vy zametite, chto vash port ustarel po sravneniyu s poslednej
   avtorskoj versiej, pervym delom vy dolzhny poluchit' samuyu
   poslednyuyu versiya porta. Vy mozhete najti ih v kataloge
   ports/ports-current na zerkal'nyh FTP-serverah FreeBSD. Odnako
   esli vy rabotaete s dostatochno bol'shim kolichestvom portov,
   navernoe, budet prosche ispol'zovat' CVSup dlya podderzhaniya vsej
   kollekcii portov v aktual'nom sostoyanii, kak `eto opisano v
   Rukovodstve. K tomu zhe `eto dast vozmozhnost' otslezhivat' vse
   zavisimosti portov.

   Na sleduyuschem shage neobhodimo vyyasnit', net ozhidaet li uzhe
   `eto obnovlenie svoej ocheredi. Dlya `etogo u vas est' dve
   vozmozhnosti. Suschestvuet interfejs k baze dannyh soobschenij o
   problemah FreeBSD (PR) (izvestnoj takzhe kak GNATS) s poiskovymi
   vozmozhnostyami. Vyberite iz vypadayuschego spiska ports i vvedite
   nazvanie porta.

   Odnako inogda lyudi zabyvayut pomestit' nazvanie porta v pole
   Synopsis v tochnom vide. V takom sluchae vy mozhete
   vospol'zovat'sya Sistemoj monitoringa portov FreeBSD (kotoraya
   izvestna takzhe kak portsmon). V ramkah `etoj sistemy delaetsya
   popytka klassificirovat' PR, kasayuschiesya portov, po imeni
   porta. Dlya poiska PR, otnosyaschihsya k opredelionnomu portu,
   ispol'zujte mehanizm Prosmotra po odnomu portu.

   Esli takih otlozhennyh PR ne suschestvuet, to na sleduyuschem
   `etape sleduet poslat' soobschenie `elektronnoj pochty cheloveku,
   podderzhivayuschemu port, kotoryj vydaiotsya po komande make
   maintainer. `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);
   vam net nuzhdy dublirovat' ih rabotu. Zamet'te, chto
   nepodderzhivaemye porty perechislyayutsya s adresom mejntejnera
   ports@FreeBSD.org, kotoryj yavlyaetsya vsego lish' adresom
   obschego spiska rassylki, tak chto otpravka tuda soobschenij,
   skoree vsego, v dannom sluchae ne pomozhet.

   Esli mejntejner prosit vas vypolnit' obnovlenie, libo ili
   mejntejner otsutstvuet, to u vas poyavlyaetsya shans pomoch'
   FreeBSD, prigotoviv obnovlenie samim! Pozhalujsta, vnesite
   izmeneniya i sohranite rezul'tat rekursivnogo diff mezhdu novym i
   starym katalogami porta (naprimer, esli katalog s modificirovannym
   portom nazyvaetsya superedit, a original'nyj, sovpadayuschij s
   nahodyaschimsya v nashem dereve portov, superedit.bak, to
   sohranite rezul'tat vypolneniya komandy diff -ruN superedit.bak
   superedit). Podojdiot kak unificirovannyj, tak i kontekstnyj diff,
   odnako kommittery portov obychno predpochitayut unificirovannyj
   format. Otmet'te ispol'zovanie opcii -N--`eto odobryaemyj sposob
   zastavit' diff korrektno rabotat' v sluchae dobavleniya novyh
   fajlov ili udaleniya staryh. Pered tem, kak posylat' nam
   diff-fajl, pozhalujsta, prover'te ego, chtoby ubedit'sya v
   znachimosti vseh vnesionnyh izmenenij. Dlya uproscheniya
   povtoryayuschihsya operacij s fajlami zaplatok vy mozhete
   vospol'zovat'sya skriptom /usr/ports/Tools/scripts/patchtool.py.
   Pered tem, kak ego zapuskat', pozhalujsta, prochtite
   /usr/ports/Tools/scripts/README.patchtool.

   Esli port nikem ne podderzhivaetsya, a vy aktivno ego ispol'zuete,
   pozhalujsta, podumajte nad tem, chtoby dobrovol'no stat' ego
   mejntejnerom. Vo FreeBSD imeetsya bolee 2000 portov bez
   podderzhki, i `eto kak raz ta oblast', gde vsegda nuzhny
   dobrovol'cy. (Detal'noe opisanie obyazannostej mejntejnerov mozhno
   najti v razdele MAINTAINER v Make-fajlah.)

   Luchshe vsego poslat' nam diff-fajl, vklyuchiv ego v posylku po
   komande send-pr(1) (kategoriya ports). Esli vy dobrovol'no
   sobiraetes' soprovozhdat' port, obyazatel'no pomestite tekst
   [maintainer update] v nachale stroki opisaniya i zadajte v pole
   ``Class'' vashego PR strochku maintainer-update. V protivnom
   sluchae v pole ``Class'' vashego PR dolzhno byt' ukazano
   change-request. Bud'te dobry, v soobschenii otmet'te vse
   dobavlennye ili udalionnye fajly, tak kak oni budut
   neposredstvenno ukazany cvs(1) 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.

   Prezhde chem pol'zovat'sya send-pr(1) vy dolzhny prosmotret'
   razdel o Napisanii soobschenij o problemah v stat'e o
   Soobscheniyah ob oshibkah; on soderzhit gorazdo bol'she informacii
   o tom, kak pisat' poleznye soobscheniya o problemah.

     Vazhno: Esli vashe obnovlenie vyzvano soobrazheniyami
     informacionnoj bezopasnosti ili nalichiem ser'ioznyh oshibok v
     imeyuschemsya porte, pozhalujsta, opovestite Gruppa Menedzherov
     Dereva Portov FreeBSD <portmgr@FreeBSD.org> o neobhodimosti
     nemedlennogo perepostroeniya i povtornogo rasprostraneniya
     paketa vashego porta. V protivnom sluchae nichego ne
     podozrevayuschie pol'zovateli pkg_add(1) budut prodolzhat'
     ustanavlivat' staruyu versiyu po komande pkg_add -r v techenie
     eschio neskol'kih nedel'.

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

   Teper', kogda vy prodelali vsio `eto, vam mozhet ponadobit'sya
   prochest' o tom, kak podderzhivat' aktual'noe sostoyanie, v Gl.
   19.

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

          Glava 16. CHto delat' nuzhno, i chto delat' nel'zya

16.1. Vvedenie

   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 stat'e 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.

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

16.2. Udalenie otladochnoj informacii v binarnyh fajlah

   Ne udalyajte otladochnuyu informaciyu iz binarnyh fajlov
   vruchnuyu, esli vy `eto delali. Vo vseh dvoichnyh fajlah
   otladochnaya informaciya dolzhna byt' udalena, i makros
   INSTALL_PROGRAM budet vypolnyat' ustanovku i udalenie otladochnoj
   informacii odnovremenno (obratites' k sleduyuschemu razdelu).

   Esli vam nuzhno udalit' otladochnuyu informaciyu iz fajla, no bez
   ispol'zovaniya makrosa INSTALL_PROGRAM, to `eto mozhno sdelat' pri
   pomoschi ${STRIP_CMD}. Obychno `eto delaetsya vnutri celi
   post-install. K primeru:

 post-install:
         ${STRIP_CMD} ${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.
   Krome togo, strip(1) ne budet obrabatyvat' programmu, otladochnaya
   informaciya iz kotoroj uzhe udalena; vmesto `etogo utilita prosto
   zavershit svoyu rabotu.

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

16.3. 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.

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

16.4. 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 ustanovke portov s CDROM 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.

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

16.5. 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}.

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

16.6. 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 nuzhno sdelat' takie izmeneniya v kode dlya
   uslovnoj kompilyacii, to vy dolzhny delat' izmeneniya kak mozhno
   bolee obschimi, chtoby my mogli perenesti kod na bolee starye
   sistemy FreeBSD, 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, posvyaschionnyj Portam FreeBSD.

   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__ opredelion 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 vsegda uvelichivaetsya v sootvetstvii so
       starshim nomerom versii sistemy.

     * Esli vam nuzhno otdelit' sistemy FreeBSD 1.x ot sistem FreeBSD
       2.x i bolee starshih, 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
          

   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.

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

16.7. Znacheniya __FreeBSD_version

   Nizhe dlya spravki privoditsya perechen' znachenij
   __FreeBSD_version v vide, kotoryj opredelion v sys/param.h:

   Tablica 16-1. Znacheniya __FreeBSD_version

                      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    300003                 
   ioctl                                       
   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                             
   sledovaniya konstruktorov/destruktorov v    310002
   C++                                         
   3.2-RELEASE                                 320000                 
   3.2-STABLE                                  320001                 
   3.2-STABLE posle nesovmestimyh izmenenij v  320002                 
   IPFW i soketah                              
   3.3-RELEASE                                 330000                 
   3.3-STABLE                                  330001                 
   3.3-STABLE posle dobavleniya mkstemp(3) v   330002                 
   libc                                        
   3.4-RELEASE                                 340000                 
   3.4-STABLE                                  340001                 
   3.5-RELEASE                                 350000                 
   3.5-STABLE                                  350001                 
   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                            
   sledovaniya konstruktorov/destruktorov v    400002
   C++                                         
   4.0-CURRENT posle poyavleniya funkcii       400003                 
   dladdr(3)                                   
   4.0-CURRENT posle ispravleniya oshibki v                           
   rabote funkcii __deregister_frame_info      400004
   dinamicheskogo komponovschika (a takzhe     
   4.0-CURRENT posle integracii EGCS 1.1.2)    
   4.0-CURRENT posle izmeneniya interfejsa                            
   funkcii suser(9) (a takzhe 4.0-CURRENT      400005
   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   400009                 
   dev_t 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   400012                 
   GCC 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                             
   kompilyatora GCC 2.95.2 po umolchaniyu s    400015
   -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 poyavleniya otlozhennyh    400019                 
   kontrol'nyh summ.                           
   4.0-STABLE posle integracii koda biblioteki 400020                 
   libxpg4 v libc.                             
   4.0-STABLE posle obnovleniya paketa                                
   Binutils do versii 2.10.0, izmeneniya v     
   sheme pometki vypolnimyh fajlov ELF i       400021
   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                                  
   setproctitle(3) iz biblioteki libutil v     410002
   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                           
   libgcc_r.a, a takzhe sootvetstvuyuschih     420001
   izmenenij v komponovke GCC.                 
   4.3-RELEASE                                 430000                 
   4.3-STABLE posle poyavleniya wint_t.        430001                 
   4.3-STABLE posle dobavleniya API            430002                 
   sostoyaniya `elektropitaniya PCI.           
   4.4-RELEASE                                 440000                 
   4.4-STABLE posle dobavleniya d_thread_t.    440001                 
   4.4-STABLE posle izmenenij v strukturu dlya                        
   montirovaniya (`eto zatragivaet KLD         440002
   fajlovyh sistem).                           
   4.4-STABLE posle importirovaniya            440003                 
   pol'zovatel'skih komponent smbfs.           
   4.5-RELEASE                                 450000                 
   4.5-STABLE posle pereimenovaniya `elementov 450001                 
   struktur usb                                
   4.5-STABLE posle togo, kak peremennaya                             
   rc.conf(5) sendmail_enable stala            450004
   obrabatyvat' znachenie NONE.                
   4.5-STABLE posle pereklyucheniya na                                
   ispol'zovanie po umolchaniyu pri postroenii 450005
   paketov XFree86 4.                          
   4.5-STABLE posle togo, kak setevoj fil'tr                          
   dlya `etapa podtverzhdeniya soedineniya byl 450006
   ispravlen takim obrazom, chto on bol'she ne 
   podverzhen prostym DoS-atakam.              
   4.6-RELEASE                                 460000                 
   Spravochnaya stranica po sendfile(2) v                             
   4.6-STABLE privedena v sootvetstvie s       
   dokumentaciej, nikakie zagolovki ne         460001
   sravnivayutsya s kolichestvom dannyh,       
   poslannyh iz fajla.                         
   4.6.2-RELEASE                               460002                 
   4.6-STABLE                                  460100                 
   4.6-STABLE posle perenosa iz -CURRENT       460101                 
   funkcional'nosti `sed -i'.                  
   4.6-STABLE posle MFC mnogih novyh           460102                 
   vozmozhnostej pkg_install iz vetki HEAD.    
   4.7-RELEASE                                 470000                 
   4.7-STABLE                                  470100                 
   Nachalo generacii ssylok __std{in,out,err}p                        
   vmesto __sF. `Eto perenosit vychislenie     470101
   vyrazhenij v std{in,out,err} s momenta      
   kompilyacii na vremya vypolneniya.          
   4.7-STABLE posle MFC izmenenij v mbuf dlya  470102                 
   zameny m_aux mbufs na m_tag's               
   V 4.7-STABLE poyavlyaetsya OpenSSL 0.9.7    470103                 
   4.8-RELEASE                                 480000                 
   4.8-STABLE                                  480100                 
   4.8-STABLE posle togo, kak funkciya                                
   realpath(3) byla sdelana sovmestimoj s      480101
   potokami vypolneniya                        
   4.8-STABLE posle izmenenij 3ware API v twe. 480102                 
   4.9-RELEASE                                 490000                 
   4.9-STABLE                                  490100                 
   4.9-STABLE posle dobavleniya e_sid v        490101                 
   strukturu kinfo_eproc.                      
   4.9-STABLE posle vypolneniya MFC            490102                 
   funkcional'nosti libmap dlya rtld.          
   4.10-RELEASE                                491000                 
   4.10-STABLE                                 491100                 
   5.0-CURRENT                                 500000                 
   5.0-CURRENT posle dobavleniya                                      
   dopolnitel'nyh polej v zagolovke ELF i      
   izmeneniya metoda pometki prinadlezhnosti k 500001
   opredelionnoj sisteme dlya vypolnimyh       
   fajlov v formate ELF.                       
   5.0-CURRENT posle izmenenij v metadannyh    500002                 
   kld.                                        
   5.0-CURRENT posle izmenenij buf/bio.        500003                 
   5.0-CURRENT posle obnovleniya binutils.     500004                 
   5.0-CURRENT posle integracii koda                                  
   biblioteki libxpg4 v libc i poyavleniya     500005
   interfejsa TASKQ.                           
   5.0-CURRENT posle dobavleniya interfejsov   500006                 
   AGP.                                        
   5.0-CURRENT posle obnovleniya Perl do       500007                 
   versii 5.6.0                                
   5.0-CURRENT posle obnovleniya koda KAME do  500008                 
   versii 2000/07.                             
   5.0-CURRENT posle izmenenij v               500009                 
   ether_ifattach() i ether_ifdetach().        
   5.0-CURRENT posle vozvrata v nastrojkah                            
   utility mtree, primenyaemyh po umolchaniyu, 500010
   obratno k original'nym i dobavleniya flaga  
   -L dlya perehoda po simvolicheskim ssylkam. 
   5.0-CURRENT posle izmeneniya v API dlya     500011                 
   kqueue.                                     
   5.0-CURRENT posle peremescheniya                                   
   setproctitle(3) iz biblioteki libutil v     500012
   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                          
   libgcc_r.a, a takzhe sootvetstvuyuschih     500015
   izmenenij v komponovke GCC.                 
   5.0-CURRENT posle izmeneniya,                                      
   pozvolyayuschego libc i libc_r byt'         500016
   skomponovannymi vmeste, chto delaet         
   parametr -pthread nenuzhnym.                
   5.0-CURRENT posle perehoda na ispol'zovanie                        
   struct xucred vmesto struct ucred dlya      500017
   stabilizacii `eksportiruemogo API yadra     
   dlya mountd i t.d.                          
   5.0-CURRENT posle dobavleniya peremennoj                           
   make CPUTYPE pozvolyayuschej kontrolirovat' 500018
   specifichnye dlya CPU optimizacii.          
   5.0-CURRENT posle perenosa                  500019                 
   machine/ioctl_fd.h v sys/fdcio.h            
   5.0-CURRENT posle izmeneniya imen dlya      500020                 
   lokalizacii.                                
   5.0-CURRENT posle importirovaniya Bzip2.    500021                 
   Takzhe oznachaet udalenie S/Key.            
   5.0-CURRENT s podderzhkoj SSE.              500022                 
   5.0-CURRENT posle KSE `Etap 2.              500023                 
   5.0-CURRENT posle d_thread_t i perenosa     500024                 
   UUCP v porty.                               
   5.0-CURRENT posle izmeneniya ABI iz-za                             
   perenosa peredachi deskriptora i prav na    500025
   64-razryadnye platformy.                    
   5.0-CURRENT posle perehoda na ispol'zovanie                        
   po umolchaniyu XFree86 4 dlya postroeniya   500026
   paketov i posle dobavleniya v biblioteku    
   libc novoj funkcii strnstr().               
   5.0-CURRENT posle dobavleniya v biblioteku  500027                 
   libc novoj funkcii strcasestr().            
   5.0-CURRENT posle importa pol'zovatel'skih  500028                 
   komponent smbfs.                            
   5.0-CURRENT posle dobavleniya novyh         (Znachenie ne          
   specificheskih dlya C99 celochislennyh      izmeneno)              
   tipov.                                      
   5.0-CURRENT posle izmeneniya                                       
   vozvraschaemogo funkciej sendfile(2)        500029
   znacheniya.                                 
   5.0-CURRENT posle dobavleniya novogo tipa                          
   fflags_t, sootvetstvuyuschij fajlovym       500030
   flagam.                                     
   5.0-CURRENT posle pereimenovaniya           500031                 
   `elementov struktur usb.                    
   5.0-CURRENT posle obnovleniya Perl do       500032                 
   versii 5.6.1                                
   5.0-CURRENT posle togo kak peremennaya                             
   rc.conf(5) sendmail_enable stala            500033
   obrabatyvat' znachenie NONE.                
   5.0-CURRENT posle dobavleniya v funkciyu    500034                 
   mtx_init() tret'ego parametra.              
   5.0-CURRENT posle importa Gcc 3.1           500035                 
   5.0-CURRENT posle udaleniya Perl iz         500036                 
   /usr/src                                    
   5.0-CURRENT posle dobavleniya funkcii       500037                 
   dlfunc(3)                                   
   5.0-CURRENT posle togo, kak byli izmeneny                          
   tipy nekotoryh zapisej v strukture sockbuf, 500038
   a sama struktura byla reorganizovana.       
   5.0-CURRENT posle togo, kak v fajlah                               
   zagolovkov bylo prekrascheno ispol'zovanie  
   _BSD_FOO_T_ i nachato ispol'zovanie         
   _FOO_T_DECLARED. `Eto znachenie mozhet byt' 500039
   takzhe ispol'zovano kak primernaya tochka   
   nachala podderzhki paketov v formate        
   bzip2(1).                                   
   5.0-CURRENT posle razlichnyh izmenenij v                           
   diskovyh funkciyah, sdelannyh dlya          500040
   izbavleniya ot zavisimosti ot vnutrennego   
   ustrojstva struktury metki diska.           
   5.0-CURRENT posle dobavleniya funkcii       500041                 
   getopt_long(3) v biblioteku libc.           
   5.0-CURRENT posle obnovleniya Binutils                             
   2.13, kuda vklyuchena novaya `emulyaciya    500042
   FreeBSD, vec i format vydachi.              
   5.0-CURRENT posle dobavleniya prostyh                              
   zaglushek pthread_XXX k biblioteke libc,    500043
   chto sdelalo libXThrStub.so nenuzhnoj.      
   5.0-RELEASE.                                
   5.0-CURRENT posle sozdaniya vetki dlya      500100                 
   RELENG_5_0                                  
   <sys/dkstat.h> pust i ne dolzhen            500101                 
   ispol'zovat'sya.                            
   5.0-CURRENT posle izmeneniya interfejsa     500102                 
   d_mmap_t.                                   
   5.0-CURRENT posle togo, kak bylo vneseno                           
   izmenenie, pri kotorom taskqueue_swi        500103
   rabotaet bez Giant, i bylo dobavleno        
   taskqueue_swi_giant, rabotayuschee s Giant. 
   cdevsw_add() i cdevsw_remove() bol'she ne                          
   suschestvuyut. Poyavilas' tehnologiya       500104
   vydeleniya MAJOR_AUTO.                      
   5.0-CURRENT posle poyavleniya novogo metoda 500105                 
   inicializacii cdevsw.                       
   devstat_add_entry() zameneno na             500106                 
   devstat_new_entry()                         
   Izmenenie interfejsa devstat smotrite       500107                 
   sys/sys/param.h 1.149                       
   Izmenenie v interfejse Token-Ring.          500108                 
   Dobavlenie vm_paddr_t.                      500109                 
   5.0-CURRENT posle togo, kak funkciya                               
   realpath(3) byla sdelana sovmestimoj s      500110
   potokami vypolneniya                        
   5.0-CURRENT posle togo, kak funkciya                               
   usbhid(3) byla privedena v sootvetstvie s   500111
   NetBSD                                      
   5.0-CURRENT posle novoj realizacii NSS i                           
   dobavleniya funkcij POSIX.1 getpw*_r i      500112
   getgr*_r                                    
   5.0-CURRENT posle udaleniya staroj sistemy  500113                 
   rc.                                         
   5.1-RELEASE.                                501000                 
   5.1-CURRENT posle poyavleniya vetki         501100                 
   RELENG_5_1.                                 
   5.1-CURRENT posle korrektirovki smysla      501101                 
   funkcij sigtimedwait(2) i sigwaitinfo(2).   
   5.1-CURRENT posle dobavleniya polej                                
   lockfunc i lockfuncarg v                    501102
   bus_dma_tag_create(9).                      
   5.1-CURRENT posle integracii sn`epshota GCC 501103                 
   3.3.1-pre 20030711.                         
   5.1-CURRENT osle izmenenij 3ware API v twe. 501104                 
   Podderzhka v 5.1-CURRENT dinamicheski                              
   skomponovannyh /bin i /sbin, peremeschenie  501105
   bibliotek v /lib.                           
   5.1-CURRENT posle dobavleniya v yadro       501106                 
   podderzhki Coda 6.x.                        
   5.1-CURRENT posle peremescheniya konstant                          
   dlya 16550 UART iz fajla <dev/sio/sioreg.h> 
   v <dev/ic/ns16550.h>. A takzhe moment,      501107
   kogda rtld stal podderzhivat'               
   funkcional'nost' libmap v bezuslovnom       
   rezhime.                                    
   5.1-CURRENT posle obnovleniya v API         501108                 
   PFIL_HOOKS                                  
   5.1-CURRENT posle dobavleniya funkcii       501109                 
   kiconv(3)                                   
   5.1-CURRENT posle izmenenij operacij po     501110                 
   umolchaniyu dlya open i close v cdevsw      
   5.1-CURRENT posle izmenenij v strukture     501111                 
   cdevsw                                      
   5.1-CURRENT posle dobavleniya               501112                 
   mnozhestvennogo nasledovaniya dlya kobj     
   5.1-CURRENT posle izmeneniya if_xname v     501113                 
   strukture ifnet                             
   5.1-CURRENT posle izmenenij, svyazannyh s   501114                 
   dinamicheskoj komponovkoj /bin i /sbin      
   5.2-RELEASE                                 502000                 
   5.2.1-RELEASE                               502010                 
   5.2-CURRENT posle otdeleniya vetki          502100                 
   RELENG_5_2                                  
   5.2-CURRENT posle dobavleniya v libc        502101                 
   funkcij __cxa_atexit/__cxa_finalize.        
   5.2-CURRENT posle smeny ispol'zuemoj po                            
   umolchaniyu biblioteki raboty s potokami    502102
   vypolneniya libc_r na libpthread.           
   5.2-CURRENT posle bol'shogo izmeneniya v    502103                 
   API drajverov ustrojstv.                    
   5.2-CURRENT posle dobavleniya               502104                 
   getopt_long_only().                         
   5.2-CURRENT posle togo, kak makro                                  
   peremennaya NULL byla pereopredelena dlya   
   yazyka C kak ((void *)0), chto privelo k    502105
   uvelicheniyu kolichestva preduprezhdenij    
   kompilyatora.                               
   5.2-CURRENT posle ustanovki i vklyucheniya  502106                 
   pf v process postroeniya sistemy.           
   5.2-CURRENT posle togo, kak znachenie                              
   time_t na platforme sparc64 stalo           502107
   64-razryadnym.                              
   5.2-CURRENT posle togo, kak podderzhka                             
   kompilyatora Intel C/C++ v nekotoryh        
   zagolovochnyh fajlah i execve(2) byla       502108
   izmenena na bolee strogo                    
   sootvetstvuyuschuyu POSIX.                  
   5.2-CURRENT posle vvedeniya programmnogo    502109                 
   interfejsa bus_alloc_resource_any           
   5.2-CURRENT posle dobavleniya podderzhki    502110                 
   lokalizacii UTF-8                           
   5.2-CURRENT posle udaleniya programmnogo    502111                 
   interfejsa getvfsent(3)                     
   5.2-CURRENT posle dobavleniya direktivy     502112                 
   .warning dlya make.                         
   5.2-CURRENT posle togo, kak funkciya                               
   ttyioctl() stala obyazatel'noj dlya         502113
   drajverov posledovatel'nyh ustrojstv.       
   5.2-CURRENT posle importirovaniya ALTQ      502114                 
   infrastruktury.                             
   5.2-CURRENT posle togo, kak                                        
   sema_timedwait(9) stal vozvraschat' 0 v     502115
   sluchae uspeha i ne nulevoj kod oshibki v   
   sluchae neudachi.                           
   5.2-CURRENT posle togo, kak kernel tip      502116                 
   dev_t stal ukazatelem na struct cdev *.     
   5.2-CURRENT posle togo, kak kernel tip      502117                 
   udev_t izmenilsya na dev_t.                 
   5.2-CURRENT posle dobavleniya podderzhki                           
   CLOCK_VIRTUAL i CLOCK_PROF v                502118
   clock_gettime(2) i clock_getres(2).         
   5.2-CURRENT posle togo, kak byl provedion                          
   kloniruyuschij peresmotr setevogo           502119
   interfejsa.                                 

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

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

16.8. 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.

     Zamechanie: Vam nuzhno vklyuchit' libo paru fajlov
     bsd.port.pre.mk/bsd.port.post.mk, libo tol'ko bsd.port.mk; ne
     ispol'zujte oba `etih metoda odnovremenno.

   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, ta zhe,  
                 chto i __FreeBSD_version.                            
                 Format ob"ektnyh fajlov, ispol'zuemyh v sisteme (elf 
   PORTOBJFORMAT ili aout); zamet'te, chto dlya ``sovremennyh''       
                 versij FreeBSD aout ne ispol'zuetsya.)               
   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).                    

     Zamechanie: 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

   Vy ne zabyvaete ob ispol'zovanii tabulyacii vmesto probelov posle
   BROKEN= i TCL_LIB_FILE=, ne tak li? :-).

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

16.9. 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} ${DOCSDIR}
         ${INSTALL_MAN} ${WRKSRC}/docs/xvdocs.ps ${DOCSDIR}
  .endif

   Vot neskol'ko poleznyh peremennyh i to, kak oni preobrazuyutsya po
   umolchaniyu pri ispol'zovanii v Makefile:

     * DATADIR preobrazuetsya v PREFIX/share/PORTNAME.

     * DOCSDIR preobrazuetsya v PREFIX/share/doc/PORTNAME.

     * EXAMPLESDIR preobrazuetsya v PREFIX/share/examples/PORTNAME.

   `Eti peremennye `eksportiruyutsya v PLIST_SUB. Ih znacheniya
   poyavyatsya tam v vide imion putej otnositel'no PREFIX, esli `eto
   vozmozhno. To est' share/doc/PORTNAME v spiske sborki po
   umolchaniyu budet zamenen na %%DOCSDIR%%, i tak dalee.
   (Dopolnitel'nuyu informaciyu o podstanovke v pkg-plist mozhno
   najti zdes'.)

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

 %%PORTDOCS%%%%DOCSDIR%%/AUTHORS
 %%PORTDOCS%%%%DOCSDIR%%/CONTACT
 %%PORTDOCS%%@dirrm %%DOCSDIR%%

   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.

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

   V kachestve al'ternativy perechisleniyu fajlov dokumentacii v
   fajle pkg-plist, port mozhet ukazat' v peremennoj PORTDOCS spisok
   imion fajlov i global'nyh shablonov komandnogo processora dlya
   dobavleniya v okonchatel'nyj spisok sborki. Imena budut
   zadavat'sya otnositel'no DOCSDIR. Takim obrazom, port,
   ispol'zuyuschij PORTDOCS i nestandartnoe mestopolozhenie
   dokumentacii, dolzhen zadavat' sootvetstvuyuschim obrazom i
   DOCSDIR. Esli katalog ukazan v PORTDOCS ili sootvetstvuet shablonu
   dlya `etoj peremennoj, to polnoe podderevo s vhodyaschimi v nego
   fajlami i katalogami budet registrirovat'sya v okonchatel'nom
   spiske sborki. PORTDOCS ne dolzhna zadavat'sya, esli opredelena
   peremennaya NOPORTDOCS. Ustanovka dokumentacii v PORTDOCS, kak
   `eto pokazano vyshe, ostaiotsya za samim portom. Tipichnyj primer
   ispol'zovaniya PORTDOCS vyglyadit sleduyuschim obrazom:

 .if !defined(NOPORTDOCS)
         PORTDOCS=       *
 .endif

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

16.10. 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 rabotaet s podhodom 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.

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

16.11. 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(1), dazhe esli
   katalog PREFIX/share/doc/gimp ne pust iz-za togo, chto drugie
   porty ustanovili syuda kakie-to fajly.

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

16.12. Identifikatory UID

   Esli vashemu portu 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 paketa, 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/Wnn6.

   Udostover'tes', chto ne ispol'zuete UID, uzhe zarezervirovannyj
   sistemoj ili drugimi portami.

   Vot tekuschij perechen' ispol'zuemyh UID mezhdu 50 i 999.

 bind:*:53:53:Bind Sandbox:/:/sbin/nologin
 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
 proxy:*:62:62:Packet Filter pseudo-user:/nonexistent:/nonexistent
 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
 pgsql:*:70:70:PostgreSQL pseudo-user:/usr/local/pgsql:/bin/sh
 oracle:*:71:71::0:0:Oracle:/usr/local/oracle7:/sbin/nologin
 ircd:*:72:72:IRC daemon:/nonexistent:/nonexistent
 ircservices:*:73:73:IRC services:/nonexistent:/nonexistent
 ifmail:*:75:66:Ifmail user:/nonexistent:/nonexistent
 www:*:80:80:World Wide Web Owner:/nonexistent:/sbin/nologin
 alias:*:81:81:QMail user:/var/qmail/alias:/nonexistent
 qmaild:*:82:81:QMail user:/var/qmail:/nonexistent
 qmaill:*:83:81:QMail user:/var/qmail:/nonexistent
 qmailp:*:84:81:QMail user:/var/qmail:/nonexistent
 qmailq:*:85:82:QMail user:/var/qmail:/nonexistent
 qmailr:*:86:82:QMail user:/var/qmail:/nonexistent
 qmails:*:87:82:QMail user:/var/qmail:/nonexistent
 mysql:*:88:88:MySQL Daemon:/var/db/mysql:/sbin/nologin
 vpopmail:*:89:89:VPop Mail User:/usr/local/vpopmail:/nonexistent
 firebird:*:90:90:Firebird Database Administrator:/usr/local/firebird:/bin/sh
 mailman:*:91:91:Mailman User:/usr/local/mailman:/sbin/nologin
 gdm:*:92:92:GDM Sandbox:/:/sbin/nologin
 jabber:*:93:93:Jabber Daemon:/nonexistent:/nonexistent
 p4admin:*:94:94:Perforce admin:/usr/local/perforce:/sbin/nologin
 interch:*:95:95:Interchange user:/usr/local/interchange:/sbin/nologin
 squeuer:*:96:96:SQueuer Owner:/nonexistent:/bin/sh
 mud:*:97:97:MUD Owner:/usr/local/share/dgd:/bin/sh
 msql:*:98:98:mSQL-2 pseudo-user:/var/db/msqldb:/bin/sh
 rscsi:*:99:99:Remote SCSI:/usr/local/rscsi:/usr/local/sbin/rscsi
 squid:*:100:100:squid caching-proxy pseudo user:/usr/local/squid:/sbin/nologin
 quagga:*:101:101:Quagga route daemon pseudo user:/usr/local/etc/quagga:/sbin/nologin
 ganglia:*:102:102:Ganglia User:/nonexistent:/sbin/nologin
 sgeadmin:*:103:103:Sun Grid Engine Admin:/nonexistent:/sbin/nologin
 slimserv:*:104:104:Slim Devices SlimServer pseudo-user:/nonexistent:/sbin/nologin
 dnetc:*:105:105:distributed.net client and proxy pseudo-user:/nonexistent:/sbin/nologin
 clamav:*:106:106:Clamav Antivirus:/nonexistent:/sbin/nologin
 cacti:*:107:107:Cacti Sandbox:/nonexistent:/sbin/nologin
 fido:*:111:111:Fido System:/usr/local/fido:/bin/sh
 postfix:*:125:125:Postfix Mail System:/var/spool/postfix:/sbin/nologin
 rbldns:*:153:153:rbldnsd pseudo-user:/nonexistent:/sbin/nologin
 sfs:*:171:171:Self-Certifying File System:/nonexistent:/sbin/nologin
 agk:*:172:172:AquaGateKeeper:/nonexistent:/nonexistent
 moinmoin:*:192:192:MoinMoin User:/nonexistent:/sbin/nologin
 ldap:*:389:389:OpenLDAP Server:/nonexistent:/sbin/nologin
 drweb:*:426:426:Dr.Web Mail Scanner:/nonexistent:/sbin/nologin
 qtss:*:554:554:Darwin Streaming Server:/nonexistent:/sbin/nologin
 ircdru:*:555:555:Russian hybrid IRC server:/nonexistent:/bin/sh
 bacula:*:910:910:Bacula Daemon:/var/db/bacula:/sbin/nologin

   Vot tekuschij perechen' zarezervirovannyh GID.

 bind:*:53:
 cyrus:*:60:
 proxy:*:62:
 authpf:*:63:
 uucp:*:66:
 dialer:*:68:
 network:*:69:
 pgsql:*:70:
 www:*:80:
 qnofiles:*:81:
 qmail:*:82:
 mailman:*:91:
 postfix:*:125:
 maildrop:*:126:
 rbldns:*:153:
 moinmoin:*:192:
 qtss:*:554:
 ircdru:*:555:

   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.

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

16.13. 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}.

   Esli vy obnaruzhite, chto dlya vypolneniya chego-to prihoditsya
   pisat' mnogo novogo koda, to, pozhalujsta, prosmotrite fajl
   bsd.port.mk na predmet togo, ne soderzhit li on realizaciyu imenno
   vashej problemy. Hotya ego trudno chitat', imeetsya mnogo problem,
   vyglyadyaschih slozhnymi, dlya kotoryh fajl bsd.port.mk uzhe
   soderzhit bystroe reshenie.

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

16.14. Rabota kak s CC, tak i CXX

   Port dolzhen prinimat' vo vnimanie kak peremennuyu CC, tak i CXX.
   Pod `etim my podrazumevaem, chto port ni v koem sluchae ne dolzhen
   ustanavlivat' znacheniya `etih peremennyh, pereopredelyaya
   imeyuschiesya znacheniya; vmesto `etogo ot dolzhen dobavlyat' te
   znacheniya, kotorye nuzhny, k imeyuschimsya. `Eto nuzhno dlya
   togo, chtoby parametry postroeniya, otnosyaschiesya ko vsem
   portam, mogut byt' zadany global'no.

   Esli porty ne prinimayut vo vnimanie znacheniya `etih peremennyh,
   pozhalujsta, dobav'te stroku NO_PACKAGE=ignores either cc or cxx v
   fajl Makefile.

   Dalee sleduet primer fajla Makefile, ispol'zuyuschego kak
   peremennuyu CC, tak i CXX. Obratite vnimanie na ispol'zovanie
   simvolov ?=:

 CC ?= gcc

 CXX ?= g++

   Vot primer, v kotorom ne prinimayutsya vo vnimanie ni peremennaya
   CC, ni CXX:

 CC = gcc

 CXX = g++

   Obe peremennye CC i CFLAGS mogut byt' opredeleny v sistemah
   FreeBSD v fajle /etc/make.conf. V pervom primere zadaiotsya
   znachenie, esli ono ranee ne bylo opredeleno v /etc/make.conf,
   chto sohranyaet lyubye opredeleniya, dannye na urovne sistemy v
   celom. Vtoroj primer pereopredelyaet vsio, chto bylo zadano ranee.

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

16.15. Ispol'zovanie CFLAGS

   Port dolzhen prinimat' vo vnimanie peremennuyu CFLAGS. Pod `etim
   my podrazumevaem, chto port ni v koem sluchae ne dolzhen
   ustanavlivat' znacheniya `etih peremennyh, pereopredelyaya
   imeyuschiesya znacheniya; vmesto `etogo ot dolzhen dobavlyat' te
   znacheniya, kotorye nuzhny, k imeyuschimsya. `Eto nuzhno dlya
   togo, chtoby parametry postroeniya, otnosyaschiesya ko vsem
   portam, mogut byt' zadany global'no.

   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.

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

16.16. 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(1) 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.

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

16.17. Pozhelaniya

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

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

16.18. README.html

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

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

16.19. Pometka porta kak BROKEN, FORBIDDEN ili kak-to eschio

   Rano ili pozdno, nastupaet moment, kogda v nekotorom porte
   poyavlyaetsya uyazvimost' v informacionnoj bezopasnosti, libo on
   perestaiot rabotat' i neobhodimy mnogie chasy na tschatel'noe
   ispravlenie `etogo polozheniya, libo on voobsche ustarevaet, no po
   toj ili inoj prichine dolzhen ostavat'sya v dereve (i dolzhen byt'
   ispravlen, pravil'no?). Dlya pometki porta kak nerabotosposobnogo
   imeyutsya tri make-peremennye, kotorye mogut byt' ispol'zovany v
   fajle Makefile porta. Znachenie sleduyuschih make-peremennyh budut
   yavlyat'sya prichinami, po kotorym port pomechen kak
   nerabotosposobnyj, i vydayutsya pol'zovatelyam. Pozhalujsta,
   ispol'zujte korrektnye make-peremennye, tak kak kazhdaya
   peremennaya postroeniya imeet absolyutno razlichnyj smysl kak dlya
   pol'zovatelej, tak i dlya avtomatizirovannyh sistem, kotorye
   obrabatyvayut fajly Makefile.

     * BROKEN prednaznachena dlya portov, kotorye ne rabotayut i ne
       dolzhny ustanavlivat'sya pol'zovatelyami. `Eto predotvratit
       pol'zovatelej ot ustanovki porta.

     * TRYBROKEN ispol'zuetsya dlya portov, esli vy pozhelaete
       popytat'sya postroit' port, pomechennyj, kak BROKEN. Porty,
       pomechennye, kak TRYBROKEN takzhe budut stroit'sya Klasterom
       Pointyhat.

     * FORBIDDEN ispol'zuetsya dlya portov, kotorye soderzhat
       uyazvimosti v informacionnoj bezopasnosti ili yavlyayutsya
       potencial'no vrednymi v plane obespecheniya informacionnoj
       bezopasnosti sistemy FreeBSD pri ustanovke dannogo porta
       (naprimer: zavedomo nebezopasnaya programma ili programma,
       kotoraya predostavlyaet legko vzlamyvaemye servisy). Porty
       dolzhny pomechat'sya kak FORBIDDEN, kak tol'ko v konkretnom
       programmnom obespechenii obnaruzhilas' uyazvimost', no
       obnovlenie vypuscheno ne bylo. V ideal'nom sluchae porty
       dolzhny obnovlyat'sya maksimal'no bystro posle obnaruzheniya
       uyazvimosti, chtoby umen'shit' chislo uyazvimyh hostov FreeBSD
       (nam nravitsya imet' reputaciyu bezopasnoj sistemy), odnako
       inogda sluchaetsya znachitel'nyj vremennoj razryv mezhdu
       obnaruzheniem uyazvimosti i vyhodom obnovlionnogo reliza
       uyazvimogo programmnogo obespecheniya. Ne pomechajte port kak
       FORBIDDEN, esli prichina ne vyzvana soobrazheniyami
       informacionnoj bezopasnosti.

     * IGNORE prednaznachena dlya portov, kotorye po toj ili inoj
       prichine ne dolzhny stroit'sya. Pol'zovateli i klaster
       Pointyhat ne budut, ni pri kakih usloviyah, stroit' porty,
       pomechennye kak IGNORE. Esli vy somnevaetes', ispol'zujte
       IGNORE, esli hotite izbezhat' postroeniya porta.

   Imejte v vidu, chto `eti peremennye ispol'zuyutsya kak poslednee
   sredstvo pri nevozmozhnosti obnovit' port. Postoyanno
   nerabotosposobnye porty dolzhny polnost'yu udalyat'sya iz dereva.

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

16.20. Neobhodimye predostorozhnosti

   Inogda byvaet neobhodimo obhodit' oshibki v programmnom
   obespechenii, kotorym komplektovalis' predyduschie versii FreeBSD.

     * Nekotorye versii make(1) (po krajnej mere v versiyah 4.8 i
       5.0) nepravil'no otrabatyvali sravnenie na osnove OSVERSION.
       `Eto chasto privodilo k oshibkam pri vypolnenii komandy make
       describe (i, v svoyu ochered', v celom pri vypolnenii make
       index dlya portov). `Eta situaciya obhoditsya okruzheniem
       uslovnoj operacii sravneniya probelami, naprimer:

 if ( ${OSVERSION} > 500023 )

       Uchtite, chto pri testovoj ustanovke porta na 4.9 ili 5.2 `eta
       problemy ne obnaruzhivaetsya.

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

16.21. Raznoe

   Fajly pkg-descr i pkg-plist dolzhny proveryat'sya dvazhdy. Esli vy
   peresmatrivaete port i dumaete, chto ego mozhno opisat' 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!

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

16.22. 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! :-)

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

                      Glava 17. 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 kommita 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 kommita), 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
 COMMENT=       A DVI Previewer for the X Window System

 [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", generiruemogo 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>
    

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

           Glava 18. Avtomaticheskoe sozdanie spiska upakovki

   Pervym delom ubedites', chto vash port prakticheski polnost'yu
   zavershion, ostalos' tol'ko sozdat' pkg-plist.

   Zatem vremennoe derevo katalogov, kuda mozhet byt' ustanovlen vash
   port, i ustanovite vse zavisimosti. port-type dolzhen byt' local
   dlya ne-X portov, x11-4 ili x11 dlya portov, kotorye
   ustanavlivayutsya v ierarhiyu katalogov XFree86 4 ili bolee
   rannego reliza XFree86, sootvetstvenno.

 ># mkdir /var/tmp/port-name
 # mtree -U -f /etc/mtree/BSD.port-type.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) | sort > OLD-DIRS

   Sozdajte pustoj fajl pkg-plist:

 # touch pkg-plist

   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) | sort > pkg-plist

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

 # (cd /var/tmp/port-name && find -d * -type d) | sort | comm -13 OLD-DIRS - | sort -r | 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.

   Kak al'ternativu, mozhno ispol'zovat' skript plist iz
   /usr/ports/Tools/scripts/ dlya avtomaticheskogo postroeniya spiska
   upakovki.

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

                        Glava 19. Aktualizaciya

   Kollekciya Portov FreeBSD postoyanno izmenyaetsya. Zdes'
   nahoditsya nekotoraya informaciya o tom, kak podderzhivat' eio v
   aktual'nom sostoyanii.

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

19.1. FreshPorts

   Samym prostym sposobom otslezhivat' uzhe proizoshedshie
   obnovleniya yavlyaetsya podpiska na FreshPorts. Dlya monitoringa
   vy mozhete vybrat' neskol'ko portov. Mejntejneram nastoyatel'no
   rekomenduetsya podpisat'sya zdes', potomu chto oni budut poluchat'
   uvedomleniya ne tol'ko o sobstvennyh izmeneniyah, no i ob
   izmeneniyah, sdelannyh lyubym drugim kommitterom FreeBSD. (`Eto
   chasto neobhodimo dlya sinhronizacii s izmeneniyami na bolee
   nizkom tehnologicheskom urovne--hotya bolee korrektnym bylo by
   poluchenie preduprezhdenij ot teh, kto vnosit podobnye izmeneniya,
   inogda `etot `etap propuskaetsya ili on prosto nepraktichen. Krome
   togo, v nekotoryh sluchayah izmeneniya po svoej prirode ves'ma
   neznachitel'ny. My polagaem, chto lyuboj razrabotchik v takih
   situaciyah budet rukovodstvovat'sya zdravym smyslom).

   Esli vy hotite ispol'zovat' FreshPorts, to vam nuzhna tol'ko
   uchiotnaya zapis'. Esli registracionnyj adres vashej `elektronnoj
   pochty budet imet' vid @FreeBSD.org, to sprava na Web-stranicah vy
   uvidite dopolnitel'nuyu ssylku. Dlya teh iz vas, kto uzhe poluchil
   uchiotnuyu zapis' FreshPorts, no ne ispol'zoval sobstvennyj adres
   `elektronnoj pochty @FreeBSD.org, dostatochno smenit' adres na
   @FreeBSD.org, podpisat'sya, a zatem smenit' ego obratno.

   Vo FreshPorts imeetsya takzhe funkciya proverki pravil'nosti,
   kotoraya avtomaticheski proveryaet kazhdoe izmenenie, vnesionnoe v
   derevo portov FreeBSD. Esli vy podpishetes' na `etu uslugu, to
   budete opoveschat'sya obo vseh oshibkah, obnaruzhennyh FreshPorts
   pri proverke vnesionnyh vami izmenenij.

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

19.2. Web-interfejs k hranilischu ishodnyh tekstov

   Fajly v hranilische ishodnyh tekstov mozhno prosmatrivat' pri
   pomoschi Web-interfejsa. Izmeneniya, kotorye kasayutsya v celom
   vsej sistemy portov, teper' dokumentiruyutsya v fajle CHANGES.
   Izmeneniya, kasayuschiesya otdel'nyh portov, otrazhayutsya teper'
   v fajle UPDATING. Odnako odnoznachnyj otvet na lyuboj vopros
   mozhno najti, tol'ko prochitav ishodnyh kod bsd.port.mk i
   svyazannyh s nim fajlov.

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

19.3. Spisok rassylki FreeBSD, posvyaschionnyj portam

   Esli vy podderzhivaete porty, to dolzhny sledit' za Spisok
   rassylki, posvyaschionnyj Portam FreeBSD. O vazhnyh izmeneniyah,
   otrazhayuschihsya na rabote portov, budet soobschat'sya zdes', a
   zatem oni perenosyatsya v CHANGES.

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

19.4. Klaster postroeniya portov FreeBSD

   Odnoj iz naimenee izvestnyh sil'nyh storon FreeBSD yavlyaetsya tot
   fakt, chto dlya nepreryvnogo postroeniya Kollekcii Portov dlya
   kazhdogo iz osnovnyh relizov OS dlya kazhdoj arhitektury urovnya
   podderzhki Tier-1 vydelen celyj klaster mashin. Vy mozhete uvidet'
   rezul'taty `etih postroenij v protokolah postroeniya paketov i
   obnaruzhennyh oshibok.

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

19.5. Proverka distributivnyh fajlov portov FreeBSD

   Klaster postroeniya vydelen dlya vypolneniya samogo poslednego
   reliza kazhdogo iz portov, distributivnyj fajl kotoryh uzhe byl
   sgruzhen. Odnako iz-za postoyannyh izmenenij v Internet,
   distributivnye fajly bystro ischezayut. Sredstvo inspektirovaniya
   distributivnyh fajlov FreeBSD pytaetsya oprosit' kazhdyj iz
   sajtov, dostupnyj dlya sgruzki kazhdogo iz portov dlya
   opredeleniya togo, dostupny li eschio distributivnye fajly.
   Mejntejnery dolzhny periodicheski prosmatrivat' `etot protokol, i
   ne tol'ko dlya uskoreniya processa postroeniya pol'zovatelem, no i
   dlya izbezhaniya traty propusknoj sposobnosti sajtov, na kotoryh
   vse `eti distributivnye fajly razmeschayutsya na dobrovol'noj
   osnove.

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

19.6. Sistema monitoringa portov FreeBSD

   Drugim poleznym resursom yavlyaetsya Sistema monitoringa portov
   FreeBSD (izvestnaya takzhe kak portsmon). Sistema predstavlyaet
   soboj bazu dannyh, obrabatyvayuschuyu informaciyu iz neskol'kih
   istochnikov i pozvolyayuschuyu prosmatrivat' ih pri pomoschi
   Web-interfejsa. Na dannyj moment zadejstvovany baza soobschenij ob
   oshibkah (PR), protokoly oshibok klastera postroeniya i otdel'nye
   fajly iz kollekcii portov. V buduschem v `etot spisok budet
   dobavlena sistema proverki distributivnyh fajlov i drugie resursy.

   Dlya nachala vy mozhete prosmotret' vsyu informaciyu o nekotorom
   porte pri pomoschi sredstva Prosmotra otdel'nyh portov.

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

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