                    Rukovodstvo FreeBSD po sozdaniyu portov

  The FreeBSD Documentation Project

   Izdanie: 43126

   Avtorskie prava (c) 2000-2013 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.

   2013-11-07 gabor.
   [ Po razdelam / Odnim fajlom ]

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

   Soderzhanie

   1. Vvedenie

   2. Kak samomu sdelat' novyj port

   3. Bystroe portirovanie

                3.1. Sozdanie fajla Makefile

                3.2. Sozdanie informacionnyh fajlov

                3.3. Sozdanie fajla s kontrol'noj summoj

                3.4. Testirovanie porta

                3.5. Proverka vashego porta utilitoj portlint

                3.6. Posylka novogo 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.3. Razdelenie po kategoriyam

                5.4. Distributivnye fajly

                5.5. MAINTAINER

                5.6. COMMENT

                5.7. PORTSCOUT

                5.8. Zavisimosti

                5.9. MASTERDIR

                5.10. Stranicy Spravochnika

                5.11. Fajly v formate info

                5.12. Opcii dlya Makefile

                5.13. Zadanie rabochego kataloga

                5.14. Razreshenie konfliktov

                5.15. Ustanovka fajlov

   6. Osobye soglasheniya

                6.1. Dinamicheskie biblioteki

                6.2. Porty s ogranicheniyami na rasprostranenie

                6.3. Mehanizmy postroeniya

                6.4. Ispol'zovanie GNU autotools

                6.5. Ispol'zovanie GNU gettext

                6.6. Ispol'zovanie Perl

                6.7. Ispol'zovanie X11

                6.8. Ispol'zovanie GNOME

                6.9. Ispol'zovanie Qt

                6.10. Ispol'zovanie KDE

                6.11. Ispol'zovanie Java

                6.12. Veb-prilozheniya, Apache i PHP

                6.13. Ispol'zovanie Python

                6.14. Ispol'zovanie Tcl/Tk

                6.15. Ispol'zovanie Emacs

                6.16. Ispol'zovanie Ruby

                6.17. Ispol'zovanie SDL

                6.18. Ispol'zovanie wxWidgets

                6.19. Ispol'zovanie Lua

                6.20. Ispol'zovanie Xfce

                6.21. Ispol'zovanie Mozilla

                6.22. Ispol'zovanie baz dannyh

                6.23. Zapusk i ostanovka sluzhb (scenarii rc)

                6.24. Dobavlenie pol'zovatelej i grupp

                6.25. Porty, trebuyuschie nalichiya ishodnyh tekstov yadra

   7. Prodvinutye praktiki pkg-plist

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

                7.2. Pustye katalogi

                7.3. Konfiguracionnye fajly

                7.4. Dinamicheskij ili staticheskij spisok upakovki

                7.5. Avtomaticheskoe sozdanie spiska upakovki

   8. Fajly pkg-*

                8.1. pkg-message

                8.2. pkg-install

                8.3. pkg-deinstall

                8.4. pkg-req

                8.5. Izmenenie imion fajlov pkg-*

                8.6. Ispol'zovanie SUB_FILES i SUB_LIST

   9. Testirovanie vashego porta

                9.1. Zapusk make describe

                9.2. Portlint

                9.3. Port Tools

                9.4. PREFIX i DESTDIR

                9.5. Tinderbox

   10. Obnovlenie otdel'nogo porta

                10.1. Ispol'zovanie SVN dlya sozdaniya patchej

                10.2. Fajly UPDATING i MOVED

   11. Bezopasnost' portov

                11.1. Pochemu bezopasnost' tak vazhna

                11.2. Ispravlenie uyazvimostej bezopasnosti

                11.3. Obespechenie soobschestva informaciej

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

                12.1. Vvedenie

                12.2. WRKDIR

                12.3. WRKDIRPREFIX

                12.4. Razlichenie operacionnyh sistem i versij OS

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

                12.6. Ispol'zovanie vyrazheniya exec v scenariyah obiortkah

                12.7. Postupajte razumno

                12.8. Rabota kak s CC, tak i CXX

                12.9. Ispol'zovanie CFLAGS

                12.10. Biblioteki potokov

                12.11. Pozhelaniya

                12.12. README.html

                12.13. Pometka neustanavlivaemogo porta kak BROKEN, FORBIDDEN
                ili IGNORE

                12.14. Pometka porta na udalenie s DEPRECATED ili
                EXPIRATION_DATE

                12.15. Izbegajte ispol'zovaniya konstrukcii .error

                12.16. Ispol'zovanie sysctl

                12.17. Menyayuschiesya distributivnye fajly

                12.18. Izbeganie linuksizmov

                12.19. Raznoe

   13. Primernyj Makefile

   14. Aktualizaciya

                14.1. FreshPorts

                14.2. Web-interfejs k hranilischu ishodnyh tekstov

                14.3. Spisok rassylki FreeBSD, posvyaschionnyj portam

                14.4. Klaster postroeniya portov FreeBSD na
                pointyhat.FreeBSD.org

                14.5. Portscout: skaner distributivnyh fajlov portov FreeBSD

                14.6. Sistema monitoringa portov FreeBSD

   15. Prilozheniya

                15.1. Znacheniya USES

                15.2. Znacheniya __FreeBSD_version

   Spisok tablic

   5.1. Populyarnye magicheskie makrosy dlya MASTER_SITES

   5.2. Peremennye USE_*

   5.3. Osnovnye peremennye WITH_* i WITHOUT_*

   6.1. Peremennye dlya portov, ispol'zuyuschih gmake

   6.2. Peremennye dlya portov, ispol'zuyuschih configure

   6.3. Peremennye dlya portov, ispol'zuyuschih cmake

   6.4. Peremennye dlya portov, ispol'zuyuschih scons

   6.5. Peremennye dlya portov, ispol'zuyuschih Perl

   6.6. Peremennye dlya portov, ispol'zuyuschih X

   6.7. Peremennye dlya portov, ispol'zuyuschih Qt

   6.8. Dopolnitel'nye peremennye dlya portov, ispol'zuyuschih Qt 4.x

   6.9. Dostupnye bibliotechnye komponenty Qt 4

   6.10. Dostupnye komponenty instrumentov Qt 4

   6.11. Dostupnye komponenty plaginov Qt 4

   6.12. Dostupnye komponenty KDE 4

   6.13. Peremennye, kotorye kotorye mogut zadavat'sya portami,
   ispol'zuyuschimi Java

   6.14. Peremennye, dostupnye v portah, ispol'zuyuschih Java

   6.15. Konstanty, opredelionnye dlya portov, ispol'zuyuschih Java

   6.16. Peremennye dlya portov, ispol'zuyuschih Apache

   6.17. Ispol'zuemye peremennye pri portirovanii modulej Apache

   6.18. Peremennye dlya portov, ispol'zuyuschih PHP

   6.19. Peremennye dlya portov, kotorye ispol'zuyut Python

   6.20. Naibolee vostrebovannye peremennye dlya portov, kotorye ispol'zuyut
   Tcl/Tk

   6.21. Poleznye peremennye dlya portov, ispol'zuyuschih Ruby

   6.22. Otobrannye peremennye tol'ko dlya chteniya dlya portov,
   ispol'zuyuschih Ruby

   6.23. Peremennye dlya vybora versii wxWidgets

   6.24. Dostupnye versii wxWidgets

   6.25. Opredelenie versii dlya wxWidgets

   6.26. Peremennye dlya vybora predpochitaemyh versij wxWidgets

   6.27. Dostupnye komponenty wxWidgets

   6.28. Dostupnye tipy zavisimosti wxWidgets

   6.29. Tipy zavisimosti wxWidgets, ispol'zuemye po umolchaniyu

   6.30. Peremennye dlya vybora versii wxWidgets s Unicode

   6.31. Peremennye, opredelennye dlya portov, ispol'zuyuschih wxWidgets

   6.32. Dopustimye znacheniya WX_CONF_ARGS

   6.33. Peremennye dlya vybora versii Lua

   6.34. Dostupnye versii Lua

   6.35. Opredelenie versii Lua

   6.36. Peremennye dlya vybora predpochitaemyh versij Lua

   6.37. Dostupnye komponenty Lua

   6.38. Dostupnye tipy zavisimosti Lua

   6.39. Tipy zavisimosti Lua, ispol'zuemye po umolchaniyu

   6.40. Peremennye, opredelennye dlya portov, ispol'zuyuschih Lua

   6.41. Peremennye dlya portov, ispol'zuyuschih Mozilla

   6.42. Peremennye dlya portov, ispol'zuyuschih bazy dannyh

   10.1. Prefiksy fajlov dlya SVN update

   15.1. Znacheniya USES

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

   5.7. Ispol'zovanie ALWAYS_KEEP_DISTFILES.

   5.8. Nekorrektnoe ob"yavlenie neobyazatel'noj zavisimosti

   5.9. Korrektnoe ob"yavlenie neobyazatel'noj zavisimosti

   5.10. Prostoe ispol'zovanie OPTIONS

   5.11. Proverka nezadannyh znachenij OPTIONS

   5.12. Primer real'nogo ispol'zovaniya OPTIONS

   5.13. Nepravil'noe upravlenie opciej

   5.14. Pravil'noe upravlenie opciej

   6.1. Primer ispol'zovaniya USES= cmake

   6.2. Primer zavisimosti Perl

   6.3. Primer dlya USE_XORG

   6.4. Ispol'zovanie peremennyh X11 v porte

   6.5. Vybor komponentov Qt 4

   6.6. Primer USE_KDE4

   6.7. Primer Makefile dlya klassov PEAR

   6.8. Vybor komponentov wxWidgets

   6.9. Obnaruzhenie ustanovlennyh versij i komponentov wxWidgets

   6.10. Ispol'zovanie peremennyh wxWidgets v komandah

   6.11. Vybor versii Lua

   6.12. Vybor komponentov Lua

   6.13. Obnaruzhenie ustanovlennyh versij i komponentov Lua

   6.14. Ukazanie dlya porta, gde iskat' Lua

   6.15. Ispol'zovanie peremennyh Lua v komandah

   12.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' novyj 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 Glava 10, Obnovlenie otdel'nogo porta.

   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'
   hakingom 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.

  Primechanie:

   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.

   Ischete, s chego by nachat' poprosche? Posmotrite na perechen'
   zaproshennyh portov, est' li tam takie, nad kotorymi vy mozhete rabotat'.

                         Glava 3. Bystroe portirovanie

   Soderzhanie

   3.1. Sozdanie fajla Makefile

   3.2. Sozdanie informacionnyh fajlov

   3.3. Sozdanie fajla s kontrol'noj summoj

   3.4. Testirovanie porta

   3.5. Proverka vashego porta utilitoj portlint

   3.6. Posylka novogo porta

   V `etom razdele opisano, kak sozdat' novyj 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.

  Primechanie:

   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:

 # $FreeBSD$

 PORTNAME=      oneko
 PORTVERSION=   1.1b
 CATEGORIES=    games
 MASTER_SITES=  ftp://ftp.cs.columbia.edu/archives/X11R5/contrib/

 MAINTAINER=    asami@FreeBSD.org
 COMMENT=       Cat chasing a mouse all over the screen

 MAN1=          oneko.1
 MANCOMPRESSED= yes

 .include <bsd.port.mk>

  Primechanie:

   V nekotoryh sluchayah v zagolovke Makefile suschestvuyuschego porta mogut
   soderzhat'sya dopolnitel'nye stroki, takie kak nazvanie porta i data ego
   sozdaniya. `Eta dopolnitel'naya informaciya byla ob"yavlena ustarevshej i
   nahoditsya v processe udaleniya.

   Posmotrim, smozhete li vy ego ponyat'. Ne obraschajte vnimanie na
   soderzhimoe strochki $FreeBSD$, ona budet zapolnena avtomaticheski
   sistemoj SVN, 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.

  Primechanie:

   `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, poskol'ku `eto vyglyadit v osobennosti
   ploho s monoshirinnymi shriftami).

   Horosho sostavlennyj pkg-descr opisyvaet port dostatochno polno, chtoby
   pol'zovatelyu ne prihodilos' sveryat'sya s dokumentaciej ili poseschat'
   vebsajt dlya ponimaniya togo, chto delaet dannoe programmnoe obespechenie,
   chem ono mozhet byt' polezno ili kakie horoshie funkcii u nego imeyutsya.
   Upominanie pro opredelionnye trebovaniya, takie kak ispol'zuemyj
   graficheskij instrumentarij, tyazhiolye zavisimosti, okruzhenie dlya
   zapuska ili ispol'zuemyj yazyk programmirovaniya pomogut pol'zovatelyam
   opredelit'sya, budet li `etot port dlya nih rabotat'.

   Vklyuchite syuda URL oficial'noj domashnej stranicy Internet. Pered odnim
   iz sajtov (vyberite osnovnoj) dobav'te WWW: (s posleduyuschim edinichnym
   probelom) dlya togo, chtoby vspomogatel'nye utility rabotali pravil'no.
   Esli URI yavlyaetsya kornem sajta ili katalogom, to znachenie dolzhno byt'
   dopolneno kosoj chertoj.

  Primechanie:

   Esli ukazannaya dlya porta veb-stranica ne dostupna, popytajtes' sperva
   poiskat', byl li oficial'nyj sajt peremeschion, pereimenovan ili
   razmeschion v drugom meste.

   Sleduyuschij primer pokazyvaet, kak dolzhen vyglyadet' vash pkg-descr:

 This is a port of oneko, in which a cat chases a poor mouse all over
 the screen.
  :
 (etc.)

 WWW: http://www.oneko.org/

  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). Esli vy
   ispol'zuete peremennye MANn (a vy dolzhny `eto delat'), to ukazyvat'
   stranicy spravochnika zdes' ne nuzhno. Esli port vo vremya ustanovki
   sozdaet katalogi, ubedites', chto dobavili stroku @dirrm dlya udaleniya
   katalogov pri udalenii paketa.

   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.

  Primechanie:

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

  Primechanie:

   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.

  Primechanie:

   Neskol'ko portov mogut sovmestno ispol'zovat' obschij katalog. V `etom
   sluchae PLIST_DIRS sleduet zamenit' na PLIST_DIRSTRY, tak chtoby katalog
   udalyalsya tol'ko esli on pust, a inache ignorirovalsya. Ispol'zovanie
   PLIST_DIRS i PLIST_DIRSTRY analogichno @dirrm i @dirrmtry v pkg-plist,
   opisanie kotoryh vhodit v Razdel 7.2.1, <<Ochistka pustyh 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.

   Esli u izvlekaemogo fajla regulyarno menyaetsya kontrol'naya summa i vy ne
   somnevaetes' v nadezhnosti istochnika (t.e. on poluchen iz CD
   proizvoditelya, libo ezhednevno obnovlyaetsya dokumentaciya), to vy
   dolzhny ukazat' `eti fajly v peremennoj IGNOREFILES. Togda kontrol'naya
   summa pri vypolnenii make makesum dlya `etogo fajla sozdavat'sya ne budet,
   a vmesto `etogo dlya nego budet ustanovleno znachenie IGNORE.

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

   Procedura 3.1. 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

    8. make readme

   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.

   Naibolee osnovatel'nym sposobom avtomatizacii `etih shagov yavlyaetsya
   ustanovka ports tinderbox. `Eto obespechivaet jails, v kotoryh vy mozhete
   proveryat' vse vysheukazannye shagi bez izmeneniya sostoyaniya v vashej
   osnovnoj sisteme. Dlya polucheniya dopolnitel'noj informacii smotrite
   ports/ports-mgmt/tinderbox.

3.5. Proverka vashego porta utilitoj portlint

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

3.6. Posylka novogo porta

   Pered posylkoj novogo porta 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
   (predpolozhim, chto vash port zovut oneko) perejdite v katalog vyshe, tam,
   gde nahoditsya katalog oneko, i naberite sleduyuschee: shar `find oneko` >
   oneko.shar

   Vklyuchite vash fajl oneko.shar 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)). 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 (naprimer,
   soderzhimoe COMMENT v sokraschennom vide) i sam fajl v vide arhiva shar,
   pomestiv ego v razdel <<Fix>>.

  Primechanie:

   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. 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; dlya novyh portov ispol'zujte shar(1), no ne diff(1).

   Posle togo kak vy poslali port, pozhalujsta, poterpite. Inogda vklyuchenie
   novogo porta vo FreeBSD mozhet zanyat' do neskol'kih mesyacev, a inogda
   vsego neskol'ko dnej. Zdes' vy mozhete najti spisok PR dlya 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 budet dobavleno v spisok
   Dopolnitel'nyh kontributorov proekta FreeBSD i drugie fajly.

                        Glava 4. Medlennoe portirovanie

   Soderzhanie

   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

   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.

    5. Vypolnyaetsya cel' build. Ona otvechaet za perehod v sobstvennyj
       rabochij katalog porta (WRKSRC) i ego postroenie. Esli zadana
       peremennaya USES= 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.

  Primechanie:

   <<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! Krome togo, cel'
   post-deinstall yavlyaetsya nedejstvitel'noj i ne vypolnyaetsya
   infrastrukturoj portov.

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

  Primechanie:

   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), a rezul'tat raboty `etoj
   programmy mozhet byt' v dal'nejshem peredan programme patch(1). Kazhdyj
   patch, kotoryj vy sobiraetes' primenit', dolzhen byt' sohranen v fajl s
   imenem patch-*, gde * oboznachaet put' k fajlu, k kotoromu primenyaetsya
   patch, takoj kak patch-Imakefile ili patch-src-config.h. `Eti fajly
   dolzhny nahodit'sya v kataloge PATCHDIR (kak pravilo, `eto files/), otkuda
   oni budut vzyaty avtomaticheski. Vse patchi obyazany 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-file i patch-file2, oba menyayuschih fajl WRKSRC/foobar.c).
   Obratite vnimanie, chto esli put' k izmenyaemomu fajlu soderzhit simvol
   podcherkivaniya (_), to patch dolzhen soderzhat' v svoem imeni dva
   podcherkivaniya vmesto odnogo. Naprimer, dlya primeneniya patcha na fajl s
   imenem src/freeglut_joystick.c sootvetstvuyuschij patch sleduet nazvat'
   patch-src-freeglut__joystick.c.

   Pozhalujsta, ispol'zujte dlya imenovaniya vashih patchej tol'ko simvoly
   [-+._a-zA-Z0-9]. Ne ispol'zujte lyubye drugie simvoly, krome `etih. Ne
   nazyvajte vashi patchi kak patch-aa ili patch-ab i tak dalee, vsegda
   ssylajtes' na put' i nazvanie fajla v nazvaniyah patchej.

   Ne pomeschajte stroki RCS v patchi. SVN 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_AUTOTOOLS=autoconf:261 i vklyuchite diff-fajl dlya configure.in.

   Takzhe postarajtes' minimizirovat' v vashih patchah ob"em nefunkcional'nyh
   izmenenij s pustymi simvolami. V mire Otkrytogo Ishodnogo Koda yavlyaetsya
   rasprostranennym sovmestnoe ispol'zovanie proektami bol'shih ob"emov
   kodovoj bazy, no s razlichnymi stilyami i pravilami otstupov. Esli vy
   berete rabotayuschuyu funkcional'nuyu chast' iz odnogo proekta dlya
   ispravleniya pohozhej oblasti v drugom, to bud'te akkuratny, pozhalujsta:
   poluchaemyj odnostrochnyj patch mozhet byt' polon nefunkcional'nyh
   izmenenij. `Eto ne tol'ko uvelichivaet razmer repozitoriya SVN, no takzhe
   uslozhnyaet poisk togo, chto konkretno vyzvalo problemu i chto vy voobsche
   izmenili.

   Esli vam nuzhno udalit' fajl, to vy mozhete sdelat' `eto pri vypolnenii
   celi post-extract vmesto togo, chtoby oformlyat' `eto kak chast' patcha.

   Prostye peremescheniya mogut byt' vypolneny neposredstvenno iz Makefile
   porta s ispol'zovaniem sed(1) v rezhime in-place. `Eto ochen' udobno,
   kogda vam nuzhno primenit' patch na znachenie peremennoj. Primer:

 post-patch:
         @${REINPLACE_CMD} -e 's|for Linux|for FreeBSD|g' ${WRKSRC}/README

   Dovol'no chasto byvayut situacii, kogda portiruemoe programmnoe
   obespechenie, osobenno esli osnovnoj platformoj razrabotki yavlyaetsya
   Windows(R), ispol'zuet konvenciyu CR/LF dlya bol'shinstva svoih ishodnyh
   fajlov. `Eto mozhet byt' prichinoj problem s dal'nejshej upakovkoj,
   preduprezhdeniyami kompilyatora, vypolneniem skriptov (/bin/sh^M not
   found) i tak dalee. Dlya bystroj preobrazovaniya vseh fajlov iz CR/LF
   prosto v LF dobav'te USE_DOS2UNIX=yes v Makefile porta. Mozhet byt' ukazan
   perechen' preobrazuemyh fajlov:

 USE_DOS2UNIX=    util.c util.h

   Esli vy hotite preobrazovat' gruppu fajlov v raznyh podkatalogah, to dlya
   `etogo mozhno ispol'zovat' DOS2UNIX_REGEX. Ego parametrom yavlyaetsya
   regulyarnoe vyrazhenie, sovmestimoe s find. Podrobnee o formate v
   re_format(7). `Eta opciya ispol'zuetsya dlya preobrazovaniya vseh fajlov
   zadannogo rasshireniya, k primeru vseh ishodnyh fajlov, ne zatragivaya
   dvoichnye fajly:

 USE_DOS2UNIX=    yes
 DOS2UNIX_REGEX=  .*\.(c|cpp|h)

   Esli vy hotite sozdat' patch na osnove suschestvuyuschego fajla, to vy
   mozhete ego skopirovat' s rasshireniem .orig, a zatem izmenit' ishodnyj.
   Cel'makepatch zapishet sootvetstvuyuschij fajl s patchem v katalog files
   dannogo porta.

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

   Soderzhanie

   5.1. Original'nye ishodnyj kod

   5.2. Imenovanie

   5.3. Razdelenie po kategoriyam

   5.4. Distributivnye fajly

   5.5. MAINTAINER

   5.6. COMMENT

   5.7. PORTSCOUT

   5.8. Zavisimosti

   5.9. MASTERDIR

   5.10. Stranicy Spravochnika

   5.11. Fajly v formate info

   5.12. Opcii dlya Makefile

   5.13. Zadanie rabochego kataloga

   5.14. Razreshenie konfliktov

   5.15. Ustanovka fajlov

   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 DISTVERSION, DISTNAME,
   EXTRACT_CMD, EXTRACT_BEFORE_ARGS, EXTRACT_AFTER_ARGS, EXTRACT_SUFX ili
   DISTFILES v zavisimosti ot togo, naskol'ko neobychen format
   distributivnogo fajla.

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

  Podskazka:

   Rezul'tat sravneniya nomera versii ne vsegda ocheviden. Dlya vypolneniya
   sravneniya dvuh strok s nomerom versii mozhno ispol'zovat' pkg_version(1).
   `Ekvivalentom v pkgng yavlyaetsya pkg version -t. Naprimer:

 % pkg_version -t 0.031 0.29
 >

   Dlya pol'zovatelej pkgng:

 % pkg version -t 0.031 0.29
 >

   Stroka > v vyvode komandy oznachaet, chto versiya 0.031 schitaetsya vyshe,
   chem versiya 0.29, chto mozhet byt' ne ochevidno dlya togo, kto vypolnyaet
   portirovanie.

   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.

   Obnaruzhena bresh' v bezopasnosti, ispravlenie kotoroj 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

  Primechanie:

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

   LATEST_LINK zadaet v processe postroeniya paketa korotkoe imya ssylki,
   kotorye mogut ispol'zovat'sya pri vypolnenii komandy pkg_add -r. `Eto
   pozvolyaet, k primeru, ustanovit' poslednyuyu versiyu perl, ispol'zuya
   pkg_add -r perl, bez znaniya tochnogo nomera versii. Takoe imya dolzhno
   byt' unikal'nym i ochevidnym dlya pol'zovatelej.

   V nekotoryh sluchayah v kollekcii portov mozhet prisutstvovat' neskol'ko
   versij programmy odnovremenno. Obe sistemy, postroeniya indeksov i
   postroeniya paketov, nuzhdayutsya v sposobnosti ih videt' kak raznye,
   nezavisimye porty, hotya vse oni mogut imet' shozhee znachenie dlya
   PORTNAME, PKGNAMEPREFIX i dazhe PKGNAMESUFFIX. V `etih sluchayah dlya vseh
   portov krome <<glavnogo>> sleduet prisvoit' razlichnye znacheniya dlya
   neobyazatel'noj peremennoj LATEST_LINK - chtoby poluchit' primer ee
   ispol'zovaniya, smotrite porty lang/gcc46 i lang/gcc, a takzhe semejstvo
   www/apache*. Pri ustanovke NO_LATEST_LINK ssylki ne sozdayutsya; `eta
   neobyazatel'naya peremennaya mozhet byt' ukazana vo vseh versiyah, krome
   <<glavnoj>>. Obratite vnimanie, kak vybirat' <<glavnuyu>> versiyu -
   <<samuyu populyarnuyu>>, <<samuyu podderzhivaemuyu>>, <<s naimen'shimi
   izmeneniyami>> i tak dalee - `eto vyhodit za ramki rekomendacij `etogo
   rukovodstva; my vsego lish' soobschaem vam, kak ukazyvat' versii drugih
   portov posle togo, kak vy vybrali <<glavnyj>>.

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

    3. Ubedites', chto imya porta i versiya chetko otdeleny i razmeschayutsya
       v peremennyh PORTNAME i PORTVERSION. Edinstvennaya prichina, po
       kotoroj PORTNAME soderzhit versionnuyu chast', `eto esli poluchennyj
       distributiv sam nazvan takim obrazom, kak `eto sdelano dlya portov
       textproc/libxml2 ili japanese/kinput2-freewnn. V protivnom sluchae
       PORTNAME ne dolzhen soderzhat' nikakoj informacii, ukazyvayuschej na
       versiyu. To, chto nekotorye porty imeyut odinakovyj PORTNAME,
       yavlyaetsya vpolne normal'nym, kak dlya portov www/apache*; v `etom
       sluchae razlichnye versii (i razlichnye zapisi v indekse)
       otlichayutsya po znacheniyam PKGNAMEPREFIX, PKGNAMESUFFIX i
       LATEST_LINK.

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

    5. 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 0.0.yyyy.mm.dd, no ne dd.mm.yyyy ili ne sovmestimyj
       s problemoj Y2K yy.mm.dd. Dobavlenie k versii prefiksa 0.0.
       yavlyaetsya vazhnym, v sluchae esli vypuschen reliz s prisvoeniem
       nastoyaschej versii, kotoraya v chislovom predstavlenii, konechno zhe,
       budet nizhe, chem yyyy.

   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'       
                                                                 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
   (0.0.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 tekuschij
   spisok 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 nizhe dlya polucheniya podrobnoj informacii o tom, kak
   pravil'no vybrat' kategorii.

  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.

  Primechanie:

   Dlya nevirtual'nyh kategorij imeetsya odnostrochnoe opisanie v COMMENT v
   Makefile sootvetstvuyuschego podkataloga.

    Kategoriya            Opisanie                     Primechaniya           
                 Porty dlya pomoschi                                          
   accessibility pol'zovatelyam s             
                 ogranichennymi              
                 vozmozhnostyami.            
   afterstep*    Porty, podderzhivayuschie                                    
                 menedzher okon AfterStep.   
   arabic        Podderzhka arabskogo                                         
                 yazyka.                     
   archivers     Instrumenty dlya raboty s                                    
                 arhivami.                   
   astro         Prilozheniya, svyazannye s                                   
                 astronomiej.                
   audio         Podderzhka raboty so                                         
                 zvukom.                     
   benchmarks    Utility dlya izmereniya                                      
                 proizvoditel'nosti sistemy. 
   biology       Programmnoe obespechenie,                                    
                 svyazannoe s biologiej.     
                 Instrumenty Sistem                                           
   cad           Avtomatizirovannogo          
                 Proektirovaniya.            
   chinese       Podderzhka kitajskogo                                        
                 yazyka.                     
   comms         Kommunikacionnoe            V osnovnom programmy dlya raboty 
                 programmnoe obespechenie.   s posledovatel'nym portom.       
                 Utility dlya                                                 
   converters    preobrazovaniya simvol'nyh   
                 formatov.                   
   databases     Bazy dannyh.                                                 
   deskutils     To, chto bylo na stole do                                    
                 izobreteniya komp'yuterov.  
                                             Ne pomeschajte syuda biblioteki  
                                             prosto potomu chto `eto          
   devel         Utility dlya razrabotki     biblioteki-esli oni podpadayut   
                 programmnogo obespecheniya. pod kakuyu-to druguyu            
                                             kategoriyu, to ih byt' zdes' ne  
                                             dolzhno.                         
   dns           Programmnoe obespechenie                                     
                 dlya raboty s DNS.          
   docs*         Meta-porty dlya                                              
                 dokumentacii FreeBSD.       
                                             Specializirovannye redaktory     
                                             otnosyat k razdelu dlya          
   editors       Redaktory obschego          sootvetstvuyuschih instrumentov  
                 naznacheniya.               (naprimer, redaktor              
                                             matematicheskih formul popadaet  
                                             v kategoriyu math).              
   elisp*        Porty dlya Emacs lisp.                                       
                                             `Emulyatory terminalov syuda ne  
                                             otnosyatsya-te, kotorye          
   emulators     `Emulyatory drugih          razrabotany dlya X, dolzhny byt' 
                 operacionnyh sistem.        v kategorii x11, a tekstovye v   
                                             comms ili misc, v zavisimosti ot 
                                             konkretnogo ih prednaznacheniya. 
                 Prilozheniya dlya raboty s                                   
   finance       den'gami, finansami i vsem,  
                 chto s `etim svyazano.      
   french        Podderzhka francuzskogo                                      
                 yazyka.                     
                                             Esli vash port ponimaet kak FTP, 
   ftp           Klienty i servery FTP.      tak i HTTP, pomestite ego v      
                                             kategoriyu ftp i ukazhite        
                                             vtorichnuyu kategoriyu www.      
   games         Igry.                                                        
   geography*    Programmnoe obespechenie,                                    
                 svyazannoe s geografiej.    
   german        Podderzhka nemeckogo                                         
                 yazyka.                     
   gnome*        Porty Proekta GNOME.                                         
                 Programmnoe obespechenie                                     
   gnustep*      dlya okruzheniya rabochego   
                 stola GNUstep.              
   graphics      Graficheskie utility.                                        
   hamradio*     Programmnoe obespechenie                                     
                 dlya lyubitel'skogo radio   
                 Programmnoe obespechenie,                                    
   haskell*      svyazannoe s yazykom         
                 Haskell.                    
   hebrew        Podderzhka ivrita.                                           
   hungarian     Podderzhka vengerskogo                                       
                 yazyka.                     
   ipv6*         Programmnoe obespechenie,                                    
                 svyazannoe s IPv6.          
   irc           Utility dlya raboty s                                        
                 Internet Relay Chat.        
   japanese      Podderzhka yaponskogo                                        
                 yazyka.                     
                                             Kategoriya java ni v koem        
                                             sluchae ne dolzhna byt'          
                                             edinstvennoj dlya porta.         
                 Programmnoe obespechenie,   Ostav'te dlya portov,            
   java          svyazannoe s yazykom        neposredstvenno imeyuschih       
                 Java(TM).                   otnoshenie k yazyku Java,        
                                             porteram takzhe rekomenduetsya   
                                             ne ispol'zovat' java kak         
                                             osnovnuyu kategoriyu porta.      
   kde*          Porty proekta KDE.                                           
   kld*          Zagruzhaemye moduli yadra.                                   
   korean        Podderzhka korejskogo                                        
                 yazyka.                     
   lang          YAzyki programmirovaniya.                                    
   linux*        Linux prilozheniya i                                         
                 utility.                    
   lisp*         Programmnoe obespechenie,                                    
                 svyazannoe s yazykom Lisp.  
   mail          Programmy dlya raboty s                                      
                 `elektronnoj pochtoj.       
                 Programmnoe obespechenie                                     
   math          dlya chislennyh vychislenij  
                 i drugie utility,           
                 svyazannye s matematikoj.   
   mbone*        Prilozheniya dlya MBone.                                     
                                             V osnovnom to, chto ne popadaet  
                                             v drugie kategorii. Esli `eto    
   misc          Razlichnye utility          vozmozhno, poprobujte najti      
                                             bolee podhodyaschuyu, chem misc, 
                                             kategoriyu dlya vashego porta,   
                                             tak kak zdes' porty teryayutsya. 
   multimedia    Programmnoe obespechenie                                     
                 dlya raboty s mul'timedia.  
   net           Razlichnoe setevoe                                           
                 programmnoe obespechenie.   
   net-im        Programmy mgnovennogo                                        
                 obmena soobscheniyami.      
   net-mgmt      Programmnoe obespechenie                                     
                 dlya setevogo upravleniya.  
   net-p2p       Prilozheniya dlya                                            
                 piringovyh setej.           
                 Programmnoe obespechenie                                     
   news          dlya raboty s                
                 konferenciyami USENET.      
   palm          Programmnaya podderzhka                                      
                 Palm(TM).                   
                 Prilozheniya, svyazannye s                                   
   parallel*     parallel'nymi                
                 vychisleniyami.             
   pear*         Porty, otnosyaschiesya k                                     
                 tehnologii Pear PHP.        
   perl5*        Porty, kotorym dlya raboty                                   
                 trebuetsya Perl versii 5.   
   plan9*        Razlichnye programmy iz                                      
                 Plan9.                      
   polish        Podderzhka pol'skogo                                         
                 yazyka.                     
                 Porty dlya upravleniya,                                      
   ports-mgmt    ustanovki i razrabotki       
                 portov i paketov FreeBSD.   
   portuguese    Podderzhka portugal'skogo                                    
                 yazyka.                     
                 Programmnoe obespechenie    Instrumenty dlya viorstki        
   print         dlya pechati.               (prosmotrschiki i tomu podobnoe) 
                                             tozhe otnosyatsya syuda.         
                 Programmnoe obespechenie,                                    
   python*       svyazannoe s yazykom         
                 Python.                     
   ruby*         Programmnoe obespechenie,                                    
                 svyazannoe s yazykom Ruby.  
   rubygems*     Porty dlya paketov                                           
                 RubyGems.                   
   russian       Podderzhka russkogo yazyka.                                  
                 Programmnoe obespechenie,                                    
   scheme*       svyazannoe s yazykom         
                 Scheme.                     
                 Nauchnye programmy, kotorye                                  
   science       ne podpadayut pod drugie     
                 kategorii, skazhem, astro,  
                 biology ili math.           
                 Programmy,                                                   
   security      obespechivayuschie           
                 bezopasnost' sistemy.       
   shells        Razlichnye komandnye                                         
                 processory.                 
   sysutils      Sistemnye utility.                                           
   spanish*      Podderzhka ispanskogo                                        
                 yazyka.                     
   tcl*          Porty, dlya raboty kotoryh                                   
                 nuzhen Tcl.                 
                 Utility dlya obrabotki      Instrumenty dlya viorstki        
   textproc      tekstov.                    pomeschayutsya v kategoriyu      
                                             print, a ne syuda.               
   tk*           Porty, dlya raboty kotoryh                                   
                 nuzhen Tk.                  
   ukrainian     Podderzhka ukrainskogo                                       
                 yazyka.                     
   vietnamese    Podderzhka v'etnamskogo                                      
                 yazyka.                     
   windowmaker*  Porty, podderzhivayuschie                                    
                 menedzher okon WindowMaker. 
                 Programmnoe obespechenie,   Podderzhka yazyka HTML           
   www           svyazannoe s World Wide     otnositsya syuda zhe.            
                 Web.                        
                                             `Eta kategoriya prednaznachena   
                                             tol'ko dlya programmnogo         
                                             obespecheniya, kotoroe           
                 X Window System i izhe s    podderzhivaet samu okonnuyu      
   x11           nimi.                       sistemu. Ne pomeschajte syuda    
                                             obychnye prilozheniya dlya X:    
                                             bol'shinstvo iz nih dolzhny byt' 
                                             pereneseny v drugie kategorii    
                                             x11-* (smotrite nizhe).          
   x11-clocks    CHasy dlya X11.                                              
   x11-drivers   Drajvery X11.                                                
   x11-fm        Menedzhery fajlov dlya X11.                                  
   x11-fonts     SHrifty dlya X11 i utility                                   
                 dlya raboty s nimi.         
   x11-servers   Servery dlya X11.                                            
   x11-themes    Temy dlya X11.                                               
   x11-toolkits  Pakety razrabotchika dlya                                    
                 X11.                        
   x11-wm        Okonnye menedzhery dlya                                      
                 X11.                        
                 Porty, svyazannye s                                          
   xfce*         okruzheniem rabochego stola  
                 Xfce.                       
   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:

     * Pervaya kategoriya dolzhna byt' fizicheskoj kategorij (smotrite
       vyshe). `Eto neobhodimo dlya sozdaniya paketov. Posle `etogo
       virtual'nye i fizicheskie kategorii mogut smeshivat'sya.

     * 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 idut pervymi 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, 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.

     * Porty, ustanavlivayuschie zagruzhaemye moduli yadra, dolzhny
       soderzhat' virtual'nuyu kategoriyu kld v stroke CATEGORIES.

     * misc ne dolzhna ukazyvat'sya vmeste s lyuboj drugoj nevirtual'noj
       kategoriej. Esli vy ukazyvaete misc vmeste s chem-to eschio v stroke
       CATEGORIES, `eto znachit, chto vy mozhete spokojno udalit' misc i
       prosto pomestit' port v `etot drugoj podkatalog!

     * 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.3.4. Predlozhenie novoj kategorii

   Poskol'ku so vremenem Kollekciya Portov uvelichilas', to v svyazi s `etim
   byli dobavleny razlichnye novye kategorii. Novye kategorii mogut byt' ili
   virtual'nymi kategoriyami- kotorye ne imeyut sootvetstvuyuschego
   podkataloga v dereve portov- ili fizicheskimi kategoriyami-u kotoryh on
   est'. Sleduyuschij tekst soderzhit obsuzhdenie voprosov, voznikayuschih
   pri sozdanii novoj fizicheskoj kategorii, chtoby vy mogli ponimat' ih,
   kogda predlozhite novuyu kategoriyu.

   V sootvetstvie s suschestvuyuschej praktikoj my izbegaem sozdaniya novoj
   fizicheskoj kategorii, poka dostatochno bol'shoe chislo portov logicheski
   ej ne prinadlezhit ili zhe porty, kotorye mogli by ej prinadlezhat', ne
   yavlyayutsya logicheski obosoblennoj gruppoj, predstavlyayuschej dlya vseh
   ogranichennyj interes (v chastnosti, kategorii, otnosyaschiesya k
   estestvennym yazykam); predpochtitel'no vypolnenie oboih uslovij.

   Osnovnoj prichinoj dlya `etogo yavlyaetsya to, chto takoe izmenenie
   sozdaet izryadnoe kolichestvo raboty i dlya kommitterov, i dlya vseh teh
   pol'zovatelej, kotorye otslezhivayut izmeneniya v Kollekcii Portov. V
   dopolnenie, predlozhennaya kategoriya sozdaet estestvennoe raznoglasie.
   (Pozhaluj, potomu chto ne suschestvuet chetkogo soglasheniya, yavlyaetsya
   li kategoriya <<slishkom bol'shoj>>, ili dolzhny li kategorii
   predostavlyat' sebya dlya prosmotra (i, takim obrazom, kakoe kolichestvo
   kategorij bylo by ideal'nym znacheniem), i tak dalee.)

   Procedura:

    1. Predlozhite novuyu kategoriyu na Spisok rassylki, posvyaschionnyj
       Portam FreeBSD. Vam sleduet vklyuchit' dlya novoj kategorii detal'noe
       obosnovanie, v tom chisle pochemu vy schitaete, chto suschestvuyuschie
       kategorii ne yavlyayutsya dostatochnymi, i spisok suschestvuyuschih
       portov, predlozhennyh dlya peremescheniya. (Esli est' novye porty,
       ozhidayuschie v GNATS i popadayuschie v `etu kategoriyu, to ukazhite
       ih tozhe.) Esli vy yavlyaetes' soprovozhdayuschim i/ili otpravitelem,
       to ukazhite `eto sootvetstvenno, tak kak `eto mozhet pomoch' vam v
       vashem dele.

    2. Prinimajte uchastie v obsuzhdenii.

    3. Esli kazhetsya, chto dlya vashej idei poyavilas' podderzhka, otprav'te
       PR, kotoryj budet vklyuchat' obosnovanie i spisok suschestvuyuschih
       portov, kotorye nado peremestit'. V ideale `etot PR dolzhen takzhe
       vklyuchat' patchi dlya sleduyuschego:

          * Makefile'y dlya novyh portov v rezul'tate repozitornogo
            kopirovaniya

          * Makefile dlya kategorij staryh portov

          * Makefile'y dlya portov, zavisyaschih ot staryh portov

          * (v dopolnenie, vy mozhete vklyuchit' drugie fajly, trebuyuschie
            izmenenij, soglasno procedure iz Rukovodstva Kommittera.)

    4. Poskol'ku `eto zatragivaet infrastrukturu portov i ohvatyvaet ne
       tol'ko vypolnenie repozitornogo kopirovaniya, no takzhe, vozmozhno, i
       vypolnenie regressivnyh testov na klastere postroeniya, to PR dolzhna
       naznachat' sebe Gruppa Menedzherov Dereva Portov FreeBSD
       <portmgr@FreeBSD.org>.

    5. Esli `etot PR odobren, to kommitteru nuzhno prodolzhit' ostal'nuyu
       chast' procedury, kotoraya izlozhena v Rukovodstve Kommittera.

   Predlozhenie novoj virtual'noj kategorii dolzhno byt' shozhim s
   vysheizlozhennym, no pri `etom zatragivat' namnogo men'she, poskol'ku ni
   odin iz portov ne budet peremeschen v dejstvitel'nosti. V `etom sluchae
   edinstvennymi patchami, vklyuchennymi v PR, budut te, chto dobavlyayut
   novuyu kategoriyu v CATEGORIES kazhdogo iz zatragivaemyh portov.

  5.3.5. Predlozhenie reorganizacii vseh kategorij

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

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

  5.4.1. DISTVERSION/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}.

   Nazvaniya nekotoryh distributivov, kotorye ne ukladyvayutsya v
   ${PORTNAME}-${PORTVERSION}-shemu, mogut byt' avtomaticheski obrabotany
   posredstvom ustanovki peremennoj DISTVERSION. PORTVERSION i DISTNAME budut
   unasledovany avtomaticheski, no konechno zhe mogut byt' pereopredeleny.
   Sleduyuschaya tablica demonstriruet nekotorye primery:

   DISTVERSION PORTVERSION 
   0.7.1d      0.7.1.d     
   10Alpha3    10.a3       
   3Beta7-pre2 3.b7.p2     
   8:f_17      8f.17       

  Primechanie:

   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 SourceForge, GNU ili Perl CPAN, to ukazyvajte `eti sajty v prostoj
   forme pri pomoschi MASTER_SITE_* (k primeru, MASTER_SITE_SOURCEFORGE,
   MASTER_SITE_GNU ili MASTER_SITE_PERL_CPAN. 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_GNU}
 MASTER_SITE_SUBDIR=   make

   Ili mozhno ispol'zovat' sokraschennyj format:

 MASTER_SITES=   GNU/make

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

   Dlya populyarnyh sajtov suschestvuet neskol'ko magicheskih makrosov s
   zaranee izvestnoj strukturoj katalogov. Ispol'zujte dlya nih
   sokrascheniya, i sistema popytaetsya ugadat' dlya vas pravil'nyj
   podkatalog.

 MASTER_SITES=   SF

   Esli popytka ugadat' ne udalas', to `eto mozhet byt' perepisano
   sleduyuschim obrazom.

 MASTER_SITES=   SF/stardict/WyabdcRealPeopleTTS/${PORTVERSION}

   CHto takzhe mozhno zapisat' v takom vide:

 MASTER_SITES=   SF
 MASTER_SITE_SUBDIR=     stardict/WyabdcRealPeopleTTS/${PORTVERSION}

   Tablica 5.1. Populyarnye magicheskie makrosy dlya MASTER_SITES

  Macro                                 Assumed subdirectory                              
BERLIOS    /${PORTNAME:L}                                                                 
CHEESESHOP /packages/source/source/${DISTNAME:C/(.).*/\1/}/${DISTNAME:C/(.*)-[0-9].*/\1/} 
DEBIAN     /debian/pool/main/${PORTNAME:C/^((lib)?.).*$/\1/}/${PORTNAME}                  
GCC        /pub/gcc/releases/${DISTNAME}                                                  
GNOME      /pub/GNOME/sources/${PORTNAME}/${PORTVERSION:C/^([0-9]+\.[0-9]+).*/\1/}        
GNU        /gnu/${PORTNAME}                                                               
MOZDEV     /pub/mozdev/${PORTNAME:L}                                                      
PERL_CPAN  /pub/CPAN/modules/by-module/${PORTNAME:C/-.*//}                                
PYTHON     /ftp/python/${PYTHON_PORTVERSION:C/rc[0-9]//}                                  
RUBYFORGE  /${PORTNAME:L}                                                                 
SAVANNAH   /${PORTNAME:L}                                                                 
SF         /project/${PORTNAME:L}/${PORTNAME:L}/${PORTVERSION}                            

  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, USE_XZ i USE_ZIP pri neobhodimosti avtomaticheski
   ustanavlivayut znachenie EXTRACT_SUFX v .tar.bz2, .tar.xz ili .zip. Esli
   ni odna iz `etih peremennyh ne zadana, to znachenie EXTRACT_SUFX po
   umolchaniyu ustanavlivaetsya v .tar.gz.

  Primechanie:

   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.

  Primechanie:

   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, kotoraya
   pozvolyaet zakreplyat' posle imen fajlov i patchej identifikatory tipa :n.
   Zdes' 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. Konechno, nash
   <<magistr dostupnosti 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 Primer 5.1, <<Uproschionnoe ispol'zovanie MASTER_SITES:n s 1 fajlom
   na kazhdom sajte>>.

   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 Primer 5.2,
   <<Uproschionnoe ispol'zovanie MASTER_SITES:n s bolee chem 1 fajlom na
   kazhdom servere>>.

   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 zavershayuschego
            simvola /. Mehanizm MASTER_SITES:n opiraetsya na nalichie
            zavershayuschego simvola / vo izbezhanie sovpadayuschih
            `elementov, gde :n yavlyaetsya korrektnoj chast'yu `elementa s
            vhozhdeniyami, gde :n oboznachaet gruppu n. Dlya celej
            sovmestimosti, tak kak zavershayuschij 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 Primer 5.3, <<Podrobnoe ispol'zovanie
            MASTER_SITES:n v MASTER_SITE_SUBDIR>> i Primer 5.4, <<Podrobnoe
            ispol'zovanie MASTER_SITES:n s zapyatymi, neskol'kimi fajlami,
            neskol'kimi serverami i neskol'kimi podkatalogami>>.

            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-trial:1/

                    * http://site1/directory-one/

                    * http://site1/directory/

                    * 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-trial:1/

                    * http://site1/directory-one/

                    * http://site1/directory/

                    * 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/

                    * MASTER_SITE_BACKUP

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

       Posmotrite Primer 5.5, <<Podrobnoe ispol'zovanie MASTER_SITES:n s
       MASTER_SITE_SOURCEFORGE>>.

       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 Primer 5.6,
       <<Uproschionnoe ispol'zovanie MASTER_SITES:n s PATCH_SITES.>>.

       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 Primer 5.4,
            <<Podrobnoe ispol'zovanie MASTER_SITES:n s zapyatymi, neskol'kimi
            fajlami, neskol'kimi serverami i neskol'kimi podkatalogami>>.

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

  Primechanie:

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

  5.4.9. ALWAYS_KEEP_DISTFILES

   Esli vash port ispol'zuet dvoichnye distributivnye fajly i obladaet
   licenziej, trebuyuschej, chtoby ishodnyj kod predostavlyalsya vmeste s
   paketami, rasprostranyaemymi v dvoichnoj forme, naprimer GPL, to
   ALWAYS_KEEP_DISTFILES dast klasteru postroeniya FreeBSD ukazanie
   sohranyat' kopiyu fajlov, ukazannyh v DISTFILES. Pol'zovatelyam takih
   portov `eti fajly v osnovnom ne nuzhny, po`etomu horoshej ideej
   yavlyaetsya dobavlenie v DISTFILES ishodnyh distributivnyh fajlov, tol'ko
   kogda opredelena peremennaya PACKAGE_BUILDING.

   Primer 5.7. Ispol'zovanie ALWAYS_KEEP_DISTFILES.

 .if defined(PACKAGE_BUILDING)
 DISTFILES+=             foo.tar.gz
 ALWAYS_KEEP_DISTFILES=  yes
 .endif

   Pri dobavlenii dopolnitel'nyh fajlov v DISTFILES ubedites', chto vy ih
   takzhe dobavlyaete v distinfo. Krome togo, dopolnitel'nye fajly obychno
   raspakovyvayutsya takzhe v WRKDIR, chto dlya nekotoryh portov mozhet
   vyzyvat' nezhelatel'nye podobnye `effekty i trebovat' osobuyu obrabotku.

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.

   Soprovozhdayuschij otvetstvenen za podderzhanie porta v aktual'nom
   sostoyanii i obespechenie pravil'noj raboty porta. Za podrobnym opisaniem
   obyazannostej soprovozhdayuschego port obraschajtes' k glave The challenge
   for port maintainers.

   Pered fiksaciej v repozitorii izmeneniya v porte budut otpravleny
   soprovozhdayuschemu dlya prosmotra i odobreniya. Esli soprovozhdayuschij
   porta ne otvetil na zapros pol'zovatelya ob obnovlenii v techenie dvuh
   nedel' (isklyuchaya bol'shie prazdniki), to `eto mozhno schitat'
   tajm-autom soprovozhdayuschego, i obnovlenie mozhet byt' vypolneno bez
   yavnogo podtverzhdeniya ot soprovozhdayuschego. Esli soprovozhdayuschij ne
   otvechaet v techenie trioh mesyacev, to schitaetsya, chto on otsutstvuet,
   i kak soprovozhdayuschij 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.

   My ostavlyaem za soboj pravo izmenyat' soobschenie soprovozhdayuschego
   dlya luchshego sootvetstviya suschestvuyuschim politikam i stilyu
   Kollekcii Portov bez yavnogo odobreniya so storony otpravitelya. Takzhe,
   krupnye izmeneniya v infrastrukture mogut povlech' izmeneniya v porte bez
   soglasiya soprovozhdayuschego. Takoj vid izmenenij nikogda ne budet
   zatragivat' funkcional'nost' porta.

   Za Gruppa Menedzherov Dereva Portov FreeBSD <portmgr@FreeBSD.org>
   ostavlyaetsya pravo snyat' ili naznachit' kogo-libo soprovozhdayuschim 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

   Soderzhit odnostrochnoe opisanie porta. Pozhalujsta, soblyudajte
   sleduyuschie pravila:

    1. Starajtes' delat' stroku COMMENT dlinoj ne bol'she, chem 70 simvolov,
       tak kak `eta stroka budet ispol'zovana programmoj pkg_info(1) dlya
       otobrazheniya odnostrochnogo opisaniya porta;

    2. Ne vklyuchajte syuda nazvanie paketa (ili nomer versii programmnogo
       obespecheniya);

    3. Kommentarij dolzhen nachinat'sya s zaglavnoj bukvy i ne
       zakanchivat'sya tochkoj;

    4. Ne nachinajte kommentarij s neopredelionnogo artiklya (A ili An);

    5. Imena pishutsya s zaglavnoj bukvy (naprimer, Apache, JavaScript.
       Perl);

    6. Dlya perechislenij ispol'zujte anglijskuyu Oksfordskuyu zapyatuyu
       (angl. Oxford comma) (naprimer, green, red, and blue);

    7. Ispol'zujte programmu proverki orfografii.

   Vot primer:

 Cat chasing a mouse all over the screen

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

5.7. PORTSCOUT

   Portscout yavlyaet soboj avtomatizirovannoe sredstvo proverki dostupnosti
   distributivnyh fajlov dlya Kollekcii Portov FreeBSD, podrobnoe opisanie
   kotorogo predostavlyaet Razdel 14.5, <<Portscout: skaner distributivnyh
   fajlov portov FreeBSD>>.

   Peremennaya PORTSCOUT zadaiot special'nye usloviya, ogranichivayuschie
   rabotu Portscout - skanera distributivnyh fajlov.

   Situacii, pri kotoryh sleduet ukazyvat' peremennuyu PORTSCOUT:

     * Kogda dolzhny ignorirovat'sya distributivnye fajly dlya konkretnyh
       versij ili mladshih revizij. Naprimer, chtoby isklyuchit' iz proverok
       novyh versij distributivnyh fajlov versiyu 8.2 po prichine togo, chto
       ona yavlyaetsya polomannoj, dobav'te sleduyuschee:

 PORTSCOUT=      ignore:8.2

     * Kogda dolzhny proveryat'sya konkretnye versii ili starshie i mladshie
       revizii distributivnyh fajlov. Naprimer, esli sleduet ogranichit'sya
       proverkoj versii 0.6.4, potomu chto bolee novye versii imeyut problemy
       sovmestimosti s FreeBSD, dobav'te:

 PORTSCOUT=      limit:^0\.6\.4

     * Kogda URL, v kotoryh ukazany dostupnye versii, otlichayutsya ot URL ih
       zagruzki. Naprimer, chtoby privyazat' proverku novyh versij
       distributivnyh fajlov k stranice zagruzki dlya porta databases/pgtune,
       dobav'te:

 PORTSCOUT=      site:http://pgfoundry.org/frs/?group_id=1000416

5.8. Zavisimosti

   Mnogie porty zavisyat ot drugih portov. `Eto ochen' udobnaya
   zamechatel'naya osobennost' bol'shinstva Unix-podobnyh operacionnyh
   sistem, vklyuchaya FreeBSD. Mnozhestvo portov mogut ispol'zovat' obschuyu
   zavisimost' sovmestno, a ne vklyuchat' eio v sostav kazhdogo porta ili
   paketa, kotoryj v nej nuzhdaetsya. 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.8.1. LIB_DEPENDS

   `Eta peremennaya ukazyvaet, ot kakih sovmestno ispol'zuemyh bibliotek
   zavisit port. `Eto spisok par lib:dir gde lib - `eto imya biblioteki, dir
   - `eto katalog, v kotorom mozhno ee najti v sluchae, esli ee net na
   mashine. Naprimer,

 LIB_DEPENDS=   libjpeg.so:${PORTSDIR}/graphics/jpeg

   proverit nalichie biblioteki jpeg s lyubym nomerom versii i perejdet v
   podkatalog graphics/jpeg vashego dereva portov dlya ee postroeniya i
   ustanovki, esli biblioteka otsutstvuet.

   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 eio ustanavlivat', esli eio net na
   pol'zovatel'skoj sisteme.

  5.8.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, ispol'zuetsya komanda which -s.

   Naprimer,

 RUN_DEPENDS=   ${LOCALBASE}/news/bin/innd:${PORTSDIR}/news/inn \
                xmlcatmgr:${PORTSDIR}/textproc/xmlcatmgr

   proverit suschestvovanie fajla ili kataloga /usr/local/news/bin/innd, i
   esli nichego ne budet najdeno, to postroit i ustanovit port iz podkataloga
   news/inn dereva portov. Takzhe budet vypolnena proverka, prisutstvuet li v
   puti poiska ispolnyaemyj fajl s imenem xmlcatmgr, i perejdet v podkatalog
   textproc/xmlcatmgr vashego dereva portov dlya ego postroeniya i ustanovki,
   esli on ne budet najden.

  Primechanie:

   V privedennom primere innd yavlyaetsya vypolnimym fajlom; esli vypolnimyj
   fajl nahoditsya v meste, kotoroe otsutstvuet v spiske putej fajlov, to vy
   dolzhny ukazat' polnyj put' k fajlu.

  Primechanie:

   Oficial'nym znacheniem peremennoj poiska PATH, ispol'zuemym v klastere
   postroeniya portov yavlyaetsya

 /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin

   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.

   Dovol'no rasprostranennoj yavlyaetsya situaciya, kogda RUN_DEPENDS
   bukval'no takaya zhe kak BUILD_DEPENDS, osobenno esli perenosimoe
   programmnoe obespechenie napisano na yazyke scenariev, ili esli ono
   trebuet takoe zhe okruzhenie dlya ispolneniya, kak i ispol'zuemoe vo
   vremya postroeniya. V `etom sluchae, ochen' zamanchivym ili dovol'no
   estestvennym yavlyaetsya prisvoenie odnogo drugomu:

 RUN_DEPENDS= ${BUILD_DEPENDS}

   Tem ne menee, podobnye prisvoeniya mogut zagryaznyat' zavisimosti vremeni
   ispolneniya soderzhimym, ne zadannym v BUILD_DEPENDS ishodnogo porta.
   Takoe sluchaetsya iz-za lenivogo vychisleniya v make(1) prisvaivaemyh
   peremennyh. Predstav'te Makefile s peremennymi USE_*, kotorye
   obrabatyvayutsya v ports/Mk/bsd.*.mk dlya popolneniya pervonachal'nyh
   zavisimostej postroeniya. Naprimer, USES= gmake dobavlyaet devel/gmake v
   BUILD_DEPENDS. Dlya predotvrascheniya zagryazneniya RUN_DEPENDS podobnymi
   dopolnitel'nymi zavisimostyami proyavlyajte ostorozhnost' s prisvoeniem s
   raskrytiem, t.e. s raskrytiem znacheniya pered ego prisvoeniem peremennoj:

 RUN_DEPENDS:=  ${BUILD_DEPENDS}

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

  Primechanie:

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

  Primechanie:

   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 Razdel 5.8.8,
   <<USE_*>>.

  5.8.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
   raspakovki.

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

  5.8.7. USES

   Suschestvuet neskol'ko parametrov dlya opredeleniya razlichnyh vidov
   harakternyh osobennostej i zavisimostej, kotorymi obladaet rassmatrivaemyj
   port. Oni mogut byt' ukazany putiom dobavleniya sleduyuschej stroki v
   Makefile porta:

 USES= feature[:arguments]

   Dlya polucheniya polnogo spiska znachenij smotrite Razdel 15.1,
   <<Znacheniya USES>>.

  Preduprezhdenie:

   Znachenie USES nel'zya prisvaivat' posle podklyucheniya bsd.port.pre.mk.

  5.8.8. USE_*

   Dlya opredeleniya obschih zavisimostej, sovmestno ispol'zuemyh mnogimi
   portami, prednaznacheno neskol'ko peremennyh. Ih ispol'zovanie yavlyaetsya
   neobyazatel'nym, no pomogaet uprostit' izbytochnost' fajlov Makefile
   porta. Kazhdyj iz nih oformlyaetsya kak USE_*. `Eti peremennye mozhno
   ispol'zovat' tol'ko v Makefile porta i ports/Mk/bsd.*.mk. Oni ne
   prednaznacheny dlya ustanovki pol'zovatelyami parametrov - ispol'zujte
   dlya `etih celej PORT_OPTIONS.

  Primechanie:

   Ustanovka lyubyh USE_* v /etc/make.conf vsegda yavlyaetsya oshibochnym
   dejstviem. V chastnosti, ustanovka

 USE_GCC=X.Y

   (gde X.Y sootvetstvuet versii) dobavit zavisimost' ot gccXY k kazhdomu
   portu, vklyuchaya i sam lang/gccXY!

   Tablica 5.2. Peremennye USE_*

   Peremennaya                           Znachenie                            
   USE_BZIP2   tar-arhivy porta upakovany pri pomoschi bzip2.                 
   USE_ZIP     tar-arhivy porta upakovany pri pomoschi zip.                   
               Dlya sborki porta trebuetsya GCC (gcc ili g++). Nekotorym      
               portam podhodit lyubaya versiya, dlya drugih trebuyutsya       
               poslednie sovremennye versii. Obychno ispol'zuetsya so         
               znacheniem any (v `etom sluchae ispol'zuetsya vstroennyj GCC v 
               teh versiyah FreeBSD, v sostav kotoryh on vsio eschio vhodit,  
               ili ustanavlivaetsya port lang/gcc, kogda Clang yavlyaetsya    
   USE_GCC     kompilyatorom C/C++ po umolchaniyu) ili yes (vsegda            
               ispol'zuetsya stabil'naya sovremennaya versiya GCC iz porta    
               lang/gcc). Takzhe v znachenii peremennoj mozhno ukazat'        
               tochnuyu versiyu, naprimer 4.7. Minimal'no dopustimuyu versiyu 
               mozhno ukazat' kak 4.6+. GCC iz osnovnoj sistemy ispol'zuetsya 
               v sluchae, esli ego versiya udovletvoryaet zaproshennoj,       
               inache sobiraetsya podhodyaschaya versii kompilyatora iz porta 
               s sootvetstvuyuschej korrekciej peremennyh CC i CXX.           

   Peremennye, otnosyaschiesya k gmake i scenariyu configure, opisany v
   Razdel 6.3, <<Mehanizmy postroeniya>>, a autoconf, automake i libtool
   opisany v Razdel 6.4, <<Ispol'zovanie GNU autotools>>. Peremennye,
   svyazannye s Perl, opisany v Razdel 6.6, <<Ispol'zovanie Perl>>.
   Peremennye X11 perechisleny v Razdel 6.7, <<Ispol'zovanie X11>>.
   Razdel 6.8, <<Ispol'zovanie GNOME>> rabotaet s peremennymi GNOME i
   Razdel 6.10, <<Ispol'zovanie KDE>> s KDE. Razdel 6.11, <<Ispol'zovanie
   Java>> opisyvaet peremennye Java, a Razdel 6.12, <<Veb-prilozheniya,
   Apache i PHP>> soderzhit informaciyu ob Apache, PHP i modulyah PEAR.
   Python obsuzhdaetsya v Razdel 6.13, <<Ispol'zovanie Python>>, a Ruby v
   Razdel 6.16, <<Ispol'zovanie Ruby>>. Razdel 6.17, <<Ispol'zovanie SDL>>
   predostavlyaet peremennye, ispol'zuemye dlya prilozhenij SDL, i, nakonec,
   Razdel 6.20, <<Ispol'zovanie Xfce>> soderzhit informaciyu o prilozhenii
   Xfce.

  5.8.9. Minimal'naya versiya zavisimosti

   Minimal'naya versiya zavisimosti mozhet byt' ukazana v lyuboj peremennoj
   *_DEPENDS, za isklyucheniem LIB_DEPENDS, s ispol'zovaniem sleduyuschego
   sintaksisa:

 p5-Spiffy>=0.26:${PORTSDIR}/devel/p5-Spiffy

   Pervoe pole soderzhit nazvanie zavisimogo paketa, kotoroe obyazano
   sovpadat' s zapis'yu v baze dannye paketov, znak sravneniya i versiyu
   versiyu paketa. Zavisimost' udovletvoryaetsya esli na mashine ustanovlen
   p5-Spiffy-0.26 ili novee.

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

  5.8.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.12. Avtomaticheskie zavisimosti i problemy, kotorye oni vyzyvayut

   Zavisimosti dolzhny byt' ukazany libo yavno, libo s ispol'zovaniem
   frejmvorka OPTIONS. Ispol'zovanie prochih metodov, takih kak
   avtomaticheskoe obnaruzhenie zavisimostej, uslozhnyaet indeksirovanie,
   chto vyzyvaet problemy v upravlenii portami i paketami.

   Primer 5.8. Nekorrektnoe ob"yavlenie neobyazatel'noj zavisimosti

 .include <bsd.port.pre.mk>

 .if exists(${LOCALBASE}/bin/foo)
 LIB_DEPENDS=    bar:${PORTSDIR}/foo/bar
 .endif

   Problema avtomaticheskogo dobavleniya zavisimostej zaklyuchaetsya v tom,
   chto fajly i nastrojki za predelami porta mogut proizvol'no menyat'sya.
   Primer: posle postroeniya indeksa ustanavlivaetsya nabor portov. Pri `etom
   odin iz nih ustanavlivaet proveryaemyj fajl. Na `etom `etape indeks budet
   nepravil'nym, potomu chto ustanovlennyj port neozhidanno poluchit novuyu
   zavisimost'. Indeks mozhet byt' po prezhnemu nepravil'nym dazhe posle ego
   perestroeniya, v sluchae esli drugie porty takzhe opredelyat
   dopolnitel'nye zavisimosti, osnovyvayas' na suschestvovanii drugih fajlov.

   Primer 5.9. Korrektnoe ob"yavlenie neobyazatel'noj zavisimosti

 OPTIONS_DEFINE= BAR
 BAR_DESC=       Bar support

 .include <bsd.port.options.mk>

 .if ${PORT_OPTIONS:MBAR}
 LIB_DEPENDS=    bar:${PORTSDIR}/foo/bar
 .endif

   Pravil'nym sposobom yavlyaetsya proverka peremennyh parametrov. `Etot
   sposob ne privodit k nesootvetstviyam v indekse nabora portov, poskol'ku
   parametry opredeleny do postroeniya indeksa. Pri `etom mozhno ispol'zovat'
   prostye skripty dlya avtomatizacii postroeniya, ustanovki i obnovleniya
   `etih portov i sootvetstvuyuschih im paketov.

  5.8.13. USE_ i WANT_

   Peremennye USE_ zadayutsya mejntejnerom porta dlya opredeleniya
   programmnogo obespecheniya, ot kotorogo `etot port zavisit. Port, dlya
   kotorogo nuzhen Firefox, ukazhet

 USE_FIREFOX=    yes

   Nekotorye peremennye USE_ mogut prinimat' nomera versij ili drugie
   parametry. Naprimer, port, kotoryj trebuet Apache 2.2, ukazhet

 USE_APACHE=     22

   V nekotoryh sluchayah dlya bol'shego kontrolya nad zavisimostyami
   ispol'zuyutsya peremennye WANT_, kotorye pozvolyayut ukazyvat' trebovaniya
   v bolee tochnoj forme. Naprimer, vzglyanite na port mail/squirrelmail.
   `Etomu portu nuzhny neskol'ko modulej PHP, kotorye perechisleny v
   peremennoj USE_PHP:

 USE_PHP=        session mhash gettext mbstring pcre openssl xml

   `Eti moduli dostupny v versiyah CLI i web, po`etomu versiya web vybrana s
   peremennoj WANT_:

 WANT_PHP_WEB=   yes

   Imeyuschiesya peremennye USE_ i WANT_ opredeleny v fajlah /usr/ports/Mk.

5.9. 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_MSG} "Error: invalid value for RESOLUTION: \"${RESOLUTION}\""
        @${ECHO_MSG} "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.

5.10. 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 NO_MANCOMPRESS 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 NO_MANCOMPRESS, tak chto scenariyu
   bsd.port.mk nichego dopolnitel'no delat' ne nuzhno.

   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:

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

   Krome togo, fajl ${MANPREFIX}/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).

   Esli perevedena tol'ko chast' stranic spravochnika, vy mozhete
   ispol'zovat' nekotorye peremennye, sozdannye dinamicheski iz soderzhimogo
   MANLANG:

 MANLANG=       "" de ja
 MAN1=          foo.1
 MAN1_EN=       bar.1
 MAN3_DE=       baz.3

   CHto perevoditsya v takoj spisok fajlov:

 ${MANPREFIX}/man/man1/foo.1.gz
 ${MANPREFIX}/man/de/man1/foo.1.gz
 ${MANPREFIX}/man/ja/man1/foo.1.gz
 ${MANPREFIX}/man/man1/bar.1.gz
 ${MANPREFIX}/man/de/man3/baz.3.gz

5.11. Fajly v formate info

   Esli v vashem pakete nuzhna ustanovka fajlov GNU info, oni dolzhny byt'
   perechisleny v peremennoj INFO (bez okonchaniya .info), po zapisi na
   dokument. Predpolagaetsya, chto `eti fajly ustanavlivayutsya v
   PREFIX/INFO_PATH. Vy mozhete izmenit' INFO_PATH, esli vash paket
   ispol'zuet drugoe mesto dlya razmescheniya. Odnako, `eto ne rekomenduetsya
   delat'. `Eti zapisi vsego lish' soderzhat put' otnositel'no
   PREFIX/INFO_PATH. Naprimer, lang/gcc34 ustanavlivaet fajly info v
   PREFIX/INFO_PATH/gcc34, i v INFO budet chto-to vrode `etogo:

 INFO= gcc34/cpp gcc34/cppinternals gcc34/g77 ...

   Pered registraciej paketa sootvetstvuyuschij kod ustanovki/udaleniya budet
   avtomaticheski dobavlen vo vremennyj pkg-plist.

5.12. Opcii dlya Makefile

   Mnogie prilozheniya mogut byt' postroeny v razlichnyh konfiguraciyah i s
   dopolnitel'noj funkcional'nost'yu. Naprimer, vybor estestvennogo
   (chelovecheskogo) yazyka, GUI protiv komandnoj stroki ili tipa
   ispol'zuemoj bazy dannyh. Pol'zovateli mogut nuzhdat'sya v razlichnyh
   konfiguraciyah, otlichnyh ot ispol'zuemoj po umolchaniyu, po`etomu v
   sisteme portov predusmotren mehanizm, pozvolyayuschij avtoru porta
   upravlyat' sborkoj togo ili inogo varianta konfiguracii. Pravil'naya
   podderzhka `etih neobyazatel'nyh parametrov oblegchaet pol'zovatelyam
   zhizn' i daiot dva ili bolee porta po cene odnogo.

  5.12.1. Knobs

    5.12.1.1. WITH_* i WITHOUT_*

   `Eti peremennye prednaznacheny dlya ustanovki sistemnym administratorom.
   Mnogie iz nih standartizovany v fajle ports/KNOBS.

   Pri sozdanii porta ne davajte imya dlya knob, specifichnoe dlya dannogo
   prilozheniya. Na primere porta Avahi, ispol'zujte WITHOUT_MDNS vmesto
   WITHOUT_AVAHI_MDNS.

  Primechanie:

   Ne stoit rasschityvat', chto WITH_* obyazatel'no imeet sootvetstvuyuschuyu
   peremennuyu WITHOUT_*, i naoborot. V obschem sluchae, predpolagaetsya
   znachenie po umolchaniyu.

  Primechanie:

   Esli obratnoe ne ukazano, to proveryaetsya tol'ko fakt ustanovki samih
   peremennyh, no ne ih konkretnoe znachenie tipa YES ili NO.

   Tablica 5.3. Osnovnye peremennye WITH_* i WITHOUT_*

      Peremennaya                           Znachenie                         
   WITH_OPENSSL_BASE Ispol'zovat' versiyu OpenSSL iz bazovoj sistemy.         
   WITH_OPENSSL_PORT Ustanavlivaet versiyu OpenSSL iz security/openssl, dazhe 
                     esli v bazovoj sisteme poslednyaya versiya.              

    5.12.1.2. Naimenovanie KNOBS

   Portery dolzhny ispol'zovat' tak nazyvaemye knobs dlya pomoschi konechnym
   pol'zovatelyam i dlya podderzhaniya kolichestva naimenovanij knobs v
   nebol'shom kolichestve. Spisok populyarnyh nazvanij knobs mozhno najti v
   fajle KNOBS

   Nazvaniya knobs dolzhny otrazhat', chto `eto takoe i chto vypolnyaet. Esli
   u porta imeetsya bibliotechnyj prefiks v PORTNAME, to on dolzhen
   prisutstvovat' v nazvanii knobs.

  5.12.2. OPTIONS

    5.12.2.1. Opisanie

   Pri ustanovke porta peremennye OPTIONS_* predostavlyayut pol'zovatelyu
   okno dialoga s otobrazheniem dostupnyh parametrov, s zapis'yu vybrannyh
   parametrov v fajl /var/db/ports/${UNIQUENAME}/options. `Eti opcii povtorno
   ispol'zuyutsya pri sleduyuschem postroenii porta.

   Kogda pol'zovatel' zapuskaet make config (ili zapuskaet vpervye make
   build), infrastruktura vypolnyaet proverku suschestvovaniya fajla
   /var/db/ports/${UNIQUENAME}/options. Esli `etot fajl ne suschestvuet, to
   ispol'zuyutsya znacheniya OPTIONS_* i otobrazhaetsya dialogovoe okno, v
   kotorom `eti parametry mozhno vklyuchit' ili vyklyuchit'. Zatem
   sohranyaetsya fajl opcij options, i vybrannye peremennye ispol'zuyutsya
   pri postroenii porta.

   Esli novaya versiya porta dobavlyaet novye znacheniya OPTIONS, to
   pol'zovatelyu budet predstavleno okno dialoga s sohranennymi zapolnennymi
   znacheniyami staryh OPTIONS.

   make showconfig otobrazhaet sohranennuyu konfiguraciyu. Dlya udaleniya
   sohranennoj konfiguracii ispol'zujte make rmconfig.

    5.12.2.2. Sintaksis

   OPTIONS_DEFINE soderzhit spisok ispol'zuemyh OPTIONS. Oni nezavisimy drug
   ot druga i ne sgruppirovany:

 OPTIONS_DEFINE= OPT1 OPT2

   Dalee posle opredeleniya sleduet opisanie OPTIONS (ne yavlyaetsya
   obyazatel'nym, no nastoyatel'no rekomenduetsya):

 OPT1_DESC=      Describe OPT1
 OPT2_DESC=      Describe OPT2
 OPT3_DESC=      Describe OPT3
 OPT4_DESC=      Describe OPT4
 OPT5_DESC=      Describe OPT5
 OPT6_DESC=      Describe OPT6

  Podskazka:

   ports/Mk/bsd.options.desc.mk soderzhit opisanie mnozhestva naibolee
   ispol'zuemyh OPTIONS; pereopredelyat' ih, kak pravilo, ne nuzhno.

  Podskazka:

   Pri opisanii parametrov starajtes' predstavit' sebya na meste
   pol'zovatelya: <<CHto `eto delaet?>> i <<Dlya chego by ya zahotel
   vklyuchit' `eto?>> Ne delajte prostoe povtorenie nazvaniya. Naprimer,
   opisanie parametra NLS kak <<include NLS support>> (<<vklyuchit'
   podderzhku NLS>>) ne pomozhet pol'zovatelyu, kotoryj uzhe vidit nazvanie
   parametra, no mozhet ne znat', chto `eto oznachaet. Opisav ego kak
   <<Native Language Support via gettext utilities>> (<<Podderzhka
   nacional'nogo yazyka cherez utility gettext>>), vy pomozhete pol'zovatelyu
   gorazdo bol'she.

   OPTIONS mozhno gruppirovat' v vide pereklyuchatelej, dlya kotoryh
   razreshen vybor edinstvennogo varianta v kazhdoj gruppe:

 OPTIONS_SINGLE=         SG1
 OPTIONS_SINGLE_SG1=     OPT3 OPT4

   OPTIONS mozhno gruppirovat' v vide pereklyuchatelej, dlya kotoryh
   razreshen vybor edinstvennogo varianta (ili ni odnogo) v kazhdoj gruppe:

 OPTIONS_RADIO=          RG1
 OPTIONS_RADIO_RG1=      OPT7 OPT8

   OPTIONS takzhe mozhno gruppirovat' v vide spiskov so mnozhestvennym
   vyborom, dlya kotoryh obyazan byt' vklyuchen po krajnej mere odin iz
   parametrov:

 OPTIONS_MULTI=          MG1
 OPTIONS_MULTI_MG1=      OPT5 OPT6

   OPTIONS takzhe mozhno gruppirovat' v vide spiskov so mnozhestvennym
   vyborom, dlya kotoryh mogut byt' vklyucheny lyubye parametry, vklyuchaya
   otsutstvie vybora:

 OPTIONS_GROUP=          GG1
 OPTIONS_GROUP_GG1=      OPT9 OPT10

   Po umolchaniyu OPTIONS nahoditsya v vyklyuchennom polozhenii, esli pri
   `etom ono takzhe otsutstvuet v spiske OPTIONS_DEFAULT:

 OPTIONS_DEFAULT=        OPT1 OPT3 OPT6

   Opredeleniya OPTIONS obyazany poyavit'sya do podklyucheniya
   bsd.port.options.mk. Peremennye PORT_OPTIONS mogut byt' provereny tol'ko
   posle podklyucheniya bsd.port.options.mk. Vmesto `etogo takzhe mozhno
   ispol'zovat' podklyuchenie bsd.port.pre.mk, chto vse esche shiroko
   ispol'zuetsya v portah, napisannyh do poyavleniya bsd.port.options.mk. No
   imejte v vidu, chto nekotorye peremennye, obychno, `eto nekotorye flagi
   USE_*, posle podklyucheniya bsd.port.pre.mk budut rabotat' ne tak, kak
   `etogo ot nih ozhidayut.

   Primer 5.10. Prostoe ispol'zovanie OPTIONS

 OPTIONS_DEFINE= FOO BAR
 FOO_DESC=       Enable option foo
 BAR_DESC=       Support feature bar

 .include <bsd.port.options.mk>

 .if ${PORT_OPTIONS:MFOO}
 CONFIGURE_ARGS+=--with-foo
 .else
 CONFIGURE_ARGS+=--without-foo
 .endif

 .if ${PORT_OPTIONS:MBAR}
 RUN_DEPENDS+=   bar:${PORTSDIR}/bar/bar
 .endif

 .include <bsd.port.mk>

   Primer 5.11. Proverka nezadannyh znachenij OPTIONS

 .if ! ${PORT_OPTIONS:MEXAMPLES}
 CONFIGURE_ARGS+=--without-examples
 .endif

   Primer 5.12. Primer real'nogo ispol'zovaniya OPTIONS

 OPTIONS_DEFINE=         EXAMPLES

 OPTIONS_SINGLE=         BACKEND
 OPTIONS_SINGLE_BACKEND= MYSQL PGSQL BDB

 OPTIONS_MULTI=          AUTH
 OPTIONS_MULTI_AUTH=     LDAP PAM SSL

 EXAMPLES_DESC=          Install extra examples
 MYSQL_DESC=             Use MySQL as backend
 PGSQL_DESC=             Use PostgreSQL as backend
 BDB_DESC=               Use Berkeley DB as backend
 LDAP_DESC=              Build with LDAP authentication support
 PAM_DESC=               Build with PAM support
 SSL_DESC=               Build with OpenSSL support

 OPTIONS_DEFAULT=        PGSQL LDAP SSL

 .include <bsd.port.options.mk>

 .if ${PORT_OPTIONS:MPGSQL}
 USE_PGSQL=              yes
 CONFIGURE_ARGS+=        --with-postgres
 .else
 CONFIGURE_ARGS+=        --without-postgres
 .endif

 .if ${PORT_OPTIONS:MICU}
 LIB_DEPENDS+=   icuuc:${PORTSDIR}/devel/icu
 .endif

 .if ! ${PORT_OPTIONS:MEXAMPLES}
 CONFIGURE_ARGS+=        --without-examples
 .endif

 # Proverka drugih parametrov OPTIONS

 .include <bsd.port.mk>

    5.12.2.3. Parametry po umolchaniyu

   Sleduyuschie parametry po umolchaniyu vsegda vklyucheny.

     * DOCS - postroenie i ustanovka dokumentacii.

     * NLS - internacionalizaciya.

     * EXAMPLES - postroenie i ustanovka primerov ispol'zovaniya.

     * IPV6 - podderzhka protokola IPv6.

  Primechanie:

   Net neobhodimosti dobavlyat' `eti parametry v OPTIONS_DEFAULT. Tem ne
   menee, chtoby otobrazit' ih v okne dialoga vybora parametrov, oni dolzhny
   byt' dobavleny v OPTIONS_DEFINE.

  5.12.3. Funkciya avtomaticheskoj aktivacii

   Pri ispol'zovanii scenariya GNU configure, sledite za tem, kakie
   neobyazatel'nye funkcii zadejstvuyutsya posredstvom avtomaticheskoj
   aktivacii. Otklyuchajte yavnym obrazom te neobyazatel'nye funkcii, kotorye
   vy ne hoteli by ispol'zovat', cherez peredachu sootvetstvuyuschih
   --without-xxx ili --disable-xxx v peremennoj CONFIGURE_ARGS.

   Primer 5.13. Nepravil'noe upravlenie opciej

 .if ${PORT_OPTIONS:MFOO}
 LIB_DEPENDS+=           libfoo.so:${PORTSDIR}/devel/foo
 CONFIGURE_ARGS+=        --enable-foo
 .endif

   V privedennom vyshe primere predstav'te sebe biblioteku libfoo,
   ustanovlennuyu v sisteme. Pol'zovatel' ne zhelaet, chtoby prilozhenie
   ispol'zovalo libfoo, i po`etomu on vyklyuchaet sootvetstvuyuschuyu opciyu
   v dialoge make config. No scenarij configure prilozheniya opredelyaet
   nalichie biblioteki v sisteme i vklyuchaet ee podderzhku v itogovyj
   ispolnyaemyj fajl. Teper', kogda pol'zovatel' reshit udalit' libfoo iz
   sistemy, sistema portov pozvolit `eto sdelat' (t.k. zavisimost' ot libfoo
   ne byla zapisana), no prilozhenie perestanet rabotat'.

   Primer 5.14. Pravil'noe upravlenie opciej

 .if ${PORT_OPTIONS:MFOO}
 LIB_DEPENDS+=           libfoo.so:${PORTSDIR}/devel/foo
 CONFIGURE_ARGS+=        --enable-foo
 .else
 CONFIGURE_ARGS+=        --disable-foo
 .endif

   Vo vtorom primere biblioteka libfoo otklyuchena yavnym obrazom. Scenarij
   configure ne vklyuchaet sootvetstvuyuschie funkcii v prilozhenii,
   nesmotrya na prisutstvie biblioteki v sisteme.

  Primechanie:

   Pri opredelennyh usloviyah sokraschennyj sintaksis zapisi uslovij mozhet
   vyzyvat' problemy so slozhnymi konstrukciyami. Esli vy poluchaete oshibki,
   takie kak Malformed conditional, to mozhet byt' ispol'zovan al'ternativnyj
   sintaksis.

 .if !empty(VARIABLE:MVALUE)
 # as an alternative to
 .if ${VARIABLE:MVALUE}

  5.12.4. Vspomogatel'nye makrosy

   Suschestvuet neskol'ko makrosov, uproschayuschih zapis' uslovnyh
   znachenij, kotorye otlichayutsya v zavisimosti ot nabora parametrov.

   Esli peremennaya OPTIONS_SUB imeet znachenie yes, to kazhdyj iz ukazannyh
   v OPTIONS_DEFINE parametrov budet dobavlen v PLIST_SUB. Sleduyuschaya
   zapis':

 OPTIONS_DEFINE= OPT1
 OPTIONS_SUB=    yes

   sootvetstvuet:

 OPTIONS_DEFINE= OPT1

 .include <bsd.port.options.mk>

 .if ${PORT_OPTIONS:MOPT1}
 PLIST_SUB+=     OPT1=""
 .else
 PLIST_SUB+=     OPT1="@comment "
 .endif

   X_CONFIGURE_ENABLE dopisyvaet v CONFIGURE_ARGS stroku
   --enable-${X_CONFIGURE_ENABLE} ili --disable-${X_CONFIGURE_ENABLE} v
   sootvetstvii s sostoyaniem X. Sleduyuschaya zapis':

 OPTIONS_DEFINE= OPT1
 OPT1_CONFIGURE_ENABLE=  test

   sootvetstvuet:

 OPTIONS_DEFINE= OPT1

 .include <bsd.port.options.mk>

 .if ${PORT_OPTIONS:MOPT1}
 CONFIGURE_ARGS+=        --enable-test
 .else
 CONFIGURE_ARGS+=        --disable-test
 .endif

   X_CONFIGURE_WITH dopisyvaet v CONFIGURE_ARGS stroku
   --with-${X_CONFIGURE_WITH} ili --without-${X_CONFIGURE_WITH} v
   sootvetstvii s sostoyaniem X. Sleduyuschaya zapis':

 OPTIONS_DEFINE= OPT1
 OPT1_CONFIGURE_WITH=    test

   sootvetstvuet:

 OPTIONS_DEFINE= OPT1

 .include <bsd.port.options.mk>

 .if ${PORT_OPTIONS:MOPT1}
 CONFIGURE_ARGS+=        --with-test
 .else
 CONFIGURE_ARGS+=        --without-test
 .endif

   Znachenie peremennoj X_CONFIGURE_ON budet dopisano v CONFIGURE_ARGS v
   sootvetstvii s sostoyaniem X. Sleduyuschaya zapis':

 OPTIONS_DEFINE= OPT1
 OPT1_CONFIGURE_ON=      --add-test

   sootvetstvuet:

 OPTIONS_DEFINE= OPT1

 .include <bsd.port.options.mk>

 .if ${PORT_OPTIONS:MOPT1}
 CONFIGURE_ARGS+=        --add-test
 .endif

   Znachenie peremennoj X_CONFIGURE_OFF budet dopisano v CONFIGURE_ARGS v
   sootvetstvii s sostoyaniem X. Sleduyuschaya zapis':

 OPTIONS_DEFINE= OPT1
 OPT1_CONFIGURE_OFF=     --no-test

   sootvetstvuet:

 OPTIONS_DEFINE= OPT1
 .include <bsd.port.options.mk>
 .if ! ${PORT_OPTIONS:MOPT1}
 CONFIGURE_ARGS+=        --no-test
 .endif

   Znachenie peremennoj X_CMAKE_ON budet dopisano v CMAKE_ARGS v sootvetstvii
   s sostoyaniem X. Sleduyuschaya zapis':

 OPTIONS_DEFINE= OPT1
 OPT1_CMAKE_ON=  -DTEST:BOOL=true

   sootvetstvuet:

 OPTIONS_DEFINE= OPT1

 .include <bsd.port.options.mk>

 .if ${PORT_OPTIONS:MOPT1}
 CMAKE_ARGS+=    -DTEST:BOOL=true
 .endif

   Znachenie peremennoj X_CMAKE_OFF budet dopisano v CMAKE_ARGS v
   sootvetstvii s sostoyaniem X. Sleduyuschaya zapis':

 OPTIONS_DEFINE= OPT1
 OPT1_CMAKE_OFF= -DTEST:BOOL=false

   sootvetstvuet:

 OPTIONS_DEFINE= OPT1

 .include <bsd.port.options.mk>

 .if ! ${PORT_OPTIONS:MOPT1}
 CMAKE_ARGS+=    -DTEST:BOOL=false
 .endif

   Dlya lyuboj iz sleduyuschih peremennyh:

     * ALL_TARGET

     * CATEGORIES

     * CFLAGS

     * CPPFLAGS

     * CXXFLAGS

     * CONFIGURE_ENV

     * DISTFILES

     * EXTRA_PATCHES

     * INSTALL_TARGET

     * LDFLAGS

     * MAKE_ARGS

     * MAKE_ENV

     * PATCH_SITES

     * PATCHFILES

     * PLIST_FILES

     * PLIST_DIRS

     * PLIST_DIRSTRY

     * USES

   Znachenie peremennoj X_ABOVEVARIABLE budet dopisano v ABOVEVARIABLE v
   sootvetstvii s sostoyaniem X. Sleduyuschaya zapis':

 OPTIONS_DEFINE= OPT1
 OPT1_USES=      gmake
 OPT1_CFLAGS=    -DTEST

   sootvetstvuet:

 OPTIONS_DEFINE= OPT1

 .include <bsd.port.options.mk>

 .if ${PORT_OPTIONS:MOPT1}
 USES+=          gmake
 CFLAGS+=        -DTEST
 .endif

   Dlya lyubogo iz sleduyuschih tipov zavisimosti:

     * PKG_DEPENDS

     * EXTRACT_DEPENDS

     * PATCH_DEPENDS

     * FETCH_DEPENDS

     * BUILD_DEPENDS

     * LIB_DEPENDS

     * RUN_DEPENDS

   Znachenie peremennoj X_ABOVEVARIABLE budet dopisano v ABOVEVARIABLE v
   sootvetstvii s sostoyaniem X. Sleduyuschaya zapis':

 OPTIONS_DEFINE= OPT1
 OPT1_LIB_DEPENDS=       liba.so:${PORTSDIR}/devel/a

   sootvetstvuet:

 OPTIONS_DEFINE= OPT1

 .include <bsd.port.options.mk>

 .if ${PORT_OPTIONS:MOPT1}
 LIB_DEPENDS+=   liba.so:${PORTSDIR}/devel/a
 .endif

5.13. 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.13.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.13.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.14. Razreshenie konfliktov

   Dlya registracii konflikta mezhdu paketami i portami ispol'zuyutsya tri
   razlichnye peremennye: CONFLICTS, CONFLICTS_INSTALL i CONFLICTS_BUILD.

  Primechanie:

   Peremennye registracii konflikta avtomaticheski opredelyayut peremennuyu
   IGNORE, kotoraya bolee podrobno opisana v Razdel 12.13, <<Pometka
   neustanavlivaemogo porta kak BROKEN, FORBIDDEN ili IGNORE>>.

   Pri udalenii odnogo iz konfliktuyuschih portov celesoobrazno sohranit'
   zapisi CONFLICTS v teh drugih portah v techenii neskol'kih mesyacev,
   chtoby pozabotit'sya o teh pol'zovatelej, kotorye obnovlyayutsya ot
   sluchaya k sluchayu.

  5.14.1. CONFLICTS_INSTALL

   Esli vash paket ne mozhet suschestvovat' vmeste s drugimi (iz-za konflikta
   fajlov, nesovmestimosti vremeni vypolneniya i tak dalee), perechislite
   imena ostal'nyh paketov v peremennoj CONFLICTS_INSTALL. Zdes' vy mozhete
   ispol'zovat' shablony komandnogo interpretatora, takie kak * i ?. Imena
   paketov dolzhny vyglyadet' tak zhe, kak v /var/db/pkg. Pozhalujsta,
   ubedites', chto CONFLICTS_INSTALL ne soderzhit paket samogo `etogo porta.
   V protivnom sluchae ne budet rabotat' ustanovka s ispol'zovaniem
   peremennoj FORCE_PKG_REGISTER. Proverka CONFLICTS_INSTALL vypolnyaetsya
   posle processa sborki i do processa ustanovki.

  5.14.2. CONFLICTS_BUILD

   Esli vash port ne mozhet byt' sobran, kogda uzhe ustanovlen drugoj,
   perechislite imena ostal'nyh portov v peremennoj CONFLICTS_BUILD. Zdes' vy
   mozhete ispol'zovat' shablony komandnogo interpretatora, takie kak * i ?.
   Imena paketov dolzhny vyglyadet' tak zhe, kak v /var/db/pkg. Proverka
   CONFLICTS_BUILD vypolnyaetsya do processa sborki. Konflikty sborki v
   poluchaemom pakete ne zapisyvayutsya.

  5.14.3. CONFLICTS

   Esli vash port ne mozhet byt' sobran, kogda uzhe ustanovlen drugoj, a
   poluchaemyj paket ne mozhet suschestvovat' vmeste s drugimi, perechislite
   imena ostal'nyh paketov v peremennoj CONFLICTS. Zdes' vy mozhete
   ispol'zovat' shablony komandnogo interpretatora, takie kak * i ?. Imena
   paketov dolzhny vyglyadet' tak zhe, kak v /var/db/pkg. Pozhalujsta,
   ubedites', chto CONFLICTS ne soderzhit paket samogo `etogo porta. V
   protivnom sluchae ne budet rabotat' ustanovka s ispol'zovaniem peremennoj
   FORCE_PKG_REGISTER. Proverka CONFLICTS vypolnyaetsya do processov sborki i
   ustanovki.

5.15. Ustanovka fajlov

  5.15.1. 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_LIB - `eto komanda dlya ustanovki dinamicheskih bibliotek.

     * INSTALL_KLD - `eto komanda dlya ustanovki zagruzhaemyh modulej yadra.
       Nekotorye arhitektury predpochitayut, chtoby dlya modulej sohranyalis'
       otladochnye svedeniya, po `etoj prichine ispol'zujte `etu komandu
       vmesto INSTALL_PROGRAM.

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

  5.15.2. Udalenie otladochnoj informacii v binarnyh fajlah i dinamicheskih
  bibliotekah

   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 vypolnit ustanovku i udalenie
   otladochnoj informacii odnovremenno (obratites' k sleduyuschemu razdelu).
   Makros INSTALL_LIB delaet to zhe samoe dlya dinamicheskih bibliotek.

   Esli vam nuzhno udalit' otladochnuyu informaciyu iz fajla bez
   ispol'zovaniya makrosov INSTALL_PROGRAM i INSTALL_LIB, 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.

  5.15.3. Ustanovka celogo dereva fajlov

   Inogda suschestvuet neobhodimost' v ustanovke bol'shogo kolichestva fajlov
   s sohraneniem ih ierarhicheskoj organizacii, t.e. v kopirovanii dereva
   katalogov celikom iz WRKSRC v celevoj katalog vnutri PREFIX.

   Dlya `etoj situacii suschestvuet dva makrosa. Preimuschestvo ot
   ispol'zovaniya `etih makrosov vmesto komandy cp v tom, chto oni
   garantiruyut ustanovku pravil'nogo vladel'ca i prav na konechnye fajly.
   Pervyj makros, COPYTREE_BIN, delaet vse ustanavlivaemye fajly
   ispolnyaemymi, chto podhodit dlya ustanovki v PREFIX/bin. Vtoroj makros,
   COPYTREE_SHARE, ne ustanavlivaet na fajly prava ispolneniya, i, takim
   obrazom, podhodit dlya ustanovki fajlov vnutri kataloga PREFIX/share.

 post-install:
         ${MKDIR} ${EXAMPLESDIR}
         (cd ${WRKSRC}/examples && ${COPYTREE_SHARE} . ${EXAMPLESDIR})

   V `etom primere ustanavlivaetsya soderzhimoe kataloga examples iz
   ustanovochnyh fajlov proizvoditelya v nadlezhaschee mesto dlya primerov
   vashego porta.

 post-install:
         ${MKDIR} ${DATADIR}/summer
         (cd ${WRKSRC}/temperatures && ${COPYTREE_SHARE} "June July August" ${DATADIR}/summer)

   A v `etom primere budut ustanovleny dannye letnih mesyacev v podkatalog
   summer kataloga DATADIR.

   V kachestve tret'ego parametra v makrose COPYTREE_* mozhno peredat'
   dopolnitel'nye parametry find. Naprimer, chtoby v pervom primere
   ustanovit' vse fajly krome fajlov Makefile, mozhno ispol'zovat'
   sleduyuschuyu komandu.

 post-install:
         ${MKDIR} ${EXAMPLESDIR}
         (cd ${WRKSRC}/examples && \
                 ${COPYTREE_SHARE} . ${EXAMPLESDIR} "! -name Makefile")

   Obratite vnimanie, chto `eti makrosy ne proizvodyat dobavlenie
   ustanavlivaemyh fajlov v pkg-plist. Vam vse esche nuzhno ih perechislit'.

  5.15.4. 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 parametra DOCS dlya togo,
   chtoby pol'zovateli mogli vyklyuchit' `eto v fajle /etc/make.conf, kak
   zdes':

 post-install:
 .if ${PORT_OPTIONS:MDOCS}
         ${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.

     * DATADIR_REL preobrazuetsya v share/PORTNAME.

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

     * DOCSDIR_REL preobrazuetsya v share/doc/PORTNAME.

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

     * EXAMPLESDIR_REL preobrazuetsya v share/examples/PORTNAME.

  Primechanie:

   Parametr DOCS upravlyaet ustanovkoj dopolnitel'noj dokumentacii v DOCSDIR.
   `Eto ne otnositsya k standartnym stranicam spravochnika i stranicam info.
   Vse, chto ustanavlivaetsya v DATADIR i EXAMPLESDIR, sootvetstvenno
   upravlyaetsya cherez parametry DATA i EXAMPLES.

   `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 uslovno ustanavlivaemye fajly i katalogi s dokumentaciej dolzhny byt'
   perechisleny v fajle pkg-plist s prefiksom %%PORTDOCS%%, naprimer:

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

   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. Esli
   parametr DOCS ne zadan, to fajly i katalogi, perechislennye v PORTDOCS, ne
   budut ustanovleny i dobavleny v spisok sborki porta. Ustanovka
   dokumentacii v PORTDOCS, kak `eto pokazano vyshe, ostaiotsya za samim
   portom. Tipichnyj primer ispol'zovaniya PORTDOCS vyglyadit sleduyuschim
   obrazom:

 PORTDOCS=       README.* ChangeLog docs/*

  Primechanie:

   `Ekvivalentami PORTDOCS dlya fajlov, ustanavlivaemyh v DATADIR i
   EXAMPLESDIR yavlyayutsya PORTDATA i PORTEXAMPLES sootvetstvenno.

   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. Fajl pkg-message ne nuzhno
   dobavlyat' v pkg-plist.

  5.15.5. Podkatalogi vnutri PREFIX

   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.

                          Glava 6. Osobye soglasheniya

   Soderzhanie

   6.1. Dinamicheskie biblioteki

   6.2. Porty s ogranicheniyami na rasprostranenie

   6.3. Mehanizmy postroeniya

   6.4. Ispol'zovanie GNU autotools

   6.5. Ispol'zovanie GNU gettext

   6.6. Ispol'zovanie Perl

   6.7. Ispol'zovanie X11

   6.8. Ispol'zovanie GNOME

   6.9. Ispol'zovanie Qt

   6.10. Ispol'zovanie KDE

   6.11. Ispol'zovanie Java

   6.12. Veb-prilozheniya, Apache i PHP

   6.13. Ispol'zovanie Python

   6.14. Ispol'zovanie Tcl/Tk

   6.15. Ispol'zovanie Emacs

   6.16. Ispol'zovanie Ruby

   6.17. Ispol'zovanie SDL

   6.18. Ispol'zovanie wxWidgets

   6.19. Ispol'zovanie Lua

   6.20. Ispol'zovanie Xfce

   6.21. Ispol'zovanie Mozilla

   6.22. Ispol'zovanie baz dannyh

   6.23. Zapusk i ostanovka sluzhb (scenarii rc)

   6.24. Dobavlenie pol'zovatelej i grupp

   6.25. Porty, trebuyuschie nalichiya ishodnyh tekstov yadra

   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 USE_LDCONFIG, 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.

 USE_LDCONFIG= yes

   Esli nuzhno, vy mozhete pereopredelit' katalog po umolchaniyu, zadav
   znachenie USE_LDCONFIG, v kotorom 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:

 USE_LDCONFIG= ${PREFIX}/lib/foo ${PREFIX}/lib/bar

   Bud'te dobry pereproverit', t.k. chasto `eto vovse ne yavlyaetsya
   neobhodimym i mozhet byt' resheno inache s pomosch'yu -rpath ili ustanovki
   LD_RUN_PATH vo vremya komponovki (dlya primera smotrite lang/moscow_ml),
   ili s pomosch'yu scenariya-obiortki, kotoryj vystavlyaet LD_LIBRARY_PATH
   pered zapuskom ispolnyaemogo fajla kak `eto delaet www/seamonkey.

   Pri ustanovke 32-razryadnyh bibliotek na 64-razryadnoj sisteme ispol'zujte
   vmesto `etogo USE_LDCONFIG32.

   Postarajtes' sohranyat' nomera versij dinamicheskih bibliotek v formate
   libfoo.so.0. Nash komponovschik pozabotitsya tol'ko o starshem (pervom)
   nomere.

   Esli pri obnovlenii porta uvelichivaetsya starshij nomer versii
   biblioteki, to dlya vseh portov, komponuemyh s zatronutoj bibliotekoj,
   sleduet uvelichit' znachenie PORTREVISION dlya forsirovaniya
   perekompilyacii s novoj versiej biblioteki.

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

   Fajly, opredelennye v peremennoj NOFETCHFILES, ne budut izvlekat'sya ni iz
   odnogo iz MASTER_SITES. Primerom takogo fajla yavlyaetsya fajl,
   postavlyaemyj na CD-ROM.

   Instrumenty, proveryayuschie dostupnost' `etih fajlov na MASTER_SITES,
   dolzhny ignorirovat' `eti fajly i ne soobschat' o nih.

  6.2.4. 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.5. 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.2.6. Primery ispol'zovaniya

   Predpochtitel'nym sposobom realizacii utverzhdeniya "arhivy ishodnyh
   tekstov dlya `etogo porta dolzhny zagruzhat'sya samostoyatel'no"
   yavlyaetsya sleduyuschee:

 .if !exists(${DISTDIR}/${DISTNAME}${EXTRACT_SUFX})
 IGNORE=         may not be redistributed because of licensing reasons. Please visit some-website to accept their license and download ${DISTFILES} into ${DISTDIR}
 .endif

   `Eto odnovremenno i informiruet pol'zovatelya, i ustanavlivaet nuzhnye
   metadannye na pol'zovatel'skoj mashine dlya ispol'zovaniya
   avtomaticheskimi programmami.

   Obratite vnimanie, chto dannaya klyauza dolzhna predshestvovat'
   podklyucheniyu fajla bsd.port.pre.mk.

6.3. Mehanizmy postroeniya

  6.3.1. Parallel'noe postroenie portov

   Infrastruktura portov FreeBSD podderzhivaet parallel'noe postroenie s
   ispol'zovaniem mnozhestvennyh podprocessov make, chto pozvolyaet sistemam
   SMP zadejstvovat' vsyu dostupnuyu moschnost' CPU, tem samym delaya
   postroenie portov bolee bystrym i `effektivnym.

   `Eto dostigaetsya putem peredachi flaga -jX komande make(1). K
   sozhaleniyu, ne vse porty podderzhivayut parallel'nuyu sborku dostatochno
   horosho. Po`etomu trebuetsya vklyuchat' `etot mehanizm yavnym obrazom
   putem dobavleniya stroki MAKE_JOBS_SAFE=yes v Makefile gde-nibud' posle
   razdela s ob"yavleniyami zavisimostej.

   Drugoj opciej upravleniya `etim mehanizmom s tochki zreniya
   soprovozhdayuschego yavlyaetsya MAKE_JOBS_UNSAFE=yes. `Eta peremennaya
   ispol'zuetsya v sluchae, kogda izvestno, chto port lomaetsya s -jX, i
   pol'zovatel' forsiruet ispol'zovanie mnogoprocessornoj kompilyacii dlya
   vseh portov s peremennoj FORCE_MAKE_JOBS=yes v /etc/make.conf.

  6.3.2. make, gmake i imake

   Esli vash port ispol'zuet GNU make, to ustanovite USES= gmake.

   Tablica 6.1. Peremennye dlya portov, ispol'zuyuschih gmake

   Peremennaya                       Znachenie                       
   USES= gmake Dlya sborki porta trebuetsya gmake.                   
   GMAKE       Polnyj put' k komande gmake, esli otsutstvuet v PATH. 

   Esli vash port yavlyaetsya prilozheniem X, kotoroe sozdaet fajly Makefile
   iz Imakefile, ispol'zuya imake, to ustanovite USES= imake. `Eto zastavit
   stadiyu konfigurirovaniya avtomaticheski vypolnit' xmkmf -a. Esli flag -a
   predstavlyaet dlya vashego porta problemu, to ustanovite XMKMF=xmkmf. Esli
   port ispol'zuet imake, no ne ponimaet cel' install.man, to sleduet
   ustanovit' NO_INSTALL_MANPAGES=yes.

   Esli ishodnyj Makefile vashego porta imeet chto-nibud' pomimo all v
   kachestve osnovnoj celi postroeniya, to zadajte sootvetstvuyuschee
   znachenie ALL_TARGET. To zhe kasaetsya install i INSTALL_TARGET.

  6.3.3. Scenarij configure

   Esli vash port ispol'zuet scenarij configure dlya polucheniya fajlov
   Makefile iz fajlov Makefile.in, to ustanovite GNU_CONFIGURE=yes. Esli vy
   hotite dat' dopolnitel'nye parametry scenariyu configure (argumentom po
   umolchaniyu yavlyaetsya --prefix=${PREFIX}
   --infodir=${PREFIX}/${INFO_PATH} --mandir=${MANPREFIX}/man
   --build=${CONFIGURE_TARGET}), ustanovite `eti parametry v CONFIGURE_ARGS.
   Dopolnitel'nye peremennye okruzheniya mozhno peredat', ispol'zuya
   peremennuyu CONFIGURE_ENV.

   Tablica 6.2. Peremennye dlya portov, ispol'zuyuschih configure

     Peremennaya                            Znachenie                         
   GNU_CONFIGURE    Port ispol'zuet scenarij configure dlya podgotovki        
                    postroeniya.                                              
                    To zhe, chto i GNU_CONFIGURE, krome togo, chto cel'       
   HAS_CONFIGURE    configure po umolchaniyu ne dobavlyaetsya v               
                    CONFIGURE_ARGS.                                           
   CONFIGURE_ARGS   Dopolnitel'nye parametry, peredavaemye scenariyu          
                    configure.                                                
   CONFIGURE_ENV    Dopolnitel'nye peremennye okruzheniya, zadavaemye dlya    
                    zapuska scenariya configure.                              
                    Pereopredelit' cel' configure po umolchaniyu. Znacheniem  
   CONFIGURE_TARGET po umolchaniyu yavlyaetsya                                
                    ${MACHINE_ARCH}-portbld-freebsd${OSREL}.                  

  6.3.4. Ispol'zovanie cmake

   Esli vash port ispol'zuet CMake, opredelite USES= cmake ili USES=
   cmake:outsource dlya postroeniya vo vneshnem kataloge (sm. nizhe).

   Tablica 6.3. Peremennye dlya portov, ispol'zuyuschih cmake

      Peremennaya                           Znachenie                         
   CMAKE_ARGS        Specifichnye dlya porta flagi CMake, peredavaemye cmake. 
                     Tip postroeniya (predopredelionnye profili postroeniya   
   CMAKE_BUILD_TYPE  CMake). Po umolchaniyu Release, Debug pri ispol'zovanii  
                     WITH_DEBUG.                                              
   CMAKE_ENV         Peremennye okruzheniya dlya peredachi cmake. Po          
                     umolchaniyu ${CONFIGURE_ENV}.                            
   CMAKE_SOURCE_PATH Put' k katalogu s ishodnym kodom. Po umolchaniyu         
                     ${WRKSRC}.                                               

   CMake podderzhivaet sleduyuschie profili postroeniya: Debug, Release,
   RelWithDebInfo i MinSizeRel. Profili Debug i Release uchityvayut sistemnye
   flagi *FLAGS; RelWithDebInfo i MinSizeRel sootvetstvenno opredelyayut
   CFLAGS so znacheniem -O2 -g i -Os -DNDEBUG. Znachenie CMAKE_BUILD_TYPE
   `eksportiruetsya v nizhnem registre v PLIST_SUB i dolzhno ispol'zovat'sya,
   esli port ustanavlivaet fajly *.cmake v zavisimosti ot tipa postroeniya
   (dlya primera posmotrite na deskutils/strigi). Sleduet uchityvat', chto
   nekotorye proekty mogut opredelyat' sobstvennye profili postroeniya i/ili
   forsirovat' konkretnyj tip postroeniya cherez ustanovku CMAKE_BUILD_TYPE v
   fajlah CMakeLists.txt . Dlya togo chtoby port dlya takogo proekta
   uchityval CFLAGS i WITH_DEBUG, iz `etih fajlov dolzhny byt' udaleny
   znacheniya CMAKE_BUILD_TYPE.

   Bol'shinstvo proektov, osnovannyh na CMake, podderzhivayut metod vneshnego
   (out-of-source) postroeniya. Dlya porta vneshnee postroenie mozhno
   zaprosit' s ispol'zovaniem suffiksa :outsource. V `etom sluchae
   CONFIGURE_WRKSRC, BUILD_WRKSRC i INSTALL_WRKSRC budut imet' znachenie
   ${WRKDIR}/.build dlya kataloga, soderzhaschego fajly, poluchaemye na
   `etapah konfiguracii i postroeniya; pri `etom katalog s ishodnym kodom
   budet ostavat'sya bez izmenenij.

   Primer 6.1. Primer ispol'zovaniya USES= cmake

   Sleduyuschij otryvok demonstriruet ispol'zovanie CMake dlya porta.
   CMAKE_SOURCE_PATH obychno ne trebuetsya, no mozhet byt' ustanovlen, kogda
   ishodnyj kod ne nahoditsya v verhnem kataloge ili esli port ispol'zuetsya
   dlya postroeniya chasti proekta.

 USES=                   cmake:outsource
 CMAKE_SOURCE_PATH=      ${WRKSRC}/subproject

  6.3.5. Ispol'zovanie scons

   Esli vash port ispol'zuet SCons, opredelite USE_SCONS=yes.

   Tablica 6.4. Peremennye dlya portov, ispol'zuyuschih scons

    Peremennaya                            Znachenie                          
   SCONS_ARGS     Specifichnye dlya porta flagi SCons, peredavaemye           
                  okruzheniyu SCons.                                          
   SCONS_BUILDENV Peremennye dlya ustanovki v sistemnom okruzhenii.           
   SCONS_ENV      Peremennye dlya ustanovki v okruzhenii SCons.               
   SCONS_TARGET   Poslednij parametr dlya peredachi SCons, pohozhij na        
                  MAKE_TARGET.                                                

   Dlya togo, chtoby storonnij SConstruct sootvetstvoval vsemu, chto
   peredaetsya SCons v peremennoj SCONS_ENV (samoe glavnoe, `eto
   CC/CXX/CFLAGS/CXXFLAGS), primenite patch k SConstruct, tak chtoby
   peremennaya postroeniya Environment vyglyadela sleduyuschim obrazom:

 env = Environment(**ARGUMENTS)

   V dal'nejshem ee mozhno izmenit' pri pomoschi env.Append i env.Replace.

6.4. Ispol'zovanie GNU autotools

  6.4.1. Vvedenie

   Razlichnye instrumenty GNU autotools predostavlyayut mehanizm abstrakcii
   dlya postroeniya chastej programmnogo obespecheniya na shirokom nabore
   operacionnyh sistem i apparatnyh arhitektur. Vnutri Kollekcii Portov
   otdel'nyj port mozhet ispol'zovat' `eti instrumenty pri pomoschi prostyh
   konstrukcij:

 USE_AUTOTOOLS= tool:version[:operation] ...

   K momentu napisaniya tool mozhet byt' odnim iz libtool, libltdl, autoconf,
   autoheader, automake ili aclocal.

   version ukazyvaet konkretnuyu versiyu ispol'zuemogo instrumenta
   (dejstvuyuschie versii smotrite v
   devel/{automake,autoconf,libtool}[0-9]+).

   operation yavlyaetsya neobyazatel'nym rasshireniem i ukazyvaet na sposob
   ispol'zovaniya instrumenta.

   Odnovremenno mozhet byt' ukazano neskol'ko instrumentov, dobavlyaya ih vse
   na odnoj stroke ili ispol'zuya konstrukciyu Makefile +=.

   V zaklyuchenie, suschestvuet special'nyj instrument po nazyvaniyu
   autotools, kotoryj yavlyaetsya udobnoj funkciej pri ustanovke vseh
   dostupnyh versij autotools dlya vozmozhnosti provedeniya kross-razrabotki.
   `Eto takzhe mozhet byt' dostignuto putem ustanovki porta devel/autotools.

  6.4.2. libtool

   Dinamicheskie biblioteki, ispol'zuyuschie infrastrukturu postroeniya GNU,
   obychno ispol'zuyut libtool dlya nastrojki kompilyacii i ustanovki
   dinamicheskih bibliotek v sootvetstvii s osobennostyami dannoj
   operacionnoj sistemy. V tipichnoj praktike ispol'zuetsya kopirovanie
   vstroennogo v prilozhenie libtool. Esli vam nuzhno ispol'zovat' vneshnyuyu
   komandu libtool, to vy mozhete ispol'zovat' versiyu, postavlyaemuyu
   Kollekciej Portov:

 USE_AUTOTOOLS= libtool:version[:env]

   Pri otsutstvii dopolnitel'nyh operacij, libtool:version soobschaet
   infrastrukture postroeniya o primenenii patcha k scenariyu configure s
   ustanovlennoj v sisteme kopiej libtool. Podrazumevaetsya ispol'zovanie The
   GNU_CONFIGURE Bolee togo, nekotorye peremennye make i obolochki shell
   budut naznacheny dlya dal'nejshego ispol'zovaniya `etim portom.
   Podrobnosti smotrite v bsd.autotools.mk.

   Pri ispol'zovanii operacii :env budet nastroeno tol'ko okruzhenie.

   Nakonec, LIBTOOLFLAGS i LIBTOOLFILES mozhno ustanovit' po zhelaniyu,
   chtoby pereopredelit' naibolee veroyatnye argumenty dlya libtool i fajly,
   prednaznachennye dlya izmeneniya. Bol'shinstvu portov `eto skoree vsego ne
   ponadobitsya. Dlya dal'nejshih podrobnostej smotrite bsd.autotools.mk.

  6.4.3. libltdl

   Nekotorye porty zadejstvuyut paket s bibliotekoj libltdl, kotoraya
   yavlyaetsya chast'yu komplekta libtool. Ispol'zovanie `etoj biblioteki ne
   vyzyvaet avtomaticheskoe ispol'zovanie samoj libtool, i, takim obrazom,
   obespechivaetsya otdel'naya konstrukciya.

 USE_AUTOTOOLS= libltdl:version

   Vsio, chto v nastoyaschee vremya ona delaet, `eto dobavlenie LIB_DEPENDS
   dlya podhodyaschego porta libltdl, potomu ona predostavlyaetsya kak
   udobnaya funkciya dlya pomoschi v ustranenii vsyakih zavisimostej ot
   portov autotools vne infrastruktury USE_AUTOTOOLS. Dlya `etogo instrumenta
   ne suschestvuet neobyazatel'nyh operacij.

  6.4.4. autoconf i autoheader

   Nekotorye porty ne soderzhat scenarij configure, no soderzhat shablon
   autoconf v fajle configure.ac. Vy mozhete ispol'zovat' sleduyuschie
   prisvoeniya, chtoby pozvolit' autoconf sozdat' scenarij configure, a
   autoheader sozdat' zagolovki shablona dlya ispol'zovaniya v scenarii
   configure.

 USE_AUTOTOOLS=  autoconf:version[:env]

   i

 USE_AUTOTOOLS=  autoheader:version

   kotorye takzhe podrazumevayut ispol'zovanie autoconf:version.

   Analogichno komande libtool, podklyuchenie neobyazatel'noj operacii :env
   vsego lish' nastraivaet okruzhenie dlya dal'nejshego ispol'zovaniya. Bez
   `etogo vypolnyaetsya nalozhenie patchej i perekonfigurirovanie porta.

   Dopolnitel'nye neobyazatel'nye peremennye AUTOCONF_ARGS i AUTOHEADER_ARGS
   mozhno pereopredelit' v Makefile porta, esli ukazano yavnym obrazom. Kak i
   s `ekvivalentami libtool, bol'shinstvu portov `eto vryad li ponadobitsya.

  6.4.5. automake i aclocal

   Nekotorye pakety soderzhat tol'ko fajly Makefile.am. Oni dolzhny byt'
   preobrazovany v fajly Makefile.in s ispol'zovaniem automake i dal'nejshej
   obrabotkoj configure dlya polucheniya nastoyaschego Makefile.

   Analogichno, inogda pakety ne postavlyayutsya s vlozhennymi fajlami
   aclocal.m4, snova trebuemyh dlya postroeniya programmnogo obespecheniya.
   `Etogo mozhno dostich' s aclocal, kotoraya prosmatrivaet configure.ac ili
   configure.in.

   aclocal imeet pohozhuyu svyaz' s automake, kak u autoheader s autoconf,
   chto opisano v predyduschej glave. aclocal podrazumevaet ispol'zovanie
   automake, takim obrazom, my imeem:

 USE_AUTOTOOLS=  automake:version[:env]

   i

 USE_AUTOTOOLS=  aclocal:version

   kotorye takzhe podrazumevayut ispol'zovanie automake:version.

   Takzhe kak i dlya libtool i autoconf, podklyuchenie neobyazatel'noj
   operacii :env vsego lish' ustanavlivaet okruzhenie dlya dal'nejshego
   pol'zovaniya. Bez `etogo vypolnyaetsya rekonfigurirovanie `etogo porta.

   Kak i v sluchae s autoconf i autoheader, obe automake i aclocal imeyut
   neobyazatel'nye peremennye AUTOMAKE_ARGS i ACLOCAL_ARGS, sootvetstvenno,
   kotorye pri neobhodimosti mozhno pereopredelit' v Makefile porta.

6.5. Ispol'zovanie GNU gettext

  6.5.1. Prostoj variant ispol'zovaniya

   Esli dlya vashego porta trebuetsya gettext, dobav'te USES= gettext, i vash
   port unasleduet zavisimost' ot devel/gettext. Razdel 15.1, <<Znacheniya
   USES>> soderzhit perechen' drugih znachenij dlya ispol'zovaniya gettext.

   Dovol'no rasprostranennym sluchaem yavlyaetsya ispol'zovanie v porte
   gettext i configure. Kak pravilo, GNU configure sposoben nahodit' gettext
   avtomaticheski. Esli on vse zhe ne smozhet `eto sdelat', to podskazki dlya
   razmescheniya gettext mozhno peredat' cherez peremennye okruzheniya
   CPPFLAGS i LDFLAGS:

 USES=   gettext
 CPPFLAGS+=      -I${LOCALBASE}/include
 LDFLAGS+=       -L${LOCALBASE}/lib

 GNU_CONFIGURE=  yes

   Konechno zhe, `etot kod mozhno zapisat' v bolee kompaktnom vide, esli
   peredavat' flagi v configure ne trebuetsya:

 USES=   gettext
 GNU_CONFIGURE=  yes

  6.5.2. Optimal'noe ispol'zovanie

   Nekotorye programmnye produkty pozvolyayut otklyuchat' NLS, k primeru
   cherez peredachu parametra --disable-nls scenariyu configure. V `etom
   sluchae vash port dolzhen ispol'zovat' gettext, v zavisimosti ot
   znacheniya NLS. Dlya portov nebol'shoj ili srednej slozhnosti vy mozhete
   polagat'sya na sleduyuschuyu idiomu:

 GNU_CONFIGURE=          yes

 .include <bsd.port.options.mk>

 .if ${PORT_OPTIONS:MNLS}
 USES+=                  gettext
 PLIST_SUB+=             NLS=""
 .else
 CONFIGURE_ARGS+=        --disable-nls
 PLIST_SUB+=             NLS="@comment "
 .endif

 .include <bsd.port.mk>

   Sleduyuschij punkt v vashem spiske del razobrat'sya, chtoby fajly kataloga
   soobscheniya vklyuchalis' v spisok upakovki po usloviyu. CHast',
   vhodyaschaya v Makefile, uzhe obespechena `etoj idiomoj. Ostal'noe
   ob"yasnyaetsya v glave prodvinutye praktiki pkg-plist. Vkratce, kazhdoe
   vhozhdenie %%NLS%% v pkg-plist budet zameneno na <<@comment >>, esli NLS
   vyklyuchen, ili pustoj strokoj, esli vklyuchen. V rezul'tate stroki,
   predvaryaemye %%NLS%%, stanut kommentariyami v itogovom liste upakovki,
   esli NLS vyklyuchen; inache, prefiks budet prosto udalen. Vsio, chto vam
   nuzhno, `eto vstavit' %%NLS%% pered kazhdym putem k fajlu kataloga
   soobschenij v pkg-plist. Naprimer:

 %%NLS%%share/locale/fr/LC_MESSAGES/foobar.mo
 %%NLS%%share/locale/no/LC_MESSAGES/foobar.mo

   V osobo slozhnyh sluchayah vam ponadobit'sya ispol'zovat' bolee
   prodvinutye tehniki, chem dannyj recept, takie kak dinamicheskie spiski
   upakovki.

  6.5.3. Upravlenie katalogami soobschenij

   Suschestvuet moment, kotoryj sleduet uchityvat' pri ustanovke fajlov
   katalogov soobschenij. Celevye katalogi dlya razmescheniya, raspolozhennye
   pod LOCALBASE/share/locale, redko kogda dolzhny sozdavat'sya i udalyat'sya
   portom. Dlya naibolee populyarnyh yazykov imeyutsya sobstvennye katalogi,
   perechislennye v PORTSDIR/Templates/BSD.local.dist. Katalogi dlya
   mnozhestva drugih yazykov upravlyayutsya s pomosch'yu porta devel/gettext.
   Obratite vnimanie na ego pkg-plist i posmotrite, kuda dannyj port
   sobiraetsya ustanovit' fajly katalogov soobschenij dlya edinstvennogo v
   svoem rode yazyka.

6.6. Ispol'zovanie Perl

   Esli MASTER_SITES ustanovlena v znachenie MASTER_SITE_PERL_CPAN, to
   predpochtitel'nym znacheniem MASTER_SITE_SUBDIR yavlyaetsya imya ierarhii
   verhnego urovnya. Naprimer, rekomenduemym znacheniem dlya p5-Module-Name
   yavlyaetsya Module. Ierarhiyu verhnego urovnya mozhno posmotret' na sajte
   cpan.org. `Eto podderzhivaet port v rabochem sostoyanii pri izmenenii
   modulya avtorom.

   Isklyucheniem `etogo pravila yavlyaetsya otsutstvie sootvetstvuyuschego
   kataloga ili fajla s distributivom v `etom kataloge. V `etom sluchae v
   kachestve MASTER_SITE_SUBDIR razreshaetsya ispol'zovat' id avtora.

   Vse iz nastraivaemyh knobs nizhe prinimayut libo YES, libo stroku s
   versiej vida 5.8.0+. YES oznachaet, chto dannyj port mozhno ispol'zovat' s
   lyuboj iz podderzhivaemyh versij Perl. Esli port rabotaet tol'ko s
   nekotorymi versiyami Perl, to `eto mozhno oboznachit' pri pomoschi stroki
   s versiej, ukazyvayuschej na minimal'nuyu versiyu (primer: 5.7.3+),
   maksimal'nuyu versiyu (primer: 5.8.0-) ili tochnuyu versiyu (primer:
   5.8.3).

   Tablica 6.5. Peremennye dlya portov, ispol'zuyuschih Perl

     Peremennaya                           Znachenie                          
   USE_PERL5       Perl 5 ispol'zuetsya dlya postroeniya i raboty.            
   USE_PERL5_BUILD Perl 5 ispol'zuetsya dlya postroeniya.                     
   USE_PERL5_RUN   Perl 5 ispol'zuetsya vo vremya raboty.                     
                   Polnyj put' k interpretatoru Perl 5, libo v sisteme, libo  
   PERL            ustanovlennomu 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.                                                 
   PERL_MODBUILD   Konfiguraciya, postroenie i ustanovka s ispol'zovaniem     
                   Module::Build. Vlechiot PERL_CONFIGURE.                    

   Peremennye tol'ko dlya                      Znachenie                      
          chteniya        
   PERL_VERSION           Polnaya versiya ustanovlennogo Perl (naprimer,      
                          5.8.9).                                             
   PERL_LEVEL             Ustanovlennaya versiya Perl v forme celogo chisla   
                          vida MNNNPP (naprimer, 500809).                     
   PERL_ARCH              Mesto, v kotorom Perl hranit arhitekturno-zavisimye 
                          biblioteki. Po umolchaniyu `eto ${ARCH}-freebsd.    
   PERL_PORT              Nazvanie ustanovlennogo porta Perl, (k primeru,     
                          perl5).                                             
                          Imya kataloga, kuda pomeschayutsya specifichnye     
   SITE_PERL              dlya sajta pakety Perl. `Eto znachenie              
                          dobavlyaetsya k PLIST_SUB.                          

  Primechanie:

   Porty dlya modulej Perl, kotorye ne imeyut oficial'nogo vebsajta, dolzhny
   ukazyvat' cpan.org v stroke WWW v fajle pkg-descr. Predpochtitel'naya
   forma URL http://search.cpan.org/dist/Module-Name/ (vklyuchaya
   zavershayuschij sl`esh).

  Primechanie:

   Ne ispol'zujte ${SITE_PERL} v ob"yavlenii zavisimostej. Ispol'zovanie
   `etoj konstrukcii podrazumevaet nalichie podklyuchennogo bsd.perl.mk, chto
   ne vsegda tak. Porty, zavisimye ot `etogo porta, poluchat nepravil'nye
   zavisimosti, esli fajly `etogo porta budut peremescheny pri posleduyuschem
   obnovlenii. Pravil'nyj sposob ob"yavleniya zavisimostej dlya modulej Perl
   pokazan v primere nizhe.

   Primer 6.2. Primer zavisimosti Perl

 p5-IO-Tee>=0.64:${PORTSDIR}/devel/p5-IO-Tee

6.7. Ispol'zovanie X11

  6.7.1. Komponenty X.Org

   X.Org yavlyaetsya realizaciej X11, dostupnoj v Kollekcii Portov. Esli
   vashe prilozhenie zavisit ot komponentov X, ustanovite v peremennuyu
   USE_XORG v perechen' trebuemyh komponentov. K nastoyaschemu vremeni
   dostupnymi komponentami yavlyayutsya:

   bigreqsproto compositeproto damageproto dmx dmxproto dri2proto evieproto
   fixesproto fontcacheproto fontenc fontsproto fontutil glproto ice
   inputproto kbproto libfs oldx pciaccess pixman printproto randrproto
   recordproto renderproto resourceproto scrnsaverproto sm trapproto
   videoproto x11 xau xaw xaw6 xaw7 xbitmaps xcmiscproto xcomposite xcursor
   xdamage xdmcp xevie xext xextproto xf86bigfontproto xf86dgaproto
   xf86driproto xf86miscproto xf86rushproto xf86vidmodeproto xfixes xfont
   xfontcache xft xi xinerama xineramaproto xkbfile xkbui xmu xmuu
   xorg-server xp xpm xprintapputil xprintutil xproto xproxymngproto xrandr
   xrender xres xscrnsaver xt xtrans xtrap xtst xv xvmc xxf86dga xxf86misc
   xxf86vm.

   Vsegda aktual'nyj perechen' mozhno najti v /usr/ports/Mk/bsd.xorg.mk.

   Proekt Mesa yavlyaetsya popytkoj obespechit' svobodnuyu realizaciyu
   OpenGL. Vy mozhete ukazat' zavisimost' ot razlichnyh komponentov `etogo
   proekta pri pomoschi peremennoj USE_GL. Dejstvitel'nye opcii: glut, glu,
   glw, glew, gl i linux. Dlya obratnoj sovmestimosti znachenie yes
   sootvetstvuet glu.

   Primer 6.3. Primer dlya USE_XORG

 USE_XORG=   xrender xft xkbfile xt xaw
 USE_GL=     glu

   Tablica 6.6. Peremennye dlya portov, ispol'zuyuschih X

   USES= imake Port ispol'zuet imake.                                         
   XMKMF       Zadaiotsya marshrut do xmkmf, esli on otsutstvuet v peremennoj 
               okruzheniya PATH. Po umolchaniyu `eto xmkmf -a.                

   Primer 6.4. Ispol'zovanie peremennyh X11 v porte

 # Ispol'zovat' nekotorye biblioteki X11
 USE_XORG=      x11 xpm

  6.7.2. Porty, kotorym trebuetsya Motif

   Esli vashemu portu trebuetsya Motif, zadajte peremennuyu USES= motif v
   fajle Makefile. Realizaciya Motif, ispol'zuemaya po umolchaniyu,
   nahoditsya v x11-toolkits/open-motif. Pol'zovateli vmesto `etogo mogut
   vybrat' x11-toolkits/lesstif cherez ustanovku peremennoj WANT_LESSTIF.

   Peremennaya MOTIFLIB budet ustanovlena v bsd.port.mk, chtoby ssylat'sya na
   sootvetstvuyuschuyu biblioteku Motif. Pozhalujsta, izmenite ishodnye
   teksty vashego porta na ispol'zovanie ${MOTIFLIB} vezde, gde upominaetsya
   biblioteka Motif, v pervonachal'nom Makefile ili Imakefile.

   Suschestvuet dva obschih sluchaya:

     * Esli 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/local/lib -lXm ili /usr/local/lib/libXm.a, tak chto net nuzhdy
   vperedi dobavlyat' -L ili -l.

  6.7.3. SHrifty dlya X11

   Esli vash port ustanavlivaet shrifty dlya X Window System, pomestite ih v
   katalog LOCALBASE/lib/X11/fonts/local.

  6.7.4. Poluchenie poddel'nogo DISPLAY, ispol'zuya Xvfb

   Nekotorye prilozheniya dlya uspeshnoj kompilyacii trebuyut nalichie
   rabotayuschego displeya X11. `Eto sozdaet problemu dlya mashin, kotorye
   rabotayut v rezhime headless. Pri ispol'zovanii sleduyuschego
   kanonicheskogo haka infrastruktura postroeniya zapustit server X v
   virtual'nom frejmbufere. Zatem peremennaya rabotayuschego DISPLAY
   peredaetsya pri postroenii.

 USES=   display

  6.7.5. `Elementy rabochego stola

   `Elementy rabochego stola (standarta Freedesktop) predostavlyayut sposob
   avtomaticheskoj nastrojki funkcij rabochego stola pri ustanovke novoj
   programmy, ne trebuya vmeshatel'stva pol'zovatelya. Naprimer, novye
   programmy avtomaticheski otobrazhayutsya v menyu prilozhenij sovmestimyh
   okruzhenij rabochego stola. `Elementy rabochego stola iznachal'no
   poyavilis' v okruzhenii rabochego stola GNOME, no v nastoyaschee vremya
   yavlyayutsya standartom i takzhe rabotayut s KDE i Xfce. Takaya
   nebol'shaya avtomatizaciya predostavlyaet real'noe udobstvo dlya
   pol'zovatelya, i posemu `elementy rabochego stola privetstvuyutsya v
   prilozheniyah, kotorye mozhno ispol'zovat' v okruzhenii rabochego stola.

    6.7.5.1. Ispol'zovanie predopredelennyh fajlov .desktop

   Porty, vklyuchayuschie predopredelennye fajly *.desktop, dolzhny
   vklyuchat' `eti fajly v pkg-plist i ustanavlivat' ih v katalog
   $LOCALBASE/share/applications. Dlya ustanovki `etih fajlov ispol'zuetsya
   makros INSTALL_DATA.

    6.7.5.2. Obnovlenie bazy dannyh rabochego stola

   Esli v fajle porta portname.desktop imeetsya zapis' MimeType, to baza
   dannyh rabochego stola dolzhna byt' obnovlena posle ustanovki i udaleniya.
   Dlya `etogo ukazhite USES= desktop-file-utils.

    6.7.5.3. Sozdanie `elementov rabochego stola s ispol'zovaniem
    DESKTOP_ENTRIES

   `Elementy rabochego stola mozhno legko sozdavat' dlya prilozhenij,
   ispol'zuya peremennuyu DESKTOP_ENTRIES. Budet avtomaticheski sozdan,
   ustanovlen i dobavlen v pkg-plist fajl s nazvaniem name.desktop.
   Sintaksis:

 DESKTOP_ENTRIES=  "NAME" "COMMENT" "ICON" "COMMAND" "CATEGORY" StartupNotify

   Perechen' vozmozhnyh kategorij dostupen na vebsajte Freedesktop.
   StartupNotify otobrazit, podderzhivaet li prilozhenie uvedomleniya o
   zapuske. Kak pravilo, `eto graficheskij indikator chasy vmesto ukazatelya
   myshi, menyu ili panel', kotorye uvedomlyayut pol'zovatelya o zagruzke
   programmy. Programma, podderzhivayuschaya uvedomleniya o zapuske, ochistit
   `etot indikator posle zapuska. Programmy, nesovmestimye s uvedomleniyami o
   zapuske, ne budut ochischat' indikator (vozmozhno, vyzyvaya putanicu i
   privodya pol'zovatelej v beshenstvo), i po`etomu dolzhny imet'
   StartupNotify v vyklyuchennom sostoyanii false; togda indikator ne budet
   otobrazhat'sya sovsem.

   Primer:

 DESKTOP_ENTRIES=  "ToME" "Roguelike game based on JRR Tolkien's work" \
                   "${DATADIR}/xtra/graf/tome-128.png" \
                   "tome -v -g" "Application;Game;RolePlaying;" \
                   false

6.8. 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.9. Ispol'zovanie Qt

  6.9.1. Porty, dlya kotoryh trebuetsya Qt

   Tablica 6.7. Peremennye dlya portov, ispol'zuyuschih Qt

                 Port ispol'zuet instrumental'nyj paket Qt. Edinstvennym      
   USE_QT_VER    vozmozhnym znacheniem yavlyaetsya 3. Sootvetstvuyuschie      
                 parametry peredayutsya v scenarij configure i make.          
                 Ukazyvaet instrumenty i biblioteki v kachestve zavisimostej  
   USE_QT4       dlya portov, kotorye ispol'zuyut Qt 4. Dlya polucheniya      
                 podrobnostej smotrite vybor komponentov Qt 4.                
   QT_PREFIX     Ustanavlivaetsya v znachenie, soderzhaschee put' k           
                 ustanovlennomu Qt (peremennaya tol'ko dlya chteniya).        
                 Ustanavlivaetsya v znachenie, soderzhaschee put' k moc       
   MOC           (peremennaya tol'ko dlya chteniya). Po umolchaniyu           
                 ustanavlivaetsya v sootvetstvii so znacheniem USE_QT_VER.    
                 Dopolnitel'nye flagi kompilyatora dlya instrumental'nogo     
   QTCPPFLAGS    paketa Qt, peredavaemye cherez peremennuyu CONFIGURE_ENV. Po 
                 umolchaniyu ustanavlivaetsya v sootvetstvii so znacheniem    
                 USE_QT_VER.                                                  
                 Dopolnitel'nye flagi komponovki dlya instrumental'nogo       
   QTCFGLIBS     paketa Qt, peredavaemye cherez peremennuyu CONFIGURE_ENV. Po 
                 umolchaniyu ustanavlivaetsya v sootvetstvii so znacheniem    
                 USE_QT_VER.                                                  
   QTNONSTANDARD Podavlyaet izmenenie CONFIGURE_ENV, CONFIGURE_ARGS, CPPFLAGS 
                 i MAKE_ENV.                                                  

   Tablica 6.8. Dopolnitel'nye peremennye dlya portov, ispol'zuyuschih Qt 4.x

   UIC           Ustanavlivaet put' k uic (peremennaya tol'ko dlya chteniya). 
   QMAKE         Ustanavlivaet put' k qmake (peremennaya tol'ko dlya          
                 chteniya).                                                   
   QMAKESPEC     Ustanavlivaet put' k konfiguracionnomu fajlu dlya qmake      
                 (peremennaya tol'ko dlya chteniya).                          
   QMAKEFLAGS    Dopolnitel'nye flagi dlya qmake.                             
   QT_INCDIR     Ustanavlivaet katalogi dlya zagolovkov Qt 4 (peremennaya     
                 tol'ko dlya chteniya).                                       
   QT_LIBDIR     Ustanavlivaet put' k bibliotekam Qt 4 (peremennaya tol'ko    
                 dlya chteniya).                                              
   QT_PLUGINDIRC Ustanavlivaet put' k plaginam Qt 4 (peremennaya tol'ko dlya  
                 chteniya).                                                   

   Kogda peremennaya USE_QT_VER opredelena so znacheniem 3, scenariyu
   configure mozhno peredavat' nekotorye poleznye nastrojki:

 CONFIGURE_ARGS+= --with-qt-includes=${QT_PREFIX}/include \
                  --with-qt-libraries=${QT_PREFIX}/lib \
                  --with-extra-libs=${LOCALBASE}/lib \
                  --with-extra-includes=${LOCALBASE}/include
 CONFIGURE_ENV+=  MOC="${MOC}" LIBS="${QTCFGLIBS}" \
                  QTDIR="${QT_PREFIX}" KDEDIR="${KDE_PREFIX}"
 CPPFLAGS+=       ${QTCPPFLAGS}

   Pri zadannoj peremennoj USE_QT4 primenyayutsya sleduyuschie nastrojki:

 CONFIGURE_ARGS+=        --with-qt-includes=${QT_INCDIR} \
                         --with-qt-libraries=${QT_LIBDIR} \
                         --with-extra-libs=${LOCALBASE}/lib \
                         --with-extra-includes=${LOCALBASE}/include
 CONFIGURE_ENV+= MOC="${MOC}" UIC="${UIC}" LIBS="${QTCFGLIBS}" \
                 QMAKE="${QMAKE}" QMAKESPEC="${QMAKESPEC}" QTDIR="${QT_PREFIX}"
 MAKE_ENV+=      QMAKESPEC="${QMAKESPEC}"

 PLIST_SUB+=     QT_INCDIR_REL=${QT_INCDIR_REL} \
                 QT_LIBDIR_REL=${QT_LIBDIR_REL} \
                 QT_PLUGINDIR_REL=${QT_PLUGINDIR_REL}

  6.9.2. Vybor komponentov (tol'ko dlya Qt 4.x)

   V peremennoj USE_QT4 dolzhny ukazyvat'sya zavisimosti ot otdel'nyh
   instrumentov i bibliotek Qt 4. K kazhdomu komponentu mozhno dobavit'
   suffiks, _build ili _run, otrazhayuschij, kogda dolzhna byt' primenena
   zavisimost', vo vremya sborki ili vypolneniya, sootvetstvenno. Esli
   suffiks otsutstvuet, zavisimost' ot komponenta budet i dlya vremeni
   sborki, i dlya vremeni vypolneniya. Obychno, komponenty bibliotek dolzhny
   ukazyvat'sya bez suffiksov, komponenty instrumentov - s suffiksom _build,
   a komponenty plaginov - s suffiksom _run. Naibolee obschie ispol'zuemye
   komponenty perechisleny nizhe (vse dostupnye komponenty perechisleny v
   _USE_QT4_ALL v fajle /usr/ports/Mk/bsd.qt.mk):

   Tablica 6.9. Dostupnye bibliotechnye komponenty Qt 4

    Nazvanie                             Opisanie                             
   corelib    osnovnaya biblioteka (mozhno opustit', esli port ne ispol'zuet  
              nichego, krome corelib)                                         
   gui        biblioteka graficheskogo pol'zovatel'skogo interfejsa           
   network    setevaya biblioteka                                             
   opengl     biblioteka OpenGL                                               
   qt3support biblioteka sovmestimosti s Qt 3                                 
   qtestlib   biblioteka modul'nogo testirovaniya                             
   script     biblioteka scenariev                                            
   sql        biblioteka SQL                                                  
   xml        biblioteka XML                                                  

   Vy mozhete opredelit', ot kakih bibliotek zavisit prilozhenie, zapustiv
   ldd na osnovnoj ispolnyaemyj fajl posle uspeshnoj kompilyacii.

   Tablica 6.10. Dostupnye komponenty instrumentov Qt 4

   Nazvanie                             Opisanie                              
   moc      meta-ob"ektnyj kompilyator (nuzhen pri postroenii pochti dlya     
            kazhdogo prilozheniya Qt)                                         
   qmake    generator Makefile / utilita postroeniya                          
   rcc      kompilyator resursov (nuzhen, esli prilozhenie idet vmeste s      
            fajlami *.rc ili *.qrc)                                           
            kompilyator pol'zovatel'skogo interfejsa (nuzhen, esli            
   uic      prilozhenie idet vmeste s fajlami *.ui, sozdannymi pri pomoschi   
            Qt Designer, - na praktike kazhdoe prilozhenie Qt s GUI)          

   Tablica 6.11. Dostupnye komponenty plaginov Qt 4

     Nazvanie                             Opisanie                            
   iconengines  plagin dlya dvizhka ikonok SVG (esli prilozhenie              
                postavlyaetsya s ikonkami SVG)                                
   imageformats plaginy dlya graficheskih formatov GIF, JPEG, MNG i SVG (esli 
                prilozhenie postavlyaetsya s graficheskimi fajlami)           

   Primer 6.5. Vybor komponentov Qt 4

   V `etom primere portirovannoe prilozhenie ispol'zuet biblioteku
   graficheskogo pol'zovatel'skogo interfejsa Qt 4, osnovnuyu biblioteku Qt
   4, vse instrumenty generacii koda Qt 4 i generator Makefile Qt 4.
   Poskol'ku biblioteka gui podrazumevaet zavisimost' ot osnovnoj biblioteki,
   ukazyvat' corelib net neobhodimosti. Instrumenty generacii koda Qt 4 moc,
   uic i rcc, a takzhe generator Makefile qmake nuzhny tol'ko dlya vremeni
   postroeniya, po`etomu oni ukazany s suffiksom _build:

 USE_QT4=        gui moc_build qmake_build rcc_build uic_build

  6.9.3. Prochie soobrazheniya

   Esli vmeste s prilozheniem vmesto configure postavlyaetsya fajl .pro, vy
   mozhete ispol'zovat' sleduyuschee:

 HAS_CONFIGURE=  yes

 do-configure:
         @cd ${WRKSRC} && ${SETENV} ${CONFIGURE_ENV} \
                 ${QMAKE} ${QMAKEFLAGS} PREFIX=${PREFIX} texmaker.pro

   Obratite vnimanie na shodstvo so strokoj qmake iz prilagaemogo scenariya
   BUILD.sh. Peredacha CONFIGURE_ENV obespechivaet vidimost' peremennoj
   QMAKESPEC dlya qmake, bez kotoroj komanda ne mozhet rabotat'. qmake
   porozhdaet standartnye Makefile, i, takim obrazom, otpadaet neobhodimost'
   v napisanii svoih sobstvennyh celej build.

   Prilozheniya Qt chasto pishutsya v krossplatformennoj manere, i X11/Unix
   chasto ne yavlyaetsya dlya nih platformoj razrabotki, chto v svoyu
   ochered' chasto privodit k sootvetstvuyuschim upuschennym momentam:

     * Otsutstvuyuschie dopolnitel'nye puti dlya zagolovochnyh fajlov. Mnogie
       prilozheniya idut s podderzhkoj ikonki v sistemnom tree, no
       prenebregayut smotret' na nalichie zagolovochnyh fajlov i/ili
       bibliotekami v katalogah X11. Vy mozhete soobschit' qmake, chtoby ona
       dobavila katalogi v puti poiska zagolovochnyh fajlov i bibliotek
       cherez komandnuyu stroku. K primeru:

 ${QMAKE} ${QMAKEFLAGS} PREFIX=${PREFIX} INCLUDEPATH+=${LOCALBASE}/include \
         LIBS+=-L${LOCALBASE}/lib sillyapp.pro

     * Fiktivnye puti ustanovki. Inogda dannye, takie kak ikonki i fajly
       .desktop, ustanavlivayutsya po umolchaniyu v katalogi, kotorye ne
       prosmatrivayutsya XDG-sovmestimymi prilozheniyami. Primerom
       yavlyaetsya editors/texmaker - vzglyanite na patch-texmaker.pro iz
       kataloga files `etogo porta, kotoryj mozhno vzyat' v kachestve
       shablona ispravleniya `etogo neposredstvenno v fajle proekta qmake.

6.10. Ispol'zovanie KDE

  6.10.1. Zadanie peremennyh KDE 4

   Esli vashe prilozhenie zavisit ot KDE 4.x, prisvojte USE_KDE4 spisok
   trebuemyh komponentov. Dlya pereopredeleniya tipa zavisimosti komponenta
   mogut byt' ispol'zovany suffiksy _build i _run (naprimer, baseapps_run).
   Esli suffiks ne zadan, budet ispol'zovan tip zavisimosti po umolchaniyu.
   Esli vy hotite ispol'zovat' oba tipa, dobav'te komponent dvazhdy s oboimi
   suffiksami (naprimer, automoc4_build automoc4_run). Osnovnye naibolee
   ispol'zuemye komponenty perechisleny nizhe (aktual'nye komponenty
   zadokumentirovany v nachale fajla /usr/ports/Mk/bsd.kde4.mk):

   Tablica 6.12. Dostupnye komponenty KDE 4

      Nazvanie                              Opisanie                          
   kdehier         Ierarhiya osnovnyh katalogov KDE                           
   kdelibs         KDE Developer Platform                                     
   kdeprefix       Esli ustanovleno, to port budet ustanovlen v               
                   ${KDE4_PREFIX} vmesto ${LOCALBASE}                         
   sharedmime      Baza dannyh MIME tipov dlya portov KDE                     
   automoc4        automoc dlya paketov Qt 4                                  
   akonadi         Server hraneniya KDE-Pim                                   
   soprano         Frejmvork Qt 4 RDF                                         
   strigi          Poiskovye daemon rabochego stola                           
   libkcddb        Biblioteka KDE CDDB                                        
   libkcompactdisc Biblioteka KDE dlya vzaimodejstviya s audio-CD             
   libkdeedu       Biblioteki, ispol'zuemye dlya obrazovatel'nyh prilozhenij  
   libkdcraw       Biblioteka KDE LibRaw                                      
   libkexiv2       Biblioteka KDE Exiv2                                       
   libkipi         KDE Image Plugin Interface                                 
   libkonq         Osnovnaya biblioteka Konqueror                             
   libksane        Biblioteka KDE SANE ("Scanner Access Now Easy")            
   pimlibs         Biblioteki KDE-Pim                                         
   kate            Tektovyj redaktor                                          
   marble          Virtual'nyj globus                                         
   okular          Universal'nyj prosmotrschik dokumentov                     
   korundum        Privyazka Ruby k KDE                                       
   perlkde         Privyazka Perl k KDE                                       
   pykde4          Privyazka Python k KDE                                     
   pykdeuic4       Kompilyator pol'zovatel'skogo interfejsa PyKDE             
   smokekde        Biblioteki KDE SMOKE                                       

   Porty KDE 4.x ustanavlivayutsya v KDE4_PREFIX, chto v nastoyaschee vremya
   sootvetstvuet /usr/local/kde4. `Eto dostigaetsya putem ukazaniya
   komponenta kdeprefix, kotoryj opredelyaet znachenie po umolchaniyu dlya
   PREFIX. Tem ne menee, porty uchityvayut lyubye PREFIX, ustanovlennye
   cherez peremennuyu okruzheniya MAKEFLAGS i/ili parametry make.

   Primer 6.6. Primer USE_KDE4

   `Eto prostoj primer dlya porta KDE 4. USES= cmake:outsource ukazyvaet
   portu ispol'zovat' CMake, konfiguracionnyj instrument, shiroko
   primenyaemyj v proektah KDE 4 (podrobnoe opisanie daiot Razdel 6.3.4,
   <<Ispol'zovanie cmake>>). USE_KDE4 dobavlyaet zavisimost' ot bibliotek KDE
   i zastavlyaet porty ispol'zovat' automoc4 vo vremya sborki. Trebuemye
   komponenty KDE i drugie zavisimosti mozhno opredelit' v zhurnale
   configure. USE_KDE4 ne podrazumevaet USE_QT4. Esli port trebuet kakoj-libo
   iz komponentov Qt 4, ih sleduet ukazat' v USE_QT4.

 USES=           cmake:outsource
 USE_KDE4=       kdelibs kdeprefix automoc4
 USE_QT4=        moc_build qmake_build rcc_build uic_build

6.11. Ispol'zovanie Java

  6.11.1. Zadanie peremennyh

   Esli vashemu portu neobhodimo nalichie Java(TM) Development Kit (JDK(TM))
   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 i versiej po
   umolchaniyu yavlyaetsya java/openjdk6.

   Tablica 6.13. 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.5[+]    
                1.6[+] 1.7[+] ).                                              
                Spisok operacionnyh sistem, perechislennyh cherez probel,     
   JAVA_OS      porty JDK dlya kotoryh podhodyat dlya porta (vozmozhnye       
                znacheniya: native linux).                                    
                Spisok razrabotchikov portov JDK, perechislennyh cherez       
   JAVA_VENDOR  probel, kotorye podhodyat dlya porta (vozmozhnye znacheniya:  
                freebsd bsdjava sun openjdk).                                 
   JAVA_BUILD   Esli zadana, to oznachaet, chto vybrannyj port JDK dolzhen    
                byt' dobavlen k zavisimostyam porta dlya ego postroeniya.     
   JAVA_RUN     Esli zadana, to oznachaet, chto vybrannyj port JDK dolzhen    
                byt' dobavlen v zavisimostyam porta dlya ego raboty.          
                Esli zadana, to oznachaet, chto vybrannyj port JDK dolzhen    
   JAVA_EXTRACT byt' dobavlen v zavisimostyam porta dlya raspakovki ego       
                distributivnyh fajlov.                                        

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

   Tablica 6.14. Peremennye, dostupnye v portah, ispol'zuyuschih Java

        Peremennaya                                Znachenie                       
JAVA_PORT                    Nazvanie porta JDK (k primeru, 'java/openjdk6').      
                             Polnoe naimenovanii versii porta JDK (k primeru,      
JAVA_PORT_VERSION            '1.6.0'). 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, 'native').                                   
JAVA_PORT_VENDOR             Razrabotchik porta JDK (k primeru, 'openjdk').        
JAVA_PORT_OS_DESCRIPTION     Opisanie operacionnoj sistemy, ispol'zuemoj portom    
                             JDK (k primeru, 'Native').                            
JAVA_PORT_VENDOR_DESCRIPTION Opisanie razrabotchika porta JDK (k primeru, 'OpenJDK 
                             BSD Porting Team').                                   
JAVA_HOME                    Marshrut k ustanovochnomu katalogu JDK (k primeru,    
                             '/usr/local/openjdk6').                               
JAVAC                        Marshrut k ispol'zuemomu kompilyatoru Java (k         
                             primeru, '/usr/local/openjdk6/bin/javac'.             
                             Marshrut k ispol'zuemoj utilite jar (k primeru,       
JAR                          '/usr/local/openjdk6/bin/jar' ili                     
                             '/usr/local/bin/fastjar').                            
APPLETVIEWER                 Marshrut k utilite appletviewer (k primeru,           
                             '/usr/local/openjdk6/bin/appletviewer').              
                             Marshrut k vypolnyaemomu fajlu java. Ispol'zujte ego  
JAVA                         dlya zapuska Java-programm (k primeru,                
                             '/usr/local/openjdk6/bin/java').                      
JAVADOC                      Marshrut k vspomogatel'noj programme javadoc.         
JAVAH                        Marshrut k programme javah.                           
JAVAP                        Marshrut k programme javap.                           
JAVA_KEYTOOL                 Marshrut k vspomogatel'noj programme keytool.         
JAVA_N2A                     Marshrut k utilite native2ascii.                      
JAVA_POLICYTOOL              Marshrut k programme policytool.                      
JAVA_SERIALVER               Marshrut k vspomogatel'noj programme serialver.       
RMIC                         Marshrut k generatoru karkasa programm RMI, utilite   
                             rmic.                                                 
RMIREGISTRY                  Marshrut k programme registracii RMI, rmiregistry.    
RMID                         Marshrut k programme-daemonu RMI rmid.                
JAVA_CLASSES                 Marshrut k arhivu, kotoryj soderzhit fajly klassov    
                             JDK, ${JAVA_HOME}/jre/lib/rt.jar.                     

   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.15. 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.                         
   JAVALIBDIR   Katalog, v kotoryj ustanavlivayutsya JAR-fajly iz drugih      
                portov. Po umolchaniyu: ${LOCALBASE}/share/java/classes.      

   Sootvetstvuyuschie zapisi opredelyayutsya v oboih peremennyh PLIST_SUB
   (opisana v Razdel 7.1, <<Izmenenie soderzhimogo pkg-plist v zavisimosti ot
   make-peremennyh>>) i SUB_LIST.

  6.11.2. Postroenie s Ant

   Esli postroenie porta proizvoditsya s ispol'zovaniem Apache Ant, to
   neobhodimo opredelit' USE_ANT. Takim obrazom Ant stanovitsya podkomandoj
   make. Esli v porte ne opredelena cel' do-build, to budet ustanovlena cel'
   po umolchaniyu, kotoraya prosto zapuskaet Ant v sootvetstvii so znacheniem
   MAKE_ENV, MAKE_ARGS i ALL_TARGET. `Eto pohozhe na mehanizm USES= gmake,
   kotoryj opisan v Razdel 6.3, <<Mehanizmy postroeniya>>.

  6.11.3. 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%%/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
   v Razdel 7.1, <<Izmenenie soderzhimogo pkg-plist v zavisimosti ot
   make-peremennyh>>), 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 SVN, 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.

   Pohozhim obrazom opredelena politika po otnosheniyu k CATEGORIES porta
   Java, kotoraya podrobno opisana v Razdel 5.3, <<Razdelenie po
   kategoriyam>>.

6.12. Veb-prilozheniya, Apache i PHP

  6.12.1. Apache

   Tablica 6.16. Peremennye dlya portov, ispol'zuyuschih Apache

                    Port trebuet Apache. Vozmozhnye znacheniya: yes (beriot   
                    lyubuyu versiyu), 22, 24, 22-24, 22+ i tak dalee. Versiya 
   USE_APACHE       po umolchaniyu 22. Bolee podrobnaya informaciya           
                    soderzhitsya v fajle ports/Mk/bsd.apache.mk i na stranice 
                    wiki.freebsd.org/Apache/.                                 
   APXS             Polnyj put' k ispolnyaemomu fajlu apxs. Mozhet byt'       
                    pereopredelen v vashem portu.                             
   HTTPD            Polnyj put' k ispolnyaemomu fajlu httpd. Mozhet byt'      
                    pereopredelen v vashem portu.                             
                    Versiya ustanovlennogo Apache (peremennaya tol'ko dlya    
   APACHE_VERSION   chteniya). `Eta peremennaya dostupna tol'ko posle         
                    podklyucheniya bsd.port.pre.mk. Vozmozhnye znacheniya:    
                    22, 24.                                                   
   APACHEMODDIR     Katalog dlya modulej Apache. Znachenie peremennoj         
                    avtomaticheski podstavlyaetsya v pkg-plist.               
   APACHEINCLUDEDIR Katalog dlya zagolovkov Apache. Znachenie peremennoj      
                    avtomaticheski podstavlyaetsya v pkg-plist.               
   APACHEETCDIR     Katalog dlya konfiguracionnyh fajlov Apache. Znachenie    
                    peremennoj avtomaticheski podstavlyaetsya v pkg-plist.    

   Tablica 6.17. Ispol'zuemye peremennye pri portirovanii modulej Apache

   MODULENAME    Nazvanie modulya. Znacheniem po umolchaniyu yavlyaetsya      
                 PORTNAME. Primer: mod_hello                                  
   SHORTMODNAME  Kratkoe nazvanie modulya. Nasleduetsya avtomaticheski ot     
                 MODULENAME, no mozhet byt' pereopredeleno. Primer: hello     
   AP_FAST_BUILD Ispol'zovat' apxs dlya kompilyacii i ustanovki modulya.      
   AP_GENPLIST   Takzhe avtomaticheski sozdaet pkg-plist.                     
   AP_INC        Dobavlyaet katalog k puti poiska zagolovkov vo vremya        
                 kompilyacii.                                                 
   AP_LIB        Dobavlyaet katalog k puti poiska bibliotek vo vremya         
                 kompilyacii.                                                 
   AP_EXTRAS     Dopolnitel'nye flagi, peredavaemye apxs.                     

  6.12.2. Veb-prilozheniya

   Veb-prilozheniya sleduet ustanavlivat' v PREFIX/www/appname. Dlya vashego
   udobstva `etot put' odinakovo dostupen v Makefile i pkg-plist kak
   peremennaya WWWDIR, a put' otnositel'no PREFIX dostupen v Makefile kak
   WWWDIR_REL.

   Pol'zovatel' i gruppa processa veb-servera dostupny kak WWWOWN i WWWGRP, v
   sluchae esli vam nuzhno izmenit' vladel'ca dlya nekotoryh fajlov.
   Znacheniem po umolchaniyu i dlya vladel'ca, i dlya gruppy yavlyaetsya www.
   Esli vy hotite ispol'zovat' v vashem porte drugie znacheniya,
   vospol'zujtes' dlya `etogo notaciej WWWOWN?= myuser, chtoby pozvolit'
   pol'zovatelyu legko pereopredelit' ih.

   Ne dobavlyajte zavisimost' ot Apache, esli veb-prilozhenie yavnym obrazom
   ne nuzhdaetsya v Apache. Uchityvajte, chto pol'zovateli mogut pozhelat'
   zapustit' vashe veb-prilozhenie na drugom veb-servere pomimo Apache.

  6.12.3. PHP

   Tablica 6.18. Peremennye dlya portov, ispol'zuyuschih PHP

                   Port trebuet PHP. Znachenie yes dobavlyaet zavisimost' ot  
   USE_PHP         PHP. Vmesto `etogo mozhet byt' ukazan perechen' trebuemyh  
                   rasshirenij PHP. Primer: pcre xml gettext                  
                   Vybiraet starshij nomer versii, s kotorym budet ustanovlen 
   DEFAULT_PHP_VER PHP kak zavisimost' v sluchae, kogda PHP esche ne          
                   ustanovlen. Po umolchaniyu 5. Vozmozhnye znacheniya: 4, 5  
   IGNORE_WITH_PHP Port ne rabotaet s PHP dannoj versii. Vozmozhnye           
                   znacheniya: 4, 5                                           
   USE_PHPIZE      Port budet postroen kak rasshirenie PHP.                   
   USE_PHPEXT      Port budet schitat'sya rasshireniem PHP, vklyuchaya        
                   ustanovku i registraciyu v reestre rasshirenij.            
   USE_PHP_BUILD   Ustanovit' PHP kak zavisimost' vremeni postroeniya.        
   WANT_PHP_CLI    Hochet CLI (komandnaya stroka) versiyu PHP.                
   WANT_PHP_CGI    Hochet CGI versiyu PHP.                                    
   WANT_PHP_MOD    Hochet PHP kak modul' Apache.                              
   WANT_PHP_SCR    Hochet CLI ili CGI versiyu PHP.                            
   WANT_PHP_WEB    Hochet modul' Apache ili CGI versiyu PHP.                  

  6.12.4. Moduli PEAR

   Portirovanie modulej PEAR yavlyaetsya ochen' prostym processom.

   Ispol'zujte peremennye FILES, TESTS, DATA, SQLS, SCRIPTFILES, DOCS and
   EXAMPLES dlya perechisleniya fajlov, kotorye vy hotite ustanovit'. Vse
   perechislennye fajly budut avtomaticheski ustanovleny v podhodyaschie
   mesta i dobavleny v pkg-plist.

   Podklyuchite ${PORTSDIR}/devel/pear/bsd.pear.mk na poslednej stroke
   Makefile.

   Primer 6.7. Primer Makefile dlya klassov PEAR

 PORTNAME=       Date
 PORTVERSION=    1.4.3
 CATEGORIES=     devel www pear

 MAINTAINER=     example@domain.com
 COMMENT=        PEAR Date and Time Zone Classes

 BUILD_DEPENDS=  ${PEARDIR}/PEAR.php:${PORTSDIR}/devel/pear-PEAR
 RUN_DEPENDS:=   ${BUILD_DEPENDS}

 FILES=          Date.php Date/Calc.php Date/Human.php Date/Span.php     \
                 Date/TimeZone.php
 TESTS=          test_calc.php test_date_methods_span.php testunit.php   \
                 testunit_date.php testunit_date_span.php wknotest.txt   \
                 bug674.php bug727_1.php bug727_2.php bug727_3.php       \
                 bug727_4.php bug967.php weeksinmonth_4_monday.txt       \
                 weeksinmonth_4_sunday.txt weeksinmonth_rdm_monday.txt   \
                 weeksinmonth_rdm_sunday.txt
 DOCS=           TODO
 _DOCSDIR=       .

 .include <bsd.port.pre.mk>
 .include "${PORTSDIR}/devel/pear/bsd.pear.mk"
 .include <bsd.port.post.mk>

6.13. Ispol'zovanie Python

   Kollekciya Portov podderzhivaet parallel'nuyu ustanovku mnozhestva versij
   Python. Sleduet ubedit'sya, chto v portah ispol'zuetsya pravil'nyj
   interpretator python v sootvetstvii s peremennoj PYTHON_VERSION,
   ustanovlennoj pol'zovatelem. Po bol'shej chasti `eto oznachaet zamenu puti
   k ispolnyaemomu fajlu python v scenariyah na znachenie peremennoj
   PYTHON_CMD.

   Porty, ustanavlivayuschie fajly pod katalog PYTHON_SITELIBDIR, dolzhny
   ispol'zovat' prefiks vida pyXY-, takim obrazom nazvaniya paketov budut
   vklyuchat' v sebya versiyu Python, s kotoroj oni ustanovleny.

 PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX}

   Tablica 6.19. Peremennye dlya portov, kotorye ispol'zuyut Python

                           Dlya `etogo porta nuzhen Python. Minimal'naya      
                           trebuemaya versiya mozhet byt' ukazana s takim     
   USE_PYTHON              znacheniem kak 2.6+. Takzhe mozhno ukazan diapazon 
                           versij s razdeleniem dvuh versij cherez -,         
                           naprimer: 2.6-2.7                                  
                           Ispol'zovat' distributivnye utility (distutils)    
                           Python dlya konfiguracii, kompilyacii i ustanovki. 
   USE_PYDISTUTILS         Neobhodimo, esli port ispol'zuet setup.py.         
                           Pereopredelyaet celi do-build i do-install i       
                           takzhe mozhet pereopredelyat' do-configure, esli   
                           ne opredelena GNU_CONFIGURE.                       
                           Ispol'zuetsya kak PKGNAMEPREFIX dlya otlichiya     
   PYTHON_PKGNAMEPREFIX    paketov, ispol'zuyuschih raznye versii Python.     
                           Primer: py24-                                      
                           Mestonahozhdenie dereva site-packages, kotoroe     
   PYTHON_SITELIBDIR       soderzhit put' ustanovki Python (obychno,          
                           LOCALBASE). Peremennaya PYTHON_SITELIBDIR mozhet   
                           byt' ochen' poleznoj pri ustanovke modulej Python. 
                           Variant PYTHON_SITELIBDIR bez PREFIX. Po           
                           vozmozhnosti vsegda ispol'zujte                    
   PYTHONPREFIX_SITELIBDIR %%PYTHON_SITELIBDIR%% v pkg-plist. Znacheniem po   
                           umolchaniyu dlya %%PYTHON_SITELIBDIR%% yavlyaetsya 
                           lib/python%%PYTHON_VERSION%%/site-packages         
   PYTHON_CMD              Komandnaya stroka interpretatora Python,           
                           vklyuchaya nomer versii.                           
   PYNUMERIC               Stroka zavisimosti dlya rasshireniya numeric.      
                           Stroka zavisimosti dlya novogo rasshireniya        
   PYNUMPY                 numeric, numpy (PYNUMERIC ob"yavlen ustarevshim    
                           vyshestoyaschim proizvoditelem).                   
                           Stroka zavisimosti dlya rasshireniya XML (ne       
   PYXML                   nuzhno dlya Python 2.0 i vyshe, t.k. vklyucheno v  
                           osnovnoj distributiv).                             
                           Dobavit' zavisimost' ot twistedCore. Perechen'     
   USE_TWISTED             trebuemyh komponentov mozhet byt' ukazan kak       
                           znachenie `etoj peremennoj. Primer: web lore pair  
                           flow                                               
                           Dobavit' zavisimost' ot Zope, platformy veb        
   USE_ZOPE                prilozhenij. Izmenyaet zavisimost' ot Python na    
                           Python 2.7. Peremennaya ZOPEBASEDIR soderzhit      
                           direktoriyu s ustanovlennym Zope.                  

   Polnyj perechen' dostupnyh peremennyh mozhno najti v
   /usr/ports/Mk/bsd.python.mk.

6.14. Ispol'zovanie Tcl/Tk

   V Kollekcii Portov podderzhivaetsya odnovremennaya ustanovka
   mnozhestvennyh versij Tcl/Tk. Porty dolzhny pytat'sya podderzhivat' po
   krajnej mere versiyu Tcl/Tk, ispol'zuemuyu po umolchaniyu, i vyshe s
   pomosch'yu peremennyh USE_TCL i USE_TK. ZHelaemuyu versiyu tcl mozhno
   ukazat' v peremennoj WITH_TCL_VER.

   Tablica 6.20. Naibolee vostrebovannye peremennye dlya portov, kotorye
   ispol'zuyut Tcl/Tk

                           Port zavisit ot biblioteki Tcl (ne obolochki).     
                           Minimal'nuyu trebuemuyu versiyu mozhno ukazat' s   
   USE_TCL                 ispol'zovaniem takih znachenij, kak 84+. Otdel'nye 
                           nepodderzhivaemye versii ukazyvayutsya v           
                           peremennoj INVALID_TCL_VER.                        
   USE_TCL_BUILD           Tcl nuzhen dlya porta tol'ko na vremya sborki.     
                           `Etu novuyu peremennuyu sleduet ispol'zovat' dlya  
                           portov, dlya kotoryh trebuetsya obolochka Tcl i ne 
   USE_TCL_WRAPPER         trebuetsya konkretnaya versiya tclsh. Obertka      
                           tclsh ustanavlivaetsya v sistemu. Pol'zovatel'     
                           mozhet ukazat' zhelaemuyu obolochku tcl dlya       
                           ispol'zovaniya.                                    
   WITH_TCL_VER            Opredelyaemye pol'zovatelem peremennye, kotorye    
                           ustanavlivayut zhelaemuyu versiyu Tcl.             
   UNIQUENAME_WITH_TCL_VER Podobno WITH_TCL_VER, no dlya kazhdogo porta.      
   USE_TCL_THREADS         Trebuet mnogopotochnuyu sborku Tcl/Tk.             
                           Port zavisit ot biblioteki Tk (ne ot               
   USE_TK                  predpochitaemoj obolochki). Podrazumevaet USE_TCL  
                           s tem zhe znacheniem. Dlya bol'shej informacii     
                           smotrite opisanie peremennoj USE_TCL.              
   USE_TK_BUILD            Analogichno USE_TCL_BUILD.                         
   USE_TK_WRAPPER          Analogichno USE_TCL_WRAPPER.                       
   WITH_TK_VER             Analogichno WITH_TCL_VER, podrazumevaet            
                           WITH_TCL_VER toj zhe versii.                       

   Polnyj perechen' dostupnyh peremennyh nahoditsya v
   /usr/ports/Mk/bsd.tcl.mk.

6.15. Ispol'zovanie Emacs

   `Etot razdel eschio predstoit napisat'.

6.16. Ispol'zovanie Ruby

   Tablica 6.21. Poleznye peremennye dlya portov, ispol'zuyuschih Ruby

     Peremennaya                            Opisanie                          
   USE_RUBY         Port trebuet Ruby.                                        
   USE_RUBY_EXTCONF Port ispol'zuet dlya konfiguracii extconf.rb.             
   USE_RUBY_SETUP   Port ispol'zuet dlya konfiguracii setup.rb.               
   RUBY_SETUP       Ustanavlivaet al'ternativnoe imya dlya setup.rb.          
                    Rasprostranennym znacheniem yavlyaetsya install.rb.       

   Sleduyuschaya tablica otrazhaet nekotorye peremennye, dostupnye avtoram
   portov cherez infrastrukturu portov. `Eti peremennye dolzhny
   ispol'zovat'sya dlya ustanovki fajlov v pravil'noe mestoraspolozhenie.
   Ispol'zujte ih v pkg-plist kak mozhno bol'she. `Eti peremennye ne dolzhny
   pereopredelyat'sya v samom porte.

   Tablica 6.22. Otobrannye peremennye tol'ko dlya chteniya dlya portov,
   ispol'zuyuschih Ruby

    Peremennaya            Opisanie                      Primernoe znachenie                
                    Ispol'zuetsya kak                                                       
RUBY_PKGNAMEPREFIX  PKGNAMEPREFIX dlya     ruby18-
                    razlichiya paketov ot  
                    raznyh versij Ruby.    
RUBY_VERSION        Polnaya versiya Ruby v 1.8.2                                            
                    forme x.y.z.           
                    Put' dlya ustanovki                                                     
RUBY_SITELIBDIR     arhitekturonezavisimyh /usr/local/lib/ruby/site_ruby/1.8
                    bibliotek.             
                    Put' dlya ustanovki                                                     
RUBY_SITEARCHLIBDIR arhitekturozavisimyh   /usr/local/lib/ruby/site_ruby/1.8/amd64-freebsd6
                    bibliotek.             
RUBY_MODDOCDIR      Put' dlya ustanovki    /usr/local/share/doc/ruby18/patsy                
                    dokumentacii modulya.  
RUBY_MODEXAMPLESDIR Put' dlya ustanovki    /usr/local/share/examples/ruby18/patsy           
                    primerov modulya.      

   Polnyj perechen' dostupnyh peremennyh nahoditsya v
   /usr/ports/Mk/bsd.ruby.mk.

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

6.18. Ispol'zovanie wxWidgets

   `Eta glava opisyvaet status bibliotek wxWidgets v dereve portov i ih
   integraciyu s sistemoj portov.

  6.18.1. Vvedenie

   Suschestvuet mnozhestvo versij bibliotek wxWidgets, konfliktuyuschih
   mezhdu soboj (ustanavlivayut fajly pod tem zhe imenem). V dereve portov
   `eta problema reshena putem ustanovki kazhdoj versii pod sobstvennym
   nazvaniem s ispol'zovaniem nomera versii v kachestve suffiksa.

   Ochevidnym nedostatkom `etogo yavlyaetsya neobhodimost' izmeneniya
   kazhdogo prilozheniya dlya nahozhdeniya iskomoj versii. K schast'yu,
   bol'shinstvo prilozhenij dlya opredeleniya nuzhnogo kompilyatora i flagov
   komponovki vyzyvayut scenarij wx-config. Dlya kazhdoj dostupnoj versii
   `etot scenarij imeet svoio imya. Bol'shinstvo prilozhenij uchityvayut
   peremennuyu okruzheniya ili prinimayut argument configure dlya ukazaniya,
   kakoj scenarij wx-config sleduet vyzyvat'. Na vse ostal'nye prihoditsya
   nakladyvat' patch.

  6.18.2. Vybor versii

   Dlya togo, chtoby zastavit' vash port ispol'zovat' konkretnuyu versiyu
   wxWidgets, suschestvuet dve dostupnye dlya opredeleniya peremennye (esli
   opredelena tol'ko odna, to vtoraya primet znachenie po umolchaniyu):

   Tablica 6.23. Peremennye dlya vybora versii wxWidgets

   Peremennaya               Opisanie                Znachenie po umolchaniyu 
   USE_WX      Perechen' versij, kotorye port mozhet Vse dostupnye versii     
               ispol'zovat'                          
   USE_WX_NOT  Perechen' versij, kotorye port ne     Net                      
               mozhet ispol'zovat'                   

   Perechen' dostupnyh versij wxWidgets i sootvetstvuyuschih im portov v
   dereve:

   Tablica 6.24. Dostupnye versii wxWidgets

   Versiya         Port         
   2.4     x11-toolkits/wxgtk24 
   2.6     x11-toolkits/wxgtk26 
   2.8     x11-toolkits/wxgtk28 

  Primechanie:

   Versii nachinaya s 2.5 takzhe postavlyayutsya s Unicode i ustanavlivaetsya
   podchinennym portom s nazvaniem kak kak u obychnogo, no s suffiksom
   -unicode, no `etim mozhno upravlyat' pri pomoschi peremennyh (smotrite
   Razdel 6.18.4, <<Unicode>>).

   Peremennye v Tablica 6.23, <<Peremennye dlya vybora versii wxWidgets>>
   mozhno ustanovit' v odnu ili bolee sleduyuschih kombinacij, razdelennyh
   probelami:

   Tablica 6.25. Opredelenie versii dlya wxWidgets

                     Opisanie                   Primer  
   Edinichnaya versiya                          2.4     
   Voshodyaschij diapazon                       2.4+    
   Nishodyaschij diapazon                       2.6-    
   Polnyj diapazon (obyazan byt' voshodyaschim) 2.4-2.6 

   Krome togo, suschestvuet neskol'ko peremennyh dlya vybora predpochitaemyh
   versij iz perechnya dostupnyh. Oni mogut byt' ustanovleny v neskol'ko
   versij, pervaya iz kotoryh budet imet' naibol'shij prioritet.

   Tablica 6.26. Peremennye dlya vybora predpochitaemyh versij wxWidgets

    Nazvanie   Prednaznachenie 
   WANT_WX_VER port            
   WITH_WX_VER pol'zovatel'    

  6.18.3. Vybor komponentov

   Suschestvuyut drugie prilozheniya, kotorye, hotya i ne yavlyayutsya
   bibliotekami wxWidgets, no v tozhe vremya otnosyatsya k nim. `Eti
   prilozheniya mozhno ukazat' v peremennoj WX_COMPS. Dostupny sleduyuschie
   komponenty:

   Tablica 6.27. Dostupnye komponenty wxWidgets

   Nazvanie           Opisanie            Ogranichenie versii 
   wx       osnovnaya biblioteka          net                 
   contrib  storonnie biblioteki          net                 
   python   wxPython (privyazki k Python) 2.4-2.6             
   mozilla  wxMozilla                     2.4                 
   svg      wxSVG                         2.6                 

   Tip dobavlyaemoj zavisimosti pri vybore kazhdogo komponenta mozhet byt'
   ukazan vruchnuyu putem dobavleniya suffiksa, otdelennogo tochkoj s
   zapyatoj. Esli takovoj otsutstvuet, no budet ispol'zovano znachenie po
   umolchaniyu (smotrite Tablica 6.29, <<Tipy zavisimosti wxWidgets,
   ispol'zuemye po umolchaniyu>>). Dostupnye tipy zavisimosti:

   Tablica 6.28. Dostupnye tipy zavisimosti wxWidgets

   Nazvanie                             Opisanie                              
   build    Komponent trebuetsya dlya postroeniya, `ekvivalenten              
            BUILD_DEPENDS                                                     
   run      Komponent trebuetsya dlya zapuska, `ekvivalenten RUN_DEPENDS      
   lib      Komponent trebuetsya dlya postroeniya i zapuska, `ekvivalenten    
            LIB_DEPENDS                                                       

   Znacheniya po umolchaniyu dlya komponentov podrobno rassmatrivayutsya v
   sleduyuschej tablice:

   Tablica 6.29. Tipy zavisimosti wxWidgets, ispol'zuemye po umolchaniyu

   Komponent Tip zavisimosti 
   wx        lib             
   contrib   lib             
   python    run             
   mozilla   lib             
   svg       lib             

   Primer 6.8. Vybor komponentov wxWidgets

   Sleduyuschij fragment otnositsya k portu, v kotorom ispol'zuetsya
   wxWidgets versii 2.4 s ego storonnimi bibliotekami.

 USE_WX=       2.4
 WX_COMPS=     wx contrib

  6.18.4. Unicode

   Biblioteka wxWidgets podderzhivaet Unicode nachinaya s versii 2.5. V
   dereve portov dostupny obe versii i mogut byt' vybrany s ispol'zovaniem
   sleduyuschih peremennyh:

   Tablica 6.30. Peremennye dlya vybora versii wxWidgets s Unicode

     Peremennaya                    Opisanie                  Prednaznachenie 
   WX_UNICODE      Port rabotaet tol'ko s versiej Unicode     port            
   WANT_UNICODE    Port rabotaet s obeimi versiyami, no       port            
                   predpochitaet versiyu s Unicode            
   WITH_UNICODE    Port budet ispol'zovat' versiyu Unicode    pol'zovatel'    
                   Port budet ispol'zovat' obychnuyu versiyu,                 
   WITHOUT_UNICODE esli `eto podderzhivaetsya (kogda          pol'zovatel'
                   WX_UNICODE ne opredelena)                  

  Preduprezhdenie:

   Ne ispol'zujte WX_UNICODE dlya portov, kotorye mogut ispol'zovat' obe
   versii. Esli vy hotite, chtoby port po umolchaniyu ispol'zoval Unicode,
   opredelite vmesto `etogo WANT_UNICODE.

  6.18.5. Obnaruzhenie ustanovlennyh versij

   Dlya obnaruzheniya ustanovlennoj versii vam neobhodimo zadat' peremennuyu
   WANT_WX. Esli vy ne prisvoite ej opredelennuyu versiyu, to komponenty
   poluchat suffiks versii. Peremennaya HAVE_WX budet zapolnena posle
   obnaruzheniya.

   Primer 6.9. Obnaruzhenie ustanovlennyh versij i komponentov wxWidgets

   Sleduyuschij fragment mozhet byt' ispol'zovan v portu, kotoryj ispol'zuet
   wxWidgets, v sluchae esli on ustanovlen ili vybran sootvetstvuyuschij
   parametr.

 WANT_WX=        yes

 .include <bsd.port.pre.mk>

 .if defined(WITH_WX) || !empty(PORT_OPTIONS:MWX) || !empty(HAVE_WX:Mwx-2.4)
 USE_WX=         2.4
 CONFIGURE_ARGS+=--enable-wx
 .endif

   Sleduyuschij fragment mozhet byt' ispol'zovan v portu, kotoryj zadejstvuet
   podderzhku wxPython, v sluchae esli on ustanovlen ili vybran
   sootvetstvuyuschij parametr, v dopolnenie k wxWidgets, obe versii 2.6.

 USE_WX=         2.6
 WX_COMPS=       wx
 WANT_WX=        2.6

 .include <bsd.port.pre.mk>

 .if defined(WITH_WXPYTHON) || !empty(PORT_OPTIONS:MWXPYTHON) || !empty(HAVE_WX:Mpython)
 WX_COMPS+=      python
 CONFIGURE_ARGS+=--enable-wxpython
 .endif

  6.18.6. Peremennye dlya opredeleniya

   Sleduyuschie peremennye dostupny v portu (posle opredeleniya odnoj iz
   peremennyh iz Tablica 6.23, <<Peremennye dlya vybora versii wxWidgets>>).

   Tablica 6.31. Peremennye, opredelennye dlya portov, ispol'zuyuschih
   wxWidgets

    Nazvanie                             Opisanie                             
   WX_CONFIG  Put' k scenariyu wxWidgets wx-config (s drugim imenem)          
   WXRC_CMD   Put' k programme wxWidgets wxrc (s drugim imenem)               
   WX_VERSION Versiya wxWidgets, kotoraya budet ispol'zovat'sya (naprimer,    
              2.6)                                                            
   WX_UNICODE Esli ne opredelena, no Unicode budet ispol'zovat'sya, to ona    
              budet opredelena                                                

  6.18.7. Obrabotka v bsd.port.pre.mk

   Esli vam nuzhno ispol'zovat' peremennye dlya zapuska komand srazu posle
   podklyucheniya bsd.port.pre.mk, to vam nuzhno opredelit' WX_PREMK.

  Vazhno:

   Esli vy opredelite WX_PREMK, to versiya, zavisimosti, komponenty i
   zadannye peremennye ne izmenyat'sya, v sluchae vy izmenili peremennye
   porta wxWidgets posle podklyucheniya bsd.port.pre.mk.

   Primer 6.10. Ispol'zovanie peremennyh wxWidgets v komandah

   Sleduyuschij fragment illyustriruet ispol'zovanie peremennoj WX_PREMK
   posredstvom zapuska scenariya wx-config dlya polucheniya stroki s polnoj
   versiej s prisvoeniem ee peremennoj i peredachej v programmu.

 USE_WX=         2.4
 WX_PREMK=       yes

 .include <bsd.port.pre.mk>

 .if exists(${WX_CONFIG})
 VER_STR!=       ${WX_CONFIG} --release

 PLIST_SUB+=     VERSION="${VER_STR}"
 .endif

  Primechanie:

   Peremennye wxWidgets mozhno bezopasno ispol'zovat' v komandah vnutri celej
   bez neobhodimosti v ispol'zovanii WX_PREMK.

  6.18.8. Dopolnitel'nye parametry configure

   Nekotorye scenarii GNU configure ne mogut najti wxWidgets tol'ko s
   ustanovlennoj peremennoj okruzheniya WX_CONFIG, trebuya dopolnitel'nye
   parametry. Dlya ih peredachi mozhno ispol'zovat' peremennuyu WX_CONF_ARGS.

   Tablica 6.32. Dopustimye znacheniya WX_CONF_ARGS

   Vozmozhnoe znachenie                 Poluchaemyj parametr                  
   absolute             --with-wx-config=${WX_CONFIG}                         
   relative             --with-wx=${LOCALBASE}                                
                        --with-wx-config=${WX_CONFIG:T}                       

6.19. Ispol'zovanie Lua

   `Eta glava opisyvaet status bibliotek Lua v dereve portov i ih integraciyu
   v sistemu portov.

  6.19.1. Vvedenie

   Suschestvuet mnozhestvo versij bibliotek Lua i sootvetstvuyuschih
   interpretatorov, konfliktuyuschih mezhdu soboj (ustanavlivayut fajly pod
   tem zhe imenem). V dereve portov `eta problema reshena putem ustanovki
   kazhdoj versii v sobstvennoe mesto s ispol'zovaniem nomera versii v
   kachestve suffiksa.

   Ochevidnym nedostatkom `etogo yavlyaetsya neobhodimost' izmeneniya
   kazhdogo prilozheniya dlya nahozhdeniya iskomoj versii. No `eto reshaetsya
   dobavleniem nekotoryh dopolnitel'nyh flagov dlya kompilyatora i
   komponovschika.

  6.19.2. Vybor versii

   Dlya togo, chtoby zastavit' vash port ispol'zovat' konkretnuyu versiyu
   Lua, suschestvuet dve dostupnye dlya opredeleniya peremennye (esli
   opredelena tol'ko odna, to vtoraya primet znachenie po umolchaniyu):

   Tablica 6.33. Peremennye dlya vybora versii Lua

   Peremennaya               Opisanie                Znachenie po umolchaniyu 
   USE_LUA     Perechen' versij, kotorye port mozhet Vse dostupnye versii     
               ispol'zovat'                          
   USE_LUA_NOT Perechen' versij, kotorye port ne     Pusto                    
               mozhet ispol'zovat'                   

   Perechen' dostupnyh versij Lua i sootvetstvuyuschih portov v dereve:

   Tablica 6.34. Dostupnye versii Lua

   Versiya    Port    
   4.0     lang/lua4  
   5.0     lang/lua50 
   5.1     lang/lua   

   Peremennye iz Tablica 6.33, <<Peremennye dlya vybora versii Lua>> mogut
   imet' kombinacii iz odnogo ili neskol'kih znachenij, razdelennyh probelom:

   Tablica 6.35. Opredelenie versii Lua

                     Opisanie                   Primer  
   Edinichnaya versiya                          4.0     
   Voshodyaschij diapazon                       5.0+    
   Nishodyaschij diapazon                       5.0-    
   Polnyj diapazon (obyazan byt' voshodyaschim) 5.0-5.1 

   Krome togo, suschestvuet neskol'ko peremennyh dlya vybora predpochitaemyh
   versij iz perechnya dostupnyh. Oni mogut byt' ustanovleny v neskol'ko
   versij, pervaya iz kotoryh budet imet' naibol'shij prioritet.

   Tablica 6.36. Peremennye dlya vybora predpochitaemyh versij Lua

     Nazvanie   Prednaznachenie 
   WANT_LUA_VER port            
   WITH_LUA_VER pol'zovatel'    

   Primer 6.11. Vybor versii Lua

   Sleduyuschij fragment vzyat iz porta, kotoryj ispol'zuet Lua versij 5.0
   ili 5.1, po umolchaniyu 5.0. Znachenie mozhet byt' pereopredeleno
   pol'zovatelem s ispol'zovaniem peremennoj WITH_LUA_VER.

 USE_LUA=      5.0-5.1
 WANT_LUA_VER= 5.0

  6.19.3. Vybor komponentov

   Suschestvuyut drugie prilozheniya, kotorye hotya i ne yavlyayutsya
   bibliotekami Lua, no otnosyatsya k nim. `Eti prilozheniya mozhno ukazat' v
   peremennoj LUA_COMPS. Dostupny sleduyuschie komponenty:

   Tablica 6.37. Dostupnye komponenty Lua

   Nazvanie            Opisanie             Ogranichenie versii 
   lua      Osnovnaya biblioteka            net                 
   tolua    Biblioteka dostupa k kodu C/C++ 4.0-5.0             
   ruby     Privyazka k Ruby                4.0-5.0             

  Primechanie:

   Est' i drugie komponenty, no oni otnosyatsya k modulyam dlya
   interpretatora i ne ispol'zuyutsya prilozheniyami (tol'ko drugimi
   modulyami).

   Tip zavisimosti mozhno vybrat' dlya kazhdogo komponenta cherez dobavlenie
   suffiksa, otdelennogo tochkoj s zapyatoj. V sluchae otsutstviya budet
   ispol'zovan tip po umolchaniyu (smotrite Tablica 6.39, <<Tipy zavisimosti
   Lua, ispol'zuemye po umolchaniyu>>). Dostupnye sleduyuschie tipy:

   Tablica 6.38. Dostupnye tipy zavisimosti Lua

   Nazvanie                             Opisanie                              
   build    Komponent trebuetsya dlya postroeniya, `ekvivalenten              
            BUILD_DEPENDS                                                     
   run      Komponent trebuetsya dlya zapuska, `ekvivalenten RUN_DEPENDS      
   lib      Komponent trebuetsya dlya postroeniya i zapuska, `ekvivalenten    
            LIB_DEPENDS                                                       

   Znacheniya po umolchaniyu dlya komponentov podrobno rassmatrivayutsya v
   sleduyuschej tablice:

   Tablica 6.39. Tipy zavisimosti Lua, ispol'zuemye po umolchaniyu

   Komponent                         Tip zavisimosti                          
   lua       lib dlya 4.0-5.0 (dinamicheskaya) i build dlya 5.1               
             (staticheskaya)                                                  
   tolua     build (staticheskaya)                                            
   ruby      lib (dinamicheskaya)                                             

   Primer 6.12. Vybor komponentov Lua

   Sleduyuschij fragment sootvetstvuet portu, ispol'zuyuschemu Lua versii 4.0
   i privyazku k Ruby.

 USE_LUA=      4.0
 LUA_COMPS=    lua ruby

  6.19.4. Obnaruzhenie ustanovlennyh versij

   Dlya obnaruzheniya ustanovlennoj versii vam neobhodimo zadat' peremennuyu
   WANT_LUA. Esli vy ne prisvoite ej opredelennuyu versiyu, to komponenty
   poluchat suffiks versii. Peremennaya HAVE_LUA budet zapolnena posle
   obnaruzheniya.

   Primer 6.13. Obnaruzhenie ustanovlennyh versij i komponentov Lua

   Sleduyuschij fragment mozhno ispol'zovat' dlya porta, ispol'zuyuschego
   Lua, esli ona ustanovlena, ili byl vybran sootvetstvuyuschij parametr.

 WANT_LUA=       yes

 .include <bsd.port.pre.mk>

 .if defined(WITH_LUA5) || !empty(PORT_OPTIONS:MLUA5) || !empty(HAVE_LUA:Mlua-5.[01])
 USE_LUA=        5.0-5.1
 CONFIGURE_ARGS+=--enable-lua5
 .endif

   Sleduyuschij fragment mozhno ispol'zovat' dlya porta, kotoryj vklyuchaet
   podderzhku tolua, esli takoj komponent ustanovlen, ili byl vybran
   sootvetstvuyuschij parametr v dopolnenie k Lua, oba imeyut versiyu 4.0.

 USE_LUA=        4.0
 LUA_COMPS=      lua
 WANT_LUA=       4.0

 .include <bsd.port.pre.mk>

 .if defined(WITH_TOLUA) || !empty(PORT_OPTIONS:MTOLUA) || !empty(HAVE_LUA:Mtolua)
 LUA_COMPS+=     tolua
 CONFIGURE_ARGS+=--enable-tolua
 .endif

  6.19.5. Peremennye dlya opredeleniya

   Sleduyuschie peremennye dostupny v portu (posle opredeleniya odnoj iz
   peremennyh iz Tablica 6.33, <<Peremennye dlya vybora versii Lua>>).

   Tablica 6.40. Peremennye, opredelennye dlya portov, ispol'zuyuschih Lua

       Nazvanie                              Opisanie                         
   LUA_VER           Versiya Lua, kotoraya budet ispol'zovat'sya (naprimer,   
                     5.1)                                                     
   LUA_VER_SH        Starshij nomer versii dinamicheskoj biblioteki Lua       
                     (naprimer, 1)                                            
   LUA_VER_STR       Versiya Lua bez tochki (naprimer, 51)                    
   LUA_PREFIX        Prefiks, v kotoryj ustanovlena Lua (i komponenty)        
   LUA_SUBDIR        Katalog pod ${PREFIX}/bin, ${PREFIX}/share i             
                     ${PREFIX}/lib, v kotoryj ustanovlena Lua                 
   LUA_INCDIR        Katalog, v kotoryj ustanovleny zagolovochnye fajly Lua i 
                     tolua                                                    
   LUA_LIBDIR        Katalog, v kotoryj ustanovleny biblioteki Lua i tolua    
   LUA_MODLIBDIR     Katalog, v kotoryj ustanovleny moduli biblioteki Lua     
                     (.so)                                                    
   LUA_MODSHAREDIR   Katalog, v kotoryj ustanovleny moduli Lua (.lua)         
   LUA_PKGNAMEPREFIX Prefiks s imenem paketa, ispol'zuemyj modulyami Lua      
   LUA_CMD           Put' k interpretatoru Lua                                
   LUAC_CMD          Put' k kompilyatoru Lua                                  
   TOLUA_CMD         Put' k programme tolua                                   

   Primer 6.14. Ukazanie dlya porta, gde iskat' Lua

   Sleduyuschij fragment pokazyvaet, kak soobschit' portu, kotoryj ispol'zuet
   scenarij configure, gde raspolozheny zagolovochnye fajly i biblioteki Lua.

 USE_LUA=        4.0
 GNU_CONFIGURE=  yes
 CONFIGURE_ENV=  CPPFLAGS="-I${LUA_INCDIR}" LDFLAGS="-L${LUA_LIBDIR}"

  6.19.6. Obrabotka v bsd.port.pre.mk

   Esli vam nuzhno ispol'zovat' peremennye dlya zapuska komand srazu posle
   podklyucheniya bsd.port.pre.mk, dlya `etogo vam nuzhno opredelit'
   peremennuyu LUA_PREMK.

  Vazhno:

   Esli vy zadaete LUA_PREMK, to versiya, zavisimosti, komponenty i uzhe
   zadannye peremennye ne budut izmeneny, v sluchae esli vy izmenili
   peremennye porta Lua posle podklyucheniya bsd.port.pre.mk.

   Primer 6.15. Ispol'zovanie peremennyh Lua v komandah

   Sleduyuschij fragment illyustriruet ispol'zovanie LUA_PREMK posredstvom
   zapuska interpretatora Lua dlya togo, chtoby poluchit' stroku s polnoj
   versiej, sohranit' ee v peremennuyu i peredat' programme.

 USE_LUA=        5.0
 LUA_PREMK=      yes

 .include <bsd.port.pre.mk>

 .if exists(${LUA_CMD})
 VER_STR!=       ${LUA_CMD} -v

 CFLAGS+=        -DLUA_VERSION_STRING="${VER_STR}"
 .endif

  Primechanie:

   Peremennye Lua mozhno bezopasno ispol'zovat' v komandah vnutri celej bez
   neobhodimosti v ispol'zovanii LUA_PREMK.

6.20. Ispol'zovanie Xfce

   Peremennaya USE_XFCE ispol'zuetsya dlya avtomaticheskoj konfiguracii
   zavisimostej dlya portov, ispol'zuyuschih biblioteki ili prilozheniya na
   osnove Xfce, takie kak x11-toolkits/libxfce4gui i x11-wm/xfce4-panel.

   V nastoyaschee vremya raspoznayutsya sleduyuschie biblioteki i
   prilozheniya Xfce:

     * libexo: x11/libexo

     * libgui: x11-toolkits/libxfce4gui

     * libutil: x11/libxfce4util

     * libmcs: x11/libxfce4mcs

     * mcsmanager: sysutils/xfce4-mcs-manager

     * panel: x11-wm/xfce4-panel

     * thunar: x11-fm/thunar

     * wm: x11-wm/xfce4-wm

     * xfdev: dev/xfce4-dev-tools

   Raspoznayutsya sleduyuschie dopolnitel'nye parametry:

     * configenv: Ispol'zujte, esli vash port trebuet special'no izmenennogo
       znacheniya CONFIGURE_ENV dlya poiska trebuemyh dlya porta bibliotek.

 -I${LOCALBASE}/include -L${LOCALBASE}/lib

       dobavlyaetsya v CPPFLAGS k CONFIGURE_ENV.

   Sledovatel'no, esli u porta imeetsya zavisimost' ot
   sysutils/xfce4-mcs-manager, i port trebuet special'nyh CPPFLAGS v svoem
   okruzhenii configure, to sintaksis budet sleduyuschim:

 USE_XFCE=        mcsmanager configenv

6.21. Ispol'zovanie Mozilla

   Tablica 6.41. Peremennye dlya portov, ispol'zuyuschih Mozilla

                         Odin iz b`ek`endov Gecko, s kotorym mozhet rabotat'  
   USE_GECKO             port. Vozmozhnye znacheniya: libxul (libxul.so),     
                         seamonkey (libgtkembedmoz.so, ustarevshij, bol'she   
                         ne dolzhen ispol'zovat'sya).                         
                         Dlya zapuska porta trebuetsya Firefox. Vozmozhnye    
   USE_FIREFOX           znacheniya: yes (beretsya versiya po umolchaniyu),   
                         40, 36, 35. Po umolchaniyu ustanavlivaet zavisimost' 
                         ot versii 40.                                        
                         Dlya postroeniya porta trebuetsya Firefox.           
   USE_FIREFOX_BUILD     Vozmozhnye znacheniya: smotrite USE_FIREFOX.         
                         Avtomaticheski ustanavlivaet USE_FIREFOX s           
                         prisvoeniem togo zhe znacheniya.                     
                         Dlya zapuska porta trebuetsya SeaMonkey. Vozmozhnye  
                         znacheniya: yes (beretsya versiya po umolchaniyu),   
   USE_SEAMONKEY         20, 11 (ustarelo, bol'she ne dolzhno                 
                         ispol'zovat'sya). Po umolchaniyu ustanavlivaet       
                         zavisimost' ot versii 20.                            
                         Dlya postroeniya porta trebuetsya SeaMonkey.         
   USE_SEAMONKEY_BUILD   Vozmozhnye znacheniya: smotrite USE_SEAMONKEY.       
                         Avtomaticheski ustanavlivaet USE_SEAMONKEY s         
                         prisvoeniem togo zhe znacheniya.                     
                         Dlya zapuska porta trebuetsya Thunderbird.           
                         Vozmozhnye znacheniya: yes (beretsya versiya po      
   USE_THUNDERBIRD       umolchaniyu), 31, 30 (ustarelo, bol'she ne dolzhno   
                         ispol'zovat'sya). Po umolchaniyu ustanavlivaet       
                         zavisimost' ot versii 31.                            
                         Dlya postroeniya porta trebuetsya Thunderbird.       
   USE_THUNDERBIRD_BUILD Vozmozhnye znacheniya: smotrite USE_THUNDERBIRD.     
                         Avtomaticheski ustanavlivaet USE_THUNDERBIRD s       
                         prisvoeniem togo zhe znacheniya.                     

   Polnyj perechen' dostupnyh peremennyh mozhno poluchit' v fajle
   /usr/ports/Mk/bsd.gecko.mk.

6.22. Ispol'zovanie baz dannyh

   Tablica 6.42. Peremennye dlya portov, ispol'zuyuschih bazy dannyh

   Peremennaya                           Znachenie                            
               Esli peremennaya ustanovlena v yes, dobavlyaet zavisimost' ot  
               porta databases/db41. Takzhe peremennoj mozhno prisvoit'       
   USE_BDB     znacheniya: 2, 3, 40, 41, 42, 43, 44, 46, 47, 48 ili 51. Vy    
               mozhete ob"yavit' diapazon prinimaemyh znachenij, USE_BDB=42+  
               budet iskat' ustanovlennuyu versiyu s naibol'shim nomerom, i,  
               esli nichego ne ustanovleno, vernetsya k 42.                   
               Esli peremennaya ustanovlena v yes, dobavlyaet zavisimost' ot  
   USE_MYSQL   porta databases/mysql55-client. Kak svyazannaya peremennaya,   
               WANT_MYSQL_VER mozhet byt' ustanovlena v znachenie 323, 40,    
               41, 50, 51, 52, 55 ili 60.                                     
               Esli ustanovlena v yes, dobavlyaet zavisimost' ot porta        
               databases/postgresql90-client. Kak svyazannaya peremennaya,    
   USE_PGSQL   WANT_PGSQL_VER mozhet byt' ustanovlena v znachenie 83, 84, 90, 
               91 ili 92. Vy mozhete ukazat' maksimal'noe i minimal'noe       
               znacheniya; WANT_PGSQL_VER= 90+ sdelaet port zavisimym ot      
               minimal'noj versii 9.0.                                        
               Esli peremennaya imeet znachenie yes, dobavlyaet zavisimost'   
   USE_SQLITE  ot porta databases/sqlite3. Peremennaya mozhet prinimat'       
               znacheniya: 3, 2.                                              

   Podrobnee smotrite v bsd.database.mk.

6.23. Zapusk i ostanovka sluzhb (scenarii rc)

   Scenarii rc.d ispol'zuyutsya dlya zapuska sluzhb pri zapuske sistemy i
   dayut administratoru standartnyj sposob ostanovki, zapuska i perezapuska
   sluzhby. Porty integriruyutsya v sistemnuyu infrastrukturu rc.d.
   Podrobnosti po eio ispol'zovaniyu mozhno najti v glave rc.d Rukovodstva.
   Podrobnoe ob"yasnenie dostupnyh komand nahoditsya v rc(8) i rc.subr(8).
   Nakonec, est' stat'yao prakticheskih aspektah napisaniya scenariev rc.d.

   Ustanovit' mozhno odin ili bolee scenariev rc.d:

 USE_RC_SUBR=    doormand

   Scenarii obyazany razmeschat'sya v podkataloge files s obyazatel'nym
   dobavleniem suffiksa .in k imeni fajla. Dlya `etogo fajla budut
   ispol'zovat'sya standartnye rasshireniya SUB_LIST. Takzhe osobenno
   privetstvuetsya ispol'zovanie rasshirenij %%PREFIX%% i %%LOCALBASE%%.
   Podrobnee o SUB_LIST v sootvetstvuyuschej glave.

   Do FreeBSD 6.1-RELEASE integraciya s rcorder(8) dostupna cherez
   ispol'zovanie USE_RCORDER vmesto USE_RC_SUBR. Odnako, ispol'zovat' `etot
   metod ne nuzhno, esli vash port ne vklyuchaet opciyu po svoej ustanovke v
   osnovnuyu sistemu ili sluzhbe ne nuzhno zapuskat'sya do vypolneniya
   scenariya FILESYSTEMS iz rc.d osnovnoj sistemy.

   Nachinaya s FreeBSD 6.1-RELEASE lokal'nye scenarii rc.d (vklyuchaya
   ustanovlennye iz portov) vklyucheny v obschij rcorder(8) osnovnoj sistemy.

   Primer prostogo scenariya rc.d:

 #!/bin/sh

 # $FreeBSD$
 #
 # PROVIDE: doormand
 # REQUIRE: LOGIN
 # KEYWORD: shutdown
 #
 #
 # Add the following lines to /etc/rc.conf.local or /etc/rc.conf to enable doorman:
 # doorman_enable (bool):      Set to "NO" by default.
 #                             Set it to "YES" to enable doorman
 # doorman_config (path):      Set to "%%PREFIX%%/etc/doormand/doormand.cf" by default.
 # Add the following lines to /etc/rc.conf.local or /etc/rc.conf
 # to enable this service:
 #
 # doormand_enable (bool):       Set to NO by default.
 #                               Set it to YES to enable doormand.
 # doormand_config (path):       Set to %%PREFIX%%/etc/doormand/doormand.cf
 #                               by default.
 #

 . /etc/rc.subr

 name=doormand
 rcvar=doormand_enable

 load_rc_config $name

 : ${doormand_enable:="NO"}
 : ${doormand_config="%%PREFIX%%/etc/doormand/doormand.cf"}

 command=%%PREFIX%%/sbin/${name}
 pidfile=/var/run/${name}.pid

 command_args="-p $pidfile -f $doormand_config"

 run_rc_command "$1"

   Esli net stoyaschej prichiny zapuskat' sluzhby ran'she vseh portov,
   scenarii dolzhny ispol'zovat'

 REQUIRE: LOGIN

   Esli sluzhba rabotaet pod opredelennym pol'zovatelem (otlichnym ot root),
   to `eto delaetsya prinuditel'no. V scenarij vyshe vklyuchena konstrukciya

 KEYWORD: shutdown

   potomu chto vymyshlennyj port, kotoryj my ispol'zuem v kachestve primera,
   zapuskaet sluzhbu, i ona dolzhna korrektno zavershit'sya pri vyklyuchenii
   sistemy. Esli scenarij ne zapuskaet postoyannuyu sluzhbu, to `eto ne
   yavlyaetsya neobhodimym.

   Dlya neobyazatel'nyh `elementov konfiguracii prisvoenie peremennoj po
   umolchaniyu v stile "=" yavlyaetsya bolee predpochtitel'nym po sravneniyu
   so stilem ":=", ispol'zuemym zdes', poskol'ku pervyj ustanavlivaet
   znachenie po umolchaniyu tol'ko esli peremennaya ne ustanovlena, a
   poslednij ustanavlivaet eio, esli peremennaya ne ustanovlena ili obnulena.
   Pol'zovatel' vpolne mozhet napisat' v svoem fajle rc.conf.local
   chto-nibud' tipa

 doormand_flags=""

   i togda proizojdet neumestnaya podstanovka peremennoj s ispol'zovaniem
   ":=", chto pereopredelit namereniya pol'zovatelya. Peremennaya _enable
   yavlyaetsya obyazatel'noj; znacheniem po umolchaniyu dolzhno byt' ":".

  Primechanie:

   Novye scenarii sleduet dobavlyat' bez okonchaniya .sh.

  6.23.1. Kontrol'nyj spisok pered vneseniem izmenenij

   Pered tem, kak otsylat' port so scenariem rc.d, i tem bolee pered ego
   kommitom, sver'tes' so sleduyuschim kontrol'nym spiskom, chtoby
   ubedit'sya, chto port dlya `etogo gotov.

    1. Esli `eto novyj fajl, zakanchivaetsya li on na .sh? Esli `eto tak, to
       imya fajla dolzhno byt' izmeneno na file.in, poskol'ku novye fajly
       rc.d ne mogut okanchivat'sya na takoe rasshirenie.

    2. Prisutstvuet li v fajle teg $FreeBSD$?

    3. Sootvetstvuyut li drug drugu imya fajla (bez .in), stroka PROVIDE i
       $name? Imya fajla, sovpadayuschee s PROVIDE, uproschaet otladku,
       osobenno dlya problem, svyazannyh s rcorder(8). Sootvetstvie imeni
       fajla i $name takzhe uproschaet ponimanie, kakie peremennye imeyut
       otnoshenie k scenariyu v rc.conf[.local]. Poslednee takzhe yavlyaetsya
       tem, chto vy mogli by nazvat' "politikoj" dlya vseh novyh scenariev,
       vklyuchaya te, chto vhodyat v bazovuyu sistemu.

    4. Soderzhit li stroka REQUIRE znachenie LOGIN? `Eto uslovie obyazatel'no
       dlya scenariev, rabotayuschih ne iz pod superpol'zovatelya. Esli
       scenarij zapuskaetsya iz-pod superpol'zovatelya, to stoit li ego
       zapuskat' do LOGIN? Esli net, to ego sleduet zapuskat' posle, tak
       chtoby my mogli svobodno sgruppirovat' lokal'nye scenarii v toj tochke
       rcorder(8), kogda pochti vse scenarii v bazovoj sisteme uzhe
       startovali.

    5. Zapuskaet li scenarij postoyannuyu sluzhbu? Esli da, to on dolzhen
       imet' KEYWORD: shutdown.

    6. Ubedites' v tom, chto v scenarii otsutstvuet KEYWORD: FreeBSD. `Eto
       perestalo byt' nuzhnym i nezhelatel'no uzhe mnogo let. `Eto takzhe
       sluzhit indikatorom togo, chto novyj scenarij byl skopirovan so
       starogo, po`etomu osoboe vnimanie dolzhno byt' udeleno pri proverke.

    7. Esli scenarij ispol'zuet interpretiruemyj yazyk, takoj kak perl,
       python ili ruby, to ubedites', chto znachenie command_interpreter
       ustanovleno dolzhnym obrazom. V protivnom sluchae

 # service name stop

       vozmozhno budet rabotat' nepravil'no. Smotrite service(8) dlya
       polucheniya dopolnitel'noj informacii.

    8. Vse li vhozhdeniya /usr/local byli zameneny na %%PREFIX%%?

    9. Idet li prisvoenie peremennym znachenij po umolchaniyu posle
       load_rc_config?

   10. Ispol'zuyutsya li pustye stroki pri prisvoenii znachenij po
       umolchaniyu? Takie prisvoeniya dolzhny byt' udaleny, no pereprover'te,
       chto `eti parametry zadokumentirovany v kommentariyah v nachale fajla.

   11. Dejstvitel'no li v scenariyah ispol'zuyutsya znacheniya, prisvoennye
       peremennym?

   12. YAvlyayutsya li parametry po umolchaniyu, perechislennye v name_flags,
       obyazatel'nymi? Esli `eto tak, to ih sleduet pomestit' v command_args.
       Parametr -d zdes' - `eto kak krasnyj flag (proshu proscheniya za
       kalambur), poskol'ku obychno on primenyaetsya dlya "demonizacii"
       processa i po`etomu na samom dele obyazatel'nyj.

   13. Nikogda ne vklyuchajte peremennuyu name_flags v command_args (i
       naoborot; v prochem, takaya oshibka vstrechaetsya rezhe).

   14. Zapuskaet li scenarij kakoj-libo kod bezuslovno? `Eto nehorosho.
       Obychno takie veschi mogut/dolzhny pomeschat'sya v start_precmd.

   15. Vse logicheskie usloviya dolzhny ispol'zovat' funkciyu checkyesno. Ne
       pishite samopisnyh proverok dlya [Yy][Ee][Ss], i tak dalee.

   16. Esli v scenarii vypolnyaetsya cikl (naprimer, ozhidanie chego-libo
       pered startom), ispol'zuetsya li schetchik dlya zaversheniya cikla? My
       ne hotim beskonechnogo ozhidaniya zagruzki v sluchae vozniknoveniya
       oshibki.

   17. Sozdaet li scenarij fajly ili katalogi, kotorym nuzhny osobye prava
       dostupa? Naprimer, fajl pid, kotoryj dolzhen prinadlezhat'
       pol'zovatelyu, iz-pod kotorogo zapuskaetsya process. Vmesto
       tradicionnyh komand touch(1)/chown(8)/chmod(1) podumajte ob
       ispol'zovanii install(1) s podhodyaschimi argumentami komandnoj
       stroki, dlya togo chtoby vypolnit' vsyu proceduru za odin shag.

6.24. Dobavlenie pol'zovatelej i grupp

   Nekotorye porty trebuyut v ustanovlennoj sisteme nalichie opredelennogo
   pol'zovatelya. Vyberite svobodnyj UID v diapazone ot 50 do 999 i
   zaregistrirujte ego v ports/UIDs (dlya pol'zovatelej) i/ili v ports/GIDs
   (dlya grupp). Udostover'tes', chto ne ispol'zuete UID, uzhe ispol'zuemyj
   sistemoj ili drugimi portami.

   Pozhalujsta, vklyuchite v patch izmenenie dlya `etih dvuh fajlov, esli vam
   trebuetsya sozdat' novogo pol'zovatelya ili gruppu dlya vashego porta.

   Zatem vy smozhete ispol'zovat' v vashem Makefile peremennye USERS i
   GROUPS, i pol'zovatel' avtomaticheskie sozdastsya pri ustanovke porta.

   Tekuschij perechen' zarezervirovannyh UID i GID nahoditsya v ports/UIDs i
   ports/GIDs.

6.25. Porty, trebuyuschie nalichiya ishodnyh tekstov yadra

   Nekotorym portam (takim kak zagruzhaemye moduli yadra) dlya kompilyacii
   nuzhny fajly s ishodnymi tekstami yadra. Nizhe ukazan korrektnyj sposob
   opredeleniya, ustanovleny li oni pol'zovatelem:

 .if !exists(${SRC_BASE}/sys/Makefile)
 IGNORE=         requires kernel sources to be installed
 .endif

                    Glava 7. Prodvinutye praktiki pkg-plist

   Soderzhanie

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

   7.2. Pustye katalogi

   7.3. Konfiguracionnye fajly

   7.4. Dinamicheskij ili staticheskij spisok upakovki

   7.5. Avtomaticheskoe sozdanie spiska upakovki

7.1. 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%% i %%PERL_VER%% oboznachayut polnyj nomer versii perl
   (naprimer, 5.8.9). Nekotorye drugie %%VARS%%, imeyuschie otnoshenie k
   fajlam dokumentacii porta, opisany v sootvetstvuyuschem razdele.

   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.

   Esli vash port ustanavlivaet fajly v sootvetstvii s ustanovlennymi v portu
   opciyami, to obychnym sposobom upravleniya yavlyaetsya dobavlenie
   prefiksov %%TAG%% dlya strok pkg-plist s dobavleniem `etogo TAG v
   peremennuyu PLIST_SUB vnutri Makefile so special'nym znacheniem @comment,
   kotoroe ukazyvaet paketnym instrumentam ignorirovat' `eti stroki:

 .if defined(WITH_X11)
 PLIST_SUB+=     X11=""
 .else
 PLIST_SUB+=     X11="@comment "
 .endif

   i v samom pkg-plist:

 %%X11%%bin/foo-gui

   `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, PLIST_DIRS i PLIST_DIRSTRY. Kazhdoe iz
   nih rassmatrivaetsya kak perechen' putej dlya zapisi v TMPPLIST
   soderzhimogo PLIST. Imena, perechislennye v PLIST_FILES, PLIST_DIRS i
   PLIST_DIRSTRY podvergayutsya podstanovke %%VAR%%, kak opisano vyshe. Za
   isklyucheniem `etogo, imena iz PLIST_FILES budut poyavlyat'sya v
   okonchatel'nom variante perechnya sborki bez izmenenij, togda kak @dirrm i
   @dirrmtry budut sootvetstvenno predshestvovat' imenam iz PLIST_DIRS i
   PLIST_DIRSTRY. Dlya togo chtoby izmeneniya vstupili v silu, PLIST_FILES,
   PLIST_DIRS i PLIST_DIRSTRY dolzhny zadavat'sya do togo, kak budet
   zapisyvat'sya TMPPLIST, to est' v celi pre-install ili eschio ran'she.

7.2. Pustye katalogi

  7.2.1. Ochistka pustyh katalogov

   Zastav'te vash porty udalyat' pustye katalogi 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' oshibki, potomu chto drugie porty
   ispol'zuyut tot zhe samyj podkatalog. Vy mozhete ispol'zovat' @dirrmtry
   dlya udaleniya tol'ko pustyh katalogov bez vydachi preduprezhdenij.

 @dirrmtry share/doc/gimp

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

  7.2.2. Sozdanie pustyh katalogov

   Pustym katalogam, sozdavaemym vo vremya ustanovki porta, nuzhno osoboe
   vnimanie. Oni ne budut sozdany pri ustanovke paketa, potomu chto pakety
   soderzhat tol'ko fajly, a pkg_add(1) sozdaet dlya nih katalogi po mere
   nadobnosti. CHtoby ubedit'sya, chto pustoj katalog sozdaetsya pri
   ustanovke paketa, dobav'te `etu stroku v pkg-plist pered
   sootvetstvuyuschej strokoj @dirrm:

 @exec mkdir -p %D/share/foo/templates

7.3. Konfiguracionnye fajly

   Esli vash port ustanavlivaet konfiguracionnye fajly v katalog PREFIX/etc
   (ili kuda-to esche), ne delajte ih prostogo perechisleniya 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 fajl(y) s primerami s rasshireniem
   filename.sample. Zatem skopirujte fajl s primerom na mesto nastoyaschego
   fajla konfiguracii, esli takovoj eschio ne suschestvuet. Pri
   deinstallyacii udalyajte fajl konfiguracii tol'ko v tom sluchae, esli on
   identichen fajlu s rasshireniem .sample. Vam nuzhno upravlyat' `etim v
   Makefile i v pkg-plist (dlya ustanovki iz paketa).

   Primer chasti Makefile:

 post-install:
         @if [ ! -f ${PREFIX}/etc/orbit.conf ]; then \
                 ${CP} -p ${PREFIX}/etc/orbit.conf.sample ${PREFIX}/etc/orbit.conf ; \
         fi

   Dobav'te po tri stroki v pkg-plist dlya kazhdogo konfiguracionnogo fajla,
   kak pokazano nizhe:

 @unexec if cmp -s %D/etc/orbit.conf.sample %D/etc/orbit.conf; then rm -f %D/etc/orbit.conf; fi
 etc/orbit.conf.sample
 @exec if [ ! -f %D/etc/orbit.conf ] ; then cp -p %D/%F %B/orbit.conf; fi

   Dannye stroki yavlyayutsya uporyadochennymi. Na `etape udaleniya fajl s
   primerom sravnivaetsya s rabochim konfiguracionnym fajlom. Polnoe
   sovpadenie oznachaet otsutstvie kakih-libo izmenenij v rabochem fajle so
   storony pol'zovatelya, i sledovatel'no `etot fajl mozhet byt' bezopasno
   udalion. Tak kak fajl s primerom vsio eschio dolzhen suschestvovat' dlya
   sravneniya, stroka @unexec sleduet pered imenem fajla s primerom
   konfiguracii. Na `etape ustanovki, esli rabochij fajl konfiguracii
   otsutstvuet, on kopiruetsya iz fajla s primerom. Fajl s primerom
   obyazatel'no dolzhen byt' ustanovlen do operacii kopirovaniya, po`etomu
   stroka @exec sleduet posle imeni fajla s primerom konfiguracii.

   Dlya polucheniya dopolnitel'nogo otladochnogo vyvoda na `ekran mozhno
   vremenno udalit' parametr -s iz komandy cmp(1).

   Dlya polucheniya dopolnitel'noj inforacii po ispol'zovaniyu %D i prochih
   markerov podstanovki obratites' k stranice Spravochnika pkg_create(1).

   Esli suschestvuet dejstvitel'no stoyaschaya prichina ne ustanavlivat'
   rabochij fajl konfiguracii po umolchaniyu, uberite stroku @exec iz
   pkg-plist i dobav'te soobschenie, ukazyvayuschee na to, chto pol'zovatel'
   obyazan skopirovat' i otredaktirovat' `etot fajl pered tem, kak
   programmnoe obespechenie nachniot rabotat'.

7.4. Dinamicheskij ili staticheskij spisok upakovki

   Staticheskij spisok upakovki - `eto spisok upakovki, kotoryj dostupen v
   Kollekcii Portov ili kak fajl pkg-plist (s podstanovkoj peremennyh ili bez
   neio), ili kak vstroennyj v Makefile posredstvom PLIST_FILES, PLIST_DIRS i
   PLIST_DIRSTRY. Dazhe esli soderzhimoe yavlyaetsya avtomaticheski
   porozhdaemym pri pomoschi instrumenta ili v rezul'tate vypolneniya celi v
   Makefile do vklyucheniya v Kollekciyu Portov kommitterom, to spisok vsio
   eschio budet schitat'sya staticheskim, poskol'ku ego mozhno uznat' bez
   neobhodimosti skachivaniya ili kompilyacii distributiva.

   Dinamicheskij spisok upakovki `eto spisok upakovki, kotoryj poluchaetsya
   vo vremya kompilyacii porta i stroitsya na osnove ustanavlivaemyh fajlov i
   katalogov. Uznat' takoj spisok nevozmozhno do togo, kak ishodnyj kod
   portiruemogo prilozheniya budet skachen i skompilirovan, ili posle zapuska
   make clean.

   Hotya ispol'zovanie dinamicheskih spisok upakovki ne zaprescheno,
   soprovozhdayuschie dolzhny ispol'zovat' staticheskie spiski upakovki
   vezde, gde `eto vozmozhno, poskol'ku `eto pozvolyaet pol'zovatelyam
   vypolnyat' grep(1) po dostupnym portam dlya obnaruzheniya, naprimer,
   kotoryj port ustanavlivaet opredelennyj fajl. Dinamicheskie spiski dolzhny
   byt' ispol'zovany v osnovnom dlya slozhnyh portov, dlya kotoryh izmeneniya
   v spiske upakovki kardinal'nym obrazom osnovany na neobyazatel'nyh
   vozmozhnostyah porta (i, takim obrazom, delaya soprovozhdenie staticheskih
   spiskov upakovki nevozmozhnym), ili portov, kotorye izmenyayut spisok
   upakovki na osnove versii ispol'zuemogo im programmnogo obespecheniya
   (naprimer, porty, kotorye porozhdayut dokumenty pri pomoschi Javadoc).

   Soprovozhdayuschim, kotorye predpochitayut dinamicheskie spiski upakovki,
   rekomenduetsya dobavlyat' v svoi porty novuyu cel', kotoraya proizvodit
   fajl pkg-plist, chtoby pol'zovateli mogli izuchat' soderzhimoe.

7.5. Avtomaticheskoe sozdanie spiska upakovki

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

   Dalee sozdajte vremennoe derevo katalogov, kuda mozhet byt' ustanovlen
   vash port, i ustanovite vse zavisimosti.

 # mkdir /var/tmp/`make -V PORTNAME`
 # mtree -U -f `make -V MTREE_FILE` -d -e -p /var/tmp/`make -V PORTNAME`
 # make depends PREFIX=/var/tmp/`make -V PORTNAME`

   Sohranite strukturu katalogov v novom fajle.

 # (cd /var/tmp/`make -V PORTNAME` && find -d * -type d) | sort > OLD-DIRS

   Sozdajte pustoj fajl pkg-plist:

 # :>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/`make -V PORTNAME`
 # (cd /var/tmp/`make -V PORTNAME` && find -d * \! -type d) | sort > pkg-plist

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

 # (cd /var/tmp/`make -V PORTNAME` && 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. Skript plist - `eto scenarij na Ruby, kotoryj avtomatiziruet
   bol'shinstvo ruchnyh operacij, izlozhennyh v predyduschem paragrafe.

   Pervyj shag takoj zhe kak vyshe: vzyat' pervye tri stroki, mkdir, mtree i
   make depends. Zatem sobrat' i ustanovit' port:

 # make install PREFIX=/var/tmp/`make -V PORTNAME`

   I pozvolit' plist sozdat' fajl pkg-plist:

 # /usr/ports/Tools/scripts/plist -Md -m `make -V MTREE_FILE` /var/tmp/`make -V PORTNAME` > pkg-plist

   Spisok upakovki vsio eschio dolzhen byt' podchischen vruchnuyu kak opisano
   vyshe.

   Dlya pervonachal'nogo sozdaniya pkg-plist mozhno ispol'zovat' drugoj
   instrument ports-mgmt/genplist. Kak i s prochimi avtomatizirovannymi
   instrumentami, poluchaemyj pkg-plist sleduet proverit' i pri neobhodimosti
   otredaktirovat' vruchnuyu.

                              Glava 8. Fajly pkg-*

   Soderzhanie

   8.1. pkg-message

   8.2. pkg-install

   8.3. pkg-deinstall

   8.4. pkg-req

   8.5. Izmenenie imion fajlov pkg-*

   8.6. Ispol'zovanie SUB_FILES i SUB_LIST

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

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

   Esli dolzhny vyvodit'sya nekotorye stroki o knobs vremeni postroeniya ili
   preduprezhdeniya, ispol'zujte ECHO_MSG. Fajl pkg-message tol'ko dlya
   posleustanovochnyh shagov. Takzhe sleduet imet' v vidu razlichie mezhdu
   ECHO_MSG i ECHO_CMD. Pervoe prednaznacheno dlya vyvoda na `ekran
   informacionnogo teksta, a vtoroe dlya konvejera komand:

 update-etc-shells:
         @${ECHO_MSG} "updating /etc/shells"
         @${CP} /etc/shells /etc/shells.bak
         @( ${GREP} -v ${PREFIX}/bin/bash /etc/shells.bak; \
                 ${ECHO_CMD} ${PREFIX}/bin/bash) >/etc/shells
         @${RM} /etc/shells.bak

  Primechanie:

   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.

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

  Primechanie:

   `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 strokoj vida
   PKG_PREFIX=${PREFIX} ${SH} $ {PKGINSTALL}${PKGNAME} PRE-INSTALL.

8.3. pkg-deinstall

   `Etot skript vyzyvaetsya pri udalenii paketa.

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

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

8.5. Izmenenie imion fajlov pkg-*

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

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

   Peremennaya Znachenie po umolchaniyu 
   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.

8.6. Ispol'zovanie SUB_FILES i SUB_LIST

   Peremennye SUB_FILES i SUB_LIST podhodyat dlya zadaniya v fajlah porta
   dinamicheskih znachenij, takih kak PREFIX ustanovki v pkg-message.

   V peremennoj SUB_FILES ukazyvaetsya perechen' fajlov dlya avtomaticheskogo
   izmeneniya. Kazhdyj file iz perechnya SUB_FILES obyazan imet'
   sootvetstvuyuschij file.in, prisutstvuyuschij v FILESDIR. Izmenennaya
   versiya budet sozdana v WRKDIR. Fajly, opredelennye v kachestve znacheniya
   USE_RC_SUBR (ili ustarevshego USE_RCORDER), avtomaticheski dobavlyayutsya
   v SUB_FILES. Dlya fajlov pkg-message, pkg-install, pkg-deinstall i pkg-req
   ustanavlivaetsya sootvetstvuyuschaya peremennaya Makefile, ukazyvayuschaya
   na obrabotannuyu versiyu.

   Peremennaya SUB_LIST soderzhit perechen' par VAR=VALUE. V kazhdom fajle iz
   SUB_FILES dlya kazhdoj pary budet proizvedena zamena %%VAR%% na VALUE.
   Nekotorye obschie pary opredelyayutsya avtomaticheski: PREFIX, LOCALBASE,
   DATADIR, DOCSDIR, EXAMPLESDIR, WWWDIR i ETCDIR. Lyubaya stroka,
   nachinayuschayasya s @comment, budet udalena iz konechnogo fajla posle
   podstanovki peremennoj.

   V sleduyuschem primere v pkg-message budet sdelana zamena %%ARCH%% na
   sistemnuyu arhitekturu:

 SUB_FILES=     pkg-message
 SUB_LIST=      ARCH=${ARCH}

   Obratite vnimanie, chto v `etom primere v FILESDIR obyazatel'no
   suschestvovanie fajla pkg-message.in.

   Primer horoshego pkg-message.in:

 Now it's time to configure this package.
 Copy %%PREFIX%%/share/examples/putsy/%%ARCH%%.conf into your home directory
 as .putsy.conf and edit it.

                      Glava 9. Testirovanie vashego porta

   Soderzhanie

   9.1. Zapusk make describe

   9.2. Portlint

   9.3. Port Tools

   9.4. PREFIX i DESTDIR

   9.5. Tinderbox

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

  Primechanie:

   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 zavisimosti ne bylo udovletvoreno. (Smotrite
   Razdel 12.15, <<Izbegajte ispol'zovaniya konstrukcii .error>>.)

   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.

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

9.3. Port Tools

   Programma ports-mgmt/porttools vhodit v sostav Kollekcii Portov.

   port yavlyaetsya scenariem perednego plana, kotoryj mozhet uprostit' vam
   zadachu testirovaniya. Esli vy hotite proverit' novyj port ili obnovit'
   suschestvuyuschij, to vy mozhete ispol'zovat' port test dlya proverki
   vashego porta, vklyuchaya proverku portlint. `Eta komanda takzhe nahodit i
   otobrazhaet lyubye fajly, kotorye nevklyuchennye v pkg-plist. Smotrite
   sleduyuschij primer:

 # port test /usr/ports/net/csup

9.4. PREFIX i DESTDIR

   Peremennaya PREFIX opredelyaet, kuda budet ustanovlen port. Po umolchaniyu
   `eto /usr/local, no mozhet menyat'sya pol'zovatelem na sobstvennyj put',
   takoj kak /opt. V vashem portu znachenie `etoj peremennoj dolzhno
   uchityvat'sya.

   Esli pol'zovatel' ustanovil peremennuyu DESTDIR, to ona opredelyaet polnoe
   al'ternativnoe okruzhenie, obychno, `eto jail ili ustanovlennaya sistema,
   smontirovannaya v meste, otlichnom ot /. Na samom dele port
   ustanavlivaetsya v DESTDIR/PREFIX i registriruetsya v baze dannyh paketov
   v DESTDIR/var/db/pkg. Poskol'ku upravlenie DESTDIR proizvoditsya
   avtomaticheski infrastrukturoj portov s pomosch'yu chroot(8), vam ne
   nuzhny nikakie izmeneniya ili proyavlenie osoboj ostorozhnosti pri
   napisanii DESTDIR-sovmestimyh portov.

   Znachenie peremennoj PREFIX budet ustanovleno v LOCALBASE (po umolchaniyu
   /usr/local). Esli zadana peremennaya USE_LINUX_PREFIX, to PREFIX primet
   znachenie LINUXBASE (po umolchaniyu /compat/linux).

   Izbeganie yavno propisyvaemyh putej /usr/local v ishodnom kode sdelaet
   port gorazdo bolee gibkim i sposobnym udovletvorit' potrebnosti drugih
   serverov. CHasto `etogo mozhno dobit'sya prostoj zamenoj strok /usr/local
   v razlichnyh fajlah Makefile vnutri porta na ${PREFIX}. `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. Nalichie yavno ukazannyh putej mozhno bystro
   proverit' sleduyuschim obrazom:

 # make clean; make package PREFIX=/var/tmp/`make -V PORTNAME`

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

   `Etot test ne najdet yavno ukazannyh putej vnutri fajlov porta i ne
   proverit korrektnost' ispol'zovaniya LOCALBASE v kachestve ssylki na fajly
   iz drugih portov. Port, vremenno ustanovlennyj v /var/tmp/`make -V
   PORTNAME`, sleduet proveryat' na rabotosposobnost', chtoby ubedit'sya v
   otsutstvii problem s putyami.

   Peremennaya PREFIX ne dolzhna zadavat'sya yavno v fajle Makefile porta.
   Pol'zovateli pri ustanovke porta mogut zadat' v PREFIX svoe sobstvennoe
   mesto, i port dolzhen uchityvat' `eto znachenie.

   Obratites' k programmam/fajlam iz drugih portov s peremennymi,
   perechislennymi vyshe, bez ukazaniya yavnyh marshrutov. Naprimer, esli
   vash port trebuet, chtoby makros PAGER yavlyalsya polnym putem utility
   less, ne ispol'zujte strokovyj put' /usr/local/bin/less. Vmesto `etogo
   ispol'zujte ${LOCALBASE}:

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

   Put' s ispol'zovaniem LOCALBASE imeet bol'she shansov ostavat'sya
   rabotosposobnym, esli sistemnyj administrator peremestil vsio derevo
   /usr/local kuda-to v drugoe mesto.

9.5. Tinderbox

   Esli vy alchnyj kontributor portov, to vy mozhete zahotet' vzglyanut' na
   Tinderbox. `Eto moschnaya sistema postroeniya i testirovaniya portov,
   osnovannaya na scenariyah, ispol'zuemyh v Pointyhat. Tinderbox mozhno
   ustanovit', ispol'zuya port ports-mgmt/tinderbox. Obyazatel'no prochitajte
   postavlyaemuyu dokumentaciyu, poskol'ku konfiguraciya ne yavlyaetsya
   trivial'noj.

   Dlya polucheniya podrobnostej posetite vebsajt Tinderbox.

                     Glava 10. Obnovlenie otdel'nogo porta

   Soderzhanie

   10.1. Ispol'zovanie SVN dlya sozdaniya patchej

   10.2. Fajly UPDATING i MOVED

   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'
   Subversion ili portsnap(8) 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
   soprovozhdayuschego ports@FreeBSD.org, kotoryj yavlyaetsya vsego lish'
   adresom obschego spiska rassylki, tak chto otpravka tuda soobschenij,
   skoree vsego, v dannom sluchae ne pomozhet.

   Esli soprovozhdayuschij prosit vas vypolnit' obnovlenie, libo
   soprovozhdayuschij otsutstvuet, to u vas poyavlyaetsya shans pomoch'
   FreeBSD, prigotoviv obnovlenie samim! Pozhalujsta, delajte `eto s
   ispol'zovaniem komandy diff(1) v osnovnoj sisteme.

   CHtoby sozdat' podhodyaschij diff dlya odnogo patcha, skopirujte fajl,
   kotoryj nuzhno propatchit', v something.orig, sohranite vashi izmeneniya v
   something, a zatem sozdajte vashe patch:

 % diff -u something.orig something > something.diff

   V protivnom sluchae, vam sleduet vospol'zovat'sya metodom svn diff
   (Razdel 10.1, <<Ispol'zovanie SVN dlya sozdaniya patchej>>), libo
   skopirovat' soderzhimoe porta v otdel'nyj katalog i primenit' rezul'tat
   rekursivnoj komandy diff(1) 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. (V chastnosti,
   ubedites', chto vy ochistili rabochie katalogi komandoj make clean).

   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
   soprovozhdayuschim. Vo FreeBSD imeetsya bolee 4000 portov bez podderzhki,
   i `eto kak raz ta oblast', gde vsegda nuzhny dobrovol'cy. (Detal'noe
   opisanie obyazannostej soprovozhdayuschego mozhno najti v razdele v
   Rukovodstve Razrabotchika.)

   Luchshe vsego poslat' nam diff-fajl, vklyuchiv ego v posylku po komande
   send-pr(1) (kategoriya ports). Esli vy soprovozhdaete 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 svn(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'.

  Primechanie:

   Povtoryaem esche raz - dlya posylki obnovlenij suschestvuyuschih portov
   ispol'zujte utilitu diff(1), a ne shar(1)! `Eto pomozhet ponyat'
   kommitteram portov, chto imenno bylo izmeneno.

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

10.1. Ispol'zovanie SVN dlya sozdaniya patchej

   Po vozmozhnosti prisylajte ispravleniya v formate svn(1) diff; - v takom
   vide ih prosche ispol'zovat' po sravneniyu s raznicej mezhdu <<starym i
   novym>> katalogami. K tomu zhe, vam prosche uvidet' vashi izmeneniya i
   obnovit' ih v sluchae, esli chto-nibud' izmenilos' v Kollekcii Portov s
   teh por, kak vy nachali rabotu, poka vy ne otpravite vashi izmeneniya,
   libo esli kommitter poprosit vas ispravit' chto-to esche.

 % cd ~/my_wrkdir 1
 % svn co https://svn0.us-west.FreeBSD.org/ports/head/dns/pdnsd 2
 % cd ~/my_wrkdir/pdnsd

   1 `Eto mozhet byt' gde ugodno; mesto, v kotorom proizvoditsya postroenie   
     portov, ne privyazano k /usr/ports/.                                     
   2 svn0.us-west.FreeBSD.org - `eto obschedostupnyj SVN server. Vyberite     
     blizhajshee zerkalo i prover'te sertifikat zerkaliruyuschego servera na  
     nalichie v perechne zerkaliruyuschih sajtov Subversion.                  

   Nahodyas' v rabochem kataloge, vnosite lyubye izmeneniya, kotorye obychno
   delayut dlya porta. Pri dobavlenii ili udalenii fajla ispol'zujte svn dlya
   otslezhivaniya `etih izmenenij:

 % svn add new_file
 % svn remove deleted_file

   Ubedites', chto vy proveryaete port v sootvetstvii s rekomenduemym
   poryadkom proverki, opisannym v Razdel 3.4, <<Testirovanie porta>> i
   Razdel 3.5, <<Proverka vashego porta utilitoj portlint>>.

 % svn status
 % svn update 1

   1 `Eta komanda popytaetsya vypolnit' sliyanie razlichij mezhdu vashim      
     patchem i tekuschim soderzhimym v SVN; vnimatel'no prover'te poluchennyj 
     vyvod. Bukva pered nazvaniem kazhdogo fajla oznachaet tip izmeneniya,    
     sdelannogo s `etim fajlom. Dlya polucheniya polnogo spiska smotrite      
     Tablica 10.1, <<Prefiksy fajlov dlya SVN update>>.                       

   Tablica 10.1. Prefiksy fajlov dlya SVN update

   U Fajl obnovlen bez problem.                                               
   G Fajl obnovlen bez problem (vy uvidite `eto tol'ko pri rabote s udalennym 
     repozitoriem).                                                           
   M Fajl s lokal'nymi izmeneniyami, sliyanie vypolneno bez konfliktov.       
   C Fajl s lokal'nymi izmeneniyami, sliyanie vypolneno s konfliktami.        

   Esli v rezul'tate vypolneniya svn update vy poluchili C, to `eto
   oznachaet, chto chto-to izmenilos' v repozitorii SVN i svn(1) ne smogla
   vypolnit' sliyanie vashih lokal'nyh izmenenij s poluchennymi iz
   repozitoriya. V lyubom sluchae nikogda ne pomeshaet prosmotret'
   izmeneniya, poskol'ku svn(1) nichego ne znaet o tom, kakim dolzhen byt'
   port, po`etomu `eta komanda mozhet (i, veroyatno, budet) delat' sliyanie
   teh izmenenij, kotorye ne imeyut smysla.

   Poslednim shagom yavlyaetsya sozdanie unificirovannogo diff(1) dlya fajlov
   otnositel'no SVN:

 % svn diff > ../`basename ${PWD}`.diff

  Primechanie:

   Informaciya o lyubyh udalyaemyh fajlov dolzhna byt' yavnym obrazom ukazana
   v PR, poskol'ku neobhodimost' v udalenii fajla dlya kommittera mozhet byt'
   neochevidna.

   Prisylajte svoi patchi v sootvetstvii s rukovodstvom, opisannom v
   Glava 10, Obnovlenie otdel'nogo porta.

10.2. Fajly UPDATING i MOVED

   Esli pri obnovlenii porta trebuyutsya special'nye shagi, takie kak
   izmenenie fajlov konfiguracii ili zapusk special'noj programmy, to vam
   sleduet `eto zadokumentirovat' v fajle /usr/ports/UPDATING. Format zapisi
   v `etom fajle privoditsya nizhe:

 YYYYMMDD:
   AFFECTS: users of portcategory/portname
   AUTHOR: Your name <Your email address>

   Special instructions

   Esli vy vklyuchaete tochnye instrukcii portmaster ili portupgrading,
   pozhalujsta, ubedites' v pravil'nom `ekranirovanii simvolov vnutri
   komandnoj obolochki.

   Fajl /usr/ports/MOVED soderzhit zapisi ob udalionnyh ili peremeschionnyh
   portah. Kazhdaya stroka v `etom fajle sostoit iz polej: nazvanie porta,
   mesto, kuda on byl peremeschion, data i prichina peremescheniya. Esli port
   byl udalion, to pole, ukazyvayuschee novoe mesto, mozhet ostavat'sya
   nezapolnennym. Polya dolzhny razdelyat'sya simvolom | (pipe), kak `eto
   pokazano nizhe:

 old name|new name (blank for deleted)|date of move|reason

   Datu sleduet vvodit' v formate YYYY-MM-DD. Novye zapisi sleduet dobavlyat'
   v konec fajla v hronologicheskom poryadke.

   Esli port byl peremeschion, no v dal'nejshem vosstanovlen na prezhnem
   meste, udalite v `etom fajle stroku, soderzhaschuyu informaciyu o
   peremeschenii.

   Poluchennye izmeneniya mozhno proverit' komandoj
   Tools/scripts/MOVEDlint.awk.

                         Glava 11. Bezopasnost' portov

   Soderzhanie

   11.1. Pochemu bezopasnost' tak vazhna

   11.2. Ispravlenie uyazvimostej bezopasnosti

   11.3. Obespechenie soobschestva informaciej

11.1. Pochemu bezopasnost' tak vazhna

   Oshibki v programmnom obespechenii poyavlyayutsya sluchajno. Vozmozhno,
   samye opasnye iz nih te, chto sozdayut uyazvimosti bezopasnosti. S
   tehnicheskoj tochki zreniya podobnye uyazvimosti dolzhny byt' zakryty
   putem ispravleniya vyzyvayuschih ih oshibok. Tem ne menee, politiki
   obrabotki nesuschestvennyh oshibok i uyazvimostej ochen' razlichayutsya.

   Obychnaya nebol'shaya oshibka zatragivaet tol'ko teh pol'zovatelej,
   kotorye zadejstvuyut nekotorye kombinacii nastroek, aktiviruyuschie `etu
   oshibku. Razrabotchik v konechnom schete vypustit patch, a zachtem novuyu
   versiyu programmnogo obespecheniya, svobodnogo ot oshibki, no bol'shinstvo
   pol'zovatelej ne poschitayut nuzhnym srazu zhe proizvesti obnovlenie,
   poskol'ku `eta oshibka nikogda u nih ne proyavlyalas'. Kriticheskaya
   oshibka, kotoraya mozhet privodit' k potere dannyh, predstavlyaet
   ser'eznuyu problemu. Tem ne menee, predusmotritel'nye pol'zovateli znayut,
   chto bol'shinstvo vozmozhnyh proisshestvij, i sredi nih programmnye
   oshibki, skoree vsego privodyat k potere dannyh, po`etomu oni vypolnyayut
   rezervnoe kopirovanie vazhnyh dannyh; dopolnitel'no, kriticheskaya oshibka
   budet obnaruzhena ochen' skoro.

   S uyazvimost'yu bezopasnosti vsio inache. Vo-pervyh, ona mozhet
   sohranyat'sya neobnaruzhennoj celye gody, potomu chto chasche vsego ne
   vyzyvaet oshibok v rabote. Vo-vtoryh, kompaniya zloumyshlennikov mozhet
   ispol'zovat' ee dlya polucheniya neavtorizovannogo dostupa k uyazvimoj
   sisteme, unichtozhit' ili podmenit' vazhnye dannye; v hudshem sluchae
   pol'zovatel' dazhe ne zametit nanesennyj uron. V-tret'ih, vzlom uyazvimoj
   sistemy chasto uproschaet zadachu proniknoveniya atakuyuschih v drugie
   sistemy, kotorye ne mogut byt' skomprometirovany inache. Takim obrazom,
   ustranenie uyazvimosti kak takovoj nedostatochno: sleduet razoslat' vsem
   zainteresovannym uvedomleniya v naibolee ponyatnoj i ischerpyvayuschej
   forme, chto pozvolit ocenit' risk i predprinyat' podhodyaschie mery.

11.2. Ispravlenie uyazvimostej bezopasnosti

   CHto kasaetsya portov i paketov, uyazvimost' bezopasnosti iznachal'no
   mozhet poyavit'sya v ishodnom distributive ili fajlah porta. V pervom
   sluchae, razrabotchik ishodnogo programmnogo obespecheniya skoree vsego
   srazu zhe vypustit patch ili novuyu versiyu, i vam lish' ponadobitsya
   srazu obnovit' port v sootvetstvii s ispravleniem avtora. Esli ispravlenie
   po kakoj-to prichine zaderzhivaetsya, vam sleduet libo pometit' port kak
   FORBIDDEN, libo dobavit' v port vash sobstvennyj patch. V sluchae
   uyazvimosti porta prosto isprav'te `etot port kak mozhno skoree. V lyubom
   sluchae nuzhno sledovat' standartnoj procedure otpravki vashego
   izmeneniya, esli vy ne obladaete pravami na kommit izmeneniya
   neposredstvenno v derevo portov.

  Vazhno:

   Byt' kommitterom portov nedostatochno dlya kommita proizvol'nogo porta.
   Pomnite, chto obychno u portov est' soprovozhdayuschie, mnenie kotoryh vy
   dolzhny uchityvat'.

   Pozhalujsta, ubedites', chto reviziya porta posle zakrytiya uyazvimosti
   uvelichena. Vot kak pol'zovateli, obnovlyayuschie ustanovlennye pakety na
   postoyannoj osnove, uvidyat, chto im nuzhno zapustit' obnovlenie. Krome
   togo, novyj paket budet sobran i rasprostranen cherez FTP i WWW zerkala,
   zameschaya uyazvimyj. Esli v processe ispravleniya uyazvimosti ne bylo
   izmeneno znachenie PORTVERSION, to dolzhno byt' uvelicheno znachenie
   PORTREVISION. Vam sleduet uvelichit' znachenie PORTREVISION posle
   dobavleniya v port fajla s patchem, no ne kogda vy obnovili port do
   poslednej versii programmnogo obespecheniya, poputno zatronuv pri `etom
   PORTVERSION. Za dal'nejshej informaciej obraschajtes' k
   sootvetstvuyuschemu razdelu.

11.3. Obespechenie soobschestva informaciej

  11.3.1. Baza dannyh VuXML

   Ochen' vazhnym i pervostepennym shagom pri dejstvii kak mozhno ran'she
   posle raskrytiya uyazvimosti yavlyaetsya uvedomlenie soobschestva
   pol'zovatelej porta ob opasnosti. Takie uvedomleniya sluzhat dvum celyam.
   Vo-pervyh, v sluchae dejstvitel'no ser'eznoj ugrozy, budet posovetovano
   primenit' mgnovennoe vozdejstvie. Naprimer, ostanovit' zatragivaemyj
   setevoj servis ili dazhe udalit' port celikom, poka uyazvimost' ne budet
   ustranena. Vo-vtoryh, massa pol'zovatelej imeet tendenciyu obnovlyat'
   ustanovlennye pakety tol'ko ot sluchaya k sluchayu. Iz uvedomleniya oni
   uznayut, chto dolzhny obnovit' paket bez promedleniya srazu zhe posle
   poyavleniya ispravlennoj versii.

   Uchityvaya ogromnoe chislo portov v dereve, nevozmozhno po kazhdomu
   sluchayu vypuskat' byulleten' bezopasnosti bez sozdaniya fluda i poteri
   vnimaniya soobschestva k momentu poyavleniya dejstvitel'no ser'eznyh
   prichin. Po`etomu uyazvimosti bezopasnosti, obnaruzhennye v portah,
   zapisyvayutsya v bazu dannyh FreeBSD VuXML. CHleny Komandy Oficerov
   Bezopasnosti takzhe otslezhivayut eio na predmet poyavleniya voprosov,
   trebuyuschih ih vmeshatel'stva.

   Esli vy obladaete pravami kommittera, vy mozhete sam obnovit' bazu dannyh
   VuXML. Tak vy pomozhete Komande Oficerov Bezopasnosti i svoevremenno
   poshlete cennuyu informaciyu soobschestvu. Tem ne menee, esli vy ne
   yavlyaetes' kommitterom ili verite, chto nashli isklyuchitel'no ser'eznuyu
   uyazvimost', to ne zadumyvayas' svyazhites' s Komandoj Oficerov
   Bezopasnosti napryamuyu kak `eto opisano na stranice informacionnoj
   bezopasnosti FreeBSD.

   Baza dannyh VuXML yavlyaetsya dokumentom XML. Ego ishodnyj fajl vuln.xml
   soderzhitsya pryamo vnutri porta security/vuxml. Po`etomu polnoe imya puti
   k fajlu budet PORTSDIR/security/vuxml/vuln.xml. Kazhdyj raz, pri
   obnaruzhenii vami v porte uyazvimosti bezopasnosti dobav'te ob `etom
   zapis' v `etot fajl. Poka vy ne znakomy s VuXML, luchshee, chto vy mozhete
   sdelat', `eto najti suschestvuyuschuyu zapis', podpadayuschuyu pod vash
   sluchaj, zatem skopirovat' ee i ispol'zovat' v kachestve shablona.

  11.3.2. Korotkoe vstuplenie v VuXML

   V sovokupnosti XML yavlyaetsya ochen' slozhnym formatom, i ego opisanie
   vyhodit daleko za ramki `etoj knigi. Tem ne menee, dlya dostizheniya
   osnovnogo ponimaniya struktury zapisi VuXML vam ponadobitsya vsego lish'
   ponyat' tegi. Imena tegov XML obramlyayutsya v uglovye skobki. Kazhdyj
   otkryvayuschij <tag> dolzhen imet' sovpadayuschij zakryvayuschij </tag>.
   Tegi mogut byt' vlozhennymi. Pri vlozhennosti vnutrennie tegi dolzhny byt'
   zakryty do zakrytiya vneshnih. Suschestvuet ierarhiya tegov, t.e. bolee
   slozhnye pravila vkladyvaniya tegov. `Eto pohozhe na HTML. Osnovnoe
   otlichie v rasshiryaemosti XML, t.e. v opredelenii sobstvennyh tegov.
   Iz-za svoej harakternoj struktury XML pridaet formu razroznennym dannym. V
   chastnosti, XML podhodit dlya razmetki opisanij uyazvimostej bezopasnosti.

   Teper' rassmotrim nastoyaschuyu zapis' VuXML:

 <vuln vid="f4bc80f4-da62-11d8-90ea-0004ac98a7b9"> 1
   <topic>Several vulnerabilities found in Foo</topic> 2
   <affects>
     <package>
       <name>foo</name> 3
       <name>foo-devel</name>
       <name>ja-foo</name>
       <range><ge>1.6</ge><lt>1.9</lt></range> 4
       <range><ge>2.*</ge><lt>2.4_1</lt></range>
       <range><eq>3.0b1</eq></range>
     </package>
     <package>
       <name>openfoo</name> 5
       <range><lt>1.10_7</lt></range> 6
       <range><ge>1.2,1</ge><lt>1.3_1,1</lt></range>
     </package>
   </affects>
   <description>
     <body xmlns="http://www.w3.org/1999/xhtml">
       <p>J. Random Hacker reports:</p> 7
       <blockquote
         cite="http://j.r.hacker.com/advisories/1">
         <p>Several issues in the Foo software may be exploited
           via carefully crafted QUUX requests.  These requests will
           permit the injection of Bar code, mumble theft, and the
           readability of the Foo administrator account.</p>
       </blockquote>
     </body>
   </description>
   <references> 8
     <freebsdsa>SA-10:75.foo</freebsdsa> 9
     <freebsdpr>ports/987654</freebsdpr> 10
     <cvename>CAN-2010-0201</cvename> 11
     <cvename>CAN-2010-0466</cvename>
     <bid>96298</bid> 12
     <certsa>CA-2010-99</certsa> 13
     <certvu>740169</certvu> 14
     <uscertsa>SA10-99A</uscertsa> 15
     <uscertta>SA10-99A</uscertta> 16
     <mlist msgid="201075606@hacker.com">http://marc.theaimsgroup.com/?l=bugtraq&amp;m=203886607825605</mlist> 17
     <url>http://j.r.hacker.com/advisories/1</url> 18
   </references>
   <dates>
     <discovery>2010-05-25</discovery> 19
     <entry>2010-07-13</entry> 20
     <modified>2010-09-17</modified> 21
   </dates>
 </vuln>

   Imena tegov dolzhny byt' samodokumentiruemymi, chtoby my sfokusirovalis'
   tol'ko na polyah, nuzhnyh nam dlya zapolneniya:

   1  `Eto teg verhnego urovnya zapisi VuXML. U nego est' obyazatel'nyj       
      atribut vid, ukazyvayuschij na universal'nyj unikal'nyj identifikator   
      (UUID) dlya `etoj zapisi (v kavychkah). Vy dolzhny formirovat' UUID     
      dlya kazhdoj novoj zapisi VuXML (i ne zabud'te zamenit' ee dlya         
      shablona UUID, esli vy ne pishete zapis' s nulya). Dlya polucheniya     
      VuXML UUID vy mozhete ispol'zovat' uuidgen(1).                          
   2  Odnostrochnoe opisanie najdennoj problemy.                              
   3  Zdes' perechisleny imena zatronutyh paketov. Mozhet byt' dano neskol'ko 
      imen, poskol'ku nekotorye pakety mogut byt' osnovany na odnom glavnom   
      porte ili programmnom produkte. Syuda mozhno vklyuchit' stabil'nuyu     
      vetv' i vetv' razrabotki, lokalizovannye versii i podchinennye porty,   
      zavisyaschie ot razlichnogo vybora vazhnyh variantov konfiguracii,      
      ukazannyh na `etape postroeniya.                                        
                                                                              
        Vazhno:                                                               
                                                                              
      Poisk vseh podobnyh paketov pri napisanii zapisi VuXML vhodit v zonu    
      vashej otvetstvennosti. Imejte v vidu, chto make search name=foo `eto   
      vash drug. Pervichnye tochki dlya poiska sleduyuschie:                  
                                                                              
        * variant foo-devel dlya porta foo;                                   
                                                                              
        * drugie varianty s suffiksami vida -a4 (dlya paketov, svyazannyh s   
          pechat'yu), -without-gui (dlya paketov s otklyuchennoj podderzhkoj  
          X), ili podobnyh;                                                   
                                                                              
        * jp-, ru-, zh- i drugie vozmozhnye lokalizovannye varianty v         
          sootvetstvuyuschih nacional'nyh kategoriyah kollekcii portov.       
   4  Zdes' ukazany zatronutye versii paketa(-ov) kak odin ili bolee          
      diapazonov s ispol'zovaniem kombinacii `elementov <lt>, <le>, <eq>,     
      <ge>, i <gt>. Diapazony vnesionnyh versij ne dolzhny peresekat'sya.     
                                                                              
      V specifikacii diapazonov * (zviozdochka) oznachaet naimen'shij nomer   
      versii. V chastnosti, 2.* men'she, chem 2.a. Po`etomu zvezdochka mozhet 
      byt' ispol'zovana v diapazone dlya sovpadeniya so vsemi vozmozhnymi     
      alpha, beta i RC versiyami. Kak variant, <ge>2.*</ge><lt>3.*</lt>       
      vyborochno sovpadet s versiej 2.x, a <ge>2.0</ge><lt>3.0</lt> - net,    
      poskol'ku poslednee ne vklyuchaet 2.r3 i sovpadaet s 3.b.               
                                                                              
      Primer vyshe ukazyvaet, chto k zatronutym otnosyatsya versii s 1.6 do   
      1.9 vklyuchitel'no, versii 2.x do 2.4_1 i versiya 3.0b1.                
   5  Nekotorye svyazannye gruppy paketov (v konechnom schete, porty) mogut   
      byt' ukazany v razdele <affected>. `Eto mozhno ispol'zovat', esli       
      nekotorye programmnye produkty (skazhem, FooBar, FreeBar and OpenBar)   
      yavlyayutsya proizvodnymi ot obschej kodovoj bazy i vsio esche          
      sovmestno ispol'zuyut eio oshibki i uyazvimosti. Imejte v vidu otlichie 
      ot perechisleniya mnozhestvennyh imion v odnom razdele <package>.       
   6  Diapazony versij dolzhny uchityvat' PORTEPOCH i PORTREVISION, esli `eto 
      primenimo. Pozhalujsta, pomnite, chto v sootvetstvii s pravilami        
      sravneniya strok versiya s nenulevym znacheniem PORTEPOCH vyshe, chem   
      lyubaya versiya bez PORTEPOCH, naprimer, 3.0,1 vyshe, chem 3.1 ili      
      dazhe 8.9.                                                              
   7  Svodnaya informaciya o probleme. V `etom pole ispol'zuetsya XHTML. Po   
      krajnej mere, dolzhny byt' obramlyayuschie <p> i </p>. Mozhet byt'      
      ispol'zovana bolee slozhnaya razmetka, no tol'ko v celyah akkuratnosti  
      i yasnosti: bez `estetstva, pozhalujsta.                                
   8  `Etot razdel soderzhit ssylki na imeyuschie otnoshenie dokumenty.       
      Privetstvuetsya kak mozhno bol'shee kolichestvo ssylok.                 
   9  `Eto byulleten' bezopasnosti FreeBSD.                                   
   10 `Eto soobschenie ob oshibke FreeBSD.                                    
   11 Identifikator MITRE CVE.                                                
   12 `Eto SecurityFocus Bug ID.                                              
   13 Byulleten' bezopasnosti US-CERT.                                        
   14 Primechanie k uyazvimosti US-CERT.                                      
   15 Uvedomlenie sistemy Cyber Security Alert US-CERT.                       
   16 Uvedomlenie sistemy Technical Cyber Security Alert US-CERT.             
   17 URL k arhivnomu soobscheniyu v spiske rassylki. Atribut msgid           
      yavlyaetsya neobyazatel'nym i mozhet ukazyvat' na message ID            
      soobscheniya.                                                           
   18 Osnovnoj URL. Dolzhen byt' ispol'zovan v sluchae, esli ne podhodit ni   
      odna iz kategorij istochnika.                                           
   19 Data poslednego izmeneniya lyuboj informacii dannoj zapisi              
      (YYYY-MM-DD). Novye zapisi ne dolzhny vklyuchat' `eto pole. Pole        
      dolzhno byt' dobavleno posle redaktirovaniya suschestvuyuschej zapisi.  

  11.3.3. Testirovanie vashih izmenenij v baze dannyh VuXML

   Predpolozhim, chto vy tol'ko chto napisali ili zapolnili zapis' ob
   uyazvimosti v pakete clamav, kotoraya byla ispravlena v versii 0.65_7.

   Prezhde vsego, vam nuzhno ustanovit' poslednie versii portov
   ports-mgmt/portaudit, ports-mgmt/portaudit-db i security/vuxml.

  Primechanie:

   Dlya zapuska packaudit vy dolzhny obladat' pravami na zapis' v
   DATABASEDIR; kak pravilo, `eto /var/db/portaudit.

   Dlya ispol'zovaniya drugogo kataloga prisvojte peremennoj okruzheniya
   DATABASEDIR drugoj put'.

   Esli vy rabotaete v kataloge, otlichnom ot ${PORTSDIR}/security/vuxml,
   prisvojte peremennoj okruzheniya VUXMLDIR put' k katalogu, v kotorom
   nahoditsya vuln.xml.

   Vo-pervyh, prover'te, net li uzhe zapisi ob `etoj uyazvimosti. Esli takaya
   zapis' est', ona sovpadiot s predyduschej versiej paketa 0.65_6:

 % packaudit
 % portaudit clamav-0.65_6

   Esli nichego ne najdeno, znachit vy poluchili zelenyj svet dlya
   dobavleniya novoj zapisi dlya `etoj uyazvimosti.

 % cd ${PORTSDIR}/security/vuxml
 % make newentry

   Kogda vy zakonchite, prover'te sintaksis i formatirovanie.

 % make validate

  Primechanie:

   Vam ponadobitsya ustanovit' po krajnej mere odin iz sleduyuschih paketov:
   textproc/libxml2, textproc/jade.

   Teper' vypolnite perepostroenie bazy dannyh portaudit iz fajla VuXML:

 % packaudit

   CHtoby ubedit'sya, chto razdel <affected> v vashej zapisi sovpadaet s
   pravil'nymi paketami, vypolnite sleduyuschuyu komandu:

 % portaudit -f /usr/ports/INDEX -r uuid

  Primechanie:

   Dlya luchshego ponimaniya sintaksisa `etoj komandy obraschajtes' k
   portaudit(1).

   Ubedites', chto vasha zapis' ne proizvodit lozhnyh sovpadenij v vyvode.

   Teper' prover'te, sovpadaet li vasha zapis' s nuzhnymi versiyami paketa:

 % portaudit clamav-0.65_6 clamav-0.65_7
 Affected package: clamav-0.65_6 (matched by clamav<0.65_7)
 Type of problem: clamav remote denial-of-service.
 Reference: <http://www.freebsd.org/ports/portaudit/74a9541d-5d6c-11d8-80e3-0020ed76ef5a.html>

 1 problem(s) found.

   Pervaya versiya dolzhna sovpast', a poslednyaya net.

   V zaklyuchenie prover'te, chto veb-stranica, sformirovannaya iz bazy
   dannyh VuXML, vyglyadit kak polozheno:

 % mkdir -p ~/public_html/portaudit
 % packaudit
 % lynx ~/public_html/portaudit/74a9541d-5d6c-11d8-80e3-0020ed76ef5a.html

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

   Soderzhanie

   12.1. Vvedenie

   12.2. WRKDIR

   12.3. WRKDIRPREFIX

   12.4. Razlichenie operacionnyh sistem i versij OS

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

   12.6. Ispol'zovanie vyrazheniya exec v scenariyah obiortkah

   12.7. Postupajte razumno

   12.8. Rabota kak s CC, tak i CXX

   12.9. Ispol'zovanie CFLAGS

   12.10. Biblioteki potokov

   12.11. Pozhelaniya

   12.12. README.html

   12.13. Pometka neustanavlivaemogo porta kak BROKEN, FORBIDDEN ili IGNORE

   12.14. Pometka porta na udalenie s DEPRECATED ili EXPIRATION_DATE

   12.15. Izbegajte ispol'zovaniya konstrukcii .error

   12.16. Ispol'zovanie sysctl

   12.17. Menyayuschiesya distributivnye fajly

   12.18. Izbeganie linuksizmov

   12.19. Raznoe

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

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

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

12.4. 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 FreeBSD Unix on
   rabotaet. Predpochtitel'nym sposobom otdeleniya koda dlya versij FreeBSD
   yavlyaetsya ispol'zovanie makrosov __FreeBSD_version i __FreeBSD__,
   opredelionnyh v fajle sys/param.h. Esli `etot fajl ne podklyuchen,
   dobav'te kod

 #include <sys/param.h>

   v sootvetstvuyuschem meste fajla .c. __FreeBSD__ opredelion vo vseh
   versiyah FreeBSD v kachestve starshego nomera versii sistemy. Naprimer, v
   FreeBSD 9.x __FreeBSD__ opredelion so znacheniem 9.

 #if __FreeBSD__ >= 9
 #  if __FreeBSD_version >= 901000
          /* zdes' osobyj kod dlya versij 9.1+ */
 #  endif
 #endif

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

  Primechanie:

   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.                                             
   LOCALBASE   Koren' dereva <<local>> (naprimer, /usr/local)                 
   PREFIX      Kuda, sobstvenno, ustanavlivaetsya port (obratites' k          
               podrobnoj informacii o PREFIX).                                

  Primechanie:

   Esli vy zadaete peremennuyu MASTERDIR, delajte `eto do podklyucheniya
   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

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

12.6. Ispol'zovanie vyrazheniya exec v scenariyah obiortkah

   Esli port ustanavlivaet scenarij na yazyke shell, kotoryj sluzhit dlya
   zapuska drugoj programmy, i esli zapusk `etoj programmy yavlyaetsya
   poslednim dejstviem scenariya, ubedites', chto zapusk programmy
   proizvoditsya s ispol'zovaniem vyrazheniya exec, naprimer:

 #!/bin/sh
 exec %%LOCALBASE%%/bin/java -jar %%DATADIR%%/foo.jar "$@"

   Vyrazhenie exec zamenyaet process scenariya na ukazannuyu programmu. Esli
   exec opuschen, to process scenariya vo vremya raboty programmy ostaetsya v
   pamyati, bez bespolezno potreblyaya sistemnye resursy.

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

12.8. 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 mozhno dobavlyat' nuzhnye znacheniya k uzhe
   imeyuschimsya. `Eto svyazano s tem, chto parametry postroeniya,
   otnosyaschiesya ko vsem portam, mogut byt' zadany global'no.

   Esli porty ne uchityvayut znacheniya `etih peremennyh, 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 CXX 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.

12.9. 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 mozhno dobavlyat' nuzhnye znacheniya k uzhe imeyuschimsya.
   `Eto svyazano s tem, chto parametry postroeniya, otnosyaschiesya ko vsem
   portam, mogut byt' zadany global'no.

   Esli porty ne uchityvayut znacheniya `etoj peremennoj, dobav'te stroku
   NO_PACKAGE=ignores cflags v fajl Makefile.

   Dalee sleduet primer fajla Makefile, ispol'zuyuschego peremennuyu CFLAGS.
   Obratite vnimanie na ispol'zovanie 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.

   Iz storonnih fajlov Makefile sleduet udalit' flagi optimizacii.
   Obschesistemnye flagi optimizacii nahodyatsya v sistemnoj peremennoj
   CFLAGS. Primer iz nemodificirovannogo Makefile:

 CFLAGS= -O3 -funroll-loops -DHAVE_SOUND

   Pri ispol'zovanii sistemnyh flagov optimizacii Makefile stanet pohozhim na
   sleduyuschij primer:

 CFLAGS+= -DHAVE_SOUND

12.10. Biblioteki potokov

   Vo FreeBSD biblioteka potokov obyazana byt' skomponovana s ispolnyaemymi
   fajlami s ispol'zovaniem special'nogo flaga -pthread. Esli port nastaivaet
   na pryamoj komponovke s -lpthread, sozdajte patch dlya ispol'zovaniya
   -pthread

  Primechanie:

   Esli postroenie porta zakanchivaetsya oshibkoj unrecognized option
   '-pthread', to mozhet byt' zhelatel'no ispol'zovanie cc v kachestve
   komponovschika cherez ustanovku CONFIGURE_ENV v LD=${CC}. Parametr
   -pthread napryamuyu komandoj ld ne podderzhivaetsya.

12.11. Pozhelaniya

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

12.12. README.html

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

  Primechanie:

   Esli ne udaetsya vypolnit' make readme, ubedites', chto znachenie po
   umolchaniyu ECHO_MSG ne bylo izmeneno vnutri porta.

12.13. Pometka neustanavlivaemogo porta kak BROKEN, FORBIDDEN ili IGNORE

   V nekotoryh sluchayah pol'zovateli ne dolzhny dopuskat'sya k ustanovke
   porta. Dlya togo, chtoby soobschit' pol'zovatelyu, chto port ne sleduet
   ustanavlivat', imeetsya neskol'ko make-peremennyh, kotorye mogut byt'
   ispol'zovany v fajle Makefile porta. Znacheniya sleduyuschih
   make-peremennyh budut prichinoj, vozvraschaemoj pol'zovatelyam, po kotoroj
   port otkazyvaet v ustanovke. Pozhalujsta, ispol'zujte korrektnye
   make-peremennye, tak kak kazhdaya peremennaya make peredaet absolyutno
   razlichnyj smysl kak dlya pol'zovatelej, tak i dlya avtomatizirovannyh
   sistem, kotorye polagayutsya na fajly Makefile, takih kak klaster
   postroeniya portov, FreshPorts i portsmon.

  12.13.1. Peremennye

     * BROKEN prednaznachena dlya portov, kotorye v nastoyaschee vremya ne
       kompiliruyutsya, ne ustanavlivayutsya ili ne udalyayutsya pravil'no.
       Sleduet ispol'zovat' dlya portov, kogda problema schitaetsya
       vremennoj.

       V osobyh sluchayah klaster postroeniya budet prodolzhat' popytki
       sobrat' ih, chtoby pokazat', reshena li osnovnaya problema. (Odnako,
       kak pravilo, klaster zapuskaetsya bez `etoj vozmozhnosti.)

       V chastnosti, ispol'zujte BROKEN, kogda port:

          * ne kompiliruetsya

          * ne vypolnyaet process svoej konfiguracii ili ustanovki

          * ustanavlivaet fajly vovne ${LOCALBASE}

          * ne udalyaet polnost'yu vse svoi fajly pri deinstallyacii (tem ne
            menee, `eto mozhet byt' dopustimo, i podhodit dlya portov,
            ostavlyayuschih posle sebya fajly, izmenennye pol'zovatelem)

     * 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 ne dolzhny stroit'sya po
       kakoj-libo drugoj prichine. Sleduet ispol'zovat' dlya portov, v
       sluchae kogda problema schitaet konstruktivnoj. Klaster postroeniya ni
       pri kakih usloviyah ne budet stroit' porty, pomechennye kak IGNORE. V
       chastnosti, ispol'zujte IGNORE, kogda port:

          * kompiliruetsya, no rabotaet nepravil'no

          * ne rabotaet na ustanovlennoj versii FreeBSD

          * trebuet dlya postroeniya ishodnye teksty yadra FreeBSD, no u
            pol'zovatelya v ustanovlennom vide oni otsutstvuyut

          * imeet distfile, kotoryj ne mozhet byt' avtomaticheski izvlechen
            iz-za licenzionnyh ogranichenij

          * ne rabotaet s kakim-libo drugim portom, ustanovlennym v
            nastoyaschee vremya (naprimer, port zavisit ot www/apache20, no
            ustanovlen www/apache22)

  Primechanie:

       Esli port budet konfliktovat' s uzhe ustanovlennym portom, (naprimer,
       esli oni ustanavlivayut fajl v to zhe mesto, no s inym funkcional'nym
       naznacheniem), to ispol'zujte vmesto `etogo CONFLICTS. CONFLICTS sam
       ustanovit znachenie IGNORE.

     * Esli port nuzhno pometit' kak IGNORE tol'ko na nekotoryh arhitekturah,
       dlya `etogo est' dve drugie udobnye peremennye, kotorye avtomaticheski
       ustanovyat dlya vas znacheniya: ONLY_FOR_ARCHS i NOT_FOR_ARCHS.
       Primery:

 ONLY_FOR_ARCHS= i386 amd64

 NOT_FOR_ARCHS= ia64 sparc64

       Sobstvennoe soobschenie IGNORE mozhno zadat' s ispol'zovaniem
       ONLY_FOR_ARCHS_REASON i NOT_FOR_ARCHS_REASON. Otdel'no dlya kazhdoj
       arhitektury `eto vozmozhno s ispol'zovaniem ONLY_FOR_ARCHS_REASON_ARCH
       i NOT_FOR_ARCHS_REASON_ARCH.

     * Esli port zagruzhaet i ustanavlivaet ispolnyaemye fajly i386, to
       sleduet ustanovit' IA32_BINARY_PORT. Esli `eta peremennaya
       ustanovlena, budet vypolnena proverka dostupnosti kataloga /usr/lib32
       dlya bibliotek versii IA32 i podderzhki IA32 v yadre. Pri nevypolnenii
       lyubogo iz `etih uslovij budet avtomaticheski ustanovlena peremennaya
       IGNORE.

  12.13.2. Zamechaniya po realizacii

   Stroki ne sleduet brat' v kavychki. Takzhe postroenie stroki dolzhno
   neskol'ko razlichat'sya iz-za sposoba otobrazheniya informacii
   pol'zovatelyu. Primery:

 BROKEN= this port is unsupported on FreeBSD 5.x

 IGNORE= is unsupported on FreeBSD 5.x

   poluchaemye v rezul'tate sleduyuschego vyvoda make describe:

 ===>  foobar-0.1 is marked as broken: this port is unsupported on FreeBSD 5.x.

 ===>  foobar-0.1 is unsupported on FreeBSD 5.x.

12.14. Pometka porta na udalenie s DEPRECATED ili EXPIRATION_DATE

   Pomnite, chto BROKEN i FORBIDDEN budut ispol'zovany kak vremennoe
   sredstvo, esli port ne yavlyaetsya rabotayuschim. Postoyanno
   nerabotosposobnye porty dolzhny polnost'yu udalyat'sya iz dereva.

   V podhodyaschih situaciyah pol'zovateli mogut byt' opovescheny o
   predstoyaschem udalenii cherez peremennye DEPRECATED i EXPIRATION_DATE.
   Pervoe - `eto prosto stroka, soobschayuschaya prichinu zaplanirovannogo
   udaleniya porta; vtoraya yavlyaetsya strokoj v formate ISO 8601
   (YYYY-MM-DD). Obe budut pokazany pol'zovatelyu.

   Peremennuyu DEPRECATED mozhno ustanovit' bez ispol'zovaniya
   EXPIRATION_DATE (v chastnosti, pri rekomendacii novoj versii porta), no
   obratnyj poryadok ne imeet nikakogo smysla.

   Ne suschestvuet ustoyavshejsya politiki, kak dolgo sleduet prodolzhat'
   uvedomleniya. Tekuschaya praktika daet okolo mesyaca dlya resheniya
   problem bezopasnosti i dva mesyaca dlya problem postroeniya. `Eto takzhe
   daet nemnogo vremeni na ispravlenie problem lyubym zainteresovannym
   kommitteram.

12.15. Izbegajte ispol'zovaniya konstrukcii .error

   Pravil'nym sposobom podat' signal dlya Makefile o tom, chto port ne mozhet
   byt' ustanovlen iz-za kakogo-to vneshnego faktora (naprimer, pol'zovatel'
   ukazal nedopustimuyu kombinaciyu opcij postroeniya), yavlyaetsya ustanovka
   nepustogo znacheniya dlya IGNORE. `Eto znachenie budet sformatirovano i
   pokazano pol'zovatelyu vo vremya make install.

   Ispol'zovanie dlya `etih celej .error yavlyaetsya rasprostranennoj
   oshibkoj. Problema v tom, chto v `etoj situacii budut povrezhdeny mnogie
   instrumenty avtomatizacii, rabotayuschie s derevom portov. Naibol'shim
   obrazom `eto rasprostraneno pri popytke postroit' /usr/ports/INDEX
   (smotrite Razdel 9.1, <<Zapusk make describe>>). Tem ne menee, dazhe bolee
   prostye komandy, takie kak make maintainer, v `etom sluchae takzhe vernut
   oshibku. `Eto ne yavlyaetsya priemlemym.

   Primer 12.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

12.16. Ispol'zovanie sysctl

   Ispol'zovanie sysctl ne rekomenduetsya, krome kak pri vypolnenii celej.
   `Eto vyzvano tem, chto vychislenie lyubyh makevar, takih kak vo vremya
   komandy make index, s neobhodimost'yu zapuska `etoj komandy, esche bol'she
   zamedlyaet ves' process.

   sysctl(8) sleduet vsegda ispol'zovat' cherez peremennuyu SYSCTL, poskol'ku
   ona soderzhit polnost'yu zadannyj put', i pri neobhodimosti mozhet byt'
   pereopredelena.

12.17. Menyayuschiesya distributivnye fajly

   Inogda avtory programmnogo obespecheniya menyayut soderzhimoe vypuschennyh
   distributivnyh fajlov bez smeny nazvaniya. Vy dolzhny proveryat', chto
   izmeneniya yavlyayutsya oficial'nymi i proizvedeny avtorom. V proshlom
   byvalo, chto distributivnyj fajl molcha izmenyalsya na sajtah zagruzki s
   namereniem nanesti vred ili skomprometirovat' bezopasnost' konechnogo
   pol'zovatelya.

   Otlozhite staryj fajl s distributivom v storonu, zagruzite novyj,
   raspakujte ego i sravnite soderzhimoe pri pomoschi diff(1). Esli vy ne
   vidite nichego podozritel'nogo, to mozhete obnovit' fajl distinfo.
   Ubedites', chto vy podytozhili razlichiya v vashem PR ili opisanii
   kommita, chtoby drugie lyudi byli v kurse, chto vy pozabotilis' o tom,
   chto nichego plohogo ne sluchilos'.

   Vozmozhno vy takzhe zahotite svyazat'sya s avtorom `etogo programmnogo
   obespecheniya dlya podtverzhdeniya izmenenij.

12.18. Izbeganie linuksizmov

   Ne ispol'zujte /proc, esli dostupny lyubye drugie istochniki polucheniya
   informacii, naprimer, setprogname(argv[0]) v main() i getprogname(3), v
   sluchae esli vy hotite <<znat' svoio imya>>.

   Ne polagajtes' na povedenie, ne reglamentirovannoe POSIX.

   Ne vypolnyajte zapis' vremennyh metok v kriticheskih putyah vypolneniya
   prilozheniya, esli mozhno obojtis' bez `etogo. Poluchenie vremennyh metok
   mozhet byt' medlennym, v zavisimosti ot stepeni tochnosti ispol'zuemyh
   chasov v operacionnoj sisteme. Esli vremennye metki dejstvitel'no nuzhny,
   opredelite stepen' trebuemoj tochnosti i ispol'zujte tot API, v kotorom
   dokumentiruetsya poluchenie dostatochnoj tochnosti.

   Ryad prostyh sistemnyh vyzovov (naprimer, gettimeofday(2), getpid(2))
   rabotayut namnogo bystree v Linux(R) po sravneniyu s lyuboj drugoj
   operacionnoj sistemoj iz-za keshirovaniya i ispol'zuemoj optimizacii
   vsyscall. Ne polagajtes' na ih desheviznu v kritichnyh k
   proizvoditel'nosti prilozheniyah. V celom, starajtes' izbegat' sistemnyh
   vyzovov tam, gde `eto vozmozhno.

   Ne polagajtes' na specifichnoe dlya Linux(R) povedenie soketa. V
   chastnosti, otlichayutsya razmery bufera soketa po umolchaniyu (vypolnite
   vyzov setsockopt(2) s SO_SNDBUF i SO_RCVBUF, i v to vremya kak v Linux(R)
   pri zapolnenii bufera soketa send(2) blokiruetsya, FreeBSD vozvraschaet
   oshibku i ustanavlivaet ENOBUFS v kachestve znacheniya errno.

   Esli trebuetsya rasschityvat' na nestandartnoe povedenie, inkapsulirujte
   `eto dolzhnym obrazom v obschij dlya vseh API s proverkoj povedeniya na
   `etape konfiguracii, i esli trebuemoe povedenie ne najdeno, prekraschajte
   vypolnenie.

   Ispol'zujte stranicy spravochnika dlya proverki, otnositsya li funkciya k
   interfejsu POSIX (ischite razdel <<STANDARDS>> na stranice spravochnika).

   Ne rasschityvajte na to, chto v kachestve /bin/sh ispol'zuetsya bash.
   Ubedites', chto komandnaya stroka, peredannaya v system(3), budet rabotat'
   v POSIX-sovmestimoj obolochke.

   Spisok osnovnyh bash-izmov raspolozhen zdes'.

   Ne ispol'zujte #include <stdint.h>, esli dostatochno podklyuchit'
   inttypes.h. `Eto pozvolit ubedit'sya, chto programmnoe obespechenie
   sobiraetsya na bolee staryh versiyah FreeBSD.

   Prover'te, chto ispol'zuemye zagolovochnye fajly vklyucheny v POSIX ili
   spisok, rekomenduemyj stranicej spravochnika, t.k. naprimer, zabyt'
   podklyuchit' sys/types.h - ne takaya uzh problema v Linux(R), odnako `eto
   ne tak vo FreeBSD.

   Kompilirujte mnogopotochnye prilozheniya s klyuchom <<-pthread>>, a ne
   <<-lpthread>> ili kak-libo eschio.

12.19. 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!

                          Glava 13. 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.]
 # Created by: Satoshi Asami <asami@FreeBSD.org>
 [Neobyazatel'naya stroka Created by: soderzhit imya
 cheloveka, sozdavshego pervonachal'nuyu versiyu porta.  Sleduet otmetit',
 chto za <<:>> sleduet probel, no ne simvol tabulyacii.  Esli
 `eta stroka prisutstvuet, buduschie soprovozhdayuschie ne dolzhny eio menyat'
 ili udalyat', krome kak po zaprosu pervonachal'nogo avtora.]

 # $FreeBSD$
 [ ^^^^^^^^^ `Eta stroka budet avtomaticheski zamenena na strochku RCS ID
 sistemoj SVN pri vypolnenii operacii kommita v nashe hranilische.  Pri
 obnovlenii porta ne privodite `etu stroku obratno k vidu
 "$FreeBSD$".  SVN sdelaet `eto avtomaticheski.]

 [sekciya opisaniya sobstvenno porta i osnovnogo servera - snachala vsegda
  PORTNAME i PORTVERSION, 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 pro zavershayuschuyu kosuyu chertu ("/")!
  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, kotoryj dobrovol'no
  zanimaetsya obnovleniyami porta i neispravnostyami pri postroenii, i kotoromu
  pol'zovatel' mozhet napravlyat' voprosy i soobscheniya ob oshibkah.  Dlya
  sohraneniya kak mozhno bolee vysokogo kachestva Kollekcii Portov my bol'she
  ne prinimaem novye porty, naznachennye na "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

 [`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...]
 USES=          gmake
 [Esli `eto prilozhenie X i trebuet zapuska "xmkmf -a"...]
 USES=          imake
 [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 14. Aktualizaciya

   Soderzhanie

   14.1. FreshPorts

   14.2. Web-interfejs k hranilischu ishodnyh tekstov

   14.3. Spisok rassylki FreeBSD, posvyaschionnyj portam

   14.4. Klaster postroeniya portov FreeBSD na pointyhat.FreeBSD.org

   14.5. Portscout: skaner distributivnyh fajlov portov FreeBSD

   14.6. Sistema monitoringa portov FreeBSD

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

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

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

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

   Esli dannyj spisok rassylki slishkom zagruzhen soobscheniyami, vy mozhete
   otslezhivat' freebsd-ports-announce, kotoryj moderiruetsya i ne
   yavlyaetsya mestom dlya diskussij.

14.4. Klaster postroeniya portov FreeBSD na pointyhat.FreeBSD.org

   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.

   Otdel'nye porty sobirayutsya, esli oni special'no ne pomecheny kak IGNORE.
   Dlya portov, pomechennyh kak BROKEN, popytki budut prodolzheny dlya togo,
   chtoby uvidet', esli osnovnaya problema byla reshena. (`Eto sdelano cherez
   ispol'zovanie peremennoj TRYBROKEN dlya Makefile porta.)

14.5. Portscout: skaner distributivnyh fajlov portov FreeBSD

   Klaster postroeniya vydelen dlya vypolneniya samogo poslednego reliza
   kazhdogo iz portov, distributivnye fajly kotoryh uzhe byli sgruzheny.
   Odnako iz-za postoyannyh izmenenij v Internet distributivnye fajly mogut
   bystro ischezat'. Portscout, sredstvo skanirovaniya distributivnyh fajlov
   FreeBSD pytaetsya oprosit' kazhdyj iz sajtov, dostupnyh dlya sgruzki
   kazhdogo iz portov, dlya opredeleniya togo, dostupny li eschio
   distributivnye fajly. Portscout mozhet gotovit' otchioty v HTML i
   rassylat' `elektronnye pis'ma ob imeyuschihsya obnovleniyah dlya portov
   tem, kto `eto zaprashivaet. Mejntejnery periodicheski zaprashivayut
   nalichie izmenenij, libo vruchnuyu, libo ispol'zuya lentu RSS.

   Glavnaya stranica Portscout otobrazhaet email mejntejnera porta,
   kolichestvo portov, za kotorye otvetstvenen mejntejner, kolichestvo portov
   s novymi distributivnymi fajlami i procent ustarevshih portov. Funkciya
   poiska vypolnyaet poisk mejntejnera po adresu `elektronnoj pochty i
   pozvolyaet vybirat' mezhdu vsemi portami ili tol'ko ustarevshimi.

   Pri schelchke po adresu `elektronnoj pochty mejntejnera otobrazhaetsya
   spisok vseh ego portov, razdelionnyh po kategoriyam, vmeste s tekuschim
   nomerom versii, informaciej o nalichii novoj versii, vremenem poslednego
   obnovleniya porta i vremenem ego poslednej proverki. Funkciya poiska na
   `etoj stranice pozvolyaet pol'zovatelyu vypolnyat' poisk konkretnogo
   porta.

   Po schelchku na nazvanie porta v spiske otobrazhaetsya informaciya o porte
   FreshPorts.

14.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 Obzor otdel'nogo porta.

   Na moment napisaniya `eto edinstvennyj dostupnyj resurs, kotoryj dlya
   imeni porta stavit v sootvetstvie zapisi PR GNATS. (Otpraviteli PR ne
   vsegda dobavlyayut v nazvanie imya porta, hotya my predpochitaem, chtoby
   oni `eto delali.) Takim obrazom, portsmon `eto horoshee mesto dlya
   nachala, esli vy hotite najti prislannye PR i/ili oshibki postroeniya dlya
   suschestvuyuschego porta; libo poiskat', byl li uzhe prislan novyj port,
   kotoryj vy podumyvali sozdat' sami.

                             Glava 15. Prilozheniya

   Soderzhanie

   15.1. Znacheniya USES

   15.2. Znacheniya __FreeBSD_version

15.1. Znacheniya USES

   Tablica 15.1. Znacheniya USES

      Naimenovanie      Argumenty                   Opisanie                  
                                    Zavisimost' ot kompilyatora s podderzhkoj 
   ada                (net)         Ada. Sootvetstvuyuschim obrazom           
                                    opredelyaetsya znachenie CC.              
                                    Podrazumevaet ispol'zovanie devel/bison   
                                    tem ili inym obrazom. Po umolchaniyu, bez 
   bison              (net), build, argumentov ili s argumentom build,        
                      run, both     oznachaet ispol'zovanie bison dlya        
                                    sborki, run dlya vypoleniya, i both dlya  
                                    sborki i vypolneniya.                     
                                    Predotvraschaet ustanovku charset.alias.  
                                    `Etot fajl dolzhen ustanavlivat'sya       
                                    tol'ko sovmestno s converters/libiconv.   
   charsetfix         (net)         CHerez CHARSETFIX_MAKEFILEIN mozhno       
                                    ukazat' drugoj put' otnositel'no WRKSRC,  
                                    esli charset.alias ustanavlivaetsya       
                                    inache chem cherez WRKSRC/Makefile.in.    
                                    Port budet ispol'zovat' CMake dlya        
                                    konfiguracii i postroeniya. Pri           
   cmake              (net),        ispol'zovanii argumenta outsource budet   
                      outsource     proizvedena sborka vne ishodnyh tekstov   
                                    (out-of-source). Bolee podrobno smotrite  
                                    Razdel 6.3.4, <<Ispol'zovanie cmake>>.    
                                    Podrazumevaet ispol'zovanie               
                                    update-desktop-database iz                
                                    devel/desktop-file-utils. Budet           
                                    vklyuchion dopolnitel'nyj `etap           
   desktop-file-utils (net)         post-install bez vzaimodejstviya s uzhe   
                                    imeyuschimisya `etapami post-install. V   
                                    plist budut dobavleny stroki dlya zapuska 
                                    update-desktop-database pri ustanovke i   
                                    udalenii paketa.                          
                                    Podrazumevaet ispol'zovanie biblioteki    
   fuse               (net)         FUSE, a takzhe modulya yadra v            
                                    sootvetstvii s versiej FreeBSD.           
                                    Podrazumevaet ispol'zovanie devel/gettext 
                                    tem ili inym obrazom. Po umolchaniyu, bez 
   gettext            (net), lib,   argumentov ili s argumentom lib,          
                      build, run    oznachaet ispol'zovanie gettext dlya      
                                    sborki i vypolneniya, build dlya sborki,  
                                    i run dlya vypolneniya.                   
   gmake              (net)         Podrazumevaet ispol'zovanie devel/gmake   
                                    dlya sborki.                              
                                    Podrazumevaet ispol'zovanie               
   iconv              (net)         converters/libiconv dlya sborki i         
                                    vypolneniya.                              
   imake              (net)         Podrazumevaet ispol'zovanie devel/imake   
                                    dlya sborki.                              
                                    Podrazumevaet ispol'zovanie               
                                    devel/open-motif v kachestve biblioteki.  
   motif              (net)         Konechnye pol'zovateli mogut zadat'       
                                    WANT_LESSTIF dlya zameny devel/open-motif 
                                    na devel/lesstif.                         
                      (net), base,  Podrazumevaet ispol'zovanie ncurses, tem  
   ncurses            port          samym zadaiot nekotorye nuzhnye           
                                    peremennye.                               
                                    Ispravlyaet obschie puti dlya ih          
   pathfix            (net)         sootvetstviya ierarhii FreeBSD v fajlah   
                                    Makefile.in i configure, prinadlezhaschih 
                                    ishodnomu kodu porta.                     
                                    Podrazumevaet ispol'zovanie devel/pkgconf 
                                    tem ili inym obrazom. Bez argumentov ili  
   pkgconfig          (net), build, s argumentom build `eto oznachaet         
                      run, both     ispol'zovanie pkg-config dlya sborki, run 
                                    dlya vypolneniya i both dlya sborki i     
                                    vypolneniya.                              
                                    Podrazumevaet ispol'zovanie lang/pure tem 
                                    ili inym obrazom, no v osnovnom           
   pure               (net), ffi    ispol'zuetsya dlya postroeniya portov,    
                                    otnosyaschihsya k pure. S argumentom ffi  
                                    oznachaet ispol'zovanie devel/pure-ffi    
                                    dlya vypolneniya.                         
                                    Podrazumevaet ispol'zovanie mail/qmail    
                                    tem ili inym obrazom. S argumentom build  
                      (net), build, oznachaet ispol'zovanie qmail dlya sborki 
   qmail              run, both,    i run dlya vypolneniya. Bez argumentov    
                      vars          ili s argumentom both oznachaet           
                                    ispol'zovanie qmail dlya sborki i         
                                    vypolneniya. vars zadaet peremennye QMAIL 
                                    dlya nuzhd porta.                         
                                    Podrazumevaet ispol'zovanie biblioteki    
   readline           (net), port   readline i po neobhodimosti ustanavlivaet 
                                    peremennye CPPFLAGS i LDFLAGS.            
                                    Podrazumevaet ispol'zovanie               
                                    update-mime-database iz                   
                                    misc/shared-mime-info. `Eto takzhe        
   shared-mime-info   (net)         dobavlyaet sobstvennyj `etap post-install 
                                    i stroki v plist dlya zapuska             
                                    update-mime-data s podhodyaschimi         
                                    argumentami vo vremya ustanovki i         
                                    udaleniya paketa.                         
                                    Vo mnogom programmnom obespechenii        
                                    ukazyvaetsya nepravil'nyj put' k          
                                    interpretatoru (shebang), v pervuyu       
                                    ochered' `eto kasaetsya /usr/bin/perl i   
                                    /bin/bash. `Eto znachenie ispravlyaet     
                                    stroku shebang v scenariyah,              
   shebangfix         (net)         perechislennyh v SHEBANG_FILES. Po        
                                    umolchaniyu sejchas podderzhivayutsya     
                                    Perl, Python, Bash, Ruby i PHP. Dlya      
                                    podderzhki drugih interpretatorov         
                                    neobhodimo sootvetstvuyuschee znachenie   
                                    SHEBANG_LANG (naprimer,                   
                                    SHEBANG_LANG=lua), lua_OLD_CMD i lua_CMD. 
                                    Podrazumevaet ispol'zovanie               
   zenoss             (net)         net-mgmt/zenoss tem ili inym obrazom, no  
                                    v osnovnom ispol'zuetsya dlya postroeniya 
                                    portov zenpack, otnosyaschihsya k zenoss. 

15.2. Znacheniya __FreeBSD_version

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

   Tablica 15.2. Znacheniya __FreeBSD_version

      Znachenie         Data                         Reliz                    
   119411                         2.0-RELEASE                                 
   199501, 199503  19 marta 1995  2.1-CURRENT                                 
   199504          9 aprelya 1995 2.0.5-RELEASE                               
   199508          26 avgusta     2.2-CURRENT do vyhoda 2.1                   
                   1995           
   199511          10 noyabrya    2.1.0-RELEASE                               
                   1995           
   199512          10 noyabrya    2.2-CURRENT do vyhoda 2.1.5                 
                   1995           
   199607          10 iyulya 1996 2.1.5-RELEASE                               
   199608          12 iyulya 1996 2.2-CURRENT do vyhoda 2.1.6                 
   199612          15 noyabrya    2.1.6-RELEASE                               
                   1996           
   199612                         2.1.7-RELEASE                               
   220000          19 fevralya    2.2-RELEASE                                 
                   1997           
   (bez izmenenij)                2.2.1-RELEASE                               
   (bez izmenenij)                2.2-STABLE posle vyhoda 2.2.1-RELEASE       
   221001          15 aprelya     2.2-STABLE posle vklyucheniya texinfo-3.9   
                   1997           
   221002          30 aprelya     2.2-STABLE posle vklyucheniya top           
                   1997           
   222000          16 maya 1997   2.2.2-RELEASE                               
   222001          19 maya 1997   2.2-STABLE posle vyhoda 2.2.2-RELEASE       
   225000          2 oktyabrya    2.2.5-RELEASE                               
                   1997           
   225001          20 noyabrya    2.2-STABLE posle vyhoda 2.2.5-RELEASE       
                   1997           
   225002          27 dekabrya    2.2-STABLE posle poyavleniya ldconfig -R    
                   1997           
   226000          24 marta 1998  2.2.6-RELEASE                               
   227000          21 iyulya 1998 2.2.7-RELEASE                               
   227001          21 iyulya 1998 2.2-STABLE posle vyhoda 2.2.7-RELEASE       
   227002          19 sentyabrya  2.2-STABLE posle izmeneniya v semctl(2)     
                   1998           
   228000          29 noyabrya    2.2.8-RELEASE                               
                   1998           
   228001          29 noyabrya    2.2-STABLE posle vyhoda 2.2.8-RELEASE       
                   1998           
   300000          19 fevralya    3.0-CURRENT do izmeneniya v mount(2)        
                   1996           
   300001          24 sentyabrya  3.0-CURRENT posle izmeneniya v mount(2)     
                   1997           
   300002          2 iyunya 1998  3.0-CURRENT posle izmeneniya v semctl(2)    
   300003          7 iyunya 1998  3.0-CURRENT posle izmenenij v argumentah    
                                  ioctl                                       
   300004          3 sentyabrya   3.0-CURRENT posle perehoda na format ELF    
                   1998           
   300005          16 oktyabrya   3.0-RELEASE                                 
                   1998           
   300006          16 oktyabrya   3.0-CURRENT posle vyhoda 3.0-RELEASE        
                   1998           
   300007          22 yanvarya    3.0-STABLE posle razbieniya na vetki 3/4    
                   1999           
   310000          9 fevralya     3.1-RELEASE                                 
                   1999           
   310001          27 marta 1999  3.1-STABLE posle vyhoda 3.1-RELEASE         
                   14 aprelya     3.1-STABLE posle izmeneniya v poryadke      
   310002          1999           sledovaniya konstruktorov/destruktorov v    
                                  C++                                         
   320000                         3.2-RELEASE                                 
   320001          8 maya 1999    3.2-STABLE                                  
   320002          29 avgusta     3.2-STABLE posle nesovmestimyh izmenenij v  
                   1999           IPFW i soketah                              
   330000          2 sentyabrya   3.3-RELEASE                                 
                   1999           
   330001          16 sentyabrya  3.3-STABLE                                  
                   1999           
   330002          24 noyabrya    3.3-STABLE posle dobavleniya mkstemp(3) v   
                   1999           libc                                        
   340000          5 dekabrya     3.4-RELEASE                                 
                   1999           
   340001          17 dekabrya    3.4-STABLE                                  
                   1999           
   350000          20 iyunya 2000 3.5-RELEASE                                 
   350001          12 iyulya 2000 3.5-STABLE                                  
   400000          22 yanvarya    4.0-CURRENT posle poyavleniya vetki 3.4     
                   1999           
   400001          20 fevralya    4.0-CURRENT posle izmeneniya v rabote       
                   1999           dinamicheskogo komponovschika               
                                  4.0-CURRENT posle izmeneniya v poryadke     
   400002          13 marta 1999  sledovaniya konstruktorov/destruktorov v    
                                  C++                                         
   400003          27 marta 1999  4.0-CURRENT posle poyavleniya funkcii       
                                  dladdr(3)                                   
                                  4.0-CURRENT posle ispravleniya oshibki v    
   400004          5 aprelya 1999 rabote funkcii __deregister_frame_info      
                                  dinamicheskogo komponovschika (a takzhe     
                                  4.0-CURRENT posle integracii EGCS 1.1.2)    
                   27 aprelya     4.0-CURRENT posle izmeneniya interfejsa     
   400005          1999           funkcii suser(9) (a takzhe 4.0-CURRENT      
                                  posle poyavleniya newbus)                   
   400006          31 maya 1999   4.0-CURRENT posle izmeneniya v registracii  
                                  cdevsw                                      
   400007          17 iyunya 1999 4.0-CURRENT posle dobavleniya so_cred v     
                                  proverki na urovne soketov                  
   400008          20 iyunya 1999 4.0-CURRENT posle dobavleniya obrabotchika  
                                  sistemnogo vyzova poll v libc_r             
   400009          20 iyulya 1999 4.0-CURRENT posle perehoda v yadre s tipa   
                                  dev_t na ukazatel' struct specinfo          
   400010          25 sentyabrya  4.0-CURRENT posle ispravleniya uyazvimosti  
                   1999           v jail(2)                                   
   400011          29 sentyabrya  4.0-CURRENT posle izmeneniya v tipe dannyh  
                   1999           sigset_t                                    
   400012          15 noyabrya    4.0-CURRENT posle perehoda na kompilyator   
                   1999           GCC 2.95.2                                  
   400013          4 dekabrya     4.0-CURRENT posle poyavleniya dobavlyaemyh  
                   1999           obrabotchikov ioctl rezhima linux           
   400014          18 yanvarya    4.0-CURRENT posle zaimstvovaniya OpenSSL    
                   2000           
                   27 yanvarya    4.0-CURRENT posle izmeneniya v C++ ABI      
   400015          2000           kompilyatora GCC 2.95.2 po umolchaniyu s    
                                  -fvtable-thunks na -fno-vtable-thunks       
   400016          27 fevralya    4.0-CURRENT posle zaimstvovaniya OpenSSH    
                   2000           
   400017          13 marta 2000  4.0-RELEASE                                 
   400018          17 marta 2000  4.0-STABLE posle poyavleniya 4.0-RELEASE    
   400019          5 maya 2000    4.0-STABLE posle poyavleniya otlozhennyh    
                                  kontrol'nyh summ.                           
   400020          4 iyunya 2000  4.0-STABLE posle integracii koda biblioteki 
                                  libxpg4 v libc.                             
                                  4.0-STABLE posle obnovleniya paketa         
                                  Binutils do versii 2.10.0, izmeneniya v     
   400021          8 iyulya 2000  sheme pometki vypolnimyh fajlov ELF i       
                                  vklyucheniya tcsh v kachestve bazovogo      
                                  komponenta.                                 
   410000          14 iyulya 2000 4.1-RELEASE                                 
   410001          29 iyulya 2000 4.1-STABLE posle vyhoda 4.1-RELEASE         
                   16 sentyabrya  4.1-STABLE posle perenosa funkcii           
   410002          2000           setproctitle(3) iz biblioteki libutil v     
                                  libc.                                       
   411000          25 sentyabrya  4.1.1-RELEASE                               
                   2000           
   411001                         4.1.1-STABLE posle vyhoda 4.1.1-RELEASE     
   420000          31 oktyabrya   4.2-RELEASE                                 
                   2000           
                   10 yanvarya    4.2-STABLE posle ob"edineniya libgcc.a i    
   420001          2001           libgcc_r.a, a takzhe sootvetstvuyuschih     
                                  izmenenij v komponovke GCC.                 
   430000          6 marta 2001   4.3-RELEASE                                 
   430001          18 maya 2001   4.3-STABLE posle poyavleniya wint_t.        
   430002          22 iyulya 2001 4.3-STABLE posle dobavleniya API            
                                  sostoyaniya `elektropitaniya PCI.           
   440000          1 avgusta 2001 4.4-RELEASE                                 
   440001          23 oktyabrya   4.4-STABLE posle dobavleniya d_thread_t.    
                   2001           
                   4 noyabrya     4.4-STABLE posle izmenenij v strukturu dlya 
   440002          2001           montirovaniya (`eto zatragivaet KLD         
                                  fajlovyh sistem).                           
   440003          18 dekabrya    4.4-STABLE posle importa pol'zovatel'skih   
                   2001           komponentov smbfs.                          
   450000          20 dekabrya    4.5-RELEASE                                 
                   2001           
   450001          24 fevralya    4.5-STABLE posle pereimenovaniya `elementov 
                   2002           struktur usb                                
                   16 aprelya     4.5-STABLE posle togo, kak peremennaya      
   450004          2002           rc.conf(5) sendmail_enable stala            
                                  obrabatyvat' znachenie NONE.                
                   27 aprelya     4.5-STABLE posle pereklyucheniya na         
   450005          2002           ispol'zovanie po umolchaniyu pri postroenii 
                                  paketov XFree86 4.                          
                                  4.5-STABLE posle togo, kak setevoj fil'tr   
   450006          1 maya 2002    dlya `etapa podtverzhdeniya soedineniya byl 
                                  ispravlen takim obrazom, chto on bol'she ne 
                                  podverzhen prostym DoS-atakam.              
   460000          21 iyunya 2002 4.6-RELEASE                                 
                                  Spravochnaya stranica po sendfile(2) v      
                                  4.6-STABLE privedena v sootvetstvie s       
   460001          21 iyunya 2002 dokumentaciej, nikakie zagolovki ne         
                                  sravnivayutsya s kolichestvom dannyh,       
                                  poslannyh iz fajla.                         
   460002          19 iyulya 2002 4.6.2-RELEASE                               
   460100          26 iyunya 2002 4.6-STABLE                                  
   460101          26 iyunya 2002 4.6-STABLE posle perenosa iz -CURRENT       
                                  funkcional'nosti `sed -i'.                  
   460102          1 sentyabrya   4.6-STABLE posle MFC mnogih novyh           
                   2002           vozmozhnostej pkg_install iz vetki HEAD.    
   470000          8 oktyabrya    4.7-RELEASE                                 
                   2002           
   470100          9 oktyabrya    4.7-STABLE                                  
                   2002           
                                  Nachalo generacii ssylok __std{in,out,err}p 
   470101          10 noyabrya    vmesto __sF. `Eto perenosit vychislenie     
                   2002           vyrazhenij v std{in,out,err} s momenta      
                                  kompilyacii na vremya vypolneniya.          
   470102          23 yanvarya    4.7-STABLE posle MFC izmenenij v mbuf dlya  
                   2003           zameny m_aux mbufs na m_tag's               
   470103          14 fevralya    V 4.7-STABLE poyavlyaetsya OpenSSL 0.9.7    
                   2003           
   480000          30 marta 2003  4.8-RELEASE                                 
   480100          5 aprelya 2003 4.8-STABLE                                  
                                  4.8-STABLE posle togo, kak funkciya         
   480101          22 maya 2003   realpath(3) byla sdelana sovmestimoj s      
                                  potokami vypolneniya                        
   480102          10 avgusta     4.8-STABLE posle izmenenij 3ware API v twe. 
                   2003           
   490000          27 oktyabrya   4.9-RELEASE                                 
                   2003           
   490100          27 oktyabrya   4.9-STABLE                                  
                   2003           
   490101          8 yanvarya     4.9-STABLE posle dobavleniya e_sid v        
                   2004           strukturu kinfo_eproc.                      
   490102          4 fevralya     4.9-STABLE posle vypolneniya MFC            
                   2004           funkcional'nosti libmap dlya rtld.          
   491000          25 maya 2004   4.10-RELEASE                                
   491100          1 iyunya 2004  4.10-STABLE                                 
   491101          11 avgusta     4.10-STABLE posle vypolneniya MFC revizii   
                   2004           20040629 paketnogo instrumentariya          
   491102          16 noyabrya    4.10-STABLE posle ispravleniya oshibki v VM 
                   2004           pri otvyazyvanii (unwire) fiktivnyh stranic 
   492000          17 dekabrya    4.11-RELEASE                                
                   2004           
   492100          17 dekabrya    4.11-STABLE                                 
                   2004           
   492101          18 aprelya     4.11-STABLE posle dobavleniya katalogov     
                   2006           libdata/ldconfig v fajly mtree.             
   500000          13 marta 2000  5.0-CURRENT                                 
                                  5.0-CURRENT posle dobavleniya               
                   18 aprelya     dopolnitel'nyh polej v zagolovke ELF i      
   500001          2000           izmeneniya metoda pometki prinadlezhnosti k 
                                  opredelionnoj sisteme dlya vypolnimyh       
                                  fajlov v formate ELF.                       
   500002          2 maya 2000    5.0-CURRENT posle izmenenij v metadannyh    
                                  kld.                                        
   500003          18 maya 2000   5.0-CURRENT posle izmenenij buf/bio.        
   500004          26 maya 2000   5.0-CURRENT posle obnovleniya binutils.     
                                  5.0-CURRENT posle integracii koda           
   500005          3 iyunya 2000  biblioteki libxpg4 v libc i poyavleniya     
                                  interfejsa TASKQ.                           
   500006          10 iyunya 2000 5.0-CURRENT posle dobavleniya interfejsov   
                                  AGP.                                        
   500007          29 iyunya 2000 5.0-CURRENT posle obnovleniya Perl do       
                                  versii 5.6.0                                
   500008          7 iyulya 2000  5.0-CURRENT posle obnovleniya koda KAME do  
                                  versii 2000/07.                             
   500009          14 iyulya 2000 5.0-CURRENT posle izmenenij v               
                                  ether_ifattach() i ether_ifdetach().        
                                  5.0-CURRENT posle vozvrata v nastrojkah     
   500010          16 iyulya 2000 utility mtree, primenyaemyh po umolchaniyu, 
                                  obratno k original'nym i dobavleniya flaga  
                                  -L dlya perehoda po simvolicheskim ssylkam. 
   500011          18 iyulya 2000 5.0-CURRENT posle izmeneniya v API dlya     
                                  kqueue.                                     
                   2 sentyabrya   5.0-CURRENT posle peremescheniya            
   500012          2000           setproctitle(3) iz biblioteki libutil v     
                                  libc.                                       
   500013          10 sentyabrya  5.0-CURRENT posle pervogo kommita SMPng.    
                   2000           
   500014          4 yanvarya     5.0-CURRENT posle perenosa <sys/select.h> v 
                   2001           <sys/selinfo.h>.                            
                   10 yanvarya    5.0-CURRENT posle ob"edineniya libgcc.a i   
   500015          2001           libgcc_r.a, a takzhe sootvetstvuyuschih     
                                  izmenenij v komponovke GCC.                 
                                  5.0-CURRENT posle izmeneniya,               
   500016          24 yanvarya    pozvolyayuschego libc i libc_r byt'         
                   2001           skomponovannymi vmeste, chto delaet         
                                  parametr -pthread nenuzhnym.                
                                  5.0-CURRENT posle perehoda na ispol'zovanie 
   500017          18 fevralya    struct xucred vmesto struct ucred dlya      
                   2001           stabilizacii `eksportiruemogo API yadra     
                                  dlya mountd i t.d.                          
                                  5.0-CURRENT posle dobavleniya peremennoj    
   500018          24 fevralya    make CPUTYPE, pozvolyayuschej               
                   2001           kontrolirovat' specifichnye dlya CPU        
                                  optimizacii.                                
   500019          9 iyunya 2001  5.0-CURRENT posle perenosa                  
                                  machine/ioctl_fd.h v sys/fdcio.h            
   500020          15 iyunya 2001 5.0-CURRENT posle izmeneniya imen dlya      
                                  lokalizacii.                                
   500021          22 iyunya 2001 5.0-CURRENT posle importa Bzip2. Takzhe     
                                  oznachaet udalenie S/Key.                   
   500022          12 iyulya 2001 5.0-CURRENT s podderzhkoj SSE.              
   500023          14 sentyabrya  5.0-CURRENT posle KSE `Etap 2.              
                   2001           
   500024          1 oktyabrya    5.0-CURRENT posle d_thread_t i perenosa     
                   2001           UUCP v porty.                               
                   4 oktyabrya    5.0-CURRENT posle izmeneniya ABI iz-za      
   500025          2001           perenosa peredachi deskriptora i prav na    
                                  64-razryadnye platformy.                    
                                  5.0-CURRENT posle perehoda na ispol'zovanie 
   500026          9 oktyabrya    po umolchaniyu XFree86 4 dlya postroeniya   
                   2001           paketov i posle dobavleniya v biblioteku    
                                  libc novoj funkcii strnstr().               
   500027          10 oktyabrya   5.0-CURRENT posle dobavleniya v biblioteku  
                   2001           libc novoj funkcii strcasestr().            
   500028          14 dekabrya    5.0-CURRENT posle importa pol'zovatel'skih  
                   2001           komponentov smbfs.                          
   (Znachenie ne                  5.0-CURRENT posle dobavleniya novyh         
   izmeneno)                      specificheskih dlya C99 celochislennyh      
                                  tipov.                                      
                   29 yanvarya    5.0-CURRENT posle izmeneniya                
   500029          2002           vozvraschaemogo funkciej sendfile(2)        
                                  znacheniya.                                 
                   15 fevralya    5.0-CURRENT posle dobavleniya novogo tipa   
   500030          2002           fflags_t, sootvetstvuyuschego fajlovym      
                                  flagam.                                     
   500031          24 fevralya    5.0-CURRENT posle pereimenovaniya           
                   2002           `elementov struktur usb.                    
   500032          16 marta 2002  5.0-CURRENT posle obnovleniya Perl do       
                                  versii 5.6.1                                
                                  5.0-CURRENT posle togo kak peremennaya      
   500033          3 aprelya 2002 rc.conf(5) sendmail_enable stala            
                                  obrabatyvat' znachenie NONE.                
   500034          30 aprelya     5.0-CURRENT posle dobavleniya v funkciyu    
                   2002           mtx_init() tret'ego parametra.              
   500035          13 maya 2002   5.0-CURRENT posle importa Gcc 3.1           
   500036          17 maya 2002   5.0-CURRENT posle udaleniya Perl iz         
                                  /usr/src                                    
   500037          29 maya 2002   5.0-CURRENT posle dobavleniya funkcii       
                                  dlfunc(3)                                   
                                  5.0-CURRENT posle togo, kak byli izmeneny   
   500038          24 iyulya 2002 tipy nekotoryh zapisej v strukture sockbuf, 
                                  a sama struktura byla reorganizovana.       
                                  5.0-CURRENT posle importa GCC 3.2.1. Takzhe 
                                  posle togo, kak v fajlah zagolovkov bylo    
                   1 sentyabrya   prekrascheno ispol'zovanie _BSD_FOO_T_ i    
   500039          2002           nachato ispol'zovanie _FOO_T_DECLARED. `Eto 
                                  znachenie mozhet byt' takzhe ispol'zovano   
                                  kak primernaya tochka nachala podderzhki    
                                  paketov v formate bzip2(1).                 
                                  5.0-CURRENT posle razlichnyh izmenenij v    
   500040          20 sentyabrya  diskovyh funkciyah, sdelannyh dlya          
                   2002           izbavleniya ot zavisimosti ot vnutrennego   
                                  ustrojstva struktury metki diska.           
   500041          1 oktyabrya    5.0-CURRENT posle dobavleniya funkcii       
                   2002           getopt_long(3) v biblioteku libc.           
                   15 oktyabrya   5.0-CURRENT posle obnovleniya Binutils      
   500042          2002           2.13, kuda vklyuchena novaya `emulyaciya    
                                  FreeBSD, vec i format vydachi.              
                                  5.0-CURRENT posle dobavleniya prostyh       
   500043          1 noyabrya     zaglushek pthread_XXX k biblioteke libc,    
                   2002           chto sdelalo libXThrStub.so nenuzhnoj.      
                                  5.0-RELEASE.                                
   500100          17 yanvarya    5.0-CURRENT posle sozdaniya vetki dlya      
                   2003           RELENG_5_0                                  
   500101          19 fevralya    <sys/dkstat.h> pust i ne dolzhen            
                   2003           ispol'zovat'sya.                            
   500102          25 fevralya    5.0-CURRENT posle izmeneniya interfejsa     
                   2003           d_mmap_t.                                   
                                  5.0-CURRENT posle togo, kak bylo vneseno    
   500103          26 fevralya    izmenenie, pri kotorom taskqueue_swi        
                   2003           rabotaet bez Giant, i bylo dobavleno        
                                  taskqueue_swi_giant, rabotayuschee s Giant. 
                   27 fevralya    cdevsw_add() i cdevsw_remove() bol'she ne   
   500104          2003           suschestvuyut. Poyavilas' tehnologiya       
                                  vydeleniya MAJOR_AUTO.                      
   500105          4 marta 2003   5.0-CURRENT posle poyavleniya novogo metoda 
                                  inicializacii cdevsw.                       
   500106          8 marta 2003   devstat_add_entry() zameneno na             
                                  devstat_new_entry()                         
   500107          15 marta 2003  Izmenenie interfejsa devstat; smotrite      
                                  sys/sys/param.h 1.149                       
   500108          15 marta 2003  Izmenenie v interfejse Token-Ring.          
   500109          25 marta 2003  Dobavlenie vm_paddr_t.                      
                                  5.0-CURRENT posle togo, kak funkciya        
   500110          28 marta 2003  realpath(3) byla sdelana sovmestimoj s      
                                  potokami vypolneniya                        
                                  5.0-CURRENT posle togo, kak funkciya        
   500111          9 aprelya 2003 usbhid(3) byla privedena v sootvetstvie s   
                                  NetBSD                                      
                   17 aprelya     5.0-CURRENT posle novoj realizacii NSS i    
   500112          2003           dobavleniya funkcij POSIX.1 getpw*_r i      
                                  getgr*_r                                    
   500113          2 maya 2003    5.0-CURRENT posle udaleniya staroj sistemy  
                                  rc.                                         
   501000          4 iyunya 2004  5.1-RELEASE.                                
   501100          2 iyunya 2003  5.1-CURRENT posle poyavleniya vetki         
                                  RELENG_5_1.                                 
   501101          29 iyunya 2003 5.1-CURRENT posle korrektirovki smysla      
                                  funkcij sigtimedwait(2) i sigwaitinfo(2).   
                                  5.1-CURRENT posle dobavleniya polej         
   501102          3 iyulya 2003  lockfunc i lockfuncarg v                    
                                  bus_dma_tag_create(9).                      
   501103          31 iyulya 2003 5.1-CURRENT posle integracii sn`epshota GCC 
                                  3.3.1-pre 20030711.                         
   501104          5 avgusta 2003 5.1-CURRENT osle izmenenij 3ware API v twe. 
                   17 avgusta     Podderzhka v 5.1-CURRENT dinamicheski       
   501105          2003           skomponovannyh /bin i /sbin, peremeschenie  
                                  bibliotek v /lib.                           
   501106          8 sentyabrya   5.1-CURRENT posle dobavleniya v yadro       
                   2003           podderzhki Coda 6.x.                        
                                  5.1-CURRENT posle peremescheniya konstant   
                                  dlya 16550 UART iz fajla <dev/sio/sioreg.h> 
   501107          17 sentyabrya  v <dev/ic/ns16550.h>. A takzhe moment,      
                   2003           kogda rtld stal podderzhivat'               
                                  funkcional'nost' libmap v bezuslovnom       
                                  rezhime.                                    
   501108          23 sentyabrya  5.1-CURRENT posle obnovleniya v API         
                   2003           PFIL_HOOKS                                  
   501109          27 sentyabrya  5.1-CURRENT posle dobavleniya funkcii       
                   2003           kiconv(3)                                   
   501110          28 sentyabrya  5.1-CURRENT posle izmenenij operacij po     
                   2003           umolchaniyu dlya open i close v cdevsw      
   501111          16 oktyabrya   5.1-CURRENT posle izmenenij v strukture     
                   2003           cdevsw                                      
   501112          16 oktyabrya   5.1-CURRENT posle dobavleniya               
                   2003           mnozhestvennogo nasledovaniya dlya kobj     
   501113          31 oktyabrya   5.1-CURRENT posle izmeneniya if_xname v     
                   2003           strukture ifnet                             
   501114          16 noyabrya    5.1-CURRENT posle izmenenij, svyazannyh s   
                   2003           dinamicheskoj komponovkoj /bin i /sbin      
   502000          7 dekabrya     5.2-RELEASE                                 
                   2003           
   502010          23 fevralya    5.2.1-RELEASE                               
                   2003           
   502100          7 dekabrya     5.2-CURRENT posle otdeleniya vetki          
                   2003           RELENG_5_2                                  
   502101          19 dekabrya    5.2-CURRENT posle dobavleniya v libc        
                   2003           funkcij __cxa_atexit/__cxa_finalize.        
                   30 yanvarya    5.2-CURRENT posle smeny ispol'zuemoj po     
   502102          2004           umolchaniyu biblioteki dlya raboty s        
                                  potokami libc_r na libpthread.              
   502103          21 fevralya    5.2-CURRENT posle bol'shogo izmeneniya v    
                   2004           API drajverov ustrojstv.                    
   502104          25 fevralya    5.2-CURRENT posle dobavleniya               
                   2004           getopt_long_only().                         
                                  5.2-CURRENT posle togo, kak                 
                                  makro-peremennaya NULL byla pereopredelena  
   502105          5 marta 2004   dlya yazyka C kak ((void *)0), chto privelo 
                                  k uvelicheniyu kolichestva preduprezhdenij  
                                  kompilyatora.                               
   502106          8 marta 2004   5.2-CURRENT posle ustanovki i vklyucheniya  
                                  pf v process postroeniya sistemy.           
                                  5.2-CURRENT posle togo, kak znachenie       
   502107          10 marta 2004  time_t na platforme sparc64 stalo           
                                  64-razryadnym.                              
                                  5.2-CURRENT posle togo, kak podderzhka      
                                  kompilyatora Intel C/C++ v nekotoryh        
   502108          12 marta 2004  zagolovochnyh fajlah i execve(2) byla       
                                  izmenena na bolee strogo                    
                                  sootvetstvuyuschuyu POSIX.                  
   502109          22 marta 2004  5.2-CURRENT posle vvedeniya programmnogo    
                                  interfejsa bus_alloc_resource_any           
   502110          27 marta 2004  5.2-CURRENT posle dobavleniya podderzhki    
                                  lokalizacii UTF-8                           
   502111          11 aprelya     5.2-CURRENT posle udaleniya programmnogo    
                   2004           interfejsa getvfsent(3)                     
   502112          13 aprelya     5.2-CURRENT posle dobavleniya direktivy     
                   2004           .warning dlya make.                         
                                  5.2-CURRENT posle togo, kak funkciya        
   502113          4 iyunya 2004  ttyioctl() stala obyazatel'noj dlya         
                                  drajverov posledovatel'nyh ustrojstv.       
   502114          13 iyunya 2004 5.2-CURRENT posle importa ALTQ              
                                  infrastruktury.                             
                                  5.2-CURRENT posle togo, kak                 
   502115          14 iyunya 2004 sema_timedwait(9) stal vozvraschat' 0 v     
                                  sluchae uspeha i ne nulevoj kod oshibki v   
                                  sluchae neudachi.                           
   502116          16 iyunya 2004 5.2-CURRENT posle togo, kak kernel tip      
                                  dev_t stal ukazatelem na struct cdev *.     
   502117          17 iyunya 2004 5.2-CURRENT posle togo, kak kernel tip      
                                  udev_t izmenilsya na dev_t.                 
                                  5.2-CURRENT posle dobavleniya podderzhki    
   502118          17 iyunya 2004 CLOCK_VIRTUAL i CLOCK_PROF v                
                                  clock_gettime(2) i clock_getres(2).         
                                  5.2-CURRENT posle togo, kak byl provedion   
   502119          22 iyunya 2004 peresmotr klonirovaniya setevogo            
                                  interfejsa.                                 
   502120          2 iyulya 2004  5.2-CURRENT posle obnovleniya paketnogo     
                                  instrumentariya do revizii 20040629.        
   502121          9 iyulya 2004  5.2-CURRENT posle otmetki, chto kod         
                                  Bluetooth ne ogranichen arhitekturoj i386.  
                                  5.2-CURRENT posle poyavleniya otladochnoj   
   502122          11 iyulya 2004 infrastruktury KDB, perenosa DDB v b`ek`end 
                                  i poyavleniya b`ek`enda GDB.                
                                  5.2-CURRENT posle dobavleniya v VFS_ROOT    
                                  novogo argumenta struct thread, tak zhe kak 
   502123          12 iyulya 2004 `eto delaet vflush. Struktura kinfo_proc    
                                  teper' imeet ukazatel' na pol'zovatel'skie  
                                  dannye. Smena realizacii X po umolchaniyu   
                                  na xorg bylo sdelano v `eto zhe vremya.     
                                  5.2-CURRENT posle razdeleniya sposobov      
   502124          24 iyulya 2004 zapuska skriptov rc.d iz portov i           
                                  imeyuschih status legacy.                   
   502125          28 iyulya 2004 5.2-CURRENT posle otmeny predyduschego      
                                  izmeneniya.                                 
   502126          31 iyulya 2004 5.2-CURRENT posle udaleniya                 
                                  kmem_alloc_pageable() i importa gcc 3.4.2.  
                                  5.2-CURRENT posle izmeneniya v API yadra    
   502127          2 avgusta 2004 UMA, razreshayuschego                       
                                  konstruktoram/inicializatoram (ctors/inits) 
                                  vozvraschat' neudachu.                      
                                  5.2-CURRENT posle izmeneniya v signature    
   502128          8 avgusta 2004 vfs_mount, a takzhe posle obschej zameny    
                                  PRISON_ROOT na SUSER_ALLOWJAIL v API        
                                  suser(9).                                   
   503000          23 avgusta     5.3-BETA/RC pered izmeneniem v pfil API     
                   2004           
   503001          22 sentyabrya  5.3-RELEASE                                 
                   2004           
   503100          16 oktyabrya   5.3-STABLE posle otdeleniya vetki           
                   2004           RELENG_5_3                                  
                   3 dekabrya     5.3-STABLE posle dobavleniya v funkciyu     
   503101          2004           strftime(3) parametrov otstupa v stile      
                                  glibc.                                      
   503102          13 fevralya    5.3-STABLE posle vypolneniya MFC importa    
                   2005           nc(1) iz OpenBSD.                           
                                  5.4-PRERELEASE posle vypolneniya MFC        
                   27 fevralya    ispravlenij v <src/include/stdbool.h> i     
   503103          2005           <src/sys/i386/include/_types.h> dlya        
                                  ispol'zovaniya sovmestimosti GCC v          
                                  kompilyatore Intel C/C++.                   
                                  5.4-PRERELEASE posle vypolneniya MFC        
   503104          28 fevralya    izmeneniya polya ifi_epoch v strukture      
                   2005           if_data so vremeni chasov na vremya s       
                                  momenta starta.                             
                                  5.4-PRERELEASE posle vypolneniya MFC        
   503105          2 marta 2005   ispravleniya v vswprintf(3) proverki na     
                                  EOVERFLOW.                                  
   504000          3 aprelya 2005 5.4-RELEASE.                                
   504100          3 aprelya 2005 5.4-STABLE posle otdeleniya vetki           
                                  RELENG_5_4                                  
   504101          11 maya 2005   5.4-STABLE posle uvelicheniya znacheniya po 
                                  umolchaniyu razmera steka potoka.           
   504102          24 iyunya 2005 5.4-STABLE posle dobavleniya sha256         
   504103          3 oktyabrya    5.4-STABLE posle vypolneniya MFC if_bridge  
                   2005           
   504104          13 oktyabrya   5.4-STABLE posle vypolneniya MFC bsdiff i   
                   2005           portsnap                                    
   504105          17 yanvarya    5.4-STABLE posle vypolneniya MFC izmeneniya 
                   2006           ldconfig_local_dirs.                        
   505000          12 maya 2006   5.5-RELEASE.                                
   505100          12 maya 2006   5.5-STABLE posle otdeleniya vetki           
                                  RELENG_5_5                                  
   600000          18 avgusta     6.0-CURRENT                                 
                   2004           
   600001          27 avgusta     6.0-CURRENT posle postoyannogo vklyucheniya 
                   2004           v yadro PFIL_HOOKS.                         
                                  6.0-CURRENT posle pervonachal'nogo          
   600002          30 avgusta     dobavleniya ifi_epoch v strukturu if_data.  
                   2004           Vypolnen vozvrat posle neskol'kih dnej. Ne  
                                  ispol'zujte `eto znachenie.                 
   600003          8 sentyabrya   6.0-CURRENT posle povtornogo dobavleniya    
                   2004           polya ifi_epoch v strukturu if_data.        
   600004          29 sentyabrya  6.0-CURRENT posle dobavleniya v pfil API    
                   2004           struktury inpcb kak parametra.              
   600005          5 oktyabrya    6.0-CURRENT posle dobavleniya v newsyslog   
                   2004           parametra "-d DESTDIR".                     
                   4 noyabrya     6.0-CURRENT posle dobavleniya v funkciyu    
   600006          2004           strftime(3) parametrov otstupa v stile      
                                  glibc.                                      
   600007          12 dekabrya    6.0-CURRENT posle obnovlenij v              
                   2004           infrastrukture 802.11.                      
                                  6.0-CURRENT posle izmenenij v funkciyah     
   600008          25 yanvarya    VOP_*VOBJECT() i poyavleniya flaga          
                   2005           MNTK_MPSAFE dlya fajlovyh sistem, svobodnyh 
                                  ot Giant.                                   
   600009          4 fevralya     6.0-CURRENT posle dobavleniya               
                   2005           infrastruktury i drajverov cpufreq.         
   600010          6 fevralya     6.0-CURRENT posle importa nc(1) iz OpenBSD. 
                   2005           
   600011          12 fevralya    6.0-CURRENT posle udaleniya podobiya        
                   2005           podderzhki SVID2 matherr().                 
   600012          15 fevralya    6.0-CURRENT posle uvelicheniya znacheniya   
                   2005           po umolchaniyu razmera stekov potoka.       
                                  6.0-CURRENT posle ispravlenij v             
                   19 fevralya    <src/include/stdbool.h> i                   
   600013          2005           <src/sys/i386/include/_types.h> dlya        
                                  ispol'zovaniya sovmestimosti GCC v          
                                  kompilyatore Intel C/C++.                   
   600014          21 fevralya    6.0-CURRENT posle ispravleniya v            
                   2005           vswprintf(3) proverki na EOVERFLOW.         
                   25 fevralya    6.0-CURRENT posle izmeneniya polya          
   600015          2005           ifi_epoch v strukture if_data so vremeni    
                                  chasov na vremya s momenta starta.          
   600016          26 fevralya    6.0-CURRENT posle izmeneniya formata        
                   2005           LC_CTYPE, ispol'zuemogo pri zapisi na disk. 
                   27 fevralya    6.0-CURRENT posle izmeneniya formata        
   600017          2005           katalogov NLS, ispol'zuemogo pri zapisi na  
                                  disk.                                       
                   27 fevralya    6.0-CURRENT posle izmeneniya formata        
   600018          2005           LC_COLLATE, ispol'zuemogo pri zapisi na     
                                  disk.                                       
   600019          28 fevralya    Ustanovka podklyuchaemyh fajlov acpica v    
                   2005           /usr/include.                               
   600020          9 marta 2005   Dobavlenie flaga MSG_NOSIGNAL v API         
                                  send(2).                                    
   600021          17 marta 2005  Dobavlenie polej v cdevsw.                  
   600022          21 marta 2005  gtar udalen iz osnovnoj sistemy.            
   600023          13 aprelya     V unix(4) dobavleny parametry soketa        
                   2005           LOCAL_CREDS, LOCAL_CONNWAIT.                
   600024          19 aprelya     V 6.0-CURRENT dobavleny hwpmc(4) i          
                   2005           svyazannye instrumenty.                     
   600025          26 aprelya     V 6.0-CURRENT dobavlena struktura icmphdr.  
                   2005           
   600026          3 maya 2005    pf obnovlen do 3.7.                         
   600027          6 maya 2005    Predstavleny libalias i ng_nat urovnya      
                                  yadra.                                      
   600028          13 maya 2005   POSIX ttyname_r(3) sdelan dostupnym cherez  
                                  unistd.h i libc.                            
   600029          29 maya 2005   6.0-CURRENT posle obnovleniya libpcap do    
                                  v0.9.1 alpha 096.                           
   600030          5 iyunya 2005  6.0-CURRENT posle importa if_bridge(4) iz   
                                  NetBSD.                                     
   600031          10 iyunya 2005 6.0-CURRENT posle peremescheniya struktury  
                                  ifnet iz struktury drajverov softc.         
   600032          11 iyulya 2005 6.0-CURRENT posle importa libpcap v0.9.1.   
                                  6.0-STABLE posle uvelicheniya nomera versii 
   600033          25 iyulya 2005 vseh dinamicheskih bibliotek, dlya kotoryh  
                                  on ne byl izmenen s RELENG_5.               
                   13 avgusta     6.0-STABLE posle dobavleniya argumenta      
   600034          2005           uchetnyh dannyh v obrabotchik sobytij       
                                  dev_clone. 6.0-RELEASE.                     
   600100          1 noyabrya     6.0-STABLE posle 6.0-RELEASE                
                   2005           
                   21 dekabrya    6.0-STABLE posle vnedreniya scenariev iz    
   600101          2005           katalogov local_startup v bazovyj           
                                  rcorder(8).                                 
   600102          30 dekabrya    6.0-STABLE posle obnovleniya tipov i        
                   2005           konstant ELF.                               
   600103          15 yanvarya    6.0-STABLE posle vypolneniya MFC API        
                   2006           pidfile(3).                                 
   600104          17 yanvarya    6.0-STABLE posle vypolneniya MFC izmeneniya 
                   2006           ldconfig_local_dirs.                        
   600105          26 fevralya    6.0-STABLE posle dobavleniya podderzhki     
                   2006           kataloga NLS dlya csh(1).                   
   601000          6 maya 2006    6.1-RELEASE                                 
   601100          6 maya 2006    6.1-STABLE posle 6.1-RELEASE.               
   601101          22 iyunya 2006 6.1-STABLE posle importa csup.              
   601102          11 iyulya 2006 6.1-STABLE posle obnovleniya iwi(4).        
                                  6.1-STABLE posle obnovleniya rezolvera do   
   601103          17 iyulya 2006 BIND9 i dobavleniya reenterabel'noj versii  
                                  funkcij netdb.                              
                                  6.1-STABLE posle vklyucheniya podderzhki    
   601104          8 avgusta 2006 DSO (dinamicheskih sovmestno ispol'zuemyh   
                                  ob"ektov) v OpenSSL.                        
                   2 sentyabrya   6.1-STABLE posle ispravlenij v 802.11,      
   601105          2006           izmenyayuschih API dlya ioctl               
                                  IEEE80211_IOC_STA_INFO.                     
   602000          15 noyabrya    6.2-RELEASE                                 
                   2006           
   602100          15 sentyabrya  6.2-STABLE posle 6.2-RELEASE                
                   2006           
   602101          12 dekabrya    6.2-STABLE posle dobavleniya kvirka Wi-Spy. 
                   2006           
   602102          28 dekabrya    6.2-STABLE posle dobavleniya                
                   2006           pci_find_extcap().                          
                   16 yanvarya    6.2-STABLE posle vypolneniya MFC izmeneniya 
   602103          2007           dlsym dlya poiska zaproshennogo simvola v   
                                  ukazannom dso i ego neyavnyh zavisimostej.  
                                  6.2-STABLE posle vypolneniya MFC uzlov      
   602104          28 yanvarya    netgraph ng_deflate(4) i ng_pred1(4) i      
                   2007           novogo uzla ng_ppp(4) so szhatiem i         
                                  shifrovaniem.                               
                   20 fevralya    6.2-STABLE posle vypolneniya MFC            
   602105          2007           portirovannoj iz NetBSD versii gzip(1) s    
                                  licenziej BSD.                              
   602106          31 marta 2007  6.2-STABLE posle vypolneniya MFC podderzhki 
                                  PCI MSI i MSI-X.                            
   602107          6 aprelya 2007 6.2-STABLE posle vypolneniya MFC ncurses    
                                  5.6 i podderzhki dvuhbajtovyh simvolov.     
                                  6.2-STABLE posle vypolneniya MFC            
                   11 aprelya     dobavleniya periferijnogo ustrojstva CAM    
   602108          2007           'SG', kotoroe realizuet podmnozhestvo API   
                                  skvoznyh (passthrough) ustrojstv Linux SCSI 
                                  SG.                                         
   602109          17 aprelya     6.2-STABLE posle vypolneniya MFC readline   
                   2007           5.2 patchset 002.                           
                                  6.2-STABLE posle vypolneniya MFC            
                                  pmap_invalidate_cache(),                    
   602110          2 maya 2007    pmap_change_attr(), pmap_mapbios(),         
                                  pmap_mapdev_attr() i pmap_unmapbios() dlya  
                                  mad64 i i386.                               
                                  6.2-STABLE posle vypolneniya MFC            
   602111          11 iyunya 2007 BOP_BDFLUSH i vyzvannoj `etim polomki v KBI 
                                  dlya modulej fajlovyh sistem.               
   602112          21 sentyabrya  6.2-STABLE posle vypolneniya serii MFC      
                   2007           libutil(3).                                 
                                  6.2-STABLE posle vypolneniya MFC            
                                  razdeleniya dvuhbajtovyh i odnobajtovyh     
   602113          25 oktyabrya   ctype. Zanovo skompilirovannye dvoichnye    
                   2007           fajly, ssylayuschiesya na ctype.h, mogut    
                                  potrebovat' novyj simvol __mb_sb_limit,     
                                  nedostupnyj na bolee staryh sistemah.       
   602114          30 oktyabrya   6.2-STABLE posle vosstanovleniya obratnoj   
                   2007           sovmestimosti ctype ABI.                    
   602115          21 noyabrya    6.2-STABLE posle otkata razdeleniya         
                   2007           dvuhbajtovyh i odnobajtovyh ctype.          
   603000          25 noyabrya    6.3-RELEASE                                 
                   2007           
   603100          25 noyabrya    6.3-STABLE posle 6.3-RELEASE.               
                   2007           
   603101          7 dekabrya     6.3-STABLE posle ispravleniya podderzhki    
                   2007           mnogobajtovyh tipov v bitovom makrose.      
   603102          24 aprelya     6.3-STABLE posle dobavleniya l_sysid k      
                   2008           strukture flock.                            
   603103          27 maya 2008   6.3-STABLE posle vypolneniya MFC funkcii    
                                  memrchr.                                    
   603104          15 iyunya 2008 6.3-STABLE posle vypolneniya MFC podderzhki 
                                  modifikatora peremennoj :u v make(1).       
   604000          4 oktyabrya    6.4-RELEASE                                 
                   2008           
   604100          4 oktyabrya    6.4-STABLE posle 6.4-RELEASE.               
                   2008           
   700000          11 iyulya 2005 7.0-CURRENT.                                
                                  7.0-CURRENT posle uvelicheniya nomera       
   700001          23 iyulya 2005 versii vseh dinamicheskih bibliotek, dlya   
                                  kotoryh on ne byl izmenen s RELENG_5.       
                   13 avgusta     7.0-CURRENT posle dobavleniya argumenta     
   700002          2005           uchetnyh dannyh v obrabotchik sobytij       
                                  dev_clone.                                  
   700003          25 avgusta     7.0-CURRENT posle dobavleniya memmem(3) v   
                   2005           libc.                                       
                   30 oktyabrya   7.0-CURRENT posle izmeneniya parametrov     
   700004          2005           funkcii yadra solisten(9) dlya polucheniya  
                                  parametra backlog.                          
                   11 noyabrya    7.0-CURRENT posle izmeneniya IFP2ENADDR(),  
   700005          2005           kotoryj teper' vozvraschaet ukazatel' na    
                                  IF_LLADDR().                                
   700006          11 noyabrya    7.0-CURRENT posle dobavleniya polya if_addr 
                   2005           v struct ifnet i udaleniya IFP2ENADDR().    
                   2 dekabrya     7.0-CURRENT posle vnedreniya scenariev iz   
   700007          2005           katalogov local_startup v bazovyj           
                                  rcorder(8).                                 
   700008          5 dekabrya     7.0-CURRENT posle udaleniya parametra       
                   2005           montirovaniya MNT_NODEV.                    
   700009          19 dekabrya    7.0-CURRENT posle izmenenij tipa ELF-64 i   
                   2005           simvol'nogo versionirovaniya.               
                                  7.0-CURRENT posle dobavleniya drajverov     
                   20 dekabrya    hostb i vgapci, dobavleniya                 
   700010          2005           pci_find_extcap() i izmeneniya v drajverah  
                                  AGP, chtoby bol'she ne otobrazhat' v        
                                  pamyat' aperture.                           
   700011          31 dekabrya    7.0-CURRENT posle zameny tv_sec na time_t   
                   2005           na vseh platformah, krome Alpha.            
   700012          8 yanvarya     7.0-CURRENT posle izmeneniya                
                   2006           ldconfig_local_dirs.                        
                                  7.0-CURRENT posle izmenenij v /etc/rc.d/abi 
                   12 yanvarya    dlya podderzhki                             
   700013          2006           /compat/linux/etc/ld.so.cache v kachestve   
                                  simvolicheskoj ssylki na fajlovuyu sistemu  
                                  v rezhime tol'ko dlya chteniya.             
   700014          26 yanvarya    7.0-CURRENT posle importa pts.              
                   2006           
   700015          26 marta 2006  7.0-CURRENT posle poyavleniya vtoroj versii 
                                  ABI hwpmc(4)                                
   700016          22 aprelya     7.0-CURRENT posle dobavleniya fcloseall(3)  
                   2006           v libc.                                     
   700017          13 maya 2006   7.0-CURRENT posle udaleniya ip6fw.          
   700018          15 iyulya 2006 7.0-CURRENT posle importa snd_emu10kx.      
   700019          29 iyulya 2006 7.0-CURRENT posle importa OpenSSL 0.9.8b.   
   700020          3 sentyabrya   7.0-CURRENT posle dobavleniya funkcii       
                   2006           bus_dma_get_tag                             
   700021          4 sentyabrya   7.0-CURRENT posle importa libpcap 0.9.4 i   
                   2006           tcpdump 3.9.4.                              
                   9 sentyabrya   7.0-CURRENT posle izmeneniya dlsym dlya     
   700022          2006           poiska zaproshennogo simvola v ukazannom    
                                  dso i ego neyavnyh zavisimostyah.           
   700023          23 sentyabrya  7.0-CURRENT posle dobavleniya novyh         
                   2006           zvukovyh IOCTL dlya API mikshera OSSv4.     
   700024          28 sentyabrya  7.0-CURRENT posle importa OpenSSL 0.9.8d.   
                   2006           
   700025          11 noyabrya    7.0-CURRENT posle dobavleniya libelf.       
                   2006           
   700026          26 noyabrya    7.0-CURRENT posle znachitel'nyh izmenenij v 
                   2006           sysctl zvukovoj podsistemy.                 
   700027          30 noyabrya    7.0-CURRENT posle dobavleniya kvirka        
                   2006           Wi-Spy.                                     
   700028          15 dekabrya    7.0-CURRENT posle dobavleniya vyzovov sctp  
                   2006           v libc.                                     
                   26 yanvarya    7.0-CURRENT posle udaleniya inkapsulyacii   
   700029          2007           tunnelya IPIP (VIFF_TUNNEL) iz koda IPv4    
                                  multicast forwarding.                       
                   7 fevralya     7.0-CURRENT posle zameny realizacii GNU     
   700030          2007           gzip(1) na portirovannuyu iz NetBSD versiyu 
                                  s licenziej BSD.                            
   700031          23 fevralya    7.0-CURRENT posle izmeneniya v              
                   2007           bus_setup_intr() (newbus).                  
   700032          2 marta 2007   7.0-CURRENT posle vneseniya mikrokoda       
                                  ipw(4) i iwi(4).                            
   700033          9 marta 2007   7.0-CURRENT posle vneseniya podderzhki      
                                  dvuhbajtovyh simvolov ncurses.              
                                  7.0-CURRENT posle izmenenij v rabote        
   700034          19 marta 2007  insmntque(), getnewvnode() i                
                                  vfs_hash_insert().                          
   700035          26 marta 2007  7.0-CURRENT posle dobavleniya mehanizma     
                                  uvedomlenij pri izmenenii chastoty CPU.     
   700036          6 aprelya 2007 7.0-CURRENT posle importa fajlovoj sistemy  
                                  ZFS.                                        
                                  7.0-CURRENT posle dobavleniya periferijnogo 
   700037          8 aprelya 2007 ustrojstva CAM 'SG', kotoroe realizuet      
                                  podmnozhestvo API skvoznyh (passthrough)    
                                  ustrojstv Linux SCSI SG.                    
                   30 aprelya     7.0-CURRENT posle izmeneniya getenv(3),     
   700038          2007           putenv(3), setenv(3) i unsetenv(3) dlya     
                                  sovmestimosti s POSIX.                      
   700039          1 maya 2007    7.0-CURRENT posle otkata izmenenij v        
                                  700038.                                     
   700040          10 maya 2007   7.0-CURRENT posle dobavleniya flopen(3) v   
                                  libutil.                                    
                                  7.0-CURRENT posle vklyucheniya              
   700041          13 maya 2007   versionirovaniya simvolov i izmeneniya      
                                  potokovoj biblioteki, ispol'zuemoj po       
                                  umolchaniyu, na libthr.                     
   700042          19 maya 2007   7.0-CURRENT posle importa gcc 4.2.0.        
                                  7.0-CURRENT posle uvelicheniya starshego    
   700043          21 maya 2007   nomera versii dlya vseh dinamicheskih       
                                  bibliotek, dlya kotoryh `eto ne bylo        
                                  sdelano s momenta RELENG_6.                 
                                  7.0-CURRENT posle izmeneniya parametra dlya 
   700044          7 iyunya 2007  vn_open()/VOP_OPEN() vmesto fajlovogo       
                                  deskriptora na struct file *.               
                                  7.0-CURRENT posle izmeneniya pam_nologin(8) 
   700045          10 iyunya 2007 dlya obespecheniya funkcii upravleniya      
                                  uchetnymi zapisyami vmesto funkcii          
                                  autentifikacii dlya infrastruktury PAM.     
   700046          11 iyunya 2007 7.0-CURRENT posle obnovleniya podderzhki    
                                  besprovodnoj svyazi 802.11.                 
   700047          11 iyunya 2007 7.0-CURRENT posle dobavleniya vozmozhnostej 
                                  TCP LRO interfejsa.                         
                                  7.0-CURRENT posle dobavleniya v stek IPv4   
                                  podderzhki API RFC 3678. Unasledovannoe ot  
                                  RFC 1724 povedenie ioctl IP_MULTICAST_IF    
   700048          12 iyunya 2007 teper' udaleno; 0.0.0.0/8 bol'she ne mozhet 
                                  byt' ispol'zovan dlya ukazaniya indeksa     
                                  interfejsa. Vmesto `etogo sleduet           
                                  ispol'zovat' strukturu ipmreqn.             
   700049          3 iyulya 2007  7.0-CURRENT posle importa pf iz OpenBSD 4.1 
                                  7.0-CURRENT posle dobavleniya podderzhki    
   (ne izmeneno)                  IPv6 dlya FAST_IPSEC, udaleniya KAME IPSEC  
                                  i pereimenovaniya FAST_IPSEC v IPSEC.       
                                  7.0-CURRENT posle konvertacii vyzovov       
   700050          4 iyulya 2007  setenv/putenv/etc iz tradicionnyh BSD v     
                                  POSIX.                                      
   700051          4 iyulya 2007  7.0-CURRENT posle dobavleniya novyh         
                                  sistemnyh vyzovov mmap/lseek/etc.           
   700052          6 iyulya 2007  7.0-CURRENT posle peremescheniya zagolovkov 
                                  I4B v include/i4b.                          
   700053          30 sentyabrya  7.0-CURRENT posle dobavleniya podderzhki    
                   2007           dlya domenov PCI.                           
                   25 oktyabrya   7.0-CURRENT posle vypolneniya MFC           
   700054          2007           razdeleniya dvuhbajtovyh i odnobajtovyh     
                                  ctype.                                      
                                  7.0-RELEASE, i 7.0-CURRENT posle            
                                  vypolneniya MFC obratnoj sovmestimosti ABI  
   700055          28 oktyabrya   dlya IOCTL'ej PCIOCGETCONF, PCIOCREAD i     
                   2007           PCIOCWRITE s versiyami FreeBSD 4/5/6, chto  
                                  vyzvalo povtornuyu polomku ABI dlya         
                                  PCIOCGETCONF IOCTL                          
   700100          22 dekabrya    7.0-STABLE posle 7.0-RELEASE                
                   2007           
   700101          8 fevralya     7.0-STABLE posle vypolneniya MFC            
                   2008           m_collapse().                               
   700102          30 marta 2008  7.0-STABLE posle vypolneniya MFC            
                                  kdb_enter_why().                            
   700103          10 aprelya     7.0-STABLE posle dobavleniya l_sysid v      
                   2008           strukturu flock.                            
   700104          11 aprelya     7.0-STABLE posle vypolneniya MFC            
                   2008           procstat(1).                                
   700105          11 aprelya     7.0-STABLE posle vypolneniya MFC            
                   2008           vozmozhnostej umtx.                         
   700106          15 aprelya     7.0-STABLE posle vypolneniya MFC podderzhki 
                   2008           write(2) dlya psm(4).                       
   700107          20 aprelya     7.0-STABLE posle vypolneniya MFC komandy    
                   2008           F_DUP2FD dlya fcntl(2)                      
                                  7.0-STABLE posle nekotoryh izmenenij v      
   700108          5 maya 2008    lockmgr(9), kotorye dlya ispol'zovaniya     
                                  lockmgr(9) trebuyut podklyucheniya          
                                  sys/lock.h.                                 
   700109          27 maya 2008   7.0-STABLE posle vypolneniya MFC funkcii    
                                  memrchr.                                    
   700110          5 avgusta 2008 7.0-STABLE posle vypolneniya MFC            
                                  NFS-klienta lockd.                          
   700111          20 avgusta     7.0-STABLE posle dobavleniya podderzhki     
                   2008           fizicheski protyazhennyh jumbo-frejmov.     
   700112          27 avgusta     7.0-STABLE posle vypolneniya MFC podderzhki 
                   2008           DTrace v yadre.                             
   701000          25 noyabrya    7.1-RELEASE                                 
                   2008           
   701100          25 noyabrya    7.1-STABLE posle 7.1-RELEASE.               
                   2008           
   701101          10 yanvarya    7.1-STABLE posle bekporta strndup.          
                   2009           
   701102          17 yanvarya    7.1-STABLE posle dobavleniya podderzhki     
                   2009           cpuctl(4).                                  
   701103          7 fevralya     7.1-STABLE posle bekporta jail s            
                   2009           neskol'kimi IP / bez ukazaniya IP / s IPv6. 
                                  7.1-STABLE posle sohraneniya vladel'ca      
   701104          14 fevralya    priostanovki v strukture mount i            
                   2009           poyavleniya metoda vfs_susp_clean v         
                                  strukture vfsops.                           
                                  7.1-STABLE posle nesovmestimyh izmenenij v  
                                  sysctl kern.ipc.shmsegs dlya vozmozhnosti   
   701105          12 marta 2009  vydeleniya segmentov razdelyaemoj pamyati   
                                  SysV bol'shego razmera na 64-bitnyh         
                                  arhitekturah.                               
   701106          14 marta 2009  7.1-STABLE posle bekporta ispravleniya      
                                  operacij ozhidaniya dlya semaforov POSIX.   
   702000          15 aprelya     7.2-RELEASE                                 
                   2009           
   702100          15 aprelya     7.2-STABLE posle 7.2-RELEASE.               
                   2009           
                                  7.2-STABLE posle izmeneniya ichsmb(4) dlya  
   702101          15 maya 2009   ispol'zovaniya vspomogatel'noj adresacii s  
                                  vyravnivaniem po levoj storone, kak i v     
                                  drugih drajverah kontrollera SMBus.         
   702102          28 maya 2009   7.2-STABLE posle vypolneniya MFC funkcii    
                                  fdopendir.                                  
   702103          6 iyunya 2009  7.2-STABLE posle vypolneniya MFC PmcTools.  
   702104          14 iyulya 2009 7.2-STABLE posle vypolneniya MFC sistemnogo 
                                  vyzova closefrom.                           
   702105          31 iyulya 2009 7.2-STABLE posle vypolneniya MFC izmeneniya 
                                  ABI dlya SYSVIPC.                           
                                  7.2-STABLE posle vypolneniya MFC            
   702106          14 sentyabrya  uluchshenij v x86 PAT i dobavleniya         
                   2009           d_mmap_single() i ob"ekta VM tipa "spisok   
                                  scatter/gather".                            
   703000          9 fevralya     7.3-RELEASE                                 
                   2010           
   703100          9 fevralya     7.3-STABLE posle 7.3-RELEASE.               
                   2010           
   704000          22 dekabrya    7.4-RELEASE                                 
                   2010           
   704100          22 dekabrya    7.4-STABLE posle 7.4-RELEASE.               
                   2010           
   800000          11 oktyabrya   8.0-CURRENT. Razdelenie dvuhbajtovyh i      
                   2007           odnobajtovyh ctype.                         
   800001          16 oktyabrya   8.0-CURRENT posle importa libpcap 0.9.8 i   
                   2007           tcpdump 3.9.8.                              
                   21 oktyabrya   8.0-CURRENT posle pereimenovaniya           
   800002          2007           kthread_create() i soputstvuyuschih funkcij 
                                  v kproc_create() i t.d.                     
                                  8.0-CURRENT posle dobavleniya obratnoj      
                                  sovmestimosti ABI dlya IOCTL'ej             
   800003          24 oktyabrya   PCIOCGETCONF, PCIOCREAD i PCIOCWRITE s      
                   2007           versiyami FreeBSD 4/5/6, chto vyzvalo       
                                  povtornuyu polomku ABI dlya PCIOCGETCONF    
                                  IOCTL                                       
   800004          12 noyabrya    8.0-CURRENT posle peremescheniya drajvera   
                   2007           agp(4) iz src/sys/pci v src/sys/dev/agp     
   800005          4 dekabrya     8.0-CURRENT posle izmenenij v               
                   2007           raspredelitele jumbo-frejmov (rev. 174247). 
                   7 dekabrya     8.0-CURRENT posle dobavleniya               
   800006          2007           funkcional'nosti zahvata grafa vyzovov v    
                                  hwpmc(4).                                   
   800007          25 dekabrya    8.0-CURRENT posle togo, kak kdb_enter()     
                   2007           poluchila parametr "why".                   
   800008          28 dekabrya    8.0-CURRENT posle udaleniya opcii           
                   2007           LK_EXCLUPGRADE.                             
   800009          9 yanvarya     8.0-CURRENT posle poyavleniya               
                   2008           lockmgr_disown(9)                           
   800010          10 yanvarya    8.0-CURRENT posle izmeneniya prototipa      
                   2008           vn_lock(9).                                 
   800011          13 yanvarya    8.0-CURRENT posle izmeneniya prototipov     
                   2008           VOP_LOCK(9) i VOP_UNLOCK(9).                
                   19 yanvarya    8.0-CURRENT posle poyavleniya               
   800012          2008           lockmgr_recursed(9), BUF_RECURSED(9) i      
                                  BUF_ISLOCKED(9) i udaleniya BUF_REFCNT().   
   800013          23 yanvarya    8.0-CURRENT posle poyavleniya kodirovki     
                   2008           <<ASCII>>.                                  
                   24 yanvarya    8.0-CURRENT posle izmeneniya prototipa      
   800014          2008           lockmgr(9) i udaleniya lockcount() i        
                                  LOCKMGR_ASSERT().                           
   800015          26 yanvarya    8.0-CURRENT posle rasshireniya tipov dlya   
                   2008           struktur fts(3).                            
   800016          1 fevralya     8.0-CURRENT posle dobavleniya parametra     
                   2008           MEXTADD(9)                                  
                   6 fevralya     8.0-CURRENT posle poyavleniya opcij         
   800017          2008           LK_NODUP i LK_NOWITNESS v prostranstve      
                                  lockmgr(9).                                 
   800018          8 fevralya     8.0-CURRENT posle dobavleniya m_collapse.   
                   2008           
                                  8.0-CURRENT posle dobavleniya podderzhki    
   800019          9 fevralya     tekuschego rabochego kataloga, kornevogo    
                   2008           kataloga i katalogov jail v sysctl          
                                  kern.proc.filedesc.                         
   800020          13 fevralya    8.0-CURRENT posle poyavleniya funkcij       
                   2008           lockmgr_assert(9) i BUF_ASSERT.             
                   15 fevralya    8.0-CURRENT posle poyavleniya               
   800021          2008           lockmgr_args(9) i udaleniya flaga           
                                  LK_INTERNAL.                                
   800022          (otmeneno)     8.0-CURRENT posle zameny ispol'zuemogo po   
                                  umolchaniyu ar na BSD ar(1).                
                   25 fevralya    8.0-CURRENT posle izmeneniya prototipov     
   800023          2008           lockstatus(9) i VOP_ISLOCKED(9), a imenno   
                                  udaleniya argumenta struct thread.          
                                  8.0-CURRENT posle sokrascheniya funkcij     
                                  lockwaiters i BUF_LOCKWAITERS, izmeneniya   
   800024          1 marta 2008   vozvraschaemogo znacheniya dlya brelvp s    
                                  void i int i poyavleniya novyh flagov dlya  
                                  lockinit(9).                                
   800025          8 marta 2008   8.0-CURRENT posle dobavleniya v fcntl(2)    
                                  komandy F_DUP2FD.                           
                                  8.0-CURRENT posle izmeneniya parametra      
   800026          12 marta 2008  prioriteta dlya cv_broadcastpri tak, chto 0 
                                  oznachaet otsutstvie prioriteta.            
                                  8.0-CURRENT posle izmeneniya API            
   800027          24 marta 2008  monitoringa bpf, kogda byli dobavleny       
                                  bufery zerocopy bpf.                        
   800028          26 marta 2008  8.0-CURRENT posle dobavleniya l_sysid v     
                                  strukturu flock.                            
                                  8.0-CURRENT posle reintegracii funkcii      
   800029          28 marta 2008  BUF_LOCKWAITERS i dobavleniya               
                                  lockmgr_waiters(9).                         
   800030          1 aprelya 2008 8.0-CURRENT posle poyavleniya funkcij       
                                  rw_try_rlock(9) i rw_try_wlock(9).          
   800031          6 aprelya 2008 8.0-CURRENT posle poyavleniya funkcij       
                                  lockmgr_rw i lockmgr_args_rw.               
                                  8.0-CURRENT posle realizacii openat i       
                                  svyazannyh s nim sistemnyh vyzovov,         
   800032          8 aprelya 2008 poyavleniya flaga O_EXEC dlya open(2) i     
                                  obespecheniya sootvetstvuyuschih sistemnyh  
                                  vyzovov dlya linux-sovmestimosti.           
                                  8.0-CURRENT posle dobavleniya podderzhki    
                                  write(2) dlya psm(4) v nativnom             
   800033          8 aprelya 2008 operacionnom rezhime. Teper' v /dev/psm%d   
                                  mozhno zapisyvat' proizvol'nye komandy i    
                                  schityvat' iz nego obratno sostoyanie.      
   800034          10 aprelya     8.0-CURRENT posle poyavleniya funkcii       
                   2008           memrchr.                                    
   800035          16 aprelya     8.0-CURRENT posle poyavleniya funkcii       
                   2008           fdopendir.                                  
                   20 aprelya     8.0-CURRENT posle pereklyucheniya           
   800036          2008           besprovodnoj svyazi 802.11 na podderzhku    
                                  multi-bss (takzhe izvestnogo kak vaps).     
                                  8.0-CURRENT posle dobavleniya podderzhki    
   800037          9 maya 2008    mul'ti-routingovyh tablic (takzhe izvestnyh 
                                  kak setfib(1), setfib(2)).                  
                                  8.0-CURRENT posle udaleniya netatm i        
   800038          26 maya 2008   ISDN4BSD. Takzhe, dobavlenie                
                                  instrumentariya Compact C Type (CTF).       
   800039          14 iyunya 2008 8.0-CURRENT posle udaleniya sgtty.          
   800040          26 iyunya 2008 8.0-CURRENT klientom NFS lockd v yadre.     
   800041          22 iyulya 2008 8.0-CURRENT posle dobavleniya               
                                  arc4random_buf(3) i arc4random_uniform(3).  
   800042          8 avgusta 2008 8.0-CURRENT posle dobavleniya cpuctl(4).    
                   13 avgusta     8.0-CURRENT posle izmeneniya v bpf(4) dlya  
   800043          2008           ispol'zovaniya edinstvennogo uzla           
                                  ustrojstva vmesto klonirovaniya ustrojstv.  
                                  8.0-CURRENT posle kommita pervyh shagov     
                   17 avgusta     proekta vimage s pereimenovaniem global'nyh 
   800044          2008           peremennyh dlya ih virtualizacii v makrosy  
                                  s prefiksom V_ dlya ih otobrazheniya        
                                  obratno na global'nye imena.                
                                  8.0-CURRENT posle integracii proslojki      
   800045          20 avgusta     MPSAFE TTY, vklyuchayuschej izmeneniya v    
                   2008           razlichnyh, vzaimodejstvuyuschih s nej      
                                  drajverah i utilitah.                       
   800046          8 sentyabrya   8.0-CURRENT posle razdeleniya GDT dlya      
                   2008           kazhdogo CPU v arhitekture amd64.           
   800047          10 sentyabrya  8.0-CURRENT posle udaleniya VSVTX, VSGID i  
                   2008           VSUID.                                      
                                  8.0-CURRENT posle preobrazovaniya koda      
                   16 sentyabrya  montirovaniya NFS v yadre dlya prinyatiya   
   800048          2008           individual'nyh opcij montirovaniya v iovec  
                                  nmount(), a ne tol'ko v odnoj bol'shoj      
                                  strukture nfs_args.                         
   800049          17 sentyabrya  8.0-CURRENT posle udaleniya suser(9) i      
                   2008           suser_cred(9).                              
   800050          20 oktyabrya   8.0-CURRENT posle izmeneniya v API kesha    
                   2008           buferov.                                    
   800051          23 oktyabrya   8.0-CURRENT posle udaleniya makrosov        
                   2008           MALLOC(9) i FREE(9).                        
                   28 oktyabrya   8.0-CURRENT posle poyavleniya accmode_t i   
   800052          2008           pereimenovaniya parametra VOP_ACCESS        
                                  'a_mode' v 'a_accmode'.                     
                   2 noyabrya     8.0-CURRENT posle izmeneniya prototipa      
   800053          2008           vfs_busy(9) i poyavleniya ego flagov        
                                  MBF_NOWAIT i MBF_MNTLSTLOCK.                
                                  8.0-CURRENT posle dobavleniya buf_ring,     
                                  bar'erov pamyati i funkcij ifnet dlya       
                                  mnozhestvennyh apparatnyh ocheredej         
   800054          22 noyabrya    peredachi dlya podderzhivayuschih `eto      
                   2008           kart, a takzhe realizacii ring-buffer bez   
                                  ispol'zovaniya sinhronizacii dlya bolee     
                                  `effektivnogo upravleniya ocheredyami       
                                  paketov v drajverah.                        
   800055          27 noyabrya    8.0-CURRENT posle dobavleniya podderzhki    
                   2008           hwpmc(4) dlya Intel(TM) Core, Core2 i Atom. 
   800056          29 noyabrya    8.0-CURRENT posle poyavleniya jail s        
                   2008           neskol'kimi IP / bez ukazaniya IP / s IPv6. 
   800057          1 dekabrya     8.0-CURRENT posle pereklyucheniya na        
                   2008           ispol'zovanie ishodnogo koda ath hal.       
   800058          12 dekabrya    8.0-CURRENT posle poyavleniya operacii      
                   2008           VOP_VPTOCNP.                                
   800059          15 dekabrya    8.0-CURRENT vklyuchaet v sebya novyj        
                   2008           perepisannyj arp-v2.                        
   800060          19 dekabrya    8.0-CURRENT posle dobavleniya makefs.       
                   2008           
   800061          15 yanvarya    8.0-CURRENT posle TCP Appropriate Byte      
                   2009           Counting.                                   
   800062          28 yanvarya    8.0-CURRENT posle udaleniya minor(),        
                   2009           minor2unit(), unit2minor(), i t.d.          
                   18 fevralya    8.0-CURRENT posle izmeneniya konfiga        
   800063          2009           GENERIC dlya ispol'zovaniya steka USB2, a   
                                  takzhe posle dobavleniya fdevname(3).       
   800064          23 fevralya    8.0-CURRENT posle togo, kak peremeschen     
                   2009           stek USB2, i on zamenyaet dev/usb.          
   800065          26 fevralya    8.0-CURRENT posle pereimenovaniya vseh      
                   2009           funkcij v libmp(3).                         
   800066          27 fevralya    8.0-CURRENT posle izmeneniya upravleniya i  
                   2009           raskladki USB v devfs.                      
                   28 fevralya    8.0-CURRENT posle dobavleniya getdelim(),   
   800067          2009           getline(), stpncpy(), strnlen(), wcsnlen(), 
                                  wcscasecmp() i wcsncasecmp().               
   800068          2 marta 2009   8.0-CURRENT posle pereimenovaniya devclass  
                                  ushub v uhub.                               
   800069          9 marta 2009   8.0-CURRENT posle pereimenovaniya           
                                  libusb20.so.1 v libusb.so.1.                
                                  8.0-CURRENT posle ob"edineniya IGMPv3 i     
   800070          9 marta 2009   Source-Specific Multicast (SSM) v stek      
                                  IPv4.                                       
                                  8.0-CURRENT posle primeneniya patcha k gcc  
   800071          14 marta 2009  dlya ispol'zovaniya inline-semantiki C99 v  
                                  rezhime c99 i gnu99.                        
                                  8.0-CURRENT posle udaleniya flaga           
   800072          15 marta 2009  IFF_NEEDSGIANT; setevye ne-MPSAFE drajvera  
                                  ustrojstv bolee ne podderzhivayutsya.       
                                  8.0-CURRENT posle realizacii dinamicheskogo 
   800073          18 marta 2009  zamescheniya strokovyh tokenov dlya rpath i 
                                  neobhodimyh putej.                          
   800074          24 marta 2009  8.0-CURRENT posle importa tcpdump 4.0.0 i   
                                  libpcap 1.0.0.                              
   800075          6 aprelya 2009 8.0-CURRENT posle izmeneniya raskladki v    
                                  strukturah vnet_net, vnet_inet i vnet_ipfw. 
   800076          9 aprelya 2009 8.0-CURRENT posle dobavleniya profilej      
                                  zaderzhki v dummynet.                       
   800077          14 aprelya     8.0-CURRENT posle udaleniya VOP_LEASE() i   
                   2009           vop_vector.vop_lease.                       
                                  8.0-CURRENT posle dobavleniya polej         
                                  struktury rt_weight v struktury rt_metrics  
   800078          15 aprelya     i rt_metrics_lite, izmeneniya raskladki     
                   2009           struktury rt_metrics_lite. Sdelano, no      
                                  zatem otmeneno uvelichenie nomera versii    
                                  RTM_VERSION.                                
                   15 aprelya     8.0-CURRENT posle dobavleniya ukazatelej na 
   800079          2009           strukturu llentry v struktury route i       
                                  route_in6.                                  
   800080          15 aprelya     8.0-CURRENT posle izmeneniya raskladki      
                   2009           struktury inpcb.                            
   800081          19 aprelya     8.0-CURRENT posle izmeneniya raskladki      
                   2009           struktury malloc_type.                      
                   21 aprelya     8.0-CURRENT posle izmeneniya raskladki      
   800082          2009           struktury ifnet i podscheta ssylok na ifnet 
                                  v if_ref() i if_rele().                     
   800083          22 aprelya     8.0-CURRENT posle realizacii nizkourovnego  
                   2009           API Bluetooth HCI.                          
   800084          29 aprelya     8.0-CURRENT izmenenij v IPv6 SSM i MLDv2.   
                   2009           
                   30 aprelya     8.0-CURRENT posle vklyucheniya podderzhki   
   800085          2009           sborki yadra VIMAGE s odnim aktivnym        
                                  obrazom.                                    
   800086          8 maya 2009    8.0-CURRENT posle dobavleniya v patch(1)    
                                  podderzhki strok vvoda proizvol'noj dliny.  
                                  8.0-CURRENT posle nekotoryh izmenenij v KPI 
                                  VFS. Parametr potoka udalen iz chastej FSD  
   800087          11 maya 2009   v VFS. Funkciyam VFS_* `etot kontekst       
                                  bol'she ne nuzhen, potomu chto on vsegda    
                                  ssylaetsya na curthread. V nekotoryh osobyh 
                                  sluchayah ostavleno prezhnee povedenie.     
   800088          20 maya 2009   8.0-CURRENT posle izmenenij v rezhime       
                                  net80211 monitor.                           
   800089          23 maya 2009   8.0-CURRENT posle dobavleniya podderzhki    
                                  upravlyayuschego bloka UDP.                 
   800090          23 maya 2009   8.0-CURRENT posle klonirovaniya             
                                  virtualizovannyh interfejsov.               
                                  8.0-CURRENT posle dobavleniya               
   800091          27 maya 2009   ierarhicheskih jail i udaleniya global'nogo 
                                  securelevel.                                
                                  8.0-CURRENT posle izmeneniya KPI dlya       
                                  sx_init_flags(). Dlya obratnogo             
   800092          29 maya 2009   logicheskogo upravleniya vmesto ubrannoj    
                                  SX_ADAPTIVESPIN predstavlena novaya         
                                  SX_NOADAPTIVE.                              
   800093          29 maya 2009   8.0-CURRENT posle dobavleniya mnt_xflag v   
                                  strukturu mount.                            
   800094          30 maya 2009   8.0-CURRENT posle dobavleniya               
                                  VOP_ACCESSX(9).                             
                                  8.0-CURRENT posle izmeneniya KPI polling.   
                                  Obrabotchiki polling teper' vozvraschayut   
                                  kolichestvo obrabotannyh paketov. Takzhe    
   800095          30 maya 2009   predstavlena novaya IFCAP_POLLING_NOCOUNT   
                                  dlya ukazaniya na nevazhnost'               
                                  vozvraschaemogo znacheniya i propuska       
                                  schetchikov.                                
                                  8.0-CURRENT posle obnovleniya do novoj      
   800096          1 iyunya 2009  realizacii netisr i posle izmeneniya        
                                  sposoba hraneniya i dostupa k FIB.          
   800097          8 iyunya 2009  8.0-CURRENT posle poyavleniya hukov dlya    
                                  destruktorov i infrastruktury vnet.         
                                  8.0-CURRENT posle poyavleniya obnaruzheniya 
                                  puti vyzovov ot ishodyaschego na            
   800097          11 iyunya 2009 vhodyaschij dlya netgraph i postanovleniya  
                                  v ochered', chto takzhe izmenyaet raskladku 
                                  struktury thread.                           
   800098          14 iyunya 2009 8.0-CURRENT posle importa OpenSSL 0.9.8k.   
                                  8.0-CURRENT posle obnovleniya NGROUPS i     
   800099          22 iyunya 2009 peremescheniya virtualizacii marshrutov v   
                                  svoj sobstvennyj modul' VImage.             
   800100          24 iyunya 2009 8.0-CURRENT posle izmeneniya ABI dlya       
                                  SYSVIPC.                                    
                                  8.0-CURRENT posle udaleniya simvol'nyh      
   800101          29 iyunya 2009 ustrojstv /dev/net/*, ispol'zuemyh otdel'no 
                                  dlya kazhdogo interfejsa.                   
                                  8.0-CURRENT posle dobavleniya rezervnyh     
   800102          12 iyulya 2009 polej v strukturah sackhint, tcpcb i        
                                  tcpstat.                                    
                                  8.0-CURRENT posle zameny struktury tcpopt   
   800103          13 iyulya 2009 na strukturu toeopt v interfejse drajvera   
                                  TOE v TCP syncache.                         
                                  8.0-CURRENT posle dobavleniya               
   800104          14 iyulya 2009 raspredelitelya, individual'nogo dlya       
                                  kazhdogo vnet, na osnove svyazannogo        
                                  mnozhestva.                                 
                                  8.0-CURRENT posle uvelicheniya nomera       
   800105          19 iyulya 2009 versii dlya vseh dinamicheskih bibliotek,   
                                  dlya kotoryh ne vklyucheno simvol'noe       
                                  versionirovanie.                            
   800106          24 iyulya 2009 8.0-CURRENT posle poyavleniya tipa ob"ekta  
                                  VM OBJT_SG.                                 
                                  8.0-CURRENT posle osvobozhdeniya podsistemy 
   800107          2 avgusta 2009 newbus ot Giant cherez dobavlenie newbus    
                                  sxlock.                                     
   800108          21 noyabrya    8.0-STABLE posle realizacii kevent-fil'tra  
                   2009           EVFILT_USER.                                
                   7 yanvarya     8.0-STABLE posle uvelicheniya nomera        
   800500          2010           __FreeBSD_version dlya ispol'zovaniya v     
                                  pkg_add -r packages-8-stable.               
                   24 yanvarya    8.0-STABLE posle izmeneniya prototipov      
   800501          2010           scandir(3) i alphasort(3) dlya              
                                  sootvetstviya SUSv4.                        
   800502          31 yanvarya    8.0-STABLE posle dobavleniya sigpause(3).   
                   2010           
                                  8.0-STABLE posle dobavleniya ioctl          
   800503          25 fevralya    SIOCGIFDESCR i SIOCSIFDESCR k setevym       
                   2010           interfejsam. `Eti ioctl mozhno ispol'zovat' 
                                  dlya opisaniya interfejsov v duhe OpenBSD.  
                                  8.0-STABLE posle vypolneniya MFC importa    
   800504          1 marta 2010   x86emu iz OpenBSD, programmnogo `emulyatora 
                                  real'nogo rezhima dlya CPU x86.             
   800505          18 maya 2010   8.0-STABLE posle vypolneniya MFC            
                                  dobavleniya liblzma, xz, xzdec, i lzmainfo. 
   801000          14 iyunya 2010 8.1-RELEASE                                 
   801500          14 iyunya 2010 8.1-STABLE posle 8.1-RELEASE.               
                                  8.1-STABLE posle izmeneniya KBI v strukture 
   801501          3 noyabrya     sysentvec i realizacii                      
                   2010           PL_FLAG_SCE/SCX/EXEC/SI i pl_siginfo dlya   
                                  ptrace(PT_LWPINFO).                         
   802000          22 dekabrya    8.2-RELEASE                                 
                   2010           
   802500          22 dekabrya    8.2-STABLE posle 8.2-RELEASE.               
                   2010           
                                  8.2-STABLE posle obratnogo portirovaniya    
   802501          28 fevralya    izmenenij DTrace, vklyuchayuschih           
                   2011           podderzhku trassirovki pol'zovatel'skih     
                                  programm.                                   
   802502          6 marta 2011   8.2-STABLE posle obratnogo portirovaniya    
                                  log2 i log2f v libm.                        
                                  8.2-STABLE posle obnovleniya gcc do         
   802503          1 maya 2011    poslednej versii s licenziej GPLv2 iz FSF   
                                  gcc-4_2-branch.                             
                                  8.2-STABLE posle poyavleniya KPI i          
   802504          28 maya 2011   vspomogatel'noj infrastruktury modul'nogo   
                                  kontrolya peregruzki.                       
   802505          28 maya 2011   8.2-STABLE posle poyavleniya KPI Hhook i    
                                  Khelp.                                      
   802506          28 maya 2011   8.2-STABLE posle dobavleniya OSD v          
                                  strukturu tcpcb.                            
   802507          6 iyunya 2011  8.2-STABLE posle importa ZFS v28.           
                                  8.2-STABLE posle udaleniya obrabotchika     
   802508          8 iyunya 2011  sobytij schedtail i dobavleniya metoda      
                                  sv_schedtail v strukturu sysvec.            
   802509          14 iyulya 2011 8.2-STABLE posle obratnogo portirovaniya    
                                  podderzhki SSSE3 v binutils.                
   802510          19 iyulya 2011 8.2-STABLE posle dobavleniya flaga          
                                  RFTSIGZMB v rfork(2).                       
                                  8.2-STABLE posle dobavleniya                
   802511          9 sentyabrya   avtomaticheskogo raspoznavaniya ustrojstv   
                   2011           USB mass storage, kotorye ne podderzhivayut 
                                  komandu SCSI no synchronize cache.          
   802512          10 sentyabrya  8.2-STABLE posle obratnogo portirovaniya    
                   2011           pererabotannogo auto-quirk.                 
   802513          25 oktyabrya   8.2-STABLE posle obratnogo portirovaniya    
                   2011           flaga MAP_PREFAULT_READ v mmap(2).          
   802514          16 noyabrya    8.2-STABLE posle obratnogo portirovaniya    
                   2011           sistemnogo vyzova posix_fallocate(2).       
   802515          6 yanvarya     8.2-STABLE posle obratnogo portirovaniya    
                   2012           sistemnogo vyzova posix_fadvise(2).         
   802516          16 yanvarya    8.2-STABLE posle obratnogo portirovaniya    
                   2012           gperf 3.0.3.                                
                                  8.2-STABLE posle poyavleniya novogo         
   802517          15 fevralya    rasshiryaemogo interfejsa sysctl(3)         
                   2012           NET_RT_IFLISTL dlya polucheniya spiska      
                                  adresov (rev. 231769).                      
   803000          3 marta 2012   8.3-RELEASE.                                
   803500          3 marta 2012   8.3-STABLE posle otdeleniya vetki           
                                  releng/8.3 (RELENG_8_3).                    
   804000          28 marta 2013  8.4-RELEASE.                                
   804500          28 marta 2013  8.4-STABLE posle 8.4-RELEASE.               
   900000          22 avgusta     9.0-CURRENT.                                
                   2009           
                   8 sentyabrya   9.0-CURRENT posle importa x86emu iz         
   900001          2009           OpenBSD, programmnogo `emulyatora real'nogo 
                                  rezhima dlya CPU x86.                       
                   23 sentyabrya  9.0-CURRENT posle realizacii                
   900002          2009           funkcional'nosti kevent-fil'tra             
                                  EVFILT_USER.                                
   900003          2 dekabrya     9.0-CURRENT posle dobavleniya sigpause(3) i 
                   2009           podderzhki PIE v csu.                       
   900004          6 dekabrya     9.0-CURRENT posle dobavleniya libulog i ego 
                   2009           interfejsa sovmestimosti libutempter.       
                                  9.0-CURRENT posle dobavleniya               
                   12 dekabrya    sleepq_sleepcnt(), kotoruyu mozhno          
   900005          2009           ispol'zovat' dlya zaprosa kolichestva       
                                  ozhidayuschih v ukazannoj ocheredi          
                                  ozhidaniya.                                 
                   4 yanvarya     9.0-CURRENT posle izmeneniya prototipov     
   900006          2010           scandir(3) i alphasort(3) dlya              
                                  sootvetstviya SUSv4.                        
                                  9.0-CURRENT posle udaleniya utmp(5) i       
                   13 yanvarya    dobavleniya utmpx (smotrite getutxent(3))   
   900007          2010           dlya uluchshennogo protokolirovaniya        
                                  pol'zovatel'skih vhodov i sistemnyh         
                                  sobytij.                                    
   900008          20 yanvarya    9.0-CURRENT posle importa BSDL bc/dc i      
                   2010           ob"yavleniya GNU bc/dc ustarevshimi.        
                                  9.0-CURRENT posle dobavleniya ioctl         
   900009          26 yanvarya    SIOCGIFDESCR i SIOCSIFDESCR k setevym       
                   2010           interfejsam. `Eti ioctl mozhno ispol'zovat' 
                                  dlya opisaniya interfejsov v duhe OpenBSD.  
   900010          22 marta 2010  9.0-CURRENT posle importa zlib 1.2.4.       
   900011          24 aprelya     9.0-CURRENT posle dobavleniya               
                   2010           zhurnalirovaniya myagkih obnovlenij.        
   900012          10 maya 2010   9.0-CURRENT posle dobavleniya liblzma, xz,  
                                  xzdec i lzmainfo.                           
   900013          14 maya 2010   9.0-CURRENT posle privlecheniya ispravlenij 
                                  USB v linux(4).                             
   900014          10 iyunya 2010 9.0-CURRENT posle dobavleniya Clang.        
   900015          22 iyulya 2010 9.0-CURRENT posle importa BSD grep.         
   900016          28 iyulya 2010 9.0-CURRENT posle dobavleniya mti_zone v    
                                  strukturu malloc_type_internal.             
                   23 avgusta     9.0-CURRENT posle izmeneniya grep po        
   900017          2010           umolchaniyu obratno na GNU grep i           
                                  dobavleniya knob WITH_BSD_GREP.             
                                  9.0-CURRENT posle togo, kak signal,         
   900018          24 avgusta     sgenerirovannyj v pthread_kill(3),          
                   2010           raspoznaetsya v si_code kak SI_LWP. Ranee   
                                  si_code soderzhal SI_USER.                  
   900019          28 avgusta     9.0-CURRENT posle dobavleniya v mmap(2)     
                   2010           flaga MAP_PREFAULT_READ.                    
                   9 sentyabrya   9.0-CURRENT posle dobavleniya v sbufs       
   900020          2010           funkcional'nosti osusheniya, chto takzhe    
                                  izmenilo raskladku v strukture sbuf.        
                   13 sentyabrya  9.0-CURRENT posle dobavleniya v DTrace      
   900021          2010           podderzhki trassirovki pol'zovatel'skih     
                                  processov.                                  
   900022          2 oktyabrya    9.0-CURRENT posle dobavleniya BSDL utilit   
                   2010           man i spisaniya GNU/GPL utilit man.         
   900023          11 oktyabrya   9.0-CURRENT posle obnovleniya xz do         
                   2010           snapshota git 20101010.                     
   900024          11 noyabrya    9.0-CURRENT posle zameny libgcc.a na        
                   2010           libcompiler_rt.a.                           
   900025          12 noyabrya    9.0-CURRENT posle poyavleniya modul'nogo    
                   2010           kontrolya peregruzki.                       
                                  9.0-CURRENT posle poyavleniya protokola     
                   30 noyabrya    dlya podderzhki rasshiritelej SAS (SMP,     
   900026          2010           Serial Management Protocol) i blokov        
                                  upravleniya (CCB) CAM XPT_SMP_IO i          
                                  XPT_GDEV_ADVINFO.                           
   900027          5 dekabrya     9.0-CURRENT posle dobavleniya log2 v libm.  
                   2010           
                   21 dekabrya    9.0-CURRENT posle dobavleniya KPI Hhook     
   900028          2010           (Helper Hook), Khelp (Kernel Helpers) i     
                                  Object Specific Data (OSD).                 
                                  9.0-CURRENT posle izmeneniya steka TCP dlya 
                   28 dekabrya    vzaimodejstviya s modulyami Khelp cherez    
   900029          2010           vspomogatel'nye tochki svyazi i hraneniya   
                                  dannyh urovnya setevogo soedineniya v       
                                  upravlyayuschem bloke TCP.                  
   900030          12 yanvarya    9.0-CURRENT posle obnovleniya libdialog do  
                   2011           versii 20100428.                            
   900031          7 fevralya     9.0-CURRENT posle dobavleniya               
                   2011           pthread_getthreadid_np(3).                  
   900032          8 fevralya     9.0-CURRENT posle udaleniya simvola i       
                   2011           prototipa uio_yield.                        
   900033          18 fevralya    9.0-CURRENT posle obnovleniya binutils do   
                   2011           versii 2.17.50.                             
   900034          8 marta 2011   9.0-CURRENT posle izmenenij v struct sysvec 
                                  (sv_schedtail).                             
                                  9.0-CURRENT posle obnovleniya bazovyh gcc i 
   900035          29 marta 2011  libstdc++ do poslednih revizij, vypolnennyh 
                                  pod licenziej GPLv2.                        
   900036          18 aprelya     9.0-CURRENT posle udaleniya libobjc i       
                   2011           podderzhki Objective-C iz bazovoj sistemy.  
                                  9.0-CURRENT posle importa biblioteki        
   900037          13 maya 2011   libprocstat(3) i utility fuser(1) v         
                                  bazovuyu sistemu.                           
   900038          22 maya 2011   9.0-CURRENT posle dobavleniya flaga s       
                                  parametrami blokirovki v VFS_FHTOVP(9).     
   900039          28 iyunya 2011 9.0-CURRENT posle importa pf iz OpenBSD     
                                  4.5.                                        
                                  Znachenie MAXCPU, ispol'zuemoe po           
   900040          19 iyulya 2011 umolchaniyu, uvelicheno do 64 na amd64 i    
                                  ia64, i do 128 dlya XLP (mips).             
                   13 avgusta     9.0-CURRENT posle realizacii Capsicum       
   900041          2011           capabilities; v fget(9) dobavlen argument   
                                  rights.                                     
                   28 avgusta     Uvelichen nomer versii dlya dinamicheskih   
   900042          2011           bibliotek, ABI kotoryh byl izmenen, v       
                                  ramkah podgotovki k 9.0.                    
                                  Dobavleno avtomaticheskoe raspoznavanie     
   900043          2 sentyabrya   ustrojstv USB mass storage, kotorye ne      
                   2011           podderzhivayut komandu SCSI no synchronize  
                                  cache.                                      
   900044          10 sentyabrya  Pererabotan mehanizm auto-quirk.            
                   2011           9.0-RELEASE                                 
   900045          2 yanvarya     9.0-CURRENT posle vypolneniya MFC           
                   2012           true/false iz 1000002.                      
   900500          2 yanvarya     9.0-STABLE.                                 
                   2012           
   900501          6 yanvarya     9.0-STABLE posle obratnogo portirovaniya    
                   2012           sistemnogo vyzova posix_fadvise(2).         
   900502          16 yanvarya    9.0-STABLE posle obratnogo portirovaniya    
                   2012           gperf 3.0.3.                                
                                  9.0-STABLE posle poyavleniya novogo         
   900503          15 fevralya    rasshiryaemogo interfejsa sysctl(3)         
                   2012           NET_RT_IFLISTL dlya polucheniya spiska      
                                  adresov (rev. 231768).                      
                                  9.0-STABLE posle izmeneniya mehanizma       
   900504          3 marta 2012   montirovaniya fajlovyh sistem v jail (rev.  
                                  232728).                                    
                                  9.0-STABLE posle poyavleniya novyh          
   900505          13 marta 2012  parametrov soketa tcp(4): TCP_KEEPINIT,     
                                  TCP_KEEPIDLE, TCP_KEEPINTVL i TCP_KEEPCNT   
                                  (rev. 232945).                              
                                  9.0-STABLE posle poyavleniya funkcii        
   900506          22 maya 2012   quick_exit i sootvetstvuyuschih izmenenij,  
                                  trebuemyh v C++11 (rev. 235786).            
   901000          5 avgusta 2012 9.1-RELEASE.                                
   901500          6 avgusta 2012 9.1-STABLE posle otdeleniya vetki           
                                  releng/9.1 (RELENG_9_1).                    
                                  9.1-STABLE posle dobavleniya LIST_PREV() v  
   901501          11 noyabrya    queue.h (rev. 242893) i izmenenij v KPI     
                   2012           posledovatel'nyh ustrojstv USB (rev.        
                                  240659).                                    
                                  9.1-STABLE posle dobavleniya                
                   28 noyabrya    dzhitter-bufera v obschij kod               
   901502          2012           posledovatel'nyh ustrojstv USB, chto        
                                  trebuet peresborki sootvetstvuyuschih       
                                  modulej.                                    
                                  9.1-STABLE posle izmenenij v strukture USB  
   901503          21 fevralya    drajvera, trebuyuschih peresborki vseh USB  
                   2013           modulej. Takzhe sluzhit indikatorom         
                                  nalichiya nmtree.                           
                                  9.1-STABLE posle dobavleniya v install      
   901504          15 marta 2013  parametrov -l, -M, -N i drugih, posle       
                                  dobavleniya v cat parametra -l.             
   901505          13 iyunya 2013 9.1-STABLE posle ispravlenij v              
                                  avtonastrojke ctfmerge (rev. 249243).       
   902001          3 avgusta 2013 Otdelenie vetki releng/9.2 ot stable/9      
                                  (rev. 253912).                              
   902501          August 2, 2013 9.2-STABLE posle sozdaniya vetki releng/9.2 
                                  (rev. 253913).                              
   1000000         26 sentyabrya  10.0-CURRENT.                               
                   2011           
   1000001         4 noyabrya     10-CURRENT posle dobavleniya sistemnogo     
                   2011           vyzova posix_fadvise(2).                    
                                  10-CURRENT posle opredeleniya bulevyh       
                   12 dekabrya    true/false v sys/types.h, znachenie         
   1000002         2011           sizeof(bool) moglo izmenit'sya (rev.        
                                  228444). 10-CURRENT posle poyavleniya       
                                  xlocale.h (rev. r227753).                   
                                  10-CURRENT posle krupnyh izmenenij v        
                   15 dekabrya    carp(4), izmeneniya razmera struktur        
   1000003         2011           in_aliasreq, in6_aliasreq (rev. 228571) i   
                                  bolee strogih proverok parametrov           
                                  SIOCAIFADDR (rev 228574).                   
   1000004         1 yanvarya     10-CURRENT posle udaleniya skpc(9) i        
                   2012           dobavleniya memcchr(9) (rev. 229200).       
                                  10-CURRENT posle udaleniya podderzhki ioctl 
   1000005         16 yanvarya    SIOCSIFADDR, SIOCSIFNETMASK,                
                   2012           SIOCSIFBRDADDR, SIOCSIFDSTADDR (rev.        
                                  230207).                                    
                   26 yanvarya    10-CURRENT posle poyavleniya asinhronnyh    
   1000006         2012           uvedomlenij o nalichii vhodnyh dannyh v     
                                  urovne cam(4) (rev. 230590).                
                                  10-CURRENT posle poyavleniya novyh          
   1000007         5 fevralya     parametrov soketa tcp(4): TCP_KEEPINIT,     
                   2012           TCP_KEEPIDLE, TCP_KEEPINTVL i TCP_KEEPCNT   
                                  (rev. 231025).                              
                                  10-CURRENT posle poyavleniya novogo         
   1000008         11 fevralya    rasshiryaemogo interfejsa sysctl(3)         
                   2012           NET_RT_IFLISTL dlya polucheniya spiska      
                                  adresov (rev. 231505).                      
   1000009         25 fevralya    10-CURRENT posle importa libarchive 3.0.3   
                   2012           (rev. 232153).                              
   1000010         31 marta 2012  10-CURRENT posle ispravlenij v xlocale      
                                  (rev. 233757).                              
   1000011         16 aprelya     10-CURRENT posle importa LLVM/Clang 3.1     
                   2012           trunk r154661 (rev. 234353).                
   1000012         2 maya 2012    10-CURRENT posle importa jemalloc (rev.     
                                  234924).                                    
   1000013         22 maya 2012   10-CURRENT posle importa byacc (rev.        
                                  235788).                                    
   1000014         27 iyunya 2012 10-CURRENT posle izmeneniya sort po         
                                  umolchaniyu na BSD sort (rev. 237629).      
   1000015         12 iyulya 2012 10-CURRENT posle importa OpenSSL 1.0.1c     
                                  (rev. 238405).                              
   (ne izmeneno)   13 iyulya 2012 10-CURRENT posle ispravleniya regressii v   
                                  LLVM/Clang 3.1 (rev. 238429).               
   1000016         8 avgusta 2012 10-CURRENT posle izmeneniya KBI v ucom(4)   
                                  (rev. 239179).                              
                                  10-CURRENT posle dobavleniya                
   1000017         8 avgusta 2012 funkcional'nosti streams v USB-stek (rev.   
                                  239214).                                    
   1000018         8 sentyabrya   10-CURRENT posle znachital'nogo             
                   2012           perepisyvaniya pf(4) (rev. 240233).         
                                  10-CURRENT posle izmenenij KPI/KBI v        
   1000019         6 oktyabrya    pfil(9) dlya peredachi paketov v setevom    
                   2012           poryadke bajtov v fil'tr-lovushki AF_INET   
                                  (rev. 241245).                              
                                  10-CURRENT posle izmeneniya KPI             
   1000020         16 oktyabrya   klonirovaniya setevyh interfejsov;          
                   2012           struktura if_clone stanovitsya              
                                  neprozrachnoj (rev. 241610).                
                                  10-CURRENT posle udaleniya podderzhki       
   1000021         22 oktyabrya   fajlovyh sistem, ne yavlyayuschihsya        
                   2012           MPSAFE, i dobavleniya podderzhki FUSEFS     
                                  (rev. 241519, 241897).                      
                                  10-CURRENT posle pereklyucheniya vsego      
   1000022         22 oktyabrya   steka IPv4 na hranenie zagolovkov           
                   2012           IP-paketov v setevom poryadke bajtov (rev.  
                                  241913).                                    
                                  10-CURRENT posle dobavleniya                
                                  dzhitter-bufera v obschij kod drajverov     
                   5 noyabrya     posledovatel'nyh ustrojstv USB dlya         
   1000023         2012           vremennogo hraneniya simvolov pri           
                                  zapolnenii bufera TTY. Dobavleny signaly    
                                  start-stopnoj sinhronizacii pri             
                                  vozniknovenii `etoj situacii (rev. 242619). 
                   5 noyabrya     10-CURRENT posle pereklyucheniya            
   1000024         2012           kompilyatora po umolchaniyu na clang na     
                                  platformah i386 i amd64 (rev. 242624).      
                                  10-CURRENT posle togo kak znachenie         
                                  peremennoj sin6_scope_id v strukture        
                                  sockaddr_in6 stalo zapolnyat'sya sredstvami 
                                  yadra pered otpravkoj struktury v           
   1000025         17 noyabrya    pol'zovatel'skij rezhim posredstvom sysctl  
                   2012           ili soketa marshrutizacii. `Eto oznachaet,  
                                  chto specifichnyj dlya KAME embedded scope  
                                  id v sin6_addr.s6_addr[2] v                 
                                  pol'zovatel'skom prilozhenii vsegda         
                                  ochischaetsya (rev. 243443).                
                   11 yanvarya    10-CURRENT posle dobavleniya v install      
   1000026         2013           parametra -N (rev. 245313). Takzhe sluzhit  
                                  indikatorom nalichiya nmtree.               
   1000027         29 yanvarya    10-CURRENT posle dobavleniya v cat          
                   2013           parametra -l (rev. 246083).                 
                   13 fevralya    10-CURRENT posle izmenenij v strukture USB  
   1000028         2013           drajvera, trebuyuschih peresborki vseh USB  
                                  modulej (rev. 246759).                      
                                  10-CURRENT posle poyavleniya mehanizma      
   1000029         4 marta 2013   tickless callout, chto takzhe vneslo        
                                  izmeneniya v struct callout (rev. 247777).  
                                  10-CURRENT posle izmeneniya KPI v           
   1000030         12 marta 2013  podsisteme virtual'noj pamyati dlya         
                                  podderzhki blokirovok chteniya/zapisi (rev. 
                                  248084).                                    
                   26 aprelya     10-CURRENT posle polucheniya parametrom dst 
   1000031         2013           kvalifikatora const v metode ifnet          
                                  if_output (rev. 249925).                    
                                  10-CURRENT posle poyavleniya sistemnyh      
   1000032         1 maya 2013    vyzovov accept4 (rev. 250154) i pipe2 (rev. 
                                  250159).                                    
   1000033         21 maya 2013   10-CURRENT posle importa flex 2.5.37 (rev.  
                                  250881).                                    
                                  10-CURRENT posle dobavleniya v libm         
                                  sleduyuschih funkcij: cacos, cacosf,        
   1000034         3 iyunya 2013  cacosh, cacoshf, casin, casinf, casinh,     
                                  casinhf, catan, catanf, catanh, catanhf,    
                                  logl, log2l, log10l, log1pl, expm1l (rev.   
                                  251294).                                    
   1000035         8 iyunya 2013  10-CURRENT posle poyavleniya sistemnogo     
                                  vyzova aio_mlock (rev. 251526).             
                                  10-CURRENT posle dobavleniya novoj funkcii  
   1000036         9 iyulya 2013  v programmnyj interfejs modulya yadra       
                                  GSSAPI (rev. 253049).                       
                                  10-CURRENT posle perevoda struktur dlya     
                                  hraneniya statistiki na PCPU schiotchiki.   
                                  Izmeneniya v strukturah ahstat, arpstat,    
   1000037         9 iyulya 2013  espstat, icmp6_ifstat, icmp6stat,           
                                  in6_ifstat, ip6stat, ipcompstat, ipipstat,  
                                  ipsecstat, mrt6stat, mrtstat, pfkeystat,    
                                  pim6stat, pimstat, rip6stat, udpstat (rev.  
                                  253081).                                    
                                  10-CURRENT posle pereklyucheniya ABI,       
   1000038         16 iyulya 2013 ispol'zuemogo po umolchaniyu, na ARM EABI   
                                  dlya arhitektur arm, armeb, armv6, and      
                                  armv6eb (rev. 253396).                      
   1000039         22 iyulya 2013 10-CURRENT posle izmenenij v drajverah CAM  
                                  i mps(4) (rev. 253549).                     
   1000040         24 iyulya 2013 10-CURRENT posle dobavleniya fajlov pkgconf 
                                  v libusb (rev. 253638).                     
   1000041         5 avgusta 2013 10-CURRENT posle zameny time_second na      
                                  time_uptime dlya PF_INET6 (rev. 253970).    
                                  10-CURRENT posle izmeneniya v podsisteme    
   1000042         9 avgusta 2013 virtual'noj pamyati dlya unifikacii         
                                  mehanizmov myagkogo i zhiostkogo zahvata    
                                  (rev. 254138).                              
                                  10-CURRENT posle vklyucheniya WITH_ICONV po 
                                  umolchaniyu. Novyj parametr v src.conf(5)   
   1000043         13 avgusta     WITH_LIBICONV_COMPAT (po umolchaniyu        
                   2013           vyklyuchen) dobavlyaet libiconv_open dlya   
                                  obespecheniya sovmestimosti s portom        
                                  libiconv (rev. 254273).                     
                   15 avgusta     10-CURRENT posle perevoda libc.so na        
   1000044         2013           ispol'zovanie scenariya ld(1) (rev. 251668, 
                                  254358).                                    
                                  10-CURRENT posle izmeneniya v programmnom   
   1000045         15 avgusta     interfejse devfs dlya zameny flaga cdevsw   
                   2013           D_UNMAPPED_IO na flag struktury cdev        
                                  SI_UNMAPPED (rev. 254389).                  
                                  10-CURRENT posle dobavleniya flagov mbuf    
   1000046         19 avgusta     M_PROTO[9-12] i udaleniya flagov            
                   2013           M_FRAG|M_FIRSTFRAG|M_LASTFRAG (rev. 254524, 
                                  254526).                                    
                                  10-CURRENT posle obnovleniya stat(2),       
   1000047         21 avgusta     pozvolyayushego sohranyat' nekotorye        
                   2013           fajlovye atributy Windows/DOS i CIFS v      
                                  kachestve flagov stat(2) (rev. 254627).     
   1000048         22 avgusta     10-CURRENT posle izmeneniya struktury       
                   2013           xsctp_inpcb (rev. 254672).                  
                                  10-CURRENT posle poyavleniya podderzhki     
   1000049         24 avgusta     physio(9) dlya ustrojstv, takih kak sa(4),  
                   2013           kotorye ne funkcioniruyut korrektno s       
                                  razdeleniem vvoda/vyvoda (rev. 254760).     
                   24 avgusta     10-CURRENT posle izmeneniya struktury mbuf  
   1000050         2013           (rev. 254780, 254799, 254804, 254807        
                                  254842).                                    
   1000051         25 avgusta     10-CURRENT posle importa drajvera Radeon    
                   2013           KMS (rev. 254885, 254887).                  
                   3 sentyabrya   10-CURRENT posle podklyucheniya k sborke    
   1000052         2013           biblioteki libexecinfo, importirovannoj iz  
                                  NetBSD (rev. 255180).                       
   1000053         6 sentyabrya   10-CURRENT posle izmenenij v API i ABI      
                   2013           instrumentariya Capsicum (rev. 255305).     
                   6 sentyabrya   10-CURRENT posle isklyucheniya gcc i        
   1000054         2013           libstdc++ iz sborki po umolchaniyu (rev.    
                                  255321).                                    
   1000055         6 sentyabrya   10-CURRENT posle dobavleniya flaga          
                   2013           MMAP_32BIT v mmap(2) (rev. 255426).         
   1000500         10 oktyabrya   10-STABLE posle otdeleniya vetki ot head/   
                   2013           (rev. 256283).                              
   1100000         10 oktyabrya   11.0-CURRENT (rev. 256284).                 
                   2013           

  Primechanie:

   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.
