]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - share/man/man7/ports.7
date.1: Fix some style issues and examples
[FreeBSD/FreeBSD.git] / share / man / man7 / ports.7
1 .\"
2 .\" Copyright (c) 1997 David E. O'Brien
3 .\"
4 .\" All rights reserved.
5 .\"
6 .\" Redistribution and use in source and binary forms, with or without
7 .\" modification, are permitted provided that the following conditions
8 .\" are met:
9 .\" 1. Redistributions of source code must retain the above copyright
10 .\"    notice, this list of conditions and the following disclaimer.
11 .\" 2. Redistributions in binary form must reproduce the above copyright
12 .\"    notice, this list of conditions and the following disclaimer in the
13 .\"    documentation and/or other materials provided with the distribution.
14 .\"
15 .\" THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY EXPRESS OR
16 .\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
17 .\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
18 .\" IN NO EVENT SHALL THE DEVELOPERS BE LIABLE FOR ANY DIRECT, INDIRECT,
19 .\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
20 .\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
21 .\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
22 .\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23 .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
24 .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25 .\"
26 .\" $FreeBSD$
27 .\"
28 .Dd July 22, 2021
29 .Dt PORTS 7
30 .Os
31 .Sh NAME
32 .Nm ports
33 .Nd contributed applications
34 .Sh DESCRIPTION
35 The
36 .Fx
37 Ports Collection
38 offers a simple way to compile and install third party applications.
39 It is also used to build packages, to be installed using
40 .Xr pkg 8 .
41 .Pp
42 The ports tree, typically located at
43 .Pa /usr/ports ,
44 consists of subdirectories, one for each category; those in turn contain
45 individual ports.
46 Each port is a directory with metadata and patches necessary to make
47 the original application source code compile and run on
48 .Fx .
49 Compiling an application is as simple as typing
50 .Dq Li "make build"
51 in the port directory.
52 The
53 .Pa Makefile
54 automatically fetches the
55 application source code, either from a local disk or the network, unpacks it,
56 applies the patches, and compiles it.
57 It also recursively handles dependencies \(em other pieces of software
58 the port depends on in order to build and work.
59 Afterwards,
60 .Dq Li "make install"
61 installs the application.
62 .Pp
63 The
64 .Fx
65 Ports Collection is maintained in several branches, which differ mostly
66 by versions of software provided: the
67 .Em main
68 branch contains all the latest changes and corresponds to the
69 .Em latest
70 package set, while the
71 .Em quarterly
72 branches only provide critical fixes.
73 The
74 .Em main
75 branch can be cloned and updated from the Git repository located at:
76 .Pp
77 .Lk https://git.FreeBSD.org/ports.git
78 .Pp
79 so eg:
80 .Pp
81 .Cm git clone https://git.FreeBSD.org/ports.git
82 .Pp
83 The
84 .Em quarterly
85 branches can be found in Git as branches like
86 .Pa yyyyQn
87 , where
88 .Em yyyy
89 indicates the year and
90 .Em n
91 indicates the quarter
92 .Po 1 to 4
93 .Pc , eg:
94 .Pp
95 .Cm git clone -b 2021Q2 https://git.FreeBSD.org/ports.git
96 .Pp
97 It is generally a good idea to use the
98 .Nm
99 branch that matches the
100 .Xr pkg 8
101 repository being used.
102 By default, for
103 .Fx CURRENT
104 the
105 .Xr pkg 8
106 is configured to install packages built from the
107 .Em main
108 branch, while for
109 .Fx STABLE
110 or RELEASE versions it is configured to install packages built from
111 the latest
112 .Em quarterly
113 branch.
114 Currently configured
115 .Xr pkg 8
116 repository can be verified by looking at the
117 .Em url
118 field in
119 .Cm pkg -vv
120 output.
121 .Pp
122 For more information about using ports, see the
123 .Dq "Packages and Ports" section
124 in
125 .Sm off
126 .%B "The FreeBSD Handbook"
127 .No \&:
128 .Sm on
129 .Pp
130 .Lk https://docs.FreeBSD.org/en/books/handbook/ports/
131 .Pp
132 For information about creating new ports, see
133 .Sm off
134 .%B "The Porter's Handbook"
135 .No \&:
136 .Sm on
137 .Pp
138 .Lk https://docs.FreeBSD.org/en/books/porters-handbook/
139 .Sh TARGETS
140 Some of the
141 .Xr make 1
142 targets work recursively through subdirectories.
143 This lets you, for example, install all of the
144 .Dq Li biology
145 ports with one command.
146 The targets that do this are
147 .Cm build , checksum , clean , configure ,
148 .Cm depends , extract , fetch , install ,
149 and
150 .Cm package .
151 .Pp
152 The following targets will be run automatically by each proceeding
153 target in order.
154 That is,
155 .Cm build
156 will be run (if necessary) by
157 .Cm install ,
158 and so on all the way to
159 .Cm fetch .
160 Usually, you will only use the
161 .Cm install
162 target.
163 .Bl -tag -width ".Cm configure"
164 .It Cm config
165 Configure
166 .Va OPTIONS
167 for this port using
168 .Xr dialog4ports 1 .
169 .It Cm fetch
170 Fetch all of the files needed to build this port from the sites
171 listed in
172 .Va MASTER_SITES
173 and
174 .Va PATCH_SITES .
175 See
176 .Va FETCH_CMD , MASTER_SITE_OVERRIDE
177 and
178 .Va MASTER_SITE_BACKUP .
179 .It Cm checksum
180 Verify that the fetched distfile's checksum matches the one the port was
181 tested against.
182 If the distfile's checksum does not match, it also fetches the distfiles
183 which are missing or failed the checksum calculation.
184 Defining
185 .Va NO_CHECKSUM
186 will skip this step.
187 .It Cm depends
188 Install
189 (or compile if only compilation is necessary)
190 any dependencies of the current port.
191 When called by the
192 .Cm extract
193 or
194 .Cm fetch
195 targets, this is run in piecemeal as
196 .Cm fetch-depends , build-depends ,
197 etc.
198 Defining
199 .Va NO_DEPENDS
200 will skip this step.
201 .It Cm extract
202 Expand the distfile into a work directory.
203 .It Cm patch
204 Apply any patches that are necessary for the port.
205 .It Cm configure
206 Configure the port.
207 Some ports will ask you questions during this stage.
208 See
209 .Va INTERACTIVE
210 and
211 .Va BATCH .
212 .It Cm build
213 Build the port.
214 This is the same as calling the
215 .Cm all
216 target.
217 .It Cm install
218 Install the port and register it with the package system.
219 This is all you really need to do.
220 .It Cm install-missing-packages
221 Install missing dependencies from packages instead of building them.
222 .El
223 .Pp
224 The following targets are not run during the normal install process.
225 .Bl -tag -width ".Cm fetch-recursive"
226 .It Cm showconfig
227 Display
228 .Va OPTIONS
229 config for this port.
230 .It Cm showconfig-recursive
231 Display
232 .Va OPTIONS
233 config for this port and all its dependencies.
234 .It Cm rmconfig
235 Remove
236 .Va OPTIONS
237 config for this port.
238 .It Cm rmconfig-recursive
239 Remove
240 .Va OPTIONS
241 config for this port and all its dependencies.
242 .It Cm config-conditional
243 Skip the ports which have already had their
244 .Va OPTIONS
245 configured.
246 .It Cm config-recursive
247 Configure
248 .Va OPTIONS
249 for this port and all its dependencies using
250 .Xr dialog4ports 1 .
251 .It Cm fetch-list
252 Show list of files to be fetched in order to build the port.
253 .It Cm fetch-recursive
254 Fetch the distfiles of the port and all its dependencies.
255 .It Cm fetch-recursive-list
256 Show list of files that would be retrieved by
257 .Cm fetch-recursive .
258 .It Cm run-depends-list , build-depends-list
259 Print a list of all the compile and run dependencies, and dependencies
260 of those dependencies, by port directory.
261 .It Cm all-depends-list
262 Print a list of all dependencies for the port.
263 .It Cm pretty-print-run-depends-list , pretty-print-build-depends-list
264 Print a list of all the compile and run dependencies, and dependencies
265 of those dependencies, by port name and version.
266 .It Cm missing
267 Print a list of missing dependencies to be installed for the port.
268 .It Cm clean
269 Remove the expanded source code.
270 This recurses to dependencies unless
271 .Va NOCLEANDEPENDS
272 is defined.
273 .It Cm distclean
274 Remove the port's distfiles and perform the
275 .Cm clean
276 target.
277 The
278 .Cm clean
279 portion recurses to dependencies unless
280 .Va NOCLEANDEPENDS
281 is defined, but the
282 .Cm distclean
283 portion never recurses
284 (this is perhaps a bug).
285 .It Cm reinstall
286 Use this to restore a port after using
287 .Xr pkg-delete 8
288 when you should have used
289 .Cm deinstall .
290 .It Cm deinstall
291 Remove an installed port from the system, similar to
292 .Xr pkg-delete 8 .
293 .It Cm deinstall-all
294 Remove all installed ports with the same
295 .Va PKGORIGIN
296 from the system.
297 .It Cm package
298 Make a binary package for the port.
299 The port will be installed if it has not already been.
300 The package is a
301 .Pa .pkg
302 file that you can use to
303 install the port on other machines with
304 .Xr pkg-add 8 .
305 If the directory specified by
306 .Va PACKAGES
307 does not exist, the package will be put in
308 .Pa /usr/ports/category/port/work/pkg .
309 See
310 .Va PKGREPOSITORY
311 and
312 .Va PKGFILE
313 for more information.
314 .It Cm package-recursive
315 Like
316 .Cm package ,
317 but makes a package for each depending port as well.
318 .It Cm package-name
319 Prints the name with version of the port.
320 .It Cm readmes
321 Create a port's
322 .Pa README.html .
323 This can be used from
324 .Pa /usr/ports
325 to create a browsable web of all ports on your system!
326 .It Cm search
327 Search the
328 .Pa INDEX
329 file for the pattern specified by the
330 .Va key
331 (searches the port name, comment, and dependencies),
332 .Va name
333 (searches the port name only),
334 .Va path
335 (searches the port path),
336 .Va info
337 (searches the port info),
338 .Va maint
339 (searches the port maintainer),
340 .Va cat
341 (searches the port category),
342 .Va bdeps
343 (searches the port build-time dependency),
344 .Va rdeps
345 (searches the port run-time dependency),
346 .Va www
347 (searches the port web site)
348 .Xr make 1
349 variables, and their exclusion counterparts:
350 .Va xname , xkey
351 etc.
352 For example, one would type:
353 .Pp
354 .Dl "cd /usr/ports && make search name=query"
355 .Pp
356 to find all ports whose
357 name matches
358 .Dq Li query .
359 Results include the matching ports' path, comment, maintainer,
360 build dependencies, and run dependencies.
361 .Bd -literal -offset indent
362 cd /usr/ports && make search name=pear- \e
363     xbdeps=apache
364 .Ed
365 .Pp
366 To find all ports whose
367 names contain
368 .Dq Li pear-
369 and which do not have apache
370 listed in build-time dependencies.
371 .Bd -literal -offset indent
372 cd /usr/ports && make search name=pear- \e
373     xname='ht(tp|ml)'
374 .Ed
375 .Pp
376 To find all ports whose names contain
377 .Dq Li pear- ,
378 but not
379 .Dq Li html
380 or
381 .Dq Li http .
382 .Bd -literal -offset indent
383 make search key=apache display=name,path,info keylim=1
384 .Ed
385 .Pp
386 To find ports that contain
387 .Dq Li apache
388 in either of the name, path, info
389 fields, ignore the rest of the record.
390 .Pp
391 By default the search is not case-sensitive.
392 In order to make it case-sensitive you can use the
393 .Va icase
394 variable:
395 .Bd -literal -offset indent
396 make search name=p5-R icase=0
397 .Ed
398 .It Cm quicksearch
399 Reduced
400 .Cm search
401 output.
402 Only display name, path and info.
403 .It Cm describe
404 Generate a one-line description of each port for use in the
405 .Pa INDEX
406 file.
407 .It Cm maintainer
408 Display the port maintainer's email address.
409 .It Cm index
410 Create
411 .Pa /usr/ports/INDEX ,
412 which is used by the
413 .Cm pretty-print-*
414 and
415 .Cm search
416 targets.
417 Running the
418 .Cm index
419 target will ensure your
420 .Pa INDEX
421 file is up to date with your ports tree.
422 .It Cm fetchindex
423 Fetch the
424 .Pa INDEX
425 file from the
426 .Fx
427 cluster.
428 .El
429 .Sh ENVIRONMENT
430 You can change all of these.
431 .Bl -tag -width ".Va MASTER_SITES"
432 .It Va PORTSDIR
433 Location of the ports tree.
434 This is
435 .Pa /usr/ports
436 by default.
437 .It Va WRKDIRPREFIX
438 Where to create any temporary files.
439 Useful if
440 .Va PORTSDIR
441 is read-only (perhaps mounted from a CD-ROM).
442 .It Va DISTDIR
443 Where to find/put distfiles, normally
444 .Pa distfiles/
445 in
446 .Va PORTSDIR .
447 .It Va SU_CMD
448 Command used to elevate privilege to configure and install a port.
449 The unprivileged user must have write access to
450 .Va WRKDIRPREFIX
451 and
452 .Va DISTDIR .
453 The default is
454 .Ql /usr/bin/su root -c .
455 Many users set it to
456 .Ql /usr/local/bin/sudo -E sh -c
457 for convenience.
458 .It Va PACKAGES
459 Used only for the
460 .Cm package
461 target; the base directory for the packages tree, normally
462 .Pa packages/
463 in
464 .Va PORTSDIR .
465 If this directory exists, the package tree will be (partially) constructed.
466 This directory does not have to exist; if it does not, packages will be
467 placed into the current directory, or you can define one of
468 .Bl -tag -width ".Va PKGREPOSITORY"
469 .It Va PKGREPOSITORY
470 Directory to put the package in.
471 .It Va PKGFILE
472 The full path to the package.
473 .El
474 .It Va LOCALBASE
475 Where existing things are installed and where to search for files when
476 resolving dependencies (usually
477 .Pa /usr/local ) .
478 .It Va PREFIX
479 Where to install this port (usually set to the same as
480 .Va LOCALBASE ) .
481 .It Va MASTER_SITES
482 Primary sites for distribution files if not found locally.
483 .It Va PATCH_SITES
484 Primary locations for distribution patch files if not found
485 locally.
486 .It Va MASTER_SITE_FREEBSD
487 If set, go to the master
488 .Fx
489 site for all files.
490 .It Va MASTER_SITE_OVERRIDE
491 Try going to these sites for all files and patches, first.
492 .It Va MASTER_SITE_BACKUP
493 Try going to these sites for all files and patches, last.
494 .It Va RANDOMIZE_MASTER_SITES
495 Try the download locations in a random order.
496 .It Va MASTER_SORT
497 Sort the download locations according to user supplied pattern.
498 Example:
499 .Dl .dk .sunet.se .se dk.php.net .no .de heanet.dl.sourceforge.net
500 .It Va MASTER_SITE_INDEX
501 Where to get
502 .Pa INDEX
503 source built on
504 .Fx
505 cluster (for
506 .Cm fetchindex
507 target).
508 Defaults to
509 .Pa https://www.FreeBSD.org/ports/ .
510 .It Va FETCHINDEX
511 Command to get
512 .Pa INDEX
513 (for
514 .Cm fetchindex
515 target).
516 Defaults to
517 .Dq Li "fetch -am" .
518 .It Va NOCLEANDEPENDS
519 If defined, do not let
520 .Cm clean
521 recurse to dependencies.
522 .It Va FETCH_CMD
523 Command to use to fetch files.
524 Normally
525 .Xr fetch 1 .
526 .It Va FORCE_PKG_REGISTER
527 If set, overwrite any existing package registration on the system.
528 .It Va INTERACTIVE
529 If defined, only operate on a port if it requires interaction.
530 .It Va BATCH
531 If defined, only operate on a port if it can be installed 100% automatically.
532 .It Va DISABLE_VULNERABILITIES
533 If defined, disable check for security vulnerabilities using
534 .Xr pkg-audit 8
535 when installing new ports.
536 .It Va NO_IGNORE
537 If defined, allow installation of ports marked as
538 .Aq Va FORBIDDEN .
539 The default behavior of the Ports framework is to abort when the
540 installation of a forbidden port is attempted.
541 Of course, these ports may not work as expected, but if you really know
542 what you are doing and are sure about installing a forbidden port, then
543 .Va NO_IGNORE
544 lets you do it.
545 .It Va NO_CHECKSUM
546 If defined, skip verifying the port's checksum.
547 .It Va TRYBROKEN
548 If defined, attempt to build a port even if it is marked as
549 .Aq Va BROKEN .
550 .It Va PORT_DBDIR
551 Directory where the results of configuring
552 .Va OPTIONS
553 are stored.
554 Defaults to
555 .Pa /var/db/ports .
556 Each port where
557 .Va OPTIONS
558 have been configured will have a uniquely named sub-directory, containing a
559 single file
560 .Pa options .
561 .El
562 .Sh MAKE VARIABLES
563 The following list provides a name and short description for many of the
564 variables that are used when building ports.
565 More information on these and other related variables may be found in
566 .Pa ${PORTSDIR}/Mk/*
567 and the
568 .Fx
569 Porter's Handbook.
570 .Bl -tag -width "WITH_CCACHE_BUILD"
571 .It Va WITH_DEBUG
572 .Pq Vt bool
573 If set, debugging symbols are installed for ports binaries.
574 .It Va WITH_DEBUG_PORTS
575 A list of origins for which to set
576 .Va WITH_DEBUG .
577 .It Va DEBUG_FLAGS
578 .Pq Default: Ql -g
579 Additional
580 .Va CFLAGS
581 to set when
582 .Va WITH_DEBUG
583 is set.
584 .It Va WITH_CCACHE_BUILD
585 .Pq Vt bool
586 If set, enables the use of
587 .Xr ccache 1
588 for building ports.
589 .It Va CCACHE_DIR
590 Which directory to use for the
591 .Xr ccache 1
592 data.
593 .El
594 .Sh FILES
595 .Bl -tag -width ".Pa /usr/ports/Mk/bsd.port.mk" -compact
596 .It Pa /usr/ports
597 The default ports directory.
598 .It Pa /usr/ports/Mk/bsd.port.mk
599 The big Kahuna.
600 .El
601 .Sh EXAMPLES
602 .Bl -tag -width 0n
603 .It Sy Example 1\&: No Building and Installing a Port
604 .Pp
605 The following command builds and installs Emacs.
606 .Bd -literal -offset 2n
607 .Li # Ic cd /usr/ports/editors/emacs
608 .Li # Ic make install
609 .Ed
610 .It Sy Example 2\&: No Installing Dependencies with Xr pkg 8
611 .Pp
612 The following example shows how to build and install a port without having to
613 build its dependencies.
614 Instead, the dependencies are downloaded via
615 .Xr pkg 8 .
616 .Bd -literal -offset 2n
617 .Li # Ic make install-missing-packages
618 .Li # Ic make install
619 .Ed
620 .Pp
621 It is especially useful, when the dependencies are costly
622 in time and resources to build
623 .Pq like Pa lang/rust .
624 The drawback is that
625 .Xr pkg 8
626 offers only packages built with the default set of
627 .Va OPTIONS .
628 .It Sy Example 3\&: No Building a Non-Default Flavor of a Port
629 .Pp
630 The following command builds a non-default flavor of a port.
631 (In this case
632 .Pa devel/py-pip
633 is going to be built with Python 3.7 support.)
634 .Bd -literal -offset 2n
635 .Li # Ic cd /usr/ports/devel/py-pip
636 .Li # Ic env FLAVOR=py37 make build
637 .Ed
638 .It Sy Example 4\&: No Setting Ports Options via Xr make.conf 5
639 .Pp
640 The following lines present various ways of configuring ports options via
641 .Xr make.conf 5
642 (as an alternative to, e.g., running
643 .Dq Li make config ) :
644 .Bd -literal -offset 2n
645 # Enable NLS for all ports unless configured otherwise
646 # using the options dialog.
647 OPTIONS_SET=            NLS
648 # Disable DOCS for all ports overriding the options set
649 # via the options dialog.
650 OPTIONS_UNSET_FORCE=    DOCS
651 # Disable DOCS and EXAMPLES for the shells/zsh port.
652 shells_zsh_UNSET=       DOCS EXAMPLES
653 .Ed
654 .Pp
655 These and other options-related variables are documented in
656 .Pa /usr/ports/Mk/bsd.options.mk .
657 .It Sy Example 5\&: No Setting Xr make 1 Variables for Specific Ports via Xr make.conf 5
658 .Pp
659 The following example shows how to set arbitrary
660 .Xr make 1
661 variables only specific ports:
662 .Bd -literal -offset 2n
663 # Set DISABLE_MAKE_JOBS for the lang/rust port:
664 \&.if ${.CURDIR:M*/lang/rust}
665 DISABLE_MAKE_JOBS=      yes
666 TRYBROKEN=              yes
667 \&.endif
668 .Ed
669 .It Sy Example 6\&: No Debugging Ports
670 By default ports are built and packaged without debugging support (e.g.,
671 debugging symbols are stripped from binaries, optimization flags are used for
672 compiling, verbose logging is disabled).
673 Whether ports are built with debugging symbols can be controlled by the
674 settings in
675 .Xr make.conf 5 ,
676 e.g.,
677 .Bd -literal -offset 2n
678 # Enable debugging for all ports.
679 WITH_DEBUG=             yes
680 # Enable debugging for selected ports.
681 WITH_DEBUG_PORTS=       mail/dovecot security/krb5
682 .Ed
683 .Pp
684 It is also possible to use the debug variables on the command line:
685 .Bd -literal -offset 2n
686 .Li # Ic make -DWITH_DEBUG DEBUG_FLAGS="-g -O0" build
687 .Ed
688 .Pp
689 See the
690 .Sx MAKE VARIABLES
691 section to learn more about the debug variables.
692 .Pp
693 To understand the details of what happens when the debug variables are set it
694 is best to consult the files located at
695 .Pa ${PORTSDIR}/Mk/*
696 .Po Pa bsd.port.mk
697 in particular
698 .Pc .
699 .Pp
700 If debugging is enabled for a specific port, the ports framework will:
701 .Bl -bullet
702 .It
703 Add
704 .Va DEBUG_FLAGS
705 (defaults to
706 .Ql -g )
707 to
708 .Va CFLAGS .
709 .It
710 Try to prevent the binaries from being stripped (including checking the install
711 target to replace
712 .Ql install-strip
713 with
714 .Ql install ) .
715 Whether a binary has been stripped can be checked with
716 .Xr file 1 .
717 .It
718 Try to enable other debugging features like debug build type or verbose logging.
719 However, this is port-specific and the ports framework might not be aware of
720 each supported debugging feature a given piece of software has to offer).
721 .El
722 .Sh SEE ALSO
723 .Xr make 1 ,
724 .Xr make.conf 5 ,
725 .Xr development 7 ,
726 .Xr pkg 7
727 .Pp
728 Additional developer documentation:
729 .Bl -dash -width "" -offset indent
730 .It
731 .Xr portlint 1
732 .It
733 .Pa /usr/ports/Mk/bsd.port.mk
734 .El
735 .Pp
736 Additional user documentation:
737 .Bl -dash -width "" -offset indent
738 .It
739 .Xr pkg 8
740 .It
741 .Lk "https://www.FreeBSD.org/ports" "Searchable index of all ports"
742 .El
743 .Sh HISTORY
744 The Ports Collection
745 appeared in
746 .Fx 1.0 .
747 It has since spread to
748 .Nx
749 and
750 .Ox .
751 .Sh AUTHORS
752 .An -nosplit
753 This manual page was originated by
754 .An David O'Brien .
755 .Sh BUGS
756 Ports documentation is split over four places \(em
757 .Pa /usr/ports/Mk/bsd.port.mk ,
758 .%B "The Porter's Handbook" ,
759 the
760 .Dq "Packages and Ports"
761 chapter of
762 .%B "The FreeBSD Handbook" ,
763 and
764 this manual page.