                Rukovodstvo FreeBSD po sozdaniyu portov

  The FreeBSD Documentation Project

   Copyright (c) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
   2008, 2009, 2010, 2011, 2012 The FreeBSD Documentation Project

   FreeBSD `eto zaregistrirovannaya torgovaya marka The FreeBSD
   Foundation.

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

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

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

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

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

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

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

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

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

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

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

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

   Soderzhanie

   1. Vvedenie

   2. Kak samomu sdelat' novyj port

   3. Bystroe portirovanie

                3.1. Sozdanie fajla Makefile

                3.2. Sozdanie informacionnyh fajlov

                             3.2.1. pkg-descr

                             3.2.2. pkg-plist

                3.3. Sozdanie fajla s kontrol'noj summoj

                3.4. Testirovanie porta

                3.5. Proverka vashego porta utilitoj portlint

                3.6. Posylka 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.2.1. PORTNAME i PORTVERSION

                             5.2.2. PORTREVISION i PORTEPOCH

                             5.2.3. Peremennye PKGNAMEPREFIX i
                             PKGNAMESUFFIX

                             5.2.4. LATEST_LINK

                             5.2.5. Soglasheniya po imenovaniyu
                             paketov

                5.3. Razdelenie po kategoriyam

                             5.3.1. CATEGORIES

                             5.3.2. Tekuschij spisok kategorij

                             5.3.3. Vybor pravil'noj kategorii

                             5.3.4. Predlozhenie novoj kategorii

                             5.3.5. Predlozhenie reorganizacii vseh
                             kategorij

                5.4. Distributivnye fajly

                             5.4.1. DISTVERSION/DISTNAME

                             5.4.2. MASTER_SITES

                             5.4.3. EXTRACT_SUFX

                             5.4.4. DISTFILES

                             5.4.5. EXTRACT_ONLY

                             5.4.6. PATCHFILES

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

                             5.4.8. DIST_SUBDIR

                             5.4.9. ALWAYS_KEEP_DISTFILES

                5.5. MAINTAINER

                5.6. COMMENT

                5.7. Zavisimosti

                             5.7.1. LIB_DEPENDS

                             5.7.2. RUN_DEPENDS

                             5.7.3. BUILD_DEPENDS

                             5.7.4. FETCH_DEPENDS

                             5.7.5. EXTRACT_DEPENDS

                             5.7.6. PATCH_DEPENDS

                             5.7.7. USE_*

                             5.7.8. Minimal'naya versiya zavisimosti

                             5.7.9. Zamechaniya kasatel'no
                             zavisimostej

                             5.7.10. Zaciklennye zavisimosti fatal'ny

                             5.7.11. Avtomaticheskie zavisimosti i
                             problemy, kotorye oni vyzyvayut

                             5.7.12. USE_ i WANT_

                5.8. MASTERDIR

                5.9. Stranicy Spravochnika

                5.10. Fajly v formate info

                5.11. Opcii dlya Makefile

                             5.11.1. Knobs

                             5.11.2. OPTIONS

                             5.11.3. Funkciya avtomaticheskoj
                             aktivacii

                5.12. Zadanie rabochego kataloga

                             5.12.1. WRKSRC

                             5.12.2. NO_WRKSUBDIR

                5.13. Razreshenie konfliktov

                             5.13.1. CONFLICTS_INSTALL

                             5.13.2. CONFLICTS_BUILD

                             5.13.3. CONFLICTS

                5.14. Ustanovka fajlov

                             5.14.1. Makrosy INSTALL_*

                             5.14.2. Udalenie otladochnoj informacii
                             v binarnyh fajlah i dinamicheskih
                             bibliotekah

                             5.14.3. Ustanovka celogo dereva fajlov

                             5.14.4. Ustanovka dopolnitel'noj
                             dokumentacii

                             5.14.5. Podkatalogi vnutri PREFIX

   6. Osobye soglasheniya

                6.1. Dinamicheskie biblioteki

                6.2. Porty s ogranicheniyami na rasprostranenie

                             6.2.1. NO_PACKAGE

                             6.2.2. NO_CDROM

                             6.2.3. NOFETCHFILES

                             6.2.4. RESTRICTED

                             6.2.5. RESTRICTED_FILES

                             6.2.6. Primery ispol'zovaniya

                6.3. Mehanizmy postroeniya

                             6.3.1. Parallel'noe postroenie portov

                             6.3.2. make, gmake i imake

                             6.3.3. Scenarij configure

                             6.3.4. Ispol'zovanie scons

                6.4. Ispol'zovanie GNU autotools

                             6.4.1. Vvedenie

                             6.4.2. libtool

                             6.4.3. libltdl

                             6.4.4. autoconf i autoheader

                             6.4.5. automake i aclocal

                6.5. Ispol'zovanie GNU gettext

                             6.5.1. Prostoj variant ispol'zovaniya

                             6.5.2. Optimal'noe ispol'zovanie

                             6.5.3. Upravlenie katalogami soobschenij

                6.6. Ispol'zovanie Perl

                6.7. Ispol'zovanie X11

                             6.7.1. Komponenty X.Org

                             6.7.2. Porty, kotorym trebuetsya Motif

                             6.7.3. SHrifty dlya X11

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

                             6.7.5. `Elementy rabochego stola

                6.8. Ispol'zovanie GNOME

                6.9. Ispol'zovanie Qt

                             6.9.1. Porty, dlya kotoryh trebuetsya Qt

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

                             6.9.3. Prochie soobrazheniya

                6.10. Ispol'zovanie KDE

                             6.10.1. Zadanie peremennyh (tol'ko dlya
                             KDE 3.x)

                             6.10.2. Zadanie peremennyh KDE 4

                6.11. Ispol'zovanie Java

                             6.11.1. Zadanie peremennyh

                             6.11.2. Postroenie s Ant

                             6.11.3. Prakticheskie rekomendacii

                6.12. Veb-prilozheniya, Apache i PHP

                             6.12.1. Apache

                             6.12.2. Veb-prilozheniya

                             6.12.3. PHP

                             6.12.4. Moduli PEAR

                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.18.1. Vvedenie

                             6.18.2. Vybor versii

                             6.18.3. Vybor komponentov

                             6.18.4. Unicode

                             6.18.5. Obnaruzhenie ustanovlennyh
                             versij

                             6.18.6. Peremennye dlya opredeleniya

                             6.18.7. Obrabotka v bsd.port.pre.mk

                             6.18.8. Dopolnitel'nye parametry
                             configure

                6.19. Ispol'zovanie Lua

                             6.19.1. Vvedenie

                             6.19.2. Vybor versii

                             6.19.3. Vybor komponentov

                             6.19.4. Obnaruzhenie ustanovlennyh
                             versij

                             6.19.5. Peremennye dlya opredeleniya

                             6.19.6. Obrabotka v bsd.port.pre.mk

                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.23.1. Ostanovka sluzhb pri udalenii

                             6.23.2. Kontrol'nyj spisok pered
                             vneseniem izmenenij

                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.2.1. Ochistka pustyh katalogov

                             7.2.2. Sozdanie pustyh katalogov

                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

                             11.3.1. Baza dannyh VuXML

                             11.3.2. Korotkoe vstuplenie v VuXML

                             11.3.3. Testirovanie vashih izmenenij v
                             baze dannyh VuXML

   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. Znacheniya __FreeBSD_version

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

                12.7. Ispol'zovanie vyrazheniya exec v scenariyah
                obiortkah

                12.8. Postupajte razumno

                12.9. Rabota kak s CC, tak i CXX

                12.10. Ispol'zovanie CFLAGS

                12.11. Biblioteki potokov

                12.12. Pozhelaniya

                12.13. README.html

                12.14. Pometka neustanavlivaemogo porta kak BROKEN,
                FORBIDDEN ili IGNORE

                             12.14.1. Peremennye

                             12.14.2. Zamechaniya po realizacii

                12.15. Pometka porta na udalenie s DEPRECATED ili
                EXPIRATION_DATE

                12.16. Izbegajte ispol'zovaniya konstrukcii .error

                12.17. Ispol'zovanie sysctl

                12.18. Menyayuschiesya distributivnye fajly

                12.19. Izbeganie linuksizmov

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

   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 scons

   6-4. Peremennye dlya portov, ispol'zuyuschih Perl

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

   6-6. Peremennye, opredelyayuschie zavisimosti ot otdel'nyh chastej
   X11

   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. Peremennye dlya portov, ispol'zuyuschih KDE 3.x

   6-13. Dostupnye komponenty KDE 4

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

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

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

   6-17. Peremennye dlya portov, ispol'zuyuschih Apache

   6-18. Ispol'zuemye peremennye pri portirovanii modulej Apache

   6-19. Peremennye dlya portov, ispol'zuyuschih PHP

   6-20. Peremennye dlya portov, kotorye ispol'zuyut Python

   6-21. Naibolee vostrebovannye peremennye dlya portov, kotorye
   ispol'zuyut Tcl/Tk

   6-22. Poleznye peremennye dlya portov, ispol'zuyuschih Ruby

   6-23. Otobrannye peremennye tol'ko dlya chteniya dlya portov,
   ispol'zuyuschih Ruby

   6-24. Peremennye dlya vybora versii wxWidgets

   6-25. Dostupnye versii wxWidgets

   6-26. Opredelenie versii dlya wxWidgets

   6-27. Peremennye dlya vybora predpochitaemyh versij wxWidgets

   6-28. Dostupnye komponenty wxWidgets

   6-29. Dostupnye tipy zavisimosti wxWidgets

   6-30. Tipy zavisimosti wxWidgets, ispol'zuemye po umolchaniyu

   6-31. Peremennye dlya vybora versii wxWidgets s Unicode

   6-32. Peremennye, opredelennye dlya portov, ispol'zuyuschih
   wxWidgets

   6-33. Dopustimye znacheniya WX_CONF_ARGS

   6-34. Peremennye dlya vybora versii Lua

   6-35. Dostupnye versii Lua

   6-36. Opredelenie versii Lua

   6-37. Peremennye dlya vybora predpochitaemyh versij Lua

   6-38. Dostupnye komponenty Lua

   6-39. Dostupnye tipy zavisimosti Lua

   6-40. Tipy zavisimosti Lua, ispol'zuemye po umolchaniyu

   6-41. Peremennye, opredelennye dlya portov, ispol'zuyuschih Lua

   6-42. Peremennye dlya portov, ispol'zuyuschih Mozilla

   6-43. Peremennye dlya portov, ispol'zuyuschih bazy dannyh

   10-1. Prefiksy fajlov dlya SVN update

   12-1. Znacheniya __FreeBSD_version

   Spisok primerov

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

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

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

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

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

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

   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. Primer real'nogo ispol'zovaniya OPTIONS

   5-12. Ispol'zovanie OPTIONS v starom stile

   5-13. Nepravil'noe upravlenie opciej

   5-14. Pravil'noe upravlenie opciej

   6-1. Primer zavisimosti Perl

   6-2. Primer dlya USE_XORG

   6-3. Ispol'zovanie peremennyh X11 v porte

   6-4. Vybor komponentov Qt 4

   6-5. Primer USE_KDE4

   6-6. Primer Makefile dlya klassov PEAR

   6-7. Vybor komponentov wxWidgets

   6-8. Obnaruzhenie ustanovlennyh versij i komponentov wxWidgets

   6-9. Ispol'zovanie peremennyh wxWidgets v komandah

   6-10. Vybor versii Lua

   6-11. Vybor komponentov Lua

   6-12. Obnaruzhenie ustanovlennyh versij i komponentov Lua

   6-13. Ukazanie dlya porta, gde iskat' Lua

   6-14. 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 Gl. 10.

   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.

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

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

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

                     Glava 3. Bystroe portirovanie

   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.

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

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

3.1. Sozdanie fajla Makefile

   Minimal'nyj Makefile budet vyglyadet' primerno tak:

 # New ports collection makefile for:   oneko
 # Date created:        5 December 1994
 # Whom:                asami
 #
 # $FreeBSD$
 #

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

 MAINTAINER=    asami@FreeBSD.org

 MAN1=          oneko.1
 MANCOMPRESSED= yes
 USE_IMAKE=     yes

 .include <bsd.port.mk>

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

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

   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.

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

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

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

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

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

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

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

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

3.3. Sozdanie fajla s kontrol'noj summoj

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

   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

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

     Zamechanie: Vy mozhete znachitel'no oblegchit' nashu rabotu,
     esli v temu soobscheniya o probleme pomestite horoshee opisanie.
     My rekomenduem nechto vrode ``New port: <kategoriya>/<nazvanie
     porta> <kratkoe opisanie porta>'' dlya novyh portov. 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 poyavitsya
   v spiske   Dopolnitel'nyh kontributorov proekta FreeBSD i drugih
   fajlah. Razve `eto ne velikolepno?!? :-)

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

                    Glava 4. Medlennoe portirovanie

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

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

4.1. Kak vsio `eto rabotaet

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

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

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

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

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

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

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

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

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

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

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

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

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

     Zamechanie: ``Osnovnye'' celi (k primeru, extract, configure i
     tak dalee) ne delayut nichego bol'she, chem proveryayut
     uspeshnost' zaversheniya vseh predyduschih shagov i vyzyvayut
     nastoyaschie celi ili skripty, i ih ne nuzhno menyat'. Esli vam
     nuzhno izmenit' raspakovku, ispravlyajte do-extract, no nikogda
     ne menyajte sposob raboty extract! 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.

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

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

4.4. Sozdanie patchej

   Fajly, kotorye dobavlyalis' ili izmenyalis' v processe sozdaniya
   porta, mogut byt' vyyavleny vyzovom programmy diff(1), 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
         @${REINPLACE_CMD} -e 's|-pthread|${PTHREAD_LIBS}|' ${WRKSRC}/configure

   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

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

   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

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

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

  5.2.3. Peremennye PKGNAMEPREFIX i PKGNAMESUFFIX

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

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

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

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

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

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

  5.4.2. MASTER_SITES

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

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

   Rekomenduetsya pomeschat' v spisok mnogo sajtov, predpochtitel'no
   s raznyh kontinentov. `Eto pomozhet pri nalichii problem s mirovoj
   set'yu. My dazhe planiruem dobavit' podderzhku avtomaticheskogo
   opredeleniya blizhajshego sajta i sgruzki fajlov ottuda; nalichie
   neskol'kih sajtov budet sposobstvovat' `etomu nachinaniyu.

   Esli original'nyj arhiv nahoditsya na odnom iz takih populyarnyh
   serverov, kak 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.

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

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

  5.4.4. DISTFILES

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

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

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

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

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

  5.4.5. EXTRACT_ONLY

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

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

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

 EXTRACT_ONLY=

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

  5.4.6. PATCHFILES

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

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

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

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

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

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

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

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

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

   Snachala nemnogo obschej informacii. V OpenBSD imeetsya poleznaya
   vozmozhnost', ispol'zuemaya v peremennyh DISTFILES i PATCHFILES,
   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 Prim. 5-1.

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

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

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

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

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

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

    5.4.7.2. Podrobnaya informaciya

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

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

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

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

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

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

       Sleduyuschie primery ravnoznachny, no pervyj bolee
       predpochtitelen:

 MASTER_SITES=   alpha

 MASTER_SITES=   alpha:DEFAULT

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

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

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

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

 MASTER_SITES=   alpha alpha:SOME_SITE

 MASTER_SITES=   alpha:DEFAULT alpha:SOME_SITE

 MASTER_SITES=   alpha:SOME_SITE,DEFAULT

 MASTER_SITES=   alpha:DEFAULT,SOME_SITE

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

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

         a. Vse `elementy MASTER_SITES, PATCH_SITES,
            MASTER_SITE_SUBDIR i PATCH_SITE_SUBDIR dolzhny
            zakanchivat'sya simvolom pryamogo sl`esha /. Esli
            kakie-to `elementy prinadlezhat kakim-to gruppam,
            postfiks gruppy :n dolzhen sledovat' srazu posle
            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 Prim. 5-3
            i Prim. 5-4.

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

 MASTER_SITE_SUBDIR=     old:n new/:NEW

               * Katalogi vnutri gruppy DEFAULT -> old:n

               * Katalogi vnutri gruppy NEW -> new

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

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

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

               * file1 budet sgruzhat'sya s

                    * MASTER_SITE_OVERRIDE

                    * http://site1/directory-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 Prim. 5-5.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

   iii. Novye celi postroeniya portov

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

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

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

  5.4.8. DIST_SUBDIR

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

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

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

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

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

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

 A cat chasing a mouse all over the screen

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

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

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

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

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

 LIB_DEPENDS=   jpeg:${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. CHast'
   target mozhet byt' opuschena, esli ona ravna DEPENDS_TARGET (po
   umolchaniyu install).

     Zamechanie: CHast' lib yavlyaetsya regulyarnym vyrazheniem,
     kotoroe vyzyvaetsya dlya vyvoda, poluchennogo iz ldconfig -r.
     Razreshayutsya takie znacheniya, kak intl.9 i intl.[5-7]. Pervyj
     shablon, intl.9, sovpadaet tol'ko s intl versii 9, v to vremya
     kak intl.[5-7] sovpadaet s lyubym iz: intl.5, intl.6 i intl.7.

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

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

  5.7.2. RUN_DEPENDS

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

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

     Zamechanie: 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, USE_GMAKE=yes 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.7.3. BUILD_DEPENDS

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

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

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

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

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

  5.7.4. FETCH_DEPENDS

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

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

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

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

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

  5.7.5. EXTRACT_DEPENDS

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

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

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

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

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

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

  5.7.6. PATCH_DEPENDS

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

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

   budet perehodit' v podkatalog java/jfc vashego dereva portov dlya
   raspakovki.

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

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

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

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

 USE_GCC=        3.4

     dobavit zavisimost' ot gcc34 k kazhdomu portu, vklyuchaya sam
     gcc34!

   Tablica 5-2. Peremennye USE_*

   Peremennaya                          Smysl                         
   USE_BZIP2    tar-arhivy porta upakovany pri pomoschi bzip2.        
   USE_ZIP      tar-arhivy porta upakovany pri pomoschi zip.          
   USE_BISON    Dlya postroeniya port ispol'zuet bison.               
                Port trebuet cdrecord iz sysutils/cdrtools ili        
   USE_CDRTOOLS sysutils/cdrtools-cjk v zavisimosti ot predpochtenij  
                pol'zovatelya.                                        
                Port trebuet dlya sborki special'nuyu versiyu gcc.    
                Tochnaya versiya mozhet byt' ukazana v znachenii      
                peremennoj, naprimer 3.4. Minimal'no neobhodimuyu     
   USE_GCC      versiyu mozhno ukazat' kak 3.4+. gcc iz osnovnoj      
                sistemy ispol'zuetsya v sluchae, esli on              
                udovletvoryaet zaproshennoj versii, inache            
                proizvoditsya kompilyaciya podhodyaschej versii gcc   
                iz portov s korrekcij peremennyh CC i CXX.            

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

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

  5.7.8. 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.7.9. Zamechaniya kasatel'no zavisimostej

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

   Kogda vy nabiraete komandu make clean, `eta operaciya takzhe
   vypolnyaetsya i nad zavisimostyami `etogo porta. Esli vy ne
   hotite, chtoby `eto sluchilos', opredelite peremennuyu
   NOCLEANDEPENDS v vashem okruzhenii. `Eto mozhet byt' osobenno
   nuzhnym, esli port imeet nechto, chto zanimaet mnogo vremeni na
   postroenie, v svoiom spiske zavisimostej, naprimer, KDE, GNOME ili
   Mozilla.

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

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

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

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

  5.7.10. 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.7.11. 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=       Enable bar support

 .include <bsd.port.options.mk>

 .if ${PORTOPTIONS: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.7.12. 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.8. 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.9. Stranicy Spravochnika

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

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

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

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

   Vot primer, v kotorom privodyatsya vse sluchai.

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

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

 ${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.10. 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.11. 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.11.1. Knobs

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

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

     Zamechanie: 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                       Znacheniya                    
                     Esli ustanovlena, ukazyvaet ne zadejstvovat'     
   WITHOUT_NLS       internacionalizaciyu, chto mozhet uskorit'       
                     kompilyaciyu. Po umolchaniyu,                    
                     internacionalizaciya ispol'zuetsya.              
   WITH_OPENSSL_BASE Ispol'zovat' versiyu OpenSSL iz bazovoj sistemy. 
                     Ustanavlivaet versiyu OpenSSL iz                 
   WITH_OPENSSL_PORT security/openssl, dazhe esli v bazovoj sisteme   
                     poslednyaya versiya.                             
                     Porty, kotorye mogut byt' sobrany s podderzhkoj  
   WITHOUT_X11       ili bez podderzhki X, obychno sobirayutsya s     
                     podderzhkoj X. Esli `eta peremennaya opredelena, 
                     to budet sobrana versiya bez podderzhki X.       

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

    5.11.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.11.2. OPTIONS

    5.11.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.11.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 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_MULTI i OPTIONS_SINGLE takzhe dopuskayut otsutstvie vybora
   putiom vklyucheniya gruppy v OPTIONS_DEFINE:

 OPTIONS_DEFINE=         MG1
 OPTIONS_MULTI=          MG1
 OPTIONS_MULTI_MG1=      OPT5 OPT6

   Posle `etogo gruppa trebuet po krajnej mere odin OPTION iz MG1,
   tol'ko esli vybran novyj MG1 OPTION. Rekomenduetsya
   po`eksperimentirovat', chtoby uluchshit' ponimanie.

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

 # Check other OPTIONS

 .include <bsd.port.mk>

   Primer 5-12. Ispol'zovanie OPTIONS v starom stile

 OPTIONS=      FOO "Enable option foo" On

 .include <bsd.port.pre.mk>

 .if defined(WITHOUT_FOO)
 CONFIGURE_ARGS+=        --without-foo
 .else
 CONFIGURE_ARGS+=        --with-foo
 .endif

 .include <bsd.port.post.mk>

     Vazhno: Takoj sposob ispol'zovaniya OPTIONS yavlyaetsya
     ustarevshim, i v buduschem ego podderzhka budet udaliona. Ne
     ispol'zujte `etot sposob dlya novyh portov.

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

  5.11.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+=           foo:${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+=           foo:${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.

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

5.12. 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.12.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.12.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.13. Razreshenie konfliktov

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

     Zamechanie: Peremennye registracii konflikta avtomaticheski
     opredelyayut peremennuyu IGNORE, kotoraya bolee podrobno opisana
     v Razd. 12.14.

   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.13.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.13.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.13.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.14. Ustanovka fajlov

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

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

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

     * DATADIR preobrazuetsya v PREFIX/share/PORTNAME.

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

     Zamechanie: NOPORTDOCS upravlyaet ustanovkoj dopolnitel'noj
     dokumentacii v DOCSDIR. `Eto ne otnositsya k standartnym
     stranicam spravochnika i stranicam info. Vse, chto
     ustanavlivaetsya v DATADIR i EXAMPLESDIR, upravlyaetsya cherez
     NOPORTDATA i NOPORTEXAMPLES sootvetstvenno.

   `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 opredelena NOPORTDOCS, 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/*

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

   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 USE_GMAKE=yes.

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

   Peremennaya                       Znachenie                       
   USE_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
   USE_IMAKE=yes. `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                                                      
   GNU_CONFIGURE    Port ispol'zuet scenarij configure dlya           
                    podgotovki postroeniya.                           
                    To zhe, chto i GNU_CONFIGURE, krome togo, chto    
   HAS_CONFIGURE    cel' 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.     
   CONFIGURE_TARGET Znacheniem po umolchaniyu yavlyaetsya             
                    ${MACHINE_ARCH}-portbld-freebsd${OSREL}.          

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

  6.3.4. Ispol'zovanie scons

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

   Tablica 6-3. Peremennye dlya portov, ispol'zuyuschih scons

    Peremennaya                       Znacheniya                      
   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 trebuet gettext, prosto ustanovite
   peremennuyu USE_GETTEXT v znachenie yes, i v vash port dobavitsya
   zavisimost' ot devel/gettext. Krome togo, v USE_GETTEXT mozhno
   ustanovit' trebuemuyu versiyu biblioteki libintl, osnovnogo
   komponenta gettext, no takoj mehanizm luchshe ne ispol'zovat'.
   Vash port dolzhen rabotat' i s tekuschej versiej devel/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:

 USE_GETTEXT=    yes
 CPPFLAGS+=      -I${LOCALBASE}/include
 LDFLAGS+=       -L${LOCALBASE}/lib

 GNU_CONFIGURE=  yes
 CONFIGURE_ENV=  CPPFLAGS="${CPPFLAGS}" \
                 LDFLAGS="${LDFLAGS}"

   Of course, the code can be more compact if there are no more flags
   to pass to configure:

 USE_GETTEXT=    yes
 GNU_CONFIGURE=  yes
 CONFIGURE_ENV=  CPPFLAGS="-I${LOCALBASE}/include" \
                 LDFLAGS="-L${LOCALBASE}/lib"

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

  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 statusa pereklyuchatelya WITHOUT_NLS. Dlya portov
   nebol'shoj ili srednej slozhnosti vy mozhete polagat'sya na
   sleduyuschuyu idiomu:

 GNU_CONFIGURE=          yes

 .if !defined(WITHOUT_NLS)
 USE_GETTEXT=            yes
 PLIST_SUB+=             NLS=""
 .else
 CONFIGURE_ARGS+=        --disable-nls
 PLIST_SUB+=             NLS="@comment "
 .endif

   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 vashim portom. Dlya naibolee
   populyarnyh yazykov imeyutsya sobstvennye katalogi, perechislennye
   v /etc/mtree/BSD.local.dist; takim obrazom, oni vklyucheny v
   osnovnuyu sistemu. Katalogi dlya mnozhestva drugih yazykov
   upravlyayutsya s pomosch'yu porta devel/gettext. Vozmozhno, vam
   ponadobit'sya obratit' vnimanie na ego pkg-plist i posmotret',
   kuda vash 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-4. 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        
   PERL            sisteme, libo 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.                                
                   Konfiguraciya, postroenie i ustanovka s            
   PERL_MODBUILD   ispol'zovaniem Module::Build. Vlechiot             
                   PERL_CONFIGURE.                                    

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

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

     Zamechanie: 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-1. 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-2. Primer dlya USE_XORG

 USE_XORG=   xrender xft xkbfile xt xaw
 USE_GL=     glu

   Nekotorye porty opredelyayut USE_XLIB, kotoraya delaet port
   zavisimym oto vseh 50 ili okolo togo bibliotek. `Eta peremennaya
   suschestvuet dlya obratnoj sovmestimosti, t.k. predshestvuet
   modul'nomu X.Org, i ne dolzhna ispol'zovat'sya v novyh portah.

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

             Port ispol'zuet biblioteki X. YAvlyaetsya ustarevshim -  
   USE_XLIB  ispol'zujte vmesto `etogo spisok komponentov X.Org v     
             peremennoj USE_XORG.                                     
   USE_IMAKE Port ispol'zuet imake.                                   
             Zadaiotsya marshrut do xmkmf, esli on otsutstvuet v      
   XMKMF     peremennoj okruzheniya PATH. Po umolchaniyu `eto xmkmf   
             -a.                                                      

   Tablica 6-6. Peremennye, opredelyayuschie zavisimosti ot otdel'nyh
   chastej X11

   +----------------------------------------------------------------+
   |                        | Port, predostavlyayuschij imake i     |
   | X_IMAKE_PORT           | neskol'ko drugih utilit, ispol'zuemyh |
   |                        | pri postroenii X11.                   |
   |------------------------+---------------------------------------|
   | X_LIBRARIES_PORT       | Port, predostavlyayuschij biblioteki  |
   |                        | X11.                                  |
   |------------------------+---------------------------------------|
   | X_CLIENTS_PORT         | Port, predostavlyayuschij klientov X. |
   |------------------------+---------------------------------------|
   | X_SERVER_PORT          | Port, predostavlyayuschij server X.   |
   |------------------------+---------------------------------------|
   | X_FONTSERVER_PORT      | Port, predostavlyayuschij server      |
   |                        | shriftov.                             |
   |------------------------+---------------------------------------|
   | X_PRINTSERVER_PORT     | Port, predostavlyayuschij server      |
   |                        | pechati.                              |
   |------------------------+---------------------------------------|
   | X_VFBSERVER_PORT       | Port, predostavlyayuschij server      |
   |                        | virtual'nogo frejmbufera.             |
   |------------------------+---------------------------------------|
   | X_NESTSERVER_PORT      | Port, predostavlyayuschij vlozhennyj  |
   |                        | server X.                             |
   |------------------------+---------------------------------------|
   | X_FONTS_ENCODINGS_PORT | Port, predostavlyayuschij kodirovki   |
   |                        | dlya shriftov.                        |
   |------------------------+---------------------------------------|
   | X_FONTS_MISC_PORT      | Port, predostavlyayuschij prochie     |
   |                        | rastrovye shrifty.                    |
   |------------------------+---------------------------------------|
   | X_FONTS_100DPI_PORT    | Port, predostavlyayuschij 100dpi      |
   |                        | rastrovye shrifty.                    |
   |------------------------+---------------------------------------|
   | X_FONTS_75DPI_PORT     | Port, predostavlyayuschij 75dpi       |
   |                        | rastrovye shrifty.                    |
   |------------------------+---------------------------------------|
   | X_FONTS_CYRILLIC_PORT  | Port, predostavlyayuschij             |
   |                        | kirillicheskie rastrovye shrifty.     |
   |------------------------+---------------------------------------|
   | X_FONTS_TTF_PORT       | Port, predostavlyayuschij shrifty     |
   |                        | TrueType(R).                          |
   |------------------------+---------------------------------------|
   | X_FONTS_TYPE1_PORT     | Port, predostavlyayuschij shrifty     |
   |                        | Type1.                                |
   |------------------------+---------------------------------------|
   |                        | Port, predostavlyayuschij stranicy    |
   | X_MANUALS_PORT         | spravochnika, prednaznachennye dlya   |
   |                        | razrabotchikov.                       |
   +----------------------------------------------------------------+

   Primer 6-3. Ispol'zovanie peremennyh X11 v porte

 # Use some X11 libraries and depend on
 # font server as well as cyrillic fonts.
 RUN_DEPENDS=   ${LOCALBASE}/bin/xfs:${X_FONTSERVER_PORT} \
                ${LOCALBASE}/lib/X11/fonts/cyrillic/crox1c.pcf.gz:${X_FONTS_CYRILLIC_PORT}

 USE_XORG=      x11 xpm

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

  6.7.2. Porty, kotorym trebuetsya Motif

   Esli vashemu portu trebuetsya Motif, zadajte peremennuyu USE_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.

 USE_DISPLAY=  yes

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

  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. 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.           
                 Vozmozhnymi znacheniyami yavlyayutsya 3 i 4,         
   USE_QT_VER    kazhdaya iz kotoryh ukazyvaet na starshij nomer      
                 ispol'zuemoj versii Qt. Sootvetstvuyuschie parametry 
                 peredayutsya v scenarij configure i make.            
                 Ustanavlivaetsya v znachenie, soderzhaschee put' k   
   QT_PREFIX     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 paketa Qt, peredavaemye cherez     
   QTCPPFLAGS    peremennuyu CONFIGURE_ENV. Po umolchaniyu            
                 ustanavlivaetsya v sootvetstvii so znacheniem        
                 USE_QT_VER.                                          
                 Dopolnitel'nye flagi komponovki dlya                 
                 instrumental'nogo paketa Qt, peredavaemye cherez     
   QTCFGLIBS     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

   QT_COMPONENTS Ukazyvaet instrumenty i biblioteki v kachestve       
                 zavisimostej dlya Qt 4. Smotrite podrobnee nizhe.    
   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).            

   Pri ustanovlennoj peremennoj USE_QT_VER 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}

   Esli peremennaya USE_QT_VER ustanovlena v znachenie 4, to takzhe
   razvorachivayutsya sleduyuschie nastrojki:

 CONFIGURE_ENV+= UIC="${UIC}" QMAKE="${QMAKE}" QMAKESPEC="${QMAKESPEC}"
 MAKE_ENV+=      QMAKESPEC="${QMAKESPEC}"

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

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

   Esli USE_QT_VER ustanovlena v znachenie 4, to v peremennoj
   QT_COMPONENTS mozhno ukazat' zavisimost' 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
   _QT_COMPONENTS_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)                        
                plaginy dlya graficheskih formatov GIF, JPEG, MNG i   
   imageformats SVG (esli prilozhenie postavlyaetsya s graficheskimi  
                fajlami)                                              

   Primer 6-4. 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_QT_VER=    4
 QT_COMPONENTS= 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} 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} 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 (tol'ko dlya KDE 3.x)

   Tablica 6-12. Peremennye dlya portov, ispol'zuyuschih KDE 3.x

                   Port ispol'zuet biblioteki KDE. Opredelyaet        
                   starshij nomer ispol'zuemoj versii KDE.            
   USE_KDELIBS_VER Podrazumevaetsya vklyuchenie USE_QT_VER            
                   podhodyaschej versii. Edinstvennym vozmozhnym      
                   znacheniem yavlyaetsya 3.                          
                   Port ispol'zuet v kachestve ustanovki kornevoj     
                   katalog KDE. Opredelyaet starshij nomer            
   USE_KDEBASE_VER ispol'zuemoj versii KDE. Podrazumevaet vklyuchenie 
                   USE_QT_VER podhodyaschej versii. Edinstvennym      
                   vozmozhnym znacheniem yavlyaetsya 3.               

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

  6.10.2. 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-13. Dostupnye komponenty KDE 4

   Nazvanie                          Opisanie                         
   baseapps  Osnovnye prilozheniya KDE Desktop                        
   kdehier   Ierarhiya osnovnyh katalogov KDE                         
   kdelibs   KDE Developer Platform                                   
   kdeprefix Esli ustanovleno, to port budet ustanovlen v             
             ${KDE4_PREFIX} vmesto ${LOCALBASE}                       
   pimlibs   Biblioteki KDE-Pim                                       
   workspace Pol'zovatel'skie okruzheniya KDE                         
   akonadi   Server hraneniya KDE-Pim                                 
   automoc4  automoc dlya paketov Qt 4                                

   Dlya izbezhaniya konfliktov s portami KDE 3.x, 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-5. Primer USE_KDE4

   `Eto prostoj primer dlya porta KDE 4. USE_CMAKE ukazyvaet portu
   ispol'zovat' CMake - konfiguracionnyj instrument, shiroko
   rasprostranennyj sredi proektov KDE 4. 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_QT_VER. Esli port trebuet kakoj-libo iz
   komponentov Qt 4, to sleduet ustanovit' USE_QT_VER, a zatem mozhno
   ukazat' neobhodimye komponenty.

 USE_CMAKE=     yes
 USE_KDE4=      kdelibs kdeprefix automoc4
 USE_QT_VER=    4
 QT_COMPONENTS= 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 yavlyaetsya java/jdk16.

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

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

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

   Sootvetstvuyuschie zapisi opredelyayutsya v oboih peremennyh
   PLIST_SUB (opisana v Razd. 7.1) 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 USE_GMAKE, kotoryj opisan v Razd. 6.3.

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

  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 Razd. 7.1), 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 Razd. 5.3.

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

6.12. Veb-prilozheniya, Apache i PHP

  6.12.1. Apache

   Tablica 6-17. Peremennye dlya portov, ispol'zuyuschih Apache

                    Port trebuet Apache. Vozmozhnye znacheniya: yes   
                    (beriot lyubuyu versiyu), 20, 22, 20-22, 20+ i    
   USE_APACHE       tak dalee. Versiya po umolchaniyu 22. Bolee       
                    podrobnaya informaciya soderzhitsya v fajle       
                    ports/Mk/bsd.apache.mk i na stranice              
                    wiki.freebsd.org/Apache/.                         
   WITH_APACHE2     `Eta peremennaya yavlyaetsya ustarevshej i ne     
                    dolzhna bol'she ispol'zovat'sya.                  
   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 
   APACHE_VERSION   dlya chteniya). `Eta peremennaya dostupna tol'ko  
                    posle podklyucheniya bsd.port.pre.mk. Vozmozhnye  
                    znacheniya: 20, 22.                               
   APACHEMODDIR     Katalog dlya modulej Apache. Znachenie peremennoj 
                    avtomaticheski podstavlyaetsya v pkg-plist.       
                    Katalog dlya zagolovkov Apache. Znachenie         
   APACHEINCLUDEDIR peremennoj avtomaticheski podstavlyaetsya v       
                    pkg-plist.                                        
                    Katalog dlya konfiguracionnyh fajlov Apache.      
   APACHEETCDIR     Znachenie peremennoj avtomaticheski               
                    podstavlyaetsya v pkg-plist.                      

   Tablica 6-18. Ispol'zuemye peremennye pri portirovanii modulej
   Apache

   MODULENAME    Nazvanie modulya. Znacheniem po umolchaniyu          
                 yavlyaetsya PORTNAME. Primer: mod_hello              
                 Kratkoe nazvanie modulya. Nasleduetsya               
   SHORTMODNAME  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-19. Peremennye dlya portov, ispol'zuyuschih PHP

                   Port trebuet PHP. Znachenie yes dobavlyaet         
   USE_PHP         zavisimost' ot PHP. Vmesto `etogo mozhet byt'      
                   ukazan perechen' trebuemyh rasshirenij PHP.        
                   Primer: pcre xml gettext                           
                   Vybiraet starshij nomer versii, s kotorym budet    
   DEFAULT_PHP_VER ustanovlen 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.           
                   Port budet schitat'sya rasshireniem PHP,           
   USE_PHPEXT      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-6. 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-20. Peremennye dlya portov, kotorye ispol'zuyut Python

                           Dlya `etogo porta nuzhen Python.           
                           Minimal'naya trebuemaya versiya mozhet     
   USE_PYTHON              byt' ukazana s takim 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. Neobhodimo, esli  
   USE_PYDISTUTILS         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       
   PYTHON_PKGNAMEPREFIX    otlichiya paketov, ispol'zuyuschih raznye  
                           versii Python. Primer: py24-               
                           Mestonahozhdenie dereva site-packages,     
                           kotoroe soderzhit put' ustanovki Python    
   PYTHON_SITELIBDIR       (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             
   PYNUMPY                 rasshireniya numeric, numpy (PYNUMERIC     
                           ob"yavlen ustarevshim vyshestoyaschim      
                           proizvoditelem).                           
                           Stroka zavisimosti dlya rasshireniya XML   
   PYXML                   (ne nuzhno dlya Python 2.0 i vyshe, t.k.   
                           vklyucheno v osnovnoj distributiv).        
                           Dobavit' zavisimost' ot twistedCore.       
   USE_TWISTED             Perechen' trebuemyh komponentov mozhet     
                           byt' ukazan kak znachenie `etoj            
                           peremennoj. Primer: web lore pair flow     
                           Dobavit' zavisimost' ot Zope, platformy    
                           veb prilozhenij. Izmenyaet zavisimost' ot  
   USE_ZOPE                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-21. Naibolee vostrebovannye peremennye dlya portov,
   kotorye ispol'zuyut Tcl/Tk

                           Port zavisit ot biblioteki Tcl (ne         
                           obolochki). Minimal'nuyu trebuemuyu        
   USE_TCL                 versiyu mozhno ukazat' s 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 trebuetsya   
   USE_TCL_WRAPPER         konkretnaya versiya tclsh. Obertka tclsh   
                           ustanavlivaetsya v sistemu. Pol'zovatel'   
                           mozhet ukazat' zhelaemuyu obolochku tcl    
                           dlya ispol'zovaniya.                       
                           Opredelyaemye pol'zovatelem peremennye,    
   WITH_TCL_VER            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       
                           predpochitaemoj obolochki). Podrazumevaet  
   USE_TK                  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-22. 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.       
                    Ustanavlivaet al'ternativnoe imya dlya setup.rb.  
   RUBY_SETUP       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-23. 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-24. Peremennye dlya vybora versii wxWidgets

   Peremennaya             Opisanie                  Znachenie po     
                                                     umolchaniyu      
   USE_WX      Perechen' versij, kotorye port    Vse dostupnye versii 
               mozhet 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-25. Dostupnye versii wxWidgets

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

     Zamechanie: 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 Razd. 6.18.4).

   Peremennye v Tabl. 6-24 mozhno ustanovit' v odnu ili bolee
   sleduyuschih kombinacij, razdelennyh probelami:

   Tablica 6-26. 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-27. 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-28. 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 Tabl. 6-30).
   Dostupnye tipy zavisimosti:

   Tablica 6-29. 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-30. Tipy zavisimosti wxWidgets, ispol'zuemye po
   umolchaniyu

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

   Primer 6-7. 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-31. Peremennye dlya vybora versii wxWidgets s Unicode

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

     Vnimanie: 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-8. 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 Tabl. 6-24).

   Tablica 6-32. 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-9. 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

     Zamechanie: 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-33. Dopustimye znacheniya WX_CONF_ARGS

       Vozmozhnoe                   Poluchaemyj parametr              
        znachenie      
   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-34. Peremennye dlya vybora versii Lua

   Peremennaya             Opisanie                  Znachenie po     
                                                     umolchaniyu      
   USE_LUA     Perechen' versij, kotorye port    Vse dostupnye versii 
               mozhet 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-35. Dostupnye versii Lua

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

   Peremennye iz Tabl. 6-34 mogut imet' kombinacii iz odnogo ili
   neskol'kih znachenij, razdelennyh probelom:

   Tablica 6-36. 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-37. Peremennye dlya vybora predpochitaemyh versij Lua

     Nazvanie   Prednaznachenie 
   WANT_LUA_VER port            
   WITH_LUA_VER pol'zovatel'    

   Primer 6-10. 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-38. 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             

     Zamechanie: 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 Tabl.
   6-40). Dostupnye sleduyuschie tipy:

   Tablica 6-39. 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-40. 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-11. 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-12. 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 Tabl. 6-34).

   Tablica 6-41. 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-13. 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-14. 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

     Zamechanie: 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-42. Peremennye dlya portov, ispol'zuyuschih Mozilla

                         Odin iz b`ek`endov Gecko, s kotorym mozhet   
                         rabotat' port. Vozmozhnye znacheniya: libxul 
   USE_GECKO             (libxul.so), seamonkey (libgtkembedmoz.so,   
                         ustarevshij, bol'she ne dolzhen              
                         ispol'zovat'sya).                            
                         Dlya zapuska porta trebuetsya Firefox.       
   USE_FIREFOX           Vozmozhnye 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 
   USE_SEAMONKEY         po umolchaniyu), 20, 11 (ustarelo, bol'she   
                         ne dolzhno ispol'zovat'sya). Po umolchaniyu  
                         ustanavlivaet zavisimost' ot versii 20.      
                         Dlya postroeniya porta trebuetsya SeaMonkey. 
                         Vozmozhnye znacheniya: smotrite              
   USE_SEAMONKEY_BUILD   USE_SEAMONKEY. Avtomaticheski ustanavlivaet  
                         USE_SEAMONKEY s prisvoeniem togo zhe         
                         znacheniya.                                  
                         Dlya zapuska porta trebuetsya Thunderbird.   
                         Vozmozhnye znacheniya: yes (beretsya versiya 
   USE_THUNDERBIRD       po umolchaniyu), 31, 30 (ustarelo, bol'she   
                         ne dolzhno ispol'zovat'sya). Po umolchaniyu  
                         ustanavlivaet zavisimost' ot versii 31.      
                         Dlya postroeniya porta trebuetsya            
                         Thunderbird. Vozmozhnye znacheniya: smotrite 
   USE_THUNDERBIRD_BUILD 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-43. Peremennye dlya portov, ispol'zuyuschih bazy dannyh

   Peremennaya                       Znacheniya                       
               Esli peremennaya ustanovlena v yes, dobavlyaet         
               zavisimost' ot porta databases/db41. Takzhe peremennoj 
               mozhno prisvoit' znacheniya: 2, 3, 40, 41, 42, 43, 44, 
   USE_BDB     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 porta databases/mysql55-client. Kak     
   USE_MYSQL   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   
   USE_PGSQL   peremennaya, 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       
   USE_SQLITE  zavisimost' 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.

     Zamechanie: Novye scenarii ne sleduet dobavlyat' s suffiksom
     .sh. V opredelennyj moment budet proizvedeno massovoe
     repozitornoe kopirovanie vseh scenariev, vse esche imeyuschih
     `etot suffiks.

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

  6.23.1. Ostanovka sluzhb pri udalenii

   Suschestvuet vozmozhnost' sdelat' avtomaticheskuyu ostanovku
   sluzhby chast'yu procedury udaleniya. My sovetuem ispol'zovat'
   `etu funkciyu tol'ko pri absolyutnoj neobhodimosti ostanovki
   sluzhby pered tem kak fajly budut udaleny. Kak pravilo, reshenie
   ob ostanovke sluzhby pri udalenii ostaetsya za administratorom.
   Takzhe uchityvajte, chto `eto v tom chisle kasaetsya obnovlenij.

   V pkg-plist dobavlyayutsya primerno takie stroki:

 @stopdaemon doormand

   Parametr obyazatel'no dolzhen sovpadat' s soderzhimym peremennoj
   USE_RC_SUBR.

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

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

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

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

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

   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

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

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

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

     Zamechanie: `Etot skript ne zapuskaetsya avtomaticheski, esli vy
     ustanavlivaete port komandoj make install. Esli zhe vam
     dejstvitel'no neobhodimo ego zapustit', to zapustite ego yavno
     iz fajla Makefile porta 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.
   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

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.

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

   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

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

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

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

   Esli takih otlozhennyh PR ne suschestvuet, to na sleduyuschem
   `etape sleduet poslat' soobschenie `elektronnoj pochty cheloveku,
   podderzhivayuschemu port, kotoryj vydaiotsya po komande make
   maintainer. `Etot chelovek mozhet uzhe rabotat' nad obnovleniem,
   ili imet' prichinu ne obnovlyat' port pryamo sejchas (naprimer,
   iz-za problem so stabil'nost'yu funkcionirovaniya novoj versii);
   vam net nuzhdy dublirovat' ih rabotu. Zamet'te, chto
   nepodderzhivaemye porty perechislyayutsya s adresom
   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:

 % /usr/bin/diff something.orig something > something.diff

   V protivnom sluchae, vam sleduet vospol'zovat'sya metodom svn diff
   (Razd. 10.1), 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'.

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

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

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 svn://svn.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)
           svn.FreeBSD.org - `eto obschedostupnyj SVN server.

   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 Razd. 3.4 i Razd. 3.5.

 % 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 Tabl. 10-1.

   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

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

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

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

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 <teg>
   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. Ochen' pohozhe na HTML,
   pravda? Osnovnoe otlichie v rasshiryaemosti XML, t.e. opredelenii
   sobstvennyh tegov. Iz-za svoej harakternoj struktury XML pridaet
   formu razroznennym dannym. V chastnosti, XML podhodit dlya
   razmetki opisanij uyazvimostej bezopasnosti.

   Teper' davajte voz'mem 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.

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

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

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

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 Unix
   on rabotaet. Esli vam nuzhno sdelat' takie izmeneniya v kode dlya
   uslovnoj kompilyacii, to vy dolzhny delat' izmeneniya kak mozhno
   bolee obschimi, chtoby my mogli perenesti kod na bolee starye
   sistemy FreeBSD, a takzhe i na drugie sistemy BSD, takie, kak
   4.4BSD ot CSRG, BSD/386, 386BSD, NetBSD, i OpenBSD.

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

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

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

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

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

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

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

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

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

   Ispol'zujte:

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

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

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

   Rezhe ispol'zujte:

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

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

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

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

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

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

12.5. Znacheniya __FreeBSD_version

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

   Tablica 12-1. Znacheniya __FreeBSD_version

     Znachenie       Data                      Reliz                  
   119411                      2.0-RELEASE                            
   199501,       19 marta 1995 2.1-CURRENT                            
   199503        
   199504        9 aprelya     2.0.5-RELEASE                          
                 1995          
   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     2.1.5-RELEASE                          
                 1996          
   199608        12 iyulya     2.2-CURRENT do vyhoda 2.1.6            
                 1996          
   199612        15 noyabrya   2.1.6-RELEASE                          
                 1996          
   199612                      2.1.7-RELEASE                          
   220000        19 fevralya   2.2-RELEASE                            
                 1997          
   (bez                        2.2.1-RELEASE                          
   izmenenij)    
   (bez                        2.2-STABLE posle vyhoda 2.2.1-RELEASE  
   izmenenij)    
   221001        15 aprelya    2.2-STABLE posle vklyucheniya          
                 1997          texinfo-3.9                            
   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  
                 1997          -R                                     
   226000        24 marta 1998 2.2.6-RELEASE                          
   227000        21 iyulya     2.2.7-RELEASE                          
                 1998          
   227001        21 iyulya     2.2-STABLE posle vyhoda 2.2.7-RELEASE  
                 1998          
   227002        19 sentyabrya 2.2-STABLE posle izmeneniya v          
                 1998          semctl(2)                              
   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         
                 1997          mount(2)                               
   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   
                 1998          ELF                                    
   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   
                 1999          3/4                                    
   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         
                 1999          izmenenij v 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           
                 1999          mkstemp(3) v libc                      
   340000        5 dekabrya    3.4-RELEASE                            
                 1999          
   340001        17 dekabrya   3.4-STABLE                             
                 1999          
   350000        20 iyunya     3.5-RELEASE                            
                 2000          
   350001        12 iyulya     3.5-STABLE                             
                 2000          
   400000        22 yanvarya   4.0-CURRENT posle poyavleniya vetki    
                 1999          3.4                                    
   400001        20 fevralya   4.0-CURRENT posle izmeneniya v rabote  
                 1999          dinamicheskogo komponovschika          
                               4.0-CURRENT posle izmeneniya v         
   400002        13 marta 1999 poryadke sledovaniya                   
                               konstruktorov/destruktorov v C++       
   400003        27 marta 1999 4.0-CURRENT posle poyavleniya funkcii  
                               dladdr(3)                              
                               4.0-CURRENT posle ispravleniya oshibki 
                 5 aprelya     v rabote funkcii                       
   400004        1999          __deregister_frame_info dinamicheskogo 
                               komponovschika (a takzhe 4.0-CURRENT   
                               posle integracii EGCS 1.1.2)           
                 27 aprelya    4.0-CURRENT posle izmeneniya           
   400005        1999          interfejsa 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     4.0-CURRENT posle dobavleniya so_cred  
                 1999          v proverki na urovne soketov           
                 20 iyunya     4.0-CURRENT posle dobavleniya          
   400008        1999          obrabotchika sistemnogo vyzova poll v  
                               libc_r                                 
                 20 iyulya     4.0-CURRENT posle perehoda v yadre s   
   400009        1999          tipa dev_t na ukazatel' struct         
                               specinfo                               
   400010        25 sentyabrya 4.0-CURRENT posle ispravleniya dyry v  
                 1999          bezopasnosti jail(2)                   
   400011        29 sentyabrya 4.0-CURRENT posle izmeneniya v tipe    
                 1999          dannyh sigset_t                        
   400012        15 noyabrya   4.0-CURRENT posle perehoda na          
                 1999          kompilyator GCC 2.95.2                 
                 4 dekabrya    4.0-CURRENT posle poyavleniya          
   400013        1999          dobavlyaemyh obrabotchikov ioctl       
                               rezhima linux                          
   400014        18 yanvarya   4.0-CURRENT posle zaimstvovaniya       
                 2000          OpenSSL                                
                               4.0-CURRENT posle izmeneniya v C++ ABI 
   400015        27 yanvarya   kompilyatora GCC 2.95.2 po umolchaniyu 
                 2000          s -fvtable-thunks na                   
                               -fno-vtable-thunks                     
   400016        27 fevralya   4.0-CURRENT posle zaimstvovaniya       
                 2000          OpenSSH                                
   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  
   400021        8 iyulya 2000 v sheme pometki vypolnimyh fajlov ELF  
                               i vklyucheniya tcsh v kachestve        
                               bazovogo komponenta.                   
   410000        14 iyulya     4.1-RELEASE                            
                 2000          
   410001        29 iyulya     4.1-STABLE posle vyhoda 4.1-RELEASE    
                 2000          
                 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          
                               4.2-STABLE posle ob"edineniya libgcc.a 
   420001        10 yanvarya   i libgcc_r.a, a takzhe                 
                 2001          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     4.3-STABLE posle dobavleniya API       
                 2001          sostoyaniya `elektropitaniya PCI.      
   440000        1 avgusta     4.4-RELEASE                            
                 2001          
   440001        23 oktyabrya  4.4-STABLE posle dobavleniya           
                 2001          d_thread_t.                            
                 4 noyabrya    4.4-STABLE posle izmenenij v strukturu 
   440002        2001          dlya montirovaniya (`eto zatragivaet   
                               KLD fajlovyh sistem).                  
   440003        18 dekabrya   4.4-STABLE posle importa               
                 2001          pol'zovatel'skih komponent smbfs.      
   450000        20 dekabrya   4.5-RELEASE                            
                 2001          
   450001        24 fevralya   4.5-STABLE posle pereimenovaniya       
                 2002          `elementov 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 dlya `etapa podtverzhdeniya     
   450006        1 maya 2002   soedineniya byl ispravlen takim        
                               obrazom, chto on bol'she ne podverzhen 
                               prostym DoS-atakam.                    
   460000        21 iyunya     4.6-RELEASE                            
                 2002          
                               Spravochnaya stranica po sendfile(2) v 
                 21 iyunya     4.6-STABLE privedena v sootvetstvie s  
   460001        2002          dokumentaciej, nikakie zagolovki ne    
                               sravnivayutsya s kolichestvom dannyh,  
                               poslannyh iz fajla.                    
   460002        19 iyulya     4.6.2-RELEASE                          
                 2002          
   460100        26 iyunya     4.6-STABLE                             
                 2002          
   460101        26 iyunya     4.6-STABLE posle perenosa iz -CURRENT  
                 2002          funkcional'nosti `sed -i'.             
                 1 sentyabrya  4.6-STABLE posle MFC mnogih novyh      
   460102        2002          vozmozhnostej pkg_install iz vetki     
                               HEAD.                                  
   470000        8 oktyabrya   4.7-RELEASE                            
                 2002          
   470100        9 oktyabrya   4.7-STABLE                             
                 2002          
                               Nachalo generacii ssylok               
                 10 noyabrya   __std{in,out,err}p vmesto __sF. `Eto   
   470101        2002          perenosit vychislenie vyrazhenij v     
                               std{in,out,err} s momenta kompilyacii  
                               na vremya vypolneniya.                 
   470102        23 yanvarya   4.7-STABLE posle MFC izmenenij v mbuf  
                 2003          dlya zameny m_aux mbufs na m_tag's     
   470103        14 fevralya   V 4.7-STABLE poyavlyaetsya OpenSSL     
                 2003          0.9.7                                  
   480000        30 marta 2003 4.8-RELEASE                            
   480100        5 aprelya     4.8-STABLE                             
                 2003          
                               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 
                 2003          twe.                                   
   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                            
                 11 avgusta    4.10-STABLE posle vypolneniya MFC      
   491101        2004          revizii 20040629 paketnogo             
                               instrumentariya                        
                 16 noyabrya   4.10-STABLE posle ispravleniya oshibki 
   491102        2004          v VM pri otvyazyvanii (unwire)         
                               fiktivnyh stranic                      
   492000        17 dekabrya   4.11-RELEASE                           
                 2004          
   492100        17 dekabrya   4.11-STABLE                            
                 2004          
                 18 aprelya    4.11-STABLE posle dobavleniya          
   492101        2006          katalogov libdata/ldconfig v fajly     
                               mtree.                                 
   500000        13 marta 2000 5.0-CURRENT                            
                               5.0-CURRENT posle dobavleniya          
                               dopolnitel'nyh polej v zagolovke ELF i 
   500001        18 aprelya    izmeneniya metoda pometki              
                 2000          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     5.0-CURRENT posle dobavleniya          
                 2000          interfejsov AGP.                       
   500007        29 iyunya     5.0-CURRENT posle obnovleniya Perl do  
                 2000          versii 5.6.0                           
   500008        7 iyulya 2000 5.0-CURRENT posle obnovleniya koda     
                               KAME do versii 2000/07.                
   500009        14 iyulya     5.0-CURRENT posle izmenenij v          
                 2000          ether_ifattach() i ether_ifdetach().   
                               5.0-CURRENT posle vozvrata v           
                 16 iyulya     nastrojkah utility mtree, primenyaemyh 
   500010        2000          po umolchaniyu, obratno k original'nym 
                               i dobavleniya flaga -L dlya perehoda   
                               po simvolicheskim ssylkam.             
   500011        18 iyulya     5.0-CURRENT posle izmeneniya v API     
                 2000          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      
                 2000          SMPng.                                 
   500014        4 yanvarya    5.0-CURRENT posle perenosa             
                 2001          <sys/select.h> v <sys/selinfo.h>.      
                               5.0-CURRENT posle ob"edineniya         
   500015        10 yanvarya   libgcc.a i libgcc_r.a, a takzhe        
                 2001          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          
                 18 fevralya   ispol'zovanie struct xucred vmesto     
   500017        2001          struct ucred dlya stabilizacii         
                               `eksportiruemogo API yadra dlya mountd 
                               i t.d.                                 
                               5.0-CURRENT posle dobavleniya          
   500018        24 fevralya   peremennoj make CPUTYPE                
                 2001          pozvolyayuschej 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     5.0-CURRENT posle izmeneniya imen dlya 
                 2001          lokalizacii.                           
   500021        22 iyunya     5.0-CURRENT posle importa Bzip2.       
                 2001          Takzhe oznachaet udalenie S/Key.       
   500022        12 iyulya     5.0-CURRENT s podderzhkoj SSE.         
                 2001          
   500023        14 sentyabrya 5.0-CURRENT posle KSE `Etap 2.         
                 2001          
   500024        1 oktyabrya   5.0-CURRENT posle d_thread_t i         
                 2001          perenosa 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          
                 9 oktyabrya   ispol'zovanie po umolchaniyu XFree86 4 
   500026        2001          dlya postroeniya paketov i posle       
                               dobavleniya v biblioteku libc novoj    
                               funkcii strnstr().                     
                 10 oktyabrya  5.0-CURRENT posle dobavleniya v        
   500027        2001          biblioteku libc novoj funkcii          
                               strcasestr().                          
   500028        14 dekabrya   5.0-CURRENT posle importa              
                 2001          pol'zovatel'skih komponent 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   
   500030        2002          tipa fflags_t, sootvetstvuyuschij      
                               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                           
                 3 aprelya     5.0-CURRENT posle togo kak peremennaya 
   500033        2002          rc.conf(5) sendmail_enable stala       
                               obrabatyvat' znachenie NONE.           
                 30 aprelya    5.0-CURRENT posle dobavleniya v        
   500034        2002          funkciyu 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       
   500038        24 iyulya     izmeneny tipy nekotoryh zapisej v      
                 2002          strukture sockbuf, a sama struktura    
                               byla reorganizovana.                   
                               5.0-CURRENT posle importa GCC 3.2.1.   
                               Takzhe posle togo, kak v fajlah        
                               zagolovkov bylo prekrascheno           
                 1 sentyabrya  ispol'zovanie _BSD_FOO_T_ i nachato    
   500039        2002          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 
                 20 sentyabrya v diskovyh funkciyah, sdelannyh dlya   
   500040        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.      
                               5.0-CURRENT posle obnovleniya Binutils 
   500042        15 oktyabrya  2.13, kuda vklyuchena novaya           
                 2002          `emulyaciya FreeBSD, vec i format      
                               vydachi.                               
                               5.0-CURRENT posle dobavleniya prostyh  
   500043        1 noyabrya    zaglushek pthread_XXX k biblioteke     
                 2002          libc, 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           
                 2003          interfejsa d_mmap_t.                   
                               5.0-CURRENT posle togo, kak bylo       
                 26 fevralya   vneseno izmenenie, pri kotorom         
   500103        2003          taskqueue_swi rabotaet bez Giant, i    
                               bylo dobavleno taskqueue_swi_giant,    
                               rabotayuschee s Giant.                 
                 27 fevralya   cdevsw_add() i cdevsw_remove() bol'she 
   500104        2003          ne 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                   
                 9 aprelya     5.0-CURRENT posle togo, kak funkciya   
   500111        2003          usbhid(3) byla privedena v             
                               sootvetstvie s NetBSD                  
                 17 aprelya    5.0-CURRENT posle novoj realizacii NSS 
   500112        2003          i 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.                            
                 29 iyunya     5.1-CURRENT posle korrektirovki smysla 
   501101        2003          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     5.1-CURRENT posle integracii           
                 2003          sn`epshota GCC 3.3.1-pre 20030711.     
   501104        5 avgusta     5.1-CURRENT osle izmenenij 3ware API v 
                 2003          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      
                 17 sentyabrya <dev/sio/sioreg.h> v                   
   501107        2003          <dev/ic/ns16550.h>. A takzhe moment,   
                               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)                              
                 28 sentyabrya 5.1-CURRENT posle izmenenij operacij   
   501110        2003          po umolchaniyu dlya open i close v     
                               cdevsw                                 
   501111        16 oktyabrya  5.1-CURRENT posle izmenenij v          
                 2003          strukture cdevsw                       
                 16 oktyabrya  5.1-CURRENT posle dobavleniya          
   501112        2003          mnozhestvennogo nasledovaniya dlya     
                               kobj                                   
   501113        31 oktyabrya  5.1-CURRENT posle izmeneniya if_xname  
                 2003          v strukture ifnet                      
                 16 noyabrya   5.1-CURRENT posle izmenenij,           
   501114        2003          svyazannyh s 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.   
                               5.2-CURRENT posle smeny ispol'zuemoj   
   502102        30 yanvarya   po umolchaniyu biblioteki raboty s     
                 2004          potokami vypolneniya libc_r na         
                               libpthread.                            
   502103        21 fevralya   5.2-CURRENT posle bol'shogo izmeneniya 
                 2004          v 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            
   502105        5 marta 2004  pereopredelena dlya yazyka C kak       
                               ((void *)0), chto privelo k            
                               uvelicheniyu kolichestva               
                               preduprezhdenij kompilyatora.          
                               5.2-CURRENT posle ustanovki i          
   502106        8 marta 2004  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.             
                               5.2-CURRENT posle vvedeniya            
   502109        22 marta 2004 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            
                 2004          programmnogo interfejsa getvfsent(3)   
   502112        13 aprelya    5.2-CURRENT posle dobavleniya          
                 2004          direktivy .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     5.2-CURRENT posle importa ALTQ         
                 2004          infrastruktury.                        
                               5.2-CURRENT posle togo, kak            
   502115        14 iyunya     sema_timedwait(9) stal vozvraschat' 0  
                 2004          v sluchae uspeha i ne nulevoj kod      
                               oshibki v sluchae neudachi.            
                 16 iyunya     5.2-CURRENT posle togo, kak kernel tip 
   502116        2004          dev_t stal ukazatelem na struct cdev   
                               *.                                     
   502117        17 iyunya     5.2-CURRENT posle togo, kak kernel tip 
                 2004          udev_t izmenilsya na dev_t.            
                 17 iyunya     5.2-CURRENT posle dobavleniya          
   502118        2004          podderzhki CLOCK_VIRTUAL i CLOCK_PROF  
                               v clock_gettime(2) i clock_getres(2).  
                 22 iyunya     5.2-CURRENT posle togo, kak byl        
   502119        2004          provedion peresmotr klonirovaniya      
                               setevogo interfejsa.                   
                               5.2-CURRENT posle obnovleniya          
   502120        2 iyulya 2004 paketnogo instrumentariya do revizii   
                               20040629.                              
                               5.2-CURRENT posle otmetki, chto kod    
   502121        9 iyulya 2004 Bluetooth ne ogranichen arhitekturoj   
                               i386.                                  
                               5.2-CURRENT posle poyavleniya          
   502122        11 iyulya     otladochnoj infrastruktury KDB,        
                 2004          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 `eto delaet        
   502123        12 iyulya     vflush. Struktura kinfo_proc teper'    
                 2004          imeet ukazatel' na pol'zovatel'skie    
                               dannye. Smena realizacii X po          
                               umolchaniyu na xorg bylo sdelano v     
                               `eto zhe vremya.                       
                 24 iyulya     5.2-CURRENT posle razdeleniya sposobov 
   502124        2004          zapuska skriptov rc.d iz portov i      
                               imeyuschih status legacy.              
   502125        28 iyulya     5.2-CURRENT posle otmeny predyduschego 
                 2004          izmeneniya.                            
                 31 iyulya     5.2-CURRENT posle udaleniya            
   502126        2004          kmem_alloc_pageable() i importa gcc    
                               3.4.2.                                 
                               5.2-CURRENT posle izmeneniya v API     
   502127        2 avgusta     yadra UMA, razreshayuschego            
                 2004          konstruktoram/inicializatoram          
                               (ctors/inits) vozvraschat' neudachu.   
                               5.2-CURRENT posle izmeneniya v         
   502128        8 avgusta     signature vfs_mount, a takzhe posle    
                 2004          obschej zameny PRISON_ROOT na          
                               SUSER_ALLOWJAIL v API suser(9).        
   503000        23 avgusta    5.3-BETA/RC pered izmeneniem v pfil    
                 2004          API                                    
   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         
   503101        2004          funkciyu strftime(3) parametrov        
                               otstupa v stile glibc.                 
   503102        13 fevralya   5.3-STABLE posle vypolneniya MFC       
                 2005          importa nc(1) iz OpenBSD.              
                               5.4-PRERELEASE posle vypolneniya MFC   
                 27 fevralya   ispravlenij v <src/include/stdbool.h>  
   503103        2005          i <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     5.4-RELEASE.                           
                 2005          
   504100        3 aprelya     5.4-STABLE posle otdeleniya vetki      
                 2005          RELENG_5_4                             
                               5.4-STABLE posle uvelicheniya          
   504101        11 maya 2005  znacheniya po umolchaniyu razmera      
                               stekov potoka.                         
   504102        24 iyunya     5.4-STABLE posle dobavleniya sha256    
                 2005          
   504103        3 oktyabrya   5.4-STABLE posle vypolneniya MFC       
                 2005          if_bridge                              
   504104        13 oktyabrya  5.4-STABLE posle vypolneniya MFC       
                 2005          bsdiff i portsnap                      
   504105        17 yanvarya   5.4-STABLE posle vypolneniya MFC       
                 2006          izmeneniya 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         
                 2004          vklyucheniya v yadro PFIL_HOOKS.       
                               6.0-CURRENT posle pervonachal'nogo     
                 30 avgusta    dobavleniya ifi_epoch v strukturu      
   600002        2004          if_data. Vypolnen vozvrat posle        
                               neskol'kih dnej. Ne ispol'zujte `eto   
                               znachenie.                             
                 8 sentyabrya  6.0-CURRENT posle povtornogo           
   600003        2004          dobavleniya polya ifi_epoch v          
                               strukturu if_data.                     
   600004        29 sentyabrya 6.0-CURRENT posle dobavleniya v pfil   
                 2004          API struktury inpcb kak parametra.     
   600005        5 oktyabrya   6.0-CURRENT posle dobavleniya v        
                 2004          newsyslog parametra "-d DESTDIR".      
                 4 noyabrya    6.0-CURRENT posle dobavleniya v        
   600006        2004          funkciyu 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          
   600008        25 yanvarya   funkciyah VOP_*VOBJECT() i poyavleniya 
                 2005          flaga 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     
                 2005          OpenBSD.                               
   600011        12 fevralya   6.0-CURRENT posle udaleniya podobiya   
                 2005          podderzhki SVID2 matherr().            
                 15 fevralya   6.0-CURRENT posle uvelicheniya         
   600012        2005          znacheniya 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.    
                               6.0-CURRENT posle izmeneniya polya     
   600015        25 fevralya   ifi_epoch v strukture if_data so       
                 2005          vremeni chasov na vremya s momenta     
                               starta.                                
                 26 fevralya   6.0-CURRENT posle izmeneniya formata   
   600016        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 
                 2005          v /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      
                 2005          icmphdr.                               
   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.                             
                 10 iyunya     6.0-CURRENT posle peremescheniya       
   600031        2005          struktury ifnet iz struktury drajverov 
                               softc.                                 
   600032        11 iyulya     6.0-CURRENT posle importa libpcap      
                 2005          v0.9.1.                                
                               6.0-STABLE posle uvelicheniya nomera   
   600033        25 iyulya     versii vseh dinamicheskih bibliotek,   
                 2005          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  
   600101        2005          iz 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       
                 2006          izmeneniya ldconfig_local_dirs.        
   600105        26 fevralya   6.0-STABLE posle dobavleniya           
                 2006          podderzhki 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     6.1-STABLE posle importa csup.         
                 2006          
   601102        11 iyulya     6.1-STABLE posle obnovleniya iwi(4).   
                 2006          
                 17 iyulya     6.1-STABLE posle obnovleniya rezolvera 
   601103        2006          do BIND9 i dobavleniya reenterabel'noj 
                               versii funkcij netdb.                  
                               6.1-STABLE posle vklyucheniya          
   601104        8 avgusta     podderzhki DSO (dinamicheskih          
                 2006          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    
                 2006          Wi-Spy.                                
   602102        28 dekabrya   6.2-STABLE posle dobavleniya           
                 2006          pci_find_extcap().                     
                               6.2-STABLE posle vypolneniya MFC       
   602103        16 yanvarya   izmeneniya dlsym dlya poiska           
                 2007          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.            
                 6 aprelya     6.2-STABLE posle vypolneniya MFC       
   602107        2007          ncurses 5.6 i podderzhki dvuhbajtovyh  
                               simvolov.                              
                               6.2-STABLE posle vypolneniya MFC       
                 11 aprelya    dobavleniya periferijnogo ustrojstva   
   602108        2007          CAM 'SG', kotoroe realizuet            
                               podmnozhestvo API skvoznyh             
                               (passthrough) ustrojstv Linux SCSI SG. 
   602109        17 aprelya    6.2-STABLE posle vypolneniya MFC       
                 2007          readline 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.                     
                 11 iyunya     6.2-STABLE posle vypolneniya MFC       
   602111        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 ctype. Zanovo             
   602113        25 oktyabrya  skompilirovannye dvoichnye fajly,      
                 2007          ssylayuschiesya na ctype.h, mogut      
                               potrebovat' novyj simvol               
                               __mb_sb_limit, nedostupnyj na bolee    
                               staryh sistemah.                       
   602114        30 oktyabrya  6.2-STABLE posle vosstanovleniya       
                 2007          obratnoj 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          
                 7 dekabrya    6.3-STABLE posle ispravleniya          
   603101        2007          podderzhki 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.                       
                 15 iyunya     6.3-STABLE posle vypolneniya MFC       
   603104        2008          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     7.0-CURRENT.                           
                 2005          
                               7.0-CURRENT posle uvelicheniya nomera  
   700001        23 iyulya     versii vseh dinamicheskih bibliotek,   
                 2005          dlya kotoryh on ne byl izmenen s       
                               RELENG_5.                              
                 13 avgusta    7.0-CURRENT posle dobavleniya          
   700002        2005          argumenta uchetnyh dannyh v            
                               obrabotchik sobytij dev_clone.         
   700003        25 avgusta    7.0-CURRENT posle dobavleniya          
                 2005          memmem(3) v libc.                      
                 30 oktyabrya  7.0-CURRENT posle izmeneniya           
   700004        2005          parametrov funkcii yadra solisten(9)   
                               dlya polucheniya parametra backlog.    
                 11 noyabrya   7.0-CURRENT posle izmeneniya           
   700005        2005          IFP2ENADDR(), kotoryj teper'           
                               vozvraschaet ukazatel' na IF_LLADDR(). 
                 11 noyabrya   7.0-CURRENT posle dobavleniya polya    
   700006        2005          if_addr v struct ifnet i udaleniya     
                               IFP2ENADDR().                          
                 2 dekabrya    7.0-CURRENT posle vnedreniya scenariev 
   700007        2005          iz 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       
                 2005          ELF-64 i simvol'nogo versionirovaniya. 
                               7.0-CURRENT posle dobavleniya          
                 20 dekabrya   drajverov hostb i vgapci, dobavleniya  
   700010        2005          pci_find_extcap() i izmeneniya v       
                               drajverah AGP, chtoby bol'she ne       
                               otobrazhat' v pamyat' aperture.        
                 31 dekabrya   7.0-CURRENT posle zameny tv_sec na     
   700011        2005          time_t 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 dlya podderzhki          
   700013        12 yanvarya   /compat/linux/etc/ld.so.cache v        
                 2006          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          
                 2006          fcloseall(3) v libc.                   
   700017        13 maya 2006  7.0-CURRENT posle udaleniya ip6fw.     
   700018        15 iyulya     7.0-CURRENT posle importa snd_emu10kx. 
                 2006          
   700019        29 iyulya     7.0-CURRENT posle importa OpenSSL      
                 2006          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      
                 2006          0.9.4 i tcpdump 3.9.4.                 
                               7.0-CURRENT posle izmeneniya dlsym     
   700022        9 sentyabrya  dlya poiska zaproshennogo simvola v    
                 2006          ukazannom dso i ego neyavnyh           
                               zavisimostyah.                         
                 23 sentyabrya 7.0-CURRENT posle dobavleniya novyh    
   700023        2006          zvukovyh IOCTL dlya API mikshera       
                               OSSv4.                                 
   700024        28 sentyabrya 7.0-CURRENT posle importa OpenSSL      
                 2006          0.9.8d.                                
   700025        11 noyabrya   7.0-CURRENT posle dobavleniya libelf.  
                 2006          
                 26 noyabrya   7.0-CURRENT posle znachitel'nyh        
   700026        2006          izmenenij v sysctl zvukovoj            
                               podsistemy.                            
   700027        30 noyabrya   7.0-CURRENT posle dobavleniya kvirka   
                 2006          Wi-Spy.                                
   700028        15 dekabrya   7.0-CURRENT posle dobavleniya vyzovov  
                 2006          sctp v libc.                           
                               7.0-CURRENT posle udaleniya            
   700029        26 yanvarya   inkapsulyacii tunnelya IPIP            
                 2007          (VIFF_TUNNEL) iz koda IPv4 multicast   
                               forwarding.                            
                 7 fevralya    7.0-CURRENT posle zameny realizacii    
   700030        2007          GNU 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().                     
                               7.0-CURRENT posle dobavleniya          
   700035        26 marta 2007 mehanizma uvedomlenij pri izmenenii    
                               chastoty CPU.                          
   700036        6 aprelya     7.0-CURRENT posle importa fajlovoj     
                 2007          sistemy ZFS.                           
                               7.0-CURRENT posle dobavleniya          
                 8 aprelya     periferijnogo ustrojstva CAM 'SG',     
   700037        2007          kotoroe realizuet podmnozhestvo API    
                               skvoznyh (passthrough) ustrojstv Linux 
                               SCSI SG.                               
                               7.0-CURRENT posle izmeneniya           
   700038        30 aprelya    getenv(3), putenv(3), setenv(3) i      
                 2007          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 nomera versii dlya vseh      
   700043        21 maya 2007  dinamicheskih bibliotek, dlya kotoryh  
                               `eto ne bylo sdelano s momenta         
                               RELENG_6.                              
                               7.0-CURRENT posle izmeneniya parametra 
   700044        7 iyunya 2007 dlya vn_open()/VOP_OPEN() vmesto       
                               fajlovogo deskriptora na struct file   
                               *.                                     
                               7.0-CURRENT posle izmeneniya           
                               pam_nologin(8) dlya obespecheniya      
   700045        10 iyunya     funkcii upravleniya uchetnymi          
                 2007          zapisyami vmesto funkcii               
                               autentifikacii dlya infrastruktury     
                               PAM.                                   
   700046        11 iyunya     7.0-CURRENT posle obnovleniya          
                 2007          podderzhki besprovodnoj svyazi 802.11. 
   700047        11 iyunya     7.0-CURRENT posle dobavleniya          
                 2007          vozmozhnostej TCP LRO interfejsa.      
                               7.0-CURRENT posle dobavleniya v stek   
                               IPv4 podderzhki API RFC 3678.          
                               Unasledovannoe ot RFC 1724 povedenie   
   700048        12 iyunya     ioctl IP_MULTICAST_IF teper' udaleno;  
                 2007          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          
   (ne izmeneno)               podderzhki 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          
                 2007          podderzhki 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 
   700055        28 oktyabrya  ABI dlya IOCTL'ej PCIOCGETCONF,        
                 2007          PCIOCREAD i 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       
                 2008          podderzhki write(2) dlya psm(4).       
   700107        20 aprelya    7.0-STABLE posle vypolneniya MFC       
                 2008          komandy 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     7.0-STABLE posle vypolneniya MFC       
                 2008          NFS-klienta lockd.                     
                 20 avgusta    7.0-STABLE posle dobavleniya           
   700111        2008          podderzhki fizicheski protyazhennyh    
                               jumbo-frejmov.                         
   700112        27 avgusta    7.0-STABLE posle vypolneniya MFC       
                 2008          podderzhki 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           
                 2009          podderzhki cpuctl(4).                  
                 7 fevralya    7.1-STABLE posle bekporta jail s       
   701103        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    
   701105        12 marta 2009 dlya vozmozhnosti vydeleniya segmentov 
                               razdelyaemoj pamyati SysV bol'shego    
                               razmera na 64-bitnyh arhitekturah.     
                               7.1-STABLE posle bekporta ispravleniya 
   701106        14 marta 2009 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 ispol'zovaniya vspomogatel'noj    
   702101        15 maya 2009  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     7.2-STABLE posle vypolneniya MFC       
                 2009          sistemnogo vyzova closefrom.           
   702105        31 iyulya     7.2-STABLE posle vypolneniya MFC       
                 2009          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      
                 2007          0.9.8 i 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                     
                 12 noyabrya   8.0-CURRENT posle peremescheniya       
   800004        2007          drajvera agp(4) iz src/sys/pci v       
                               src/sys/dev/agp                        
   800005        4 dekabrya    8.0-CURRENT posle izmenenij v          
                 2007          raspredelitele jumbo-frejmov.          
                 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            
                 2007          kdb_enter() 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).                            
                 13 yanvarya   8.0-CURRENT posle izmeneniya           
   800011        2008          prototipov VOP_LOCK(9) i               
                               VOP_UNLOCK(9).                         
                               8.0-CURRENT posle poyavleniya          
   800012        19 yanvarya   lockmgr_recursed(9), BUF_RECURSED(9) i 
                 2008          BUF_ISLOCKED(9) i udaleniya            
                               BUF_REFCNT().                          
   800013        23 yanvarya   8.0-CURRENT posle poyavleniya          
                 2008          kodirovki ``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   
                 2008          dlya struktur fts(3).                  
   800016        1 fevralya    8.0-CURRENT posle dobavleniya          
                 2008          parametra 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          
                 2008          m_collapse.                            
                               8.0-CURRENT posle dobavleniya          
                 9 fevralya    podderzhki tekuschego rabochego        
   800019        2008          kataloga, kornevogo 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).        
                               8.0-CURRENT posle izmeneniya           
   800023        25 fevralya   prototipov lockstatus(9) i             
                 2008          VOP_ISLOCKED(9), a imenno udaleniya    
                               argumenta struct thread.               
                               8.0-CURRENT posle sokrascheniya        
                               funkcij lockwaiters i BUF_LOCKWAITERS, 
   800024        1 marta 2008  izmeneniya 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     8.0-CURRENT posle poyavleniya funkcij  
                 2008          rw_try_rlock(9) i rw_try_wlock(9).     
   800031        6 aprelya     8.0-CURRENT posle poyavleniya funkcij  
                 2008          lockmgr_rw i lockmgr_args_rw.          
                               8.0-CURRENT posle realizacii openat i  
                               svyazannyh s nim sistemnyh vyzovov,    
   800032        8 aprelya     poyavleniya flaga O_EXEC dlya open(2)  
                 2008          i obespecheniya sootvetstvuyuschih     
                               sistemnyh vyzovov dlya                 
                               linux-sovmestimosti.                   
                               8.0-CURRENT posle dobavleniya          
                               podderzhki write(2) dlya psm(4) v      
   800033        8 aprelya     nativnom operacionnom rezhime. Teper'  
                 2008          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.                             
                               8.0-CURRENT posle pereklyucheniya      
   800036        20 aprelya    besprovodnoj svyazi 802.11 na          
                 2008          podderzhku multi-bss (takzhe           
                               izvestnogo kak vaps).                  
                               8.0-CURRENT posle dobavleniya          
   800037        9 maya 2008   podderzhki 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     8.0-CURRENT posle udaleniya sgtty.     
                 2008          
   800040        26 iyunya     8.0-CURRENT klientom NFS lockd v       
                 2008          yadre.                                 
                 22 iyulya     8.0-CURRENT posle dobavleniya          
   800041        2008          arc4random_buf(3) i                    
                               arc4random_uniform(3).                 
   800042        8 avgusta     8.0-CURRENT posle dobavleniya          
                 2008          cpuctl(4).                             
                               8.0-CURRENT posle izmeneniya v bpf(4)  
   800043        13 avgusta    dlya ispol'zovaniya edinstvennogo uzla 
                 2008          ustrojstva vmesto klonirovaniya        
                               ustrojstv.                             
                               8.0-CURRENT posle kommita pervyh       
                               shagov proekta vimage s                
   800044        17 avgusta    pereimenovaniem global'nyh peremennyh  
                 2008          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 
                 2008          v 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,     
                 2008          VSGID i VSUID.                         
                               8.0-CURRENT posle preobrazovaniya koda 
                               montirovaniya NFS v yadre dlya         
   800048        16 sentyabrya prinyatiya individual'nyh opcij        
                 2008          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     
                 2008          kesha buferov.                         
   800051        23 oktyabrya  8.0-CURRENT posle udaleniya makrosov   
                 2008          MALLOC(9) i FREE(9).                   
                 28 oktyabrya  8.0-CURRENT posle poyavleniya          
   800052        2008          accmode_t i 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   
                 22 noyabrya   ocheredej peredachi dlya               
   800054        2008          podderzhivayuschih `eto kart, a takzhe 
                               realizacii ring-buffer bez             
                               ispol'zovaniya sinhronizacii dlya      
                               bolee `effektivnogo upravleniya        
                               ocheredyami paketov v drajverah.       
                 27 noyabrya   8.0-CURRENT posle dobavleniya          
   800055        2008          podderzhki hwpmc(4) dlya Intel(TM)     
                               Core, Core2 i Atom.                    
                 29 noyabrya   8.0-CURRENT posle poyavleniya jail s   
   800056        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.     
                               8.0-CURRENT posle izmeneniya konfiga   
   800063        18 fevralya   GENERIC dlya ispol'zovaniya steka      
                 2009          USB2, a takzhe posle dobavleniya       
                               fdevname(3).                           
                 23 fevralya   8.0-CURRENT posle togo, kak            
   800064        2009          peremeschen 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           
                 2009          upravleniya i raskladki USB v devfs.   
                               8.0-CURRENT posle dobavleniya          
   800067        28 fevralya   getdelim(), getline(), stpncpy(),      
                 2009          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  
   800070        9 marta 2009  i Source-Specific Multicast (SSM) v    
                               stek IPv4.                             
                               8.0-CURRENT posle primeneniya patcha k 
   800071        14 marta 2009 gcc 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           
   800073        18 marta 2009 dinamicheskogo 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.                 
                 6 aprelya     8.0-CURRENT posle izmeneniya raskladki 
   800075        2009          v strukturah vnet_net, vnet_inet i     
                               vnet_ipfw.                             
   800076        9 aprelya     8.0-CURRENT posle dobavleniya profilej 
                 2009          zaderzhki v dummynet.                  
   800077        14 aprelya    8.0-CURRENT posle udaleniya            
                 2009          VOP_LEASE() i vop_vector.vop_lease.    
                               8.0-CURRENT posle dobavleniya polej    
                               struktury rt_weight v struktury        
                 15 aprelya    rt_metrics i rt_metrics_lite,          
   800078        2009          izmeneniya raskladki struktury         
                               rt_metrics_lite. Sdelano, no zatem     
                               otmeneno uvelichenie nomera versii     
                               RTM_VERSION.                           
                 15 aprelya    8.0-CURRENT posle dobavleniya          
   800079        2009          ukazatelej na 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           
                 2009          nizkourovnego API Bluetooth HCI.       
   800084        29 aprelya    8.0-CURRENT izmenenij v IPv6 SSM i     
                 2009          MLDv2.                                 
                 30 aprelya    8.0-CURRENT posle vklyucheniya         
   800085        2009          podderzhki sborki yadra VIMAGE s odnim 
                               aktivnym obrazom.                      
                               8.0-CURRENT posle dobavleniya v        
   800086        8 maya 2009   patch(1) podderzhki strok vvoda        
                               proizvol'noj dliny.                    
                               8.0-CURRENT posle nekotoryh izmenenij  
                               v KPI VFS. Parametr potoka udalen iz   
                               chastej FSD v VFS. Funkciyam VFS_*     
   800087        11 maya 2009  `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 
   800095        30 maya 2009  paketov. Takzhe 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.     
                               8.0-CURRENT posle poyavleniya hukov    
   800097        8 iyunya 2009 dlya destruktorov i infrastruktury     
                               vnet.                                  
                               8.0-CURRENT posle poyavleniya          
                               obnaruzheniya puti vyzovov ot          
   800097        11 iyunya     ishodyaschego na vhodyaschij dlya      
                 2009          netgraph i postanovleniya v ochered',  
                               chto takzhe izmenyaet raskladku        
                               struktury thread.                      
   800098        14 iyunya     8.0-CURRENT posle importa OpenSSL      
                 2009          0.9.8k.                                
                               8.0-CURRENT posle obnovleniya NGROUPS  
   800099        22 iyunya     i peremescheniya virtualizacii         
                 2009          marshrutov v svoj sobstvennyj modul'   
                               VImage.                                
   800100        24 iyunya     8.0-CURRENT posle izmeneniya ABI dlya  
                 2009          SYSVIPC.                               
                 29 iyunya     8.0-CURRENT posle udaleniya simvol'nyh 
   800101        2009          ustrojstv /dev/net/*, ispol'zuemyh     
                               otdel'no dlya kazhdogo interfejsa.     
                 12 iyulya     8.0-CURRENT posle dobavleniya          
   800102        2009          rezervnyh polej v strukturah sackhint, 
                               tcpcb i tcpstat.                       
                               8.0-CURRENT posle zameny struktury     
   800103        13 iyulya     tcpopt na strukturu toeopt v           
                 2009          interfejse drajvera TOE v TCP          
                               syncache.                              
                               8.0-CURRENT posle dobavleniya          
   800104        14 iyulya     raspredelitelya, individual'nogo dlya  
                 2009          kazhdogo vnet, na osnove svyazannogo   
                               mnozhestva.                            
                               8.0-CURRENT posle uvelicheniya nomera  
   800105        19 iyulya     versii dlya vseh dinamicheskih         
                 2009          bibliotek, dlya kotoryh ne vklyucheno  
                               simvol'noe versionirovanie.            
   800106        24 iyulya     8.0-CURRENT posle poyavleniya tipa     
                 2009          ob"ekta VM OBJT_SG.                    
                 2 avgusta     8.0-CURRENT posle osvobozhdeniya       
   800107        2009          podsistemy newbus ot Giant cherez      
                               dobavlenie newbus sxlock.              
   800108        21 noyabrya   8.0-STABLE posle realizacii            
                 2009          kevent-fil'tra 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           
                 2010          sigpause(3).                           
                               8.0-STABLE posle dobavleniya ioctl     
                 25 fevralya   SIOCGIFDESCR i SIOCSIFDESCR k setevym  
   800503        2010          interfejsam. `Eti ioctl mozhno         
                               ispol'zovat' dlya opisaniya            
                               interfejsov v duhe OpenBSD.            
                               8.0-STABLE posle vypolneniya MFC       
   800504        1 marta 2010  importa x86emu iz OpenBSD,             
                               programmnogo `emulyatora real'nogo     
                               rezhima dlya CPU x86.                  
                               8.0-STABLE posle vypolneniya MFC       
   800505        18 maya 2010  dobavleniya liblzma, xz, xzdec, i      
                               lzmainfo.                              
   801000        14 iyunya     8.1-RELEASE                            
                 2010          
   801500        14 iyunya     8.1-STABLE posle 8.1-RELEASE.          
                 2010          
                               8.1-STABLE posle izmeneniya KBI v      
   801501        3 noyabrya    strukture 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             
   802501        28 fevralya   portirovaniya izmenenij DTrace,        
                 2011          vklyuchayuschih 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             
   802508        8 iyunya 2011 obrabotchika sobytij schedtail i       
                               dobavleniya metoda sv_schedtail v      
                               strukturu sysvec.                      
                 14 iyulya     8.2-STABLE posle obratnogo             
   802509        2011          portirovaniya podderzhki SSSE3 v       
                               binutils.                              
   802510        19 iyulya     8.2-STABLE posle dobavleniya flaga     
                 2011          RFTSIGZMB v rfork(2).                  
                               8.2-STABLE posle dobavleniya           
                 9 sentyabrya  avtomaticheskogo raspoznavaniya        
   802511        2011          ustrojstv USB mass storage, kotorye ne 
                               podderzhivayut komandu SCSI no         
                               synchronize cache.                     
                 10 sentyabrya 8.2-STABLE posle obratnogo             
   802512        2011          portirovaniya pererabotannogo          
                               auto-quirk.                            
                 25 oktyabrya  8.2-STABLE posle obratnogo             
   802513        2011          portirovaniya flaga MAP_PREFAULT_READ  
                               v mmap(2).                             
                 16 noyabrya   8.2-STABLE posle obratnogo             
   802514        2011          portirovaniya sistemnogo vyzova        
                               posix_fallocate(2).                    
                 6 yanvarya    8.2-STABLE posle obratnogo             
   802515        2012          portirovaniya sistemnogo vyzova        
                               posix_fadvise(2).                      
   802516        16 yanvarya   8.2-STABLE posle obratnogo             
                 2012          portirovaniya 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).               
   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          
                 2009          sigpause(3) i podderzhki PIE v csu.    
                 6 dekabrya    9.0-CURRENT posle dobavleniya libulog  
   900004        2009          i ego 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           
   900006        2010          prototipov scandir(3) i alphasort(3)   
                               dlya sootvetstviya SUSv4.              
                               9.0-CURRENT posle udaleniya utmp(5) i  
                 13 yanvarya   dobavleniya utmpx (smotrite            
   900007        2010          getutxent(3)) 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    
                 26 yanvarya   SIOCGIFDESCR i SIOCSIFDESCR k setevym  
   900009        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     9.0-CURRENT posle dobavleniya Clang.   
                 2010          
   900015        22 iyulya     9.0-CURRENT posle importa BSD grep.    
                 2010          
   900016        28 iyulya     9.0-CURRENT posle dobavleniya mti_zone 
                 2010          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        
                 2010          mmap(2) flaga MAP_PREFAULT_READ.       
                               9.0-CURRENT posle dobavleniya v sbufs  
   900020        9 sentyabrya  funkcional'nosti osusheniya, chto      
                 2010          takzhe izmenilo raskladku v strukture  
                               sbuf.                                  
                 13 sentyabrya 9.0-CURRENT posle dobavleniya v DTrace 
   900021        2010          podderzhki trassirovki                 
                               pol'zovatel'skih processov.            
                 2 oktyabrya   9.0-CURRENT posle dobavleniya BSDL     
   900022        2010          utilit 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          
                 2010          modul'nogo kontrolya peregruzki.       
                               9.0-CURRENT posle poyavleniya          
                               protokola dlya podderzhki              
   900026        30 noyabrya   rasshiritelej SAS (SMP, Serial         
                 2010          Management Protocol) i blokov          
                               upravleniya (CCB) CAM XPT_SMP_IO i     
                               XPT_GDEV_ADVINFO.                      
   900027        5 dekabrya    9.0-CURRENT posle dobavleniya log2 v   
                 2010          libm.                                  
                 21 dekabrya   9.0-CURRENT posle dobavleniya KPI      
   900028        2010          Hhook (Helper Hook), Khelp (Kernel     
                               Helpers) i Object Specific Data (OSD). 
                               9.0-CURRENT posle izmeneniya steka TCP 
                               dlya vzaimodejstviya s modulyami Khelp 
   900029        28 dekabrya   cherez vspomogatel'nye tochki svyazi i 
                 2010          hraneniya dannyh urovnya setevogo      
                               soedineniya v upravlyayuschem bloke    
                               TCP.                                   
   900030        12 yanvarya   9.0-CURRENT posle obnovleniya          
                 2011          libdialog do 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 
                 2011          do versii 2.17.50.                     
   900034        8 marta 2011  9.0-CURRENT posle izmenenij v struct   
                               sysvec (sv_schedtail).                 
                               9.0-CURRENT posle obnovleniya bazovyh  
   900035        29 marta 2011 gcc i libstdc++ do poslednih revizij,  
                               vypolnennyh pod licenziej GPLv2.       
                 18 aprelya    9.0-CURRENT posle udaleniya libobjc i  
   900036        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.                      
                               9.0-CURRENT posle dobavleniya flaga s  
   900038        22 maya 2011  parametrami blokirovki v               
                               VFS_FHTOVP(9).                         
   900039        28 iyunya     9.0-CURRENT posle importa pf iz        
                 2011          OpenBSD 4.5.                           
                 19 iyulya     Znachenie MAXCPU, ispol'zuemoe po      
   900040        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.                       
                               Uvelichen nomer versii dlya            
   900042        28 avgusta    dinamicheskih bibliotek, ABI kotoryh   
                 2011          byl izmenen, v ramkah podgotovki k     
                               9.0.                                   
                               Dobavleno avtomaticheskoe              
   900043        2 sentyabrya  raspoznavanie ustrojstv USB mass       
                 2011          storage, kotorye ne 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          
                 6 yanvarya    9.0-STABLE posle obratnogo             
   900501        2012          portirovaniya sistemnogo vyzova        
                               posix_fadvise(2).                      
   900502        16 yanvarya   9.0-STABLE posle obratnogo             
                 2012          portirovaniya 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     
                               parametrov soketa tcp(4):              
   900503        13 marta 2012 TCP_KEEPINIT, TCP_KEEPIDLE,            
                               TCP_KEEPINTVL i TCP_KEEPCNT (rev.      
                               232945).                               
   1000000       26 sentyabrya 10.0-CURRENT.                          
                 2011          
   1000001       4 noyabrya    10.0-CURRENT posle dobavleniya         
                 2011          sistemnogo vyzova posix_fadvise(2).    
                               10.0-CURRENT posle opredeleniya        
                               bulevyh true/false v sys/types.h,      
   1000002       12 dekabrya   znachenie sizeof(bool) moglo           
                 2011          izmenit'sya (rev. 228444). 10-CURRENT  
                               posle poyavleniya xlocale.h (rev.      
                               r227753).                              
                               10.0-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).   
                 1 yanvarya    10.0-CURRENT posle udaleniya skpc(9) i 
   1000004       2012          dobavleniya of memcchr(9) (rev.        
                               229200).                               
                               10.0-CURRENT posle udaleniya           
   1000005       16 yanvarya   podderzhki ioctl SIOCSIFADDR,          
                 2012          SIOCSIFNETMASK, SIOCSIFBRDADDR,        
                               SIOCSIFDSTADDR (rev. 230207).          
                               10.0-CURRENT posle poyavleniya         
   1000006       26 yanvarya   asinhronnyh uvedomlenij o nalichii     
                 2012          vhodnyh dannyh v urovne cam(4) (rev.   
                               230590).                               
                               10.0-CURRENT posle poyavleniya novyh   
                 5 fevralya    parametrov soketa tcp(4):              
   1000007       2012          TCP_KEEPINIT, TCP_KEEPIDLE,            
                               TCP_KEEPINTVL i TCP_KEEPCNT (rev.      
                               231025).                               
                               10.0-CURRENT posle poyavleniya novogo  
   1000008       11 fevralya   rasshiryaemogo interfejsa sysctl(3)    
                 2012          NET_RT_IFLISTL dlya polucheniya spiska 
                               adresov (rev. 231505).                 
   1000010       31 marta 2012 10.0-CURRENT posle ispravlenij v       
                               xlocale (rev. 233757).                 
   1000011       16 aprelya    10.0-CURRENT posle importa LLVM/Clang  
                 2012          3.1 trunk r154661 (rev. 234353).       
   1000012       2 maya 2012   10.0-CURRENT posle importa jemalloc    
                               (rev. 234924).                         
   1000013       22 maya 2012  10.0-CURRENT posle importa byacc (rev. 
                               235788).                               
   1000014       27 iyunya     10.0-CURRENT posle izmeneniya sort po  
                 2012          umolchaniyu na BSD sort (rev. 237629). 
   1000015       12 iyulya     10.0-CURRENT posle importa OpenSSL     
                 2012          1.0.1c (rev. 238405).                  
                 13 iyulya     10-CURRENT posle ispravleniya          
   (ne izmeneno) 2012          regressii v LLVM/Clang 3.1 (rev.       
                               238429).                               

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

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

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

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

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

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

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

   Peremennaya                        Opisanie                        
   ARCH        Arhitektura mashiny v vide, poluchaemom po komande     
               uname -m (naprimer, i386)                              
   OPSYS       Tip operacionnoj sistemy, poluchaemyj po komande uname 
               -s (naprimer, FreeBSD)                                 
   OSREL       Versiya reliza operacionnoj sistemy (naprimer, 2.1.5   
               ili 2.2.7)                                             
   OSVERSION   Versiya operacionnoj sistemy v vide chisla, ta zhe,    
               chto i   __FreeBSD_version.                            
   LOCALBASE   Koren' dereva ``local'' (naprimer, /usr/local/)        
   PREFIX      Kuda, sobstvenno, ustanavlivaetsya port (obratites' k  
               podrobnoj informacii o PREFIX).                        

     Zamechanie: Esli vy zadaete peremennye USE_IMAKE ili MASTERDIR,
     to 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

 # only one shlib version number for ELF
 .if ${PORTOBJFORMAT} == "elf"
 TCL_LIB_FILE=  ${TCL_LIB}.${SHLIB_MAJOR}
 .else
 TCL_LIB_FILE=  ${TCL_LIB}.${SHLIB_MAJOR}.${SHLIB_MINOR}
 .endif

 # software already makes link for ELF, but not for a.out
 post-install:
 .if ${PORTOBJFORMAT} == "aout"
        ${LN} -sf liblinpack.so.1.0 ${PREFIX}/lib/liblinpack.so
 .endif

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

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

12.7. 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.8. 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.9. 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.10. 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.11. Biblioteki potokov

   Vo FreeBSD biblioteka potokov obyazana byt' skomponovana s
   ispolnyaemymi fajlami s ispol'zovaniem special'nogo flaga
   komponovschika -pthread. Esli port nastaivaet na pryamoj
   komponovke s -lpthread ili -lc_r, sozdajte patch s ispol'zovaniem
   peremennoj PTHREAD_LIBS, predusmotrennoj infrastrukturoj portov.
   Obychno dlya `etoj peremennoj ustanovleno znachenie -pthread, no
   na opredelennyh arhitekturah i versiyah FreeBSD ona mozhet imet'
   drugie znacheniya, po`etomu ne zadavajte -pthread v patchah
   staticheski i vsegda ispol'zujte PTHREAD_LIBS.

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

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

12.12. 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.13. README.html

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

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

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

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

         Zamechanie: 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.14.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.15. 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.16. 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 Razd. 9.1). 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.17. 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.18. 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.19. 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 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 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, odnako `eto ne tak vo FreeBSD.

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

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

12.20. 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.]
 # New ports collection makefile for:   xdvi
 [strochka "version required" neobhodima tol'ko togda, kogda peremennaya
 PORTVERSION nedostatochno konkretna dlya opisaniya porta.]
 # Date created:                26 May 1995
 [`Eto chelovek, kotoryj sdelal pervonachal'nyj port dlya FreeBSD, v chastnosti,
 tot, kto sozdal pervuyu versiyu `etogo fajla Makefile.  Zapomnite, chto pozzhe
 pri obnovlenii porta `eta stroka menyat'sya ne dolzhna.]
 # Whom:                        Satoshi Asami <asami@FreeBSD.org>
 #
 # $FreeBSD$
 [ ^^^^^^^^^ `Eta stroka budet avtomaticheski zamenena so strochkoj RCS ID
 sistemoj 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 PORTVERSIONA, za nim sleduet CATEGORIES, a zatem
  MASTER_SITES, za kotorym mozhet idti MASTER_SITE_SUBDIR.
  PKGNAMEPREFIX i PKGNAMESUFFIX, esli oni nuzhny, sleduyut za nimi.
  Zatem sleduet DISTNAME, EXTRACT_SUFX i/ili DISTFILES, a potom, esli `eto nuzhno,
  EXTRACT_ONLY.]
 PORTNAME=      xdvi
 PORTVERSION=   18.2.]
 CATEGORIES=    print
 [ne zabyvajte lidiruyuschij sl`esh ("/")!
  esli vy ne ispol'zuete makrosy MASTER_SITE_*]
 MASTER_SITES=  ${MASTER_SITE_XCONTRIB}
 MASTER_SITE_SUBDIR= applications
 PKGNAMEPREFIX= ja-
 DISTNAME=      xdvi-pl18
 [zadajte `eto, esli ishodnyj kod postavlyaetsya ne v vide
  standartnogo fajla ".tar.gz"]
 EXTRACT_SUFX=  .tar.Z

 [sekciya patchej -- mozhet byt' pustoj]
 PATCH_SITES=   ftp://ftp.sra.co.jp/pub/X11/japanese/
 PATCHFILES=    xdvi-18.patch1.gz xdvi-18.patch2.gz

 [soprovozhdayuschij; *obyazatel'noe pole*!  `Eto chelovek, 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
 LIB_DEPENDS=   Xpm:${PORTSDIR}/graphics/xpm

 [`etot razdel dlya ostal'nyh standartnyh peremennyh iz bsd.port.mk, krome
  teh, chto perechisleny vyshe]
 [Esli port zadaet voprosy vo vremya `etapov nastrojki, postroeniya,
  ustanovki...]
 IS_INTERACTIVE=        yes
 [Esli raspakovka proishodit v katalog, otlichnyh ot ${DISTNAME}...]
 WRKSRC=                ${WRKDIR}/xdvi-new
 [Esli patchi delalis' ne otnositel'no ${WRKSRC}, vam, mozhet byt', ne
  pridetsya izmenyat' `etu peremennuyu]
 PATCH_DIST_STRIP=      -p1
 [Esli port trebuet skripta "configure", generiruemogo GNU-versiej programmy
  autoconf]
 GNU_CONFIGURE= yes
 [Esli dlya postroeniya portu trebuetsya GNU-versiya utility make, a ne
  /usr/bin/make...]
 USE_GMAKE=     yes
 [Esli `eto prilozhenie X i trebuet zapuska "xmkmf -a"...]
 USE_IMAKE=     yes
 [i tak dalee]

 [V pravilah nizhe ispol'zuyutsya nestandartnye peremennye]
 MY_FAVORITE_RESPONSE=  "yeah, right"

 [teper' special'nye pravila, v poryadke ih vyzova]
 pre-fetch:
         ya chto-to vykachivayu, tochno

 post-patch:
         mne koe-chto sdelat' posle primeneniya patcha, velikolepno

 pre-install:
         i potom esche koe-chto pered ustanovkoj, ogo

 [i, nakonec, `epilog]
 .include <bsd.port.mk>
    

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

                        Glava 14. Aktualizaciya

   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.

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

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.

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

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